嵌入式面试高频(实战场景4)
此部分不只包含面经内容,均是实战类型不必全文背诵,有思路即可
后续收录于专栏:嵌入式/C++面试八股文
实战场景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 资源被持续占用,影响系统性能,甚至使程序失去响应。若要使用,需在循
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
该专栏面向嵌入式开发工程师、C++开发工程师,包括C语言、C++,操作系统,ARM架构、RTOS、Linux基础、Linux驱动、Linux系统移植、计算机网络、数据结构与算法、数电基础、模电基础、5篇面试题目、HR面试常见问题汇总和嵌入式面试简历模板等文章。超全的嵌入式软件工程师面试题目和高频知识点总结! 另外,专栏分为两个部分,大家可以各取所好,为了有更好的阅读体验,后面会持续更新!!!