PDA

View Full Version : Error[126] c:\PBP\PBPPIC14.LIB : Argument out of range (2054 not between 0 and 2047)



zipwize
- 5th November 2010, 22:39
I'm using PBP 2.60A, with MPLAB v.8.53, MPASM v5.36, on a Window 7 machine. This works fine for many programs. But then I have a larger program (Lines Assembled 11421)

I'm getting the following:

ERROR: Unable to execute mpasmwin.Message[306] C:\PBP\PBPPIC14.LIB 661 : Crossing page boundary -- ensure page bits are set.
Error[126] C:\PBP\PBPPIC14.LIB 743 : Argument out of range (2054 not between 0 and 2047)
Message[306] C:\PBP\PBPPIC14.LIB 743 : Crossing page boundary -- ensure page bits are set.
Halting build on first failure as requested.
BUILD FAILED: Fri Nov 05 18:02:20 2010

Am I out of memory or something?

zipwize
- 6th November 2010, 00:06
Yep, sorry for the post. I was out of memory. I have never seen the out of memory condition with this set up. It's nice to know what it looks like.

Regards.

ShoKre
- 26th December 2012, 04:08
Hello,
I'm using PBP 2.60C, with MPLAB v.8.84, MPASM is from mplab installer, on a Window 7 machine

I'm using pic18f4685 which is pretty large on resources, but after more than 1000 lines of code seems that there is no more space ?!?

if i erase few line i can compile again, so i don't see errors in code, because same lcdout "xxxxxxxxxxx" line if i use up then few time i get this error

6232 byte used, is it possible that I've spend all flash ??, I think I couldn't because PIC18F4685 has 96K (49152 words 3328 ram 1024 ee)

6782

what else could be wrong ? all .inc .bas are pointed to right processor...... ideas

HenrikOlsson
- 26th December 2012, 09:16
Post the lines of code that you delete in order to make it compile.

ShoKre
- 27th December 2012, 00:03
..I'm paste same line xxxxxxxxxxxxx n time, 3 time (until this argument is smaller than 1024) works, and after wont
any line i tried lcdout "test test test" or any other.... same result after this 6xxx bytes


Free_cycle: ' when idle

if !cntupflag and !cntdownflag then

if !IdleCnt then
ReadCODE (PreAddrTable + Idleoffset),Idlefrom
ReadCODE (PreAddrTable + Idleoffset + 1),Idleto
lcdout com,l1
for a=Idlefrom to Idlefrom + 3
ReadCODE (PressetTable + a),IdleParams[a]
b=IdleParams[a]
lcdout # a,"_",# b,"," ' copy of this line cause agument out of range error126 but same line on another place works, or if i erase something else (to make space) this works too
next a
endif
offset = Idlefrom + 4 + (IdleCnt*6) 'my coments
ReadCODE (PressetTable + Offset),bd
ReadCODE (PressetTable + Offset+1),bc
ReadCODE (PressetTable + Offset+2),bb
ReadCODE (PressetTable + Offset+3),ba
ReadCODE (PressetTable + Offset+4),ch[32]
ReadCODE (PressetTable + Offset+5),ch[33]

'hserout ["idle_from=",dec idlefrom," to=",dec idleto," offs=",dec offset,"|cnt=",dec idlecnt,13,10]
'high led3
pause 4*IdleParams[3]
'low led3
IF idleParams[0] > 50 THEN
RISE = 5
SWITCH = 1
ELSE
RISE = idleParams[0]
SWITCH = 0
ENDIF

mac file at 560 line (blued) is it normal that this piece of macro is in asm, aqua color ?

6784


whole macro code if means anithing



NOLIST
; PICBASIC PRO(TM) Compiler 2.60C, (c) 1998, 2011 microEngineering Labs, Inc. All Rights Reserved.

LABEL?L macro Label
RST?RP
ifdef PM_USED
LALL
Label
XALL
else
Label
endif
endm

AIN?BBB macro Bin, Bout, Bndx
MOVE?BA Bndx
addlw low (Bout)
movwf FSR0L
movlw (Bout) >> 8
clrf FSR0H
addwfc FSR0H, F
MOVE?BB Bin, INDF0
endm

AIN?BBW macro Bin, Bout, Wndx
MOVE?WA Wndx
addlw low (Bout)
movwf FSR0L
movlw (Bout) >> 8
addwfc (Wndx) + 1, W
movwf FSR0H
MOVE?BB Bin, INDF0
endm

