概述
一、前言
- 刚步入社会工作,只是想把自己做的事情做一个记录,同时也可以分享给网友,虽然都是些基础,但领导说得很对,细节非常重要;
- 本测试程序非常简单,对本人来说,意义在于读取电池放电的采样数据,然后把得到的离散数据用excel绘制成一条放电曲线,找到电池满电以及空点的临界点,最后应用到应用层的电池充放电的图标绘制;
二、代码说明
1. 打开要保存文件的方式
linux环境支持的文件打开的几种方式,可以用man fopen进行查看,如下:
跟我在以前谭浩强C语言课本中看到的有点不一样,还有b选项,我采用的是“a+”模式,当文件关闭后,可以继续追加写;
fp = fopen("/usr/value_ad.txt","a+");
2. 整数转换字符串再存取
开始准备fwrite()进行写操作的,后来发现还是把整数转换成字符串存入文件更方便,经查阅资料发现,非linux环境下的整数转换字符串除了支持 sprintf()函数外,还支持itoa()函数,在此针对linux环境就只采用sprintf()函数;
通过fputs()函数进行写,需添加头文件#include
sprintf(str,"%d",data);
fputs(str,fp);
3. linux环境与windows环境的换行格式的差别
在每次写一个字符窜数据之后,都要写一个换行符,如果采用如下代码:
fputs("n",fp);
在linux打开保存的文件如下:
但在windows下面打开该文件的数据排版如下:
解决该问题的方法如下:
利用“rn”替换“n”,即
fputs("rn",fp);
源码及测试
以下源码为我单独编写的,思路都是一样,数据来源不一样而已;
#include <stdio.h>
#include <stdlib.h>
#define READ_DATA_COUNT 20
#define OPEN_FILE_COUNT 5
int main(int argc,char **argv){
int data = 222;//模拟读取的数据
int count = 0;//记录所读取数据的次数,再进行存取操作
int saveData_perOpen = 0;//每次打开设备文件所要所存数据的数量
char str[25];
FILE *fp;
if((fp = fopen("/usr/value_ad.txt","a+")) == NULL)//打开设备文件
{
printf("cannot open this filen");
return 0;
}
//如果自己测试就把while(1)改成有限循环来执行;
while(1){//因为要测试电池的AD值,并不知道循环具体的终止条件,那么就让嵌入式设备自动关机来结束
data++;
count++;
if(count%READ_DATA_COUNT == 0){//因为采样的数据频率快,我选择每读取20个数据存一次
printf("%dn", data);
sprintf(str,"%d",data);//整数转换字符串
if(fputs(str,fp) == '