嵌入式面试提问

news2024/12/28 2:25:01

嵌入式面试问题

1.讲一下STM32的时钟系统

  现总结下:首先是时钟源输入时钟信号到单片机,然后单片机对输入的时钟信号进行倍频和分频处理,再将处理后的时钟信号输出至系统,外设或外部接口。
  先看这张图,最外面的线上的方格是时钟相关的外部接口,OSC接口用于连接外部石英晶振时钟电路,最下面的接口用于内部时钟信号的输出。如图所示:
在这里插入图片描述

图 1 STM32外部时钟接口图

  然后我们介绍时钟源输入,单片机需要通过其产生的时钟信号来控制电路工作。最常见的时钟电路有RC和OSC两种时钟电路。RC时钟精度低且体积小,OSC正好相反。因此单片机往往内置RC时钟,若需要更高精度则需要外界OSC时钟。
  我们现在对时钟电路进行逐个分析:先介绍RC电路,如图所示,上面写了8MHz,HSI,RC。分别表示了时钟频率,时钟类型(高速内部时钟),RC表示电阻电容震荡器时钟电路。如图所示:
在这里插入图片描述

图2 内部时钟图

  在看第二个,由此可知,时钟频率的范围是4-16MHz,它的类型是外部的高速石英晶振时钟。第三个,时钟类型LSE就是低速石英晶振时钟,频率是32.768KHz。第四个,时钟类型是内部的低速阻容时钟,频率为40KHz。如图所示:
在这里插入图片描述

图3 外部时钟图

  我们继续看时钟系统手册,绿色竖着的梯形结构是选择器开关。他的作用是:在多个时钟输入的同时,选择一个作为输出。宽边的为输入时钟信号部分,窄边的为选择后的输出信号。然后介绍黄色框线标注的部分为预分频器,它的作用是用于将输入的时钟信号进行分频输出。接着介绍红色框线部分,它是倍频器,起作用是完成倍频功能,将输入的时钟源进行倍频输出。最后看蓝色框线标注的部分,它是数字信号电路里的与门。用来控制时钟信号的导通与否。默认为了降低功耗为关闭状态,即控制端为低电平,当需要使用外设时,会通过程序让其下端也就是控制端处于高电平,使上端的时钟信号导通。时钟系统图如下:
在这里插入图片描述

图4 时钟系统结构介绍图

  接下来介绍时钟系统的线路连接,从图中我们可以看到,内部高速阻容时钟输出一共有三个部分,第一个是提供给flash编程接口,第二个是通过系统时钟的选择器到达系统时钟。第三个是想通过二分频之后,通过锁相环的选择器进入锁相环。外部高速石英晶振时钟有四个输出,第一个是直接通过系统时钟的选择器到达系统时钟。第二个是通过第一个选择器之后再通过橙色的这条线到达锁相环,第三个是二分频之后通过选择器再通过橙色的这条路线到达锁相环。第四个是经过128分配之后至实时时钟。外部低速石英晶振时钟,它只有一个,就是直接输出至实时时钟。内部的低速阻容时钟,它有两条输出路线,第一个是直接到达实时时钟,直接输出至独立看门狗。如图所示:
在这里插入图片描述

图5 时钟线路图

  然后我们讲下重点锁相环,来看锁相环的输入及输出。首先锁相环的第一个输入是内部的高速时钟二分频之后输入到锁相环,即红色最下面那一条线,第二个输入是外部高速时钟,即蓝色的第二条再通过棕色那条,第三个输入是外部高速时钟二分频,即蓝色的第三条,那条除以2的再经过棕色那条。它的输出主要有两部分,第一部分是预分频后至USB接口,也就是上面的那条黄色路线。第二部分是直接到达系统时钟,即下面的那条黄色路线。示意图如下:
在这里插入图片描述

图6 倍频器示意图

  接着来讲系统时钟的输入输出,首先系统时钟的额输入部分有三种选择,第一是内部高速时钟,即红色的第二条线。第二是倍频器,即黄色的下面那条线。第三个输入是外部高速时钟,即蓝色的第一条线。它的输出有三个部分,第一个是IIS2,也就是集成电路内置的音频总线。第二是IIS3,第三个是AHB总线的预分频器。最后讲下主时钟输出,它的输入有四个部分,第一个是倍频器,第二个是内部高速时钟,第三个是内部高速时钟,第四个是系统时钟。主时钟的输出只有一个就是外部接口。上述示意图如下:
在这里插入图片描述

图7 主时钟即系统时钟示意图

  这样子就理清了时钟主体部分及主体路线的作用。

2.C语言中堆和栈的区别

  堆栈和内存的共同特点就是空间都是在内存上,也就说都是在ram上。

  1. 堆是一个动态的概念,栈是一个静态的概念。
  2. 栈是在编译的时候确定的,堆是在运行的时候确定的。
  3. 栈的大小在编译的时候就已经定好了,堆的大小有可能是一个动态变化的概念,取决于程序运行计算到那一步的具体的数据。一般都是根据使用需求来选择堆或者栈。
  4. 从访问效率上来说,因为堆是动态的,栈是静态的,所以堆的速度要慢。
  5. 再看另外一个特点就是访问权限方面,栈在访问权限上面的特点如下,一个函数的调用,访问的数据都是在栈上的。这个函数调用以后,它栈上的数据无法被另一个函数访问。简单来说就是不同函数之间的栈数据不能共享,这个原则也适用于多线程。堆是不一样的,堆是在程序进程中的堆,只要在这个进程上,所有的线程都可以访问这个堆上的数据。堆上的数据申请访问之后,在不同的语言下,可能处理的环境也是不一样的。
  6. 然后说下使用堆和使用栈的环境条件,当你对于上次的数据不确定,那就用堆而不知栈,但你确定的话,由于效率的问题,肯定要用栈,因为他会极大的提高你的运行速度,如果使用的是特别庞大的内存,一般不去用栈而是用堆,因为用完了要赶快释放掉。

3.GPIO的输出方式

  输出的方式由控制器和两个MOS管组成,这两个mos管一个为Nmos,一个为Pmos,根据两个mos管的开关情况来设置输出模式。

  1. 推挽输出:IO口高电平时,电流输出,IO口低电平时,电流流进
  2. 开漏输出:Q1一直关闭,根据Q2改变IO的电压,接一个上拉电阻,当Q2关闭时,为高阻态,外接接口就可以被上拉到目标电压。

4.单片机上电之后不运行

  1. 先检查电源电压的问题,用万用表测量接地引脚和电源引脚之间的电压。
  2. 检查复位引脚电压是否正常。测一下按下和松开复位按键的电压值。
  3. 检查晶振是否起震,用示波器看晶振引脚的波形。
  4. 如果电源不稳定的话,可以在电源引脚和接地引脚之间接一个0.1uf的电容改善一下。

5.举例你用过的单片机和主要参数

  这里我就以我用过的STM32单片机为例,

STM32C8T6的参数

  1. 是一个基于ARM Cortex—M3内核的32位微控制器
  2. 程序存储容量是64KB,需要电压2V-3.6V,工作温度为-40°-85°。
  3. 37个GPIO
  4. 2个12bitADC合计12路通道,外部通道:PA0-PA7+PB0-PB1,内部通道:温度传感器通道,内部参考电压通道。
  5. 4个定时器,其中TM1带死区(死区就是在上半桥关断后,延迟一段时间再打开下半桥或在下半桥关断后,延迟一段时间再打开上半桥,从而避免功率元件烧毁。这段延迟时间就是死区。)插入,常用于PWM控制电机。
  6. 通信窗口:两个IIC,两个SPI,3个USART,一个CAN
  7. 系统时钟,内部时钟最高可倍频到64MHz,外部时钟最高可倍频到72MHz。

STM32F407VET6的参数

  1. 基于ARN Cortex—M4内核的323位微控制器
  2. 存储容量512KB闪存,192KBSRAM,
  3. 12位精度,16通道ADC
  4. 3个IIC,3个SPI,3个USART,1个CAN
  5. 外部晶振最高180MHz

6.一个温度传感器按照正确的使用方式和参数指标对人体测量温度后一直都是35°这是为什么

  因为该温度传感模块测出的温度为表⾯温度,⽽实际上表⾯温度和实际体温是有差距的。

7.结构体,联合体和sizeof方面的知识

  1. 结构体:结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构。关于其struct声明的位置,也就是这段代码要放到哪里。同样这也是具有作用域的。这种声明如果放在任何函数的外面,那么则可选标记可以在本文件中,该声明的后面的所有函数都可以使用。如果这种声明在某个函数的内部,则它的标记只能在内部使用,并且在其声明之后。
  2. 联合体:在同一个内存空间中存储不同的数据类型。联合体内数据是按地址对齐的。具体是高位数据还是低位数据要看平台的大小端模式,51是大端,stm32默认是小端,如果其他编译器还请自测。仅仅用了一条减法指令就达到了除法、取余的操作,联合体的应用范围非常广泛,可以用于优化内存使用、处理二进制数据等,在进行高频率定时时尤为有用。但是只能同时访问联合体中的一个成员。
  3. sizeof:sizeof是C语言中保留关键字,也可以认为是一种运算符,单目运算符。sizeof实际上是获取了数据在内存中所占用的存储空间,以字节为单位来计数。

