91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Keil MDK浮點數支持不正常的解決方案是什么

發布時間:2021-12-06 16:13:53 來源:億速云 閱讀:219 作者:柒染 欄目:互聯網科技

這期內容當中小編將會給大家帶來有關Keil MDK浮點數支持不正常的解決方案是什么,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

在調用printf調試浮點數的時候,在內存中表示正確,但是打印數據就都為0.00,其他整形數據表示正常。

經查資料得知,浮點數要求堆棧八字節對齊導致,如果系統的默認堆棧不是八字節對齊的一定會出現此問題。

將變量八字節對齊即可。

解決方案:

1、IAR下的解決方案:

通過#pragma data_alignment指定對齊字節數

例如:


#pragma data_alignment=8 
OS_STK Task1_LED1_Stk[Task1_LED1_Stk_Size]; 
  
#pragma data_alignment=8 
OS_STK Task2_backlight_Stk[Task2_backlight_Stk_Size];

2、Keil MDK下的解決方案:

在任務堆棧聲明前面加入強制八字節對齊命令,如下:


__align(8) static OS_STK TaskEquipmentStk[TASK_EQUIPMENT_STK_SIZE];  
__align(8) static OS_STK TaskUartRcvStk[TASK_UARTRCV_STK_SIZE]; 
__align(8) static OS_STK TaskFileRcvStk[TASK_FILERCV_STK_SIZE]; 
__align(8) static OS_STK TaskFtpStk[ TASK_FTP_STK_SIZE ]; 
__align(8) static OS_STK TaskErrorRateRS485Stk[ TASK_ERROR_RATE_RS485_STK_SIZE ];

原因詳解

這事兒的歷史在于ARM本身不支持非對齊數據存取;因此在有了64Bit的數據操作指令后,指令要求8字節對齊。

進而,在編譯器的某個版本之后(RVCT3?),AAPCS就要求堆棧8字節對齊。

是先有8字節對齊的AAPCS,然后才有的CM3。先后順序要注意。CM3 r2p0之前,自動壓棧也不要求8對齊,r2p0好像才是強制對齊的。

printf的8對齊是C運行庫要求的,和硬件無關,C RTL手冊有寫,可以去閱讀。其根源在于AAPCS要求;而AAPCS根源在于LDRD這類指令。

換句話,未來如果128Bit數據操作有了,ARM還不支持非對其,那AAPCS可能升級為16字節對齊。

上述就是小編為大家分享的Keil MDK浮點數支持不正常的解決方案是什么了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

翁牛特旗| 新蔡县| 南澳县| 莫力| 宁南县| 罗定市| 阜阳市| 金平| 定陶县| 临西县| 麻城市| 三原县| 五寨县| 泰顺县| 始兴县| 鄄城县| 西华县| 莒南县| 孝昌县| 永丰县| 万载县| 固阳县| 凤山市| 佛冈县| 湛江市| 杭锦旗| 独山县| 渑池县| 图们市| 融水| 增城市| 睢宁县| 五台县| 威信县| 孙吴县| 马关县| 葵青区| 栖霞市| 贡嘎县| 阜平县| 浙江省|