IAP升级

一、IAP原理

1、在正常情况下,程序运行路流程: 

  

  和STM32类似,STM8内部闪存(FLASH)地址起始于 0x8000(STM32是0x08000000),一般情况下,程序文件就从此地 址开始写入,通过一张“中断向量表” 来响应中断,程序启动后,将首先从“中断向量表”取出复位中断向量,执行复位中断程序完成启动,而这张“中断向量表”的起始地址是 0x8000(STM32是0x08000004),当中断来临,STM32 的内部硬件机 制亦会自动将 PC 指针定位到“中断向量表”处,并根据中断源取出对应的中断向量执行中断 服务程序。 (STM8复位和中断向量表的起始地址都是 0x8000,STM8复位地址是0x08000000,中断向量表的起始地址是0x08000004)

  当复位后,先从0x8000(STM32是0x08000004) 地址取出复位中断向量的地址,并跳 转到复位中断服务程序,如图标号①所示;在复位中断服务程序执行完之后,会跳转到main 函数,如图标号②所示;而我们的 main 函数一般都是一个死循环,在 main 函数执行过程 中,如果收到中断请求(发生重中断),此时 MCU 强制将 PC 指针指回中断向量表处,如图 标号③所示;然后,根据中断源进入相应的中断服务程序,如图标号④所示;在执行完中断服务程序以后,程序再次返回 main 函数执行,如图标号⑤所示。 

  (2)加入 IAP 程序之后,程序运行流程:

  

   STM8复位后,还是从 0x8000(STM32是0x08000004) 地址取出复位中断向量的地 址,并跳转到复位中断服务程序,在运行完复位中断服务程序之后跳转到 IAP 的 main 函数, 如图标号①所示,在执行完 IAP 以后,跳转至新写入程序的复位中断向量表(0X08000004+N+M--例如9000),取出新程序的复位中断向量的地址,并跳转执行新程序的复位中断服务程 序,随后跳转至新程序的 main 函数,如图标号②和③所示,同样 main 函数为一个死循环,并 且注意到此时 STM32 的 FLASH,在不同位置上,共有两个中断向量表。

  在 main 函数执行过程中,如果 CPU 得到一个中断请求,PC 指针仍强制跳转到地址 0x8000(STM32是0x08000004) 中断向量表处,而不是新程序的中断向量表,如图标号④所示;程序再根据我们设 置的中断向量表偏移量,跳转到对应中断源新的中断服务程序中,如图标号⑤所示;在执行完 中断服务程序后,程序返回 main 函数继续运行,如图标号⑥所示。

二、难点

  需要重定向中断向量表!

参考博客:http://blog.sina.com.cn/s/blog_b5e6d3de0102vm6o.html

posted @ 2017-06-29 17:52  MeCary  阅读(2444)  评论(0编辑  收藏  举报