内存操作的问题
如下这条内存操作的语句:
*(TUint16*)(iBmpAddr + iLine*176*2 + iPixNum*2) += *(TUint16*)pix.color;
在模拟器上运行没有问题,可是到真机上执行一次就挂掉了(这是循环体里的语句)。
想不通,真机跟模拟器在内存布局上有什么不同?
我这条循环语句的功能是对位图做差值操作,即对前幅位图的值进行一定的差值计算,得到后一幅位图,这样可以节省传输的数据量
可是这里执行 += 的时候,在真机上程序就直接退出了
其中iBmpAddr是位图的内存地址,pix.color是象素点的值
iBmpAddr = (TUint8*)iBitmap->DataAddress();
typedef struct
{
TUint8 num;
TUint8 color[2];
}PIXSTRUCT; //pix的结构定义
问题点数:20、回复次数:4Top
1 楼chenziteng(陈子腾)回复于 2006-03-03 13:19:21 得分 0
.
访问内存时ARM芯片强制要求地址是字对齐(即可以整除32), 否则就会发生访问冲突.
到诺基亚论坛上你发的贴子那儿找我推荐的文档看吧。
http://discussion.forum.nokia.com/forum/showthread.php?t=75529Top
2 楼chenbinghui(阿炳)回复于 2006-03-08 23:52:50 得分 0
访问内存时ARM芯片强制要求地址是字对齐(即可以整除32), 否则就会发生访问冲突.
不完全对。
short类型应该2字节对齐,int类型应该是4字节对齐,对齐的意思数据的头地址应该什么的倍数。
Top
3 楼chenbinghui(阿炳)回复于 2006-03-08 23:53:25 得分 0
你这个问题肯定是iBmpAddr = (TUint8*)iBitmap->DataAddress();中的iBmpAddr 有可能是单数。Top
4 楼chenziteng(陈子腾)回复于 2006-03-09 00:36:18 得分 0
To chenbinghui(阿炳):
的确:),8、16、32,多少位的类型就要求以多少位对齐。
Top




