嵌入式开发工程师笔试面试指南-面试题目整理(4)

1 请问uboot启动过程都做了些什么⭐⭐⭐⭐

U-Boot(Universal Boot Loader)的启动过程主要包括以下阶段及工作:

硬件初始化

进行 CPU 初始化,如设置时钟频率、初始化寄存器等。

初始化内存控制器,确保内存正常工作,为后续加载和运行程序提供空间。

初始化串口等基本输入输出设备,用于输出调试信息和与用户交互。

加载阶段

从存储设备(如 Flash、SD 卡等)读取 U-Boot 的第二阶段代码到内存中。

对读取到的代码进行校验和验证,确保代码的完整性和正确性。

系统配置与准备

检测硬件设备,如网卡、硬盘等,获取设备信息。

初始化环境变量,设置启动参数、网络参数等。

为内核启动做准备,如设置内核启动参数,将控制权交给内核。

2 为什么uboot要关掉cache?⭐⭐⭐⭐

U-Boot 在启动过程中有时需要关掉 Cache,主要有以下原因:

保证数据一致性

在早期的初始化阶段,硬件状态不稳定且内存中的数据可能还未正确初始化。如果 Cache 开启,可能会导致 CPU 从 Cache 中读取到旧的或无效的数据,关闭 Cache 可确保 CPU 直接从内存中读取最新、最准确的数据,保证数据一致性。

避免访问异常

在对内存进行底层操作,如初始化内存控制器、设置内存映射等时,若 Cache 处于开启状态,可能会使对内存的访问操作变得复杂,甚至出现访问异常。关闭 Cache 可使这些操作更直接、更可控,降低出现错误的风险。

方便调试

关闭 Cache 可以使程序执行流程和数据访问更加直观,便于开发人员在调试 U-Boot 时,准确判断硬件和软件的运行状态,更容易发现和解决问题。

3 nandflash和norflash的区别,对norlash的操作方式的理解?⭐⭐⭐⭐

NAND Flash 和 NOR Flash 是两种常见的闪存存储器,它们的区别及 NOR Flash 的操作方式如下:

主要区别

存储结构:NAND Flash 以页为单位进行读写,页大小通常为 2KB 或 4KB 等,擦除则以块为单位,块大小一般为 64KB 或 128KB 等。NOR Flash 以字节为单位随机访问,存储单元类似传统的内存芯片,可直接对每个字节进行读写操作。

读写速度:NAND Flash 的写入和擦除速度较快,适合大量数据的连续读写。NOR Flash 的读取速度快,可快速执行代码,但写入和擦除速度相对较慢。

应用场景:NAND Flash 常用于大容量数据存储,如固态硬盘、存储卡等。NOR Flash 适合存储代码和少量关键数据,可直接在芯片内运行代码,如 BIOS 存储。

NOR Flash 操作方式

读取操作:通过地址总线发送地址信号,指定要读取的存储单元地址,数据总线即可将对应地址的数据读出,类似内存的读取操作,能快速获取指令和数据。

写入操作:先发送指令和地址,指定要写入的位置,再将数据通过数据总线写入相应地址单元,但写入前需先擦除目标区域,因为写入只能将 1 变为 0,不能将 0 变为 1。

擦除操作:一般以块为单位,发送擦除指令和要擦除的块地址,将块内所有存储单元恢复为初始状态,即全为 1。

4 嵌入式系统中代码的执行方式⭐⭐⭐

顺序执行

按照代码编写的先后顺序,一条指令接着一条指令依次执行,这是最基本的执行方式,适用于简单的、具有明确先后逻辑的任务,如初始化程序、简单的控制流程等。

函数调用执行

当程序执行到函数调用语句时,会暂停当前的执行流程,转而去执行被调用的函数,函数执行完毕后再返回到调用点继续执行后续代码。这种方式有助于将复杂的任务分解为多个功能相对独立的函数,提高代码的可读性和可维护性,常用于实现各种特定功能模块。

中断驱动执行

当特定的中断事件发生时,如外部设备的输入输出请求、定时器溢出等,会打断当前正在执行的代码,转而去执行相应的中断服务程序。中断服务程序执行完毕后,再根据情况返回原来被打断的地方继续执行。这种方式使得嵌入式系统能够及时响应外部事件,提高系统的实时性和灵活性,常用于处理实时性要求较高的任务,如实时数据采集、实时控制等。

多任务并发执行

在具有多任务操作系统的嵌入式系统中,多个任务可以并发执行。操作系统通过任务调度算法,在不同的时间片内分配 CPU 资源给各个任务,使得多个任务看似在同时运行。每个任务都有自己的代码逻辑和执行上下文,这种方式可以充分利用系统资源,同时处理多个不同的任务,如同时进行数据处理、网络通信和人机交互等任务。

5 语句for(;1;)有什么问题?它是什么意思?⭐⭐⭐⭐

for(;1;) 是一个无限循环语句。其含义是循环条件始终为真(常量 1 代表真),程序会不断执行循环体中的代码,不会自行跳出循环。

问题在于若使用不当,可能导致 CPU 资源被持续占用,影响系统性能,甚至使程序失去响应。若要使用,需在循环体中添加合适的跳出机制,如 break 语句。

6 do…w

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

嵌入式/C++面试八股文 文章被收录于专栏

#承诺提供免费技术答疑# 本专栏主要是介绍嵌入式开发岗位相关知识和学习攻略。“C/C++软件开发岗位”也可以参考。 该专栏覆盖了嵌入式求职过程中99%常见面试题,详细讲解了嵌入式软件开发岗位、学习攻略、项目经验分享、面试心得,从技术面,HR面,主管面,谈薪一站式服务。订阅即赠送简历模板、内推机会,需要的同学点击我头像私信即可!

全部评论
如果大家觉得可以帮助到自己,麻烦点赞、评论和订阅哦😀
1 回复 分享
发布于 03-11 21:14 安徽
点赞 回复 分享
发布于 03-12 10:27 江苏

相关推荐

评论
3
6
分享

创作者周榜

更多
牛客网
牛客企业服务