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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM