C语言绝对地址函数创建和读取函数

这里写自定义目录标题


绝对地址函数创建和读取函数

#pragma arm section code=".ARM.__at_0x3000"//定义test函数的绝对地址在0x3000处
void test(void)
{
	printf("test\r\n");
}
#pragma arm section

int main(void)
{
	UART0_Init(9600,0x31);
	printf("start\r\n");
	while(1)
	{
		 printf("The address of function = %d !\n",test);//读取函数绝绝对地址
		((void(*)(void))0x3001)();//实验得出函数在绝对地址+1处
	}
}


可以看到函数在0x3000的地址上。
在这里插入图片描述
而12289地址转换成16进制就是0x3001。

const定义绝对地址。这个地址我用在Bootloader更新APP识别上,这里我用的是新唐的NUC029,APP放在0x3000的位置,如果把datatest这个数组放到0x3000上当程序跳转到0x3000上时死程序。测试下来好像是在不同的FLASH的地址上编译出来的程序有所不同。所以我在编译APP程序时,把datatest数组放到了0x3000前面512字节处,就是0x2E00这个地址。

const uint8_t datatest[512] __attribute__((at(0X2e00)))={0x00,0x0a};
//0x00,0x0a可以根据自己需求修改
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值