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