解决 log2file.c 报错的问题,由cacheDataToFile引起

This commit is contained in:
CSSC-WORK\murmur 2023-09-02 15:23:32 +08:00
parent eaa05a9add
commit 3ee597180c
9 changed files with 49 additions and 37 deletions

View File

@ -20,8 +20,8 @@
#include <usrcfg.h> #include <usrcfg.h>
#include <board.h> #include <board.h>
#define LOG_TAG "RS232" #define LOG_TAG "RS485"
#define LOG_LVL LOG_LVL_INFO #define LOG_LVL LOG_LVL_DBG
#include <ulog.h> #include <ulog.h>
#define TR485 #define TR485
@ -128,7 +128,7 @@ uint8_t getPowerLevel(void)
return batt.level[1]; return batt.level[1];
} }
static void serial_thread_entry(void *parameter) static void serial485_thread_entry(void *parameter)
{ {
struct rx_msg msg; struct rx_msg msg;
rt_err_t result; rt_err_t result;
@ -139,7 +139,6 @@ static void serial_thread_entry(void *parameter)
{ {
//发送指令 //发送指令
// if (rt_mutex_take(sendcmd, RT_WAITING_FOREVER) == RT_EOK) // if (rt_mutex_take(sendcmd, RT_WAITING_FOREVER) == RT_EOK)
rt_thread_mdelay(10*1000);
{ {
uint8_t cmd[] = { 0x01, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x85, 0xc3 }; uint8_t cmd[] = { 0x01, 0x03, 0x00, 0x00, 0x00, 0x1d, 0x85, 0xc3 };
@ -148,8 +147,7 @@ static void serial_thread_entry(void *parameter)
rt_device_write(serial485, 0, cmd, sizeof(cmd)); rt_device_write(serial485, 0, cmd, sizeof(cmd));
rt_pin_write(TR485_RE, PIN_LOW); rt_pin_write(TR485_RE, PIN_LOW);
} }
rt_thread_mdelay(10*1000);
rt_memset(&msg, 0, sizeof(msg)); rt_memset(&msg, 0, sizeof(msg));
/* 从消息队列中读取消息*/ /* 从消息队列中读取消息*/
@ -224,7 +222,7 @@ static int uart485_dma_sample(int argc, char *argv[])
/* 发送字符串 */ /* 发送字符串 */
/* 创建 serial 线程 */ /* 创建 serial 线程 */
rt_thread_t thread = rt_thread_create("RS485", serial_thread_entry, RT_NULL, 1024*5, 30-2, 10); rt_thread_t thread = rt_thread_create("RS485", serial485_thread_entry, RT_NULL, 1024*5, 30, 10);
/* 创建成功则启动线程 */ /* 创建成功则启动线程 */
if (thread != RT_NULL) if (thread != RT_NULL)
{ {
@ -250,7 +248,7 @@ static int uart485_dma_sample(int argc, char *argv[])
/* 导出到 msh 命令列表中 */ /* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(uart485_dma_sample,uart485_dma_sample); //MSH_CMD_EXPORT(uart485_dma_sample,uart485_dma_sample);
//INIT_APP_EXPORT(uart485_dma_sample); INIT_APP_EXPORT(uart485_dma_sample);
MSH_CMD_EXPORT(dumpBattInfo,); MSH_CMD_EXPORT(dumpBattInfo,);

View File

@ -306,6 +306,8 @@ MSH_CMD_EXPORT_ALIAS(clear_sta,clsSta, 重置系统统计数据)
volatile size_t nislock=0; volatile size_t nislock=0;
static void nsetLock() static void nsetLock()
{ {
rt_mutex_take(isTosendOk, RT_WAITING_FOREVER);
return;
// LOG_D("--%d--",nislock); // LOG_D("--%d--",nislock);
size_t cnt=10; size_t cnt=10;
while(nislock) while(nislock)
@ -321,6 +323,8 @@ static void nsetLock()
} }
static void nclearLock() static void nclearLock()
{ {
rt_mutex_release(isTosendOk);
return;
nislock=0; nislock=0;
LOG_W("file is unlocked."); LOG_W("file is unlocked.");
} }
@ -440,14 +444,14 @@ static void add(int argc, char **argv)
* @param k * @param k
* @return * @return
*/ */
int updateLstFile(const char *fin) int setLstFile(const char *fin)
{ {
nsetLock(); nsetLock();
int rst = ini_puts(SECTION_LST_FILE, "lst", fin, FILE_TO_SEND); int rst = ini_puts(SECTION_LST_FILE, "lst", fin, FILE_TO_SEND);
nclearLock(); nclearLock();
if (!rst) { if (!rst) {
LOG_E("update lst file error."); LOG_E("set lst file error.");
return RT_ERROR; return RT_ERROR;
} }
return RT_EOK; return RT_EOK;

View File

@ -71,7 +71,7 @@ static void initCfg(void)
close(fd); close(fd);
const char *cfgstr = const char *cfgstr =
"[config]\n" "[config]\n"
"# V1.83\n" "# V1.84\n"
"#定时(默认每小时)上报时刻,\n" "#定时(默认每小时)上报时刻,\n"
"sendInterval=15\n" "sendInterval=15\n"
"# 最大文件大小,超过此大小则进入发送流程\n" "# 最大文件大小,超过此大小则进入发送流程\n"
@ -103,7 +103,7 @@ static void initCfg(void)
"# 位置告警功能开关1-开启0-关闭\n" "# 位置告警功能开关1-开启0-关闭\n"
"locAlert=1;\n" "locAlert=1;\n"
"# 定时上报位置信息间隔M\n" "# 定时上报位置信息间隔M\n"
"locRepInterval=5\n" "locRepInterval=1\n"
"[stats]\n" "[stats]\n"
"# 继电器开关次数影响继电器寿命10W次\n" "# 继电器开关次数影响继电器寿命10W次\n"
"swCnt=12\n" "swCnt=12\n"
@ -344,7 +344,7 @@ void d_remain(void)
static void timeoutFunc(void *parameter) static void timeoutFunc(void *parameter)
{ {
stopTM(); stopTM();
if (!deinitThread) { if (deinitThread) {
LOG_W("timeout leads to shunt down TT"); LOG_W("timeout leads to shunt down TT");
// rt_thread_mdelay(3000);// no delay // rt_thread_mdelay(3000);// no delay
deInitTT();//Function[rt_mutex_take] shall not be used in ISR deInitTT();//Function[rt_mutex_take] shall not be used in ISR
@ -577,29 +577,27 @@ void initTT_thread_entry()
RT_TIMER_FLAG_ONE_SHOT);//|RT_TIMER_FLAG_SOFT_TIMER); RT_TIMER_FLAG_ONE_SHOT);//|RT_TIMER_FLAG_SOFT_TIMER);
} }
if (!isEthUP()) if (!isEthUP())//只初始化一次
{ //只初始化一次 {
LOG_D("init eth..."); LOG_D("init eth...");
rt_pin_write(ETH_RESET_PIN, PIN_HIGH); rt_pin_write(ETH_RESET_PIN, PIN_HIGH);
if (rt_hw_stm32_eth_init() == RT_EOK) if (rt_hw_stm32_eth_init() == RT_EOK)//激活网口
{ {
LOG_D("eth inited DONE."); LOG_D("eth inited DONE.");
// lwip_sys_init(); };
}; //激活网口
} }
else if (!isTCPok()) //判断TCP连接是否正常异常自动重连 else if (!isTCPok()) //判断TCP连接是否正常异常自动重连
{ {
// tcpInit(); if (tcpInit() != RT_EOK)
if (tcpInit() != RT_EOK) { {
// cmd_free(); if (isEthUP())
if (isEthUP()) { {
LOG_D("retry."); LOG_D("retry.");
rt_hw_stm32_eth_deinit(); rt_hw_stm32_eth_deinit();
// rt_hw_stm32_eth_init(); continue;
break;
} }
} }
else else
{ {
LOG_D("TCP is ready."); LOG_D("TCP is ready.");
tcpRecMQ(); //开启tcp接收线程 tcpRecMQ(); //开启tcp接收线程
@ -648,7 +646,7 @@ void initTT()
{ {
/* 创建 serial 线程 */ /* 创建 serial 线程 */
if (initThread != RT_NULL) { if (initThread != RT_NULL) {
LOG_W("initThread 未退出"); LOG_W("TT is already running.");
return; return;
} }
initThread = rt_thread_create("initTT", initTT_thread_entry, RT_NULL, 1024 * 5, 20, 10); initThread = rt_thread_create("initTT", initTT_thread_entry, RT_NULL, 1024 * 5, 20, 10);

View File

@ -146,7 +146,7 @@ void d_getFreeSpace()
*/ */
RT_WEAK int getPowerLevel(void) RT_WEAK int getPowerLevel(void)
{ {
return 0; return 0x63;
} }
typedef struct typedef struct
@ -631,7 +631,7 @@ void reportSysCfg()
//单次最多可上报15条位置信息 //单次最多可上报15条位置信息
/** /**
* 15[]+[]+[15] * 15[]+[]+[15]
* *
* 15MOB(most oldest bit) * 15MOB(most oldest bit)
* 1610 * 1610
@ -645,7 +645,7 @@ static int packLocMsg(uint8_t *dout)
{ 0x5A, 0xA5, ADDR_ANJI, ADDR_TT, _CFG_LOCATION_ALERT >> 8, _CFG_LOCATION_ALERT & 0xFF, 0, 0 }; { 0x5A, 0xA5, ADDR_ANJI, ADDR_TT, _CFG_LOCATION_ALERT >> 8, _CFG_LOCATION_ALERT & 0xFF, 0, 0 };
alertMsg[8] = 0; //首字节00为定时发送未检测围栏其它为在围栏外 alertMsg[8] = getPowerLevel(); //首字节最高bit为1时为在围栏外
int len = time2Byte(alertMsg+9);//添加时间戳 int len = time2Byte(alertMsg+9);//添加时间戳
len += getAndCheckLoc(alertMsg + 9 + len, _LOC_CNT) + 1; //p指向第2个数据 len += getAndCheckLoc(alertMsg + 9 + len, _LOC_CNT) + 1; //p指向第2个数据
if (len == 0x08) {//无有效位置数据 if (len == 0x08) {//无有效位置数据
@ -751,7 +751,7 @@ void reportLoc_thread_entry(void *parameter)
//检测是否在围栏内 //检测是否在围栏内
if (len && !isInFence(rst+len-11))//不在围栏内 if (len && !isInFence(rst+len-11))//不在围栏内
{ {
rst[8]=1; rst[8] |= 1<<7;
isReadyToSendLoc = 1; isReadyToSendLoc = 1;
} }
itime += 1 ; itime += 1 ;
@ -1330,13 +1330,14 @@ int cacheDataToFile(uint8_t *din, size_t len)
LOG_I("FUNC = cache to upsend"); LOG_I("FUNC = cache to upsend");
int rst = -RT_ERROR; int rst = -RT_ERROR;
//return RT_EOK; //return RT_EOK;
char f[60]="";
getLstCacheFileName(f);
//lock file //lock file
while (iscdlock) { while (iscdlock) {
rt_thread_mdelay(1000); rt_thread_mdelay(1000);
} }
static char f[60]="";//必须是static否则log2file报错
getLstCacheFileName(f);
int fd = open(f, O_WRONLY | O_CREAT | O_APPEND); int fd = open(f, O_WRONLY | O_CREAT | O_APPEND);
if (fd < 0) if (fd < 0)

View File

@ -35,7 +35,7 @@ typedef enum
}ulog_file_be_name; }ulog_file_be_name;
#define ROOT_PATH ROOT_PATH_DEBUG //设置保存路径 #define ROOT_PATH ROOT_PATH_DEBUG //设置保存路径
#define FILE_SIZE 100*1024 //设置单个文件大小 #define FILE_SIZE 10*1024 //设置单个文件大小
#define BUFF_SIZE 1*1024 //设备缓存区大小 #define BUFF_SIZE 1*1024 //设备缓存区大小
static struct ulog_backend sys_log_backend; static struct ulog_backend sys_log_backend;

View File

@ -91,3 +91,13 @@ void show_version(void)
MSH_CMD_EXPORT(show_version,); MSH_CMD_EXPORT(show_version,);
INIT_COMPONENT_EXPORT(show_version); INIT_COMPONENT_EXPORT(show_version);
static void clock_information(void)
{
LOG_D("System Clock information");
LOG_D("SYSCLK_Frequency = %d", HAL_RCC_GetSysClockFreq());
LOG_D("HCLK_Frequency = %d", HAL_RCC_GetHCLKFreq());
LOG_D("PCLK1_Frequency = %d", HAL_RCC_GetPCLK1Freq());
LOG_D("PCLK2_Frequency = %d", HAL_RCC_GetPCLK2Freq());
}
MSH_CMD_EXPORT(clock_information,);

View File

@ -396,7 +396,7 @@ void updateCacheFileName()
strncpy(f + strlen(rootDir), ts, strlen(ts)); strncpy(f + strlen(rootDir), ts, strlen(ts));
// strcpy(cfname,f); // strcpy(cfname,f);
updateLstFile(f); setLstFile(f);
// strcpy(fin,f); // strcpy(fin,f);
// return fin; // return fin;
} }
@ -421,6 +421,7 @@ char *getLstCacheFileName(char *fin)
if (!getLstFile(f)) { if (!getLstFile(f)) {
updateCacheFileName(); updateCacheFileName();
} }
getLstFile(f);
strcpy(fin,f); strcpy(fin,f);
return fin; return fin;

View File

@ -63,7 +63,7 @@ typedef struct
#define ROOT_PATH_LOG "/sd/log/" //收发数据 #define ROOT_PATH_LOG "/sd/log/" //收发数据
#define ROOT_PATH_DATA "/sd/cdata/" //缓存数据 #define ROOT_PATH_DATA "/sd/cdata/" //缓存数据
#define ROOT_PATH_DEBUG "/sd/debug/" //调试日志 #define ROOT_PATH_DEBUG "/sd/debug" //调试日志
#define CRYPT_BEFRE_PACK #define CRYPT_BEFRE_PACK
#define UPDATE_INTERVAL 10 #define UPDATE_INTERVAL 10

View File

@ -204,7 +204,7 @@
#define ULOG_ASSERT_ENABLE #define ULOG_ASSERT_ENABLE
#define ULOG_LINE_BUF_SIZE 256 #define ULOG_LINE_BUF_SIZE 256
#define ULOG_USING_ASYNC_OUTPUT #define ULOG_USING_ASYNC_OUTPUT
#define ULOG_ASYNC_OUTPUT_BUF_SIZE 10240 #define ULOG_ASYNC_OUTPUT_BUF_SIZE 1024*10
#define ULOG_ASYNC_OUTPUT_BY_THREAD #define ULOG_ASYNC_OUTPUT_BY_THREAD
#define ULOG_ASYNC_OUTPUT_THREAD_STACK 10240 #define ULOG_ASYNC_OUTPUT_THREAD_STACK 10240
#define ULOG_ASYNC_OUTPUT_THREAD_PRIORITY 29 #define ULOG_ASYNC_OUTPUT_THREAD_PRIORITY 29