8.C语言考察功底的相关例子

博客园的C语言功底测试问题
宏的一些用法和注意事项

9.STM32中断处理流程

  先中断初始化,然后CPU正常运行程序,产生中断,处理中断内的程序,继续检查中断。具体的介绍这个文章可以看看:具体介绍中断异常和处理过程

10.486有几根线

  RS485通信系统通常采用三根线,分别为信号线,地线和电源线。信号线由两根线组成,分别用于发送和接收数据;地线由一根线组成,主要用于接地和接入外部电源;电源线由一根线组成,主要用于接入外部电源,以给接收器提供电源。

11.串口和并口的区别

这篇文章写的很详细串口和并口的区别

12.传感器上输出引脚是高阻抗好还是低阻抗好

高阻抗好。

  1. 传感器的输出引脚采用高阻抗设计,可以减小对传感器的负载,同时也有利于减小电源消耗,提高系统的灵敏度和精度。
  2. 在设计传感器输出电路时,需要根据具体的应用场景和系统需求进行综合考虑,权衡高阻抗和低阻抗的优缺点,选择合适的方案。

13.C语言头文件的工作原理

  1. 预处理阶段:编译器以C文件作为一 个单元,首先读这个C文件,发现第一句与第二句是包含一个头文件,就会在所有搜索路径中寻找这两个文件;
    补充一个知识点:
    #include <>格式:引用标准库头文件,编译器从标准库目录开始搜索;
    #include ""格式:引用非标准库的头文件,编译器从用户的工作目录开始搜索.
  2. 找到之后,就会将相应头文件中再去处理宏,变量, 函数声明,嵌套的头文件包含等,检测依赖关系,进行宏替换,看是否有重复定义与声明的情况发生,最后将那些文件中所有的东东全部扫描进这个当前的C文件 中,形成一个中间“C文件”;
  3. 编译阶段 :在上一步中相当于将那个头文件中的test变量扫描进了一个中间C文件,那么test变量就变成了这个文件中的一个全局变量,此时就将所有这个中间C文件的所有变量,函数分配空间,将各个函数编译成二进制码,按照特 定目标文件格式生成目标文件,在这种格式的目标文件中进行各个全局变量,函数的符号描述,将这些二进制码按照一定的标准组织成一个目标文件;
  4. 连接阶段 :将上一步成生的各个目标文件,根据一些参数,连接生成最终的可 执行文件,主要的工作就是重定位各个目标文件的函数,变量等,相当于将这个目标文件中的二进制码按一定的规范合到一个文件中再回到C文件与头文件各写什么内容的话题上:理论上来说C文件与头文件里的内容,只要是C语言所支持的,无论写什么都可以的,比如你在头文件中写函数体,只要在任何一个C文件包含此头文件就可以将这个函数编译成目标文件的一部分;

14.C语言指针的简单介绍

  指针是一种单纯的数据类型,本质上指针变量和普通变量没什么区别,指针变量一般用来存储地址,&为取地址操作符,*为取值操作符。

15.正确理解关键字CONST

  首先最常用的就是使用const来修饰一个变量,通过const之后,这个变量的值在初始化后就不会再被改变。

16.CAN总线介绍

  CAN(Controller Area Network),要进行CAN通讯需要专门的CAN收发芯片,单片机与CAN收发芯片进行数据通讯时,普通的高低电平信号,就会被转化为差分信号。差分信号具有抗干扰作用。CAN传输的一帧数据里面,首先是起始位,然后是启示码(用来识别信息发送对象),然后是远程请求或者数据帧的类型,一个是1一个是0,接下来6位是控制码(用于控制数据长度),接下来是16位CRC码(用于确保数据的准确性),然后是两位ACK码,最后是7位结束位。

