作者gg1122 (99通未接來電)
看板ASM
標題Re: [問題] Bootloader && Flash
時間Sat Aug 2 01:02:28 2014
※ 引述《WolfLord (呆呆小狼)》之銘言:
: ※ 引述《gg1122 (99通未接來電)》之銘言:
: : 問題1.這樣對APP code跑起來會造成問題嗎 ?
: 你是直接沿用Intel HEX還是自定義格式?
: 如果使用Intel HEX,那你只要使用不是01~05的格式碼自然就不會弄錯了。
: 如果是自定義碼,那只要你的LOADER自己能正確解碼,那就不會有問題了。
W大 編譯器編出來的hex 是Intel HEX格式 但是我同事是說可以直接編bin
是不清楚bin開起來會長怎樣....之前都沒做過bootloader...
現在就是用NXP編譯器 直接輸出bin檔
這個bin想另外藏head進去(可能找現成的軟體或自己寫個AP做)
哪個自定義碼意思是 ??
我的loader應該可以正確收進來(待測)
只是現在客戶AP定的通訊協定 讓我的loader很難寫
目前想請教的點為 FLASH 如果在本來APP code的資料除外
又亂塞資料oxFF 在這些真實資料片段之間 會成APP code當機或者不能跑?
如果塞了40Byte 0xFF 在APP code 開始點 又或先把這216個資料寫入
後面再塞寫0xFF*40(或者是不寫之前ERASE過 應該為0XFF)
1. start app address next page
|------|---------------|
0xFF*40 216 OK data
2. start app address next page
|---------------|------|
216 OK data don't care
另外我看我手上的sample code 他也會不管就怎樣就寫 跟我狀況2很像
/* Ensure that amount of data written to flash is at minimum the
size of a flash page */
#define IAP_FLASH_PAGE_SIZE_BYTES 256
if (u16Len < IAP_FLASH_PAGE_SIZE_BYTES)
{
u16Len = IAP_FLASH_PAGE_SIZE_BYTES;
}
then do write flash
u16Len = 128 or 1024
只收到128 BYTE 硬寫入FLASH Rx_buffer根本就沒後面128Byte哪些垃圾值
或0x00 (buffer 為static 變數)
這樣不就跟我做塞垃圾值寫入FLASH的道理一樣嗎??
: : 問題2.絕對位置的讀取 Volatile int *ptr =(Volatile int *)(0x0400)
: : 前面要加 Volatile 嗎?
: 這樣才能防止編譯器自作聰明哪
: : 問題3.ARM有指令讓程式跳到絕對位置方法嗎?
: : 例如 在APP code 想重回bootload哪邊 (不用reset)?
: 這樣不可以嗎?
: mov pc,#?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.161.200.190
※ 文章網址: http://webptt.com/m.aspx?n=bbs/ASM/M.1406912551.A.1FD.html
※ 編輯: gg1122 (118.161.200.190), 08/02/2014 01:05:06
1F:推 WolfLord:bin檔是memory dump聯offset都沒有,你說的那些在bin都不 08/02 02:34
2F:→ WolfLord:可行,除非你作記號的位址不是執行碼。 08/02 02:35
3F:→ gg1122:我以為跟普通的開檔 讀檔一樣 = = 所以應該是在APP 哪邊應 08/02 20:25
4F:→ gg1122:應該直接把這些資料定在到最前面讓編譯器幫我們轉出bin檔? 08/02 20:26
5F:→ gg1122:不過app code哪邊最前面不是會被編譯器拿來放中斷向量嗎? 08/02 20:28
6F:→ gg1122:還是我又搞錯方向了? 還麻煩賜教 謝謝 08/02 20:29
7F:推 WolfLord:你完全搞錯了,BIN檔是ROM CODE,如果你有使用OS 08/02 21:52
8F:→ WolfLord:然後動態載入執行,那才有標頭、索引什麼的,最常見的是 08/02 21:53
9F:→ WolfLord:PE、COFF、ELF這三種格式。如果是靜態配置到FLASH的,那 08/02 21:54
10F:→ WolfLord:要不就是直接映射的BIN要不就是現成的HEX,除此之外 08/02 21:54
11F:→ WolfLord:都是各家隨意訂製的格式內容。 08/02 21:55
12F:→ gg1122:簡而言之 我別在肖想亂塞資料到FLASH這件事 08/02 22:28
13F:→ gg1122:然後可手動編譯bin檔 loader前面多少不寫入FLASH自己知道 08/02 22:32
14F:→ gg1122:真的資料就一個一個收好page填入 08/02 22:34
15F:→ gg1122:哪些位置就是.map規定好的 所以別惡搞吧? 08/02 22:35
16F:→ gg1122:如果是這樣 我只能跟客戶溝通協定了 08/02 22:37
17F:推 WolfLord:You got it 08/03 12:43
18F:→ gg1122:謝謝! 08/03 22:25
19F:→ witchang: bin檔內容就是.init, .text..等section的資料,順序依照 08/31 09:20
20F:→ witchang: 你的linker cmd安排,你的例子或許可以在cmd檔加一個sect 08/31 09:22
21F:→ witchang: tion, 然後把你想要的資料填在那個section裡,因為是你 08/31 09:23
22F:→ witchang: 自己知道的位置,所以程式中要當Data或Op都隨你。 08/31 09:23