打印

MDK中什么时候选择优化?根绝什么判断哪个优化等级?

[复制链接]
4403|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
智多芯|  楼主 | 2010-11-26 09:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在LPC1768(CM3)移植ucosii和lwip的时候,发现代码优化等级选择0时,中途会出现内存访问出错(反汇编后看到编译出一条需要取8字节的指令,于是出现非对齐数据访问)。
但是我把优化等级改成1时,就没出现这问题了。
我现在的疑问是什么时候选择优化?根绝什么判断哪个优化等级?谢谢大家了~~

相关帖子

沙发
智多芯|  楼主 | 2010-11-26 15:05 | 只看该作者
刚刚找到了,这问题并不全是优化的原因哈lwip里面提供一个动态分配内存的函数,这个函数分配到的是1字节对齐哈
解决方法:把MEM_ALIGNMENT定义成4就行了哈~

在lwip工程中有:
/**
* Adam's mem_malloc() plus solution for bug #17922
* Allocate a block of memory with a minimum of 'size' bytes.
*
* @param size is the minimum size of the requested block in bytes.
* @return pointer to allocated memory or NULL if no free memory was found.
*
* Note that the returned value will always be aligned (as defined by MEM_ALIGNMENT).
*/
void *
mem_malloc(mem_size_t size)
{
    ...
    ...
}

---------------------------------------
/**
* MEM_ALIGNMENT: should be set to the alignment of the CPU
*    4 byte alignment -> #define MEM_ALIGNMENT 4
*    2 byte alignment -> #define MEM_ALIGNMENT 2
*/
#ifndef MEM_ALIGNMENT
#define MEM_ALIGNMENT                   4
#endif

使用特权

评论回复
板凳
智多芯|  楼主 | 2010-11-26 15:05 | 只看该作者
真是悲剧,又浪费我20分。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:我爱技术,我更爱生活。

4

主题

45

帖子

1

粉丝