17.什么是SPI,什么是IIC,什么是UART

  IIC是飞利浦公司开发的一种两线式串行,半双工同步通信总线,可以挂载多个参与通信的器件,常用于板内通信,比如单片机与外围芯片之间短距离,低速的信号传输。IIC有两条线,一条SCL时钟线用于同步,一条SDA数据线用于传输数据。
  IIC通信的一般流程如下:

  1. 主机发送起始位并进行从机寻址
  2. 得到应答后主机开始发送/读取数据位
  3. 数据发送/读取完成,主机发送停止位结束此次通信
      SPI是串行外围设备接口,是一种高速、全双工、同步通信总线,常用于单片机和EEPROM,FLASH,实时时钟,数字信号处理器等器件的通信,它主要是主从方式通信,通常只有一个主机和数个从机。标准SPI有四根线,分别为SCLK:时钟信号,由主机产生,MOSI:主机给从机发送指令或数据的通道,MISO:主机读取从机的状态或数据的通道,CS:从机片选使能信号。
      UART是通用异步收发器,是一种通用串行、异步通信总线,该总线有两条数据线,可以实现全双工的发送和接收,常用于单片机与单片机或外部辅助设备之间的通信。 UART在发送数据时先发送低位后发送高位,当总线处于空闲状态时,线路保持高电平,发送数据时,会先发送一个0.然后依次从低位到高位发送八位数据。八位数据传输完成后会发送一个1.下面说说UART应用的场景,RS232 9针串行接口,一般用于计算机和单片机之间的通信。USB转串口,这个是目前计算机和单片机之间的通信,还有一些控制器中,主辅控制芯片中也会利用UART通信协议进行信号传输。整体来说,UART多用于板间通信。

18.自己的职业规划

这个就根据自己的实际状况来准备。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1408850.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[docker] Docker资源管理

一、docker资源控制 Docker通过Cgroup 来控制容器使用的资源配额&#xff0c;包括CPU、内存、磁盘三大方面&#xff0c;基本覆盖了常见的资源配额和使用量控制。Caroup 是ControlGroups的缩写&#xff0c;是Linux 内核提供的一种可以限制、记录、隔离进程组所使用的物理资源(如…

[linux] 域名解析失败案例定位 [Errno -2] Name or service not known

首先发现代码里这段运行报错&#xff1a; socket.gethostbyname_ex(host_name) Traceback (most recent call last): File “”, line 1, in socket.gaierror: [Errno -2] Name or service not known import socket host_name socket.gethostname() print(socket.gethostby…

CSS3基础知识总结

目录 一、CSS3 边框 1.border-radius&#xff1a;圆角边框 2.box-shadow&#xff1a;添加阴影 3.border-image&#xff1a;图片边框 二、CSS3 渐变 1.线性渐变(Linear Gradients) a.由上到下&#xff08;默认&#xff09; b.从左到右 c.对角 d.使用角度 2.径向渐变(…

js计算皮尔逊相关系数

