5761|20

3

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于应用程序的跳转 [复制链接]

各位,请教一个问题!
我们现在一般应用代码都是和BSP联编,做成一个bin文件,烧在ROM里面。但是这样的话,使得BSP和应用代码结合太紧。有没有办法使应用程序不和BSP联编,而是将应用程序单独放在一块地方,BSP起来后跳转到想要的应用程序处开始了?
我知道肯定是有办法的,请各位大家不吝赐教!

最新回复

按说应该是可以的。在CPP的代码里也extern一下呢?  详情 回复 发表于 2010-5-23 20:07
点赞 关注

回复
举报

1

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
引用 15 楼 zhangyinxun 的回复:
引用 14 楼 heaven_redsky 的回复:

引用 13 楼 merry_meng 的回复:
我现在是这样做的,不知道对你有没有帮助:
应用程序模块生成.out后放到flash的文件系统中,让对方给你提供入口函数,比方说App1();
自己在usrAppinit里调用loadModule函数加载该.out,然后在调用入口函数App1();
告诉对方ftp的用户名和密码,需要更……

去看了下博客~~呵呵,握手

 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
为啥应用程序非得和BSP编一起,然后一起烧进去?应用程序做成单独的加载模块,或者和内核编在一块,通过TFTP下载来调试不是更好?事实上这也是在做成带有BOOTROM的VxWorks或者文件系统之前最常用的方法了。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 1 楼 laorenshen 的回复:
帮你顶

哈哈~~多谢!要是能给点指教就更好了!
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用 3 楼 lpangbing 的回复:
有方法,把程序做成可加载的模块

这个就是我们现在的一般方法啊。在一个可加载的工程里做应用程序,然后编译成.a文件,再放在BSP里面联编成新的BSP,再烧进板子里。
我现在的想法是,应用程序是另外单位的人做的,我们只负责BSP。这样,他们如果有修改应用程序,不需要我们的配合就可以自己把板子里的应用程序更新。
所以,我想能不能把应用程序放在FLASH的一个固定地方,BSP每次启动完成后就跳转过去。如果应用程序有更新,直接把自己的应用程序烧到相应的空间就OK了?
如果有什么好的方法,希望各位高手不吝赐教。最好说的详细些!
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 6 楼 heaven_redsky 的回复:
为啥应用程序非得和BSP编一起,然后一起烧进去?应用程序做成单独的加载模块,或者和内核编在一块,通过TFTP下载来调试不是更好?事实上这也是在做成带有BOOTROM的VxWorks或者文件系统之前最常用的方法了。


可不可以说得更详细些了?我们现在没有这样做过,不了解具体过程...
这个单独的模块怎么编译?如何通过TFTP来下载?如何跳到我想要得程序?文件系统我们已经有了。拜托...
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

7
 
嗯,可加载型工程里放入你的应用程序,然后加载到所用的BSP中即可!
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

8
 
有方法,把程序做成可加载的模块
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

9
 
帮你顶
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 8 楼 heaven_redsky 的回复:
其实就是通过BSP编译一个bootrom。
然后再建一个image工程,和这个BSP链接一下,这样就可以编译出一个vxWorks内核。
如果你们已经有了文件系统,把这个vxWorks放在文件系统里,就可以加载运行了。
等开发出APP之后,把.o链接进vxWorks就可以达到你所说的目的了。
这样,你们负责开发BSP和vxWorks,外包方开发APP之后把.o文件给你们,你们负责链接进vxW……

你说的方法我知道,我们现在就是这么弄得啊!我的目的就是想,外包方开发了APP后,直接把.o文件自己弄到板子里去,升级自己的应用程序。而不要把.o给我们,让我们再链接进vxworks中!就是说,我们只要最开始约定好接口,后面的应用软件升级,就和我们没有任何关系!!因为现在做应用的主机单位是外地的,板子也在他们那!他们的软件是可能很多年都在不断改进的,而BSP确是基本不变的!我们也不能一直跟着他们啊!
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

11
 
其实就是通过BSP编译一个bootrom。
然后再建一个image工程,和这个BSP链接一下,这样就可以编译出一个vxWorks内核。
如果你们已经有了文件系统,把这个vxWorks放在文件系统里,就可以加载运行了。
等开发出APP之后,把.o链接进vxWorks就可以达到你所说的目的了。
这样,你们负责开发BSP和vxWorks,外包方开发APP之后把.o文件给你们,你们负责链接进vxWorks,再加载到文件系统里就好了。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

