Forum: Mikrocontroller und Digitale Elektronik Problem mit PIC18 unter XC8-Compiler


von Andy (Gast)


Lesenswert?

Hallo Forum,

Ich habe ein Problem mit meinem PIC18F26K20: Bis jetzt habe ich mit dem 
C18-Compiler gearbeitet. Dadurch, dass ich aber auf MPLAB X umgestiegen 
bin, steige ich auch gleich auf den XC8-Compiler um. Nun habe ich alles 
angepasst, nur eine Assembler-Anweisung will sich nicht anpassen lassen.

Unter dem C18-Compiler war dieses Konstrukt kein Problem:
1
_asm
2
3
...
4
5
movlw 0x55
6
movwf POSTDEC0, 0
7
movf  0x0,1,0
8
bz    -4
9
10
...
11
12
_endasm

Der XC8-Compiler meckert hier aber rum:
1
(908) exit status = 1
2
make[2]: *** [dist/default/production/Test.X.production.hex] Error 1
3
nbproject/Makefile-default.mk:119: recipe for target 'dist/default/production/Test.X.production.hex' failed
4
make[2]: Leaving directory 'C:/Users/aposch/Desktop/Test.X'
5
nbproject/Makefile-default.mk:78: recipe for target '.build-conf' failed
6
make[1]: Leaving directory 'C:/Users/aposch/Desktop/Test.X'
7
nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed
8
make[1]: *** [.build-conf] Error 2
9
make: *** [.build-impl] Error 2
10
11
BUILD FAILED (exit value 2, total time: 20s)

Lasse ich jedoch die Zeile
1
bz    -4
weg, dann kompiliert er einwandfrei. Jedoch ist die gewünschte Funktion 
dann nicht erfüllt.

Was kann an dem "branch if zero" nicht stimmen, und warum nur beim XC8??
Kann mir da wer weiterhelfen?

Danke!!

mfg
Andy

von Silvio (Gast)


Lesenswert?

Hallo

wenn ich das richtig sehe ist das nicht die komplette Ausgabe der 
Meldungen. Gib mal den kompletten Inhalt des Output-Fensters nach einem 
Clean and Build preis. Ich glaube deine erste Zeile (exit status = 1) 
deutet darauf hin das da schon was nicht mehr stimmt.

Silvio

von Andy (Gast)


Lesenswert?

Das hier ist die komplette Ausgabe nach einem Clean & Build:
1
CLEAN SUCCESSFUL (total time: 150ms)
2
make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
3
make[1]: Entering directory 'C:/Users/aposch/Desktop/Test.X'
4
make  -f nbproject/Makefile-default.mk dist/default/production/Test.X.production.hex
5
make[2]: Entering directory 'C:/Users/aposch/Desktop/Test.X'
6
"C:\Program Files (x86)\Microchip\xc8\v1.33\bin\xc8.exe" --pass1  --chip=18F26K20 -Q -G  --double=24 --float=24 --emi=wordwrite --opt=default,+asm,-asmfile,+speed,-space,-debug --addrqual=ignore --mode=pro -P -N255 --warn=0 --asmlist --summary=default,-psect,-class,+mem,-hex,-file --output=default,-inhx032 --runtime=default,+clear,+init,-keep,-no_startup,-download,+config,+clib,+plib --output=-mcof,+elf:multilocs --stack=compiled:auto:auto:auto "--errformat=%f:%l: error: (%n) %s" "--warnformat=%f:%l: warning: (%n) %s" "--msgformat=%f:%l: advisory: (%n) %s"    -obuild/default/production/main.p1  main.c 
7
"C:\Program Files (x86)\Microchip\xc8\v1.33\bin\xc8.exe"  --chip=18F26K20 -G -mdist/default/production/Test.X.production.map  --double=24 --float=24 --emi=wordwrite --opt=default,+asm,-asmfile,+speed,-space,-debug --addrqual=ignore --mode=pro -P -N255 --warn=0 --asmlist --summary=default,-psect,-class,+mem,-hex,-file --output=default,-inhx032 --runtime=default,+clear,+init,-keep,-no_startup,-download,+config,+clib,+plib --output=-mcof,+elf:multilocs --stack=compiled:auto:auto:auto "--errformat=%f:%l: error: (%n) %s" "--warnformat=%f:%l: warning: (%n) %s" "--msgformat=%f:%l: advisory: (%n) %s"     -odist/default/production/Test.X.production.elf  build/default/production/main.p1     
8
Microchip MPLAB XC8 C Compiler (PRO Mode) V1.33
9
Part Support Version: 1.33 (A)
10
Copyright (C) 2014 Microchip Technology Inc.
11
License type: Node Configuration
12
13
nbproject/Makefile-default.mk:119: recipe for target 'dist/default/production/Test.X.production.hex' failed
14
make[2]: Leaving directory 'C:/Users/aposch/Desktop/Test.X'
15
nbproject/Makefile-default.mk:78: recipe for target '.build-conf' failed
16
make[1]: Leaving directory 'C:/Users/aposch/Desktop/Test.X'
17
nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed
18
(908) exit status = 1
19
make[2]: *** [dist/default/production/Test.X.production.hex] Error 1
20
make[1]: *** [.build-conf] Error 2
21
make: *** [.build-impl] Error 2
22
23
BUILD FAILED (exit value 2, total time: 21s)

