keil模仿Linux将数据放入指定section

; *************************************************************
; *** 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;
		}
	}
}

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值