2011-01-10 43 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