|
c語言編譯單片機程序。比如編譯MCS-51或者AVR有時會說開發(fā)效率比匯編高,而開發(fā)PIC和ELAN卻發(fā)現(xiàn),c語言許多經(jīng)典的格式都無法使用。MCS-51在RAM空間開辟堆棧時會考慮堆棧時會考慮,因為深度而像C語言里面的函數(shù)嵌套,計算階乘時不可以想c語言那樣使用函數(shù)嵌套。ELAN的c編譯器在使用過程發(fā)現(xiàn),不宜使用局部變量,最好有和書寫匯編是同樣的數(shù)據(jù)空間分配思想。對定義的變量進行地址定位,uchar data1 @20 :bank 0;bit buzzer @0x20 @0:bank 0;。
今天寫程序時編譯總會進入死循環(huán),uchar i;for(i=0;i<5;i++);這樣的語句會進入死循環(huán)。在反匯編窗口觀察反匯編代碼發(fā)現(xiàn)i被定位在數(shù)據(jù)空間0x39,儀隴單片機78P153S的用戶數(shù)據(jù)空間從0x20-0x2f超出空間,應(yīng)該是編譯器的問題。修改局部變量為全局變量并定位,uchar i @0x20:bank 0;就不會出現(xiàn)上面的問題。
MCS-51有128字節(jié)的數(shù)據(jù)存儲空間r0-r7寄存器有七組,可以定義很大的數(shù)組,ELAN的數(shù)據(jù)存儲空間,定義一個15的數(shù)組編譯就會出現(xiàn)數(shù)據(jù)存儲空間不足的編譯警告。stc單片機4k的,16k很常見,所以從來用c語言不太考慮程序空間的開銷。曾經(jīng)用11F02做LED大屏幕顯示,32幅32*48圖像的字模存儲超出了2k空間,后來考慮11f03,后來就壓縮成16*24的了。儀隴的153只有1k,156也只有1k,468,447有2k,經(jīng)常編程序就超出空間,不得不苦苦思索程序壓縮。
STC的單片機都是串口編程,燒寫次數(shù)多達100000次,所以開發(fā)調(diào)試就是不停的下載調(diào)試。
早上燒儀隴單片機,燒程序調(diào)試,一個小時內(nèi)我扔了7個單片機到垃圾桶,就不扔了,OTP編程牛的一踏,每每開發(fā)一個產(chǎn)品會有多少單片機犧牲。
下午就用仿真器調(diào)試了,發(fā)現(xiàn)了好多問題,當(dāng)正確按說明進入系統(tǒng),蜂鳴器鳴叫一聲,黃燈閃爍一次,進入編碼,輸入密碼,一項的實現(xiàn)時,對自己說,小翔翔,快覺悟了,加油。所有的都是一個人苦心去悟出來的。
|
|