电子工程师的网站
首 页 |  新闻资讯 | 最新产品 | 解决方案 | 技术参数
设计应用
电路图 | 技术资料 | 芯片资料 | 技术论坛
  现在位置: 首页 > 设计应用 > 专用芯片技术 > 详细信息
专用芯片技术:基于VxWorks的产品映象设计
来源:   时间: 2007-11-28 7:43:06    

      摘 要: 本文分析了VxWorks的映象特点,设计了几种VxWorks下产品映象的构造方案,并指出了这些构造设计的应用场合。

      关键词: VxWorks;映象;启动代码

      VxWorks是目前占垄断地位的实时操作系统,在许多领域获得广泛应用,但其产品映象设计却一直是令设计工程师头疼的问题。本文在实践验证的基础上,讨论了基于VxWorks操作系统上的产品映象设计技术,具有很强的实用性。

      VxWorks的映象分析 

      VxWorks映象内容包括:代码段(Text segment)、数据段(Data Segment)和符号起始块段(BSS Segment)。其中,代码段指可执行的指令集合;数据段指已经初始化的全局和静态变量;符号起始块段是未初始化的全局和静态变量,ANSI C/C++中要求这些变量初始化为零。

      VxWorks映象按类型分为:可下载的映象(Loadable images)、基于ROM的映象(ROM-based images)和ROM驻留映象(ROM-Resident images)三种。Loadable images一般用于调试,ROM或Flash中的启动代码BSP打通调试通道后,将其从PC机上装入RAM运行。ROM-based images整个映象在ROM或Flash中,由BSP从ROM或Flash中装载整个映象到RAM中运行,并分为压缩和非压缩方式。ROM-resident images则只拷贝VxWorks的data和bss部分到RAM中运行,运行效率低。

      基于VxWorks的产品映象设计

      本文bootable VxWorks映象即为ROM-based images,downloadable应用模块对应Loadable images。VxWorks最终产品映象一般烧录在Flash中,但由于Flash容量有限,并且为了动态更换程序方便,有时需要使用两片Flash。其中,第一片小容量的Flash仅作为启动和下载程序功能,采用插件式,以便替换;第二片大容量的Flash存放用户应用代码,多采用贴片方式。具体VxWorks的产品映象构造可使用以下四种技术方案。

      方案一

      Flash中存放BOOT+OS+ APPLICATION代码(Tornado图形环境下选项为bootable映象,rules=VxWorks_rom)。

      在Flash中的 BOOT启动后,就将OS装入RAM,跳到OS入口点,OS执行,并由OS最终调起用户应用程序。这种设计最为简洁,只需一片Flash装载程序。缺点是,采用插件Flash容量很小,仅适合程序不大的场合;而采用贴片方式的Flash,则有一个头疼的程序烧写问题。

      方案二 

      第一片小容量Flash放BOOT代码;第二片大容量的Flash放OS+APPLICATION代码(Tornado图形环境下选项为bootable映象,rules=VxWorks)。

      由VxWorks的Loadable images启动过程可知,第一片Flash会将BOOT code拷贝到RAM_HIGH_ADRS为起址的RAM空间,BOOT code则将OS拷贝到RAM_LOW_ADRS为起址的RAM空间,并跳到OS入口点,即RAM_LOW_ADRS执行。所以这种方法是在第一片Flash启动后,接着将第二片Flash中保存的OS+APPLICATION映象拷贝到RAM的RAM_LOW_ADRS ~ RAM_HIGH_ADRS之间,然后跳到RAM中的RAM_LOW_ADRS地址处即OS入口点执行。

      方案三 

      第一片小容量Flash放BOOT代码;第二片大容量的Flash放BOOT+OS+APPLICATION(Tornado图形环境下选项为bootable映象,rules=VxWorks_rom)。

      第一片BOOT启动后,其代码执行的最后一句跳至第二片Flash的启动代码romInit()处执行。第一片Flash代码用来将程序下载到第二片Flash中,正常情况下则是简单地启动第二片Flash中已有的程序。在做第二片Flash中的BOOT+OS+APPLICATION映象时,需要将BSP中config.h文件的ROM_BASE_ADRS参数修改为第二片Flash的基址,表示基于第二片Flash启动运行。这里第二片Flash执行并不等同复位CPU,只是又执行了一次与第一片Flash中上电复位后内容类似的初始化代码并新启动了一个OS,这个OS重新接管了SDRAM以及CPU的所有寄存器等,而第一片Flash中代码不再执行。

      下面提供一种方法,通过第一片Flash中的代码,可以将远程PC机上编译好的二进制可执行文件 rom.bin(含有BOOT+OS+APPLICATION)ftp到第二片Flash:

      /*(1)将PC ftp Server上的二进制可执行文件rom.bin(含有BOOT+OS+APPLICATION)ftp到target的SDRAM缓冲区buf中*/

      if (ftpXfer (server, fred, magic, , RETR %s, /usr/appl, rom.bin,

      &ctrlSock, &dataSock) == ERROR)

      return (ERROR);

      while ((nBytes = read (dataSock, buf, 5*1024)) > 0)

      {

      buf = buf + nBytes;

      TotalNum = TotalNum + nBytes;

      }

      close (dataSock);

      if (ftpReplyGet (ctrlSock, TRUE) != FTP_COMPLETE)

      status = ERROR;

      if (ftpCommand (ctrlSock, QUIT, 0, 0, 0, 0, 0, 0) != FTP_COMPLETE)

      status = ERROR;

      close (ctrlSock);

      /*(2)将ftp到SDRAM中的内容写入第二片Flash中*/

      writeFlash2(buf-TotalNum,FLASH2BASE,TotalNum);

      /*(3)第一片Flash执行的最后一行代码是跳转到第二片Flash中第一条语句执行*/

      FUNCPTR entry = (FUNCPTR)(FLASH2BASE+0x100);

      go (entry); 

      方案四 

      第一片小容量Flash放BOOT+OS+LOADER代码(Tornado图形环境下选项为bootable映象,rules=VxWorks_rom);第二片大容量Flash放APPLICATION(Tornado图形环境下选项为downloadable应用模块且可重定位,rules=objects),此片Flash必须有文件系统。 
    
      第一片Flash中是一个完整的产品映象,等同于BOOT+OS+APPLICATION,LOADER就是一个简单的APPLICATION,利用VxWorks提供给用户的目标模块加载器loadlib来完成LOADER功能。在第一片Flash启动运行到LOADER时,由LOADER的loadModule()函数将第二片Flash的APPLICATION文件动态加载入RAM,并与OS连接为可直接执行的映象,然后用symFindByName()找到应用代码文件appl.o中用户应用入口点ApplEntry,最后跳到应用入口函数执行。

      第一片Flash中的LOADER代码如下:

      FUNCPTR StartEntry;

      fd = open (/Flash2/appl.o, O_RDONLY,0);

      loadModule(fd, LOAD_ALL_SYMBOLS);

      symFindByName(sysSymTbl,“ApplEntry”,(char **)&StartEntry,&Type);

      (*StartEntry)( );

      其中,(1)loadModule(int fd,int loadFlag)函数从指定的文件fd中装载目标模块,并将Text、Data、BSS段放入目标内存池中;(2)SymFindByName(SYMTAB_ID symTblId, char* name, char** pValue, SYM_TYPE* pType)从符号表中搜寻与指定符号名匹配的符号,并将值考入pValue和pType中。

      VxWorks产品映象设计方案比较

      以上方案中,第一种设计只适合代码小的产品映象;第二、三、四种适合大容量代码的映象设计。第二种设计启动最快,但用户可修改性差,不灵活。第三种设计启动两次,速度慢,但可以做到动态远程更新包括BSP在内的整个第二片Flash中的映象。第四种必须在第二片Flash中有闪存文件系统TrueFFS,appl.o以文件形式存放其中,此设计最为复杂,但在增加远程程序下载更新功能方面十分方便。以上映象构造方案在实际中都得到成功验证,应用设计人员可以按照实际要求灵活选择。

