集合帖:STM8之支持中断方式的IAP技术实现

lr2131 2016-09-21 09:42:30
集合帖:STM8之支持中断方式的IAP技术实现

之前在搞STM8的IAP时,我发了个相关的贴子:
http://bbs.csdn.net/topics/390855678
本来也只是想当做技术交流的贴子,没想到后面两年时不时有人找我询问相关的技术问题。
但因为这两年已经没再做stm8单片机相关的东西,具体的技术实现也都忘得差不多了,特别是当时的核心代码也找不到了。
当时这个项目是做私活搞的,最后定下来不需要IAP,东西最后又没有形成产品,所以如果大家要把该技术用于产品,还需谨慎,需要多测试和分析。

这里我会把完整的分析流程给出,并且给出最终的源码。之前问过我的童鞋、现在正在搞相关内容的童鞋,都可以在这里发问。
...全文
13551 50 打赏 收藏 转发到动态 举报
写回复
用AI写文章
50 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灯塔 2020-04-14
  • 打赏
  • 举报
回复
标记下。最近也要开始搞STM8S005K6的IAP。希望和你一起探讨下
shanejerry 2020-01-09
  • 打赏
  • 举报
回复
中断IAP实现起来确实很好用
lxytwp 2019-10-10
  • 打赏
  • 举报
回复
学习学习一下,进步不易
chenctcpe 2019-05-26
  • 打赏
  • 举报
回复
不错,mark一下
mLee79 2019-04-18
  • 打赏
  • 举报
回复
引用 50 楼 lr2131 的回复:
[quote=引用 49 楼 mLee79 的回复:] [quote=引用 48 楼 lr2131 的回复:] [quote=引用 45 楼 mLee79 的回复:] 我一般喜欢把程序分成两部分, 一部分实现通讯协议, 刷机程序啥的, 一部分实现功能代码, 动态加载或者从串口啥的注入, 这样生产后可以随时升级 ... 顺便两个部分相互验证完整性, 简单加个密啥的... 在个 51 上我用 12K (好像填充了 6K左右的随机数) 放通讯, 4K 做功能代码 ...
你用到了串口注入的功能,是用的动态库方式的吗(地址无关方式)? 这可是很高级的功能呢[/quote] 51 RAM/ROM都太小, 指令密度也太低, ABI还特别怪异, 可能 STM8 会好些, 我是预先把 RAM/ROM 预先分配给两个不同的程序, 这样上位机可以随时通过命令升级程序, 还算蛮方便, 就是分成两个程序后, ROM会多消耗一点.. 32位的片子跑PIC代码可行些.[/quote] 51的体系结构,我没有深入去看,平时也没有怎么用51内核的芯片,不过,在大学的时候倒是看书了解过51的汇编,确实不如ARM的规整。这可能就是你说的ABI比较怪异吧。STM8虽然不是ARM架构的,但确实是非常规整了,甚至它还支持软中断,这一般是OS才会用得到CPU支持。 预先分配RAM和ROM,我大致理解,不过这样的话,不同的程序之间会有一些关联性了,需要较好的程序控制能力。 32位的ARM,确实支持PIC。即使是裸机也没有问题,可以做到动态加载。 RWPI是依靠R9这个寄存器支持出来的。ROPI的话,一般的汇编指令体系都会支持相对寻址,所以这个不难。 至于STM8还有51,是怎么做PWPI,我就不大清楚了。 [/quote] 让不同程序之间相互关联本身是开始设计的一个目标之一, 两个部分相互验证完整性, 在要求不高的时候可以省块加密芯片, 我往每个片子刷入的控制程序是唯一的, 很多控制参数是用一些硬件ID计算出来的. RWPI/ROPI 这种应该对不是古董的 ISA 都还好, 一般就有个 gp 寄存器指向全局变量的地址, 跨模块调用时候调整下就好, 古董的x86就比较难看 .. 不过我一般喜欢这种额外注入的模块都完全不使用全局变量, 这样就没调整 gp 的问题, 搞起来特别简单 .. 对ROM/RAM都特别小的MCU, 还是预先分配下 ROM/RAM 更简单一些 ..
lr2131 2019-04-18
  • 打赏
  • 举报
回复
引用 49 楼 mLee79 的回复:
[quote=引用 48 楼 lr2131 的回复:]
[quote=引用 45 楼 mLee79 的回复:]
我一般喜欢把程序分成两部分, 一部分实现通讯协议, 刷机程序啥的, 一部分实现功能代码, 动态加载或者从串口啥的注入, 这样生产后可以随时升级 ... 顺便两个部分相互验证完整性, 简单加个密啥的... 在个 51 上我用 12K (好像填充了 6K左右的随机数) 放通讯, 4K 做功能代码 ...


你用到了串口注入的功能,是用的动态库方式的吗(地址无关方式)?
这可是很高级的功能呢[/quote]

51 RAM/ROM都太小, 指令密度也太低, ABI还特别怪异, 可能 STM8 会好些, 我是预先把 RAM/ROM 预先分配给两个不同的程序, 这样上位机可以随时通过命令升级程序, 还算蛮方便, 就是分成两个程序后, ROM会多消耗一点..

