必背八股文-嵌入式基础篇1

本篇有关于嵌入式开发相关内容,一般面试官会结合你个人简历中项目负责内容进行相关知识点的提问。

芯片选型考虑哪些因素?

  1. 性能:确保芯片具有足够的处理能力来满足项目需求。
  2. 内存:选择具有足够RAM和ROM(或Flash)容量的芯片。
  3. 能耗:根据项目要求,权衡功耗和性能。
  4. 外设和接口:选择支持所需通信协议和设备连接的芯片。
  5. 封装和尺寸:考虑空间限制和生产要求,选择合适的封装类型。
  6. 开发工具和支持:选用具有良好文档和支持的芯片,降低开发难度。
  7. 供应和成本:确保稳定供应并选择性价比合适的芯片。
  8. 软件和生态系统:选择具有成熟软件支持和丰富生态系统的芯片。
  9. 安全性:根据项目要求,选择具有相应安全功能的芯片。
  10. 可扩展性:选择具有一定可扩展性和升级能力的芯片,以适应项目需求变化。

STM32F4和F1的区别,为什么选用F4?

内核不同:F1是Cortex-M3内核,F4是Cortex-M4内核;

主频不同:F1主频72MHz,F4主频168MHz;

浮点运算:F1无浮点运算单位没有硬件FPU处理浮点数运算,F4有;

(没有浮点加速硬件FPU只影响浮点计算的速度,并不是不能计算浮点数,因此只能通过内核的软件进行计算。先要把这个浮点数运算转换成定点数存储,再把这个定点数转换成指数的方式进行运算,不仅中间要进行数据转换,并且要进行多次移位,而整数型就不需要这么复杂的操作,直接运算就可以,所以F1浮点数运算不仅运算量大并且会加大MCU的负载,要慢很多)

功能性能:F4外设比F1丰富且功能更强大,比如GPIO翻转速率、上下拉电阻配置、ADC精度等;

内存大小:F1内部SRAM最大64K,F4有192K(112+64+16)。

F4的RAM和ROM:ram192K,rom大小2048K

考虑到需要浮点运算和使用RTOS系统,最后选择F4;

STM32启动过程:

  1. 处理器复位:当STM32芯片上电或者外部复位信号触发时,处理器的复位引脚将会被拉低,导致处理器执行复位操作。在复位期间,处理器会将各个寄存器的值初始化为默认值,并开始执行复位向量表中的第一条指令。
  2. 复位向量表:在STM32微控制器中,复位向量表是一个存储器区域,其中包含了处理器在复位时跳转执行的第一条指令的地址。通常,复位向量表位于存储器的起始地址,由芯片制造商预先定义。复位向量表的内容包括复位中断处理函数、中断向量表和其他初始化函数。
  3. 系统初始化:复位向量表中的第一条指令通常是一条跳转指令,将控制权转移到系统初始化函数的地址上。系统初始化函数主要用于设置处理器和系统的一些基本配置,例如时钟源和时钟频率的配置,初始化堆栈指针、全局变量等。
  4. C库初始化:在系统初始化完成后,通常会调用C库的初始化函数。C库的初始化函数主要是对C语言运行环境的初始化,包括清零BSS段(未初始化的全局变量)、复制数据段(初始化的全局变量)等。
  5. 主函数入口:C库初始化完成后,处理器将跳转到主函数的入口地址开始执行用户程序。主函数是程序的入口点,其中包含应用程序的具体逻辑。

需要注意的是,上述步骤是一般情况下的启动流程,具体的启动过程可能会因不同的芯片型号、启动模式和编译器设置而有所差异。此外,还可以通过修改复位向量表的内容来实现特定的启动操作,例如自定义复位中断处理函数或添加其他初始化函数。

stm32的定时器

