Forum: Compiler & IDEs Mplab 4.15 Error 152 Executable code and data must be defined in an appropriate section


von Rudi R. (microwitsch)


Lesenswert?

Folgenden Code habe ich aus einem Buch(es soll mir LEDS mit ca 60Hz am 
Ausgang ausgeben)Hat nur den Zweck alles so weit zu kriegen, das ich das 
alles verstehe und auch wirklich funktioniert.Es ist also ein Lehrbuch.
Hier mal der Assemblercode:

; TODO INSERT CONFIG CODE HERE USING CONFIG BITS GENERATOR
; PIC16F18877 Configuration Bit Settings

; Assembly source line config statements

#include "p16f18877.inc"

; CONFIG1
; __config 0xFFEE
 __CONFIG _CONFIG1, _FEXTOSC_ECM & _RSTOSC_HFINT1 & _CLKOUTEN_OFF & 
_CSWEN_ON & _FCMEN_ON
; CONFIG2
; __config 0xFFFF
 __CONFIG _CONFIG2, _MCLRE_ON & _PWRTE_OFF & _LPBOREN_OFF & _BOREN_ON & 
_BORV_LO & _ZCD_OFF & _PPS1WAY_ON & _STVREN_ON
; CONFIG3
; __config 0xFF9F
 __CONFIG _CONFIG3, _WDTCPS_WDTCPS_31 & _WDTE_OFF & _WDTCWS_WDTCWS_7 & 
_WDTCCS_SC
; CONFIG4
; __config 0xFFFF
 __CONFIG _CONFIG4, _WRT_OFF & _SCANE_available & _LVP_ON
; CONFIG5
; __config 0xFFFF
 __CONFIG _CONFIG5, _CP_OFF & _CPD_OFF

     LIST p=16f18877
#include <p16f18877.inc>

RES_VECT CODE 0x0000 ; processor reset vector
 GOTO START ; go to beginning of program
MAIN_PROG CODE ; let linker place main program

START
;Set Bank 0, we never know
 BANKSEL TRISA
 MOVLW B'00000000'
 MOVWF TRISA
 BANKSEL ANSELA
 MOVLW B'00000000'
 MOVWF ANSELA
 BANKSEL PORTA
 MOVLW B'10101010'
 MOVWF PORTA

     udata_shr

LoopC res 1

     udata

LoopUnneeded res 3

WORK
     MOVLW B'00000000'
     MOVWF PORTA
     NOP
     NOP
     MOVLW B'11111111'
     MOVWF LoopC
LOOPA
     NOP
     NOP
     NOP
     NOP
     NOP
     DECF LoopC, 1
BTFFS STATUS, Z
     GOTO LOOPA
     MOVLW B'11111111'
     MOVWF PORTA
     MOVLW B'11111111'
     MOVWF LoopC
LOOPB
     NOP
     NOP
     NOP
     NOP
     NOP
     DECF LoopC, 1
BTFFS STATUS, Z
     GOTO LOOPB
     GOTO WORK
 END

Den Fehler habe ich zu allen Einträgen im Work-Teil!??

von Volker S. (vloki)


Lesenswert?

In dem Buch werden Variablen irgendwo mitten im Code angelegt?
Hab ich je noch nie gesehen ;-)

Das Verursacht wohl auch den Fehler, weil alles danach als Daten 
interpretiert wird!

Schau dir mal ein paar Templates und Beispiele im MPLABX 
Installationsverzeichnis an.

von Rudi R. (microwitsch)


Lesenswert?

Ganz ehrlich...das Buch ist eigentlich unmöglich geschrieben...ich muss 
da immer hin und her springen und habe nun die einzelnen Elemente der 
Reihe nach zusammen gefügt und hoffentlich auch die Variable an der 
richtigen Stelle angelegt? War mir nicht eindeutig an welcher Stelle das 
passieren muss?

Also vor Work, weil Work ja damit arbeiten muss, dachte ich mir.

