打印
[技术问答]

用新塘N76E003写switch case语句发现一个问题,求各位前辈解...

[复制链接]
581|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
先附上一段代码
#define N 2
void fun(void)
{
  static u8 sta=0;
  switch(sta)
  {
    case 0:
      list1_on(1);list2_on(1);list3_on(3);
      delay(N);
    sta++;
    break;
    case 1:
      list1_on(2);list2_on(2);list3_on(4);
      delay(N);
    sta++;
    break;
    case 2:
      list1_on(1);list2_on(3);list3_on(1);
      delay(N);
    sta++;
    break;
    case 3:
      list1_on(3);list2_on(4);list3_on(2);
      delay(N);
    sta++;
    break;
    case 4:
      list1_on(2);list2_on(1);list3_on(3);
      delay(N);
    sta++;
    break;
    case 5:
      list1_on(3);list2_on(2);list3_on(4);
      delay(N);
    sta++;
    break;
    case 6:
      list1_on(2);list2_on(3);list3_on(2);
      delay(N);
    sta++;
    break;
    case 7:
      list1_on(3);list2_on(1);list3_on(3);
      delay(N);
    sta++;
    break;
    case 8:
      list1_on(4);list2_on(2);list3_on(1);
      delay(N);
    sta++;
    break;
    case 9:
      list1_on(5);list2_on(3);list3_on(2);
      delay(N);
    sta++;
    break;
    case 10:
      list1_on(1);list2_on(4);list3_on(1);
      delay(N);
    sta++;
    break;
    case 11:
      list1_on(2);list2_on(2);list3_on(2);
      delay(N);
    sta++;
    break;
    case 12:
      list1_on(3);list2_on(1);list3_on(3);
      delay(N);
    sta++;
    break;
    case 13:
      list1_on(2);list2_on(2);list3_on(4);
      delay(N);
    sta++;
    break;
    case 14:
      list1_on(1);list2_on(3);list3_on(5);
      delay(N);
    sta++;
    break;
    case 15:
      list1_on(2);list2_on(4);list3_on(6);
      delay(N);
    sta++;
    break;
    case 16:
      list1_on(1);list2_on(1);list3_on(1);
      delay(N);
    sta++;
    break;
    case 17:
      list1_on(3);list2_on(2);list3_on(2);
      delay(N);
    sta++;
    break;
    case 18:
      list1_on(2);list2_on(1);list3_on(3);
      delay(N);
    sta++;
    break;
    case 19:
      list1_on(4);list2_on(2);list3_on(4);
      delay(N);
    sta++;
    break;
    case 20:
      list1_on(2);list2_on(3);list3_on(2);
      delay(N);
    sta++;
    break;
    case 21:
      list1_on(3);list2_on(1);list3_on(3);
      delay(N);
    sta++;
    break;
    case 22:
      list1_on(4);list2_on(2);list3_on(4);
      delay(N);
    sta++;
    break;
    case 23:
      list1_on(5);list2_on(3);list3_on(1);
      delay(N);
    sta++;
    break;
    case 24:
      list1_on(6);list2_on(4);list3_on(2);
      delay(N);
    sta++;
    break;
    case 25:
      list1_on(1);list2_on(5);list3_on(3);
      delay(N);
    sta++;
    break;
    case 26:
      list1_on(2);list2_on(6);list3_on(4);
      delay(N);
    sta++;
    break;
    case 27:
      list1_on(3);list2_on(2);list3_on(1);
      delay(N);
    sta++;
    break;
    case 28:
      list1_on(1);list2_on(3);list3_on(2);
      delay(N);
    sta++;
    break;
    case 29:
      list1_on(2);list2_on(1);list3_on(3);
      delay(N);
    sta++;
    break;
    case 30:
      list1_on(3);list2_on(2);list3_on(4);
      delay(N);
    sta++;
    break;
    default:
      sta = 0;
    break;
   
  }
}
上面的代码是sta从0到30反复执行,delay是软件延时函数。
现在调试的时候发现一个问题,如图

为什么case中的delay函数和sta++;语句到不了???是什么原因呢??
我用了n76e003 APROM program DATAFLASH as EEPROM,跟这个FLASH当EEPROM有关系吗?
百思不得其解啊。。。。网上找了几天了。
因为要用到掉电**,所以刚开始的时候用的官方EEPROM教程,出现问题了,后来在论坛找了一个前辈写的EEPROm代码,还是有问题,不过不知道是不是这个问题。




使用特权

评论回复
沙发
liuje| | 2020-11-16 18:51 | 只看该作者
猜測是代碼優化設置的關係.    事實上是會運行該命令的, 但代碼被合併到其它地方運行了.
因此單步跟蹤時, 會以為完全不運行該命令.      按下列方式調整一下應可解決你的問題.



使用特权

评论回复
板凳
发呆二极管| | 2020-11-16 21:45 | 只看该作者
大哥你确定不是你的代码有问题吗?局部变量sta是每次进入函数才有的,而且这个函数体里面没有循环,无论是你单次执行还是函数外用循环包裹多次运行,他永远都只会执行case 0这个条件啊

使用特权

评论回复
地板
jasontu| | 2020-11-17 07:47 | 只看该作者
同意最佳化的原因。
可以加上串口打印字串,看状态是否都有满足。

使用特权

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

本版积分规则

2038

主题

7364

帖子

10

粉丝