解决执行deInitTT()时重启的问题
更新cfg部分函数 更新rt_hw_stm32_eth_deinit()函数,解决内存泄露的问题
This commit is contained in:
parent
685e260d23
commit
196e0b23d6
@ -82,8 +82,10 @@ 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_event_init(&chkSta, "chkSta", RT_IPC_FLAG_PRIO);
|
||||
rt_sem_release(cfgUpdate); //上电更新值
|
||||
updatecfg();
|
||||
|
||||
// LOG_D("sysSemInit DONE.");
|
||||
}
|
||||
|
||||
@ -95,7 +97,7 @@ void sysSemInit()
|
||||
|
||||
|
||||
|
||||
static void sysEventInit(void)
|
||||
void sysEventInit(void)
|
||||
{
|
||||
rt_err_t result = rt_event_init(&chkSta, "chkSta", RT_IPC_FLAG_PRIO);
|
||||
|
||||
@ -108,21 +110,24 @@ static void sysEventInit(void)
|
||||
void sysInit(void)
|
||||
{
|
||||
sysSemInit();
|
||||
sysEventInit();
|
||||
// sysEventInit();
|
||||
}
|
||||
//INIT_COMPONENT_EXPORT(sysInit);
|
||||
|
||||
void timerIsReady(void)
|
||||
{
|
||||
rt_event_send(&sysInit, TIMER_IS_OUT);
|
||||
rt_event_send(&chkSta, TIMER_IS_OUT);
|
||||
stopTM();
|
||||
}
|
||||
void fileIsReady(void)
|
||||
{
|
||||
rt_event_send(&sysInit, FILE_IS_OK);
|
||||
rt_event_send(&chkSta, FILE_IS_OK);
|
||||
stopTM();
|
||||
}
|
||||
void TTIsReady(void)
|
||||
{
|
||||
rt_event_send(&sysInit, TT_IS_OK);
|
||||
rt_event_send(&chkSta, TT_IS_OK);
|
||||
stopTM();
|
||||
}
|
||||
void d_upSta()
|
||||
{
|
||||
@ -185,7 +190,7 @@ void upSendFile(const char *f, int index)
|
||||
info.index = index;
|
||||
|
||||
/* 创建 serial 线程 */
|
||||
rt_thread_t thread = rt_thread_create("upSendFile", upSendFile_thread_entry, (void *) &info, 1024 * 12, 27, 10);
|
||||
rt_thread_t thread = rt_thread_create("upSendFile", upSendFile_thread_entry, (void *) &info, 1024 * 5, 27, 10);
|
||||
/* 创建成功则启动线程 */
|
||||
if (thread != RT_NULL)
|
||||
{
|
||||
@ -225,13 +230,12 @@ void getAndSendFile()
|
||||
|
||||
static void chkAndSendFile_thread_entry()
|
||||
{
|
||||
while (1)
|
||||
while (1 && isTTon())
|
||||
{
|
||||
// int e;
|
||||
LOG_I("等待文件就绪(或定时%d分钟超时)",scfg.sendInterval);
|
||||
int rst = rt_event_recv(&chkSta, FILE_IS_OK | TIMER_IS_OUT, RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR,
|
||||
RT_WAITING_FOREVER, RT_NULL);
|
||||
if (rst == RT_EOK) //条件1满足
|
||||
if (rt_event_recv(&chkSta, FILE_IS_OK | TIMER_IS_OUT, RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR,
|
||||
RT_WAITING_FOREVER, RT_NULL) == RT_EOK) //条件1满足
|
||||
{
|
||||
LOG_I("等待TT就绪");
|
||||
}
|
||||
@ -239,7 +243,7 @@ static void chkAndSendFile_thread_entry()
|
||||
for (size_t var = 0; var < scfg.maxTTRetryCnt; var++) //轮询尝试
|
||||
{
|
||||
LOG_I("第%d/%d次尝试。", var + 1,scfg.maxTTRetryCnt);
|
||||
rst = rt_event_recv(&chkSta, TT_IS_OK, RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR, rt_tick_from_millisecond(scfg.maxTTWaitTime*60*1000),
|
||||
int rst = rt_event_recv(&chkSta, TT_IS_OK, RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR, rt_tick_from_millisecond(scfg.maxTTWaitTime*60*1000),
|
||||
RT_NULL);
|
||||
// rst = rt_sem_take(TTReady, rt_tick_from_millisecond(maxTTWaitTime * 60 * 1000));
|
||||
if (rst == RT_EOK) //条件2满足
|
||||
@ -257,6 +261,7 @@ static void chkAndSendFile_thread_entry()
|
||||
// continue;
|
||||
}
|
||||
}
|
||||
LOG_E("TT失败");
|
||||
|
||||
//continue;
|
||||
//发送数据
|
||||
@ -322,7 +327,7 @@ void resetTM()
|
||||
rt_timer_control(tmrToPNTT, RT_TIMER_CTRL_SET_TIME,(void*) &t);
|
||||
rt_timer_stop(tmrToPNTT);
|
||||
rt_timer_start(tmrToPNTT);
|
||||
// LOG_D("timer reseted.");
|
||||
LOG_D("%d minutes from now to power down TT.",scfg.timeout);
|
||||
}
|
||||
void d_getRemain()
|
||||
{
|
||||
@ -336,19 +341,10 @@ void d_getRemain()
|
||||
/* 定时器超时函数 */
|
||||
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);
|
||||
LOG_W("time to shunt down TT");
|
||||
// rt_thread_mdelay(3000);// no delay
|
||||
deInitTT();//Function[rt_mutex_take] shall not be used in ISR
|
||||
// rt_sem_release(shuntDownTT);
|
||||
// toPN =1;
|
||||
// list_thread();
|
||||
}
|
||||
|
||||
//RT_TICK_PER_SECOND
|
||||
@ -358,17 +354,18 @@ void initTT_thread_entry()
|
||||
{
|
||||
pwTT_thread_entry("1");
|
||||
|
||||
while (1)
|
||||
while (1 && isTTon())
|
||||
{
|
||||
if (!isTTon()) {
|
||||
break;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
if (!isEthUP())
|
||||
{ //只初始化一次
|
||||
LOG_D("init eth...");
|
||||
@ -387,6 +384,7 @@ void initTT_thread_entry()
|
||||
LOG_D("TCP is ready.");
|
||||
tcpRecMQ(); //开启tcp接收线程
|
||||
recTT();
|
||||
chkAndSendFile();
|
||||
}
|
||||
}
|
||||
|
||||
@ -397,23 +395,19 @@ void initTT_thread_entry()
|
||||
|
||||
void deInitTT_thread_entry()
|
||||
{
|
||||
|
||||
if (rt_sem_take(shuntDownTT, RT_WAITING_FOREVER) == RT_EOK)
|
||||
// if (toPN)
|
||||
{
|
||||
pwTT_thread_entry("0");
|
||||
tcpClose();
|
||||
rt_hw_stm32_eth_deinit(); //qu激活网口
|
||||
if (tmrToPNTT)
|
||||
|
||||
pwTT_thread_entry("0");
|
||||
if (0&& 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);
|
||||
|
||||
@ -473,6 +467,7 @@ void deInitTT()
|
||||
#define FUNC_DEMO
|
||||
#ifdef FUNC_DEMO //测试时导出命令到控制台
|
||||
MSH_CMD_EXPORT(d_upSta,FILE_IS_OK);
|
||||
MSH_CMD_EXPORT(fileIsReady,fileIsReady);
|
||||
MSH_CMD_EXPORT(chkAndSendFile, chkAndSendFile);
|
||||
MSH_CMD_EXPORT(upSendFile, upSendFile);
|
||||
MSH_CMD_EXPORT(initTT,初始化TT);
|
||||
|
@ -35,13 +35,14 @@ static void clearLock()
|
||||
islock=0;
|
||||
}
|
||||
extern rt_sem_t cfgUpdate;
|
||||
|
||||
int get_cfg(const char *k);
|
||||
static struct rt_messagequeue upfilelist;
|
||||
typedef struct
|
||||
{
|
||||
char fname[60];
|
||||
uint8_t index;
|
||||
}FILE_INFO;
|
||||
|
||||
static uint8_t msg_pool[512] ;
|
||||
void addToList_thread_entry(void *parameter);
|
||||
static void iniUFMsg(void)
|
||||
@ -79,12 +80,19 @@ INIT_APP_EXPORT(iniUFMsg);
|
||||
*/
|
||||
int set_cfg(const char *k, long v)
|
||||
{
|
||||
setLock();
|
||||
// setLock();
|
||||
|
||||
if (rt_strcmp(v,"NULL") == 0) {//delete key
|
||||
v = NULL;
|
||||
|
||||
}
|
||||
// clearLock();
|
||||
if (v == get_cfg(k)) {
|
||||
LOG_D("nothing needs to change.");
|
||||
clearLock();
|
||||
return 1;
|
||||
}
|
||||
setLock();
|
||||
// int rst = ini_puts("config",k,v,LJW_CFG_FILE_NAME);
|
||||
int rst = ini_putl("config", k, v, LJW_CFG_FILE_NAME);
|
||||
if (rst == 1) {
|
||||
@ -128,7 +136,11 @@ int set_cfgs(const char *k, const char * v)
|
||||
clearLock();
|
||||
return rst;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回指定键的值
|
||||
* @param k
|
||||
* @return
|
||||
*/
|
||||
int get_cfg(const char *k)
|
||||
{
|
||||
setLock();
|
||||
@ -196,7 +208,7 @@ static void cfg(int argc, char ** argv)
|
||||
get_cfg(argv[1]);
|
||||
}
|
||||
if (argc == 3) {//有键有值,设置
|
||||
set_cfg(argv[1], argv[2]);
|
||||
set_cfgs(argv[1], argv[2]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -411,7 +411,7 @@ static int cryptLocMsg(uint8_t *din, size_t len, uint8_t *dout);
|
||||
int reportDepth(uint8_t *din,size_t len)
|
||||
{
|
||||
// 000000000000000000005AA53E320608000A170407101B33FFFFFFFF24ED
|
||||
|
||||
LOG_I("FUNC = reportDepth");
|
||||
//获取并更新位置信息
|
||||
uint8_t dout[200];
|
||||
memset(dout,0,200);
|
||||
@ -501,10 +501,10 @@ void reportSysCfg()
|
||||
rst[++p] = 0xED;
|
||||
|
||||
size = p+1;
|
||||
// upSend(rst, size);
|
||||
upSend(rst, size);
|
||||
|
||||
// LOG_HEX("scfg",16,&scfg,size);
|
||||
LOG_HEX("cfg",16,rst,p+1);
|
||||
// LOG_HEX("cfg",16,rst,p+1);
|
||||
// updateSysCfg(rst+8, rst[7]);
|
||||
}
|
||||
|
||||
@ -825,6 +825,7 @@ void ttRunCMD(uint8_t *din, size_t len)
|
||||
RT_WEAK int formatAndSendTo3S(uint8_t * din, size_t len)
|
||||
{
|
||||
// LOG_D("直接调用小彭的函数进行处理。");
|
||||
LOG_I("FUNC = forward to 3S");
|
||||
char str[200] = "RCV:";
|
||||
|
||||
int cmd = (din[4] << 8) + din[5];
|
||||
@ -921,7 +922,8 @@ void parse3SData(uint8_t *din, size_t count)
|
||||
|
||||
}
|
||||
// upSend(din, count);
|
||||
}
|
||||
}
|
||||
LOG_W("无法解析的目标地址");
|
||||
}
|
||||
|
||||
void chkACK(uint8_t *msg, size_t size)
|
||||
|
@ -47,7 +47,8 @@ int main(void)
|
||||
rt_pin_write(TR485_RE, PIN_LOW);
|
||||
|
||||
//sysSemInit
|
||||
sysSemInit();
|
||||
sysInit();
|
||||
// sysEventInit();
|
||||
if (isInWindowZone()) {//开机检查是否在开窗区间内,是则给TT开机
|
||||
initTT();
|
||||
// pwTT_thread_entry("1");
|
||||
|
@ -481,6 +481,7 @@ void pwTT_thread_entry(void *parameter)
|
||||
}
|
||||
|
||||
rt_pin_write(TT_EN, flag);//
|
||||
rt_thread_mdelay(300);
|
||||
|
||||
// if (!flag) {
|
||||
// initTT();
|
||||
@ -559,6 +560,7 @@ void recTT_thread_entry()
|
||||
LOG_HEX("TTrec", 16, msg.data, msg.size);
|
||||
//此处调用处理函数
|
||||
// LOG_D("try to parse data.");
|
||||
resetTM();
|
||||
parseTTData(msg.data,msg.size);
|
||||
}
|
||||
}
|
||||
|
@ -672,6 +672,8 @@ __exit:
|
||||
*/
|
||||
void rt_hw_stm32_eth_deinit()
|
||||
{
|
||||
// HAL_ETH_DeInit(&EthHandle);
|
||||
rt_timer_delete(stm32_eth_device.poll_link_timer);
|
||||
eth_device_deinit(&(stm32_eth_device.parent));
|
||||
if (Rx_Buff)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user