jiamengyu 发表于 2010-11-6 16:43:50

keil的怪事

最近在arm7上写个比较大的程序,架构也挺复杂的,堆栈基本占满了整个内存空间。
碰到两件怪事,我真是素手无策了。

No1. 一个if else语句,只要我写上else,哪怕内容为空,程序跑飞。
No2. pData是个uchar型数组,我在keil里这样取值始终不对:
   ushort val = *((ushort*)(pData+1));
   非得写成这样:
   ushort val = (*(pData+1)+256*(*(pData+2)));
哎,可能对keil的理解还不够深刻,程序大了很多东西控制不了了。


另:第一帖发到了虚拟总论坛,发错了位置

dysxq 发表于 2010-11-10 01:37:01

第二个是对齐问题啊,你直接pData+1,是奇地址,然后用ushort访问,编译成ldrh指令,肯定会data abort的

kingreat 发表于 2010-11-10 09:21:33

楼上,高手

jiamengyu 发表于 2010-11-10 23:52:57

回复【1楼】dysxq
-----------------------------------------------------------------------
呵呵,是的,真没想到啊,后来又实验了一些,数组的首地址分配也与windows有差别。。
再补充一点:keil有三种方式修改指针对齐方式:
1。指针前加关键字__packed(仅单字节对齐)
2. 编译选项--pointer-alignment = num
3. 在程序中添加关键字,貌似是aligment(..),自己看看帮助文档吧
页: [1]
查看完整版本: keil的怪事