音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

嵌入式系統(tǒng)的啟動過程

作者:novar 欄目:嵌入式系統(tǒng)
嵌入式系統(tǒng)的啟動過程
嵌入式系統(tǒng)設(shè)計(jì)要點(diǎn)--啟動過程


嵌入式系統(tǒng)
    采用大容量EPROM來固化程序的專用系統(tǒng),正在智能儀器和自動化等領(lǐng)域里
得到廣泛應(yīng)用。傳統(tǒng)設(shè)計(jì)方法用匯編語言編寫程序,這主要是從保證速度和節(jié)省存儲
空間考慮,但編程費(fèi)時(shí),調(diào)試和排錯很不容易。微電子技術(shù)的飛速發(fā)展,使高性能微
處理器和大容量存儲器的價(jià)格變得十分便宜,速度和存儲容量不再是困擾設(shè)計(jì)者的主
要問題。人們將ROMBIOS和CRT顯示器等外設(shè)加進(jìn)這類專用系統(tǒng),并嘗試用
高級語言來開發(fā)其軟件,即把通用計(jì)算機(jī)上的軟件和硬件“嵌入”專用系統(tǒng),構(gòu)成所
謂的嵌入式系統(tǒng)(EmbeddedSystem)。由于C語言容易編程、代碼緊
湊、可移植性和可維護(hù)性好,因而被普遍用于嵌入式程序的設(shè)計(jì)。
    大多數(shù)嵌入式系統(tǒng)無操作系統(tǒng)支持,要由設(shè)計(jì)者提供所有低級I/O功能。系統(tǒng)
I/O資源有限,程序必須固化在EPROM中,不能象在DOS下那樣從磁盤裝入
和由用戶編程。設(shè)計(jì)者要編寫一個定位程序(Locator),把EXE格式的應(yīng)
用程序轉(zhuǎn)換成可固化進(jìn)EPROM的二進(jìn)制文件(ROM圖)。還要編寫一個啟動程
序(runtimeStartupCode),與ROM圖一起嵌入EPROM,
先由它建立數(shù)據(jù)區(qū)和對系統(tǒng)硬件作必要初始化,然后調(diào)Main函數(shù),執(zhí)行應(yīng)用程序。
若想發(fā)揮C語言之優(yōu)勢,使用一些標(biāo)準(zhǔn)I/O語句,如用printf驅(qū)動顯示器等,
則要在嵌入式程序中加進(jìn)經(jīng)過修改的庫函數(shù)?傊,C語言編程會使系統(tǒng)開發(fā)面臨一
些新問題,要求設(shè)計(jì)人員具備軟硬件方面的綜合知識,才能正確進(jìn)行系統(tǒng)調(diào)試和排錯。
     當(dāng)然,如果擁有專用的嵌入式系統(tǒng)開發(fā)工具,設(shè)計(jì)工作便要省勁些。它們通常配
有定位程序和可供設(shè)計(jì)者修改的啟動程序樣板,有些還能通過串口或并口,在PC機(jī)
上聯(lián)機(jī)調(diào)試程序,甚至有源級代碼調(diào)試功能。利用工控機(jī)來設(shè)計(jì)系統(tǒng),事情就更簡單。
不過,專用開發(fā)工具和工控機(jī)價(jià)格昂貴,因此許多人在設(shè)計(jì)嵌入式系統(tǒng)時(shí)選擇自己編
寫定位程序和啟動程序,甚至編寫可嵌入的I/O庫函數(shù)。本文就嵌入式系統(tǒng)的程序
設(shè)計(jì)方法及設(shè)計(jì)中可能遇到的問題作些討論,供打算設(shè)計(jì)嵌入式程序的讀者參考,有
關(guān)編寫定位程序和啟動程序的具體方法將另文介紹。
2 嵌入式程序的定位
    2.1。牛兀盼募袷胶停模希又囟ㄎ
        DOS下的EXE文件是一種可重定位文件
