嵌入式大厂面经 10(持续更新中!)

这是一个嵌入式大厂面试题专栏,每天更新高频面试题。专栏将包含题目描述、详细解析、相关知识点扩展以及实际代码示例。内容涵盖操作系统、驱动开发、通信协议等核心领域,并结合实际项目经验进行分析。每道题目都会附带面试官可能的追问方向,帮助大家更好地准备面试!

1. .c文件转换为可执行程序的过程

C语言源文件(.c)转换为可执行程序需要经过以下几个阶段:

预处理阶段

  • 处理所有预处理指令(#include, #define等)
  • 展开宏定义
  • 条件编译处理
  • 删除注释
gcc -E main.c -o main.i

编译阶段

  • 将预处理后的代码转换为汇编代码
  • 进行语法分析、语义分析
  • 代码优化
gcc -S main.i -o main.s

汇编阶段

  • 将汇编代码转换为目标文件(机器码)
  • 生成.o文件(Windows)或.obj文件(Linux)
gcc -c main.s -o main.o

链接阶段

  • 将目标文件与库文件链接
  • 解析符号引用
  • 生成最终可执行文件
gcc main.o -o main.exe

完整编译命令

gcc main.c -o main.exe

2. SPI和IIC寻址的区别

SPI寻址机制

  • 硬件选择方式:使用独立的片选(CS/SS)信号线
  • 每个设备需要单独的片选线
  • 无地址字节:通信时不需要发送地址字节
  • 寻址过程: 主机拉低对应从机的CS线直接开始数据传输通信结束后拉高CS线
// SPI设备选择示例
void SPI_SelectDevice(uint8_t device_id) {
    // 确保所有设备都未选中
    GPIO_SetBits(CS_PORT, CS_PIN1 | CS_PIN2 | CS_PIN3);
    
    // 根据设备ID选择对应设备
    switch(device_id) {
        case 1:
            GPIO_ResetBits(CS_PORT, CS_PIN1);
            break;
        case 2:
            GPIO_ResetBits(CS_PORT, CS_PIN2);
            break;
        case 3:
            GPIO_ResetBits(CS_PORT, CS_PIN3);
            break;
    }
}

I2C寻址机制

  • 软件寻址方式:使用地址字节
  • 共享总线:所有设备共享SDA和SCL线
  • 7位或10位设备地址
  • 寻址过程: 主机发送起始条件发送从机地址+读/写位等待从机应答进行数据传输
// I2C设备寻址示例
bool I2C_WriteData(uint8_t device_addr, uint8_t reg_addr, uint8_t data) {
    // 发送起始条件
    I2C_GenerateSTART(I2C1, ENABLE);
    while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
    
    // 发送设备地址(写模式)

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

嵌入式面试八股文全集 文章被收录于专栏

这是一个全面的嵌入式面试专栏。主要内容将包括:操作系统(进程管理、内存管理、文件系统等)、嵌入式系统(启动流程、驱动开发、中断管理等)、网络通信(TCP/IP协议栈、Socket编程等)、开发工具(交叉编译、调试工具等)以及实际项目经验分享。专栏将采用理论结合实践的方式,每个知识点都会附带相关的面试真题和答案解析。

全部评论
spi的寻址方式为硬件选址,采用nss片选信号进行选址,i2c的寻址方式为软件地址字节进行选址,主机发起通信时会首先发送目标设备的地址,只有地址对应的从设备才会相应
点赞 回复 分享
发布于 04-14 21:00 未知
.c文件转换可执行文件的过程,一共有四步,预处理、编译、汇编和链接,预处理阶段是出来源代码文件的预处理指令,输出.i文件,编译是将预处理后的源代码文件转换为汇编语言文件,输出.o文件,汇编是将汇编语言文件转换机器可读的机器语言文件,输出输出目标文件.s文件,链接就是讲多个可执行文件组成一个可执行文件
点赞 回复 分享
发布于 04-14 20:55 未知
😱😱😱😱😱😱😱😱
点赞 回复 分享
发布于 03-26 10:12 上海
很好
点赞 回复 分享
发布于 03-25 16:02 黑龙江
点赞 回复 分享
发布于 03-25 09:08 山西

相关推荐

06-27 12:54
已编辑
门头沟学院 Java
累了,讲讲我的大学经历吧,目前在家待业。我是一个二本院校软件工程专业。最开始选专业是觉得计算机感兴趣,所以选择了他。本人学习计算机是从大二暑假结束开始的,也就是大三开始。当时每天学习,我个人认为Java以及是我生活的一部分了,就这样持续学习了一年半,来到了大四上学期末,大概是在12月中旬,我终于找的到了一家上海中厂的实习,但我发现实习生的工作很枯燥,公司分配的活也不多,大多时间也是自己在自学。就这样我秋招末才找到实习。时间来到了3月中旬,公司说我可以转正,但是转正工资只有7000,不过很稳定,不加班,双休,因为要回学校参加答辩了,同时当时也是心高气傲,认为可以找到更好的,所以放弃了转正机会,回学校准备论文。准备论文期间就也没有投递简历。然后时间来到了5月中旬,这时春招基本也结束了,然后我开始投递简历,期间只是约到了几家下场面试。工资也只有6-7k,到现在我不知道该怎么办了。已经没有当初学习的心劲了,好累呀,但是又不知道该干什么去。在家就是打游戏,boss简历投一投。每天日重一次。26秋招都说是针对26届的人,25怎么办。我好绝望。要不要参加考公、考研、央国企这些的。有没有大佬可以帮帮我。为什么感觉别人找工作都是顺其自然的事情,我感觉自己每一步都在艰难追赶。八股文背了又忘背了又忘,我每次都花很长时间去理解他,可是现在感觉八股、项目都忘完了。真的已经没有力气再去学习了。图片是我的简历,有没有大哥可以指正一下,或者说我应该走哪条路,有点不想在找工作了。
码客明:太累了就休息一下兄弟,人生不会完蛋的
如果实习可以转正,你会不...
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-24 13:40
点赞 评论 收藏
分享
评论
3
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务