From: SourceForge.net <no...@so...> - 2011-10-28 13:18:40
|
Bugs item #3429722, was opened at 2011-10-28 15:18 Message generated for change (Tracker Item Submitted) made by diegoherranz You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3429722&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: None Group: None Status: Open Resolution: None Priority: 5 Private: No Submitted By: Diego Herranz (diegoherranz) Assigned to: Nobody/Anonymous (nobody) Summary: Global variables not initialized to 0 by default Initial Comment: SDCC : mcs51/gbz80/z80/ds390/pic16/pic14/TININative/ds400/hc08 3.0.0 #6037 uint8_t variable0 = 0; uint8_t variable1; Declaring these 2 global variables, both should be initialized to 0 according to ANSI, but only variable0 is. Bug sample attached showing that variable1 is not initialized to 0 because LED1 blinks (check simple code attached). When running this code on a simulator it works correctly but I think that it is because RAM values are not random on start. However it's not working on real-life PIC. Category "none" because I don't know where the bug is. If you need anything else please let me know. Thank you very much P.S: hex file is different if variables are declared this way (and I think that hex file shouldn't change): uint8_t variable0; uint8_t variable1; ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3429722&group_id=599 |
From: SourceForge.net <no...@so...> - 2011-10-28 14:59:39
|
Bugs item #3429722, was opened at 2011-10-28 13:18 Message generated for change (Comment added) made by You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3429722&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: None Group: None Status: Open Resolution: None Priority: 5 Private: No Submitted By: Diego Herranz (diegoherranz) Assigned to: Nobody/Anonymous (nobody) Summary: Global variables not initialized to 0 by default Initial Comment: SDCC : mcs51/gbz80/z80/ds390/pic16/pic14/TININative/ds400/hc08 3.0.0 #6037 uint8_t variable0 = 0; uint8_t variable1; Declaring these 2 global variables, both should be initialized to 0 according to ANSI, but only variable0 is. Bug sample attached showing that variable1 is not initialized to 0 because LED1 blinks (check simple code attached). When running this code on a simulator it works correctly but I think that it is because RAM values are not random on start. However it's not working on real-life PIC. Category "none" because I don't know where the bug is. If you need anything else please let me know. Thank you very much P.S: hex file is different if variables are declared this way (and I think that hex file shouldn't change): uint8_t variable0; uint8_t variable1; ---------------------------------------------------------------------- Comment By: mic_ () Date: 2011-10-28 14:59 Message: This sounds like something that your crt0 code should handle (i.e. clearing the bss section). I'm not sure if that could be seen as a bug in SDCC, since the crt0 code can be quite project-specific, so you might be expected to provide your own. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3429722&group_id=599 |
From: SourceForge.net <no...@so...> - 2011-10-28 15:53:17
|
Bugs item #3429722, was opened at 2011-10-28 15:18 Message generated for change (Comment added) made by diegoherranz You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3429722&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: None Group: None Status: Open Resolution: None Priority: 5 Private: No Submitted By: Diego Herranz (diegoherranz) Assigned to: Nobody/Anonymous (nobody) Summary: Global variables not initialized to 0 by default Initial Comment: SDCC : mcs51/gbz80/z80/ds390/pic16/pic14/TININative/ds400/hc08 3.0.0 #6037 uint8_t variable0 = 0; uint8_t variable1; Declaring these 2 global variables, both should be initialized to 0 according to ANSI, but only variable0 is. Bug sample attached showing that variable1 is not initialized to 0 because LED1 blinks (check simple code attached). When running this code on a simulator it works correctly but I think that it is because RAM values are not random on start. However it's not working on real-life PIC. Category "none" because I don't know where the bug is. If you need anything else please let me know. Thank you very much P.S: hex file is different if variables are declared this way (and I think that hex file shouldn't change): uint8_t variable0; uint8_t variable1; ---------------------------------------------------------------------- >Comment By: Diego Herranz (diegoherranz) Date: 2011-10-28 17:53 Message: I'm using crt0i provided by sdcc for pic16. Maybe it's a bug in crt0i. Thanks! ---------------------------------------------------------------------- Comment By: mic_ () Date: 2011-10-28 16:59 Message: This sounds like something that your crt0 code should handle (i.e. clearing the bss section). I'm not sure if that could be seen as a bug in SDCC, since the crt0 code can be quite project-specific, so you might be expected to provide your own. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3429722&group_id=599 |
From: SourceForge.net <no...@so...> - 2011-10-28 18:32:10
|
Bugs item #3429722, was opened at 2011-10-28 13:18 Message generated for change (Comment added) made by tecodev You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3429722&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: pic16 target >Group: non bugs >Status: Pending >Resolution: Invalid Priority: 5 Private: No Submitted By: Diego Herranz (diegoherranz) Assigned to: Nobody/Anonymous (nobody) Summary: Global variables not initialized to 0 by default Initial Comment: SDCC : mcs51/gbz80/z80/ds390/pic16/pic14/TININative/ds400/hc08 3.0.0 #6037 uint8_t variable0 = 0; uint8_t variable1; Declaring these 2 global variables, both should be initialized to 0 according to ANSI, but only variable0 is. Bug sample attached showing that variable1 is not initialized to 0 because LED1 blinks (check simple code attached). When running this code on a simulator it works correctly but I think that it is because RAM values are not random on start. However it's not working on real-life PIC. Category "none" because I don't know where the bug is. If you need anything else please let me know. Thank you very much P.S: hex file is different if variables are declared this way (and I think that hex file shouldn't change): uint8_t variable0; uint8_t variable1; ---------------------------------------------------------------------- >Comment By: Raphael Neider (tecodev) Date: 2011-10-28 18:32 Message: Maybe you want to try crt0iz, which initializes and zeroes your memory. Initialized variables are copied from ROM/Flash (code memory) to RAM at system startup. Uninitialized data remains ... uninitialized unless you spend some code memory to wipe it on startup -- crt0/i/iz differ in the amount of code they spend for system startup routines. ---------------------------------------------------------------------- Comment By: Diego Herranz (diegoherranz) Date: 2011-10-28 15:53 Message: I'm using crt0i provided by sdcc for pic16. Maybe it's a bug in crt0i. Thanks! ---------------------------------------------------------------------- Comment By: mic_ () Date: 2011-10-28 14:59 Message: This sounds like something that your crt0 code should handle (i.e. clearing the bss section). I'm not sure if that could be seen as a bug in SDCC, since the crt0 code can be quite project-specific, so you might be expected to provide your own. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3429722&group_id=599 |
From: SourceForge.net <no...@so...> - 2011-10-30 02:17:04
|
Bugs item #3429722, was opened at 2011-10-28 15:18 Message generated for change (Comment added) made by diegoherranz You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3429722&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: pic16 target Group: non bugs Status: Pending Resolution: Invalid Priority: 5 Private: No Submitted By: Diego Herranz (diegoherranz) Assigned to: Nobody/Anonymous (nobody) Summary: Global variables not initialized to 0 by default Initial Comment: SDCC : mcs51/gbz80/z80/ds390/pic16/pic14/TININative/ds400/hc08 3.0.0 #6037 uint8_t variable0 = 0; uint8_t variable1; Declaring these 2 global variables, both should be initialized to 0 according to ANSI, but only variable0 is. Bug sample attached showing that variable1 is not initialized to 0 because LED1 blinks (check simple code attached). When running this code on a simulator it works correctly but I think that it is because RAM values are not random on start. However it's not working on real-life PIC. Category "none" because I don't know where the bug is. If you need anything else please let me know. Thank you very much P.S: hex file is different if variables are declared this way (and I think that hex file shouldn't change): uint8_t variable0; uint8_t variable1; ---------------------------------------------------------------------- Comment By: Diego Herranz (diegoherranz) Date: 2011-10-30 03:17 Message: Before going any further, let me check if what I know about different crt0x is right. crt0 - no initialization at all crt0i - initializes variables crt0iz - clears all ram and initializes variables If it's wrong please let me know. Returning to the topic at hand: uint8_t variable0=0; uint8_t variable1; With these 2 global variable declarations, I don't think that variable1 is uninitialized. I think that it is initialized to 0 exactly like variable0 according to ANSI standard (if it were an automatic variable it would be uninitialized but it's global). So, I think that crt0i should initialize variable1 to 0 for ANSI compliance (or using crt0iz by default, but this is slower at startup) . Thanks ---------------------------------------------------------------------- Comment By: Raphael Neider (tecodev) Date: 2011-10-28 20:32 Message: Maybe you want to try crt0iz, which initializes and zeroes your memory. Initialized variables are copied from ROM/Flash (code memory) to RAM at system startup. Uninitialized data remains ... uninitialized unless you spend some code memory to wipe it on startup -- crt0/i/iz differ in the amount of code they spend for system startup routines. ---------------------------------------------------------------------- Comment By: Diego Herranz (diegoherranz) Date: 2011-10-28 17:53 Message: I'm using crt0i provided by sdcc for pic16. Maybe it's a bug in crt0i. Thanks! ---------------------------------------------------------------------- Comment By: mic_ () Date: 2011-10-28 16:59 Message: This sounds like something that your crt0 code should handle (i.e. clearing the bss section). I'm not sure if that could be seen as a bug in SDCC, since the crt0 code can be quite project-specific, so you might be expected to provide your own. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3429722&group_id=599 |
From: SourceForge.net <no...@so...> - 2011-10-30 08:51:17
|
Bugs item #3429722, was opened at 2011-10-28 13:18 Message generated for change (Settings changed) made by tecodev You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3429722&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: pic16 target >Group: known bugs >Status: Open >Resolution: Later Priority: 5 Private: No Submitted By: Diego Herranz (diegoherranz) Assigned to: Nobody/Anonymous (nobody) Summary: Global variables not initialized to 0 by default Initial Comment: SDCC : mcs51/gbz80/z80/ds390/pic16/pic14/TININative/ds400/hc08 3.0.0 #6037 uint8_t variable0 = 0; uint8_t variable1; Declaring these 2 global variables, both should be initialized to 0 according to ANSI, but only variable0 is. Bug sample attached showing that variable1 is not initialized to 0 because LED1 blinks (check simple code attached). When running this code on a simulator it works correctly but I think that it is because RAM values are not random on start. However it's not working on real-life PIC. Category "none" because I don't know where the bug is. If you need anything else please let me know. Thank you very much P.S: hex file is different if variables are declared this way (and I think that hex file shouldn't change): uint8_t variable0; uint8_t variable1; ---------------------------------------------------------------------- >Comment By: Raphael Neider (tecodev) Date: 2011-10-30 08:51 Message: What we do here is a non-standard optimization for small devices. For ANSI-compliance, use crt0iz. crt0i (currently) initializes only all *explicitly* initialized variables -- those that would lie in .data and .rodata sections if we were using ELF objects -- but leaves the implicitly initialized variables (.bss section) uninitialized. I start to agree that "the right way" is between crt0i and crt0iz, namely initializing all explicitly variables plus wiping .bss (rather than the whole memory). Unfortunately, I think that we do not have information on start and end of .bss at runtime. And then there might be multiple .bss sections -- at least one per bank ... Consequently a simple start/end record might not suffice. Probably we should just make crt0iz the default? ---------------------------------------------------------------------- Comment By: Diego Herranz (diegoherranz) Date: 2011-10-30 02:17 Message: Before going any further, let me check if what I know about different crt0x is right. crt0 - no initialization at all crt0i - initializes variables crt0iz - clears all ram and initializes variables If it's wrong please let me know. Returning to the topic at hand: uint8_t variable0=0; uint8_t variable1; With these 2 global variable declarations, I don't think that variable1 is uninitialized. I think that it is initialized to 0 exactly like variable0 according to ANSI standard (if it were an automatic variable it would be uninitialized but it's global). So, I think that crt0i should initialize variable1 to 0 for ANSI compliance (or using crt0iz by default, but this is slower at startup) . Thanks ---------------------------------------------------------------------- Comment By: Raphael Neider (tecodev) Date: 2011-10-28 18:32 Message: Maybe you want to try crt0iz, which initializes and zeroes your memory. Initialized variables are copied from ROM/Flash (code memory) to RAM at system startup. Uninitialized data remains ... uninitialized unless you spend some code memory to wipe it on startup -- crt0/i/iz differ in the amount of code they spend for system startup routines. ---------------------------------------------------------------------- Comment By: Diego Herranz (diegoherranz) Date: 2011-10-28 15:53 Message: I'm using crt0i provided by sdcc for pic16. Maybe it's a bug in crt0i. Thanks! ---------------------------------------------------------------------- Comment By: mic_ () Date: 2011-10-28 14:59 Message: This sounds like something that your crt0 code should handle (i.e. clearing the bss section). I'm not sure if that could be seen as a bug in SDCC, since the crt0 code can be quite project-specific, so you might be expected to provide your own. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3429722&group_id=599 |