我用的是imx6q开发板,使用eim读取fpga数据,fpga位宽16bit。一次要读取50400个字。等于一次要向SSD写入50400个字节,我看了下没有超过一次write的最大字节数。
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
/* file management */
#include <sys/stat.h>
#include <fcntl.h>
/* sleep, write(), read() */
#include <unistd.h>
#define FPGA_BYTE 504000
typedef unsigned char uint8
typedef unsigned short uint16
typedef unsigned int uint32
/*extern*/
extern uint16 FPGA_buf[252000];
/*
*@function:采集数据到固态硬盘
*/
uint8 DataToDisk()
{
uint32 savefd;
uint32 savefw;
if((savefd=open(txtfile,FLAGS,MODE)) < 0) //txtfile:以当前时间命名文件名。
{
return -1;
}
if((savefw=write(savefd,(char*)FPGA_buf,FPGA_BYTE)) < 0)
{
return -1;
}
return 0;
}
我查阅了一些资料,尝试过更改编码格式,比如utf-8,但依然是乱码。
又尝试过使用fopen,fprintf进行写操作,发现写入字节数不对。
显示正确的数据,比如504000个数字等
补充一下,要不要用文本格式显示,取决于数据用途,如果是给人看,那当然建议用文本格式,而且你还不能简单的转成字符串就完了,还得加上一些补充文本说明,否则人看到一大串数字也搞不清楚。
如果是给电脑软件做进一步处理,那可以用二进制格式,但是建议加上一个文件头,里面有格式符,校验,长度等信息,方便电脑软件对数据做一些预处理。
折中的格式是CSV,一种表格格式,既方便人看,也方便电脑处理,格式也简单,单片机好处理
可能你写的数据就不是文本数据,比如你用fwrite写个12进去,用记事本打开不可能看到12, 你要写字符串“12”才可以。看你说数据来自FPGA,我估计多半不是文本数据了。
既然你尝试过fprintf,那应该知道是文本格式的问题了吧,长度不对,这个很好理解吧,比如一个整数10000,你用二进制写,也就两个字节,转成字符串,就是5个字节了,不同大小的数,长度还不一样。
我觉得你是C语言最基础的数据类型都还没弄清楚。