搜索
bottom↓
回复: 12

请教C语言-----》运行“*Buffer++ = (VOLTS >> 1) & 0xFFFF;”永

[复制链接]

出0入0汤圆

发表于 2010-9-21 11:24:34 | 显示全部楼层 |阅读模式
请教C语言--运行到下面那步时永远不会结束
可能的原因?
谢谢!
******************************************
int16* Buffer;
int16* BufferEnd;
#define VOLTS 0x80000000

while(Buffer < BufferEnd)
        {
                *Buffer++ = (VOLTS >> 1) & 0xFFFF;//运行这步时永远不会结束,是指针益出了吗?
        }

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2010-9-21 11:34:09 | 显示全部楼层
你这2个指针没初始化就用?

出0入0汤圆

 楼主| 发表于 2010-9-21 11:37:41 | 显示全部楼层
回【1楼】 jpchen
------------------------
有初始化的
谢谢!

出0入0汤圆

发表于 2010-9-21 11:43:09 | 显示全部楼层
将这2个指针前面的代码贴上来看一下。另外你单步调试一下,不就可以查到原因了。

出0入0汤圆

 楼主| 发表于 2010-9-21 12:05:58 | 显示全部楼层
BufferEnd =  (void*)total;   //这个是加密的看不到源文件,他们说加密的文件是没问题的。错在我下面的地方。
       Buffer = BufferEnd - 0x800;
       


/*        while(Buffer < BufferEnd)
        {
                *Buffer++ = (VOLTS >> 1) & 0xFFFF;
        }*/

出0入0汤圆

发表于 2010-9-21 12:30:33 | 显示全部楼层
你将while这个语句前的Buffer和BufferEnd指针值print出来看一下,看看各自是多少。。

出0入0汤圆

发表于 2010-9-21 12:32:32 | 显示全部楼层
还有你说的永远不结束,会不会是循环次数远超过0x800次,但是其实是可以结束的,只是时间太长导致的错觉?

出0入0汤圆

 楼主| 发表于 2010-9-21 12:37:32 | 显示全部楼层
多谢【6楼】 jpchen !
  我这就试下!

出0入0汤圆

发表于 2010-9-21 13:00:12 | 显示全部楼层
回复【4楼】piccode  
-----------------------------------------------------------------------

跟你的硬件环境有关,如果你是PC机,这个程序段毫无问题;如果你是8位单片机,你的代码就会有问题.

出0入0汤圆

发表于 2010-9-21 13:06:02 | 显示全部楼层
单片机定义的数据一般默认在数据存储区,你的ram是否有0x800即2K字节这么大;
其次硬件环境下指针本身占用的字节数也需要搞明白,可以用sizeof(buffer)看下.
32位机上指针占用的4字节,8位单片机则不一定,如果是51系列的则在1-3字节之间,跟你选择的数据存储区有关,如果你的sizeof(buffer)为3字节以下,那么指针空间根本不能存储0x800这个3字节数据.

出0入0汤圆

 楼主| 发表于 2010-9-21 14:41:29 | 显示全部楼层
rprintf("BufferEnd= %X\n",BufferEnd);       
    rprintf("Buffer= %X\n",Buffer);       

while(Buffer < BufferEnd)
{
*Buffer++ = (VOLTS >> 1) & 0xFFFF;//运行这步时永远不会结束,是指针益出了吗?

rprintf("Buffer= %X\n",Buffer);  //在里加上的话编译错误。放在前面是OK,这里就不行。
}


---------------------------------
print出来的数值:

BufferEnd= A0020000
Buffer= A0010000

出0入0汤圆

 楼主| 发表于 2010-9-21 15:42:42 | 显示全部楼层
重新开一下机又OK了,难道是编译器设定问题,真是见鬼了......
再次谢谢jdh99 的热情回复和解说!

出0入0汤圆

发表于 2010-9-21 16:40:45 | 显示全部楼层
用什么mcu?内存有没有2k?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-18 03:02

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表