在最近经过一番嵌入式软件的面试发现面试官问的很多知识点都很细,很多东西在平常的工作中都是知道个大概,知道怎么解决却没有去细致的去了解原因,借此机会来补充补充这方面知识点。
一、c语言部分
volatile关键字:volatile中文解释为“易变的”,在使用该关键字定义变量的时候,可以告诉编译器我的这个变量是时时刻刻子变化的,不要对其进行优化,时时刻刻从内存读取最新的数据。
注意:编译器优化方式:由于访问寄存器的速度比访问内存的速度快,因此编译器将变量缓存到寄存器中,在需要读取变量数据时,直接从寄存器中读取变量值(变量存储于内存中,此处的寄存器中的值可以理解为副本数据),但很多时候会读取到脏数据,严重影响到程序的运行。(在项目中遇到过一个问题,在debug时发现if(a)a的值为1可是就是死活进不去if语句的代码段,后续在变量定义是加上volatile关键字就解决了这个问题)。但是如果频繁的使用volatile关键字那么势必会使代码执行效率变慢,因此得合理的运用该关键字。
该关键字的详细介绍可参考:C语言中volatile关键字的作用_阿槐123456的博客-CSDN博客_c语言volatile的作用
二、大小端存储方式
大端模式:表示高地址存放低字节数据内容,低地址存放高数据内容。(高地址存低数据,低地址存高数据)。
小端模式:表示低地址存放低字节数据内容,高地址存放高字节数据内容。(低地址存低数据,高地址存高数据)。
三、DMA
DMA相当于是在内存和外设之间打开了一条通道,允许外设控制器直接访问内存的内容。
例如:DMA就是一个搬运工,可以将数据从一个位置搬运到另一个位置。
以UART为例,如果要接收数据,会触发UART中断,然后CPU介入,在中断中通过CPU将UART输入寄存器的值读出来,存放到内存中;
而DMA方式,产生UART中断后,DMA直接参与,把UART输入寄存器的值搬运到内存中,CPU只需要在去检查内存的值就好了,这样提高了CPU的效率。
注意:数据传输过程——外设数据-->内存(并不是寄存器)。
DMA是对硬件直接传输,不占MCU的资源,传输速度快。类似于硬件pwm和定时器pwm一样,定时器pwm需要cpu干预,而硬件pwm只需要配置完毕即可。
四、PID算法
五、实时操作系统相关
六、产品软件架构搭建、产品各个功能所对应的具体化的软件部分。