From 17f423d7778b4638ef6283af6899bc274faa27f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20Fr=C3=B6schle?= Date: Tue, 15 Oct 2013 05:07:18 +0000 Subject: [PATCH] clear data segment only if we are running from ROM/flash --- BaS_gcc/sources/sysinit.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/BaS_gcc/sources/sysinit.c b/BaS_gcc/sources/sysinit.c index f9f9815..f5065a9 100644 --- a/BaS_gcc/sources/sysinit.c +++ b/BaS_gcc/sources/sysinit.c @@ -840,17 +840,12 @@ extern uint8_t _BAS_RESIDENT_TEXT_SIZE[]; void clear_datasegment(void) { - uint16_t *p; - extern uint16_t _BAS_DATA_START[]; - uint16_t *BAS_DATA_START = &_BAS_DATA_START[0]; - extern uint16_t _BAS_DATA_END[]; - uint16_t *BAS_DATA_END = &_BAS_DATA_END[0]; + extern uint8_t _BAS_DATA_START[]; + uint8_t *BAS_DATA_START = &_BAS_DATA_START[0]; + extern uint8_t _BAS_DATA_END[]; + uint8_t *BAS_DATA_END = &_BAS_DATA_END[0]; - p = BAS_DATA_START; - while (p < BAS_DATA_END) - { - *p++ = 0L; - } + bzero(BAS_DATA_START, BAS_DATA_END - BAS_DATA_START); } void initialize_hardware(void) { @@ -882,7 +877,10 @@ void initialize_hardware(void) { return; } - clear_datasegment(); + if (BAS_LMA != BAS_IN_RAM) + { + clear_datasegment(); + } init_gpio(); init_serial();