STM8常見問題


一、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了.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章