From: SourceForge.net <no...@so...> - 2007-01-22 01:48:24
|
Bugs item #1383846, was opened at 2005-12-17 19:47 Message generated for change (Comment added) made by tecodev You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=1383846&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: fixed >Status: Closed >Resolution: Fixed Priority: 5 Private: No Submitted By: Simon McAuliffe (smcauliffe) Assigned to: Nobody/Anonymous (nobody) Summary: Variable initializers ignored Initial Comment: Variables are not initialized to specified values in some cases. This occurs when multiple source files are used (perhaps when there is no main() function in a given file). Sample code: -------------bug6.c------------- #define __16f627 #include <pic/pic16f627.h> static char myotherval = 0xaa; // Initialized static char andanother; extern char get(); void main() { PORTB = get(); } -------------bug6a.c------------- #define __16f627 #include <pic/pic16f627.h> static char myval = 0x55; // Not initialized char get() { return myval; } -------------------------------- Command used: sdcc/bin/sdcc -c -mpic14 -p16f627 bug6.c && sdcc/bin/sdcc -c -mpic14 -p16f627 bug6a.c && gplink -m -c -o bug.hex bug6.o bug6a.o Version: 2.5.4 #1183 Symptoms: The application will not output the correct value 0x55 to PORTB in this case. Another possible (though very minor) problem: If I recall correctly, while automatic variables are not supposed to be implicitly initialized, I think static and extern variables are supposed to be initialized to 0 if no value is explicitly given. This suggests the variable "andanother" in the code above should also be initialized to 0, which it isn't. BTW, this is not the static bug I previously mentioned. I'm still looking for that again :) ---------------------------------------------------------------------- >Comment By: Raphael Neider (tecodev) Date: 2007-01-22 01:48 Message: Logged In: YES user_id=1115835 Originator: NO Fixed mostly in SDCC 2.6.4, r4592. Variables in other modules than the one containing the main() function are now properly initialized iff one links against __sdcc_gsinit_startup from libsdcc.lib (default behaviour). This adds 12 bytes of RAM usage, so for those not requiring initialized data it is recommended to provide a substitute as follows: void _sdcc_gsinit_startup(void) { __asm goto _main __endasm; } This will provide nearly the same functionality as before. Concering uninitialized static variables; I have no idea whether the compiler should do it or not. Closing this report despite this unresolved issue. Regards, Raphael ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=1383846&group_id=599 |