代码如下; let XGX {correlationCoefficient(pA, pB) {let covXY -pA * pBlet varX pA * (1-pA) let varY (1-pB)* pBlet res covXY / (Math.sqrt(varX*varY, 2))return res},correlation(x,y){x[0.3,50.2,99.5,199.3,299,398];y[0.1,50,99.9,200,300,400];// 计算均值con…

深入理解HarmonyOS UIAbility:生命周期、WindowStage与启动模式探析

UIAbility组件概述 UIAbility组件是HarmonyOS中一种包含UI界面的应用组件&#xff0c;主要用于与用户进行交互。每个UIAbility组件实例对应最近任务列表中的一个任务&#xff0c;可以包含多个页面来实现不同功能模块。 声明配置 为了使用UIAbility&#xff0c;首先需要在mod…

Nginx 配置解析:从基础到高级应用指南

Nginx 配置解析&#xff1a;从基础到高级应用指南 Nginx 配置解析&#xff1a;从基础到高级应用指南1. 安装和基本配置安装 Nginx基本配置 2. 虚拟主机配置3. 反向代理配置4. 负载均衡配置5. SSL 配置6. 高级配置选项结语 Nginx 配置解析&#xff1a;从基础到高级应用指南 Ngi…

Scapy编程指南(基础概念)

Scapy编程指南&#xff08;基础概念&#xff09; Scapy是什么 Scapy是Python中一个非常强大的库&#xff0c;它专门用于处理、发送和捕获网络协议中的数据包&#xff0c;它允许开发人员通过Python代码构建、解析和发送自定义网络协议的数据包。Scapy提供了一种直观、灵活的方…

Java代码审计原生反序列化CC链跟踪分析

希望和各位大佬一起学习&#xff0c;如果文章内容有错请多多指正&#xff0c;谢谢&#xff01; 个人博客链接&#xff1a;CH4SER的个人BLOG – Welcome To Ch4sers Blog 在前一篇文章我分析了Commons Collections1链​​​​​​​&#xff0c;其中跟链的顺序是&#xff1a…

【jetson笔记】vscode远程调试

vscode安装插件 vscode安装远程插件Remote-SSH 安装完毕点击左侧远程资源管理器 打开SSH配置文件 添加如下内容&#xff0c;Hostname为jetson IP&#xff0c;User为登录用户名需替换为自己的 Host aliasHostName 192.168.219.57User jetson配置好点击连接&#xff0c;控制台输…

阿里云推出第八代企业级实例 g8i:AI 推理性能最高提升 7 倍、可支持 72B 大语言模型

云布道师 1 月 11 日&#xff0c;全球领先的云计算厂商阿里云宣布推出第八代企业级通用计算实例 ECS g8i&#xff0c;这也是国内首款搭载第五代英特尔至强可扩展处理器&#xff08;代号 EMR&#xff09;的云计算产品。依托阿里云自研的「飞天CIPU」架构体系&#xff0c;ECS g8…

【每日一题】3.LeetCode——相交链表

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有限&#xff0c;欢迎各位大佬指点&…

Linux-共享内存

文章目录 前言一、system V共享内存申请共享内存挂载共享内存删除共享内存挂载删除共享内存 二、示例代码三.运行效果 前言 在这之前我们已经学习了两种进程间通信方式&#xff1a;匿名管道和命名管道。 从我们之前的学习已经知道&#xff0c;想让多个进程间进行通信就需要让他…

重构改善既有代码的设计-学习(四):简化条件逻辑

1、分解条件表达式&#xff08;Decompose Conditional&#xff09; 可以将大块代码分解为多个独立的函数&#xff0c;根据每个小块代码的用途&#xff0c;为分解而得的新函数命名。对于条件逻辑&#xff0c;将每个分支条件分解成新函数还可以带来更多好处&#xff1a;可以突出条…

业余爱好-生物信息学/生物化学/物理/统计学/政治/数学/概率论/AI/AGI/区块链

生物信息学 高等数学—元素和极限-实数的定义高等数学—元素和极限-实数的元素个数高等数学—元素和极限-自然数个数少于实数个数高等数学—元素和极限-无穷大之比较高等数学—元素和极限-级数的收敛高等数学—元素和极限-极限的定义数学分析与概率论人工智能AI数学基础——全套…

深度学习——pycharm远程连接

目录 远程环境配置本地环境配置&#xff08;注意看假设&#xff01;&#xff01;!这是很多博客里没写的&#xff09;步骤1步骤2步骤2.1 配置Connection步骤2.2 配置Mappings 步骤3 配置本地项目的远程解释器技巧1 pycharm中远程终端连接技巧2 远程目录技巧3 上传代码文件技巧4 …

云手机与实体手机的对比

在数字化时代&#xff0c;云手机作为一种虚拟手机在云端服务器上运行&#xff0c;与传统的实体手机相比存在诸多差异。让我们深入探讨云手机与实体手机之间的区别&#xff0c;以便更好地了解它们的特点和优势。 外观上的差异 实体手机具有实际的外观和重量&#xff0c;占据一定…

Java基础进阶02-xml

目录 一、XML&#xff08;可拓展标记语言&#xff09; 1.学习网站&#xff1a; 2.作用 3.XML标签 4.XML语法 5.解析XML &#xff08;1&#xff09;常见解析思想DOM 6.常见的解析工具 7.DOM4j的使用 8.文档约束 &#xff08;1&#xff09;概述 &#xff08;2&#xf…

一种很新的阶乘

D-一种很新的阶乘_浙江机电职业技术学院第八届新生亮相赛&#xff08;同步赛&#xff09; (nowcoder.com) 首先可以看出[1,n]中的数a的次方在初始情况下是n - a 1&#xff0c;所以我们可以初始化一个w数组&#xff0c;w[i]存储的值为i的次方&#xff0c;注意w[i]的数据类型必须…

Spring Security架构

文章目录 过滤器回顾DelegatingFilterProxyFilterChainProxySecurityFilterChainSecurity Filters打印Security Filters将自定义过滤器添加到过滤器链 Handling Security ExceptionsSaving Requests Between AuthenticationRequestCachePrevent the Request From Being Saved R…

1.24号c++

C绪论 c是c语言的扩充&#xff0c;C包含了C的所有属性&#xff0c;换一句话说&#xff0c;C语言在C中都合法。 C语言编程思想&#xff1a;面向过程 c编程思想&#xff1a;面向对象 可以说在C中一切皆对象。 c的三大属性&#xff1a;封装&#xff0c;继承&#xff0c;多态。…