(Re-locatableFile),它由重定位標(biāo)頭和裝入模塊組成。后者含
一段或幾段程序代碼,段數(shù)與類型取決于程序規(guī)模和編譯時(shí)所用的內(nèi)存模式,然后是
初始化與未初始化的數(shù)據(jù)及堆棧,還可能有程序排錯信息。代碼、數(shù)據(jù)和堆棧段地址
均是參考到程序開頭的相對地址。標(biāo)頭放在裝入模塊之前,含若干定位控制信息和一
張定位表?刂菩畔ǎ牛兀盼募笮、標(biāo)頭長度、需要重定位的項(xiàng)數(shù)和位置、裝
入模塊的開頭和堆棧的相對地址等。定位表是一組形式為段址:偏址的遠(yuǎn)指針,指示
裝入模塊中要重定位的那些段址相對于模塊開頭處的位置。裝進(jìn)RAM后,加載程序
建立起程序段前綴PSP,并根據(jù)系統(tǒng)當(dāng)前可用RAM地址修改這些段址,對裝入模
塊重定位,使程序中所有參考絕對地址的量正確指向模塊裝入后的起始地址,然后執(zhí)
行(圖1)。因此它可在RAM中的任何位置上執(zhí)行。圖1 DOS對EXE文件的
定位過程

4 嵌入式程序的運(yùn)行
嵌入式系統(tǒng)大多不能從鍵盤接受命令,而要在系統(tǒng)通電或復(fù)位時(shí),自動執(zhí)行ROM中的

程序。各系統(tǒng)的復(fù)位地址不盡相同,以工作在實(shí)模式的80x86嵌入式系統(tǒng)為例,
CPU復(fù)位后將執(zhí)行F000:FFF0H處的代碼。這是系統(tǒng)ROM的高址端,僅
有16字節(jié)空間,設(shè)計(jì)者可用DEBUG命令在ROM圖的這個位置上,放一條無條
件遠(yuǎn)跳轉(zhuǎn)指令JMPFARPTRstart,轉(zhuǎn)到ROM開頭,從那里執(zhí)行啟動程
序(見圖2)。啟動程序完成上述的初始化后調(diào)main函數(shù),執(zhí)行應(yīng)用程序。
80286以上的CPU復(fù)位時(shí),CS:IP初值仍是F000:FFF0H。但
A20以上地址線在CS寄存器被第一次裝進(jìn)新的內(nèi)容前,一直保持高電平,即開始
地址指向最高地址端。如只要求系統(tǒng)工作在實(shí)模式,可由譯碼電路將開始的高地址反
射到低端的1MB空間,復(fù)位矢量仍是F000:FFF0H。當(dāng)上述JMP指令一
執(zhí)行,CS被改寫,A20以上地址線將變低而進(jìn)入實(shí)模式。要是希望啟動后進(jìn)入保
護(hù)模式,就不需要進(jìn)行地址反射,但是相應(yīng)的復(fù)位地址上只能放一條近跳轉(zhuǎn)指令,保
證不改變CS值。然后進(jìn)行必要的初始化,盡快進(jìn)入保護(hù)模式。
5 嵌入式程序的編譯和連接
綜上所述,設(shè)計(jì)嵌入式系統(tǒng)時(shí)要在PC機(jī)上編寫三個程序:應(yīng)用程序MYPROG.C;定
位程序LO-CATOR.C;啟動程序STARTUP.ASM。然后按以下步驟進(jìn)行編
譯和連接,生成可編程的ROM圖:
·將應(yīng)用程序編譯成MYPROG.OBJ。
·將定位程序編譯和連接成可執(zhí)行程序LO-CATOR.EXE。
·將啟動程序編譯成STARTUP.OBJ。
·對STARTUP.OBJ、MYPROG.OBJ及必要的庫函數(shù)進(jìn)行連接,
生成EMBED.EXE和簡化的MAP文件EMBED.MAP。STARTUP
必須是LINK行上的第一個模塊,保證它先執(zhí)行。
·執(zhí)行LOCATOR.EXE,以EMBED.EXE、EMBED.MAP、
第一個RAM段的段類名、RAM和ROM始址為輸入?yún)?shù),實(shí)現(xiàn)定位,輸出ROM
圖EMBED.BIN。
·用DEBUG命令在EMBED.BIN的F000:FFF0H位置上加進(jìn)
指令JMPFARPTRstart,形成最終的ROM圖。
6 其它幾個問題
6.1 系統(tǒng)內(nèi)存考慮
為確保正確復(fù)位,設(shè)計(jì)硬件時(shí)要讓ROM地址空間覆蓋復(fù)位矢量。例如8086
系統(tǒng)的最高地址為F000:FFFFH,若采用128KB的ROM,其地址范圍
應(yīng)取E000:0000-F000:FFFFH。
RAM地址則應(yīng)從0開始,由于開頭1KB字節(jié)RAM要保留給中斷矢量表,通
常如圖2那樣將RAM數(shù)據(jù)區(qū)設(shè)在地址0040:0000H處。
常數(shù)先固化在ROM中,然后被復(fù)制進(jìn)RAM,因此占用的存儲器空間是DOS
下的兩倍?稍诔绦蛟O(shè)計(jì)中設(shè)法限制要復(fù)制進(jìn)RAM的常數(shù)數(shù)量。例如,系統(tǒng)若支持
CRT顯示器,可能需要在屏幕上顯示各種消息和菜單提示。這時(shí),可把所有顯示函
數(shù)和有關(guān)文本串放進(jìn)一個模塊,再用指針來存取它們。比如,本來可用下面語句打印
提示:
  。穑颍椋睿簦妫"PressStoStart"); 
