打印
[STM8]

stm8的IAP

[复制链接]
1466|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
拿起书本|  楼主 | 2014-9-5 11:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一般IAP功能都是安排两个程序实现的,一个是bootloader也可以叫IAP更正式,另一个程序是APP。
MCU的bootloader远没有那种带MMU能跑高级OS的CPU的bootloader复杂,个人感觉叫IAP更合适。
IAP程序烧写到flash中程序最开始运行的地方,这个程序负责升级更新APP,引导加载跳转到APP。
APP程序就是要完成这个MCU的主要业务主要功能咯。

依据个人开发IAP功能的经验,主要难点是中断向量的问题,然后最关键的就是那些“大同小异”的小异

,避免在此绊脚。
程序跳转用C或汇编很容易实现。Flash的擦除、编程、烧写看STM8的历程就可以了,也不难。最后是把

传输升级数据的通道打通,一般都要支持串口升级方式的,串口的代码一样看历程就可以了。


中断向量的问题,首先看了下STM8的简要资料,知道STM8发生中断后都只会跳转到0x8000这个固定的地

址,而不像STM32F1系列的单片机,可以设置中断向量表偏移量寄存器,发生中断时直接可以跳到对应的

问题。所以STM8这里我觉得要有点技巧了。
有人说在IAP代码中不要使用中断,这个我不明白为什么。我一般都是能用中断都用中断。这里我尝试还

是用中断的,串口接受用中断,效率会高一些。另外以后IAP中什么地方确实需要用到中断呢,所以这次要是能在IAP中使用中断就用,不能就放着,以后再搞。

如果IAP和APP都需要使用中断,那该怎么办呢,我想到一个办法,不知道行不行,在中断到来时跳转到flash的那个地址,让在那里的代码使用CPU再次跳转到RAM的首地址中,IAP和APP分别在使用中断前,填写RAM首地址的内容,让它们能对应再跳转到各自的ISR中。这样利用RAM的可写的特性实现中断向量表重定向的效果。

不过说起来简单,做起来一定不简单。STM8的汇编指令体系结构我没有去了解,不知道有没有类似于ARM的地址池跳转方式。如果有绝对跳转指令,那么长度够不够呢。相关的编译器也还没熟悉,汇编代码的书写格式也不熟悉,就算原理上知道汇编可以实现,但要是汇编代码写不出来也无济于事。所以后面确实有很多问题等待解决。

编译环境,知道IAR是可以编译STM8的,目前先用IAR吧,毕竟相对要熟悉些。
“大同小异”的小异,STM8支持时钟检测功能,当然STM32F0的芯片也似乎支持,但个人感觉没有STM8支持得这么显式。当时钟源切换的时候会引发中断,这些小的细节不知道会不会是后面开发的障碍,还有很多内容没看,会隐藏有多少小问题还不知道。




沙发
mmuuss586| | 2014-9-5 12:31 | 只看该作者

谢谢分享,总结的挺好的;

使用特权

评论回复
板凳
搞IT的| | 2014-9-5 22:27 | 只看该作者
不管运行什么软件,编译环境很重要!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:好好学习,天天向上!

519

主题

4194

帖子

31

粉丝