Oder Muss ich vorher noch so die Variable dotieren, damit sie dann 
bereit ist??

MOVLW B'11111111'
MOVWF LoopC

von Rudi R. (microwitsch)


Lesenswert?

Hallo Volker,

Du scheinst Recht zu haben, ich habe die Variablen jetzt gleich oben 
nach der Config gesetzt und habe nun nur noch 2 Fehlermeldungen zu den 
Status-Labels!
BTFFS STATUS, Z (Error 122.Illegal Opcode)??

Danke erstmal!...mal gucken was da jetzt noch ist?

     LIST p=16f18877
#include <p16f18877.inc>

      udata_shr

LoopC res 1

     udata

LoopUnneeded res 3

RES_VECT CODE 0x0000 ; processor reset vector
 GOTO START ; go to beginning of program
MAIN_PROG CODE ; let linker place main program

START
;Set Bank 0, we never know
 BANKSEL TRISA
 MOVLW B'00000000'
 MOVWF TRISA
 BANKSEL ANSELA
 MOVLW B'00000000'
 MOVWF ANSELA
 BANKSEL PORTA
 MOVLW B'10101010'
 MOVWF PORTA

WORK
     MOVLW B'00000000'
     MOVWF PORTA
     NOP
     NOP
     MOVLW B'11111111'
     MOVWF LoopC
LOOPA
     NOP
     NOP
     NOP
     NOP
     NOP
     DECF LoopC, 1
BTFFS STATUS, Z
     GOTO LOOPA
     MOVLW B'11111111'
     MOVWF PORTA
     MOVLW B'11111111'
     MOVWF LoopC
LOOPB
     NOP
     NOP
     NOP
     NOP
     NOP
     DECF LoopC, 1
BTFFS STATUS, Z
     GOTO LOOPB
     GOTO WORK
 END

von Rudi R. (microwitsch)


Lesenswert?

Ich habe den Fehler gefunden: Es muss BTFSS, statt BTFFS....toller 
Fehler!

Jetzt habe ich 54,5Hz am Ausgang...theoretisch könnte man damit einen 
230V Wechselrichter aufbauen, fällt mir gerade ein... nun ja..

Aber für Einsteiger die mit dem Buch "Elektronik gar nicht schwer - 
Mikrocontroller-Basics mit PIC" anfangen und ähnliche Fehler machen 
könnten meine Beiträge eine Hilfe sein!?

Gibts hier einen reinen Anfängerthread, wo sich Anfänger vorerst 
gegenseitig helfen?
Damit man Experten nicht gleich mit sowas kommen muss!? ;-)

Ich habe aber auch was nettes gefunden, was für Anfänger auch ganz gut 
sein 
wird:https://rn-wissen.de/wiki/index.php/PIC_Assembler#Vorlage_f.C3.BCr_MPASM

Fachbücher sind leider nicht immer so eindeutig wie man es gern hätte, 
habe ich feststellen müssen.

von Volker S. (vloki)


Angehängte Dateien:

Lesenswert?

Rudi R. schrieb:
> Ich habe aber auch was nettes gefunden, was für Anfänger auch ganz gut
> sein wird

Das <edit- der Code> ist leider auch schon ziemlich veraltet. 
Programmierstil aus der Zeit als noch nicht unbedingt ein Linker 
verwendet wurde <edit- und Programme mehr oder weniger aus einer 
Quelldatei erstellt wurden>. Man erkennt das an den Codewörtern (z.B. 
"ORG) für "absoluten" Programmierstil. Es werden auch nicht wirklich 
Variablen definiert und dafür Speicherplatz "reserviert", sondern es 
erfolgt lediglich eine Textersetzung (equ)

Wenn man in der IDE innerhalb des Projektes ein neues File anlegt und 
dabei "newpic_8b_general" auswählt, bekommt man automatisch ein 
Grundgerüst inklusive Kommentare geliefert, mitsamt einer schrittweisen 
Anleitung...

: Bearbeitet durch User
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.