printf("PerssQtoQuit");
若程序中有許多類似的語句,便可能存在較多重復(fù)串。要是對各子串都用指針訪
問,編譯就會把其中重復(fù)的串(如Press,to等)合并,省下不少內(nèi)存空間。
即把上面語句改為:
printf("%s%s%s%s","Press","S","to","Start")
; 
printf("%s%s%s%s","Perss","Q","to","Quit");

6.2 標(biāo)準(zhǔn)I/O函數(shù)的使用
用C語言編寫嵌入式程序的過程與DOS下一樣,只是要避免使用不能被固化到
ROM中的庫函數(shù)。在DOS下,許多低級I/O函數(shù)(如putch,getch)

均通過DOS中斷21H與硬件接口,高級函數(shù)printf,scanf等也使用
該中斷。若希望在無ROMBIOS的系統(tǒng)上使用這些函數(shù),應(yīng)編寫一個模仿
DOSINT21的函數(shù),這樣便能使用除磁盤I/O函數(shù)之外的大多數(shù)標(biāo)準(zhǔn)I/O
函數(shù),縮短程序開發(fā)時(shí)間,并保證較好的可移植性。當(dāng)然,如果使用的是現(xiàn)成的嵌
入式系統(tǒng)開發(fā)軟件包,廠商將告知哪些函數(shù)可被固化進(jìn)ROM,不必自己編寫
INT21函數(shù)。
編寫嵌入式支持函數(shù)時(shí)要防止使用與DOS有關(guān)的庫函數(shù)。比較起來,BC提供
的庫比MSC的更獨(dú)立于DOS。例如,MSC的printf函數(shù)要依賴幾個低級
的DOS函數(shù)。所以在仿真INT21的控制臺I/O函數(shù)時(shí),建議用BC的
printf函數(shù)。
6.3 配置參數(shù)的保護(hù)
斷電時(shí),嵌入式系統(tǒng)應(yīng)能保持那些用于系統(tǒng)恢復(fù)或外設(shè)配置的數(shù)據(jù),可用電池供
電的RAM或EEPROM來存放它們。但在復(fù)位時(shí),啟動程序要把有初值的變量復(fù)
制進(jìn)RAM,并對其余RAM區(qū)清0,結(jié)果會清除應(yīng)保持的數(shù)據(jù)。為此,可把這類數(shù)
據(jù)歸入一個專門段,不包括在初始化和未初始化數(shù)據(jù)區(qū)中,不讓啟動程序修改它們。


2樓: >>參與討論
blueboyjf
占位學(xué)習(xí)
 
參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
flash
請大家推薦一款A(yù)RM芯片
如何學(xué)習(xí)開發(fā)手機(jī)程序?請高手指教:—)
請教 system generator
一般手機(jī)是用什么操作系統(tǒng)??
免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號