From: SourceForge.net <no...@so...> - 2006-06-19 17:17:29
|
Bugs item #1384285, was opened at 2005-12-18 06:03 Message generated for change (Settings changed) made by tecodev You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=1384285&group_id=599 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: pic14 target >Group: unreproducable >Status: Closed >Resolution: Works For Me Priority: 5 Submitted By: Simon McAuliffe (smcauliffe) Assigned to: Nobody/Anonymous (nobody) Summary: Register bank issue in conjuction with statics Initial Comment: I think this is the simple static problem I was having earlier that forced me to turn off statics and incorrectly suggest something else was a bug. This may also be the underlying cause of the other bug I recently reported (1384257). -----------------bug8.c----------------- #define __16f627 #include <pic/pic16f627.h> static char dummy; char func(char v) { return v; } void main() { TXIE = 1; dummy = 5; dummy = func(dummy); dummy = func(dummy); } ---------------------------------------- Command: sdcc -mpic14 -p16f627 -o bug8.hex bug8.c Version: 2.5.4 #1183 It appears that the compiler is assuming everything is in the same bank (due to use of only static variables), but doesn't take into account the fact that TXIE is in another bank. It then goes on and modifies the variable address in the wrong bank. Incorrect output: BSF STATUS,5 BCF STATUS,6 BSF (_TXIE >> 3), (_TXIE & 7) MOVLW 0x05 MOVWF _dummy Expected output: BSF STATUS,5 BCF STATUS,6 BSF (_TXIE >> 3), (_TXIE & 7) MOVLW 0x05 BANKSEL _dummy MOVWF _dummy In the above, the dummy function and calls are just to prevent the assignment from being optimized away. The following simpler code also produces the problem but part of it is optimised and partially hides the problem: -----------------bug8small.c----------------- #define __16f627 #include <pic/pic16f627.h> static char dummy; void main() { TXIE = 1; dummy = 5; } ---------------------------------------- I strongly suspect this is the cause of strange behavior I previously reported. ---------------------------------------------------------------------- >Comment By: Raphael Neider (tecodev) Date: 2006-06-19 17:17 Message: Logged In: YES user_id=1115835 Unreproducable in SDCC r4242. Both uses of _dummy are preceded with BANKSELs. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=1384285&group_id=599 |