CH376 SD卡。数据1ms更新一次,发10次只能存下来3个,如何解决

打开文件以后,写内容如下,其中mb/Time数组是Uint16类型的

       mb[0]=Mbox_DL;
        mb[1]=Mbox_DL>>16;
        mb[2]=Mbox_DH;
        mb[3]=Mbox_DH>>16;
        sprintf(t,"gyro:%X%X",mb[1],mb[0]);
        L=strlen(t);
        sprintf(t+L,"encoder:%X%X",mb[3],mb[2]);
        L=strlen(t);
        sprintf(t+L,"ScanT:%X%X",Time[0],Time[1]);
     
           s=strlen(t);
           s = CH376ByteWrite(t, s, NULL );
           mStopIfError( s );


谢谢

CH376ByteWrite的执行结果成功吗


                           

CH376ByteWrite的执行结果成功吗

                       


不能,我是CAN中断接收数据,中断是1ms来一次,在主函数中查询标志位存储数据。

我为CH376ByteWrite函数的执行结果赋值给一个数组,发10次数,这个数组中只有3个有效值。

现在怀疑是数据没写完就直接进入下一中断,所以把数据覆盖掉了


CH376ByteWrite不是主函数检测到标志才写入的吗?应该不会存在覆盖,最多来不及回漏掉一部分数据存储。

另外你说执行结果不成功,怎么会有三组有效值。执行的返回值是多少?


                           

CH376ByteWrite不是主函数检测到标志才写入的吗?应该不会存在覆盖,最多来不及回漏掉一部分数据存储。

另外你说执行结果不成功,怎么会有三组有效值。执行的返回值是多少?

                       


对,应该是您说的来不及漏掉一部分数据存储,存储的是成功的,这三次返回值都是0x14。

请问有什么解决措施吗?谢谢


给串口数据流建缓冲,如果可以扇区写的话,可以满512字节存储,可以参考CH376EVT-EXAM8


                           

给串口数据流建缓冲,如果可以扇区写的话,可以满512字节存储,可以参考CH376EVT-EXAM8

                       


我是用SD卡存储,应该不能用扇区吧?


那可以开大一点缓冲


                           

那可以开大一点缓冲

                       

请问下开缓冲是什么意思,不太懂,可以具体说一下吗?谢谢


只有登录才能回复,可以选择微信账号登录