利用keil c51生成hex如何設(shè)置ROM
附帖:為了說(shuō)明問(wèn)題,提供一下Small、Compact及Large的說(shuō)明(盡管知道有此三種設(shè)置,但還是不會(huì)運(yùn)用,不知在什么情況下做何設(shè)置),在keil C51編譯環(huán)境中,能提供:設(shè)置ROM空間的使用,有3個(gè)選擇項(xiàng),Small、Compact及Large。1.Small:只用低于2K的程序空間,適用于A(yíng)T89C2051這些芯片,2051只有2K的代碼空間,所以跳轉(zhuǎn)地址只有2KB,編譯的時(shí)候會(huì)使用ACALL AJMP這些短跳轉(zhuǎn)指令,而不會(huì)使用LCALL LJMP指令。如果代碼地址跳轉(zhuǎn)超過(guò)2K,那么會(huì)出錯(cuò)。2.Compact:?jiǎn)蝹€(gè)函數(shù)的代碼量不能超過(guò)2K,整個(gè)程序可以使用64K程序空間。3.Large:可用全部64K空間,表示程序或子函數(shù)代碼都可以大到64KB,使用code bank還可以更大。通常都選用該方式。選擇Large方式速度不會(huì)比Small慢很多,所以一般沒(méi)有必要選擇Compact和Small方式。Use on-chip ROM(0x0-0xFFF)選擇項(xiàng),表示使用片上的ROM (選中該項(xiàng)并不會(huì)影響最終生成的目標(biāo)代碼量),該選項(xiàng)取決于單片機(jī)應(yīng)用系統(tǒng),如果單片機(jī)的EA接高電平,則選中這個(gè)選項(xiàng),表示使用內(nèi)部ROM,如果單片機(jī)的EA接低電平,表示使用外部ROM,則不選中該選項(xiàng)。
問(wèn)題補(bǔ)充:
我使用at89s52(256RAM,8K的ROM),程序編譯后顯示program Size: data=56.0 xdata=0 code=3529。我的電路中無(wú)外部ROM,為了使生成的hex代碼只存儲(chǔ)在該片at89s52,我怎么設(shè)置呢?選small肯定不行,因?yàn)槲业拇a大于2K;若選compact,代碼能放在64K的程序空間,而我s52只有8K的ROM,代碼不會(huì)放在我的8K之外吧,那樣肯定會(huì)出錯(cuò)的。若我選擇“Use on-chip ROM(0x0-0xFFF)”后,那Small、Compact及Large 三檔選哪一檔?
評(píng)論