Absturzproblem

Gast #2924808
Lesenswert?

Hallo,

ich verwende in meinem Bootloader (auf dem tutorial zu c bootloadern 
basierend) folgendes:
1
memset(flash_data, 0xFF, sizeof(flash_data));

dieses commando bringt den uc sofort zum abstürzen und neustarten. Das 
witzige ist, dass ich das kommando schon immer drinn hab und es im 
tutorial auch drinn steht.

definition:
1
uint8_t   flash_data[SPM_PAGESIZE];
2

3
includes: 
4

5

6
#include <string.h>
7
#include <stdlib.h>
8
#include <stdio.h>

Wieso kann dieser Befehl abstürzen? Vor allem wird er direkt in der 
initialisierung des Programs auch ausgeführt, dort aber ohne probleme. 
Nur mitten während der laufzeit gibt es sofort einen absturz - liegt 
auch definitiv an dem befehl, ohne läufts.
#2924810
Lesenswert?

Tom schrieb:

> Nur mitten während der laufzeit gibt es sofort einen absturz - liegt
> auch definitiv an dem befehl, ohne läufts.

Ne. es liegt an der Umgebung, die aus irgendeinem Grund vitale 
Informationen genau an dieser SRAM Position liegen hat. Und wenn dann 
der memset den Speicher niederbügelt, geht der Rest in die Hose, weil 
ihm der memset die Daten unter dem Hintern weggebügelt hat.

Du siehst die Symptome - der memset macht sie sichtbar. Aber die Ursache 
steckt woanders.
#2924912
Lesenswert?

Ich kann mich nur wiederholen:
Die Ursache steckt woanders.

Was genau die Ursache ist, kann ich so nicht sagen. Es gibt viele 
mögliche Szenarien für derartige Dinge. Ich hab mich halt für die 
naheliegenste und häufigste entschieden. Die scheint es bei dir aber 
nicht zu sein.
Mehr kann man mit der unvollständigen Information allerdings nicht sagen 
und mit jeder weiteren versuchten Diagnose würde ich mich zuweit aus dem 
Fenster lehnen.
Gast #2925059
Lesenswert?

Wie geht man sowas denn an?

Das Programm ist relativ klein, ich würde mich wundern wenn der compiler 
nun auf einmal verrückt spielen würde. Bisher waren es auch immer eher 
meine Fehler als die des Compilers ;)


Eigentlich nichts besonderes, ein C programm das ganz normal compiliert 
wird. Da dürfte doch keine Kollision auftreten?! Ram ist auch nur zu 
rund 30% belegt (Atmega640)
#2925185
Lesenswert?

Tom schrieb:
> Hm,
>
> wenn ich den memset durch das ersetze:
>
>
1
> for (uint16_t mm = 0; mm < sizeof(flash_data); mm++) {
2
>                                   flash_data[mm] = 0xff;
3
>                             }
4
>
>
> tritt der fehler nicht auf!
>
> Ist das nicht genau das selbe?

Was passiert wenn Du beide Möglichkeiten gleichzeitig drin lässt? 
Vermutlich liegt Dein Problem wirklich woanders.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren