1、讲一下STM32时钟系统
时钟系统类似于脉搏,控制着CPU的命脉,STM32的时钟源又不像51的时钟源那么单一,因为STM32的MCU较为复杂,且外设较多,并不是所有的外设都需要那么高的时钟频率,而且较高的频率对功耗和抗干扰都不具优势,所以对复杂的MCU系统往往采取多个时钟源,STM32有5个时钟源,HSI、HSE、PLL(这三个往往作为系统时钟)、LSI(外部看门狗时钟)、LSE(STC时钟源)。
2、c语言中堆和栈的区别
1、数据结构上:
都是一种数据项按序排列的数据结构。
栈:一种具有先进后出性质的数据结构
堆:堆是一种经过排序的树形数据结构、通常我们所说的堆的数据结构,是指二叉堆、虽然存储有序,但是我们取值是可以任意的。
2、申请与释放方式
栈:系统自动分配空间,生命周期在函数运行期间,运行结束便被系统回收
堆:程序员手动分配,如果不手动释放,所占用空间将一直存在
3、申请效率
栈:由系统自动分配,速度较快。但程序员是无法控制的。
堆:是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便。
4、申请空间大小限制:
栈:栈是向低地址扩展的数据结构,是一块连续的内存的区域,这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的
堆:堆的大小一般看内存的大小。
5、存放信息
栈: 在函数调用时,第一个进栈的是主函数中函数调用后的下一条指令(函数调用语句的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。注意静态变量是不入栈的。
当本次函数调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向最开始存的地址,也就是主函数中的下一条指令,程序由该点继续运行。
堆:一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容有程序员安排
3、假如一个单片机上电之后不运行?这是为什么?
检查晶振工作是否正常
检测EA脚是否拉低。单片机EA引脚表示存取外部程序代码之意,低电平动作,当此引脚接低电平后,系统会取用外部的程序代码(存于外部EPROM中)来执行程序。EA引脚必须接低电平,因为其内部无程序存储器空间。
4、精度和分辨率有什么区别
像数字化的温度传感器,一般精度指的是传感器读回的数据与绝对温度的差值,而分辨率指的是传感器能感知的最小温度变化。
5、你来说一下中断的处理流程是什么样子的?
中断响应:设置程序断点,并将断点地址压入栈进行保护,接着将程序转到中断服务程序的入口地址。
中断处理:从中断服务程序的第一条指令开始执行直到返回指令为止。
中断返回:中断处理程序的最后一条指令是中断返回指令RETI,该指令的作用将断点地址从栈中弹出,程序继续从断点地址开始执行
6、中断的优点
实时性
充分利用系统资源,提高CPU效率
7、讲一下grep的作用
查找相应文件中符合条件的字符串
8、I2C的开始信号、I2C配置主机模式端口该怎么配置
开始信号: SCL为高电平期间,SDA由高电平向低电平进行跳边,产生开始信号。
主机模式端口的配置:
硬件模式:端口设置为复用模式,复用为I2C、开漏输出、既不上拉也不下拉。
软件模拟:设置普通输出模式,推挽输出、配置上拉电阻
9、讲一下extern的作用
声明外部变量
在C++文件中调用C方式编译的函数
extern “C” {
… C++可以重定义,而C中没有重定义
}
1
2
3
10、讲一下static的作用
函数内部的变量值保持不变
模块内、函数外的变量,模块内的任意函数都能使用,但模块外的函数无法调用
定义在模块内的函数,模块外无法调用。、
11、讲解下GPIO是什么,有几种模式
GPIO就是通用的输入输出端口
有8中模式:4输入(上拉输入、下拉输入、浮空输入、模拟输入)、4输出(推挽输出、开漏输出、复用推挽输出、复用开漏输出)
12、进程通信的方法
管道
FIFO
消息队列
信号量
共享内存
13、MQTT与HTTP的区别
MQTT以数据为中心,传输量小、速度快
HTTP以文本为中心,传输量大,速度较慢
两个都是基于TCP(传输层之上的),都是属于应用层的协议,MQTT协议一般采取明文传送,而HTTP可以采用HTTPS进行加密。
14、MQTT的消息类型有哪些
连接
发布
订阅
订阅确认
取消订阅
15、STM32-ADC配置
引脚配置
使能引脚时钟与ADC时钟
设置端口为模拟输入,不带上下拉电阻
设置ADC的通用控制寄存器CCR
设置ADC的采样模式-独立模式
设置ADC的分频系数
初始化ADC参数
设置ADC的分辨率
转换方式 - 关闭连续转换模式
设置对齐方式 - 右对齐
开启AD转换器
16、状态机
https://zhuanlan.zhihu.com/p/262043778
17、接口有哪些
在嵌入式系统中,板上通信接口是指用于将各种集成电路与其他外围设备交互连接的通信通路或总线。以下内容为常用板上通信接口:包括I2C、SPI、UART、1-Wire
I2C总线是一种同步、双向、半双工的两线式串行接口总线。这里,半双工的含义是指在任意给定的时刻,只有一个方向上是可以通信的。
SPI总线
SPI总线是同步、双向、全双工的4线式串行接口总线
嵌入式经典30问
1、什么是中断?
中断是指计算机运行过程中,出现某种意外情况需要主机干预时,机器能够自动停止正在运行的程序并转入处理新情况的程序,处理完毕以后又返回原被暂停的程序继续运行。
中断的类型:
硬件中断和软件中断
硬件中断又分为内部中断和外部中断
只有外部中断是可屏蔽的
如果在中断服务函数中调用printf来打印调试信息,可能会发生以下结果:
1.打印不完整或者根本无法打印
2.程序能执行,但是行为异常
3.程序无法执行
2、中断的调用格式c51
void 中断名() interrupt 中断号
中断号0 外部中断0
中断号1 定时器0
中断号2 外部中断1
中断号3 定时器1
中断号4 串口
3、进程和线程
进程:执行中的一段程序,即一旦程序被载入到内存中并准备执行,就是一个进程,它表示资源分配的基本概念,调度运行的基本单位,系统并发的执行单位
线程:单个进程执行中每个任务就是一个线程,线程是进程执行运算的最小单位
线程属于进程,一个进程可以有多个线程
线程运行时共享进程的内存和资源(代码段、数据段、扩展段),每个线程有自己的栈段(存放临时变量和局部变量)
4、进程有几种状态?通信间方式都有些什么?
进程的状态,五种:创建、就绪、阻塞、运行、终止
进程间通信指的是在不同进程之间传递信息或交换信息,简单来说就是进程间可以互相交换数据
1)有名管道和无名管道
2)信号
3)消息队列
4)共享内存
5)信号量
6)套接字
5、死锁是什么?四个必要条件是什么?怎么避免死锁?
避免:
1)破环“请求和保持条件”
2)破环“不可抢占”条件
3)破环“循环等待”条件
6、异常的类别
中断,陷阱,故障,终止
7、虚拟内存是什么?
8、进程调度的方法:
1)先来先服务
2)短任务优先法
3)高响应比优先
4)时间片轮转法
5)静态、动态优先算法
9、并行,串行和缓冲技术
并行技术是为了解决多核cpu或者多IO总线并行处理
覆盖技术和虚拟技术是为了解决内存不足的问题,当有大文件或者程序需要在内存中处理时,要用到覆盖技术
缓冲技术可以解决cpu高速和打印机的低速矛盾
10、#和##
表示字符化,就是把后面的内容加上双引号
表示连接
11、宏定义和普通函数的区别
宏定义没有参数类型也不做类型检查,预编译阶段直接进行宏替换,所以它可以比较不同参数的数据大小,而普通函数只能比较形参类型的大小
宏定义一定要注意括号的存在和匹配
调用宏定义和普通函数生成的指令不同
12、数组访问的方法
下标,指针
顺带一提,指针是一个存放地址的变量
13、strlen和sizeof 的区别
strlen直接测长度,以“\0”结束,sizeof算的是所分配的内存大小 ,不受内容的影响
14、回调函数是在另一个函数中调用的函数
15、内存泄露是指程序中已动态分配的堆内存由于某种原因程序未释放或者无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果
16、关键字extern
有两种用法,第一是在文件内,如果定义一个变量,但是想要在变量的前面使用这个变量,就要用到extern
第二是如果想要在另一个文件中使用这个变量,在文件前面变量名之前加extern
17、数组和指针的区别:
数组是储存多个相同变量的集合,指针是存放地址的变量
数组在内存中是连续存放的,指针是灵活的,它可以指向任意类型的数据
18、什么是野指针和内存泄漏?
内存泄漏是指动态分配的内存由于某些原因未能释放,造成了内存的浪费
野指针是指向不可用内存区域的指针,未初始化或者释放的时候没有置NULL造成
19,const关键字
const 是C语言的一个关键字,const 关键字是把变量变为一个只读的变量(也就是不可以作为左值)不是将这个变量变为常量。经过const 修饰的变量成为只读的变量之后,这个变量就只能作为右值(只能赋值),绝对不能成为左值(不能接收赋值)。
作者:二月bloom
链接:https://www.jianshu.com/p/6ceb31ce8d24
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
https://zhuanlan.zhihu.com/p/417457321
https://www.cvmart.net/community/detail/2924