一個IAR for STM8 v1.3 的工程,換到1.4版后出現(xiàn)如下錯誤
unable to allocate space for sections/blocks with a total estimated minimum size of 0x2341 bytes in <[0x008000-0x009fff]> (total uncommitted space 0x1f80).
在網(wǎng)上找到下面文章,在工程選項里將“Library Options”里的“Printf formatter”和"Scanf formatter"修改為“small”或
源:STM8S與IAR程序常用錯誤
一、IAR中的重復(fù)定義問題
在自己寫頭文件時,要記得將常量定義在.c文件中,如果將常量定義在.h文件中,當在main.c或者其他地方包含該頭文件時,會將頭文件中的常量定義包含到main.c中,同時,相應(yīng)的.c文件也有該常量定義語句,就會導(dǎo)致linker報錯,有xxxx重定義(redefined)。此外,當要在main.c中使用其他.c文件中定義的量時,要記得+extern+<類型>+<+變量名>。
標準的做法:在.h文件中聲明變量,在一個.c文件中定義變量,其它.c文件要用到變量只要包含.h頭文件,相當于變量聲明,就可以引用其它.c文件中定義的變量了。一般只在頭文件中聲明變量,在原文件中定義變量,即使你在頭文件中使用了預(yù)編譯指令 #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,它有8KFLASH[0x008000-0x009fff],有1KRAM,實際提示的FLASH大小為10582+809>8192
[0x008000-0x009fff]=8192,0x1f80=8064 0x3180=12672, 0x1f80=8064, 11971+915=12886 8s207就沒有問題,換成103問題就溢出。
相關(guān)討論:
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,重新上電,因為我們開發(fā)板帶了一鍵下載電路,所以第一次上電,會引起幾次(3~6次)MCU復(fù)位,很正常.你不要每次都按電源鍵來實現(xiàn)復(fù)位,就不存在這個問題了.
2,因為你的例程,一上電,就通過串口輸出數(shù)據(jù)了,而此時CH340還在和電腦通信,CH340在和電腦USB連接建立的時候,收到數(shù)據(jù),就可能導(dǎo)致你的串口不被識別為串口,而被識別為什么ball之類的設(shè)備,從而鼠標亂飛.
解決辦法:
上電之前,先按住MCU的復(fù)位,然后再上電.等10秒鐘左右,再釋放復(fù)位.就一切OK了.