Forum: Mikrocontroller und Digitale Elektronik AT91SAM7 - Flash Problem beim einbinden von lib_AT91SAM7S256.h


von Michael K. (mmike)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

ich bastel grad mit meinem Olimex SAM7-P256 devel board. Installiert ist 
die yagarto Umgebung mit Eclipse. Soweit läuft alles wunderbar. Flashen 
und debuggen funktioniert (eigentlich) einwandfrei ... Jetzt zum 
eigentlich:

Ich hab mir auf der Seite von Martin Thomas das SD/MMC Karten Beispiel 
runtergeladen um meine SD - Karte mal zu beschreiben. Er nutzt zur 
Initialisierung von verschiedenen Sachen die in der "lib_AT91SAM7S256.h" 
definierten Funktionen. Jetzt hab ich mir die Datei kopiert und in mein 
Eclipse - Projekt hinzugefügt und hab die Datei per #include 
eingebunden, mit dem Effekt dass Fehler beim kompiliern aufgetreten 
sind. Grund: Meine AT91AM7S256.h und die von Martin Thomas sind 
unterschiedlich. Seine ist neuer, also hab ich Seine verwendet. Danach 
klappt auch das kompilieren. Wunderbar. Jetzt flashe ich den Code 
(anbei) und bekomme dabei folgendes in der Console angezeigt:


**** Build of configuration Default for project MMC_FLASH ****

make program
Flash Programming with OpenOCD...
'I:\Programme\ARM\openocd\bin\'openocd-ftd2xx.exe -f 
at91sam7s256_flash_program.cfg
Open On-Chip Debugger (2008-06-19 19:00) svn: 717
URL: http://svn.berlios.de/svnroot/repos/openocd/trunk
Info:    options.c:50 configuration_output_handler(): jtag_speed: 0, 0
Info:    options.c:50 configuration_output_handler(): Open On-Chip 
Debugger (2008-06-19 19:00) svn: 717
Info:    jtag.c:1389 jtag_examine_chain(): JTAG device found: 0x3f0f0f0f 
(Manufacturer: 0x787, Part: 0xf0f0, Version: 0x3)
Info:    jtag.c:1389 jtag_examine_chain(): JTAG device found: 0x3f0f0f0f 
(Manufacturer: 0x787, Part: 0xf0f0, Version: 0x3)
Info:    target.c:237 target_init_handler(): executing reset script 
'script.ocd'
Info:    options.c:50 configuration_output_handler(): core state: ARM
Info:    options.c:50 configuration_output_handler(): wrote 1660 byte 
from file main.bin in 0.265625s (6.102941 kb/s)
Info:    jtag.c:1389 jtag_examine_chain(): JTAG device found: 0x3f0f0f0f 
(Manufacturer: 0x787, Part: 0xf0f0, Version: 0x3)
Warning: arm7_9_common.c:743 arm7_9_poll(): DBGACK set, but the target 
did not end up in the halted stated 1
User:    target.c:436 target_process_reset(): Timed out waiting for halt 
after reset
Flash Programming Finished.

Passt. Wenn ich jetzt jedoch nochmals flashen möchte, dann bekomme ich 
folgenden Output:


**** Build of configuration Default for project MMC_FLASH ****

make program
Flash Programming with OpenOCD...
'I:\Programme\ARM\openocd\bin\'openocd-ftd2xx.exe -f 
at91sam7s256_flash_program.cfg
Open On-Chip Debugger (2008-06-19 19:00) svn: 717
URL: http://svn.berlios.de/svnroot/repos/openocd/trunk
Info:    options.c:50 configuration_output_handler(): jtag_speed: 0, 0
Info:    options.c:50 configuration_output_handler(): Open On-Chip 
Debugger (2008-06-19 19:00) svn: 717
Info:    jtag.c:1389 jtag_examine_chain(): JTAG device found: 0x3f0f0f0f 
(Manufacturer: 0x787, Part: 0xf0f0, Version: 0x3)
Info:    jtag.c:1389 jtag_examine_chain(): JTAG device found: 0x3f0f0f0f 
(Manufacturer: 0x787, Part: 0xf0f0, Version: 0x3)
Info:    target.c:237 target_init_handler(): executing reset script 
'script.ocd'
Info:    options.c:50 configuration_output_handler(): core state: ARM
Error:   arm7_9_common.c:581 arm7_9_execute_sys_speed(): timeout waiting 
for SYSCOMP & DBGACK, last DBG_STATUS: 0
Error:   at91sam7.c:268 at91sam7_wait_status_busy(): status register: 
0x20005
Error:   at91sam7.c:270 at91sam7_wait_status_busy(): Lock Error Bit 
Detected, Operation Abort
Error:   flash.c:103 flash_driver_write(): error writing to flash at 
address 0x00100000 at offset 0x00000000 (-902)
Info:    jtag.c:1389 jtag_examine_chain(): JTAG device found: 0x3f0f0f0f 
(Manufacturer: 0x787, Part: 0xf0f0, Version: 0x3)
Warning: arm7_9_common.c:743 arm7_9_poll(): DBGACK set, but the target 
did not end up in the halted stated 1
User:    target.c:436 target_process_reset(): Timed out waiting for halt 
after reset
Flash Programming Finished.

Und jetzt kommt das seltsame: Wenn ich die Zeile:
#include "lib_AT91SAM7S256.h"
auskommentiere and dann neu kompiliere dann funktioniert das flashen 
auch wieder.

Wäre klasse, wenn mir jemand helfen könnte bzw. weiss woran das liegt 
...

Beste Grüße,
Michael

von Michael K. (mmike)


Lesenswert?

Kleiner Zusatz noch: Wenn ich das Programm ohne das oben genannte 
#include kompiliere und dann flashe und dann den Kommentar entferne, neu 
kompiliere und dann wieder flashe scheint es zu funktionieren ... hier 
der output der Konsole:


**** Build of configuration Default for project MMC_FLASH ****

make program
Flash Programming with OpenOCD...
'I:\Programme\ARM\openocd\bin\'openocd-ftd2xx.exe -f 
at91sam7s256_flash_program.cfg
Open On-Chip Debugger (2008-06-19 19:00) svn: 717
URL: http://svn.berlios.de/svnroot/repos/openocd/trunk
Info:    options.c:50 configuration_output_handler(): jtag_speed: 0, 0
Info:    options.c:50 configuration_output_handler(): Open On-Chip 
Debugger (2008-06-19 19:00) svn: 717
Info:    jtag.c:1389 jtag_examine_chain(): JTAG device found: 0x3f0f0f0f 
(Manufacturer: 0x787, Part: 0xf0f0, Version: 0x3)
Info:    jtag.c:1389 jtag_examine_chain(): JTAG device found: 0x3f0f0f0f 
(Manufacturer: 0x787, Part: 0xf0f0, Version: 0x3)
Info:    target.c:237 target_init_handler(): executing reset script 
'script.ocd'
Info:    options.c:50 configuration_output_handler(): core state: ARM
Warning: arm7_9_common.c:2120 arm7_9_write_memory(): memory write caused 
data abort (address: 0x00100600, size: 0x4, count: 0x1f)
Info:    options.c:50 configuration_output_handler(): wrote 1660 byte 
from file main.bin in 0.265625s (6.102941 kb/s)
Info:    jtag.c:1389 jtag_examine_chain(): JTAG device found: 0x3f0f0f0f 
(Manufacturer: 0x787, Part: 0xf0f0, Version: 0x3)
Warning: arm7_9_common.c:743 arm7_9_poll(): DBGACK set, but the target 
did not end up in the halted stated 1
User:    target.c:436 target_process_reset(): Timed out waiting for halt 
after reset
Flash Programming Finished.


Aber ein weiteres programmieren danach funktioniert nicht mehr ...

Wäre klasse, wenn jemand eine Idee hat ...

Beste Grüße,
Michael

von Michael K. (mmike)


Lesenswert?

So Problem ist gefixed. Für alle die mal ein ähnliches Problem haben 
sollten hier die Lösung:

in der lib_AT91SAM7S256.h werden Funktionen wie folgt implementiert:

__inline xxx func (type param)
{
   ...
}

das Problem ist das __inline wenn der der gcc (arm - Version) als 
Compiler verwendet wird.

wenn man direkt nach folgenden Zeilen

#ifndef lib_AT91SAM7S256_H
#define lib_AT91SAM7S256_H

die folgende Zeile einfügt:

#define __inline static inline

dann klappts. Danke an dieser Stelle an Martin Thomas für den Tipp (in 
einem anderen Forum gefunden).

Grüße,
Michael

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.