久久久久久久麻豆,中日韩av在线,麻豆av在线免费,中文字幕二区三区,欧美日韩视频一区二区,亚洲欧美日韩在线一区,国产无毒不卡

2X86嵌入式處理器開(kāi)發(fā)


x86 cpu 原來(lái)是用于個(gè)人計(jì)算機(jī)的,大家都知道的如 8086/88,80186/188,80286,80386,80486,petium,celeon,pentium ii……,隨著個(gè)人計(jì)算機(jī)的發(fā)展,許多原來(lái)的cpu紛紛被淘汰,但這些處理器并未退出歷史舞臺(tái),繼續(xù)在各個(gè)領(lǐng)域發(fā)揮著作用,在工業(yè)控制領(lǐng)域,80x186/188ea,80x186/188eb,80x186/188ec,80386ex等得到廣泛的應(yīng)用。 

    主要型號(hào)有:intel 80186/188, 80186/188ea, 80186/188eb, 80186/188ec, 80386ex ……, intel的站點(diǎn)http://www.intel.com。 

    amd 80186/188,80186/188ed,80186/188em,80186/188es,elan300,elan400,最近還推出了用于網(wǎng)絡(luò)的80186/188ch,型號(hào)我記不清了,有興趣的可以到http://www.amd.com去找。 

    比較而言我自己覺(jué)得amd的產(chǎn)品要好一些,設(shè)計(jì)簡(jiǎn)單,提供的外部資源(指定時(shí)器、中斷控制器、i/o口、地址譯碼、dma控制器、dram控制器……)要多一些,另外elan300,elan400簡(jiǎn)直就是一臺(tái)個(gè)人計(jì)算機(jī),它集成了pc機(jī)除了dram和磁盤(pán)控制器之外幾乎所有的電路(把lcd顯示器接口也集成到里面了,包括rtm,tmr,int controller,dma,dram controller,sio,keyboard……)。若用diskonchip作為硬盤(pán)的話(huà)加上dram,lcd顯示器,鍵盤(pán),網(wǎng)卡就是一臺(tái)pc機(jī)了。 

    為了適應(yīng)工業(yè)領(lǐng)域的應(yīng)用,簡(jiǎn)化用戶(hù)的開(kāi)發(fā)難度,intel和amd兩大公司推出了自己各有特色的產(chǎn)品,特別值得一提的是amd公司的產(chǎn)品,應(yīng)用起來(lái)特別是硬件設(shè)計(jì)非常簡(jiǎn)單,但amd公司沒(méi)有推出象 intel  appbuilder一樣的工具,編程還是要困難一點(diǎn)。另外x86系列的一個(gè)缺點(diǎn)就是仿真器非常昂貴,我們可以在pc機(jī)上作軟件調(diào)試,編譯器用 msc,tc,bc 均可。但生成的是 .exe 文件需要操作系統(tǒng)加載運(yùn)行,無(wú)法寫(xiě)入rom里,我們需要一個(gè)定位工具,把 .exe 文件的重定位段定位.另外由于沒(méi)有了操作系統(tǒng)的支持,所以需要重寫(xiě) c 語(yǔ)言的啟動(dòng)文件,在tc下有一個(gè) c0x.obj的文件(x=t,s,m,l,h為tiny, small, medium, large,huge模式,對(duì)應(yīng)的有一個(gè)c0.asm的匯編源程序),完成 c 語(yǔ)言的初始化,設(shè)置堆棧,與操作系統(tǒng)接口……,我們重寫(xiě) c 語(yǔ)言的啟動(dòng)文件就是重寫(xiě)c0.asm. 當(dāng)然若能買(mǎi)一個(gè)嵌入實(shí)時(shí)操作系統(tǒng)就不要這樣麻煩了,可悲的是嵌入實(shí)時(shí)操作系統(tǒng)太貴,也有免費(fèi)的,或者學(xué)習(xí)起來(lái)太難,因?yàn)闆](méi)有資料,用戶(hù)又太少。 


