lier378912453 发表于 2024-2-6 09:00:45

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)

_奶咖君_ 发表于 2024-2-6 09:07:54

放代码要放全0.0别让我们猜

感觉像是你这个判断条件没有被改变,循环里一直在执行

lier378912453 发表于 2024-2-6 09:25:30

                        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 是刷卡的次数,刷一次变一下

_奶咖君_ 发表于 2024-2-6 09:41:09

lier378912453 发表于 2024-2-6 09:25
switch (g_card_cnt)
                        {
                                case 3:


那你这个,,,不刷卡不就一直是g_card_cnt==5 么 一直走这个分支不是也正常么

lier378912453 发表于 2024-2-6 09:47:26

但是 case3语句 完成时,直接break跳转了,case 5语句 执行时 g_card_cnt自加1,它也跳转不出去,一直擦除

_奶咖君_ 发表于 2024-2-6 10:21:44

lier378912453 发表于 2024-2-6 09:47
但是 case3语句 完成时,直接break跳转了,case 5语句 执行时 g_card_cnt自加1,它也跳转不出去,一直擦除 ...

不应该,,应该不会是case这里的问题,,感觉可能是别的地方又把这个条件改成5
你可以尝试把其他所有程序都 注释掉,,只留下这个switch 这里,,在测试一下,,
程序应该正确烧录了把

_奶咖君_ 发表于 2024-2-6 10:23:50

lier378912453 发表于 2024-2-6 09:47
但是 case3语句 完成时,直接break跳转了,case 5语句 执行时 g_card_cnt自加1,它也跳转不出去,一直擦除 ...

你要是说在case 5 里面加入了g_card_cnt 自增如果没有其它地方改变这个g_card_cnt变量 那就永远不会再进case5 所以要么是应该还有别的地方改变了这个变量。。要么就是程序烧写的时候还是原来的程序

_奶咖君_ 发表于 2024-2-6 10:24:57

还有如果这个单片机支持调试的话 debug看看 你的变量是怎么变化的

电子DIY小家 发表于 2024-2-6 10:58:41

串口一直打印 g_card_cnt 这个变量的数值看一下呗

21cnsound 发表于 2024-2-6 11:13:10

还有一种可能是:g_card_cnt=5时进入Case 5执行EEPROM_SectorErase(EEPROM_ADD_1),但擦除过程事件很长,擦除过程是需要关闭其他中断的,这期间你刷卡不起作用,擦除完成后你还没来得及刷卡又进入了case 5。
最好能贴上你的代码,否则大家只能猜
页: [1] 2
查看完整版本: EEPROM 擦除数据 不能跳出CASE语句 | 已解决