; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
LR_IROM1 0x08000000 0x00040000 { ; load region size_region
ER_IROM1 0x08000000 0x00000204{ ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
}
EARLY_INIT +0;
{
*(.command.sct)
}
ANY +0
{
.ANY(+RO)
}
RW_IRAM1 0x20000000 0x0000C000 { ; RW data
.ANY (+RW +ZI)
}
}
struct command {
const char *arg;
void (*func)(char **p);
};
#define __used __attribute__((__used__))
#define COMMAND(name,fn) \
static struct command __cmd_##fn __used \
__attribute__((__section__(".command.sct"))) = { name, fn }
static void cmdA(char **p)
{
}
COMMAND("cmdA", cmdA);
static void cmdB(char **p)
{
}
COMMAND("cmdB", cmdB);
extern unsigned char Image$$EARLY_INIT$$Base;
extern unsigned char Image$$EARLY_INIT$$Length;
void funcs(char *arg)
{
struct command *cmd = (struct command *)&Image$$EARLY_INIT$$Base;
int cnt = Image$$EARLY_INIT$$Length / sizeof(struct command);
int i = 0;
for (i = 0; i<cnt; i++)
{
if (0 == strcmp(cmd->arg, arg))
{
cmd->func(&arg);
break;
}
}
}