一、在正常狀況下,程序運行路流程: 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
須要重定向中斷向量表!blog
參考博客:http://blog.sina.com.cn/s/blog_b5e6d3de0102vm6o.html博客