下面是一段汇编代码的片段。
00000432: mov r10, r7 00000434: mov r11, r7 00000436: mov r12, r7 00000438: ldr r1, [pc, #40] ; (0x464 <Reset_Handler+84>) /* 将地址PC+40(立即数,十进制)中保存的数load到r1*/ 0000043a: ldr r2, [pc, #44] ; (0x468 <Reset_Handler+88>) 0000043c: subs r2, r2, r1 /* subtract. Is an optional suffix. If S is specified, the condition code flags are updated on the result of the operation. r2 = r2 - r1 */ 0000043e: subs r2, #1 /* r2 = r2 - 1. 其中1是十进制表示的立即数 */
通过汇编语言能够察觉到,C语言是最接近于汇编的语言。
从FreeRTOS中的port.c文件可以看出,ARM架构有其独特的特点,并不和其他架构的细节一致。
在FreeRTOS的操作系统的实现中,port.c中表达了详细的执行细节。注意,这里面用到的一些技术性技巧比较多,比如对汇编语言在gcc下面的使用,对于链接文件的各种技巧的使用。
可能使用了在汇编语言中定义全局变量的技巧。
参考资料:Cortex-M4-Devices-Generic-User-Guide.pdf
参考资料: https://zhuanlan.zhihu.com/p/336687316