![](https://csdnimg.cn/release/download_crawler_static/88182480/bg1.jpg)
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 个中断的中断服务程序入口地址。每个入口地址对应一段代码,
即中断服务程序。