From 5816baef54f974060225d38eb73f6fe29cfe8103 Mon Sep 17 00:00:00 2001 From: "CSSC-WORK\\murmur" Date: Fri, 28 Jul 2023 16:29:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B8=85=E7=90=86=E4=BA=86=E9=83=A8=E5=88=86?= =?UTF-8?q?=E6=97=A0=E7=94=A8=E4=BB=A3=E7=A0=81=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E4=BA=86=E9=83=A8=E5=88=86=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .config | 4 +- applications/TODO.md | 5 +- applications/_main.c | 244 ++++++++++++++++++++++++++++++++----- applications/alarmer.c | 3 +- applications/cfg.ini | 13 +- applications/func/func.c | 19 ++- applications/main.c | 8 +- applications/tools.c | 116 +++++++----------- applications/ttTR.c | 3 +- applications/ttmsg/ttmsg.c | 22 ++-- applications/uart_3S.c | 51 ++------ applications/usrcfg.h | 3 + rtconfig.h | 3 +- 13 files changed, 312 insertions(+), 182 deletions(-) diff --git a/.config b/.config index 8c7129f..0304d61 100644 --- a/.config +++ b/.config @@ -17,7 +17,7 @@ CONFIG_RT_USING_HOOK=y CONFIG_RT_HOOK_USING_FUNC_PTR=y CONFIG_RT_USING_IDLE_HOOK=y CONFIG_RT_IDLE_HOOK_LIST_SIZE=4 -CONFIG_IDLE_THREAD_STACK_SIZE=256 +CONFIG_IDLE_THREAD_STACK_SIZE=512 CONFIG_RT_USING_TIMER_SOFT=y CONFIG_RT_TIMER_THREAD_PRIO=4 CONFIG_RT_TIMER_THREAD_STACK_SIZE=512 @@ -340,7 +340,7 @@ CONFIG_ULOG_LINE_BUF_SIZE=256 # # log format # -CONFIG_ULOG_OUTPUT_FLOAT=y +# CONFIG_ULOG_OUTPUT_FLOAT is not set CONFIG_ULOG_USING_COLOR=y CONFIG_ULOG_OUTPUT_TIME=y CONFIG_ULOG_TIME_USING_TIMESTAMP=y diff --git a/applications/TODO.md b/applications/TODO.md index 6d29713..6e0c2d1 100644 --- a/applications/TODO.md +++ b/applications/TODO.md @@ -1,3 +1,2 @@ - -- TT接收数据 -- 完成开窗功能 \ No newline at end of file +--解决关闭TT时异常重启的问题 +--配置文件更新,配置上传下载 \ No newline at end of file diff --git a/applications/_main.c b/applications/_main.c index 4f6abb1..5326080 100644 --- a/applications/_main.c +++ b/applications/_main.c @@ -6,6 +6,7 @@ * Change Logs: * Date Author Notes * 2023-06-01 murmur the first version + * 处理TT相关的初始化、状态切换等逻辑 */ #include @@ -18,15 +19,80 @@ //#include #include #include + static struct rt_event sw_check; //软件条件 static struct rt_event hw_check; //硬件条件 -extern rt_sem_t TTReady; + #define ALL_READY 1 static int maxTTWaitTime = 4; static int maxTTRetryCnt = 3; + + +rt_sem_t TTReady= RT_NULL;//天通具备发送状态后 rt_sem_release(TTReady); +rt_sem_t cfgUpdate = RT_NULL; +rt_sem_t shuntDownTT = RT_NULL; + + +void TTisReady(void) +{ + rt_sem_release(TTReady); +} + +SYS_CFG scfg={ + .sendInterval =60, + .maxTTWaitTime = 4, + .maxTTRetryCnt = 3, + .minTTPeriCnt=5, + .minTTsinal=5, + .timeout=5 +}; + + + +/** + * 更新全局参数 + */ +static void updatecfg(void) +{ +//因为不知原因,采用事件集独立更新配置出错,无精力深查 +//独立响应单个参数更新事件,程序上更复杂也没特别必要 +//现采用事件通知、统一全部重新加载 + while(1) + { + if(rt_sem_take(cfgUpdate, RT_WAITING_FOREVER) == RT_EOK) + { + scfg.maxTTWaitTime = get_cfg("maxTTWaitTime"); + scfg.maxTTRetryCnt = get_cfg("maxTTRetryCnt"); + scfg.minTTPeriCnt = get_cfg("minTTPeriCnt"); + scfg.minTTsinal = get_cfg("minTTsinal"); + scfg.timeout = get_cfg("timeout"); + } + LOG_D("cfg updated."); + } +} + + +void sysSemInit() +{ + TTReady = rt_sem_create("TTisReady", 0, RT_IPC_FLAG_PRIO); + cfgUpdate = rt_sem_create("cfgUpdate", 0, RT_IPC_FLAG_PRIO); + shuntDownTT = rt_sem_create("shuntDNTT", 0, RT_IPC_FLAG_PRIO); + rt_sem_release(cfgUpdate); //上电更新值 + updatecfg(); +// LOG_D("sysSemInit DONE."); +} + + + + + + + + + static void initEvent(void) { /* 事 件 控 制 块 */ @@ -49,19 +115,17 @@ void upTTflag(void) { rt_event_send(&sw_check, TT_IS_OK); } - -/** - * 更新各参数 - */ -static void updatecfg() +void d_upSWflag() { - maxTTWaitTime = get_cfg("maxTTWaitTime"); - maxTTRetryCnt = get_cfg("maxTTRetryCnt"); +// extern struct rt_event sw_check;//软件条件 +// rt_event_send(&sw_check, FILE_IS_OK); +// void upSWflag(void); + upSWflag(); } -//INIT_COMPONENT_EXPORT(t3); -extern void ttinfoInit(void); -extern void startTTinfo(void); + +//extern void ttinfoInit(void); +//extern void startTTinfo(void); /** * 监控TT状态。需求条件1:TT连续5个周期为激活状态且信号强度不低于5。 */ @@ -199,13 +263,81 @@ void chkAndSendFile() } //INIT_COMPONENT_EXPORT(smsg); +static rt_timer_t tmrToPNTT=RT_NULL; +static int isInWindow=0;//winow 关闭时复位 +/** + * 关闭超时定时器,定时时间到后关闭TT + */ +void stopTM() +{ + if (!tmrToPNTT) { + return; + } + rt_timer_stop(tmrToPNTT); + rt_timer_stop(tmrToPNTT); +} +/** + * 重启超时定时器,定时时间到后关闭TT + */ +void resetTM() +{ +// LOG_D("try to reset"); + if (tmrToPNTT == RT_NULL) { + return; + } + if (isInWindow) { + stopTM(); + return; + } + rt_tick_t t= 10*1000;//rt_tick_from_millisecond(scfg.timeout*60*1000); + rt_timer_control(tmrToPNTT, RT_TIMER_CTRL_SET_TIME,(void*) &t); + rt_timer_stop(tmrToPNTT); + rt_timer_start(tmrToPNTT); +// LOG_D("timer reseted."); +} +void d_getRemain() +{ + LOG_D("=%d=",rt_tick_from_millisecond(10*60*1000)); + rt_tick_t *arg1,*arg2; + arg1=rt_timer_control(tmrToPNTT, RT_TIMER_CTRL_GET_TIME, (void*)arg1); + arg2=rt_timer_control(tmrToPNTT, RT_TIMER_CTRL_GET_REMAIN_TIME, (void*)arg2); + LOG_D("tm=%d-%d",&arg1,&arg2); +} +static int toPN=0; +/* 定时器超时函数 */ +static void timeoutFunc(void *parameter) +{ +// rt_kprintf("periodic timer is timeout %d\n", cnt); + + +// rt_timer_stop(timer1); + LOG_W("3s to shunt down TT"); + rt_thread_mdelay(1000); + LOG_W("2s to shunt down TT"); + rt_thread_mdelay(1000); + LOG_W("1s to shunt down TT"); + rt_thread_mdelay(1000); + deInitTT();//Function[rt_mutex_take] shall not be used in ISR +// rt_sem_release(shuntDownTT); +// toPN =1; +} + +//RT_TICK_PER_SECOND //tcp连接保活 //实际场景不存在中间断掉的可能 void initTT_thread_entry() { + pwTT_thread_entry("1"); + while (1) { + if (!tmrToPNTT) { + tmrToPNTT = rt_timer_create("TTtimeout", timeoutFunc, + RT_NULL, rt_tick_from_millisecond(scfg.timeout*60*1000), + RT_TIMER_FLAG_ONE_SHOT);//RT_TIMER_FLAG_SOFT_TIMER +// rt_timer_start(tmrToPNTT); + } if (!isTTon()) { break; } @@ -224,42 +356,98 @@ void initTT_thread_entry() // rt_thread_mdelay(1000); if (isTCPok()) { - LOG_D("TT server is ready."); + LOG_D("TCP is ready."); tcpRecMQ(); //开启tcp接收线程 recTT(); } } rt_thread_mdelay(3000); //chk with 3 second interval -// LOG_D("rechk-%d",isTCPok()); } } + + +void deInitTT_thread_entry() +{ + + if (rt_sem_take(shuntDownTT, RT_WAITING_FOREVER) == RT_EOK) +// if (toPN) + { + pwTT_thread_entry("0"); + rt_hw_stm32_eth_deinit(); //qu激活网口 + if (tmrToPNTT) + { + rt_timer_delete(tmrToPNTT); //关闭倒计时 + tmrToPNTT = RT_NULL; + } + tcpClose(); + LOG_W("shunt down TT DONE"); +// break; + } +// rt_thread_mdelay(1000); +// } +} +//INIT_APP_EXPORT(deInitTT_thread_entry); + +/** + * TT上电,初始化TT相关的网络、TCP等,并保活 + */ void initTT() { /* 创建 serial 线程 */ - rt_thread_t thread = rt_thread_create("initTT", initTT_thread_entry, RT_NULL, 1024 * 1.5, 24, 10); - /* 创建成功则启动线程 */ - if (thread != RT_NULL) - { - rt_thread_startup(thread); - } - else - { - LOG_E("thread 'initTT' create failure."); - return; - } + rt_thread_t thread = rt_thread_create("initTT", initTT_thread_entry, RT_NULL, 1024 * 1.5, 20, 10); + /* 创建成功则启动线程 */ + if (thread != RT_NULL) + { + rt_thread_startup(thread); + } + else + { + LOG_E("thread 'initTT' create failure."); + return; + } + + /* 创建 serial 线程 */ + thread = rt_thread_create("deInitTT", deInitTT_thread_entry, RT_NULL, 1024 * 2, 30, 10); + /* 创建成功则启动线程 */ + if (thread != RT_NULL) + { + rt_thread_startup(thread); + } + else + { + LOG_E("thread 'deInitTT' create failure."); + return; + } } +/** + * TT上电,初始化TT相关的网络、TCP等,并保活 + */ void deInitTT() { - tcpClose(); - rt_hw_stm32_eth_deinit(); //qu激活网口 +// /* 创建 serial 线程 */ +// rt_thread_t thread = rt_thread_create("deInitTT", deInitTT_thread_entry, RT_NULL, 1024 * 2, 30, 10); +// /* 创建成功则启动线程 */ +// if (thread != RT_NULL) +// { +// rt_thread_startup(thread); +// } +// else +// { +// LOG_E("thread 'initTT' create failure."); +// return; +// } + rt_sem_release(shuntDownTT); } +//INIT_APP_EXPORT(deInitTT); #define FUNC_DEMO #ifdef FUNC_DEMO //测试时导出命令到控制台 +MSH_CMD_EXPORT(d_upSWflag,FILE_IS_OK); MSH_CMD_EXPORT(chkAndSendFile, chkAndSendFile); MSH_CMD_EXPORT(upSendFile, upSendFile); -MSH_CMD_EXPORT(initTT,初始化tcp连接); -MSH_CMD_EXPORT(deInitTT,初始化tcp连接); +MSH_CMD_EXPORT(initTT,初始化TT); +MSH_CMD_EXPORT(deInitTT,初始化TT); +MSH_CMD_EXPORT(d_getRemain,d_getRemain); #endif diff --git a/applications/alarmer.c b/applications/alarmer.c index 04bb25b..1bcf053 100644 --- a/applications/alarmer.c +++ b/applications/alarmer.c @@ -123,8 +123,7 @@ void InitAlarm() for (size_t var = 0; var < 4; var++) { if (alarm[var] != RT_NULL) { rt_alarm_start(alarm[var]); -// LOG_D("alarm %d started.",var+1); - LOG_D("alarm %d(%02d:%02d) started.",var+1,alarm[var]->wktime.tm_hour+8,alarm[var]->wktime.tm_min); +// LOG_D("alarm %d(%02d:%02d) started.",var+1,alarm[var]->wktime.tm_hour+8,alarm[var]->wktime.tm_min); } else { LOG_E("Failed to start alarm %d.",var+1); diff --git a/applications/cfg.ini b/applications/cfg.ini index de68628..8ae842b 100644 --- a/applications/cfg.ini +++ b/applications/cfg.ini @@ -1,11 +1,7 @@ [config] -# V1.6 +# V1.7 #发送间隔(M),以零点为基准时刻 sendInterval=60 -# 用于保存串口数据的单文件最大值(Byte) -maxSizePerFile=4096 -# 最长等待数据时间,超时后将已收数据存盘 -MaxTimeoutToSave=20 # 最小文件大小,超过此大小则进入发送流程 minSizeToSend=4096 # 最小等待时间(S),超时后进入待机模式 @@ -21,8 +17,11 @@ minTTPeriCnt=2 compressType=1 encrytType=1 # 开窗时间(UTC+8),持续时间(H)。支持多组,组与组之间采用【;】为分隔符 -openWindowTime=9,1;15,1 - +openWindowTime=1,2,7,8 +#超时定时器时间(M),超时后关闭TT +timeout=5 +commMode=1 +selfDesSW=0 [stats] # 继电器开关次数,影响继电器寿命(<10W次) swCnt=12 diff --git a/applications/func/func.c b/applications/func/func.c index dedfb3d..3f8f414 100644 --- a/applications/func/func.c +++ b/applications/func/func.c @@ -162,12 +162,20 @@ void upSend_thread_entry(void* parameter) LOG_HEX("upSend", 27, dout, rst); if (rst) { + while (!isTCPok()) + { + rt_thread_mdelay(1000); + } if (sendMsg(dout, rst) == RT_EOK) { tcpClose(); LOG_I("send to TT Done."); - - }; + } + else//发送失败,实例不存在此种情况 + { + LOG_E("send error, try to cache %d bytes data to file.",msg->len); + cacheDataToFile(msg->data, msg->len); + } } return 0; } @@ -182,7 +190,7 @@ RT_WEAK int upSend(uint8_t *din, size_t len) LOG_D("try to upsend to TT."); uint8_t sta = 1; - while (0 && !isTTjh()) //判断TT状态 + while (1 && !isTTjh()) //判断TT状态 { static uint8_t trycnt = 0; rt_thread_mdelay(4000); @@ -275,7 +283,7 @@ void setSelfDestructSWT(int setON) { LOG_I("FUNC = set selfdestruct"); //write to cfg file - set_cfg("SelfDesSW", setON); + set_cfg("selfDesSW", setON); LOG_D("set SelfDesSW to %s",setON?"ON":"OFF"); } /** @@ -286,7 +294,7 @@ int getSelfDestructSWT() { LOG_I("FUNC = get selfdestruct"); //load from cfg file - int flag = get_cfg("SelfDesSW"); + int flag = get_cfg("selfDesSW"); if (flag < 0) { LOG_W("get mode fault."); } @@ -1029,7 +1037,6 @@ int isEthUP() - #define FUNC_DEMO #ifdef FUNC_DEMO //测试时导出命令到控制台 diff --git a/applications/main.c b/applications/main.c index 01bb0a7..3760a21 100644 --- a/applications/main.c +++ b/applications/main.c @@ -45,16 +45,12 @@ int main(void) rt_pin_mode(TR485_RE, PIN_MODE_OUTPUT); rt_pin_write(TR485_RE, PIN_LOW); -// rt_pin_write(ETH_RESET_PIN, PIN_LOW);//关闭ETH -// rt_pin_write(TT_EN, PIN_HIGH);//关闭TT - //sysSemInit sysSemInit(); if (isInWindowZone()) {//开机检查是否在开窗区间内,是则给TT开机 - - pwTT_thread_entry("1"); -// initTT(); + initTT(); +// pwTT_thread_entry("1"); } diff --git a/applications/tools.c b/applications/tools.c index 7d96eb5..ae7be8b 100644 --- a/applications/tools.c +++ b/applications/tools.c @@ -7,56 +7,50 @@ //#include #include #include - -rt_sem_t TTReady= RT_NULL;//天通具备发送状态后 rt_sem_release(TTReady); -rt_sem_t cfgUpdate = RT_NULL; - - -//typedef struct +// +//rt_sem_t TTReady= RT_NULL;//天通具备发送状态后 rt_sem_release(TTReady); +//rt_sem_t cfgUpdate = RT_NULL; +// +// +// +//#define _CFGALL +//#ifdef _CFGALL +// +//SYS_CFG scfg={ +// .sendInterval =60, +// .maxTTWaitTime = 4, +// .maxTTRetryCnt = 3, +// .minTTPeriCnt=5, +// .minTTsinal=5, +// .timeout=5; +//}; +// +// +// +///** +// * 更新全局参数 +// */ +//static void updatecfg(void) //{ -// int sendInterval; -// int maxTTWaitTime; -// int maxTTRetryCnt; -// int minTTPeriCnt; -// int minTTsinal; -//} SYS_CFG; - -#define _CFGALL -#ifdef _CFGALL - -SYS_CFG scfg={ - .sendInterval =60, - .maxTTWaitTime = 4, - .maxTTRetryCnt = 3, - .minTTPeriCnt=5, - .minTTsinal=5, -}; - - - -/** - * 更新全局参数 - */ -void updatecfg(void) -{ -//因为不知原因,采用事件集独立更新配置出错,无精力深查 -//独立响应单个参数更新事件,程序上更复杂也没特别必要 -//现采用事件通知、统一全部重新加载 - while(1) - { - if(rt_sem_take(cfgUpdate, RT_WAITING_FOREVER) == RT_EOK) - { - scfg.maxTTWaitTime = get_cfg("maxTTWaitTime"); - scfg.maxTTRetryCnt = get_cfg("maxTTRetryCnt"); - scfg.minTTPeriCnt = get_cfg("minTTPeriCnt"); - scfg.minTTsinal = get_cfg("minTTsinal"); - } - LOG_D("cfg updated."); - } -} - -//INIT_APP_EXPORT(updatecfg); -#endif +////因为不知原因,采用事件集独立更新配置出错,无精力深查 +////独立响应单个参数更新事件,程序上更复杂也没特别必要 +////现采用事件通知、统一全部重新加载 +// while(1) +// { +// if(rt_sem_take(cfgUpdate, RT_WAITING_FOREVER) == RT_EOK) +// { +// scfg.maxTTWaitTime = get_cfg("maxTTWaitTime"); +// scfg.maxTTRetryCnt = get_cfg("maxTTRetryCnt"); +// scfg.minTTPeriCnt = get_cfg("minTTPeriCnt"); +// scfg.minTTsinal = get_cfg("minTTsinal"); +// scfg.timeout = get_cfg("timeout"); +// } +// LOG_D("cfg updated."); +// } +//} +// +////INIT_APP_EXPORT(updatecfg); +//#endif /** @@ -407,30 +401,6 @@ size_t isInByte(uint8_t *din, size_t len, uint8_t *s, size_t slen, uint8_t *dout -void sDemo() -{ -// extern struct rt_event sw_check;//软件条件 -// rt_event_send(&sw_check, FILE_IS_OK); - void upSWflag(void); - upSWflag(); -} - -MSH_CMD_EXPORT(sDemo,喂文件数据); - -void TTisReady(void) -{ - rt_sem_release(TTReady); -} -void sysSemInit() -{ - TTReady = rt_sem_create("TTisReady", 0, RT_IPC_FLAG_PRIO); - cfgUpdate = rt_sem_create("cfgUpdate", 0, RT_IPC_FLAG_PRIO); - rt_sem_release(cfgUpdate); //上电更新值 - LOG_D("sysSemInit DONE."); -} -MSH_CMD_EXPORT(sysSemInit,semInit); -//INIT_APP_EXPORT(sysInit); -INIT_APP_EXPORT(updatecfg); diff --git a/applications/ttTR.c b/applications/ttTR.c index 532865e..662c01f 100644 --- a/applications/ttTR.c +++ b/applications/ttTR.c @@ -178,6 +178,7 @@ void tcpRecMQ_thread_entry(void) { // LOG_D("%d Bytes received.",msg.size); // LOG_HEX("tcpTT", 16, msg.data, msg.size); + resetTM(); int result = rt_mq_send(&TTrx_mq, &msg, sizeof(msg)); if (result == -RT_EFULL) { @@ -189,7 +190,7 @@ void tcpRecMQ_thread_entry(void) { msg.size=0;//收到数据长度为0表示tcp断开 rt_mq_send(&TTrx_mq, &msg, sizeof(msg)); - LOG_E("tcp error, close."); + LOG_W("tcp closed."); tcpClose(); break; } diff --git a/applications/ttmsg/ttmsg.c b/applications/ttmsg/ttmsg.c index 5eda9bd..685842a 100644 --- a/applications/ttmsg/ttmsg.c +++ b/applications/ttmsg/ttmsg.c @@ -473,36 +473,32 @@ void pwTT_thread_entry(void *parameter) int flag = f; if (strcmp(parameter,"NULL")==0)//无参数,状态翻转 { -// LOG_I("null"); -// int f = rt_pin_read(TT_EN); -// rt_pin_write(TT_EN, !f); flag = !f; } else { flag = !(rt_bool_t) atoi(parameter); } -// if ((rt_bool_t)rt_pin_read(TT_EN) != flag) - //目标状态与当前状态一致才响应 -// LOG_D("new sta"); + rt_pin_write(TT_EN, flag);// - if (!flag) { - initTT(); - } - else { - deInitTT(); - } +// if (!flag) { +// initTT(); +// } +// else { +// deInitTT(); +// } if (rt_pin_read(TT_EN))//检查设置后状态 { LOG_I("set TT %s", "OFF");//高电平关断 - add_val("swCnt");//更新统计值 +// add_val("swCnt");//更新统计值 } else { +// add_val("swCnt");//更新统计值 LOG_I("set TT %s", "ON");//低电平开启 } diff --git a/applications/uart_3S.c b/applications/uart_3S.c index f310960..e7686a1 100644 --- a/applications/uart_3S.c +++ b/applications/uart_3S.c @@ -20,7 +20,7 @@ #include #include -#define LOG_TAG "uart" +#define LOG_TAG "RS232" #define LOG_LVL LOG_LVL_DBG #include @@ -29,8 +29,10 @@ #else #define SAMPLE_UART_NAME "uart3" /* 串口设备名称 */ #endif -#define MAX_SIZE_TO_SAVE 1024*2 + +#ifndef MIN_FRAME_LEN #define MIN_FRAME_LEN 10 +#endif /* 串口接收消息结构*/ struct rx_msg { @@ -42,28 +44,15 @@ static rt_device_t serial; /* 消息队列控制块 */ static struct rt_messagequeue rx_mq; -/* 定时器的控制块 */ -static rt_timer_t timer1; - -/* 定时器1超时函数 */ -static void timeout1(void *parameter) -{ -// rt_kprintf("periodic timer is timeout %d\n", cnt); - - -// rt_timer_stop(timer1); - LOG_W("超时未收到新数据。"); - -} - /* 接收数据回调函数 */ static rt_err_t uart_input(rt_device_t dev, rt_size_t size) { + resetTM();//重设超时 struct rx_msg msg; rt_err_t result; - static cachecnt=0; + static rt_size_t cachecnt=0; cachecnt += size; if (cachecnt < MIN_FRAME_LEN) { LOG_W("not enough data, cached and waiting...");//处理半包 @@ -76,14 +65,15 @@ static rt_err_t uart_input(rt_device_t dev, rt_size_t size) if ( result == -RT_EFULL) { /* 消息队列满 */ - rt_kprintf("message queue full!\n"); + LOG_W("message queue full!"); } cachecnt = 0; return result; } + struct rx_msg msg; -extern struct rt_event update_cfg; -extern int time2Str(char *str); +//extern struct rt_event update_cfg; +//extern int time2Str(char *str); static void serial_thread_entry(void *parameter) { @@ -91,31 +81,19 @@ static void serial_thread_entry(void *parameter) rt_err_t result; rt_uint32_t rx_length=0;//单次收到的数据长度 static char rx_buffer[RT_SERIAL_RB_BUFSZ + 1]; - static currLen=0;//已收数据长度 - static char f[30]; - time2Str(f); + while (1) { -//暂定逻辑 -//先创建文件 -//接收数据并存盘 -// rt_memset(&msg, 0, sizeof(msg)); /* 从消息队列中读取消息*/ result = rt_mq_recv(&rx_mq, &msg, sizeof(msg), RT_WAITING_FOREVER); - - if (result == RT_EOK) { - /* 从串口读取数据*/ rx_length = rt_device_read(msg.dev, 0, rx_buffer, msg.size); - currLen += rx_length; - /* 启动定时器1 */ - if (timer1 != RT_NULL) - rt_timer_start(timer1); + LOG_I("%d Bytes received from RS232",rx_length); LOG_HEX("232rx:",16,rx_buffer,rx_length);//print what received. parseRS232(rx_buffer, rx_length); @@ -175,11 +153,6 @@ static int uart_dma_sample(int argc, char *argv[]) rt_device_write(serial, 0, str, sizeof(str)); rt_pin_write(TR485_RE, PIN_LOW); #endif - /* 创建定时器1 周期定时器 */ - timer1 = rt_timer_create("rxtimer", timeout1, - RT_NULL, rt_tick_from_millisecond(5*60*1000), - RT_TIMER_FLAG_PERIODIC); - /* 创建 serial 线程 */ rt_thread_t thread = rt_thread_create("serial", serial_thread_entry, RT_NULL, 1024*5, 25+1, 10); diff --git a/applications/usrcfg.h b/applications/usrcfg.h index 9c4fa97..e364369 100644 --- a/applications/usrcfg.h +++ b/applications/usrcfg.h @@ -12,6 +12,8 @@ #include "cfg.h" +#define MIN_FRAME_LEN 10 + #define WORK_BOARD #define FILE_IS_OK 1 #define TIMER_IS_OUT 1<<1 @@ -34,6 +36,7 @@ typedef struct int minTTsinal; int minActiveTime; int maxActiveTime; + int timeout; } SYS_CFG; //struct rt_event sw_check;//软件条件 diff --git a/rtconfig.h b/rtconfig.h index 3b1f03d..2a0cc18 100644 --- a/rtconfig.h +++ b/rtconfig.h @@ -15,7 +15,7 @@ #define RT_HOOK_USING_FUNC_PTR #define RT_USING_IDLE_HOOK #define RT_IDLE_HOOK_LIST_SIZE 4 -#define IDLE_THREAD_STACK_SIZE 256 +#define IDLE_THREAD_STACK_SIZE 512 #define RT_USING_TIMER_SOFT #define RT_TIMER_THREAD_PRIO 4 #define RT_TIMER_THREAD_STACK_SIZE 512 @@ -207,7 +207,6 @@ /* log format */ -#define ULOG_OUTPUT_FLOAT #define ULOG_USING_COLOR #define ULOG_OUTPUT_TIME #define ULOG_TIME_USING_TIMESTAMP