Danke für deine Hilfe!

mfg

von test (Gast)


Lesenswert?

Hi,

ich gehe mal davon aus, du willst 4 Adressen rückwärts springen.
Probier mal "bz $-4".
Das Dollarzeichen ist die aktuelle Adresse.

von Volker S. (vloki)


Lesenswert?

Einfach den ganzen $+-x Mist weglassen und
ein Label an die entsprechende Stelle setzen ?

von Andy (Gast)


Lesenswert?

SUPER!!!

Danke, das wars!!! ;) ;)

lg
Andy

von Silvio (Gast)


Lesenswert?

Also der Compiler scheint keine Probleme zu haben, da sonst gar nicht 
folgende Zeilen erscheinen:

Microchip MPLAB XC8 C Compiler (PRO Mode) V1.33
Part Support Version: 1.33 (A)
Copyright (C) 2014 Microchip Technology Inc.
License type: Node Configuration

Wenns dann weiter gehen soll zum Linker kommt folgende Meldung:

nbproject/Makefile-default.mk:119: recipe for target 
'dist/default/production/Test.X.production.hex' failed

Diese scheint das Problem zu zeigen.



Mach mal ein "Clean & Build" ohne "bz = -4".
Dann schau in das Verzeichnis ...\Test.X\dist\default\production. Dort 
sollte die datei "Test.X.production.hex" zu finden sein.

Nun "bz = -4" wieder rein und nach ein paar Minuten (um Änderungen an 
der Erstellzeit der Datei zu erkennen) über "Run/Build Project" (kein 
Clean and Build!) nen neuen Versuch starten. Wenn jetzt die *.hex-Datei 
erneuert wird (erkennbar an der Uhrzeit) sollte der Compiler erfolgreich 
sein. Auch mal die anderen Dateien in diesem Ordner beobachten welche 
erneuert werden.

von Andy (Gast)


Lesenswert?

Gleich ein Label setzen geht natürlich auch! Danke für den Tip!!

von Silvio (Gast)


Lesenswert?

Ok, sehe grad hat sich erledigt. War ich wohl doch auf dem Holzweg.

von Andy (Gast)


Lesenswert?

Silvio schrieb:
> Ok, sehe grad hat sich erledigt. War ich wohl doch auf dem Holzweg.

Trotzdem danke für deine Mühe! :)

von Andy (Gast)


Lesenswert?

Hallo,

Eine Frage hätte ich noch:

beim C18-Compiler war folgende Anweisung kein Problem:
1
clrf 0x0, 0

Der XC8-Compiler meckert hier (Syntax error). Lasse ich ", 0" weg, dann 
funktionierts. (mit 0 oder 1 wählt man die ACCESS-Bank bzw. die 
GPR-Bank).

Weiß jemand, warum der XC8 diese Angaben nicht mag??

Danke!


mfg

von Chris B. (dekatz)


Lesenswert?

Steht alles im "MPLAB_XC8_C_Compiler_User_Guide.pdf"
Zitat:
The assembler also uses the destination select operand “,b” to indicate 
that PIC18
instructions should use the bank select register (BSR) when accessing 
the specified
file register address. The “,c” operand indicates that the address is in 
the common
memory, which is known as the access bank on PIC18 devices. 
Alternatively, an oper-
and can be preceded by the characters “c:” to indicate that the address 
resides in com-
mon memory. These operands and prefix affect the RAM access bit in the 
instruction.

von Andy (Gast)


Lesenswert?

Ja, aber gerade dieses select funktioniert ja nicht... Wenn ich den 
Selektor angebe, kommt ein Error...

von Steffen R. (steffen_rose)


Lesenswert?

Du gibst aber 0 and und nicht b oder c, wie von Chris zitiert?

von Andy (Gast)


Lesenswert?

Natürlich... Man kann 0 oder 1 angeben... Funktioniert beides nicht...

von Steffen R. (steffen_rose)


Lesenswert?

Mag sein, dass es nicht geht. Deine Antwort läßt aber darauf schließen, 
dass du es nicht probiert hast.

Eben nicht 0 oder 1, sondern b oder c.

ww1.microchip.com/downloads/en/DeviceDoc/50002053E.pdf
Kapitel 6.2.1.1

von Andy (Gast)


Lesenswert?

Das wars...

Danke Jungs... Hab das falsch verstanden. Ich dachte b und c wären 
Platzhalter. Danke Chris für den Auszug aus dem Datasheet und danke 
Steffen für den Hinweis. Es funktioniert nun einwandfrei!!

Danke!!

mfg
Andy

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.