Forum: Mikrocontroller und Digitale Elektronik PIC18 array ändert Werte selbstständig


von Marc K. (dergruenekobold)


Lesenswert?

Hallo,
hab da ein Problem das ich mir nicht erklären kann. Hoffe mir kann 
geholfen werden.
Ich verwende den PIC18F13K22 und alles läuft perfekt für etwa 30 min. 
Hab folgendes array dessen Werte nie verändert werden sondern nur mit 
epfangenen Daten veglichen werden:

unsigned char SerialNumber[8] = 
{0xCC,0xB7,0xD0,0x72,0x28,0x8E,0x7E,0x66};

Wie es der Name schon sagt ist es eine Seriennummer. Nach etwa 30 
minuten verändern sich die Werte von alleine ganz willkürlich. Da dass 
array nur einmal am anfang deklariert und initialisiert wird stimmt nun 
die Seriennummer nicht mehr mit den emfangenen Daten überein und nichts 
geht mehr.

von Max H. (hartl192)


Lesenswert?

Zeig uns mal deinen Quellcode.

von Chris B. (dekatz)


Lesenswert?

Marc Köcher schrieb:
> Hallo,
> unsigned char SerialNumber[8] =
> {0xCC,0xB7,0xD0,0x72,0x28,0x8E,0x7E,0x66};
>
> Wie es der Name schon sagt ist es eine Seriennummer. Nach etwa 30
> minuten verändern sich die Werte von alleine ganz willkürlich.

Von alleine sicher nicht, sondern DU bzw. dein Programm überschreibt den 
Bereich von <SerialNumber> (wie und warum auch immer!?).

const unsigned char SerialNumber[8] =........
dürfte das Problem beseitigen. (hängt natürlich vom verwendeten Compiler 
und dessen Einstellungen ab - bin vom XC8 ausgegangen).
 (XC8 User Guide Page 163, 179).

von WehOhWeh (Gast)


Lesenswert?

Das kenn ich. Ziemlich sicher hast du dich verpointert.

Sowas passiert genau immer dann, wenn du wo hinschreibst, wo du gar 
nicht wolltest. Mögliche Ursachen:
- Du schreibts in ein anderes Array, über den Rand hinaus und triffst 
dieses
- Pointer einmal zu wenig derefernziert oder den Inhalt als Pointer 
verwendet
- Funktion aufgerufen und der den falschen oder keinen Pointer übergeben

Das ist eben das schöne bei µCs, bei 8 Bittern sind die Adressen so 
klein, dass man so gut wie immer irgendwas witchitges trifft, wenn man 
danebenschießt :-)

Es gibt viele mögliche Ursachen, was den Fehler schwehr zu lokalisieren 
macht.

Meine Vorgehensweise in solchen Fällen ist folgende:
Komponenten aus dem Projekt asukommentieren, bis der Fehler nicht mehr 
auftritt. Das machst du so lange, bis das nicht mehr passiert. Was du 
zuletzt auskommentiert hast, verursacht diesen Fehler.

Das musst du dann sorgfältigst lesen und über jede Zeile genau 
nachdenken.

von Volker S. (vloki)


Lesenswert?

Debugger (PICKITx) nehmen, Datenhaltepunkt beim Schreiben ...

von WehOhWeh (Gast)


Lesenswert?

Volker SchK schrieb:
> Debugger (PICKITx) nehmen, Datenhaltepunkt beim Schreiben ...

Das geht? Man kann mit dem Debugger auf Änderung einer Speicherzelle 
triggern? Das hätte ich schon 1-2mal brauchen können.

Zu meiner Schande muss ich gestehen, dass mir nicht klar ist, wie man 
das macht. Wie genau muss man da in MPLABx vorgehen? Wie nennt man das 
auf englisch (dass man das in der Hilfe nachlesen kann)?

von Volker S. (vloki)


Lesenswert?

Klick einfach mal mit der rechten Maustaste in einem Sourcefile.
Der 6. Eintrag im Popup Menü (oder Strg-Umwschalt-F11)

Den Rest bekommst du ziemlich sicher selber raus ;-)

von WehOhWeh (Gast)


Lesenswert?

Volker SchK schrieb:
> Klick einfach mal mit der rechten Maustaste in einem Sourcefile.
> Der 6. Eintrag im Popup Menü (oder Strg-Umwschalt-F11)
>
> Den Rest bekommst du ziemlich sicher selber raus ;-)

Danke, das funktioniert.  Wirklich sehr praktisch!
Ich fühle mich plötzlich wieder wie ein Anfänger :-)

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.