線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2102
推到 Plurk!
推到 Facebook!

X86嵌入式處理器開發

 
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-12-18 14:22:00 IP:61.221.xxx.xxx 未訂閱
此為轉貼資料 X86嵌入式處理器開發 X86 CPU 原來是用於個人電腦的,大家都知道的如 8086/88,80186/188,80286,80386,80486,Petium,Celeon,Pentium II……,隨著個人電腦的發展,許多原來的CPU紛紛被淘汰,但這些處理器並未退出歷史舞臺,繼續在各個領域發揮著作用,在工業控制領域,80x186/188EA,80x186/188EB,80x186/188EC,80386EX等得到廣泛的應用。 主要型號有:Intel 80186/188, 80186/188EA, 80186/188EB, 80186/188EC, 80386EX ……, Intel的站點http://www.intel.com。 AMD 80186/188,80186/188ED,80186/188EM,80186/188ES,ELAN300,ELAN400,最近還推出了用於網路的80186/188CH,型號我記不清了,有興趣的可以到http://www.amd.com去找。 比較而言我自己覺得AMD的?品要好一些,設計簡單,提供的外部資源(指計時器、中斷控制器、I/O口、位址解碼、DMA控制器、DRAM控制器……)要多一些,另外ELAN300,ELAN400簡直就是一台個人電腦,它集成了PC機除了DRAM和磁片控制器之外幾乎所有的電路(把LCD顯示器介面也集成到裏面了,包括RTM,TMR,INT Controller,DMA,DRAM Controller,SIO,KEYBOARD……)。若用DISKONCHIP作?硬碟的話加上DRAM,LCD顯示器,鍵盤,網卡就是一台PC機了。 ?了適應工業領域的應用,簡化用戶的開發難度,Intel和AMD兩大公司推出了自己各有特色的?品,特別值得一提的是AMD公司的?品,應用起來特別是硬體設計非常簡單,但AMD公司沒有推出象 Intel AppBuilder一樣的工具,編程還是要困難一點。另外X86系列的一個缺點就是模擬器非常昂貴,我們可以在PC機上作軟體調試,編譯器用 MSC,TC,BC 均可。但生成的是 .EXE 文件需要作業系統載入運行,無法寫入ROM裏,我們需要一個定位工具,把 .EXE 文件的重定位段定位.另外由於沒有了作業系統的支援,所以需要重寫 C 語言的?動文件,在TC下有一個 C0X.OBJ的文件(X=T,S,M,L,H?Tiny, Small, Medium, Large,Huge模式,對應的有一個C0.ASM的彙編根源程式),完成 C 語言的初始化,設置堆疊,與作業系統介面……,我們重寫 C 語言的?動文件就是重寫C0.ASM. 當然若能買一個嵌入即時操作系統就不要這樣麻煩了,可悲的是嵌入即時操作系統太貴,也有免費的,或者學習起來太難,因?沒有資料,用戶又太少。 -------------------------------------------------------------------------------- 本人在用80C188EB開發過一個通訊控制器,配有8個串口,其中有兩個?同步/非同步,6個非同步。配有512K ROM,512K RAM,RTM,8K串列EEPROM。用TC作開發工具,除了應用程式外,主要的難點在於:C語言的?動代碼;定位工具;串列EEPROM的介面庫。這裏僅介紹C語言的?動代碼。 本來,各種C語言編譯器都提供?動代碼,以X86?例,無論是TC、MSC、BC都有。TC在不同模式下?動代碼不一樣,?C0X.OBJ.一般編程,用不著去修改?動代碼。但有的場合就有必要了。筆者?一套系統開發軟體時發現:一套系統當沒有作業系統時,要想使得系統正常運行是相當困難的。筆者開發的系統CPU?80C188EB,無作業系統,開發工具?TC2.0。?了能使得系統運行,又不能用太低級的語言如彙編,可謂曆盡辛苦(當然可以買現成的開發工具和仿真工具,太貴)。 筆者重寫了TC的?動代碼,另外還改寫了一個重定位工具(把EXE文件變?可直接寫入ROM去的文件)。因?很少見到類似文章。下面把主要內容寫出來,以饗讀者。以後我準備把這個工具完善以下,做成一個重新定位的工具。 C語言的?動代碼如下: ; tcstart.asm ; for d000 code only, external eprom on memory card ; FOR PC ROM extrn _main:far; /* 說明外部的C語言的MAIN() 函數,這也是 C 語言?什?非要從MAIN()開始的原因 */ _text segment byte public "CODE" ; /* C語言生成的代碼段 */ _text ends _textend segment para public "CODEEND"; /* 代碼段的結束段 */ _textend ends _data segment para public "DATA"; /* C語言生成的初始化資料段 */ _data ends _dataend segment para public "DATAEND"; /* 初始化資料段的結束段 */ _dataend ends _bss segment para public "BSS" ;/* C語言生成的非初始化資料段 */ _bss ends _bssend segment byte public "BSSEND";/* C語言生成的非初始化資料結束段 */ _bssend ends _stack segment para stack "STACK" ; /* 堆疊段 */ _stack ends DGROUP group _DATA, _DATAEND, _BSS, _BSSEND /* 把資料的段構成一個組,代碼連在一起 */ CGROUP group _TEXT, _TEXTEND /* 把代碼的段構成一個組,代碼連在一起 */ _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 ;初始化資料段 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 ;下面內容非PC 機可以不要 mov al, 80h ; enable NMI out 0a0h, al mov al, 0bch ; enable 8259 PIC 1011-1100 (irq0,1,6 enabled) out 21h, al ;上面內容非PC 機可以不要 sti ; enable interrupts call _main ; CALL C MAIN() jmp start ; _TEXT ends _TEXTEND segment public codeend db 16 dup(?) ; a paragraph, thus _CONST is one byte more codeend label byte _TEXTEND ends _STACK segment db 1024 dup ("STACK");/* 預留的堆疊空間 */ stackend label word _STACK ends _BSSEND segment public endbss endbss label byte _BSSEND ends _DATAEND segment public enddata enddata label byte _DATAEND ends end 編譯連接: tasm /mx tcstart bcc -a- -c -f- -G- -K -B -ml -M -N- -O- -r- -v- -y- -Z- -S -O- 1.c tlink /m tcstart 1 tclib, 1, 1 locate 1; LOCATE 工具,本人無源代碼。 本人重寫了一個工具, EXEBN1.EXE 連同本文一起貢獻給讀者。 EXEBN1中在文件長度>64K時或使用CONSTANT說明時,會出問題,正式版本600元。 另外,?自行設計的系統寫BIOS,也可代?設計嵌入式控制系統。(16BIT OR 32BIT,186 OR 386 ) 提供80C186系列串列EEPROM C 語言介面庫,簡單調試工具,象徵性收費。 作者:lindalinger@sina.com
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
系統時間:2024-05-06 3:40:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!