AIN?CBB macro Cin, Bout, Bndx
MOVE?BA Bndx
addlw low (Bout)
movwf FSR0L
movlw (Bout) >> 8
clrf FSR0H
addwfc FSR0H, F
MOVE?CB Cin, INDF0
endm

AIN?WBB macro Win, Bout, Bndx
MOVE?BA Bndx
addlw low (Bout)
movwf FSR0L
movlw (Bout) >> 8
clrf FSR0H
addwfc FSR0H, F
MOVE?WB Win, INDF0
endm

AOUT?BBB macro Bin, Bndx, Bout
MOVE?BA Bndx
addlw low (Bin)
movwf FSR0L
movlw (Bin) >> 8
clrf FSR0H
addwfc FSR0H, F
MOVE?BB INDF0, Bout
endm

ADD?BBB macro Bin1, Bin2, Bout
if ((Bout) == (Bin1))
MOVE?BA Bin2
CHK?RP Bin1
addwf Bin1, F
else
if ((Bout) == (Bin2))
MOVE?BA Bin1
CHK?RP Bin2
addwf Bin2, F
else
MOVE?BA Bin1
CHK?RP Bin2
addwf Bin2, W
MOVE?AB Bout
endif
endif
endm

ADD?BBW macro Bin1, Bin2, Wout
MOVE?BA Bin1
CHK?RP Bin2
addwf Bin2, W
MOVE?AW Wout
rlcf (Wout) + 1, F
endm

ADD?BCB macro Bin, Cin, Bout
if ((Bout) == (Bin))
if ((Cin) == 1)
CHK?RP Bout
incf Bout, F
else
movlw Cin
CHK?RP Bin
addwf Bin, F
endif
else
if ((Cin) == 1)
CHK?RP Bin
incf Bin, W
MOVE?AB Bout
else
movlw Cin
CHK?RP Bin
addwf Bin, W
MOVE?AB Bout
endif
endif
endm

ADD?BCW macro Bin, Cin, Wout
if ((Cin) == 1)
CHK?RP Bin
incf Bin, W
else
movlw low (Cin)
CHK?RP Bin
addwf Bin, W
endif
MOVE?AW Wout
if (((Cin) >> 8) == 0)
rlcf (Wout) + 1, F
else
movlw (Cin) >> 8
addwfc (Wout) + 1, F
endif
endm

ADD?CBW macro Cin, Bin, Wout
if ((Cin) == 1)
CHK?RP Bin
incf Bin, W
else
movlw low (Cin)
CHK?RP Bin
addwf Bin, W
endif
MOVE?AW Wout
if (((Cin) >> 8) == 0)
rlcf (Wout) + 1, F
else
movlw (Cin) >> 8
addwfc (Wout) + 1, F
endif
endm

ADD?CWW macro Cin, Win, Wout
if ((Wout) == (Win))
CHK?RP Wout
if ((Cin) == 1)
incf Wout, F
else
movlw low (Cin)
addwf Wout, F
endif
movlw (Cin) >> 8
addwfc (Wout) + 1, F
else
CHK?RP Win
if ((Cin) == 1)
incf Win, W
else
movlw low (Cin)
addwf Win, W
endif
MOVE?AB Wout
movlw (Cin) >> 8
CHK?RP Win
addwfc (Win) + 1, W
MOVE?AB (Wout) + 1
endif
endm

ADD?WCW macro Win, Cin, Wout
if ((Wout) == (Win))
CHK?RP Wout
if ((Cin) == 1)
incf Wout, F
else
movlw low (Cin)
addwf Wout, F
endif
movlw (Cin) >> 8
addwfc (Wout) + 1, F
else
CHK?RP Win
if ((Cin) == 1)
incf Win, W
else
movlw low (Cin)
addwf Win, W
endif
MOVE?AB Wout
movlw (Cin) >> 8
CHK?RP Win
addwfc (Win) + 1, W
MOVE?AB (Wout) + 1
endif
endm

ADD?WWW macro Win1, Win2, Wout
if ((Wout) == (Win1))
MOVE?BA Win2
CHK?RP Wout
addwf Wout, F
MOVE?BA (Win2) + 1
CHK?RP Wout
addwfc (Wout) + 1, F
else
if ((Wout) == (Win2))
MOVE?BA Win1
CHK?RP Wout
addwf Wout, F
MOVE?BA (Win1) + 1
CHK?RP Wout
addwfc (Wout) + 1, F
else
MOVE?BA Win1
CHK?RP Win2
addwf Win2, W
MOVE?AB Wout
MOVE?BA (Win1) + 1
CHK?RP Win2
addwfc (Win2) + 1, W
MOVE?AB (Wout) + 1
endif
endif
endm

