程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> cortex m3 LPC1768 sprintf %f 出現崩潰 硬件錯誤 reset 原因是 arm-gcc 不支持

cortex m3 LPC1768 sprintf %f 出現崩潰 硬件錯誤 reset 原因是 arm-gcc 不支持

編輯:C++入門知識

我使用的是NXP的cortex-m3芯片LPC1768作為主控芯片,經過研究反復研究和實驗,修改startup.s代碼中的stack_size和heap_size的大小都無濟於事,任然出現奇怪的現象,即在單步調試的時候,只能執行一次,並且這次得到的結果是正確的,然後就立即出現硬件錯誤,進入匯編語言的硬件錯誤死循環;如果全速運行,那麼每次得到的結果都是0.00000,沒有一次能得到正確結果,但是並沒有死機,感覺應該是該sprintf %f的功能不正確而已,也不至於死機,不過偶爾確實有錯誤數據返回,但並沒有什麼規律。   基於此,在網上找了好久,終於弄明白,應該是這類微控制器不支持sprintf %f,因為這個操作太耗時,耗資源,不值得,很多微控制器都無法滿足它的要求,故arm-gcc沒有提供該支持或者支持得很不好,不過它也給出了湊合的解決辦法,比較簡單,模擬效果實現的。實現代碼參考如下:  www.2cto.com   When using GCC compiler, due to internal standard C library architecture, it is strongly not recommended to use the "%f" mode in the wm_sprintf function in order to convert a float variable to a string. This leads to an ARM exception (product reset).        [cpp]   float float_num;   uint8_t str_temp[128];   sprintf(str_temp,"%d.%03d",(uint32_t)float_num,(uint32_t)((float_num * 1000) - (uint32_t)(float_num) * 1000));//(實現三位小數轉換)    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved