2011-01-10 14 views
2

Ich benutze einen Olimex ARM-USB-OCD Dongle mit openOCD und GDB um einen stm32f103 Mikro zu programmieren und zu debuggen. Die IDE, die ich verwende, kam von der Olimex dev-kit CD und nutzt Eclipse Ganymed.wie programmiere ich den STM32 flash mit openOCD und gdb

Ich kann ein kleines Programm in den RAM laden und den Code ohne Probleme durchlaufen.

Ich habe jetzt ein viel größeres Programm, das nicht in RAM (das ist nur 20K) passt und so würde ich es von Flash (das ist 128K) laufen lassen.

Ich habe das Linker-Skript geändert, das angibt, dass der Programmcode im Flash-Abschnitt (Adresse 0x8000000) gehen sollte, aber gdb kann das Programm nicht laden.

(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 

Was soll ich tun, um gdb das Programm in Flash zu laden?

Antwort

5

Haben Sie überlegt, direkt mit openocd zu blinken? Ich mache das in einem ähnlichen Setup, aber mit einem ARM7-Mikrocontroller.

openocd -f flash.cfg 

Hier ist meine 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 

Die GPNVM Zeug ist Atmel SAM7 spezifisch, aber ich denke, das Skript sollten Sie für die Herstellung einer STM32-Version einen guten Ausgangspunkt geben. Openocd kann am Anfang etwas verwirrend sein, aber die Dokumentation ist gut und lesenswert (http://openocd.berlios.de/). Die aktuelle stabile Version (0.4.0) ist ziemlich alt. Wenn Sie Probleme haben, laden Sie den neuesten Quellcode herunter und kompilieren Sie Ihren eigenen.

+1

Ich endete diese Route und endlich haben die Dinge funktioniert. Ich benutzte openOCD, um die Abschnitte .text und .data zu flashen, und kopierte dann den .data-Abschnitt zu Beginn meiner Funktion main() in den RAM. – mksuth

Verwandte Themen