PIC18 array ändert Werte selbstständig

OP #4094739
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.
#4094753
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).
Gast #4094762
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.
Gast #4094827
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)?
Gast #4095375
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 :-)

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.