ARM MDK Error: L6218E: Undefined symbol __UNALIGNED_UINT32_READ __UNALIGNED_UINT32_WRITE解决

Error: L6218E: Undefined symbol __UNALIGNED_UINT32_READ __UNALIGNED_UINT32_WRITE解决

STM32 HAL库遇到Undefined symbol __UNALIGNED_UINT32_READ,__UNALIGNED_UINT32_WRITE

使用STM32 HAL库时遇到链接报错,以上两个代码未定义。具体什么原因不太清楚,可能是KEIL版本不够高。为避免浪费时间先不彻查是不是这个原因了。先解决了问题可以继续调试应用再说。

函数作用

就是非对齐的32位读写(官方说明),一般读写都必须是要地址对齐的,但是印象中CORTEX-M系列是可以非对齐访问的,只是效率低一些(因为要多次访问拼接数据)。不管了,为避免异常(非对齐访问可能引发CPU指令异常),直接自己实现吧。

解决方案

  1. 宏定义–优点:效率高; 缺点:需要修改HAL库文件 放弃
  2. 函数–优点:不需要改动库文件; 缺点:效率略低 CPU越来越快,这点效率不算什么,故采用此方案
  3. 实现:考虑大端小端,突然感觉自己糊涂了,算了,不考虑大端小端,直接地址对地址的拷贝总是不会错的。由于是DEMO,直接在main.c末尾添加如下代码:
uint32_t __UNALIGNED_UINT32_READ(uint8_t *pSrc)
{
	uint32_t ret = 0;
	uint8_t i;
	uint8_t *pTmp = (uint8_t *)&ret;
	
	for(i = 0; i < sizeof(uint32_t); i++)
	{
		pTmp[i] = pSrc[i];
	}

	return ret;
}
void __UNALIGNED_UINT32_WRITE(uint8_t *pSrc, uint32_t value)
{
	uint8_t i;
	uint8_t *pTmp = (uint8_t *)&value;
	
	for(i = 0; i < sizeof(uint32_t); i++)
	{
		pSrc[i] = pTmp[i];
	}
}
  1. 实测可用,底层不纠结,可以调试应用了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值