![]() |
發布時間: 2022-2-15 10:50
正文摘要:不知道應該怎么準確描述我遇到的問題。 先講一下我的使用場景,我使用stm32的bootloader進行程序跳轉到0x0802 0000這個位置,0x0802 0000是主程序的起始地址。 我使用ucos-II系統編譯生成bin文件燒錄,正常運行, ... |
0x8000000 => flash memory. 0x20000000 => SRAM memory. Please see LD file in you project folder . |
發表于 2022-2-16 11:53 我的問題是app起始地址是一樣的情況下,帶UCOS-II系統的程序和使用標準庫的程序,兩者生成的Reset_Handler地址為什么一個是0x080 4xxx,一個是0x0802 xxxx |
發表于 2022-2-15 18:37 你好,我這個是芯片的flash有1M,0x0800 0000---0x0801 FFFF 這個區域分配給了bootloader,0x0802 0000這個區域開始是主程序的起始地址 |
發表于 2022-2-16 11:53 是的。我之前用bootloader跳轉到標準庫寫的app,跳轉前最后的判斷是
,這樣就正常跳轉了,但是到用到UCOS-II的程序,系統編譯發現這個LASH_APP1_ADDR+4這個位置的地址不對了 |
AUG 發表于 2022-2-16 09:44 你好,現在才看到。主要的疑問是我APP程序時從0x08020000開始的,但是BIN文件的第二個地址竟然時0x0804xxxx,這個程序用的時ucos-II。我在用IAP從bootloader跳轉到主程序時,發現跳轉失敗才發現的,因為之前用標準庫寫的并沒有這個問題,又特意去看來下,才發現標準庫和UCOS-II生成的有些不同。標準庫是0x0802xxxx. 我在網上查詢以后,查到說BIN文件第二個地址是Reset_Handle()的地址。 |
AUG 發表于 2022-2-16 09:44 bootloader設定128k那是家里有礦隨便浪。其實樓主的問題是app起始地址0x08020000,而Reset_Handler地址0x0804xxxx,這之間的128k是怎么冒出來的? |
一個bootloader能有128K的大小?當然你可以跳轉到這兒運行也沒我問題,如果你的flash足夠大的話。 還有你說的Reset_Handler地址不一樣,這是不可能的,啟動文件里面可以看到你的復位地址在哪兒,跳轉過去之后只是加上偏移就可以了。還有你看的是0x08020000的數據,是你主程序開始的內容,跟你用什么庫生成是沒關系的吧,你改下代碼然后哦重新編譯一下,估計也會有所不一樣。同時你可以直接查看BIN文件的數據,并不需要去仿真燒錄到單片機里面查看。 |
0x20000對應128k,如果你的代碼有這么大不太正常了嗎? |