Thank you for the information!
Making the configuration words static did seem to fix that.
I will fix it everywhere that I have it wrong.
I do like making the change to be like elsewhere though.
I was not so successful with _INTCONbits. Maybe I did not do it correctly?
Adding the extern inside disableIntr like this:
#define disableIntr() \
__asm extern _INTCONbits __endasm; \
__asm __endasm; \
__asm bcf _INTCONbits,7 ; disableIntr() __endasm; \
__asm btfsc _INTCONbits,7 __endasm; \
__asm goto $-2 __endasm; \
__asm __endasm
#define enableIntr() \
__asm __endasm; \
__asm bsf _INTCONbits,7 ; enableIntr() __endasm; \
__asm __endasm
Or like this
#define disableIntr() \
__asm; \
extern _INTCONbits; \
bcf _INTCONbits,7; \
btfsc _INTCONbits,7; \
goto $-2; \
__endasm;
Gave this error
main.asm:785:Error[181] Duplicate label or redefining symbol that cannot be
redefined: "_INTCONbits"
In both trunk and the pic14 branch
I also tried adding
__asm extern _INTCONbits __endasm
prior to main() or as the first line in main(). Both failed.
Manually adding extern _INTCONbit into main.asm in the correct
section did work but would be rather a pain to automate.
I can clearly implement this specific task with
do GIE = 0; while (GIE);
but it adds an additional BANKSEL. Since INTCON is on every page,
I would rather not. Also, this is likely not the only code which
causes this difficulty.
- Don
On Jul 24, Gonzalo Pérez de Olaguer Córdoba propounded certain bytes, to wit:
> Subject: Re: [Sdcc-user] pic14 users: Please test the pic14 branch!
>
> Hi, Philipp and Don.
>
> The error with the configuration words can be avoided by declaring
> them 'static', as shown (but not explicitly said) in the sdcc manual.
>
> And to make the pic14 branch backwards compatible with the trunk with
> respect to this issue, a change in src/pic14/glue.c should be made:
>
> - The pieces of code that handle the configuration words can be identified
> looking for a call to pic14_assignConfigWordValue.
>
> - In trunk it appears in pic14_constructAbsMap and in emitSymbolSet.
>
> - In the pic14 branch only appears in pic14_constructAbsMap. It should be
> removed from this function and be moved to pic14_emitRegularMap.
>
> I think the right way to go here should be to consider obsolete and discourage
> this way to define values for the configuration words and implement it
> through pragmas (as pic16 already does), and extend it to also support
> ID locations.
>
> With respect to the _INTCONbits errors, this is the same situation as
> we had with _main in idata.c: the pic14 branch doesn't declare symbols
> unused in C code (the trunk does it), and _INTCONbits is only used inside
> inlined
> assembly code, where sdcc doesn't detect symbol usage.
>
> Adding '__asm extern _INTCONbits __endasm;' somewhere before (or inside)
> disableIntr() will do.
_______________________________________________
Sdcc-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sdcc-user