从今天起,豆芽有空也尽己所能,帮助一下大家。
面经来源:https://www.nowcoder.com/discuss/689866?source_id=discuss_experience_nctrack&channel=-1
1. C语言结构体怎么定义节省内存
在保证值域足够的情况下,用小字节变量代替大字节变量,如用short替代int,float替代double
将各成员按其所占字节数从小到大声明,以尽量减少中间的填补空间(字节对齐)。
可以取消字节对齐,
#pragma pack(1)
,当然这会牺牲效率,谨慎采用。
2. 单片机main函数之前做了哪些工作
主要完成两部分工作,一个是硬件执行环境,如建立中断向量表、初始化堆栈寄存器、关闭看门狗、初始化内部或者外部RAM等,另一个是软件环境,如加载C库环境、ZI(未初始化的内存变量)、初始化堆栈指针等。
3. 程序是怎么编译成bin文件的
GCC的objcopy工具可以实现这个功能,具体方法是:
先用gcc把douya.c编译成douya.o:
gcc -c douya.c -o douya.o
将douya.o转为bin文件:
objcopy -O binary douya.o douya.bin
4. 用的什么烧录软件
STC型单片机:STC-ICP
STM32一般利用仿真器烧录:连接STLINK仿真器,使用ST-LINK Utility软件烧录
5. 写过驱动程序吗
一个驱动程序就是一个函数和数据结构的集合,它的目的是建立内核和实际硬件之间的连接,从而提供通过内核访问底层硬件的上层API接口。内核用这个接口请求驱动程序控制设备的I/O操作。
一般本科搞过单片机的同学,都写过直流电机、步进电机的驱动程序,可以说说,涉及到PWM
6. 说一下中断的原理
中断是指当出现需要时,CPU暂时停止当前进程的执行,转而执行处理新情况的中断处理程序。当执行完该中断处理程序后,则重新从刚才停下的位置继续当前进程的运行。
为了区分不同的中断,每个设备有自己的中断号。系统有0-255一共256个中断。系统有一张中断向量表,用于存放256个中断的中断服务程序入口地址。每个入口地址对应一段代码,即中断服务程序。
7. 是怎么进入到中断服务程序的
为了区分不同的中断,每个设备有自己的中断号。系统有0-255一共256个中断。系统有一张中断向量表,用于存放256个中断的中断服务程序入口地址。每个入口地址对应一段代码,即中断服务程序。
找到入口中断地址,也就进入服务程序了。
8. 中断开始前要进行些什么操作
保存现场。保存当前的PC值到R14,寄存器R14常用作链接寄存器(LR,Link Register),当进入子程序时,常用来保存PC(Program Counter,程序计数器) 的返回值。保存PC值后,接着保存当前的程序运行状态到SPSR(Storage Program Status Register,程序状态备份寄存器)。
9. 会C++吗
不会(不给面试官任何机会)
开玩笑的,得说会,具体看我博客面经学习。
10. 介绍一下stm32
STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM控制器。
我们以STM32F103为例,其具备以下资源:
- 内核:ARM32位Cortex-M3 CPU,最高工作频率72MHz,1.25DMIPSMHz。单周期乘法和硬件除法。
- 存储器:片上集成512KB的Flash存储器。6-64KB的SRAM存储器。
- 低功耗:3种低功耗模式:休眠,停止,待机模式。
- 调试模式:串行调试(SWD)和JTAG接口。
- DMA:12通道DMA控制器。
- 支持的外设:定时器,ADC,DAC,SPI,IIC和UART。
- 2个12位的us级的AD转换器(16通道):AD测量范围:0-3.6 V。双采样和保持能力。片上集成一个温度传感器。
- 2通道12位DA转换器:STM32F103xC,STM32F103xD,STM32F103xE独有。
- 最多高达112个的快速IO端口
- 最多多达11个定时器:
2个看门狗定时器(独立看门狗和窗口看门狗)。 - 最多多达13个通信接口:2个IIC接口(SMBusPMBus)。5个USART接口(ISO7816接口,LIN,IrDA兼容,调试控制)。3个SPI接口(18 Mbits),两个和IIS复用。CAN接口(2.0B)。USB 2.0全速接口。SDIO接口。
以上所有题的答案其实都来源于我的博客面经,欢迎大家围观:https://blog.nowcoder.net/jiangwenbo
全部评论
(0) 回帖