提问定时器相关的,具体根据你个人开发使用情况解答。

  1. 定时器时钟使能:首先,需要使能所需的定时器时钟。这可以通过RCC(Reset and Clock Control)寄存器来配置。例如,如果要使用TIM2定时器,需要使能TIM2的时钟。
  2. 定时器配置:配置定时器的基本参数,例如计数器的工作模式、时钟分频系数、计数器的自动重载值等。这些配置可以通过定时器的相关寄存器进行设置。
  3. 定时器中断设置(可选):如果需要使用定时器中断,可以配置中断源和中断优先级,并使能定时器中断。
  4. 启动定时器:配置完成后,启动定时器开始计数。定时器可以通过软件触发或外部触发来启动计数。
  5. 定时器中断处理(可选):如果配置了定时器中断,当计数器达到设定的值时,会触发中断。在中断服务程序中可以执行相应的操作,例如更新计数器的值、处理中断标志等。

stm32的AD采样

提问AD采样相关的,具体根据你个人开发使用情况解答。

  1. ADC配置:首先,需要配置ADC模块的相关寄存器,包括时钟使能、采样时间、采样通道等。这些配置可以通过寄存器操作或者使用STM32提供的库函数进行设置。
  2. GPIO配置:为了使用ADC,需要将相应的GPIO引脚配置为模拟输入模式,并使能相应的ADC通道。这可以通过配置GPIO寄存器来完成。
  3. 触发方式设置:可以选择触发ADC转换的方式,例如软件触发或外部触发。如果选择外部触发,还需要配置相关的触发源和极性。
  4. ADC转换:在进行ADC转换之前,可以设置ADC分辨率、对齐方式、连续转换模式等。然后,可以通过启动转换命令或触发源来开始ADC转换。
  5. 中断或轮询获取结果:可以选择使用中断或轮询的方式获取ADC转换结果。如果使用中断方式,可以在转换完成后触发中断,并在中断服务程序中读取转换结果。如果使用轮询方式,则需要在转换完成后主动查询并读取转换结果。
  6. 结果处理:获取到ADC转换结果后,可以根据需要进行相应的处理,例如数据转换、单位换算等。

Linux嵌入式和单片机嵌入式区别:

复杂性:Linux嵌入式系统是基于Linux内核构建的,具有完整的操作系统功能,包括多任务处理、文件系统、网络协议等。相比之下,单片机嵌入式系统通常使用裸机编程或者实时操作系统(RTOS),具有更简单的系统结构和功能。

处理能力:Linux嵌入式系统通常在较强大的处理器上运行,例如ARM、x86等,具备较高的处理能力和存储容量。而单片机嵌入式系统使用单片机芯片,其处理能力和存储容量较低。

开发环境:Linux嵌入式系统使用标准的开发工具链和开发环境,可以使用高级编程语言(如C/C++)进行开发,并且具备广泛的软件支持和开发社区。单片机嵌入式系统的开发通常需要使用特定的单片机编程工具和汇编语言,开发资源相对较少。

系统定制性:Linux嵌入式系统具有很高的可定制性,可以根据应用需求选择所需的软件组件和功能,并且支持模块化的软件开发和更新。单片机嵌入式系统的定制性相对较低,往往需要在设计阶段确定所需功能和硬件配置。

成本和功耗:Linux嵌入式系统由于使用较高性能的处理器和较大容量的存储器,相对而言成本较高,并且功耗较高。单片机嵌入式系统由于采用低成本、低功耗的单片机芯片,成本较低且功耗较低。

总的来说,Linux嵌入式系统适用于需要复杂功能、较高性能和较大存储容量的应用,如智能手机、平板电脑、网络设备等。而单片机嵌入式系统适用于资源有限、功耗要求低、对实时性要求较高的应用,如传感器、家电、汽车电子等。

FreeRTOS、μC/OS的区别

开源性质:FreeRTOS是一个开源的RTOS,可以免费获取并在商业和非商业项目中使用。它具有广泛的用户社区和支持。而μC/OS是一种商业RTOS,需要购买许可证才能使用。

架构和内核:FreeRTOS采用基于优先级的抢占式内核架构,支持多任务处理、时间片轮转调度和中断服务机制。它提供了一套轻量级的内核函数和任务管理机制。μC/OS也是基于优先级的抢占式内核,但它提供了更多的功能,如事件标志、信号量、消息邮箱等,以满足更复杂的应用需求。

资源占用:FreeRTOS的内核非常小巧,具有低的存储器占用和快速的上下文切换速度,适用于资源有限的嵌入式系统。μC/OS相对而言具有更大的内核代码大小和更高的存储器占用,但它提供了更丰富的功能和可选组件。

