中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

镇雄县| 日土县| 靖边县| 江华| 紫金县| 封丘县| 信宜市| 鹤峰县| 平阴县| 屯留县| 文化| 雅安市| 乌海市| 十堰市| 东乌珠穆沁旗| 黑龙江省| 鲁甸县| 广平县| 新安县| 拉孜县| 交口县| 乐亭县| 萝北县| 景德镇市| 安溪县| 洪湖市| 福清市| 上饶市| 福安市| 乌鲁木齐县| 吉林省| 乌什县| 琼海市| 高安市| 博湖县| 田林县| 临安市| 沾益县| 万州区| 大宁县| 岳池县|