hallo,
habe für den zugriff auf bit-ebene ein struct angelegt für den zugriff
auf einzelne bit.
habe das ganze dann im pd30sim simuliert und muste feststellen, dass
beim zurgriff auf die bit unterschiedliche adressen verwendet werden.
z.bsp.: wird "in1 = 0" übersetzt in "and.b #feh, 0103h" dies wäre
ja korrekt, da mein struct auf adresse 0103h angelegt ist.
aber an anderer stelle wird der selbe ausdruck in
"bclr 0, -2h[fb] übersetzt und das ist eine ganz andere adresse.
was kann ich nun machen damit ich immer auf das richtige bit zugreife?
jack
hallo,
habe das nochmals etwas anderes probiert komme aber nicht weiter.
auszug aus programm: (wird übersetzt siehe anhang)
volatile char reg1;
#define r1 0
#define r2 1
#define r3 2
#define r4 3
if((CHECKBIT(reg1, r1))) //& (CHECKBIT(reg1, r2)))
{
SETBIT(reg1, r1);
}
else
{
CLEARBIT(reg1, r1);
}
es wird aber immer nur die zeile CLEARBIT(reg1, r1) angesprungen.
komme einfach nicht mehr weiter, hat jemand eine idee?
jack
also deine erste version funktioniert problemlos, d.h. der syntax
ist schonmal ok (programming manual nov 12., 2001; seite 94).
ne frage, funktioniert das bei dir nicht, oder störst du dich an
den vom compiler erzeugten code? (im sinne von nicht verstehen)
indirekte adressierung wäre dann das stichwort.
ralf
hallo ralf,
danke für die hilfe, es funktioniert fast.
hatte einen fehler beim einbinden meiner header-datei.
habe nun noch ein kleines problem, wenn ich das ganze in einer datei
schreibe und übersetze, läuft es korrekt (so wie bei dir).
schreibe ich das ganze in 3dateien (eingang.c, test2.h und test2.c)
wird das ganze nicht korrekt übersetzt siehe Anhang (erstes bild ist
die korrekte übersetzung mit einer datei, 2übersetzung aufgeteil auf
3dateien). achte auf die übersetzung des ausdruckes if(in1 == 0), wird
nicht gleich übersetzt (adresse ist unterschiedlich) und funktioniert
beim test auch nicht.
danke
jack
hallo,
bin fast am verzweifeln, finde nicht die lösung.
es wird einfach nicht korrekt übersetzt, glaube kaum das der fehler am
compiler ligt.
im anhang mal meine dateien, hier teil1.
jack
hallo OldBug,
danke für die hilfe, leider das selbe problem wie oben, siehe anhang2.
beim aufruf der eingänge wird beim test von "if(in1 == 0)" auf eine
falsche adresse gesprungen (803h).
jack
hallo,
habe noch keine lösung gefunden, könnte bitte jemand das mal bei sich
probieren, glaube es liegt am compiler oder so (dateien siehe oben).
ich arbeite mit hew3 und pd30sim.
jack
hallo jack,
sorry für die wartezeit.
ich habbs 1:1 ausprobiert und es funktioniert problemlos.
eventuell hast du ein einstellungsproblem.
ist die hew vielleicht veraltet?
ralf