對於電源轉換應用程序,我們需要儘快在ARM Cortex-M4平臺上進行各種浮點計算。如何聲明ARMCC的全局浮點寄存器
我們正在用Keil uVision進行開發。
我們想聲明一些變量作爲寄存器變量,但是除了編譯器的錯誤之外什麼也得不到。看起來像這樣是非常有用的,因爲FPU有32個寄存器,我們可以通過將數據存儲在這些寄存器中而不是每次調用ISR時從RAM中重新加載來節省很多週期。
我們嘗試使用:
register float a1 __asm__("s0");
但收到一個錯誤:未知的寄存器名「S0」
這似乎很奇怪,因爲在調試器接口,我可以看到,編譯器使用S0寄存器。如果我將寄存器聲明爲「r0」,那麼就沒有錯誤,所以似乎在某處丟失了一些FPU支持,但不知道在哪裏。
我看彙編控制字符串和看起來像浮點支持:
--cpu Cortex-M4.fp --pd "__EVAL SETA 1" -g --apcs=interwork
-I D:\my_project
-I D:\Keil_v5\ARM\PACK\ARM\CMSIS\4.4.0\CMSIS\Include
我們也嘗試:
__global_freg(1) float a1;
這也不能工作。
任何想法?
你在使用armcc嗎? [ARMCC手冊](http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0472k/chr1359125006491.html)列出了可以命名的FPU寄存器,列表不會不包括sX或dX寄存器。 – Jeremy
是的,我正在使用ARMCC,我看到了。我們也嘗試使用gcc編譯並得到錯誤:爲'a1'指定的寄存器不適合數據類型 –
儘管如此,gcc.godbolt.org工作上的gcc版本(http://goo.gl/iRXWtr)。 – Jester