-------------------------------------------------------------------------------- 

    本人在用80c188eb開(kāi)發(fā)過(guò)一個(gè)通訊控制器,配有8個(gè)串口,其中有兩個(gè)為同步/異步,6個(gè)異步。配有512k rom,512k ram,rtm,8k串行eeprom。用tc作開(kāi)發(fā)工具,除了應(yīng)用程序外,主要的難點(diǎn)在于:c語(yǔ)言的啟動(dòng)代碼;定位工具;串行eeprom的接口庫(kù)。這里僅介紹c語(yǔ)言的啟動(dòng)代碼。 

    本來(lái),各種c語(yǔ)言編譯器都提供啟動(dòng)代碼,以x86為例,無(wú)論是tc、msc、bc都有。tc在不同模式下啟動(dòng)代碼不一樣,為c0x.obj.一般編程,用不著去修改啟動(dòng)代碼。但有的場(chǎng)合就有必要了。筆者為一套系統(tǒng)開(kāi)發(fā)軟件時(shí)發(fā)現(xiàn):一套系統(tǒng)當(dāng)沒(méi)有操作系統(tǒng)時(shí),要想使得系統(tǒng)正常運(yùn)行是相當(dāng)困難的。筆者開(kāi)發(fā)的系統(tǒng)cpu為80c188eb,無(wú)操作系統(tǒng),開(kāi)發(fā)工具為tc2.0。為了能使得系統(tǒng)運(yùn)行,又不能用太低級(jí)的語(yǔ)言如匯編,可謂歷盡辛苦(當(dāng)然可以買(mǎi)現(xiàn)成的開(kāi)發(fā)工具和仿真工具,太貴)。 
    筆者重寫(xiě)了tc的啟動(dòng)代碼,另外還改寫(xiě)了一個(gè)重定位工具(把exe文件變?yōu)榭芍苯訉?xiě)入rom去的文件)。因?yàn)楹苌僖?jiàn)到類(lèi)似文章。下面把主要內(nèi)容寫(xiě)出來(lái),以饗讀者。以后我準(zhǔn)備把這個(gè)工具完善以下,做成一個(gè)重新定位的工具。  

   c語(yǔ)言的啟動(dòng)代碼如下: 
; tcstart.asm 
; for d000 code only, external eprom on memory card 
; for pc rom  
extrn  _main:far;  

/*  說(shuō)明外部的c語(yǔ)言的main() 函數(shù),這也是 c 語(yǔ)言為什么非要從main()開(kāi)始的原因 */ 
_text segment byte public "code" ; /* c語(yǔ)言生成的代碼段 */ 
_text ends 
_textend segment para public "codeend";  /* 代碼段的結(jié)束段 */ 
_textend ends 
_data segment para public "data"; /* c語(yǔ)言生成的初始化數(shù)據(jù)段 */ 
_data ends 
_dataend segment para public "dataend"; /* 初始化數(shù)據(jù)段的結(jié)束段 */ 
_dataend ends 
_bss segment para public "bss"  ;/* c語(yǔ)言生成的非初始化數(shù)據(jù)段 */ 
_bss ends 
_bssend  segment byte public "bssend";/* c語(yǔ)言生成的非初始化數(shù)據(jù)結(jié)束段 */ 
_bssend  ends 
_stack segment para stack  "stack" ; /* 堆棧段 */ 
_stack ends 
dgroup group _data, _dataend, _bss, _bssend /* 把數(shù)據(jù)的段構(gòu)成一個(gè)組,代碼連在一起 */ 
cgroup group _text, _textend /* 把代碼的段構(gòu)成一個(gè)組,代碼連在一起 */ 
_text segment    ; /* 代碼段 */ 
assume cs:cgroup, ds:dgroup, es:dgroup, ss:_stack 

start: cli            ; disable interrupts 
mov ax, _stack ; initialise stack 
mov ss, ax 
mov ax, offset stackend 
mov sp, ax 
mov ax, seg _bss ; /* bss seg clear */ 
mov es, ax 
mov cx, offset dgroup:endbss 
mov di, 0    
mov ax, 0 
rep stosb ; write to es:di 
mov ax, seg dgroup  ;初始化數(shù)據(jù)段 
mov es, ax ; point es to _data 
mov cx, offset dgroup:enddata 
mov si, 0 
mov di, 0 
assume ds:cgroup 
mov ax, seg _textend:codeend 
inc ax 
mov ds, ax ; point ds to _const 
rep movsb ; copy _const to _data 
push es ; point ds to _data 
pop ds 
                             ;下面內(nèi)容非pc 機(jī)可以不要 
mov al, 80h  &n

COPYRIGHT(C) 2011 廈門(mén)永宏亞得機(jī)電科技有限公司版權(quán)所有(閩ICP備05025945號(hào)) ALL RIGHTS RESERVED?

電話(huà): 0592-5190891 傳真: 0592-5190720 E-Mail: E-mail:yade8895@163.com
地址: 廈門(mén)市海滄區(qū)興港六里17號(hào)2607室 郵編:361009 聯(lián)系人:翟先生