搜索
bottom↓
回复: 47

rtos下如何动态加载任务

[复制链接]

出0入0汤圆

发表于 2015-3-28 09:59:02 来自手机 | 显示全部楼层
弱弱问  这个情况是两个普通工程么 还是说应用程序不是我们平常的普通mdk工程,只是生成一段代码片段 两个工程堆栈 内存划分 分配管理什么的是什么情况  

出0入0汤圆

发表于 2015-3-28 10:02:50 来自手机 | 显示全部楼层
是不是在有mmu时候完全没这些事?地址可以各自重映射成0?

出0入0汤圆

发表于 2015-3-28 21:53:08 | 显示全部楼层
McuPlayer 发表于 2015-3-28 13:34
我也在用动态加载了,我觉得重点是这几个方面
1、OS实现函数导出表,APP把对OS的API全部基于这个表
2、APP ...

对这个感兴趣,请楼主和MP哥布道
两工程分别BIN1  BIN2
1  BIN1导出函数和全局变量这个很显然,MAP里有地址,作为指针放到BIN2工程。
2  关键不知道MDK如何生成位置无关,只需要工程设置,还是要如何改启动文件,没有DEMO。   代码位置无关好理解,BIN2本工程内用相对跳转指令,但还是不知道工程该如何设置。 BIN1应该有个装载器来复制和调用BIN2吧,变量数据位置无关没明白如何做的,编译时候指定跟代码位置挨在一起,装载器有1个地址就行还是要分别给代码地址和变量地址, 依然是不知道工程怎么设置。
3  内存是交给BIN1统一管理吧,上面问题通了话,就是BIN1分配地址块给BIN2和撤销了。 装载器得能强制结束万一卡死在死循环的BIN2。
4  好像有C运行库啊什么的吧,比如PRINTF,数学函数之类库函数,这个能否也调用BIN1的。 是不是就是电脑上的静态编译和动态编译的库包含在工程里和调用系统里的区别。

额,最基础一点就是没见过简单的MDK位置无关DEMO工程.

出0入0汤圆

发表于 2015-3-29 16:39:05 | 显示全部楼层
McuPlayer 发表于 2015-3-29 08:58
to HQ:
1、我没用全局变量,OS的struct对APP尽量不开放,这样,OS升级对APP影响很小
     也没用函数指针 ...

感谢MP哥,想了下 ,再请教MP哥
1  用函数名做Label做跳转,  这个不明白,先不想,用指针也能完成功能
2 设置了位置无关后,target页的设置是不是没有意义了。      变量只能在RAM,代码位置无关,可能在ROM运行,也可能在RAM运行。       代码在RAM运行,变量块和代码块可以在一起,只需要给整块一个起始地址参数,但谁在前谁在后?            代码在ROM运行,变量块和代码块必须分开,必须要给变量块和代码块各一个起始地址参数?     调用者应该是用寄存器R多少传递起始地址这个参数给被调用者的,估计MDK手册有规定调用者如何告诉被调用者起始地址的?      以在RAM运行为例,假设各自管理内存,调用者要将被调用者拷入RAM,拷入后被调用者还要用内存, 调用者如何知道该分配多少RAM给被调用者的(代码+变量)用。     
3  APP使用OS的堆栈,物理上是一体的了   空想一下没概念,最近忙,估计得有时间实践下才能有概念。
4  PRINTF之类函数如何实现调用的,也是从MAP里找出来的?
5  中断最简单实现是平台留出函数指针给应用挂入中断处理,应用里面没有中断向量,就是占用中断时间了,再去改成其他高级方法。   这样APP的启动文件似乎要改了?里面的向量表已经没意义了。

出0入0汤圆

发表于 2015-3-30 20:27:19 | 显示全部楼层
McuPlayer 发表于 2015-3-29 18:01
1  用函数名做Label做跳转,  这个不明白,先不想,用指针也能完成功能,函数指针也有缺点,一个是调用效 ...

感谢MP哥的耐心讲解,大原理看懂,具体做法还是看不懂。 没上过编译原理,计算机结构和操作系统的课,这种软件问题感觉一下无法理解,估计还是得有实践才能懂,这个问题真的很有趣。再想了下
而是用函数名做Label做跳转,     看不懂,系统函数多种多样,有返回值的  无返回的   一个形参的  多个形参的,APP代码要调用各种OS函数,不用指针,这个LABEL看MP哥意思是函数名表?名字而非地址这个能理解,想了下比如名字对应编号做参数,统一调用接口到OS,OS再用编号SWITCH散转各函数,这个统一接口似乎得借用一个中断向量才能保证调用地址永远不变,这样所有的OS函数对APP就不存在地址了,也就没指针的事,不过效率高不高呢,能接受编号多少个呢,或者还有好方法。 但没想通这种情况代码如何做到跟普通函数调用写法一样,如何能调各种类型函数形式编译通过的,特别是到具体实现,是否能截图看看。
RW位置无关        因为RO和RW可能分离两块,感觉APP一定要知道自己用哪块RW区,这个基地址不知道具体怎么传递的,得看图才懂。
PRINTF是C运行库函数,写个桩子函数    桩子函数完全不懂概念
WIN这段说的很精彩通俗易通,  基础应该还是Label做跳转这句,即APP如何调用OS函数。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-7 13:02

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表