clear BaS data segment at start
This commit is contained in:
@@ -51,7 +51,10 @@ SECTIONS
|
|||||||
*/
|
*/
|
||||||
AT (ALIGN(ADDR(.text) + SIZEOF(.text), 4))
|
AT (ALIGN(ADDR(.text) + SIZEOF(.text), 4))
|
||||||
{
|
{
|
||||||
|
__BAS_DATA_START = .;
|
||||||
*(.data)
|
*(.data)
|
||||||
|
. = ALIGN(16);
|
||||||
|
__BAS_DATA_END = .;
|
||||||
*(.bss)
|
*(.bss)
|
||||||
|
|
||||||
/* The BaS copy routine assumes that tha BaS size
|
/* The BaS copy routine assumes that tha BaS size
|
||||||
|
|||||||
@@ -812,6 +812,21 @@ extern uint8_t _BAS_SIZE[];
|
|||||||
extern uint8_t _FASTRAM_END[];
|
extern uint8_t _FASTRAM_END[];
|
||||||
#define FASTRAM_END ((uint32_t)_FASTRAM_END)
|
#define FASTRAM_END ((uint32_t)_FASTRAM_END)
|
||||||
|
|
||||||
|
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];
|
||||||
|
|
||||||
|
p = BAS_DATA_START;
|
||||||
|
while (p < BAS_DATA_END)
|
||||||
|
{
|
||||||
|
*p++ = 0L;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void initialize_hardware(void) {
|
void initialize_hardware(void) {
|
||||||
/* Test for FireTOS switch: DIP switch #5 up */
|
/* Test for FireTOS switch: DIP switch #5 up */
|
||||||
if (!(DIP_SWITCH & (1 << 6))) {
|
if (!(DIP_SWITCH & (1 << 6))) {
|
||||||
@@ -841,14 +856,17 @@ void initialize_hardware(void) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clear_datasegment();
|
||||||
|
|
||||||
init_gpio();
|
init_gpio();
|
||||||
init_serial();
|
init_serial();
|
||||||
|
|
||||||
|
xprintf("\n\n");
|
||||||
|
xprintf("Firebee BASIS system (BaS) v %d.%d (%s, %s)\r\n\r\n", MAJOR_VERSION, MINOR_VERSION, __DATE__, __TIME__);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Determine cause(s) of Reset
|
* Determine cause(s) of Reset
|
||||||
*/
|
*/
|
||||||
xprintf("\n\n");
|
|
||||||
xprintf("Firebee BASIS system (BaS) v %d.%d (%s, %s)\r\n\r\n", MAJOR_VERSION, MINOR_VERSION, __DATE__, __TIME__);
|
|
||||||
if (MCF_SIU_RSR & MCF_SIU_RSR_RST)
|
if (MCF_SIU_RSR & MCF_SIU_RSR_RST)
|
||||||
xprintf("Reset. Cause: External Reset\r\n");
|
xprintf("Reset. Cause: External Reset\r\n");
|
||||||
if (MCF_SIU_RSR & MCF_SIU_RSR_RSTWD)
|
if (MCF_SIU_RSR & MCF_SIU_RSR_RSTWD)
|
||||||
|
|||||||
Reference in New Issue
Block a user