一、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
原因:將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問題就溢出。
相關討論:
三、 Error[Pe169]: expected a declaration
答:多了}右大括號。
四、PL2303上電后鼠標亂動的解決辦法:
1,重新上電,因為我們開發板帶了一鍵下載電路,所以第一次上電,會引起幾次(3~6次)MCU復位,很正常。 你不要每次都按電源鍵來實現復位,就不存在這個問題了。
2,因為你的例程,一上電,就通過串口輸出數據了,而此時CH340還在和電腦通信,CH340在和電腦USB連接建立的時候,收到數據,就可能導致你的串口不被識別為串口,而被識別為什么ball之類的設備,從而鼠標亂飛。
解決辦法:
上電之前,先按住MCU的復位,然后再上電。等10秒鐘左右,再釋放復位。就一切OK了.
評論