阅读ARM AAPCS(ARM EABI),我发现: 寄存器r9的作用是特定于平台的。虚拟平台可以将任何角色分配给该寄存器,并且必须记录此用法。例如,它可以将其指定为与位置无关的数据模型中的静态基础(SB),或者可以在具有线程本地存储的环境中将其指定为线程寄存器(TR)。该寄存器的使用可能要求所持有的值在所有调用中都是持久的。不需要这种特殊寄存器的虚拟平台可以将r9指定为另外一个被调用者保存的变量寄存器v6。
我想使用r9作为我的特定航空电子设备可抢占操作系统的PID持有者,但我无法弄清楚如何保留它:armcc C编译器总是将它用作变量寄存器,因此它的值总是通过申请SW。
有什么想法吗? armcc可以吗? GCC?戴铂?...
感谢您的帮助。
此致
克里斯托弗
答案 0 :(得分:1)
对于ARMCC,您可以尝试
--global_reg=6
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0491c/CHDBJGCH.html
答案 1 :(得分:0)
我回答mysellf: 对于GCC,可以使用-ffixed-r9。
对于Windriver Diab编译器:
" #pragma global_register identifier = register"
(包含在每个文件中)