嵌入式项目实践–多路温度采集控制系统(3)配置文件

本文档对应视频教程多路温度采集系统–配置文件

配置文件使用

菜单程序会读取配置文件数据。

charcmd[16];//命令数据缓冲区load_dev(g_dev);while(1){

主控程序会读取与保存数据。

intinit_sys(void){printf("initsystemstruct,LEDflash.\n");load_dev(g_dev);}g_dev->update_time=cmd.dat;printf("update_time=%d\n",g_dev->update_time);save_dev(g_dev);系统总体数据结构

因为是演示项目,系统功能设计很少,结构体就简单便于实现。后期大家可以实现更多功能,扩展这个结构体。

structst_sys{inttemp_max[DEF_MAX_CHANNEL];//设置每路温度报警最大值floattemp_data[DEF_MAX_CHANNEL];//每路温度charstatus[DEF_MAX_CHANNEL];//每路状态charupdate_time;//网页刷新秒数};配置文件代码

配置文件头文件

#ifndef__TC9000_H_#define__TC9000_H_#defineCONFIG_FILE"tc9000.cfg"//配置文件名#defineON1#defineOFF0#defineDEF_T_UP70//默认温度上限(C)#defineDEF_T_LOW5//默认温度下限(C)#defineDEF_U_TIME5//默认检测间隔时间(s)#defineDEF_MAX_CHANNEL4//采集的路数//系统总体数据结构structst_sys{inttemp_max[DEF_MAX_CHANNEL];//设置每路温度报警最大值floattemp_data[DEF_MAX_CHANNEL];//每路温度charstatus[DEF_MAX_CHANNEL];//每路状态charupdate_time;//网页刷新秒数};intmake_default_config(structst_sys*dev);intsave_dev(structst_sys*dev);intload_dev(structst_sys*dev);#endif


配置文件实现

intmake_default_config(structst_sys*dev){inti;printf("Makedefaultconfiguration.\n");memset(dev,0,sizeof(structst_sys));for(i=0;i<DEF_MAX_CHANNEL;i++){dev->temp_max[i]=DEF_T_UP;dev->temp_data[i]=0;dev->status[i]=0;}dev->update_time=DEF_U_TIME;returnsave_dev(dev);}/*============================================函数名称:save_dev功能:保存系统的配置文件参数:structst_sys*dev返回值:0成功-1失败============================================*/intsave_dev(structst_sys*dev){FILE*fp;if(NULL==(fp=fopen(CONFIG_FILE,"wb"))){printf("Configfileopennull...\n");return-1;}printf("\nSavesystemdata!");fwrite(dev,sizeof(*dev),1,fp);//writefilefclose(fp);return0;}/*============================================函数名称:load_dev功能:创建系统的配置文件参数:structst_sys*dev返回值:0成功-1失败============================================*/intload_dev(structst_sys*dev){FILE*fp;memset(dev,0,sizeof(*dev));if(NULL==(fp=fopen(CONFIG_FILE,"rb"))){printf("[load_dev]fopennull....\n");returnmake_default_config(dev);}if(sizeof(*dev)!=fread(dev,1,sizeof(*dev),fp)){printf("[load_dev+]sizeoferror...\n");fclose(fp);return-1;}fclose(fp);return0;}