嵌入式(armcc)自动调用函数

有些时候,我们只想定义函数,却不想手动调用函数,而是希望这些函数在系统上电时自动调用。比如在写设备驱动时,设备的初始化函数就是这样一种函数,我们希望所有设备在上电的时候被初始化,每次增加一个设备时,不需要想着去调用这个函数,香港虚拟主机,定义完之后,自己就被加入到设备初始化函数集中。

解决的方案有很多,比如写个预处理脚本,把特定格式声明的函数扫描上来,网站空间,香港服务器,生成一个数组,然后统一调用,不过,这里有另一种解决方法:为每一个函数定义一个指针变量,然后将这个指针变量放到特定的section中,链接器最终会把同名的section组合到一起,即自动生成一个函数指针数组,访问链接器生成的符号即可。

typedef void(*DeviceInitFunction_t)(void);#define DEVICE_INIT_FUNCTION(func) \ DeviceInitFunction_t func##Ptr __attribute__((section(“sectionName”))) = func// 定义一个设备初始化函数DEVICE_INIT_FUNCTION(InitI2c);void InitI2c(void) { // …}// 统一调用所有的设备初始化函数void InitAllDevices(void) { extern int sectionName$$Base; extern int sectionName$$Length;DeviceInitFunction_t *initFunc = (DeviceInitFunction_t *)&sectionName$$Base; size_t count = ((size_t)(&sectionName$$Length))/sizeof(DeviceInitFunction_t); while(count–) {(*initFunc)();initFunc++; }}三亚呀——赴一个蓝天碧海。

嵌入式(armcc)自动调用函数

相关文章:

你感兴趣的文章:

标签云: