這裏是我的程序的nm轉儲。如何將main()重定位到0x00000000?
00000000 T __ctors_end
00000000 T __ctors_start
00000000 T __dtors_end
00000000 T __dtors_start
00000000 a __tmp_reg__
00000000 T __trampolines_end
00000000 T __trampolines_start
00000000 T setup
00000001 a __zero_reg__
0000003d a __SP_L__
0000003e a __SP_H__
0000003f a __SREG__
00000072 T __vector_15
00000086 T main
000000a8 A __data_load_end
000000a8 A __data_load_start
000000a8 T _etext
00800100 D _edata
00800100 T _end
00810000 T __eeprom_end
架構是AVR,我需要得到的main()回升到00000000,以便我正在運行此代碼的正確執行的芯片。它應該像鏈接腳本一樣簡單,不是嗎?
你確定要在'0x00000000'處設置'main'嗎?我見過的AVR文檔說第一個代碼運行的是從256B到4KB的引導加載程序,然後它將跳轉到主程序。 – lurker
嗯,'0x00000000'是我需要'main()'在二進制文件中的地址,因爲我在刷新二進制文件以'256B'開始,以節省編程時間。但是,謝謝你的觀察。 –
好的謝謝澄清。通常情況下,用於寫入閃存的文件格式(例如Intel Hex或S Record)將目標地址考慮在內,並且它應該與文件中的地址無關。聽起來像你正在直接創建一個二進制圖像文件。如果你當前的文件主要從該文件中的地址256開始,那麼前256個字節是什麼?在您的系統上編程256個字節需要多少編程時間?這應該是非常快的。 – lurker