Hi,
I've been tracking a wierd problem, 100% repeatable although the failures vary. I'm using: /Users/nyholku/sdcc-3.4.0/bin/sdcc -v SDCC : mcs51/z80/z180/r2k/r3ka/gbz80/tlcs90/ds390/pic16/pic14/TININative/ds400/hc0 8/s08/stm8 3.4.0 #8981 (Apr 5 2014) (Mac OS X i386) published under GNU General Public License (GPL) with PIC18F4550 I've tracked the problem down to these four innocent looking statements in my interrupt routine: steppers[0].probePosition = steppers[0].position; steppers[1].probePosition = steppers[1].position; steppers[2].probePosition = steppers[2].position; steppers[3].probePosition = steppers[3].position; If I comment these out, then all the weird symptoms I've been having disappear. The '.probePosition' and '.position' are both 32 bit ints. Looking at the generated code I see that the compiler generates code: 00438 ; .line 86; stepperirq.c steppers[0].probePosition = steppers[0].position; 000086 C??? F??? 00439 MOVFF (_steppers + 7), r0x00 00008A C??? F??? 00440 MOVFF (_steppers + 8), r0x01 00008E C??? F??? 00441 MOVFF (_steppers + 9), r0x02 000092 C??? F??? 00442 MOVFF (_steppers + 10), r0x03 000096 50?? 00443 MOVF r0x00, W 000098 ???? 00444 BANKSEL (_steppers + 24) 00009A 6F?? 00445 MOVWF (_steppers + 24), B 00009C 50?? 00446 MOVF r0x01, W 00447 ; removed redundant BANKSEL 00009E 6F?? 00448 MOVWF (_steppers + 25), B 0000A0 50?? 00449 MOVF r0x02, W 00450 ; removed redundant BANKSEL 0000A2 6F?? 00451 MOVWF (_steppers + 26), B 0000A4 50?? 00452 MOVF r0x03, W 00453 ; removed redundant BANKSEL 0000A6 6F?? 00454 MOVWF (_steppers + 27), B which uses the r0x00 etc variables which the compiler defines like: 00320 .registers udata_ovr 0x0000 000000 00321 r0x00 res 1 000001 00322 r0x01 res 1 000002 00323 r0x02 res 1 000003 00324 r0x03 res 1 Somewhere in the back of my mind I seem to recall that 'udata_ovr' may cause problems if used both in main program and interrupt code. My interrupt is defined as: #pragma save #pragma nojtbound #pragma nooverlay void stepperirq() __interrupt(1) { in order to avoid overlaying. So could this (use of overlaid compiler generated temp variables in interrupt and main program be a problem)??? br Kusti This e-mail may contain confidential or privileged information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and destroy this e-mail. Any unauthorized copying, disclosure or distribution of the material in this e-mail is strictly forbidden. We will not be liable for direct, indirect, special or consequential damages arising from alteration of the contents of this message by a third party or as a result of any virus being passed on or as of transmission of this e-mail in general. ------------------------------------------------------------------------------ One dashboard for servers and applications across Physical-Virtual-Cloud Widest out-of-the-box monitoring support with 50+ applications Performance metrics, stats and reports that give you Actionable Insights Deep dive visibility with transaction tracing using APM Insight. http://ad.doubleclick.net/ddm/clk/290420510;117567292;y _______________________________________________ Sdcc-user mailing list Sdcc-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sdcc-user