串口接收的數據存入數組,然后把數組截取有效部分,存入SD卡里的一行沒有問題
但是從SD卡讀出這一行之后,重新寫入SD卡就有了問題,經過調試發現,錯誤在於 \n
一直是這一串數據,為什么會出錯呢???
從數組中截取的部分命名為新數組 s[]
從SD卡中讀取的部分為 S[]
s[] 和 S[] 內容是一樣的,但是 S[] 中多了一個 \n
就是因為這個導致數據出錯。錯誤現象::
有很多次寫SD卡的時候插回電腦會提示有錯誤,,,經過查看SD卡里會多出一些莫名奇妙的,看不見的字符
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
用一個指針p 指向數組S[] 然后就可以把數組里的英文變成字符串,然后用下面的函數進行寫入
下面的函數是寫入多行數據
//=================================================================================================
//函數名稱: write_txt 寫sd卡,用於從串口接收的:語言,機器碼,能量組,寫進txt中
//輸入參數: //1;傳進來的參數是從串口過來的ASCII格式,但是中間用數組保存,之后用char*指針指向數組
//輸出參數: // 不知道寫入sd卡的f_write()函數會把ASCII轉換成什么格式
//函數功能: 寫sd卡
//日 期: 2017-11-13
//作 者: GXTon
//=================================================================================================
void write_txt(char *name,char *number,char *zu,char *v)
{
u8 n0,n1,n2,n3,n4,n5,n6,N;
u8 res;
FIL *write;
write=(FIL*)mymalloc(SRAMIN,sizeof(FIL));
res=f_open(write,"0:/01.txt",FA_CREATE_ALWAYS|FA_WRITE); //f_open函數每次打開都回到第一個字節處.
//需要添加報錯的 FA_OPEN_ALWAYS(有就打開)
res=f_lseek(write,write->fsize); //將指針指向文件末
res=res;
n0=f_write(write,name , strlen((const char*)name), &bw); // 寫在txt文件的第一行
n1=f_write(write, "\r\n", sizeof("\r\n")-1, &bw); //換行回車 只要我們每次寫的時候有換行回車就行.
n2=f_write(write,number , strlen((const char*)number), &bw); //寫入
n3=f_write(write, "\r\n", sizeof("\r\n")-1, &bw); //回車換行
n4=f_write(write,zu , strlen((const char*)zu), &bw); //寫入
n5=f_write(write, "\r\n", sizeof("\r\n")-1, &bw); //回車換行
n6=f_write(write,v , strlen((const char*)v), &bw); //寫入能量組號
N=n0*n1*n2*n3*n4*n5*n6;
if(N<1){} //先判斷寫是否成功??????
// {
// printf("\r\n f_puts() fail..\r\n");
// }else{
// printf("\r\n f_puts() success..\r\n");
// }
f_close(write);
}