亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

肇东市| 平陆县| 皋兰县| 句容市| 济源市| 抚州市| 竹北市| 南部县| 那坡县| 舟山市| 西乌| 喀喇沁旗| 龙川县| 康保县| 正定县| 纳雍县| 榆社县| 抚松县| 五莲县| 夏邑县| 竹溪县| 贺州市| 桑日县| 麦盖提县| 阿瓦提县| 马公市| 凯里市| 剑阁县| 彭泽县| 准格尔旗| 乌恰县| 青龙| 都兰县| 武城县| 潼关县| 兴义市| 财经| 汉源县| 象州县| 吐鲁番市| 荆州市|