宏定义函数,c语言宏定义函数
STM32固件库的作用?STM32固件库的作用是提供一套丰富的STM32外设驱动函数,方便用户开发程序,无需深入了解底层硬件细节。STM32固件库也遵循了CMSIS标准,实现了与Cortex-M3内核的兼容性,STM32固件库的文件结构包括CMSIS层、外设访问层、启动文件和库使用帮助文档等,STM32固件库是由ST公司提供的一套符合CMSIS标准的STM32外设驱动函数集合。

外设访问层:这一层是由ST公司提供的,用来定义STM32外设的初始化结构体和操作函数,以及一些常用的宏定义。启动文件:这一层是由ST公司提供的,用来进行堆栈初始化,中断向量表设置和中断函数定义,以及引导进入main函数。库使用帮助文档:这一层是由ST公司提供的,用来说明每一个外设驱动函数的功能,参数和返回值,以及一些注意事项。

我们以下面两行代码为例,展开描述:函数式宏定义:#defineMAX(a,b)((a)>(b)?(a):(b))普通函数:MAX(a,b){returna>b?a:b;}(1)函数式宏定义的参数没有类型,预处理器只负责做形式上的替换,而不做参数类型检查,所以传参时要格外小心。(2)调用真正函数的代码和调用函数式宏定义的代码编译生成的指令不同。

a:b;要编译生成指令,代码中出现的每次调用也要编译生成传参指令和call指令。而如果MAX是个函数式宏定义,这个宏定义本身倒不必编译生成指令,但是代码中出现的每次调用编译生成的指令都相当于一个函数体,而不是简单的几条传参指令和call指令。所以,使用函数式宏定义编译生成的目标文件会比较大。(3)函数式宏定义要注意格式,尤其是括号。

宏函数是预定义的,在用的时候方面快捷,有效率;在某种程度上来说,宏函数和自定义函数是有区别的,但作为一个函数的本身来说,没有实质性的区别。宏函数是预定义的,比自定义的函数更有效率,如果你的自定义函数短小,并且为inline的,那么也没有什么实质的区别。宏定义是代换,简单的函数与宏定义并没有什么区别但你想想比如一个函数要实现这样一个功能:如果x>y,

不同。虽然功能近似,但函数会产生独立代码,每次调用执行的是同一个位置的代码,无论调用多少次。宏定义是简单的文本替换,产生的代码是替换后程序产生的代码,简单说就是程序里每次使用宏替换后的地方都要产生类似的代码,而这些替换后产生的代码存在于程序的不同位置。
4、怎样用宏定义函数运行次数可以这样定义,如果你想让function1()运行100次,你可以这样做:#defineEXEC_COUNT100function(){for(inti0;i