当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]现在我们的工作中,应用程序一般都是和BSP联编,然后将vxworks_rom.bin烧到班子里。在BSP启动后,调用应用程序的函数的。但是这样有个问题,就是应用程序和BSP结合的太紧密

现在我们的工作中,应用程序一般都是和BSP联编,然后将vxworks_rom.bin烧到班子里。在BSP启动后,调用应用程序的函数的。

但是这样有个问题,就是应用程序和BSP结合的太紧密了。BSP开发者得将BSP代码给应用程序开发者,或者应用程序开发者得将应用程序编译后的.a文件给BSP开发者,才能完成程序的升级!

那么下面的方法是我这两天弄出来的,可以将应用程序和BSP开发分离的一个办法。只要开始将接口约定好就可以了!还不是很成熟,我也还没有正式在项目中使用,但是我相信这是一个不错的选择!

首先,要建立一个文件系统,TFFS的文件系统就可以。磁盘大小只要可以放的下应用程序编译后的文件就好了。这步就不赘述了。

然后,在BSP工程的usrApp中添加下载应用程序模块和启动接口程序的代码。下面主要说明这步,代码如下:

#include "loadLib.h"

#include "stdio.h"

#include "taskLib.h"

#include "ioLib.h"

extern SYMTAB_ID sysSymTbl;

void usrAppInit (void)

{

#ifdef USER_APPL_INIT

USER_APPL_INIT; /* for backwards compatibility */

#endif

FUNCPTR taskEntry=NULL;

SYM_TYPE *pType;

intfd=open("/tffs0/appProj.out",O_RDONLY,0);

if(fd==NULL)

{

printf("/nopen project fail../n");

return;

}

if(loadModule(fd,LOAD_ALL_SYMBOLS)==ERROR)

{

printf("/nload module fail.../n");

return;

}

if(symFindByName(sysSymTbl,"appEntry",(char* *)&taskEntry,pType)==ERROR)

{

printf("/nfind symbol fail.../n");

return;

}

taskSpawn("entry",100,0,1024,taskEntry,0,0,0,0,0,0,0,0,0,0);

/* add application specific code here */

}

主要代码。只要应用程序将升级后的工程编译成.out文件,上传到磁盘/tffs0中,就可以了!当然,应用程序的入口函数appEntry不能变。

最后,这段代码如果之间运行,可能会遇到一些问题:

1.loadMoudle失败,报错Relocation value doesnot fit in 24 bits。这是因为函数在内存中的位置超出了跳转的最大距离(一般跳转指令是24bit,32M).为了解决这个问题,按如下步骤:

在应用程序的工程中选择"Builds"->"default"->"c/c++complier",在后边加入-mlongcall(GUN)或者-Xcode-absolute-far(diab),点击OK.

把这个编译出来的.out文件上传到文件系统。

2.symFindByName失败。这个原因可能是因为应用程序的工程是cpp文件,也就是c++文件。c++编译出来的文件,符号表的入口和C 不同,所以找不到。如,同样的entry(void,int)函数,C编译出来就是entry,而C++可能是entry_Fvi,这个由于不同的编译器而不同。解决这个问题,有两个办法:

(1).入口函数所在的文件,不要用cpp文件,全部改用c文件。

(2).cpp文件中的入口函数包含在external "C" {}中。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

VxWorks是一款广泛应用于嵌入式系统的实时操作系统(RTOS)。作为实时操作系统领域的领导者,VxWorks以其强大的功能和可靠性,在多个行业领域得到了广泛应用。本文将向读者简要介绍VxWorks系统,包括其定义、特...

关键字: VxWorks 操作系统 嵌入式

自己目前开发的嵌入式开发所用的操作系统是VxWorks,以前读大学的时候用的最多的是linux操作系统,但是,对于这两种操作系统之间到底有什么区别,还真没有真正去细心的总结过,被别人问起时,难免有些尴尬的感觉,毕竟自己是...

关键字: VxWorks Linux

调试指令,dbgHelp显示所有的调试命令

关键字: VxWorks 调试命令

  目前,触摸面板在全球已开始自成一项产业,作为一项先进的计算机输入设备,它是目前最简单、方便、自然的而且又适用于多媒体信息查询装备。触摸面板具有坚固耐用、反应速度快、节省空间、易于交流等许多优

关键字: VxWorks 通信模型

  • 新一代实时操作系统的 Security Profile 在各个层面为互联设备提供全程保护。   • 从Wibu-Systems中无缝集成基于硬件和基于软件的安

关键字: profile security VxWorks 物联网 风河公司

  • Wind River 的COTS (商用现货) 平台为空客集团ATLANTE无人机项目提供核心安全性相关的综合模块化航电应用软件。   • VxWorks 6

关键字: 653 platform VxWorks 风河公司

2020年,StackOverflow对全球开发人员进行了关于最受欢迎的编程语言的调查。 在排名中,Python语言超过Java,排名第二(紧随Rust之后)。 与去年的排名相比,Python已成为增长最快的编程语言,并...

关键字: python VxWorks 嵌入式

新闻摘要 · 网站为开发人员量身定制,提供软件工程、概念验证、开源集成、实验性软件以及史上首个免费VxWorks® real-RTOS SDK。 · Wind River Labs可用项目的特色亮点:适用于VxWor...

关键字: sdk VxWorks 智能边缘软件

新闻要点-VxWorks是支持RISC-V架构且部署最为广泛的商业化RTOS-借力最新开源硬件指令集架构,风河持续增强在RTOS业界的领先地位-风河同时加入了RISC-V基金会领先的智能边缘软件提供商风河®近日宣...

关键字: risc-v rtos VxWorks 风河

全球领先的智能边缘软件提供商风河公司近日宣布,推出其业界领先的实时操作系统(RTOS) VxWorks 的最新版本。

关键字: VxWorks 嵌入式开发 风河
关闭
关闭