電子工程網
標題: 一個關于IAP+APP 模式下不能啟動RTOS的話題 [打印本頁]
作者: 小融一號 時間: 2017-1-17 09:42
標題: 一個關于IAP+APP 模式下不能啟動RTOS的話題
問題描述:
某客戶工程師講述:他使用STM32F407IGT6 開發產品,使用了IAP+APP 模式的軟件架構。IAP 為自行編寫的 BOOT程序,負責系統啟動及更新 APP 程序,而 APP 則用于處理常規業務。系統啟動后,首先運行 IAP程序,由其完成系統初始化后跳轉APP。兩段程序分別由兩個獨立的軟件工程生成。其中,APP 程序是其于某款RTOS 構建的。在加入 IAP+APP 模式之前,分別做了單獨的調試,即將其定位到0x08000000 開始的地址空間直接啟動,而不通過 IAP 跳轉,證實可以正常運行。加入到IAP+APP 架構中后,APP程序被重新定位到了 0x08004000 開始的地址空間。然而這種情況下 APP不能正常運行,跳飛掉了。通過打印跟蹤,發現從 IAP 到 APP的跳轉可以順利完成,APP前幾行代碼也可以執行,直到執行啟動 RTOS 的函數后,不知去向。
問題調研:
檢查 APP 軟件工程,發現其軟件工程是其于 ST 的標準外設驅動庫構建的。于是,檢查其中的system_stm32f4xx.c 文件,找到systemInit()函數。
將其中的
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET
改成:
SCB->VTOR = FLASH_BASE | 0x00004000
重新下載后,RTOS 可以正常運行。
結論及處理:
用戶沒有重新定位中斷向量表,導致 CPU 依使用 IAP 的中斷向量表,進而APP 的中斷無法被正常的處理。通常,RTOS 需要通過中斷來進行任務調度,所以,致使其不能正常的運行。
當我們修改軟件,重新定位中斷向量表到正確的位置后就OK。
話題延伸:
Cortex-M3 和Cortex-M4 的中斷向量表是可以在最低 1GB 的地址空間內浮動的,且專門設有一個偏移地址寄存器VTOR,用于指示中斷向量表的位置,如圖(一):
VTOR 的地址為:0xE000ED08,復位值為:0x00000000。所以,復位后Cortex-M3 或Cortex-M4會到地址0x00000000 取SP 的取值,而到地址0x00000004 取PC 的取值,來啟動程序。一般來說,程序啟動后要重新裝載VTOR 的取值,使其指向自身的中斷向量表,以保證后續程序能夠正確的響應各個中斷請求。在Cortex-M3 和Cortex-M4 的系統中,對于中斷向量表的存放位置的對齊邊界有一定的要求,可按如下公式計算:
其中,N表示對齊字節數,Size表示中斷向量表的字節數。
這里特別提醒下,Cortex-M0沒有VTOR 寄存器,所以它的中斷向量表必須放在0x00000000 地址起始的尋址空間中,而不能浮動。因此,在Cortex-M0 的系統中,如要更新中斷向量表,需將RAM映射到0x00000000 地址,然后將新的中斷向量表復制到0x00000000 地址起始的尋址空間當中。
文章來源:微信公眾號 融創芯城(一站式電子元器件、PCB、PCBA購買服務平臺,項目眾包平臺,方案共享平臺)
歡迎光臨 電子工程網 (http://m.qingdxww.cn/) |
Powered by Discuz! X3.4 |
主站蜘蛛池模板:
亚洲第一激情
|
日本韩国一区二区三区
|
毛片视频免费
|
国内在线亚洲精品第一线
|
日本黄色免费网址
|
国产成人亚洲欧美激情
|
成人国产午夜在线视频
|
免费观看成人羞羞视频网站观看
|
麻豆国产精品有码在线观看
|
日本高清中文字幕一区二区三区
|
中文在线免费不卡视频
|
国产大片91精品免费观看不卡
|
免费一级毛片无毒不卡
|
日本高清视频不卡
|
亚洲最大福利视频网
|
国产精品久久久久不卡绿巨人
|
国产自线一二三四2021
|
国产精品自线在线播放
|
日韩免费精品视频
|
日韩精品亚洲一级在线观看
|
麻豆毛片
|
99精品免费观看
|
视频一区久久
|
91av在|
青青青草视频在线观看
|
亚洲天天做日日做天天看2018
|
欧美精品免费看
|
9色视频在线
|
岛国大片免费看
|
久久精品国产91久久麻豆自制
|
韩国年轻漂亮女教师6
|
99热这里只有精
|
成人精品视频一区二区三区
|
成人影片在线免费观看
|
视频一区国产精品
|
算你色永久免费视频播放
|
日韩国产欧美一区二区三区
|
亚洲欧美日本一区
|
温十三暗卫肉高h
|
91爱视频
|
青青青草国产
|