freescale(nxp) 9s12g的bootloader升级app问题请教

qq_42613993 2020-06-21 12:46:39
最近在学习freescale的9s12g的开发,遇到一个程序升级想不明白,想请教下各位大神:

我目前的想法是:
bootloader的代码单独放到一个16K的flash区域A,app放另一个16K的flash区域B,启动时如果需要升级,就将接收到的s19文件,根据解析出来的记录的地址,将数据写到相应的地址上。

目前的困惑是:
1、bootloader和app是分为2个工程,还是一个工程呢?如果是分2个工程,app工程建立后也是需要初始化,然后跳到main函数执行的,那这个跟bootloader工程的main函数不会冲突吗? 对比bootloader和app工程的s19文件,有的记录地址是一样的,但是代码内容不一样,那这种冲突要怎么解决呢?

2、如果将bootloader和app整合在一个工程呢里,升级时,只要解析到的s19文件的记录地址是bootloader所在的区域,就不去擦写,其余的记录都擦写,这样可行吗? 因为bootloader区域是始终不擦写的,那bootloader里是否有硬编码 app工程的跳转地址呢? 如果有的话,跳转应该就会有问题了吧?

还请有经验的大神指点一二。
...全文
2623 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_42613993 2020-06-22
  • 打赏
  • 举报
回复
引用 3 楼 qq_41616609 的回复:
[quote=引用 2 楼 qq_42613993 的回复:] [quote=引用 1 楼 qq_41616609 的回复:] 两个工程,这样才能定义不同的起始地址,进入bootloader有升级指令就擦除app那部分的地址,然后写入数据,完成升级再跳转到app的起始地址就可以了
能否帮忙解释下,怎么获取app的起始地址。解析app的s19文件的时候,能知道哪一条记录包含了app的起始地址吗?[/quote] app地址都是你自己定义的,bootloader跟app两个程序要定义不同的起始地址。单片机都大同小异,你用keil编译的话,就可以在设置那边设置起始地址,编译出来的hex文件就包含了[/quote] 我用的是codewarrior, 比如prm文件里有如下的定义: ROM_VAR, STRINGS, DEFAULT_ROM, NON_BANKED INTO ROM_F000; 一些prestartup和startup都是装到ROM_F000的,那就是表示app的起始地址就是这个0xf000了吧? 我去验证下,非常感谢。
qq_41616609 2020-06-22
  • 打赏
  • 举报
回复
引用 2 楼 qq_42613993 的回复:
[quote=引用 1 楼 qq_41616609 的回复:] 两个工程,这样才能定义不同的起始地址,进入bootloader有升级指令就擦除app那部分的地址,然后写入数据,完成升级再跳转到app的起始地址就可以了
能否帮忙解释下,怎么获取app的起始地址。解析app的s19文件的时候,能知道哪一条记录包含了app的起始地址吗?[/quote] app地址都是你自己定义的,bootloader跟app两个程序要定义不同的起始地址。单片机都大同小异,你用keil编译的话,就可以在设置那边设置起始地址,编译出来的hex文件就包含了
qq_42613993 2020-06-22
  • 打赏
  • 举报
回复
引用 1 楼 qq_41616609 的回复:
两个工程,这样才能定义不同的起始地址,进入bootloader有升级指令就擦除app那部分的地址,然后写入数据,完成升级再跳转到app的起始地址就可以了
能否帮忙解释下,怎么获取app的起始地址。解析app的s19文件的时候,能知道哪一条记录包含了app的起始地址吗?
qq_41616609 2020-06-22
  • 打赏
  • 举报
回复
两个工程,这样才能定义不同的起始地址,进入bootloader有升级指令就擦除app那部分的地址,然后写入数据,完成升级再跳转到app的起始地址就可以了

27,382

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