__weak
关键字
有时候我们阅读HAL源码的时候会发现,很多函数前会有一个__weak
的前缀,一开始我对这个前缀很好奇,想知道这到底是什么意思。在IAR for ARM中使用“go to defination”查看该关键字的时候会提示__weak defined on the command line
,即在命令行中定义,得,这又回到原点了……
不过一次偶然的机会,在查找C语言相关资料时,我看到它的真实含义,该关键字用于函数前,编译器在链接函数时会优先链接没有该关键字前缀的函数,即变相的,而且是不完全的实现了C++的函数重载特性,示例:
//HAL库微秒延时函数,有__weak关键字即代表可以重载该函数
__weak HAL_Delay(__IO uint32_t delay);
//用户函数
HAL_Delay(__IO uint32_t delay);
以上两个函数,编译器会优先链接下面的函数,即为我们重定义延时函数提供了较大的便利性。
Systick定时器
了解ARM的人对Systick定时器一定不陌生,这是内核自带的定时器,不过我更喜欢称它为心跳定时器,一般在裸机开发时,由它提