酚醛泡沫厂家
免费服务热线

Free service

hotline

010-00000000
酚醛泡沫厂家
热门搜索:
技术资讯
当前位置:首页 > 技术资讯

X86嵌入式处理器开发

发布时间:2020-07-01 02:03:03 阅读: 来源:酚醛泡沫厂家

X86CPU原来是用于个人计算机的,大家都知道的如8086/88,80186/188,80286,80386,80486,Petium,Celeon,PentiumII……,随着个人计算机的发展,许多原来的CPU纷纷被淘汰,但这些处理器并未退出历史舞台,继续在各个领域发挥着作用,在工业控制领域,80x186/188EA,80x186/188EB,80x186/188EC,80386EX等得到广泛的应用。 主要型号有:Intel80186/188,80186/188EA,80186/188EB,80186/188EC,80386EX……,Intel的站点。 AMD80186/188,80186/188ED,80186/188EM,80186/188ES,ELAN300,ELAN400,最近还推出了用于网络的80186/188CH,型号我记不清了,有兴趣的可以到去找。 比较而言我自己觉得AMD的产品要好一些,设计简单,提供的外部资源(指定时器、中断控制器、I/O口、地址译码、DMA控制器、DRAM控制器……)要多一些,另外ELAN300,ELAN400简直就是一台个人计算机,它集成了PC机除了DRAM和磁盘控制器之外几乎所有的电路(把LCD显示器接口也集成到里面了,包括RTM,TMR,INTController,DMA,DRAMController,SIO,KEYBOARD……)。若用DISKONCHIP作为硬盘的话加上DRAM,LCD显示器,键盘,网卡就是一台PC机了。 为了适应工业领域的应用,简化用户的开发难度,Intel和AMD两大公司推出了自己各有特色的产品,特别值得一提的是AMD公司的产品,应用起来特别是硬件设计非常简单,但AMD公司没有推出象IntelAppBuilder一样的工具,编程还是要困难一点。另外X86系列的一个缺点就是仿真器非常昂贵,我们可以在PC机上作软件调试,编译器用MSC,TC,BC均可。但生成的是.EXE文件需要操作系统加载运行,无法写入ROM里,我们需要一个定位工具,把.EXE文件的重定位段定位.另外由于没有了操作系统的支持,所以需要重写C语言的启动文件,在TC下有一个J的文件(X=T,S,M,L,H为Tiny,Small,Medium,Large,Huge模式,对应的有一个M的汇编源程序),完成C语言的初始化,设置堆栈,与操作系统接口……,我们重写C语言的启动文件就是重写M.当然若能买一个嵌入实时操作系统就不要这样麻烦了,可悲的是嵌入实时操作系统太贵,也有免费的,或者学习起来太难,因为没有资料,用户又太少。 本人在用80C188EB开发过一个通讯控制器,配有8个串口,其中有两个为同步/异步,6个异步。配有512KROM,512KRAM,RTM,8K串行EEPROM。用TC作开发工具,除了应用程序外,主要的难点在于:C语言的启动代码;定位工具;串行EEPROM的接口库。这里仅介绍C语言的启动代码。 本来,各种C语言编译器都提供启动代码,以X86为例,无论是TC、MSC、BC都有。TC在不同模式下启动代码不一样,为J.一般编程,用不着去修改启动代码。但有的场合就有必要了。笔者为一套系统开发软件时发现:一套系统当没有操作系统时,要想使得系统正常运行是相当困难的。笔者开发的系统CPU为80C188EB,无操作系统,开发工具为TC2.0。为了能使得系统运行,又不能用太低级的语言如汇编,可谓历尽辛苦(当然可以买现成的开发工具和仿真工具,太贵)。 笔者重写了TC的启动代码,另外还改写了一个重定位工具(把EXE文件变为可直接写入ROM去的文件)。因为很少见到类似文章。下面把主要内容写出来,以飨读者。以后我准备把这个工具完善以下,做成一个重新定位的工具。 C语言的启动代码如下: ;m ;ford000codeonly,externalepromonmemorycard ;FORPCROM extrn_main:far; /*说明外部的C语言的MAIN()函数,这也是C语言为什么非要从MAIN()开始的原因*/ _textsegmentbytepublic"CODE";/*C语言生成的代码段*/ _textends _textendsegmentparapublic"CODEEND";/*代码段的结束段*/ _textendends _datasegmentparapublic"DATA";/*C语言生成的初始化数据段*/ _dataends _dataendsegmentparapublic"DATAEND";/*初始化数据段的结束段*/ _dataendends _bsssegmentparapublic"BSS";/*C语言生成的非初始化数据段*/ _bssends _bssendsegmentbytepublic"BSSEND";/*C语言生成的非初始化数据结束段*/ _bssendends _stacksegmentparastack"STACK";/*堆栈段*/ _stackends DGROUPgroup_DATA,_DATAEND,_BSS,_BSSEND/*把数据的段构成一个组,代码连在一起*/ CGROUPgroup_TEXT,_TEXTEND/*把代码的段构成一个组,代码连在一起*/ _TEXTsegment;/*代码段*/ assumeCS:CGROUP,DS:DGROUP,ES:DGROUP,SS:_STACK start:cli;disableinterrupts movax,_STACK;initialisestack movss,ax movax,offsetstackend movsp,ax movax,seg_BSS;/*BSSSEGCLEAR*/ moves,ax movcx,offsetDGROUP:endbss movdi,0 movax,0 repstosb;writetoES:DI movax,segDGROUP;初始化数据段 moves,ax;pointESto_DATA movcx,offsetDGROUP:enddata movsi,0 movdi,0 assumeds:CGROUP movax,seg_TEXTEND:codeend incax movds,ax;pointDSto_CONST repmovsb;copy_CONSTto_DATA pushes;pointDSto_DATA popds ;下面内容非PC机可以不要 moval,80h;enableNMI out0a0h,al moval,0bch;enable8259PIC1011-1100(irq0,1,6enabled) out21h,al ;上面内容非PC机可以不要 sti;enableinterrupts call_main;CALLCMAIN() jmpstart; _TEXTends _TEXTENDsegment publiccodeend db16dup(?);aparagraph,thus_CONSTisonebytemore codeendlabelbyte _TEXTENDends _STACKsegment db1024dup("STACK");/*预留的堆栈空间*/ stackendlabelword _STACKends _BSSENDsegment publicendbss endbsslabelbyte _BSSENDends _DATAENDsegment publicenddata enddatalabelbyte _DATAENDends end 编译连接: tasm/mxtcstart bcc-a--c-f--G--K-B-ml-M-N--O--r--v--y--Z--S-O-1.c tlink/mtcstart1tclib,1,1 locate1;LOCATE工具,本人无源代码。 本人重写了一个工具,E连同本文一起贡献给读者。 EXEBN1中在文件长度>64K时或使用CONSTANT说明时,会出问题,正式版本600元。

山东防静电工服订做

德州订制工服

哈尔滨订做西装