32位的片子跑PIC代码可行些.[/quote]


51的体系结构,我没有深入去看,平时也没有怎么用51内核的芯片,不过,在大学的时候倒是看书了解过51的汇编,确实不如ARM的规整。这可能就是你说的ABI比较怪异吧。STM8虽然不是ARM架构的,但确实是非常规整了,甚至它还支持软中断,这一般是OS才会用得到CPU支持。

预先分配RAM和ROM,我大致理解,不过这样的话,不同的程序之间会有一些关联性了,需要较好的程序控制能力。

32位的ARM,确实支持PIC。即使是裸机也没有问题,可以做到动态加载。
RWPI是依靠R9这个寄存器支持出来的。ROPI的话,一般的汇编指令体系都会支持相对寻址,所以这个不难。
至于STM8还有51,是怎么做PWPI,我就不大清楚了。



mLee79 2019-04-17
  • 打赏
  • 举报
回复
引用 48 楼 lr2131 的回复:
[quote=引用 45 楼 mLee79 的回复:] 我一般喜欢把程序分成两部分, 一部分实现通讯协议, 刷机程序啥的, 一部分实现功能代码, 动态加载或者从串口啥的注入, 这样生产后可以随时升级 ... 顺便两个部分相互验证完整性, 简单加个密啥的... 在个 51 上我用 12K (好像填充了 6K左右的随机数) 放通讯, 4K 做功能代码 ...
你用到了串口注入的功能,是用的动态库方式的吗(地址无关方式)? 这可是很高级的功能呢[/quote] 51 RAM/ROM都太小, 指令密度也太低, ABI还特别怪异, 可能 STM8 会好些, 我是预先把 RAM/ROM 预先分配给两个不同的程序, 这样上位机可以随时通过命令升级程序, 还算蛮方便, 就是分成两个程序后, ROM会多消耗一点.. 32位的片子跑PIC代码可行些.
lr2131 2019-04-16
  • 打赏
  • 举报
回复
引用 45 楼 mLee79 的回复:
我一般喜欢把程序分成两部分, 一部分实现通讯协议, 刷机程序啥的, 一部分实现功能代码, 动态加载或者从串口啥的注入, 这样生产后可以随时升级 ... 顺便两个部分相互验证完整性, 简单加个密啥的... 在个 51 上我用 12K (好像填充了 6K左右的随机数) 放通讯, 4K 做功能代码 ...


你用到了串口注入的功能,是用的动态库方式的吗(地址无关方式)?
这可是很高级的功能呢
weiwei4 2018-11-19
  • 打赏
  • 举报
回复
谢谢楼主分享,这个还是很实用的
mLee79 2018-09-29
  • 打赏
  • 举报
回复
我一般喜欢把程序分成两部分, 一部分实现通讯协议, 刷机程序啥的, 一部分实现功能代码, 动态加载或者从串口啥的注入, 这样生产后可以随时升级 ... 顺便两个部分相互验证完整性, 简单加个密啥的... 在个 51 上我用 12K (好像填充了 6K左右的随机数) 放通讯, 4K 做功能代码 ...
weixin_43301739 2018-09-28
  • 打赏
  • 举报
回复
谢谢分享,学习了~~
行进中的民工 2018-05-18
  • 打赏
  • 举报
回复
STM32快速入门的知识那里有啊 ! 刚上手一块板子想玩一下。
1586874907 2018-01-30
  • 打赏
  • 举报
回复
正在用stm8,mark
njzy_xiong 2017-11-23
  • 打赏
  • 举报
回复
谢谢分享,学习了~~
xmgh1208 2017-09-13
  • 打赏
  • 举报
回复
谢谢分享,学习了~~
husoffer 2017-09-08
  • 打赏
  • 举报
回复
马一下,最近正好在做stm8的应用
yxz250233695 2017-07-04
  • 打赏
  • 举报
回复
楼主不错,mark一下,会用到的
阳光诗歌 2017-04-11
  • 打赏
  • 举报
回复
楼主不错,mark一下,会用到的
愤怒的吃货菌 2017-03-14
  • 打赏
  • 举报
回复
去年也在想着STM32实现IAP,公司一直没有要求,然后程序断断续续的写了一点,后来就离职了,呵呵,还是希望有机会继续做STM32,只可惜目前开始做DSP了,楼主加油!
图图-兔兔 2016-12-29
  • 打赏
  • 举报
回复
引用 8 楼 lr2131 的回复:
[quote=引用 7 楼 u012953523 的回复:] 楼主,我想在IAP和APP里面都使用中断,我是在IAP里面重新映射了中断向量表(试过在APP里面映射,但是APP中中断使用不了),想问一下你之前是两个同时使用中断的吗
可以啊,IAP和APP各自使用各自的中断ISP,没有问题。 不知你是怎么做的重映射?[/quote] 楼主,请问,你是怎么把ISR地址分开的。就是你在8000写了什么,在RAM里又写了什么,能不能贴下代码。
加载更多回复(30)

27,373

社区成员

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

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