mirror of
https://github.com/oopuuu/zTC1.git
synced 2025-12-17 23:48:13 +08:00
63 lines
1.1 KiB
C
63 lines
1.1 KiB
C
/**************************************************
|
|
*
|
|
* Code that performs zero initialization of global data.
|
|
* New style init table.
|
|
*
|
|
* Copyright 2008 IAR Systems. All rights reserved.
|
|
*
|
|
* $Revision: 45563 $
|
|
*
|
|
**************************************************/
|
|
|
|
#include "data_init3.h"
|
|
|
|
#pragma language=extended
|
|
#pragma build_attribute vfpcc_compatible
|
|
#pragma build_attribute arm_thumb_compatible
|
|
#pragma build_attribute ropi_compatible
|
|
#pragma build_attribute rwpi_compatible
|
|
|
|
/* Format:
|
|
Size1
|
|
DestAddr1 (abs or SBrel)
|
|
Size2
|
|
DestAddr2 (abs or SBrel)
|
|
...
|
|
0
|
|
*/
|
|
|
|
__no_init uint32_t __iar_SB @ r9;
|
|
|
|
init_fun_t __iar_zero_init2;
|
|
|
|
#pragma type_attribute=__thumb __interwork
|
|
uint32_t const *
|
|
__iar_zero_init3(uint32_t const * p);
|
|
|
|
#pragma type_attribute=__thumb __interwork
|
|
uint32_t const *
|
|
__iar_zero_init3(uint32_t const * p)
|
|
{
|
|
uint32_t size;
|
|
while ((size = *p++) != 0)
|
|
{
|
|
uint32_t d = *p++;
|
|
uint32_t * dest;
|
|
|
|
if( d & 1 )
|
|
{
|
|
d -= 1;
|
|
d += __iar_SB;
|
|
}
|
|
|
|
dest = (uint32_t*)d;
|
|
|
|
do
|
|
{
|
|
*dest++ = 0;
|
|
size -= 4;
|
|
} while (size != 0);
|
|
}
|
|
return p;
|
|
}
|