-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmy__main.c
49 lines (41 loc) · 1.29 KB
/
my__main.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/*
*/
#include "config.h"
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
extern int appmain(void);
#define INIT_RW_REGION(regionName) \
{ \
extern int Load$$##regionName##$$Base; \
extern int Image$$##regionName##$$Base; \
extern int Image$$##regionName##$$Length; \
size_t i, len; \
char *rw_ld_base, *rw_ex_base; \
rw_ld_base = (char*)&Load$$##regionName##$$Base; \
rw_ex_base = (char*)&Image$$##regionName##$$Base; \
len = (size_t)&Image$$##regionName##$$Length; \
memcpy(rw_ex_base, rw_ld_base, len); \
}
#define INIT_ZI_REGION(regionName) \
{ \
extern int Image$$##regionName##$$ZI$$Base; \
extern int Image$$##regionName##$$ZI$$Length; \
size_t i, len; \
char *bss; \
len = (size_t)&Image$$##regionName##$$ZI$$Length; \
bss = (char*)&Image$$##regionName##$$ZI$$Base; \
memset(bss, 0, len); \
}
#ifndef USE_ARM_LIB_STARTUP
//This function needs to be called to do scatter loading if ARM library's __main is not used:
//This function does scatter loading and then call applications main function as ARM's __main does:
void my__main()
{
INIT_RW_REGION(RW_DATA)
INIT_RW_REGION(configData)
INIT_ZI_REGION(ZI_DATA);
//Now call application's main function:
appmain();
}
#endif