程序问题

[复制链接]
729|19
 楼主| zhanglli 发表于 2019-3-8 18:07 | 显示全部楼层 |阅读模式
如下,大家帮看看
void WRITE_TWOline(uchar X,uchar Y,uchar count)
{
uchar i;
uchar DDATA;
switch(Y)
{
case 1:{
X=X|0x80;
WRITE_CMD(X);
for(i=0;i=<count;i++)
{
uchar Num=0;
DDATA=str0[Num];
WRITE_DATA(DDATA);
Num++;
}
}break;
case 2:{
X=X+0x40;
X=X|0x80;
WRITE_CMD(X);
for(i=0;i=<count;i++)
{
uchar Num=0;
DDATA=str1[Num];
WRITE_DATA(DDATA);
Num++;
}
}break;
default:break;
}
}
 楼主| zhanglli 发表于 2019-3-8 18:10 | 显示全部楼层
KEIL报在62行和74行有语法错误,我却查不出来。

只能怪自己水平有限了。
for(i=0;i=<count;i++)

说的就是这一句里面有语法错误。
lium 发表于 2019-3-8 18:13 | 显示全部楼层
按提示排除故障
langgq 发表于 2019-3-8 18:16 | 显示全部楼层
keil的定位提示错误信息不是很准确的。
langgq 发表于 2019-3-8 18:17 | 显示全部楼层


比如说你在一个.h文件中少了分号,有可能他提示你函数错误,并不提示你
这里少了分号。仔细排查下吧。
wangpe 发表于 2019-3-8 18:20 | 显示全部楼层
=<这个好像不是这样写的吧,应该是<=
lium 发表于 2019-3-8 18:23 | 显示全部楼层
uchar Num=0;
yufe 发表于 2019-3-8 18:26 | 显示全部楼层


uchar Num=0;语法上也不是不可以...
复合语句内部是允许定义变量的,但...作为循环语句每次上来都将Num初始化为0...你的Num++;便毫无意义...
 楼主| zhanglli 发表于 2019-3-8 18:31 | 显示全部楼层
第一个错误,属于语法错误,是我打代码打的太快的结果,不可原谅的是我居然没有查出来。可见我对C的语法还是很生疏的。
 楼主| zhanglli 发表于 2019-3-8 18:33 | 显示全部楼层


第二个我觉得是逻辑上的错误,这种错误编译器一般不会报错,需要程序员自己的小心处理。
yufe 发表于 2019-3-8 18:37 | 显示全部楼层
case 1:{
              ……
       }break;
这种风格头一次见,呵呵
hanwe 发表于 2019-3-8 18:40 | 显示全部楼层

那么多指令,调用函数,不用{}都可以实现,反正CASE指令没有遇到BREAK都一直往下执行,途径不重要,只要好懂,能用好用都行,不知道其他人怎么看
lium 发表于 2019-3-8 18:42 | 显示全部楼层

应该是
for(i=0;i<=count;i++)
这个<=符号是很容易出错的,因为不太符合我们平时的写法
zhuww 发表于 2019-3-8 18:46 | 显示全部楼层

=<改成<=
 楼主| zhanglli 发表于 2019-3-8 18:49 | 显示全部楼层

谢谢众位兄弟们,我把它重新改了一下。

void WRITE_TWOline(uchar X,uchar Y,uchar count)
{
uchar i;
switch(Y)
     {
      case 1:X|=0x80;
                WRITE_CMD(X);//调用写指令确定DDRAM地址
                for(i=0;i<=count;i++)
                 {
                   WRITE_DATA(str0);
                  }
                break;
      case 2:X=(X+0x40)|0x80;
                WRITE_CMD(X);//调用写指令确定DDRAM地址
                for(i=0;i<=count;i++)
                 {
                   WRITE_DATA(str1);
                 }
                break;
     default:break;
    }
}

去掉了Num和DDATA两个变量,这里不需要那两个变量的辅助也同样可以实验函数功能。
wangzsa 发表于 2019-3-8 18:52 | 显示全部楼层
可以使用keil单步运行一下程序,应该可以找到问题
langgq 发表于 2019-3-8 18:56 | 显示全部楼层


嗯,没问题
yufe 发表于 2019-3-8 18:59 | 显示全部楼层
根本原因是:switch分支中不能定义新的变量,即使在{}内部也不能,如LZ的.
for(i=0;i=<count;i++)
{
      uchar Num=0;
     ....
}
Num就是这种请况.
guoyt 发表于 2019-3-8 19:01 | 显示全部楼层
是不要有个语法错误啊?那里的循环跳出来没有啊?
 楼主| zhanglli 发表于 2019-3-8 19:05 | 显示全部楼层

嗯,是的,谢谢大家
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1016

主题

9386

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部