WCH沁恒单片机
直播中

赵淑洁

8年用户 1000经验值
私信 关注
[问答]

ch376存csv的格式不对是什么原因?

存的时候出现乱码,以及格式不对。现在程序存的是hello word,但存进去的还有之前程序存的内容。
有没有遇到过这个情况的大神呀

case CH376_STATU_5_WaitCMD:
    if(CH376_istimeOut()){
        if(ch376.statu_prv == CH376_STATU_4_DiskMount){
                CH376_STATU_Jump(CH376_STATU_6_FileOpen,TIMEOUT_200MS);//检查后直接打开文件
                ch376.Try_Ctr = 0;
         }else if(ch376.statu_prv == CH376_STATU_8_FileClose){
                if(1){//有读取指令
                    CH376_Printf("CH376---sta5--New CMD
");//
                    CH376_STATU_Jump(CH376_STATU_6_FileOpen,TIMEOUT_200MS);  
                 }
          }
    }
break;
case CH376_STATU_6_FileOpen:
    if(CH376_isTimeOut()){
        ch376.Try_Ctr ++;
        CH376_Printf("CH376---sta6--打开文件
");//打开文件
        Date_File_to_String(Str);
        sys.u8_test = CH376FileOpenPath(Str);//查看文件存不存在
        if(sys.u8_test == 0x22){
                if(ch376.Try_Ctr <= 5){
                CH376_STATU_Jump(CH376_STATU_6_FileOpen,TIMEOUT_200MS);
                break;
                }
        }
        if(ERR_MISS_FILE == sys.u8_test){
            sys.u8_test = CH376FileCreatePath(Str);
            CH376_STATU_Jump(CH376_STATU_7_ByteWrite,TIMEOUT_200MS);
            ch376.Try_Ctr = 0;
        }else{
            sys.u8_test = CH376ByteLocate(0xFFFFFFFF);//移动文件指针到文件末尾
            CH376_STATU_Jump(CH376_STATU_7_ByteWrite,TIMEOUT_200MS);
            ch376.Try_Ctr = 0;
        }
    }
break;
case CH376_STATU_7_ByteWrite:
        if(CH376_isTimeOut()){
  CH376_Printf("CH376---sta7--写入数据
");//打开文件  
  sys.u8_test=CH376ByteWrite("Hello wold!",sizeof("Hello wold!"),NULL); // 以字节为单位向当前位置写入数据块
          if(sys.u8_test == 0x22){
            if(ch376.Try_Ctr <= 5){
              num_flag--;
              CH376_STATU_Jump(CH376_STATU_7_ByteWrite,TIMEOUT_200MS);
              break;
            }
          }
          CH376_STATU_Jump(CH376_STATU_8_FileClose,TIMEOUT_200MS);
          ch376.Try_Ctr = 0;
        }
break;
case CH376_STATU_8_FileClose:
    if(CH376_isTimeOut()){
        CH376_Printf("CH376---sta8--关闭文件,并等待下次命令
");//打开文件
        sys.u8_test=CH376FileClose(TRUE);// 关闭文件,对于字节读写建议自动更新文件长度
        if(sys.u8_test == 0x22){
            if(ch376.Try_Ctr <= 5){
                CH376_STATU_Jump(CH376_STATU_8_FileClose,TIMEOUT_200MS);
                break;
            }
        }
        CH376_STATU_Jump(CH376_STATU_5_WaitCMD,TIMEOUT_200MS);
    }
break;
default:
break;
}

  
  

回帖(1)

张桂芳

2022-7-8 10:21:25
您好,可以看一下BYTE_WRITE函数最后一个参数返回的实际写入长度每次是不是都一样,还有这个是每一个操作函数本身,无法看到外部调用逻辑。
通常一个文件在打开之后,多次写入之间不需要反复的开关文件,可以连续写入。
文件写入结束之后调用FILE_CLOSE,完成之后可以在调用手册2中的DISK_READY命令用来将U盘中数据进行真正的刷新。
针对这个出错的文件,可以用支持HEX形式查看的软件看一下这个文件具体的数据组成是怎么样,可以用来分析代码和376的行为
举报

更多回帖

发帖
×
20
完善资料,
赚取积分