DIV?WCB macro Win, Cin, Bout
if ((Cin) == 2)
CHK?RP Win
rrcf (Win) + 1, W
rrcf Win, W
MOVE?AB Bout
else
MOVE?WW Win, R0
MOVE?CW Cin, R1
L?CALL DIV
MOVE?AB Bout
endif
endm
DIV_USED = 1

MUL?BCW macro Bin, Cin, Wout
MOVE?BW Bin, R3
MOVE?CW Cin, R1
L?CALL MUL
MOVE?AWW R2, Wout
endm
MUL_USED = 1

MUL?CBW macro Cin, Bin, Wout
MOVE?CW Cin, R3
MOVE?BW Bin, R1
L?CALL MUL
MOVE?AWW R2, Wout
endm
MUL_USED = 1

SUB?BBW macro Bin1, Bin2, Wout
MOVE?BA Bin2
CHK?RP Bin1
subwf Bin1, W
MOVE?AW Wout
btfss STATUS, C
decf (Wout) + 1, F
endm

SUB?BCB macro Bin, Cin, Bout
if ((Bout) == (Bin))
if ((Cin) == 1)
CHK?RP Bout
decf Bout, F
else
movlw Cin
CHK?RP Bout
subwf Bout, F
endif
else
if ((Cin) == 1)
CHK?RP Bin
decf Bin, W
else
movlw Cin
CHK?RP Bin
subwf Bin, W
endif
MOVE?AB Bout
endif
endm

AND?BCB macro Bin, Cin, Bout
if (Bout == Bin)
movlw Cin
CHK?RP Bin
andwf Bin, F
else
movlw Cin
CHK?RP Bin
andwf Bin, W
MOVE?AB Bout
endif
endm

AND?BWW macro Bin, Win, Wout
if (Wout == Win)
MOVE?BA Bin
CHK?RP Wout
andwf Wout, F
clrf Wout + 1
else
MOVE?BA Bin
CHK?RP Win
andwf Win, W
MOVE?AW Wout
endif
endm

LAND?BBW macro Bin1, Bin2, Wout
MOVE?BB Bin1, R0
MOVE?BA Bin2
L?CALL LAND
MOVE?AB Wout
movwf Wout + 1
endm
LAND_USED = 1

LAND?TBW macro Regin, Bitin, Bin, Wout
MOVE?TB Regin, Bitin, R0
MOVE?BA Bin
L?CALL LAND
MOVE?AB Wout
movwf Wout + 1
endm
LAND_USED = 1

LNOT?TB macro Regin, Bitin, Bout
CHK?RP Regin
clrf WREG
btfss Regin, Bitin
movlw -1
MOVE?AB Bout
endm

CMPT?BL macro Bin, Label
CLRWDT?
MOVE?BA Bin
BIT?GOTO 0, STATUS, Z, Label
endm

CMPT?TL macro Regin, Bitin, Label
CLRWDT?
BIT?GOTO 1, Regin, Bitin, Label
endm

CMPF?TL macro Regin, Bitin, Label
CLRWDT?
BIT?GOTO 0, Regin, Bitin, Label
endm

CMPF?WL macro Win, Label
CLRWDT?
MOVE?BA Win
iorwf (Win) + 1, W
BIT?GOTO 1, STATUS, Z, Label
endm

CMPGE?BBL macro Bin1, Bin2, Label
CLRWDT?
MOVE?BA Bin2
CHK?RP Bin1
subwf Bin1, W
BIT?GOTO 1, STATUS, C, Label
endm

CMPGT?BCL macro Bin, Cin, Label
if ((Cin) < 0)
L?GOTO Label
else
if ((Cin) < 0ffh)
CLRWDT?
MOVE?CA (Cin) + 1
CHK?RP Bin
subwf Bin, W
BIT?GOTO 1, STATUS, C, Label
endif
endif
endm

CMPGT?BWL macro Bin, Win, Label
MOVE?BW Bin, R0
MOVE?WWA Win, R1
L?CALL CMPGT
BIT?GOTO 0, STATUS, Z, Label
endm
CMPGT_USED = 1

CMPLE?BBL macro Bin1, Bin2, Label
CLRWDT?
MOVE?BA Bin1
CHK?RP Bin2
subwf Bin2, W
BIT?GOTO 1, STATUS, C, Label
endm

