看板 C_and_CPP 關於我們 聯絡資訊
小弟使用工具爲keilc5 晶片爲silicon f380 Bootloader code 放在 0x0000-0x13ff Application code 放在 0x1400-0xff00 想請問一開始在 bootloader code 判斷進application code 時我該怎麼做才能讓程式跑 到0x1400的位置開始執行application code -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.9.69.77 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1529491600.A.8CA.html
jimmytzeng: 要先把cpu上的pc register指到application code的起點 06/20 20:06
jimmytzeng: ,這個就要用組語寫了 06/20 20:06
james732: 可以做個function pointer指向0x1400再呼叫即可 06/20 23:00
boss0405: goto 06/21 00:25
JFLung9536: 要確定一下mcu的reset中斷向量表的位置是不是就是app 06/21 09:02
JFLung9536: 起始位置(有的mcu是在中斷向量表的最後一個位置),是 06/21 09:02
JFLung9536: 的話讓pc直接指向此位置。可以用組語做,就要去看mcu 06/21 09:02
JFLung9536: 的組語用法。用c做的話,宣告一個type void,讓他等於 06/21 09:02
JFLung9536: 起始位址,再讓改變數變成函數var();就跳過去了。 06/21 09:02
boss0405: 樓上大大說的都是一些常用的方式,另外有些compiler 06/21 09:41
boss0405: 也支援goto *((void *)jump_addr);的用法 06/21 09:42
etiam: 請問指標函數能指向main嗎,因我的application 內也有個mai 06/21 09:45
etiam: n 06/21 09:45
Lipraxde: bootloader沒辦法拿到app的symbol吧?我覺得不行 06/21 11:39
JFLung9536: 如果你的中斷向量表中有一組 可以直接指到main 兩個不 06/21 12:57
JFLung9536: 一樣的中斷向量表 就要指到中斷向量reset的位置 06/21 12:57
ss880702ss: 並非指向main這個symbol而是指向main的地址,通常在a 06/22 08:12
ss880702ss: pp起始地址+4的地方吧 06/22 08:12
etiam: 感謝 06/26 10:02