新唐單片機(jī)代碼評(píng)審總結(jié)
昨晚上,我們一個(gè)同事組織了一個(gè)小會(huì)議,大家一起討論了一個(gè)項(xiàng)目的單片機(jī)代碼,這個(gè)單片機(jī)用的是新唐單片機(jī),期間大家也討論了一些問題,總結(jié)一下,希望對(duì)寫單片機(jī)的同學(xué)們有幫助。
我這個(gè)同事寫的代碼非常優(yōu)秀,具體代碼怎么寫,就不能秀出來了。
單片機(jī)的一些存儲(chǔ)空間
data?????--->?????可尋址片內(nèi)ram ?????
bdata???--->?????可位尋址的片內(nèi)ram ?????
idata????--->?????可尋址片內(nèi)ram,允許訪問全部?jī)?nèi)部ram ?????
pdata???--->?????分頁(yè)尋址片外ram?(MOVX?@R0)?(256?BYTE/頁(yè)) ?????
xdata???--->?????可尋址片外ram?(64k?地址范圍FFFFH) ?????
code????--->?????程序存儲(chǔ)區(qū)?(64k?地址范圍),對(duì)應(yīng) MOVC?@DPTR
Program?Size:?data=12.0?xdata=120?code=3349
— —const 的使用
我們一般定義一個(gè)全局變量,這個(gè)變量會(huì)占用RAM的空間大小,如果我們把這個(gè)變量定義為const,就可以把這個(gè)變量空間從RAM定義到code空間,以此來節(jié)省內(nèi)存空間大小。
我們實(shí)測(cè)后發(fā)現(xiàn),const變量不僅占用RAM空間,也會(huì)增大code的大小,大家在使用的時(shí)候可以實(shí)測(cè)試試。
沒有變到code空間的原因大概是ROM沒有運(yùn)行程序的能力
經(jīng)常聽到程序代碼可在NOR Flash上運(yùn)行,而不能在NAND Flash上運(yùn)行的說法,關(guān)于這個(gè)說法容易給人造成誤解,因?yàn)镃PU執(zhí)行代碼分為取指、譯碼、執(zhí)行三個(gè)步驟,所以真正運(yùn)行代碼的還是CPU,對(duì)于NOR Flash可以直接運(yùn)行代碼的說法,指的是CPU可以直接通過地址總線從NOR Flash上完成取指的操作。
— —盡量使用全局變量
函數(shù)的局部變量對(duì)占用??臻g,如果局部變量很多的話,以后出現(xiàn)問題都不好排查,使用全局變量可以使用code空間,確保??臻g足夠讓程序運(yùn)行,確保不要在運(yùn)行的時(shí)候出現(xiàn)??臻g不夠。
——盡量開啟看門狗
對(duì)于手機(jī)來說,看門狗不是很重要,但是對(duì)于單片機(jī)來說,看門狗非常重要,看門狗可以保證單片機(jī)死機(jī)后可以恢復(fù)運(yùn)行。
——聲明為char類型,實(shí)際上可能是unsigned char
這個(gè)是編譯器的鍋,大家如果發(fā)現(xiàn)程序不按自己想法運(yùn)行,可以留意下這個(gè)。