CMPLE?BCL macro Bin, Cin, Label
if ((Cin) >= 0ffh)
L?GOTO Label
else
if ((Cin) >= 0)
CLRWDT?
MOVE?CA (Cin) + 1
CHK?RP Bin
subwf Bin, W
BIT?GOTO 0, STATUS, C, Label
endif
endif
endm

CMPLT?BBL macro Bin1, Bin2, Label
CLRWDT?
MOVE?BA Bin2
CHK?RP Bin1
subwf Bin1, W
BIT?GOTO 0, STATUS, C, Label
endm

CMPLT?BCL macro Bin, Cin, Label
if ((Cin) >= 100h)
L?GOTO Label
else
if ((Cin) > 0)
CLRWDT?
MOVE?CA Cin
CHK?RP Bin
subwf Bin, W
BIT?GOTO 0, STATUS, C, Label
endif
endif
endm

CMPNE?BCL macro Bin, Cin, Label
if (((Cin) > -100h) & ((Cin) < 100h))
CLRWDT?
MOVE?BA Bin
sublw Cin
BIT?GOTO 0, STATUS, Z, Label
else
L?GOTO Label
endif
endm

CMPNE?TCL macro Regin, Bitin, Cin, Label
if ((Cin) == 0)
CLRWDT?
BIT?GOTO 1, Regin, Bitin, Label
else
if ((Cin) == 1)
CLRWDT?
BIT?GOTO 0, Regin, Bitin, Label
else
L?GOTO Label
endif
endif
endm

SHIFTL?BCB macro Bin, Cin, Bout
if ((Cin) == 1)
bcf STATUS, C
if ((Bout) == (Bin))
CHK?RP Bout
rlcf Bout, F
else
CHK?RP Bin
rlcf Bin, W
MOVE?AB Bout
endif
else
MOVE?BB Bin, R0
movlw Cin
L?CALL SHIFTL
MOVE?AB Bout
endif
endm
SHIFTL_USED = 1

SHIFTL?CBW macro Cin, Bin, Wout
MOVE?CW Cin, R0
MOVE?BA Bin
L?CALL SHIFTL
MOVE?AWW R0, Wout
endm
SHIFTL_USED = 1

SHIFTL?WCW macro Win, Cin, Wout
if ((Cin) == 1)
bcf STATUS, C
if ((Wout) == (Win))
CHK?RP Wout
rlcf Wout, F
rlcf Wout + 1, F
else
CHK?RP Win
rlcf Win, W
MOVE?AB Wout
CHK?RP Win
rlcf Win + 1, W
MOVE?AB Wout + 1
endif
else
MOVE?WW Win, R0
movlw Cin
L?CALL SHIFTL
MOVE?AWW R0, Wout
endif
endm
SHIFTL_USED = 1

SHIFTR?CBW macro Cin, Bin, Wout
MOVE?CW Cin, R0
MOVE?BA Bin
L?CALL SHIFTR
MOVE?AWW R0, Wout
endm
SHIFTR_USED = 1

ASM? macro
RST?RP
endm

BRANCH?BCL macro Bin, Cin, Label
local jmptbl
MOVE?BA Bin
movwf R0
sublw (Cin) - 1
BIT?GOTO 0, STATUS, C, Label
clrf PCLATH
clrf PCLATU
rlcf R0, F
rlcf PCLATH, F
movlw low (jmptbl)
addwf R0, F
movlw high (jmptbl)
addwfc PCLATH, F
movlw upper (jmptbl)
addwfc PCLATU, F
movf R0, W
movwf PCL
jmptbl
endm

BRGOTO?L macro Label
bra Label
endm

CLEAR? macro
local loop
ifdef USE_LFSR
lfsr 0, RAM_END
else
MOVE?CW RAM_END, FSR0L
endif
loop clrf POSTDEC0
movf FSR0L, W
iorwf FSR0H, W
bnz loop
clrf INDF0
endm
CLEAR_USED = 1

DDISABLE? macro
endm

DENABLE? macro
endm

END? macro
local loop
loop sleep
L?GOTO loop
endm

ENDASM? macro
endm

GOSUB?L macro Label
local dlabel
ifdef DEBUG_STACK
CHK?RP DEBUG_STACK
ifdef DEBUG_STACK_ADDR
bcf STATUS, C
rlcf DEBUG_STACK, W
addlw DEBUG_STACK_ADDR
movwf FSR0L
clrf FSR0H
movlw low (dlabel)
movwf POSTINC0
movlw high (dlabel)
movwf INDF0
endif
incf DEBUG_STACK, F
endif
L?CALL Label
dlabel
endm

