linux memcpy 地址对齐,ARMCC:memcpy问题(对齐异常)

我正在将一些软件从

gcc-toolchain移植到armcc-toolchain(处理器保持不变(Cortex-A9)).在C代码中使用memcpy. armcc通过调用__aeabi_memcpy替换对memcpy的调用.常见问题解答如下关于__aeabi_memcpy(

How do the ARM Compilers handle memcpy()?):

In many cases,when compiling calls to memcpy(),the ARM C compiler will generate calls to specialized,optimised,library functions instead. Since RVCT 2.1,these specialized functions are part of the ABI for the ARM architecture (AEABI),and include:

__aeabi_memcpy

This function is the same as ANSI C memcpy,except that the return value is void.

但是与gcc相比,在我的所有情况下对memcpy的调用都可以正常工作,使用armcc对memcpy的调用__aeabi_memcpy会连续产生对齐异常.同时我发现,对memcpy的调用可以处理源和目标地址不是4字节对齐的调用,但前提是它们都不是4字节对齐的.例如:

将工作.但是例如:

会导致对齐异常.我正在使用uint8_t类型的指针*我明确告诉编译器地址可以有任何对齐.但显然这个__aeabi_memcpy无法处理每个路线组合.如何解决此问题(最好不使用用户特定版本的memcpy更改现有代码中对memcpy的所有调用)?感谢帮助.volatile uint32_t len = 10;

uint8_t* src = (uint8_t*)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值