Re: [問題] Bootloader && Flash

看板ASM (組合語言)作者 (99通未接來電)時間10年前 (2014/08/02 01:02), 10年前編輯推噓3(3019)
留言22則, 3人參與, 最新討論串3/4 (看更多)
※ 引述《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://www.ptt.cc/bbs/ASM/M.1406912551.A.1FD.html ※ 編輯: gg1122 (118.161.200.190), 08/02/2014 01:05:06

08/02 02:34, , 1F
bin檔是memory dump聯offset都沒有,你說的那些在bin都不
08/02 02:34, 1F

08/02 02:35, , 2F
可行,除非你作記號的位址不是執行碼。
08/02 02:35, 2F

08/02 20:25, , 3F
我以為跟普通的開檔 讀檔一樣 = = 所以應該是在APP 哪邊應
08/02 20:25, 3F

08/02 20:26, , 4F
應該直接把這些資料定在到最前面讓編譯器幫我們轉出bin檔?
08/02 20:26, 4F

08/02 20:28, , 5F
不過app code哪邊最前面不是會被編譯器拿來放中斷向量嗎?
08/02 20:28, 5F

08/02 20:29, , 6F
還是我又搞錯方向了? 還麻煩賜教 謝謝
08/02 20:29, 6F

08/02 21:52, , 7F
你完全搞錯了,BIN檔是ROM CODE,如果你有使用OS
08/02 21:52, 7F

08/02 21:53, , 8F
然後動態載入執行,那才有標頭、索引什麼的,最常見的是
08/02 21:53, 8F

08/02 21:54, , 9F
PE、COFF、ELF這三種格式。如果是靜態配置到FLASH的,那
08/02 21:54, 9F

08/02 21:54, , 10F
要不就是直接映射的BIN要不就是現成的HEX,除此之外
08/02 21:54, 10F

08/02 21:55, , 11F
都是各家隨意訂製的格式內容。
08/02 21:55, 11F

08/02 22:28, , 12F
簡而言之 我別在肖想亂塞資料到FLASH這件事
08/02 22:28, 12F

08/02 22:32, , 13F
然後可手動編譯bin檔 loader前面多少不寫入FLASH自己知道
08/02 22:32, 13F

08/02 22:34, , 14F
真的資料就一個一個收好page填入
08/02 22:34, 14F

08/02 22:35, , 15F
哪些位置就是.map規定好的 所以別惡搞吧?
08/02 22:35, 15F

08/02 22:37, , 16F
如果是這樣 我只能跟客戶溝通協定了
08/02 22:37, 16F

08/03 12:43, , 17F
You got it
08/03 12:43, 17F

08/03 22:25, , 18F
謝謝!
08/03 22:25, 18F

08/31 09:20, , 19F
bin檔內容就是.init, .text..等section的資料,順序依照
08/31 09:20, 19F

08/31 09:22, , 20F
你的linker cmd安排,你的例子或許可以在cmd檔加一個sect
08/31 09:22, 20F

08/31 09:23, , 21F
tion, 然後把你想要的資料填在那個section裡,因為是你
08/31 09:23, 21F

08/31 09:23, , 22F
自己知道的位置,所以程式中要當Data或Op都隨你。
08/31 09:23, 22F
文章代碼(AID): #1JsyWd7z (ASM)
討論串 (同標題文章)
文章代碼(AID): #1JsyWd7z (ASM)