Programm wird nicht korrekt übernommen ???!!!
Hallo Zusammen,
ich habe einen seltsamen Effekt und weiß mir nicht zu helfen.
Wenn ich ein Programm in meinem ATMega32 via ISP lade, arbeitet es korrekt und ich kann meine Daten abrufen.
(Daten via I2C Bus).
Schalte ich die Schaltung aus, so wird nach dem Einschalten der vorletzte Stand wieder geladen.
(Ich habe eine Variable erst mit 100 und danach mit 101 beschrieben.)
Nach dem Aus/Einschalten hat die Variabel wieder den Wert 100
Was kann man hier falsch machen ?
Gruss R.
Liste der Anhänge anzeigen (Anzahl: 2)
So, anbei die beiden entsprechenden Dateien (fürs erste).
In der Interruptroutine wäre die einzige Möglichkeit, wo schreiben auf diese variablen zugegriffen wird.
Diese Variable ist am Anfang mit 101 gesetzt
Code:
extern unsigned char m_TargetSpeedLeft; // Speed to drive for the left wheel
extern unsigned char m_TargetSpeedRight; // Speed to drive for the right wheel
Wenn ich das Programm neu lade und die Variablen direkt über I2C Bus abfrage, haben sie den Wert 101.
Nachdem ich das Gerät ausgeschaltet habe und nochmals einschalte, stehen in diesen Variablen wieder 100.
Code:
typedef struct _Coordiante
{
unsigned int x,y; // Coordinate position
} Coordiante;
extern volatile Coordiante m_StartPosition;
extern volatile Coordiante m_EndPosition;
extern volatile Coordiante m_ActualPosition;
Mit diesen Variablen habe ich einen ähnlichen Fehler. Hier sind die Positionsangaben plötzlich falsch, obwohl diese nur am Programmstart gesetzt werden. Werte von 10 springen plötzlich auf 314...
Ich habe nochmals alle Vergleiche geprüft, ob ich den "klassischen Fehler" "=" statt "==" verwendet habe, konnte aber keinen Fehler finden.
Die einzige Routine, wo ich mit Pointer arbeite ist in der Interruptroutine des TWI Slaves.
Da ich die Variable ja über TWI einlese, könnte der Fehler hier sein, nur kann ich dort keinen Fehler sehen (nicht mehr sehen).
Gruss R.