IAP升级

1、IAP原理

一、在正常状况下,程序运行路流程: html

  

  和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 函数执行,如图标号⑤所示。 spa

  (2)加入 IAP 程序以后,程序运行流程:3d

  

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

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

2、难点

  须要重定向中断向量表!blog

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

相关文章
相关标签/搜索