hallo wenn ich asm { swapf portd } habe und dass Teil eines C++ Programms ist, bekomme ich ständig den error: error in built-in assembly beim builden. woran könnte das liegen?
Ich habe jetzt keine Ahnung um welchen Controller/Assembler es geht, aber ich kann mir schwer vorstellen, dass swapf auf einem Port funktioniert. Leg den Wert mal in einem Register ab, führ' dann das swapf aus und leg das Ergebnis wieder auf den Port. Gruß Kai
Ich schreibs für einen PIC 16f877a könnte das so gehen (hab noch nie wirklich ASM programmiert) asm { bsf temp movf portd,temp swapf temp movf temp,portd } ???
Bei den meisten Assembler-Sprachen ist der erste Parameter einer MOV-Anweisung das Ziel also
1 | movf temp, portd |
2 | swapf temp |
3 | movf portd, temp |
Was macht 'bsf'? Anstelle von temp muss der Name eines Registers eingetragen werden. Lies dich mal durch den Befehlssatz des Controllers durch - da steht eigentlich alles drin. Alternativ solltest du mal ein Tutorial durcharbeiten. Ich kenne die PICs selbst gar nicht - die Frage sollte dir aber jeder PIC-Programmierer beantworten können. Für einen einzelnen Befehl macht es meist keinen Sinn den Inline-Assembler zu bemühen. Der Overhead oft größer, als eine reine C-Implementation.
Der Befehl swapf braucht insgesamt 2 Parameter denn nach der Quelle ( hier portd bzw. temp) muss noch das Ziel benannt werden. Da käme in Frage: 1, d.h. Ziel ist gleich Quelle oder 0 dann wird das Ergebnis in das wreg geschrieben. Für den o.g. Fall wäre also richtig swapf portd,1
Das hab ich schon probiert, weil ich mir den Befehl im Datasheet angesehen habe, aber dann bekomm ich den Error: error: unknown assembly identifier 'portd' (did you forget to put '_' in front of variable name)
Manchmal ist die Schreibweise entscheidend, vielleicht geht PORTD oder der Compiler hat eine eigene Ansicht darüber wie der Port D heissen soll.
habs jetzt danke!!! Der Befehl muss so aussehen: _ da ich damit ja einen Port anspreche. swapf _portd,1
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.