PIC 16F Serie - CC5X Compiler

08/10/2010 - 00:27 von Stefan | Report spam
Hallo,

ich weiß nicht ob meine Frage hier richtig aufgehoben ist - ich
programmiere einen PIC16 und bin von einem anderen C Compiler
gekommen. Jetzt habe ich das Problem dass ich einige Variablen über
den Reset des Contrpollers hinaus halten möchte.

Bei meinem Compiler HITECH war das so, dass diese Variablen als
"persistent" gekennziechnet wurden und somit nach dem reset nicht
automatisch mit "0" initialisiert werden.

Beispiel:

persistent char zaehler;

zaehler = 2;
#asm
RESET
#endasm

// Zaehler hat nach wie vor den Wert 2

char zaehler;
zaehler = 2;
#asm
RESET
#endasm
// Zaehler hat nach Reset den Wert "0"

Gibt es so einen Befehl bzw. Schlüsselwort auch beim BKND Compiler
(CC5X) ?

Wàre sehr dankbar für eine Antwort !!

Grüße,

Stefan
 

Lesen sie die antworten

#1 Motlib
09/10/2010 - 08:33 | Warnen spam
Hallo,

Stefan wrote:
ich weiß nicht ob meine Frage hier richtig aufgehoben ist - ich
programmiere einen PIC16 und bin von einem anderen C Compiler
gekommen. Jetzt habe ich das Problem dass ich einige Variablen über
den Reset des Contrpollers hinaus halten möchte.

Bei meinem Compiler HITECH war das so, dass diese Variablen als
"persistent" gekennziechnet wurden und somit nach dem reset nicht
automatisch mit "0" initialisiert werden.



Das scheint beim Hitech eine compilerspezifische Erweiterung zu sein. Den
CC5X kenne ich nicht, aber bei den Compiler, die ich kenne (GHS und IAR)
legt man eine eigene Section (im Linker Command File) an, die als NO_INIT,
no_clear o.à. gekennzeichnet ist. Dadurch wird die Section nach einem Reset
nicht initialisiert und die Variablenwerte bleiben erhalten.

Dann schreibt man im Sourcecode vor die Variable eine #pragma-Anweisung,
damit diese Variable in der entsprechenden Section landet. Evtl. muss hinter
die Variable ein weiteres #pragma, um wieder auf die default-Section
umzuschalten.

Man muss nur aufpassen, dass die Variable sich, wenn man den Strom nur kurz
abschaltet, nicht teilweise veràndert (da kippen dann gerne mal nur einzelne
Bits...). Also am besten immer eine CRC drüber oder doppelt invers ablegen
oder so.

Gruß,

Andreas

.- - - .
| Andreas Schroeder - www.a-netz.de |
'--'

Ähnliche fragen