项目来源
原来记录文件,频率过高会导致数据丢失
因为用sprintf函数会有一个转换的时间,sprintf( buffer, "%d ", pRcvAPData2->Frame_Type );所以就考虑记录二进制文件,提高记录效率。
fdr记录60hz数据
记录后的二进制文件放在MATLAB解码
本文章供自己以后查找学习
参考文章
大端模式和小端模式的区别
https://download.csdn.net/download/weixin_44057803/89001829
参考视频
文本文件和二进制文件
1.什么是文本文件
如果要求在外存(磁盘)上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的文件就是文本文件。
往文件中写入10000这个数,其文本文件格式如下:
2.什么是二进制文件
数据在内存中以二进制的形式存储,如果不加转换的输出到外存(磁盘),就是二进制文件!
二进制文件是按二进制的编码方式来存放文件的。 例如, 数10000的存储形式为:0010 0111 0001
0000只占二个字节。二进制文件虽然也可在屏幕上显示,但其内容无法读懂。具体这个是什么,是根据文本编码显示的符号,其本身还是二进制,不需要深究!
无论是文本文件还是二进制文件,其本质都是二进制存储。
3.文本文件和二进制文件的字节存储
文本文件的字节存储
假定:还是将10000这个数以ASCII码的形式存储在文件中
数10000的二进制形式为:0010 0111 0001
0000只占二个字节,则在储存前我们需要将其转换为ASCII码的形式,即‘1’,‘0’,‘0’,‘0’,‘0’一个ASCII码字符的大小是1byte,所以数字10000的文本文件所占的字节大小为5byte。
二进制文件的字节存储
数据在内存中以二进制的形式存储,不加转换的输出到外存(磁盘)!
二进制文件是按二进制的编码方式来存放文件的。 例如, 数10000的存储形式为:0010 0111 0001 0000
二进制只占二个字节。按照上边说的文本方式,存储ascAll,占用5个字节
4.二进制读写函数
fwrite(将内存中的数据写入文件中)
函数简介:
#include<stdio.h>
int main()
{
FILE* pf = fopen("test.txt", "w");
int a = 10000;
if (pf != NULL)
{
//操作
fwrite(&a, sizeof a, 1, pf);
//关闭
fclose(pf);
}
pf = NULL;
return 0;
}
#include<stdio.h>
int main()
{
FILE* pf = fopen("test.txt", "rb+");
int a = 10000;
int b = 0;
if (pf != NULL)
{
//操作
fwrite(&a, sizeof a, 1, pf);
}
rewind(pf);//回到文本的起始位置
{
//操作
fread(&b, sizeof a, 1, pf);
printf("%d\n", b);
//关闭
fclose(pf);
}
pf = NULL;
return 0;
}
或者你可以用文件系统的f_write和f_read函数,我在IAR工程里面做的用的就是这个,前提是你已经移植了文件系统
5.翻译二进制文件
像这样,二进制文件虽然也可在屏幕上显示,但其内容无法读懂。具体这个是什么,我要怎样才能弄懂呢!别急!接下来教你操作
用下边这个软件解析
下载地址:https://download.csdn.net/download/weixin_44057803/89001829
6.程序验证
验证流程:
写入一定数据保存至二进制文件
在函数初始化时,在将这个文件解出来进行验证
防止记录不对,在MATLAB解码有问题,浪费时间
注意使用结构体时候,取消结构体优化,否则因为内存对齐问题,对解数据造成影响
IAR采用小端模式