找回密码
 立即注册
查看: 489|回复: 14

EEPROM 擦除数据 不能跳出CASE语句 | 已解决

[复制链接]
  • TA的每日心情
    开心
    7 天前
  • 签到天数: 19 天

    [LV.4]偶尔看看III

    3

    主题

    13

    回帖

    123

    积分

    注册会员

    积分
    123
    发表于 2024-2-6 09:00:45 | 显示全部楼层 |阅读模式
    case 5:
           EEPROM_SectorErase(EEPROM_ADD_1);
           printf("Erase_j ok \r\n");
           break;


    串口打印的数据:
    [08:39:34.623]接收←Erase_j okErase_j ok
    [08:39:34.849]接收←Erase_j okErase_j ok
    [08:39:34.986]接收←Erase_j okErase_j ok
    ....
    一直打印,为何执行完一次擦除不跳出case语句(stc8g1k08)

    回复 送花

    使用道具 举报

  • TA的每日心情
    郁闷
    前天 09:49
  • 签到天数: 141 天

    [LV.7]常住居民III

    20

    主题

    1078

    回帖

    2565

    积分

    金牌会员

    积分
    2565
    发表于 2024-2-6 09:07:54 | 显示全部楼层
    放代码要放全0.0  别让我们猜

    感觉像是你这个判断条件没有被改变,循环里一直在执行
    参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
    技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    7 天前
  • 签到天数: 19 天

    [LV.4]偶尔看看III

    3

    主题

    13

    回帖

    123

    积分

    注册会员

    积分
    123
     楼主| 发表于 2024-2-6 09:25:30 | 显示全部楼层
                            switch (g_card_cnt)
                            {
                                    case 3:
                                            if(j_card[0]==0 && j_card[1]==0 && j_card[2]==0 && j_card[3]==0 && j_card[4]==0 &&  
                                                     j_card[5]==0 && j_card[6]==0 && j_card[7]==0 && j_card[8]==0 && j_card[9]==0 )
                                            {
                                                    set_j_card();
                                            }
                                                    break;
                                    case 5:
                                                    EEPROM_SectorErase(EEPROM_ADD_1);
                                                    printf("Erase_j ok \r\n");
                                                    break;
                                    default:
                                                    break;
                            }               
    g_card_cnt 是刷卡的次数,刷一次变一下
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    郁闷
    前天 09:49
  • 签到天数: 141 天

    [LV.7]常住居民III

    20

    主题

    1078

    回帖

    2565

    积分

    金牌会员

    积分
    2565
    发表于 2024-2-6 09:41:09 | 显示全部楼层
    lier378912453 发表于 2024-2-6 09:25
    switch (g_card_cnt)
                            {
                                    case 3:

    那你这个,,,不刷卡不就一直是g_card_cnt==5 么 一直走这个分支不是也正常么
    参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
    技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    7 天前
  • 签到天数: 19 天

    [LV.4]偶尔看看III

    3

    主题

    13

    回帖

    123

    积分

    注册会员

    积分
    123
     楼主| 发表于 2024-2-6 09:47:26 | 显示全部楼层
    但是 case3语句 完成时,直接break跳转了,case 5语句 执行时 g_card_cnt自加1,它也跳转不出去,一直擦除
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    郁闷
    前天 09:49
  • 签到天数: 141 天

    [LV.7]常住居民III

    20

    主题

    1078

    回帖

    2565

    积分

    金牌会员

    积分
    2565
    发表于 2024-2-6 10:21:44 | 显示全部楼层
    lier378912453 发表于 2024-2-6 09:47
    但是 case3语句 完成时,直接break跳转了,case 5语句 执行时 g_card_cnt自加1,它也跳转不出去,一直擦除 ...

    不应该,,应该不会是case这里的问题,,感觉可能是别的地方又把这个条件改成5  
    你可以尝试把其他所有程序都 注释掉,,只留下这个switch 这里,,在测试一下,,
    程序应该正确烧录了把
    参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
    技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    郁闷
    前天 09:49
  • 签到天数: 141 天

    [LV.7]常住居民III

    20

    主题

    1078

    回帖

    2565

    积分

    金牌会员

    积分
    2565
    发表于 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 所以要么是应该还有别的地方改变了这个变量。。要么就是程序烧写的时候还是原来的程序
    参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
    技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    郁闷
    前天 09:49
  • 签到天数: 141 天

    [LV.7]常住居民III

    20

    主题

    1078

    回帖

    2565

    积分

    金牌会员

    积分
    2565
    发表于 2024-2-6 10:24:57 | 显示全部楼层
    还有如果这个单片机支持调试的话 debug看看 你的变量是怎么变化的
    参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
    技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 11:42
  • 签到天数: 100 天

    [LV.6]常住居民II

    41

    主题

    1012

    回帖

    6959

    积分

    荣誉版主

    冲哥视频教程和各种开源资料QQ交流群884047237,可群

    积分
    6959
    QQ
    发表于 2024-2-6 10:58:41 | 显示全部楼层
    串口一直打印 g_card_cnt 这个变量的数值看一下呗
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 08:23
  • 签到天数: 109 天

    [LV.6]常住居民II

    10

    主题

    581

    回帖

    918

    积分

    高级会员

    积分
    918
    发表于 2024-2-6 11:13:10 | 显示全部楼层
    还有一种可能是:g_card_cnt=5时进入Case 5执行EEPROM_SectorErase(EEPROM_ADD_1),但擦除过程事件很长,擦除过程是需要关闭其他中断的,这期间你刷卡不起作用,擦除完成后你还没来得及刷卡又进入了case 5。
    最好能贴上你的代码,否则大家只能猜
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-17 05:36 , Processed in 0.070330 second(s), 66 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表