GOTO?L macro Label
L?GOTO Label
endm

HIGH?T macro Regin, Bitin
MOVE?CT 1, Regin, Bitin
MOVE?CT 0, ((Regin) + 12h), Bitin
endm

LCDOUT?C macro Cin
movlw Cin
L?CALL LCDOUT
endm
LCDOUT_USED = 1

LCDOUTD?B macro Bin
MOVE?BA Bin
L?CALL LCDOUTDEC
endm
LCDOUTDEC_USED = 1

LCDOUTCOUNT?C macro Cin
MOVE?CB Cin, R4 + 1
endm

LCDOUTNUM?B macro Bin
MOVE?BW Bin, R2
endm

LCDOUTBIN? macro
MOVE?CW LCDOUTJ, R8
L?CALL SEROUT2BIN
endm
LCDOUTJ_USED = 1
SEROUT2BIN_USED = 1

LCDOUTDEC? macro
MOVE?CW LCDOUTJ, R8
L?CALL SEROUT2DEC
endm
LCDOUTJ_USED = 1
SEROUT2DEC_USED = 1

LOW?T macro Regin, Bitin
MOVE?CT 0, Regin, Bitin
MOVE?CT 0, ((Regin) + 12h), Bitin
endm

NEXT?BCL macro Bin, Cin, Label
if ((Cin) == 1)
CHK?RP Bin
incf Bin, F
else
movlw Cin
CHK?RP Bin
addwf Bin, F
endif
if ((Cin) <= 255)
BIT?GOTO 0, STATUS, C, Label
endif
endm

PAUSE?C macro Cin
if (((Cin) >> 8) == 0)
MOVE?CA Cin
L?CALL PAUSE
else
MOVE?CB (Cin) >> 8, R1 + 1
MOVE?CA low (Cin)
L?CALL PAUSEL
endif
endm
PAUSE_USED = 1

PAUSE?W macro Win
MOVE?WWA Win, R1
L?CALL PAUSEL
endm
PAUSE_USED = 1

PAUSEUS?C macro Cin
if (((Cin) >> 8) == 0)
movlw Cin
L?CALL PAUSEUS
else
MOVE?CB (Cin) >> 8, R0 + 1
MOVE?CA low (Cin)
L?CALL PAUSEUSL
endif
endm
PAUSEUS_USED = 1

READCODE?WB macro Win, Bout
MOVE?WW Win, TBLPTRL
L?CALL READCODE
MOVE?AB Bout
endm
READCODE_USED = 1

READCODE?WW macro Win, Wout
MOVE?WW Win, TBLPTRL
L?CALL READCODE
MOVE?AB Wout
MOVE?BB TABLAT, Wout + 1
endm
READCODEW_USED = 1

RETURN? macro
ifdef DEBUG_STACK
CHK?RP DEBUG_STACK
decf DEBUG_STACK, F
endif
RST?RP
return
endm

TOGGLE?T macro Regin, Bitin
BIT?FLIP Regin, Bitin
MOVE?CT 0, ((Regin) + 12h), Bitin
endm


LIST

ShoKre
- 27th December 2012, 07:43
I have messing around this macro and line to which points this error126 (560)
and it shows on
BRANCH?BCL macro Bin, Cin, Label
local jmptbl
MOVE?BA Bin
movwf R0
sublw (Cin) - 1
BIT?GOTO 0, STATUS, C, Label

branch ?? .... so i was remarked branch line and error126 has disappear
ok I must use select case-goto instead, but now i tried putting
dummy 200 lines of
lcdout "test test test"
lcdout "test test test"
lcdout "test test test"
which increased hex for 3 times, but compiles correctly,
so obvious there is some bug with branch keyword after code grows.....
something like jump address can't be bigger then xxxx word....
but i don't know much about macros and internals, so I'm happy to bound this bug :)

pedja089
- 27th December 2012, 08:55
It's not a bug, it's a feature :)
From manual:
Label must be in the same code page as the BRANCH instruction.
If you want to go out of page you must use BRANCHL.
But its twice bigger than BRANCH.

ShoKre
- 27th December 2012, 21:42
yes, tried with branchl works like a charm....
it's really overkill feature, night killer, but ok,
da nas dvojca moramo do ovamo poteč da riješimo bubu :P
so, error126 explicitly means that you are using branch out of page ?
maybe somewhere exist kind of RFM for errors ? this could save time too...

thank you for help :)