'P>
2 增加重启功能VXWORKS的BOOTROM用户命令缺少重启功能,给调试和实际应用带来诸多不便。与BOOTROM在线更新方法相同,增加这项功能其实并不难,只要在函数BOOTCMDLOOP()中增加新命令“R”(RESET的缩写),在命令中调用系统重启函数SYSREBOOT()即可。SYSREBOOT()由设计师根据系统的不同自行编写。SWITCH(*(PLINE )){……CASE 'R'; /*重启系统*/SYSREBOOT();BREAK;……}举一反三,还可以根据需要在BOOTROM中增加许多自己的命令。完成之后,不要忘了在BOOTROM命令解释函数BOOTHELP()中添加新增命令的用途、用法等帮助信息。3 自动运行应用软件在实际应用中,一般将上层软件和VXWORKS映象链接在一起,暂且称之为应用程序。默认情况下,当BOOTROM运行后,它会倒计时7S,然后从启动参数(BOOT_LINE)指定的路径下载应用程序。但是,因为BOOTROM提供了启动参数修改命令,启动参数可能由于某些原因发生更改。例如调试时需要从FTP服务器下载,或者疏忽好奇等,给下次应用带来不少麻烦,很可能出现应用程序下载挫败等故障。为了保证自动启动总是从固定路径下载应用程序,而不受启动参数的影响,需要修改文件BOOTCONFIG.C中的自动启动函数AUTOBOOT()。例如,自动启动总是从CF卡读取应用程序。IF(BYTESREAD ==0){ /*倒计时期间没有输入*/LOADAPPLICATIONIMAGE();/*复制应用程序映象到起始地址为ENTRY的内存中*/GO((FUNCPTR)ENTRY;/*从ENTRY地址开始运行*/}ELSE{……}ENTRY是应用程序的入口地址,VXWORKS系统中该值是RAM_LOW_ADRS。LOADAPPLICATIONIMAGE()函数将应用程序映旬从CF卡复制到起始地址为ENTRY的内存中,然后将PC指针指向该地址,启动系统。如果在倒计时期间有字符输入,则进入BOOTROM的命令界面,用户可以修改启动参数,然后按“@”从启动参数指定的路径下载程序,而不影响调试,但是更改后的参数不会影响下次自动启动的下载路径。4 多种应用软件的选择在通信领域,许多产品的硬件平台其实相同,区别在于应用软件。不同的软件塑造出了一个个特色鲜明的产品。如果能够将不同的软件集成到一个硬件平台上,由用户在启动时选择,那么这个产品就拥有一机多能的特性,大大增强了产品的市场竞争力。退而言之,即使硬件平台只适合于一种应用软件,将故障检测程序作为另一种应用软件,会带给产品测试和现场维修人员诸多的方便。参考以上三点经验,在BOOTROM中增加这项功能并非难事。以两个应用软件为例,在函数BOOTCMDLOOP()中增加新命令“O”(OTHER的编写),如下所示。SWITCH(*(PLINE )){……CASE 'O': /*启动另一应用软件*/LOADANOTERAPPLICATIONIMAGE();/*复制另一应用程序映象到起始地址为ENTRY的内存中*/AUTOSYSTEMVERSIONSET();/*询问用户是否将另一应用软件设置为默认启动*/GO((FUNCPTR)ENTRY);/*从ENTRY地址开始运行*/BREAK;……}'P>
图3
在BOOTROM代码中定义一个变量DEFAULTVERSION,用于记录谁是默认的启动软件,该变量保存在FLASH等非易失媒质中。上电后,如果在倒计暑期间没有任何输入,系统自动启动DEFAULTVERSION指定的应用软件;否则,用户进入命令界面。如果键入“O”命令,BOOTROM调用函数LOADANOTHERAPPLICATIONIMAGE()将另一应用程序映象复制到起始地址为ENTRY的内存区域,然后询问用户是否希望将另一应用程序设置为默认启动;如果用户回答“是”,更改DEFAULTVERSION值;否则,DEFAULTVERSION值不变。最后运行当前选定的应用软件。上述的几点经验大部分是修改文件BOOTCONFIG.C的代码。因为BOOTCONFIG.C是一个公用文件,为了不影响其它底层软件的开发,建议将它复制到当前BOOTROM开发目录下,并且在MAKEFILE文件中增加定义:BOOTCONFIG=BOOTCONFIG.C。嵌入式系统开发需要经常开辟新的思路,一些微小的简单改动通常能够带给产品新的功能和特征。启动代码是嵌入式系统的重要组成部分。笔者的以上四点经验在POWERPC处理器(MPC8260)平台和MIPS处理器(RM7000A)平台上得到了验证,希望对其它系统的启动代码的开发有所借鉴和启迪。 上海横河国际易有限公司 WELCOME TO YOKOGAWA SHANGHAI TRADING CO.,LTD. ADVICEPLUS仿真器 ADVICEPLUS系列仿真器为您提供最强大的嵌入式调试解决方案。