硬件平台支持:FreeRTOS在多种处理器架构上都有支持,包括ARM、MIPS、x86等,因此它适用于广泛的硬件平台。μC/OS也支持多种处理器架构,但支持的硬件平台较少,且主要集中在微控制器和嵌入式系统上。

社区支持和生态系统:由于FreeRTOS的开源性质,它具有庞大的用户社区和广泛的生态系统,提供了丰富的示例代码、开发工具和支持资源。μC/OS作为商业RTOS,其用户社区和生态系统相对较小,但有专门的技术支持和服务。

在RTOS中,二值信号量和互斥量的区别?

二值信号量是一种计数器,只有两种状态:0和1。当一个任务试图获取一个已经被获取的二值信号量时,该任务会被挂起,直到该信号量被释放为止。二值信号量通常用于同步任务的开始或者结束,或者是保护共享资源的读写等。由于二值信号量不具有优先级继承功能,当高优先级任务等待低优先级任务释放二值信号量时,低优先级任务可能会优先执行,导致任务调度出现问题。

互斥量也是一种计数器,但它具有更多的状态。当一个任务获取一个已经被获取的互斥量时,该任务会被挂起,并且该互斥量的计数器会减一。只有当计数器归零时,该互斥量才会被释放。互斥量通常用于保护共享资源的读写等,它具有优先级继承功能,可以避免高优先级任务因为等待低优先级任务释放互斥量而被阻塞的问题。

在RTOS中,任务通知的运行机制是怎么样的?

  1. 发送任务向接收任务发送通知,通知包括通知值和接收任务的句柄。
  2. 接收任务准备好接收通知,并在等待通知列表中等待通知的到来。
  3. 发送任务调用发送通知的API函数,RTOS将通知保存到接收任务的等待通知列表中。
  4. 如果接收任务已经准备好接收通知,那么RTOS会将该任务从等待通知列表中移除,并唤醒该任务继续执行。
  5. 如果接收任务没有准备好接收通知,那么该任务会继续等待,直到接收任务准备好接收通知。

UCOS任务调度

一个任务,也称作一个线程。

UCOS有一个任务调度机制,根据任务的优先级进行调度。

一个是硬件中断, 那么系统会将当前任务有关变量入栈,然后执行中断服务程序,执行完成后出栈返回.

另一个是任务之间的切换,使用的方法就是任务调度,每一个任务有自己的栈,顺度也是一样的入栈,然后执行另一个程序,然后出线返回。

 

并非是每一任务按优先级顺序轮流执行的,而是高优先级的任务独占运行,除非其主动放弃执行,否则低优先级任务不能抢占,同时高优先级可以把放出去给低优先级任务使用的CPU占用权抢回来。所以UCOS的任务间要注意插入等待延时,以便UCOS切出去让低优先级任务执行。

UCOS中任务间的通信

在UCOS中,是使用信号量、邮箱(消息邮箱)和消息队列这些被称作事件的中间环节来实现任务间的通信的,还有全局变量。

信号量用于:

1.控制共享资源的使用权(满足互斥条件)

2.标志某时间的发生

3.使2个任务的行为同步

消息队列:

概念:

(1)消息队列实际上就是邮箱阵列。

(2)任务和中断都可以将一则消息放入队列中,任务可以从消息队列中获取消息。

(3)先进入队列的消息先传给任务(FIFO)。

(4)每个消息队列有一张等待消息任务的等待列表,如果消息列中没有消息,则等待消息的任务就被挂起,直到消息到来。

STM32 中断是怎么进入到中断服务程序的

在STM32中,中断服务程序是通过中断向量表来实现的。中断向量表是一个包含中断处理程序入口地址的表格,每个中断都有一个对应的中断向量,当该中断发生时,CPU会根据中断向量表找到该中断对应的中断处理程序入口地址,并跳转到该地址执行中断处理程序。

中断向量表的起始地址位于STM32的Flash或者SRAM中,中断向量表的

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

