2011-01-10 61 views
2

我正在使用帶有openOCD和GDB的Olimex ARM-USB-OCD加密狗來編程和調試stm32f103 micro。我使用的IDE來自Olimex dev-kit CD,並使用Eclipse ganymede。如何使用openOCD和gdb編寫STM32閃存

我可以加載一個小程序到RAM中,並且沒有任何問題地執行代碼。

我現在有一個更大的程序不適合內存(這只是20K),所以我想從閃存(這是128K)運行它。

我修改了鏈接描述文件,指出程序代碼應該放在閃存部分(地址0x8000000),但gdb無法加載程序。

(gdb) 
20 load main.out 
&"load main.out\n" 
load main.out 
~"Loading section .text, size 0xb0e6 lma 0x8000000\n" 
Loading section .text, size 0xb0e6 lma 0x8000000 
&"Load failed\n" 
Load failed 

我應該怎麼做才能讓gdb將程序加載到閃存中?

回答

5

您是否認爲直接使用openocd閃爍?我正在做類似的設置,但使用ARM7微控制器。

openocd -f flash.cfg 

這裏是我的flash.cfg

set CHIPNAME at91sam7x512 

source [find interface/olimex-arm-usb-ocd.cfg] 
source [find target/at91sam7sx.cfg] 

init  
halt 

flash probe 0 
flash probe 1 

flash erase_sector 0 0 15 
flash erase_sector 1 0 15 

flash write_image my-image.elf 

at91sam7 gpnvm 0 set 
at91sam7 gpnvm 1 set 
at91sam7 gpnvm 2 set 
shutdown 

的GPNVM東西是Atmel SAM7具體,但我覺得這個劇本應該給您做出STM32版本的一個很好的起點。 Openocd一開始可能有點混亂,但文檔很好,值得一讀(http://openocd.berlios.de/)。目前的穩定版本(0.4.0)已經很老了,所以如果你有問題,請下載最新的源代碼並編譯你自己的。

+1

我最終走了這條路線,終於有了工作。我使用openOCD將.text和.data部分寫入閃存,然後在我的main()函數開始時將.data部分複製到RAM中。 – mksuth 2011-01-17 19:24:19