another strange observation. If I move the actual declaration of the sensors_event to a different file everything works. Unfortunately this is not a suitable long term solution.
Anthony Asterisk wrote: > I hit a very frustrating problem yesterday and a solution is still > alluding me. Unfortunately the problem shows up when trying to > execute the linked ihx file on the target platform so it is not easy > for me to provide a testcase. I will give some code snippets, please > let me know any steps I can take to further debug it. > > > Here is the code that I am altering. A working version looks like this: > > printf("\n\npress button "); > etimer_set(&timer,CLOCK_CONF_SECOND/5); > while (1) { > PROCESS_WAIT_EVENT(); > if (ev==PROCESS_EVENT_TIMER) { > etimer_reset(&timer); > lcd_putchar(0x08); > lcd_putchar(spin[spin_ptr]); > spin_ptr = (spin_ptr+1)%4; > } > else if (ev==PROCESS_EVENT_MSG) { > //else if (ev == sensors_event) { > exp_port.fields.leds++; > } > else { > printf("unknown event\n"); > } > } > > With this code the message "press button" is displayed. > > If I switch the commented lines ONLY, press button is never displayed > and it seems like nothing is even loaded/executed on the target platform. > > printf("\n\npress button "); > etimer_set(&timer,CLOCK_CONF_SECOND/5); > while (1) { > PROCESS_WAIT_EVENT(); > if (ev==PROCESS_EVENT_TIMER) { > etimer_reset(&timer); > lcd_putchar(0x08); > lcd_putchar(spin[spin_ptr]); > spin_ptr = (spin_ptr+1)%4; > } > //else if (ev==PROCESS_EVENT_MSG) { > else if (ev == sensors_event) { > exp_port.fields.leds++; > } > else { > printf("unknown event\n"); > } > } > > > The extern declaration of sensors_event is in an included header > file. It looks like this: > > extern process_event_t sensors_event; > > And the actual declaration (in a code file) looks like this: > > process_event_t sensors_event; > > > Nothing surprising there. > > > I've been digging around in the *.sym and linker output *.map file for > some clue. > > In the *.sym file for the module with the code snippet above I see: > > _sensors_event > **** GX > > > In the aslink output *.map file, I see: > > Hexadecimal > > Area Addr Size Decimal Bytes > (Attributes) > -------------------------------- ---- ---- ------- ----- > ------------ > XSEG E000 0291 = 657. bytes > (REL,CON,XDATA) > > Value Global > -------- -------------------------------- > 0D:E010 _exp_port > 0D:E016 _ddram_addr > 0D:E017 _sensors_event > 0D:E10D _p0ien > 0D:E10E _p2ien > > > If I diff the *.map from the working and non-working version, the > results are very similar. The order of several various changes but > they are all still present. One change that I did notice which has me > wondering: > > > 431,432c431,432 > < 0C:0000 __sdcc_call_dptr > < 0C:0088 __sdcc_program_startup > --- > > 0C:0086 __sdcc_program_startup > > 0C:008B __sdcc_call_dptr > > > these differences are here: > > Area Addr Size Decimal Bytes > (Attributes) > -------------------------------- ---- ---- ------- ----- > ------------ > HOME 0000 008D = 141. bytes > (REL,CON,CODE) > > Value Global > -------- -------------------------------- > 0C:0000 __sdcc_call_dptr > 0C:0088 __sdcc_program_startup > > Hexadecimal > > > > > The working version seems to have a non-null address for the > __sdcc_call_dptr code, but the broken version has NULL. 0000 seems to > me like it might indicate some sort of error. ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ Sdcc-user mailing list Sdcc-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sdcc-user