您现在的位置:智能制造网>技术首页>自动化资料

2X86嵌入式处理器开发

2008年02月16日 10:40来源:浙江启扬智能科技有限公司 >>进入该公司展台人气:1417

x86 cpu 原来是用于个人计算机的,大家都知道的如 8086/88,80186/188,80286,80386,80486,petium,celeon,pentium ii……,随着个人计算机的发展,许多原来的cpu纷纷被淘汰,但这些处理器并未退出历史舞台,继续在各个领域发挥着作用,在工业控制领域,80x186/188ea,80x186/188eb,80x186/188ec,80386ex等得到广泛的应用。 

    主要型号有:in 80186/188, 80186/188ea, 80186/188eb, 80186/188ec, 80386ex ……, in的站点。 

    amd 80186/188,80186/188ed,80186/188em,80186/188es,elan300,elan400,zui近还推出了用于网络的80186/188ch,型号我记不清了,有兴趣的可以到去找。 

    比较而言我自己觉得amd的产品要好一些,设计简单,提供的外部资源(时器、中断控制器、i/o口、地址译码、dma控制器、dram控制器……)要多一些,另外elan300,elan400简直就是一台个人计算机,它集成了pc机除了dram和磁盘控制器之外几乎所有的电路(把lcd显示器接口也集成到里面了,包括rtm,tmr,int controller,dma,dram controller,sio,keyboard……)。若用diskonchip作为硬盘的话加上dram,lcd显示器,键盘,网卡就是一台pc机了。 

    为了适应工业领域的应用,简化用户的开发难度,in和amd两大公司推出了自己各有特色的产品,特别值得一提的是amd公司的产品,应用起来特别是硬件设计非常简单,但amd公司没有推出象 in  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 工具,本人无源代码。
关键词:处理器控制器
全年征稿/资讯合作 联系邮箱:1271141964@qq.com
  • 凡本网注明"来源:智能制造网"的所有作品,版权均属于智能制造网,转载请必须注明智能制造网,https://www.gkzhan.com。违反者本网将追究相关法律责任。
  • 企业发布的公司新闻、技术文章、资料下载等内容,如涉及侵权、违规遭投诉的,一律由发布企业自行承担责任,本网有权删除内容并追溯责任。
  • 本网转载并注明自其它来源的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品来源,并自负版权等法律责任。
  • 如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。


编辑精选

更多


宣传样本推荐图书

旗下子站

工控网机器人仪器仪表物联网3D打印工业软件金属加工机械包装机械印刷机械农业机械食品加工设备制药设备仓储物流环保设备造纸机械工程机械纺织机械化工设备电子加工设备水泥设备海洋水利装备矿冶设备新能源设备服装机械印染机械制鞋机械玻璃机械陶瓷设备橡塑设备船舶设备电子元器件电气设备



关于我们|本站服务|会员服务|企业建站|旗下网站|友情链接| 兴旺通| 产品分类浏览|产品sitemap

智能制造网 - 工业4.0时代智能制造领域“互联网+”服务平台

Copyright gkzhan.comAll Rights Reserved法律顾问:浙江天册律师事务所 贾熙明律师

客服热线:0571-87756395加盟热线:0571-87759904媒体合作:0571-89719789

客服部:编辑部:展会合作:市场部:

关闭