ARM、Cortex及STM32之间的关系
ARM可以理解为公司的名字、一类低功耗高性能处理器内核和架构 Cortex是ARM的新一代处理器架构ARM V7架构,大胆采用新技术,放弃向前兼容。 STM32是一款ARM内核的处理器芯片
何为可重入函数、不可重入函数?
可重入函数主要用于多任务环境中,一个可重入函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误
不可重入函数由于使用了一些系统资源,所以它如果被中断的话,可能会出现问题,这类函数是不能运行在多任务环境中的
简述机器语言、汇编语言和高级语言各自特点和联系
机器语言:一种指令集的体系。依赖于硬件,可以直接执行,速度最快,不便于人类阅读和编程
汇编语言:机器语言的符号化,不同机器有不同的机器语言,就有不同的汇编语言。是低级语言,执行效率虽然略低于机器语言,但比高级语言快。相对于机器语言来说更便于人类理解和编程,但编程效率低。
高级语言: 高级封装了的编程语言,与低级语言相比,更加接近于自然语言的一种计算机程序设计语言。编译器的作用就是把高级语言的源代码转换成对应平台的目标代码。高级语言书写比较简单,但是翻译起来比较复杂,同样的高级语言语句可以有不同的机器语言实现方法。因此同一段高级语言经过不同的编译器编译之后会得到不同的目标程序。
参数宏和函数的异同点?
二者都可以带有参数,都可以根据不同参数得到不同结果,都可以一次定义多次使用。 区别:一是参数宏的形式参数表中没有类型说明符号而函数有,二是参数宏在时间的开销上比函数都要小,宏无法节约空间而函数可以。预处理在处理参数宏时使用两遍宏展开,第一遍展开宏体,第二遍对展开的宏体用实参替换形式参数。
如何理解嵌入式C编程中的volatile修饰符?
易失性修饰符,说明所定义的变量或指针可以被多种原因修改。例如:有的变量在中断服务程序中会被修改,有的会被I/O修改,这种修改带有随机性,为防止丢失任何一次修改,需要修饰为易失性变量。定义为volatile的变量是说这变量可能会被意想不到地改变,编译器在用到这个变量时必须每次都重新读取这个变量的值备份。
staic的三种使用方法
- staic修饰局部变量,使得局部变量的作用域超出函数范围,直到程序结束,生命周期才会结束。
- static修饰全局变量,使得全局变量的作用域变为整个文件。
- static修饰函数,被修饰的函数只能在该函数的源文件中使用,在其他源文件中不能调用该函数。
在C语言中,如何利用条件编译避免文件重复包含?
#ifndef #define ....... #endif
I/O接口的两种编址方式?有何优缺点?
独立编址:将存储器地址空间和I/O接口地址空间分开设置,互不影响。设有专门的输入指令和输出指令来完成I/O操作
优点: 内存地址空间与I/O接口地址空间分开,互不影响,译码电路较简单,并设有专门的I/O指令,所以编程序易于区分,且执行时间短,快速性好。
缺点: 只用I/O指令访问I/O端口,功能优先且要采用专用I/O周期和专用I/O控制线,使微处理器复杂化。
统一编址:不区分存储器地址空间和I/O接口地址空间,把所有的I/O接口的端口都当作是存储器的一个单元对待,每个接口芯片都安排一个或几个与存储器统一编号的地址号。
也不设专门的输入/输出指令,所有传送和访问存储器的指令都可用来对I/O接口操作。
主要优点:访问内存的指令都可用于I/O操作,数据处理功能强;同时 I/O接口可与存储器部分共用译码和控制电路。
缺点: 1、I/O接口要占用存储器地址空间的一部分; 2、因不用专门的I/O指令,程序中较难区分I/O操作。