本专栏主要是介绍嵌入式软件开发岗位的相关知识和学习攻略,为大家提供一份笔试与面试手册。包括有嵌入式软件开发岗位介绍与学习攻略;校园招聘和offer疑惑问题的介绍;在笔试方面,如何刷题为笔试作准备,提供往年笔试真题;在面试方面,提供相关知识的复习重点,提供面试真题。包括有:华为、蔚来、文远、大疆、三一、深信服、亚马逊、Intel、百度、科大讯飞、OPPO、京东、中兴、比特大陆|算能、美团等等

全部评论
Linux嵌入式需要具备那些知识储备呢
1 回复 分享
发布于 2023-06-28 23:18 河南
码住
1 回复 分享
发布于 2023-07-01 18:04 四川
博主后面还会更新吗?
1 回复 分享
发布于 2023-07-06 20:19 安徽
m
1 回复 分享
发布于 2023-07-24 01:18 黑龙江
波特率不是这样定义的。波特率是码元传输速率,比特率是位传输速率。码元用二进制位表示时,波特率和比特率相等(嵌入式一般是这样)。通信原理中也可能用多个比特位表示1个码元。码元并不是一个数据包也不是一帧数据
1 回复 分享
发布于 2023-11-27 10:58 山东
码住
点赞 回复 分享
发布于 2023-07-19 17:36 广东
讲得非常非常细致,虽然是冲动下订阅了,但是觉得很值
点赞 回复 分享
发布于 2023-08-02 16:51 陕西
可以补充一些嵌入式常用的网络协议MQTT、ZigBee什么的吗?😁
点赞 回复 分享
发布于 2023-08-04 10:54 江苏
如果走单片机嵌入式方向,Linux和c++还需要简单了解一下吗?
点赞 回复 分享
发布于 2023-08-05 21:50 浙江
有帮助
点赞 回复 分享
发布于 2023-08-16 19:47 广东
SPI四种模式那里是不是有问题
点赞 回复 分享
发布于 2023-08-23 18:18 江苏
大佬,能不能多更点STM32方面的八股
点赞 回复 分享
发布于 2023-09-05 15:03 天津
老哥还会继续更新吗
点赞 回复 分享
发布于 2023-09-12 09:21 天津
盟主,STM32启动过程:处理器复位应该在加载复位向量表之前
点赞 回复 分享
发布于 2023-11-26 19:58 陕西
想打印出来看看有办法吗
点赞 回复 分享
发布于 2023-11-30 17:32 北京
码住
点赞 回复 分享
发布于 2024-01-20 08:41 河南
Mark
点赞 回复 分享
发布于 2024-01-22 15:56 重庆
很棒,已购买
点赞 回复 分享
发布于 2024-03-01 11:10 四川
博主 现在正在跟着你的专栏学习 顺便也在补stm32的知识 想问问嵌入式软件大概需要哪些方面的知识呢 感觉现在学的没有方向感
点赞 回复 分享
发布于 2024-03-13 12:44 四川

相关推荐

