EEPROM 擦除数据 不能跳出CASE语句 | 已解决
case 5:EEPROM_SectorErase(EEPROM_ADD_1);
printf("Erase_j ok \r\n");
break;
串口打印的数据:
接收←Erase_j okErase_j ok
接收←Erase_j okErase_j ok
接收←Erase_j okErase_j ok
....
一直打印,为何执行完一次擦除不跳出case语句(stc8g1k08)
放代码要放全0.0别让我们猜
感觉像是你这个判断条件没有被改变,循环里一直在执行 switch (g_card_cnt)
{
case 3:
if(j_card==0 && j_card==0 && j_card==0 && j_card==0 && j_card==0 &&
j_card==0 && j_card==0 && j_card==0 && j_card==0 && j_card==0 )
{
set_j_card();
}
break;
case 5:
EEPROM_SectorErase(EEPROM_ADD_1);
printf("Erase_j ok \r\n");
break;
default:
break;
}
g_card_cnt 是刷卡的次数,刷一次变一下 lier378912453 发表于 2024-2-6 09:25
switch (g_card_cnt)
{
case 3:
那你这个,,,不刷卡不就一直是g_card_cnt==5 么 一直走这个分支不是也正常么 但是 case3语句 完成时,直接break跳转了,case 5语句 执行时 g_card_cnt自加1,它也跳转不出去,一直擦除 lier378912453 发表于 2024-2-6 09:47
但是 case3语句 完成时,直接break跳转了,case 5语句 执行时 g_card_cnt自加1,它也跳转不出去,一直擦除 ...
不应该,,应该不会是case这里的问题,,感觉可能是别的地方又把这个条件改成5
你可以尝试把其他所有程序都 注释掉,,只留下这个switch 这里,,在测试一下,,
程序应该正确烧录了把 lier378912453 发表于 2024-2-6 09:47
但是 case3语句 完成时,直接break跳转了,case 5语句 执行时 g_card_cnt自加1,它也跳转不出去,一直擦除 ...
你要是说在case 5 里面加入了g_card_cnt 自增如果没有其它地方改变这个g_card_cnt变量 那就永远不会再进case5 所以要么是应该还有别的地方改变了这个变量。。要么就是程序烧写的时候还是原来的程序 还有如果这个单片机支持调试的话 debug看看 你的变量是怎么变化的 串口一直打印 g_card_cnt 这个变量的数值看一下呗
还有一种可能是:g_card_cnt=5时进入Case 5执行EEPROM_SectorErase(EEPROM_ADD_1),但擦除过程事件很长,擦除过程是需要关闭其他中断的,这期间你刷卡不起作用,擦除完成后你还没来得及刷卡又进入了case 5。
最好能贴上你的代码,否则大家只能猜
页:
[1]
2