1、stm32时钟系统(以stm32f1为例)。
(1)stm32时钟源有五个:
①HSI_RC(高速内部时钟源,RC振荡电路8MHz)
②HSE_OSC(高速外部时钟源,晶振,4~16MHz,一般为8MHz)
③LSI_RC(低速内部时钟源,RC振荡电路40KHz)
④LSE_OSC(低速外部时钟源,晶振,32.768KHz)
⑤PLL_CLK(锁相环时钟源,由HSI或HSE分频得到)
ps:RC振荡电路产生的时钟源不稳定,一般情况下使用晶振
(3)stm32f1有两条外设时钟总线,分别为APB1和APB2,这两个总线时钟都是由系统时钟(SYSCLK)分频而来,其中APB1为低速时钟总线(通用定时器、串口、I2C、USB),APB2为高速时钟总线(IO口、ADC、SPI)。
图片源自正点原子STM32配套学习视频PPT
2、C语言堆和栈的区别。
(1)栈区空间较小,由系统自动分配内存空间,同时系统自动释放空间。
堆区空间较大,需要手动申请空间并指明大小,并且需要手动释放空间。
(2)栈区的空间可以静态分配也可以自动分配。
堆区的空间都是动态分配,没有静态的堆。
(3)栈区空间较小,所以存放的一般都是生命期比较短的数据,例如函数的参数和局部 变量等。
堆区空间较大,存放动态申请的内存等。
(4)栈区的地址是连续的,不会产生内存碎片。栈是向低地址扩展的数据结构。
堆区的地址不一定连续,很容易产生内存碎片。堆是向高地址扩展的数据结构。
3、什么是推挽输出strong>
推挽输出是指既可以输出低电平,也可以输出高电平,可以直接驱动功耗不大的数字器件。
推挽电路是由两个三极管或MOSFET,以推挽方式存在于电路中,电路工作时,两只对称的开关管每次只有一个导通,所以导通损耗小、效率高、既提高电路的负载能力(带负载能力增强),又提高开关速度。
4、单片机上电之后不运行,可能的原因有哪些strong>
(1)供电电压是否正常
(2)复位引脚是否正常
(3)晶振是否起振
5、举例:单片机的型 和主要参数
6、结构体、联合体、sizeof
结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。
参考博客:C语言共用体(C语言union用法)详解
7、串口和并口的区别
串行接口也称串口(Serial Interface),通常指COM接口(例如stm32的串口和电脑上的USB串口),串口数据传输是数据一位一位地按顺序在串口线上进行传输,特点是结构简单,成本低,适用于远距离传输。缺点是传输速度慢。
并行接口简称并口(Parallel interface),指采用并行传输方式来传输数据的接口标准。并口数据传输是数据多位同时在并口线上进行传输,最常见的是8位并口,特点是传输速度快,缺点是远距离传输成本高。
8、局部变量和全局变量分别存放在哪里
(1)局部变量:栈区
(2)全局变量:静态存储区
(3)动态申请的数据(malloc):堆区
9、精度和分辨率有什么区别
对于一把10cm的尺子,假设它有100个均匀分布的刻度,那么我们就可以理解为这把尺子的分辨率是10cm/100 = 0.1cm,但是实际上我们并不知道这把尺子是否真的就是10cm,或者说我们并不知道这把尺子的每个刻度是否真的就是0.1cm,因为他可能与真实的0.1cm有一点误差。此时,如果说这把尺子的精度是±5%,那么这把尺子的真实长度可能是9.5cm~10.5cm。所以,分辨率指的是测量仪器在没有误差的情况下所能测得的最小数值,大部分情况下分辨率与分度值相同;而精度则是指测量仪器的测量结果与真实值之间的偏差。
10、static关键字
(1)一个声明为static的局部变量仅初始化一次,在函数调用结束后其值会被保留而不会被释放。
(2)一个声明为static的全局变量,仅能被模块内的其他函数调用而不能在模块外调用。
(3)一个声明为static的函数,仅能在声明它的模块内被调用而不能在模块外调用。
11、SPI
SPI是四线的全双工通信,四根线分别为:
①MISO(Master Input Slave Output):主设备数据输入,从设备数据输出
②MOSI(Master Output Slave Input):主设备数据输出,从设备数据输入
③SCLK:时钟信 ,由主设备提供
④CS:从设备片选信 ,由主设备提供
参考博客:SPI通信协议(SPI总线)学习 – 涛少& – 博客园
12、I2C
(1)I2C是两线的半双工通信,一根时钟线SCL,一根数据线SDA。
(2)I2C协议:
①空闲状态:SCL和SDA均为高
②START:SCL为高期间,SDA从高到低跳变
③END:SCL为高期间,SDA从低到高跳变
④ACK(应答):应答信 一般出现在每个字节数据的后面,即第九位,在SCL为高期间SDA持续稳定为底则表示有效应答,如果SDA持续稳定为高则表示否应答。
⑤数据的有效性:SCL为高期间,SDA持续稳定为高则表示1,如果SDA持续稳定为低则表示0。
(3)I2C数据包组成:(上图为写,下图为读)
13、中断的处理流程
14、什么是预编译,何时需要预编译
(1)不经常改动的大型代码体可以预编译。多个模块都使用同一标准的头文件和相同的编译条件,可以将所有头文件进行预编译。
(2)预编译指令指示了在程序正式编译前由编译器进行的操作,可以放在程序中的任何位置。
15、一个32位的机器,该机器的指针是多少位strong>
指针是多少位取决于地址总线的位数。一个机器是多少位的取决于处理器一次运算所能处理的二进制数的位数。
16、局部变量与全局变量重名
在局部变量的作用范围内,局部变量会屏蔽全局变量。
17、进程和线程的区别
基本概念:进程是资源分配的最小单位,线程是CPU调度的最小单位。
(1)一个进程可以包含多个线程
(2)同一进程中多个线程之间资源可以共享,不同进程之间资源无法共享
(3)进程比线程消耗更多的资源
(4)进程之间不会互相影响,但是一个线程崩溃将会导致整个进程崩溃
(5)为什么要多线程p>
机器的运行,实际上就是CPU与相关寄存器和RAM之间的数据交流。但是CPU的速度很快,往往比寄存器和RAM的操作快得多,为了提高CPU的利用率,我们往往会创建一个进程,然后在进程下面创建多个线程,让它们轮流获得CPU的使用权,减小CPU的闲置时间。
(6)为什么要多进程p>
对于如果的CPU而言,一个CPU内部可能不是一个核而是多核,多线程技术可以提高CPU中多核的运行效率,最大限度地使用计算机解决问题。
18、TCP和UDP的区别
(1)TCP是面向连接的,UDP是无连接的,即发送数据之前不需要建立连接。
(2)TCP比UDP更可靠,TCP尽可能保证数据无差错,不丢失,不重复且按顺序到达;UDP只是尽最大努力传输数据,不保证数据的可靠性。
(3)UDP省去了繁琐的交互和检错,具有较好的实时性,工作效率比TCP高。适用于需要高速传输和对实时性有较高要求的通信场景。
(4)TCP是点对点通信,UDP支持一对一、一对多、多对一、多对多的通信方式。
19、指针函数与函数指针
(1)定义不同
指针函数本质是一个函数,其返回值为指针。
函数指针本质是一个指针,其指向一个函数。
(2)写法不同
指针函数:int* fun(int x,int y);
函数指针:int (*fun)(int x,int y);
可以简单粗暴的理解为,指针函数的*是属于数据类型的,而函数指针的星 是属于函数名的。再简单一点,可以这样辨别两者:函数名带括 的就是函数指针,否则就是指针函数。
参考博客:函数指针和指针函数用法和区别
20、C语言编译过程
主要流程概括为:
(1)预编译(处理预编译指令),由.c文件生成.i文件
(2)编译(检查语法,优化代码),由.i文件生成.s文件
(3)汇编(由汇编生成机器码),由.s文件生成.o文件
(4)链接(连接各个模块,生成可执行文件),由.o文件生成可执行文件
参考博客:C语言编译和链接过程简介_liuchunjie11的博客-CSDN博客_c语言编译过程
如果有需要word文档的同学可以留下邮箱,给个三连奥!
文章知识点与官方知识档案匹配,可进一步学习相关知识C技能树首页概览115856 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!