From: Néstor <nes...@gm...> - 2009-04-10 19:45:05
|
Thank you, your help is *very* appreciated. I'm going to analyze it back at work on Tuesday. This email comes with a lot of information. I think you're right and all the problems arise with the old gputils that comes with Debian Etch x86 (that's what I'm using). I'm surely telling you, Raphael. On Fri, Apr 10, 2009 at 7:59 PM, Raphael Neider <rn...@we...> wrote: > Dear Nestor, > >> I'm continuously running into trouble with my application since I'm >> using interrupts. The error that Raphael is trying (I hope) to debug >> is still there, although it dissappears apparently randomly when >> changing some code. BTW, I have corrected the error where I have >> misused 'extern' label, so it caused a lot of confusion to the >> compiler. Even then, the error I sent before (Error [115] Duplicate >> label or redefining symbol that cannot be redefined.) still happens >> sometimes. I have not been able to see the logic that *might* be >> behind it. But now, I get a new, completely different, error. > > I have not yet succeeded in reproducing this Error [115] at all. > I am also still waiting for answers to the questions posed in my last reply > in the other thread: > > <cite> > I tried on my IA-32 box running Ubuntu 8.10; what do you use? I'm running > out of ideas ... > > You could try upgrading gputils to the latest release (0.13.7, the > assembler is complaining ...), if that does not help, you could update > your SDCC to 2.9.0 an try again. Besides that, I do not know. Could you > post the temete1.asm file for manual inspection? > </cite> > > OK, you upgraded sdcc, what gputils do you use? > Are you compiling on an IA-32 machine or something less common (PowerPC, > Sparc, AMD64)? > I really need a failing .asm output (ideally together with the source, > compiler switches, compiler version, ..., but the .asm output alone might > help already) to get any further. Better yet, compile the failing source > with the additional switch --debug-xtra passed to sdcc; this will litter the > .asm file with debug information I can use to track down the problem. > >> Now I'm using official SDCC 2.9.0. The application hangs frequently, >> but only when the interrupt is active and the countdown is working. >> >> I am now using options '--stack-auto --int-long-reent' as recommended >> by the Manual, here: >> >> http://sdcc.sourceforge.net/doc/sdccman.html/node69.html#SECTION00491400000000000000 > > --stack-auto is not supported by the pic ports and even generates > malfunctioning code. Please refrain from using it (I will try to see if I > can abort compilations using the switch early). --int-long-reent does not do > anything when targetting pics (as far as I know), so using is in vain. > > I attached a Makefile that allows me to modify paths and flags more easily > than yours without introducing any dependency analysis or fancy make stuff. > Please use it (or something similar with configurable tool paths and flags) > to help me in future requests. > Using the attached Makefile, the project compiles on my box without errors, > make -s only prints > > temete2.c:156: warning 126: unreachable code > temete3.c:21: warning 85: in function getValueMesoestetic unreferenced > function argument : 'value' > temete3.c:21: warning 85: in function getValueMesoestetic unreferenced > function argument : 'pos' > temete3.c:278: warning 85: in function getValueClock unreferenced function > argument : 'value' > temete3.c:278: warning 85: in function getValueClock unreferenced function > argument : 'pos' > message: using default linker script > "/home/neider/local/share/gputils/lkr/16f877.lkr" > > after the output of your icon generator skript. > >> I have taken a look and put some __critical and volatile tags in some >> (I hope proper) places to protect functions and variables, but I get >> the following error: > > __critical is also unimplemented (does nothing at all). You can use a macro > to achieve a similar effect (tested on PIC16 only): > > #define CRITICAL(CODE) do { \ > static unsigned char __sdcc_iflags; \ > __sdcc_iflags = (INTCON & 0xC0); \ > INTCON &= ~0xC0; \ > do { CODE; } while (0); \ > INTCON |= __sdcc_iflags; \ > } while(0) > > Use it as follows: > > unsigned char > atomic_inc(__data unsigned char *val) { > unsigned char res; > CRITICAL(res = ++(*val)); > return (res); > } > > unsigned char > atomic_dec(__data unsigned char *val) { > unsigned char res; > CRITICAL(res = --(*val)); > return (res); > } > > For the record: Even with --stack-auto and --int-long-reent in place, my > sdcc does not error out as yours does, I get > > /home/neider/private/git/build/bin/sdcc -mpic14 -p16f877 > -I/home/neider/private/git/sdcc/device/include/pic --stack-auto > --int-long-reent --nooverlay -I/usr/local/share/sdcc/include/pic/ > -I/usr/local/share/sdcc/include/ -c temete1.c > popGet: (offset[1] > AOP_SIZE(op)[1]-1) && AOP_TYPE(op) != AOP_LIT) > WARNING: encountered NULL pcop--this is probably a compiler bug... > popGet: (offset[1] > AOP_SIZE(op)[1]-1) && AOP_TYPE(op) != AOP_LIT) > /home/neider/private/git/build/bin/sdcc -mpic14 -p16f877 > -I/home/neider/private/git/sdcc/device/include/pic --stack-auto > --int-long-reent --nooverlay -I/usr/local/share/sdcc/include/pic/ > -I/usr/local/share/sdcc/include/ -c temete2.c > temete2.c:156: warning 126: unreachable code > temete2.asm:2249:Error [113] Symbol not previously defined > (_PrintLine_pattern_1_1). > temete2.asm:2251:Error [113] Symbol not previously defined > (_PrintLine_pattern_1_1). > temete2.asm:2359:Error [113] Symbol not previously defined > (_PrintLine_mask_1_1). > temete2.asm:2361:Error [113] Symbol not previously defined > (_PrintLine_mask_1_1). > temete2.asm:2818:Message [306] Crossing page boundary -- ensure page bits > are set. > temete2.asm:2824:Message [306] Crossing page boundary -- ensure page bits > are set. > temete2.asm:2829:Message [306] Crossing page boundary -- ensure page bits > are set. > temete2.asm:2902:Message [306] Crossing page boundary -- ensure page bits > are set. > temete2.asm:2922:Message [306] Crossing page boundary -- ensure page bits > are set. > temete2.asm:2943:Message [306] Crossing page boundary -- ensure page bits > are set. > temete2.asm:2956:Message [306] Crossing page boundary -- ensure page bits > are set. > temete2.asm:2961:Message [306] Crossing page boundary -- ensure page bits > are set. > temete2.asm:2975:Message [306] Crossing page boundary -- ensure page bits > are set. > > which is bad enough but might not need to be investigated further as the > unsupported --stack-auto is the cause here. > > Good luck, > Raphael > ------------------------------------------------------------------------------ > This SF.net email is sponsored by: > High Quality Requirements in a Collaborative Environment. > Download a free trial of Rational Requirements Composer Now! > http://p.sf.net/sfu/www-ibm-com > _______________________________________________ > Sdcc-user mailing list > Sdc...@li... > https://lists.sourceforge.net/lists/listinfo/sdcc-user > > |