6526|11

78

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

STR912FAW如何实现在线部分更新 [复制链接]

有一个方案: BANK0中存放应用程序, BANK1存放BOOTLOADER(或系统程序), BANK0应用程序如果需要更新, 则调用BANK1中的相应代码执行更新操作. 
请教各位这样是否可行? 如果可行, 那么BANK1中的相应代码应该才能准确定位?
此帖出自stm32/stm8论坛

最新回复

                                 12楼理解正确。   详情 回复 发表于 2008-3-4 09:31
点赞 关注
 

回复
举报

78

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

方案可行

                                 不明白LZ的最后一句话:“如果可行, 那么BANK1中的相应代码应该才能准确定位?”
此帖出自stm32/stm8论坛
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

继续

                                 下午没说完就发了,继续. 具体点说, 我本来的想法是BANK0中的程序可以部分更新, 但想来想去觉得不是很可行. 于是我想把一些常用的功能(例如串口读写, USB, 甚至以太网等等)放到BANK1中, 而BANK0中只有与硬件无关的应用, 如果想访问硬件, 就通过调用BANK1中的特定地址的函数进行例如读写串口. 那么我现在就可以尽量减少BANK0中应用程序的体积, 利于窄带网络的远程更新. 现在的问题是: 我编译好了BANK1的程序后, 例如里面有一个函数写串口, 现在有2各问题, 一是我在写BANK0应用程序的时候如何得到这个函数的入口? 象PC机的DOS调用所有函数通过一个统一的入口地址来转吗? 二是我在编译BANK1中的程序时, 我想BANK1应该作为启动块,地址是0, 而执行BANK0中的应用程序时, BANK1作为非启动块影射到0X80000000, 那么即使第一个问题解决了, 那么原来的函数地址都已经发生了变化, 特别是中断服务程序, 这个问题能不能解决?
此帖出自stm32/stm8论坛
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

4
 

在BANK1的固定地方做一个函数入口表

BANK0中的程序通过这个函数入口表调用BANK1中的函数。这个表的位置必须是固定的并被BANK0的程序知道,同时表中各项的顺序也必须是固定的并被BANK0的程序知道。中断服务程序的入口地址也照此办理。

如果不需要通过BANK1启动,则编译BANK1的程序时不必设为从0开始,而应设为他被映射到非启动模式时的地址,这样编译链接时才能正确地解析各个地址。


另外,通常BANK0很大而BANK1很小(32KB或128KB),不知你的那些常用的功能是否放得下。
此帖出自stm32/stm8论坛
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

5
 

继续问

谢谢香水城的关注.你所说的BANK1很小的问题我也在考虑.不知道能否把部分功能放到BANK0里面?相当于我的系统程序超过了BANK1的界限.这样做这颗芯片能支持吗?或者另外一种方式,我一个针对BANK0的程序,一个针对BANK1的程序,BANK0中的程序位于特定的位置,BANK1中的程序来调用.不过似乎从用户程序调用BANK1的公共入口,再调用BANK0的公共入口,最后才能调用实际执行的程序,层次多了一点.
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

6
 

LZ是否可以从Sector的角度考虑一下


STR912FA中Flash的最小擦除单位是Sector,请看下表:
Flash容量
此帖出自stm32/stm8论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

7
 

这样是不是意味着我总共需要3个工程

                                 一个是BOOLLOADER,一个是系统程序,一个是应用程序?请问香水城是ST的还是哪家代理的?:D 我现在在考虑我的系统方案中.
此帖出自stm32/stm8论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

8
 

基本可以这样安排

                                 这个版面是ST出资开办的,为所有使用ST单片机的朋友提供一个交流的平台,我是在ST负责管理这个版面的。
此帖出自stm32/stm8论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

9
 

香水城,剩下的工作有没有什么建议?

                                 接下来我要做的就是规划一下系统的启动顺序和每一部分应该做的事情了.另外就是要知道公共入口的位置. 香水城有没有什么建议? 如果从BANK1启动, 应该怎么做, BANK1的程序能否共享系统部分的程序, 还有启动以后转到系统程序执行前是否需要执行内存重映射(这个似乎与共享系统部分程序有矛盾, 因为重映射会改变地址). 从系统部分转到用户部分执行的时候, 是不是可以先将公共入口点甚至每一个函数入口都放到内存中的某个位置然后由用户程序去读取来确定到哪里来调用这些函数?
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

10
 

提供一个思路

你可以把Bootloader放在Bank1中,而系统程序和应用程序均放到Bank0中,但分配在不同的Sector中;每次上电始终从Bank1启动并查看是否有任何部分要更新,如果有需要更新的部分,则对Bank0中相应部分进行更新,如果没有需更新的操作,则将Bank0中映射到地址0x00000000并执行正常的程序;当正常程序执行时需要更改部分内容,则做个标记然后将Bank1中映射到到地址0x00000000并执行Bootloader进行Sector更新。

公共入口地址,可以用一个结构的跳转表实现,只需把该结构安排在固定的地址,结构中所有函数的指针将可以通过他们在结构中的位置决定了。
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

11
 

回复四楼!!

 在BANK1的固定地方做一个函数入口表,这个如何实现?

 通过函数指针和数组?

 谢谢!
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

12
 

是的,通过函数指针和数组

                                 12楼理解正确。
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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