ARMClang6.1编译优化导致的访问不对齐异常
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ARMClang6.1编译优化导致的访问不对齐异常相关的知识,希望对你有一定的参考价值。
大家好:
我用Altera SOC,ARM cortex-A9核,裸跑。系统启动时配置SCTLR.A(-Alignment check enable)为disable,但运行编译优化时库函数出现数据不对齐异常(data abort exception).原因是:编译器将for(i=0;i<6;i++)*dptr++=*sptr++的6字节数据拷贝优化成 __aeabi_memcpy库函数,由于源数据不是4字节对齐,所以库函数异常。请问大家有什么办法吗?编译优化设置为O1,
我采用ARM公司的DS-5,貌似armclang编译器的库函数_aeabi_memcpy无法处理不对齐访问,如果CPU不支持不对齐访问,其结果是崩溃。问题是,如果显示调用memcpy可以自己改写,但象使用for循环这种复制少量数据有被编译器优化调用_aeabi_memcpy导致的问题如何处理?如何才能避免编译器做这种优化,代码都是多年成熟代码,总不能去修改所有代码吧???
ARM7是冯诺依慢结构,三级流水线结构
ARM9、ARM11是哈佛结构,5级流水线结构,所以性能要高一点。
ARM9和ARM11大多带内存管理器,跑操作系统好一点,ARM7适合裸奔。
以上是关于ARMClang6.1编译优化导致的访问不对齐异常的主要内容,如果未能解决你的问题,请参考以下文章
C++ volatile关键字(多线程中声明为易变值不稳定值,告诉程序每次都从内存读取,不被编译优化,防止被优化后变量异常)