OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 15166|回复: 11

stm32把bin文件载入ram运行的问题

[复制链接]

44

主题

186

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1260
金钱
1260
注册时间
2012-9-1
在线时间
67 小时
发表于 2013-1-17 14:54:53 | 显示全部楼层 |阅读模式
请教各位老师,
如果把程序编译成ram运行的bin文件(中断向量表0X20000000,PC->0X2000000?)
然后把bin文件复制到ram的0X20000000->0X2000XXXX,也就是地址一一对应,(父进程的ram是从0X2000XXXX开始分配的,前一段留给bin
文件用)再在父进程的程序中把pc指向ram地址(bin文件开始执行地址)是不是就可以在不硬复位的情况下运行这个bin文件了,理论上是否可行,
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

44

主题

186

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1260
金钱
1260
注册时间
2012-9-1
在线时间
67 小时
 楼主| 发表于 2013-1-17 14:58:07 | 显示全部楼层
就是把原子的这个功能改进,在不复位的情况下执行
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-1-17 18:17:29 | 显示全部楼层
回复【楼主位】ye781205:
---------------------------------
那你怎么赋值到0X20000000去啊?
默认这个段就是给你自己运行的代码用的,你自己先自杀了,还能拷贝数据么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

44

主题

186

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1260
金钱
1260
注册时间
2012-9-1
在线时间
67 小时
 楼主| 发表于 2013-1-17 18:40:15 | 显示全部楼层


 回复【3楼】正点原子:
回复【楼主位】ye781205: --------------------------------- 那你怎么赋值到0X20000000去啊? 默认这个段就是给你自己运行的代码用的,你自己先自杀了,还能拷贝数据么?
---------------------------------
父进程的ram是从0X20000XXX开始分配的,前一段0X20000000--0X20000XXX留给bin
文件用,我测试了,能够复制数据到0X20000000--0X20000XXX,自己运行的代码是可以不用这段的(用汇编很容易实现,pc指针也能跳到ram的指定地址),
就是中断向量表和堆栈不知道怎么处理
或者换个思路,假如有64kb ram,父进程用掉前32kb,用后32kb载入bin并运行(bin运行需要的ram指定它在32kb+bin文件大小处开始)
回复 支持 反对

使用道具 举报

44

主题

186

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1260
金钱
1260
注册时间
2012-9-1
在线时间
67 小时
 楼主| 发表于 2013-1-17 18:49:01 | 显示全部楼层
如果搞成功,就能像pc运行绿色软件那样运行代码了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-1-17 21:59:56 | 显示全部楼层
回复【4楼】ye781205:
---------------------------------
我们的战舰板,综合实验,运行器功能,不就是运行bin文件么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

44

主题

186

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1260
金钱
1260
注册时间
2012-9-1
在线时间
67 小时
 楼主| 发表于 2013-1-17 23:27:45 | 显示全部楼层
回复【6楼】正点原子:
回复【4楼】ye781205: --------------------------------- 我们的战舰板,综合实验,运行器功能,不就是运行bin文件么?
---------------------------------
两个概念,pc运行程序是否会重启,运行完(退出)之后是否又要重启?????
关键是bin程序退出之后要能返回来又任意加载别的bin文件
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-1-18 10:56:26 | 显示全部楼层
哦,那确实.
关键你要保存好原来程序的堆栈空间.另外,在新运行的程序退出的时候,你还得知道原程序的PC指针值.相当于ucos的任务调度了.这样还要做的一个东西,就是你每个程序(.bin)要有一个退出"按钮",类似电脑软件的关闭按钮了.
理论上,你这个东西肯定是可行的.
最关键是.bin文件退出的时候,PC指针和堆栈指针得知道原来程序的值,这个也还好解决,你可以把原程序的PC指针和堆栈指针值存放在一个固定的内存地址,这样任何.bin文件退出的时候,直接从指定地址取值,就可以恢复原程序运行了.
不过STM32F103内存少了点,才64K,假设原程序占用20K,后续.bin文件flash+ram,合计才44K,有点少.
换407,就爽多了,实用价值大一些.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-1-18 10:56:34 | 显示全部楼层
期待楼主做出来,呵呵.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

18

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2011-12-19
在线时间
0 小时
发表于 2014-11-19 00:17:29 | 显示全部楼层
BIN文件转成十六进制 可以直接发给下位机吗
回复 支持 反对

使用道具 举报

12

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2014-10-28
在线时间
8 小时
发表于 2015-6-17 23:17:57 | 显示全部楼层
回复【7楼】ye781205:
---------------------------------
你后来加载.bin程序的堆栈空间可以与之前的堆栈空间重叠吗?还是既不可以与.bin占的空间重合,也不能与之前的程序的堆栈空间重合?
回复 支持 反对

使用道具 举报

2

主题

474

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6549
金钱
6549
注册时间
2018-6-27
在线时间
551 小时
发表于 2019-1-19 10:43:11 | 显示全部楼层
学习学习,学习学习,很有启发。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-23 04:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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