相关信息
发表评论
打印本页 关闭本页
UC3875N的技术参数
  产品型号:UC3875N关断功能:No输出方式:四路相移,图腾柱输出电流(A):2频率最大值(kHz):1000基准电压(V):5启动电流(μA):150工作电流(mA):45输入电压最小值(V):9.250输入电压最大值(V):20PWM输出:1封装/温度(℃):20PDIP/0~70描述:电流方式PWM控制器价格/1片(套):¥74.00
>>详细内容
UC3845N的技术参数
  产品型号:UC3845N关断功能:No输出方式:单路图腾柱输出电流(A):1频率最大值(kHz):450基准电压(V):5启动电流(μA):1000工作电流(mA):11输入电压最小值(V):7.600输入电压最大值(V):30PWM输出:1封装/温度(℃):8PDIP/0~70描述:电流方式PWM控制器价格/1片(套):¥10.30
>>详细内容
UC3845D8的技术参数
  产品型号:UC3845D8关断功能:No输出方式:单路图腾柱输出电流(A):1频率最大值(kHz):450基准电压(V):5启动电流(μA):1000工作电流(mA):11输入电压最小值(V):7.600输入电压最大值(V):30PWM输出:1封装/温度(℃):8SOIC/0~70描述:电流方式PWM控制器价格/1片(套):¥10.30
>>详细内容
UC3845AN的技术参数
  产品型号:UC3845AN关断功能:No输出方式:单路图腾柱输出电流(A):1频率最大值(kHz):450基准电压(V):5启动电流(μA):300工作电流(mA):11输入电压最小值(V):7.600输入电压最大值(V):30PWM输出:1封装/温度(℃):8PDIP/0~70描述:电流方式PWM控制器价格/1片(套):¥10.30
>>详细内容
UC3845AD8的技术参数
  产品型号:UC3845AD8关断功能:No输出方式:单路图腾柱输出电流(A):1频率最大值(kHz):450基准电压(V):5启动电流(μA):300工作电流(mA):11输入电压最小值(V):7.600输入电压最大值(V):30PWM输出:1封装/温度(℃):8SOIC/0~70描述:电流方式PWM控制器价格/1片(套):¥10.30
>>详细内容
UC3845AD的技术参数
  产品型号:UC3845AD关断功能:No输出方式:单路图腾柱输出电流(A):1频率最大值(kHz):450基准电压(V):5启动电流(μA):300工作电流(mA):11输入电压最小值(V):7.600输入电压最大值(V):30PWM输出:1封装/温度(℃):14SOIC/0~70描述:电流方式PWM控制器价格/1片(套):¥10.30
>>详细内容
已有(
)位对此新闻感兴趣的网发发表了看法 >>更多评论
内 容:
     
 
热点新闻
一周排行
关于我们 | 服务项目 | 付款方式 | 广告服务 | 联系我们 | 友情链接 | 投诉 建议 合作 | 网站地图 | 加入收藏
Copyright © 2007-2008 WEEQOO.COM Corp.All Rights Reserved. 版权所有 经营许可证编号:浙B2-20050339 法律声明
维库电子旗下网站:维库电子市场网 | ChinaICMart | 维库电子开发网 | 维库电子人才网
总部:杭州市下城区朝晖路182号国都发展大厦1号楼80A
电话:0571-85889139-8007 QQ:303939539 | MSN:zh1226@hotmail.com |  邮箱:laz8258@163.com dzsc51@163.com