打印
[复制链接]
1185|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sunflower860|  楼主 | 2013-12-27 15:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人菜鸟,最近出了这么档子事:
我的某段程序如下:
void Write_LCD_GDRAM(uchar Row, uchar Line)
{
    uchar i, dir, y, x;
    y = 0x80+(Line%2)*0x10;
    x = 0x80+(Line>1)*0x08+Row/2;
    Write_LCD_Cmd(0x24);                               //扩充指令集
....
当Row和Line分别赋值14和1时,x应为0x87,以前程序计算也对。但现在此段程序一直没改过。x的运算结果变为0xA0.
如果将x = 0x80+(Line>1)*0x08+Row/2;改为x = 0x80+(Line>1)*0x08; x += Row/2; 计算便恢复正常,运行结果为0x87。
实在不明白哪出的问题,百思不得其解,求指点。
沙发
ayb_ice| | 2013-12-27 15:58 | 只看该作者
是Line>1

还是
Line>>1

使用特权

评论回复
板凳
Rain_King| | 2013-12-27 17:09 | 只看该作者
楼上的也是我不明白的地方.....

使用特权

评论回复
地板
huangxz| | 2013-12-27 22:02 | 只看该作者

使用特权

评论回复
5
sunflower860|  楼主 | 2013-12-27 22:13 | 只看该作者
ayb_ice 发表于 2013-12-27 15:58
是Line>1

还是

就是大于,不是移位。这事神神叨叨的,这段程序嘛也没改,只是其他部分变了。怎么就算不出正确结果了。是不是内存的分配和释放上有我没想到的

使用特权

评论回复
6
sunflower860|  楼主 | 2013-12-27 22:13 | 只看该作者
Rain_King 发表于 2013-12-27 17:09
楼上的也是我不明白的地方.....

见对楼上的回复

使用特权

评论回复
7
ayb_ice| | 2013-12-28 08:08 | 只看该作者
关中断测试

使用特权

评论回复
8
Rain_King| | 2013-12-28 09:32 | 只看该作者
要不你大几个括号试试???.....把程序优化关了,看行不行....我个人觉得应该是程序优化的时候出现改动了....

使用特权

评论回复
9
chenyu988| | 2014-1-3 16:56 | 只看该作者
我觉得还是把Line>1单独拿出来判断吧

使用特权

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

本版积分规则

10

主题

18

帖子

0

粉丝