1. 实时数据采集  在嵌入式系统中,如何有效地实现实时数据采集?请列出关键步骤和考虑因素。2. UART通信注意事项  在使用UART进行设备间通信时,需注意哪些事项以确保数据传输的可靠性?3. FreeRTOS任务延时  在FreeRTOS中,如何实现任务的延时功能?请给出具体的API和示例。4. SPI数据交换  如何通过SPI与传感器进行数据交换?请描述配置和数据传输的过程。5. TCP/IP协议栈配置  在嵌入式系统中,如何配置和使用TCP/IP协议栈以实现网络通信?6. PWM控制伺服电机  如何使用PWM信号控制伺服电机的角度?请说明具体的实现方法。7. FreeRTOS互斥量  在FreeRTOS中,如何实现互斥量的使用以保护共享资源?8. 低功耗模式实现  在嵌入式系统中,如何实现低功耗模式?请列出可采取的策略。9. I2C温度传感器读取  如何使用I2C与温度传感器进行数据读取?请描述具体的步骤。10. FreeRTOS任务通知机制  在FreeRTOS中,如何实现任务的通知机制以同步任务间的操作?11. ADC配置  如何配置ADC以读取温度传感器的数值?请列出配置步骤。12. 数据压缩实现  在嵌入式系统中,如何实现数据压缩以节省存储空间?13. PWM控制电机速度  使用PWM控制电机速度的基本原理是什么?请解释其工作机制。14. 优先级反转  在FreeRTOS中,如何处理任务的优先级反转问题?请给出解决方案。15. 中断处理按键输入  如何使用中断来处理按键输入?请描述具体的实现过程。16. CRC校验实现  在嵌入式系统中,如何实现数据的CRC校验?请提供算法和步骤。17. CAN总线通信原理  使用CAN总线进行车辆数据通信的基本原理是什么?请简述其工作流程。18. FreeRTOS事件组  在FreeRTOS中,如何实现事件组的使用以管理多个任务的同步?19. 外部中断响应  如何使用外部中断来响应传感器数据变化?请说明具体的配置和实现。20. 压力传感器读取  在嵌入式系统中,如何实现压力传感器的读取?请描述相关步骤。21. DMA音频数据传输  使用DMA进行音频数据传输的优势是什么?请说明其实现方法。22. 软件定时器使用  在FreeRTOS中,如何实现软件定时器的使用以定时执行任务?23. 图像传输实现  在嵌入式系统中,如何实现图像传输?请列出所需的协议和步骤。24. RTC定时事件调度  如何使用RTC进行定时事件的调度?请描述配置和使用方法。25. 内存使用监控  在FreeRTOS中,如何监控内存使用情况以避免内存泄漏?26. USB设备识别  使用USB进行设备识别和通信的基本原理是什么?请简述其工作流程。27. 音频录制实现  在嵌入式系统中,如何实现音频录制?请列出关键步骤。28. MQTT设备监控  如何使用MQTT协议进行设备状态监控?请描述实现流程。29. FreeRTOS时间管理  在FreeRTOS中,如何实现任务的时间管理以优化系统性能?30. 固件安全更新机制  在嵌入式系统中,如何实现固件的安全更新机制?请列出关键考虑因素。嵌入式C++面经推荐大佬面经  链接在下边  c++/嵌入式面经专栏-牛客网 https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM
点赞 评论 收藏
分享
1.13 顽岩资产 一面1. 工作室的机制2. 讲讲java和go的gc3. 讲讲你熟悉的项目,难点,收获,技术选型,为什么用rocketmq和redis,它们之间有什么交互,如何解决消息丢失问题4. 讲讲JWT原理,怎么解决重放攻击5. websocket使用场景6. 长连接,短连接7. redis的数据结构,sds,如何优化的,和c的不同8. redis有什么应用场景9. 单体redis和redis集群10. redis的持久化措施11. linux常用指令12. docker怎么打包镜像,发布13. mysql的索引有哪些14. 如何排查慢sql15. 讲讲你还会的中间件(Apollo)16. apollo怎么做热更新的17. 讲讲rpc和http的区别18. 二者使用场景19. 了解微服务吗,服务拆分怎么做20. go的mutex和channel的区别21. 啥时候用mutex,啥时候用channel22. 悲观锁,乐观锁23. 反问:做金融中台的1.16 顽岩资产 二面  HR面挂,应该是排序挂1. 大三就实习,怎么学习的(闲聊一会)2. 问点go,讲讲如何优雅关闭channel,生产者控制还是消费者控制,如何确保生产者不再发消息,如何确保消费者在关闭时消费完消息?3. 怎么查某个端口的连接数,mysql连接给占满了怎么排查,客户端,服务端,发现连接都是time_wait是什么情况,怎么解决4. 如何设计连接池,(拷打很久,设计的不全面,他就会补充,然后继续答)5. rocketmq使用的场景,项目用来做消息路由,如何保证可靠性,重复消费怎么解决6. xxl-job调度的原理,让你设计怎么做,有节点掉线是怎么解决的,要实现负载均衡策略 调最空闲的节点,怎么做的,空闲的标准有哪些7. 讲讲虎牙实习做的服务,事件中心是怎么流程,架构是怎么样的(现编)8. mysql的索引创建和优化有哪些(吟唱)9. 悲观锁和乐观锁,讲讲使用场景10. 反问:部门支撑业务的,也做一些基础设施,
查看28道真题和解析
点赞 评论 收藏
分享
评论
68
588
分享

创作者周榜

更多
牛客网
牛客企业服务