4

我正在使用带有 openOCD 和 GDB 的 Olimex ARM-USB-OCD 加密狗来编程和调试 stm32f103 micro。我使用的 IDE 来自 Olimex dev-kit CD,并使用了 eclipse ganymede。

我可以将一个小程序加载到 RAM 中并单步执行代码而不会出现任何问题。

我现在有一个更大的程序,它不适合 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 将程序加载到闪存中?

4

1 回答 1

6

有没有考虑直接用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)已经很老了,所以如果你有问题,请下载最新的源代码并自己编译。

于 2011-01-14T09:00:04.370 回答