12
 
如果你们舍得BSP代码给人,就直接给他们算了,让他们自己编去,或者算些钱卖给他们也成。
不然,你们可以让他们把自己的应用编成一个APP文件,把这个APP烧写进FLASH中的固定位置,然后你们的vxWorks中做完了自己的工作后把这个APP加载到SAM中,跳转一下,跳到他们的代码中执行。我觉得这样做是可行的。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 10 楼 heaven_redsky 的回复:

如果你们舍得BSP代码给人,就直接给他们算了,让他们自己编去,或者算些钱卖给他们也成。
不然,你们可以让他们把自己的应用编成一个APP文件,把这个APP烧写进FLASH中的固定位置,然后你们的vxWorks中做完了自己的工作后把这个APP加载到SAM中,跳转一下,跳到他们的代码中执行。我觉得这样做是可行的。

我也是这样想的,这是最好的办法。但是,BSP做完之后,怎么把APP加载到SAM中了?SAM是什么啊?只是单纯的拷贝到内存中?还有,APP中的那么多函数,程序怎么跳转了?应该会有问题吧!
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

14
 
我现在是这样做的,不知道对你有没有帮助:
应用程序模块生成.out后放到flash的文件系统中,让对方给你提供入口函数,比方说App1();
自己在usrAppinit里调用loadModule函数加载该.out,然后在调用入口函数App1();
告诉对方ftp的用户名和密码,需要更新的时候让对方自己通过ftp更新(当然你的内核要支持ftp)。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

15
 
引用 5 楼 zhangyinxun 的回复:
引用 3 楼 lpangbing 的回复:
有方法,把程序做成可加载的模块

这个就是我们现在的一般方法啊。在一个可加载的工程里做应用程序,然后编译成.a文件,再放在BSP里面联编成新的BSP,再烧进板子里。
我现在的想法是,应用程序是另外单位的人做的,我们只负责BSP。这样,他们如果有修改应用程序,不需要我们的配合就可以自己把板子里的应用程序更新。
所以,我想能不能把应用程序放在FLA……


你这种是静态连接的不是可加载的哈,可加载的是.out格式的,编译的规则(rule)是.out,不是那个archive的

在vxworks配置选项里边添加development tool components->loader components组件
在编译的时候就可以看到有生成符号表的过程:
F:\Tornado22pentium\host\x86-win32\bin\makeSymTbl.bat pentium tmp.o symTbl.c

你提供一个系统API给你的其他单位的人,通过某种方法(比如命令)加载对应的.out文件,这是一个ELF格式的文件,解析它,根据符号表把它调用到的函数都填成实际的地址,这样就可以运行了。

这只是一个大致的过程,具体你可以参考loadAoutLib.c里边的代码
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

16
 
引用 13 楼 merry_meng 的回复:
我现在是这样做的,不知道对你有没有帮助:
应用程序模块生成.out后放到flash的文件系统中,让对方给你提供入口函数,比方说App1();
自己在usrAppinit里调用loadModule函数加载该.out,然后在调用入口函数App1();
告诉对方ftp的用户名和密码,需要更新的时候让对方自己通过ftp更新(当然你的内核要支持ftp)。


觉得这个方法可以。
12楼的兄弟说的也挺细的。学习。。。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

17
 
引用 14 楼 heaven_redsky 的回复:

引用 13 楼 merry_meng 的回复:
我现在是这样做的,不知道对你有没有帮助:
应用程序模块生成.out后放到flash的文件系统中,让对方给你提供入口函数,比方说App1();
自己在usrAppinit里调用loadModule函数加载该.out,然后在调用入口函数App1();
告诉对方ftp的用户名和密码,需要更新的时候让对方自己通过ftp更新(当然你的内核要支持ftp……


我现在就是这样做的!呵呵,这种方法是可行的。我的blog里面有说明,呵呵~~
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

18
 
嘿嘿,我也看了一眼你们的处理方法。开始的时候我就在想,既然有TFFS,应该可以处理这类的问题了。
这方法挺不错的。LZ是想APP和BSP一点关系都没有么?
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

19
 
不懂の。。。帮顶
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(中级)

20
 
引用 19 楼 merry_meng 的回复:

不懂の。。。帮顶

谢谢~~
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表