打印
[STM32]

在M3单片机上可否实现系统内核与应用程序分别编译加载

[复制链接]
2496|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
科技猎人|  楼主 | 2014-1-16 17:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题:
      也就是系统内核(抢占式或非抢占式都可以)和应用程序分别在两个工程里编译生成hex 或bin文件。先假定就一个应用程序,当然是先加载内核,再加载应用(不是ISP 或IAP),应用程序受系统内核管理和监控,并能调用一些基本服务,就类似linux和windows 那样。我知道的m3内核单片机是不能虚地址访问的。keil 或IAR生成的程序里地址一定是绝对地址嘛?
     首先这个可否实现,如果肯定不能实现那又是因为什么?
     期待大神们解答。。。

相关帖子

沙发
airwill| | 2014-1-16 21:42 | 只看该作者
keil 或IAR生成的程序里地址一定是绝对地址, 是的.
所以要实现还是又困难的.
不过, 如果有大 SRAM 空间下, 也可以开辟一个 RAM 中的执行区, 放在 RAM 中执行, 以实现动态加载.
我测试过, 从 FLASH 整体搬到 SRAM 中, 可以不修改条件下执行的(当然要避免和 RAM 的绝对地址的变量冲突).

使用特权

评论回复
板凳
科技猎人|  楼主 | 2014-1-16 22:08 | 只看该作者
airwill 发表于 2014-1-16 21:42
keil 或IAR生成的程序里地址一定是绝对地址, 是的.
所以要实现还是又困难的.
不过, 如果有大 SRAM 空间下, ...

感谢版主解答。
也就是在RAM中运行应用程序的话是可以实现动态加载的。不过M3的RAM寻址空间谁然很大,但芯片制造商实现的实际RAM还是很有限的,这就严重限制了应用程序的大小和功能。还有既然一定是绝对寻址,那么应用程序在编译时就要限制在将来要加载到的空间里是吧,就不能够由系统内核在运行时再决定应用程序在什么地方运行了。。。

使用特权

评论回复
地板
科技猎人|  楼主 | 2014-1-16 22:08 | 只看该作者
airwill 发表于 2014-1-16 21:42
keil 或IAR生成的程序里地址一定是绝对地址, 是的.
所以要实现还是又困难的.
不过, 如果有大 SRAM 空间下, ...

感谢版主解答。
也就是在RAM中运行应用程序的话是可以实现动态加载的。不过M3的RAM寻址空间谁然很大,但芯片制造商实现的实际RAM还是很有限的,这就严重限制了应用程序的大小和功能。还有既然一定是绝对寻址,那么应用程序在编译时就要限制在将来要加载到的空间里是吧,就不能够由系统内核在运行时再决定应用程序在什么地方运行了。。。

使用特权

评论回复
5
airwill| | 2014-1-16 22:11 | 只看该作者
一定是绝对寻址, 就不能够由系统内核在运行时再决定地址, 象那些变量就是这样
但是, 代码之间的跳转和调用, 有相对寻址的, 就可以移动地址了

使用特权

评论回复
6
科技猎人|  楼主 | 2014-1-16 22:19 | 只看该作者
airwill 发表于 2014-1-16 22:11
一定是绝对寻址, 就不能够由系统内核在运行时再决定地址, 象那些变量就是这样
但是, 代码之间的跳转和调用, ...

哦,这样啊。也就是说全局变量,静态变量,常数(表)等是受绝对地址影响的。而子函数的调用,局部变量,就可以很自由的使用了。。。

使用特权

评论回复
7
leehp| | 2014-1-16 22:32 | 只看该作者
这个问题貌似很深奥的样子……

使用特权

评论回复
8
cool_coder| | 2014-1-17 13:25 | 只看该作者
在不支持虚拟寻址的机器上,只能在链接配置上打主意了。建议参考某些ARM下载工具的做法,设计时预留一些特定的段,存放不同的应用程序。编写应用程序时按照预留的位置为各个应用程序分配互不重叠的代码段、数据段等。加载时只要从内核跳转到各个应用程序的入口就行了。不过,应用程序中要使用中断的话,向量表要特殊考虑。

使用特权

评论回复
9
江枫渔火| | 2014-1-17 13:42 | 只看该作者
RT Thread 操作系统具有这种功能。据我理解,功能模块可以单独编译,放在SD卡里,然后放到板子上,就可以调用了。当然要实现起来需要的东西还是挺多的,比如要加文件系统,模块编译的方式也有细微区别。操作系统内部还要提供解释和执行模块的单元。
RT Thread 其实蛮不错的感觉,就整个架构来说,有Linux的感觉

使用特权

评论回复
评分
参与人数 1威望 +6 收起 理由
原野之狼 + 6 很给力!
10
shuidi_wangdan| | 2014-1-17 16:47 | 只看该作者
高手过招,只能看热闹!

使用特权

评论回复
11
科技猎人|  楼主 | 2014-1-17 17:13 | 只看该作者
cool_coder 发表于 2014-1-17 13:25
在不支持虚拟寻址的机器上,只能在链接配置上打主意了。建议参考某些ARM下载工具的做法,设计时预留一些特 ...

恩,看来实现动态加载理论上可以实现,但会收到CPU模式和编译器的各种限制。向量表肯定要由系统内核来管理,应用程序可以申请注册使用某中断。。。

使用特权

评论回复
12
科技猎人|  楼主 | 2014-1-17 17:14 | 只看该作者
江枫渔火 发表于 2014-1-17 13:42
RT Thread 操作系统具有这种功能。据我理解,功能模块可以单独编译,放在SD卡里,然后放到板子上,就可以调 ...

RT Thread 操作系统 能在M3内核的单片机上运行?有时间得关注一下这个东东。。。

使用特权

评论回复
13
江枫渔火| | 2014-1-17 17:23 | 只看该作者
科技猎人 发表于 2014-1-17 17:14
RT Thread 操作系统 能在M3内核的单片机上运行?有时间得关注一下这个东东。。。 ...

可以。

使用特权

评论回复
14
科技猎人|  楼主 | 2014-1-19 19:46 | 只看该作者
高手都去哪儿了,这个问题很值得研究一下的。。。

使用特权

评论回复
15
john_lee| | 2014-1-19 23:59 | 只看该作者
楼主需要带MMU的ARM。

使用特权

评论回复
16
原野之狼| | 2014-1-20 09:04 | 只看该作者
江枫渔火 发表于 2014-1-17 13:42
RT Thread 操作系统具有这种功能。据我理解,功能模块可以单独编译,放在SD卡里,然后放到板子上,就可以调 ...

正解

使用特权

评论回复
17
科技猎人|  楼主 | 2014-1-20 12:36 | 只看该作者
原野之狼 发表于 2014-1-20 09:04
正解

能具体讲讲实现的方法和关键步骤嘛。。。

使用特权

评论回复
18
fish_sman| | 2014-1-21 17:03 | 只看该作者
直接上RT-THREAD,高大上,非常好的东西。

使用特权

评论回复
19
科技猎人|  楼主 | 2014-1-22 08:33 | 只看该作者
fish_sman 发表于 2014-1-21 17:03
直接上RT-THREAD,高大上,非常好的东西。

这里研究的是在M3内核上实现应用程序动态加载运行的可行性和实现方法,并不涉及具体应用情景或是哪个RTOS可以这么用。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

192

帖子

8

粉丝