IAR for STM8 錯誤


一個IAR for STM8 v1.3 的工程,換到1.4版后出現如下錯誤

unable to allocate space for sections/blocks with a total estimated minimum size of 0x2341 bytes in <[0x008000-0x009fff]> (total uncommitted space 0x1f80).

在網上找到下面文章,在工程選項里將“Library Options”里的“Printf formatter”和"Scanf formatter"修改為“small”或

 

源:STM8S與IAR程序常用錯誤

一、IAR中的重復定義問題

     在自己寫頭文件時,要記得將常量定義在.c文件中,如果將常量定義在.h文件中,當在main.c或者其他地方包含該頭文件時,會將頭文件中的常量定義包含到main.c中,同時,相應的.c文件也有該常量定義語句,就會導致linker報錯,有xxxx重定義(redefined)。此外,當要在main.c中使用其他.c文件中定義的量時,要記得+ extern+ <類型>+<+變量名>。

標准的做法:在.h文件中聲明變量,在一個.c文件中定義變量,其它.c文件要用到變量只要包含.h頭文件,相當於變量聲明,就可以引用其它.c文件中定義的變量了。一般只在頭文件中聲明變量,在原文件中定義變量,即使你在頭文件中使用了預編譯指令 #ifndef.... #define ... #endif,也不能在頭文件中定義變量。不能定義,必須聲明。 二、程序溢出問題(Error[Lp011]問題)

Error[Lp011]: section placement failed: unable to allocate space for sections/blocks with a total estimated minimum size of 0x2ba9 bytes in <[0x008000-0x009fff]> 

原因:將library改為由full改為normal,一下子空間減少很多,還有printf和scanf的格式都由full改為small,不過這里不能用printf了。

 (total uncommitted space 0x1f80).   11 971 bytes of readonly  code memory      915 bytes of readonly  data memory      726 bytes of readwrite data memory   Errors: 1

CPU:STM8S103F3P,它有8K FLASH[0x008000-0x009fff],有1K RAM,實際提示的FLASH大小為10582+809>8192

[0x008000-0x009fff]=8192,0x1f80=8064 0x3180=12672, 0x1f80=8064, 11971+915=12886 8s207就沒有問題,換成103問題就溢出。

相關討論:

http://www.amobbs.com/thread-5516889-1-26.html

http://www.amobbs.com/thread-5516388-1-1.html

http://www.amobbs.com/thread-5526431-1-1.html

http://www.amobbs.com/thread-4181924-1-1.html

三、 Error[Pe169]: expected a declaration 

答:多了}右大括號。

 

 

 

四、PL2303上電后鼠標亂動的解決辦法:

1,重新上電,因為我們開發板帶了一鍵下載電路,所以第一次上電,會引起幾次(3~6次)MCU復位,很正常. 你不要每次都按電源鍵來實現復位,就不存在這個問題了. 
2,因為你的例程,一上電,就通過串口輸出數據了,而此時CH340還在和電腦通信,CH340在和電腦USB連接建立的時候,收到數據,就可能導致你的串口不被識別為串口,而被識別為什么ball之類的設備,從而鼠標亂飛. 

解決辦法: 
上電之前,先按住MCU的復位,然后再上電.等10秒鍾左右,再釋放復位.就一切OK了.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM