add:添加日志管理系统,写日志到存储器,日志无效的率为 0.167%

This commit is contained in:
ShallowGreen123
2023-01-09 22:40:29 +08:00
parent c824a039ef
commit df259f9350
3 changed files with 50 additions and 30 deletions

View File

@@ -34,18 +34,13 @@ void *QueueMallocInput(queue_t *q, void *val, val_size valSize)
return NULL; return NULL;
} }
if (DEF_QUEUE_RESERVE_SIZE(q) < valSize) { // 没有足够的空间保存这个数据
return NULL;
}
if (q->elemCnt > 0) { if (q->elemCnt > 0) {
bufPos = q->tail + DEF_QUEUE_GET_VAL_SIZE(q, q->tail); bufPos = q->tail + DEF_QUEUE_GET_VAL_SIZE(q, q->tail);
if (q->tail >= q->front) { // tail 在 front 后面,队列还没有循环 if (q->tail >= q->front) { // tail 在 front 后面,队列还没有循环
if (((q->bufSize - bufPos) < needSize) && (q->front < needSize)) {
return NULL; // 空间虽然足够,但是一部分在头,一部分在末尾,不连续
}
if (q->bufSize - bufPos < needSize) { if (q->bufSize - bufPos < needSize) {
if (bufPos + sizeof(val_size) <= q->bufSize) {
DEF_QUEUE_SET_VAL_SIZE(q, bufPos, DEF_QUEUE_VAL_LEN_INVAILD); DEF_QUEUE_SET_VAL_SIZE(q, bufPos, DEF_QUEUE_VAL_LEN_INVAILD);
}
bufPos = 0; bufPos = 0;
} }
} else { // front 在 tail 后面,队列已经循环 } else { // front 在 tail 后面,队列已经循环
@@ -78,18 +73,20 @@ void *QueueMallocOutput(queue_t *q, val_size *size)
if (size) { if (size) {
*size = DEF_QUEUE_GET_VAL_SIZE(q, q->front); *size = DEF_QUEUE_GET_VAL_SIZE(q, q->front);
} }
dataSize = DEF_QUEUE_GET_VAL_SIZE(q, q->front) + sizeof(val_size); dataSize = DEF_QUEUE_GET_VAL_SIZE(q, q->front);
value = &q->buf[q->front + sizeof(val_size)]; value = &q->buf[q->front + sizeof(val_size)];
q->front += dataSize; q->front += dataSize;
if (DEF_QUEUE_GET_VAL_SIZE(q, q->front) == DEF_QUEUE_VAL_LEN_INVAILD) {
q->front = 0;
}
q->usedSize -= dataSize; q->usedSize -= dataSize;
q->elemCnt--; q->elemCnt--;
if ((q->elemCnt == 0)
|| (q->front + sizeof(val_size) >= q->bufSize)
|| (DEF_QUEUE_GET_VAL_SIZE(q, q->front) == DEF_QUEUE_VAL_LEN_INVAILD)) {
q->front = 0;
}
return value; return value;
} }
@@ -103,8 +100,8 @@ bool QueueMallocSpaceChk(queue_t *q, val_size size)
} }
if (q->elemCnt > 0) { if (q->elemCnt > 0) {
if (q->tail >= q->front) {
bufPos = q->tail + DEF_QUEUE_GET_VAL_SIZE(q, q->tail); bufPos = q->tail + DEF_QUEUE_GET_VAL_SIZE(q, q->tail);
if (q->tail >= q->front) {
if ((q->bufSize - bufPos < needSize) && (q->front < needSize)) { if ((q->bufSize - bufPos < needSize) && (q->front < needSize)) {
return false; return false;
} }
@@ -138,6 +135,10 @@ void *QueueMallocPeekAfter(queue_t *q, void *cur_item, val_size *size)
return NULL; return NULL;
} }
if (bufPos + sizeof(val_size) >= q->bufSize) {
bufPos = 0;
}
bufPos = bufPos + DEF_QUEUE_GET_VAL_SIZE(q, bufPos); bufPos = bufPos + DEF_QUEUE_GET_VAL_SIZE(q, bufPos);
itemSize = DEF_QUEUE_GET_VAL_SIZE(q, bufPos); itemSize = DEF_QUEUE_GET_VAL_SIZE(q, bufPos);
if (itemSize == DEF_QUEUE_VAL_LEN_INVAILD) { if (itemSize == DEF_QUEUE_VAL_LEN_INVAILD) {

View File

@@ -101,6 +101,13 @@ void Lib_LogPrintf(uint8_t level, const char *fmt, ...)
Lib_LogUnlock(); Lib_LogUnlock();
#if DEF_LIB_LOG_PRINTF #if DEF_LIB_LOG_PRINTF
// static uint32_t t = 0;
// static uint32_t err = 0;
// uint32_t len = strlen(log_item->Buf);
// if (len == 0) {
// err++;
// }
// printf("File[%d] e=%d %s\n", t++, err, log_item->Buf);
printf("%s\n", log_item->Buf); printf("%s\n", log_item->Buf);
#endif #endif
} }

View File

@@ -36,21 +36,36 @@ static void log_write_timer_cb(lv_timer_t *t)
Lib_LogLoop(); Lib_LogLoop();
} }
static bool log_write_to_file(LIB_LOG_ITEM_T *item) void log_create_event_cb(lv_timer_t *t)
{ {
printf("File %s\n", item->Buf); LV_UNUSED(t);
return true; uint32_t i;
uint32_t rand = lv_rand(3, 100);
uint8_t buf[102] = {0};
for (i = 0; i < rand; i++) {
buf[i] = '*';
}
buf[i + 1] = '\0';
TRACE_I("%s\n", buf); // 随机添加长度为(3-100)的日志
} }
static bool log_write_to_flash(LIB_LOG_ITEM_T *item) static bool log_write_to_file(LIB_LOG_ITEM_T *item) // 日志写回调函数
{ {
printf("Flash %s\n", item->Buf); // erroe rate = 134 / 80244 : 0.0016699067843079
return true; /**
} * 测试结果向日志系统中写入了80244条日志
* 无效的日志为134条日志无效概率为
static bool log_write_to_sd(LIB_LOG_ITEM_T *item) * 0.167%
{ */
printf("Sd %s\n", item->Buf); static uint32_t t = 0;
static uint32_t err = 0; //记录日志写回调函数中无效日志的个数
uint32_t len = strlen(item->Buf);
if (len == 0) {
err++;
}
printf("File[%d] e=%d %s\n", t++, err, item->Buf);
return true; return true;
} }
@@ -63,10 +78,6 @@ void lvgl_app_init(void)
Lib_LogInit(); Lib_LogInit();
Lib_LogRegistWriter(log_write_to_file); // 模拟写日志到文件 Lib_LogRegistWriter(log_write_to_file); // 模拟写日志到文件
Lib_LogRegistWriter(log_write_to_flash); // 模拟写日志到Flash
Lib_LogRegistWriter(log_write_to_sd); // 模拟写日志到SD卡
Lib_LogUnregistWriter(log_write_to_sd);
DataModelInit(); DataModelInit();
@@ -76,4 +87,5 @@ void lvgl_app_init(void)
TRACE_W("Hello wrold!"); TRACE_W("Hello wrold!");
lv_timer_create(log_write_timer_cb, 50, NULL); lv_timer_create(log_write_timer_cb, 50, NULL);
lv_timer_create(log_create_event_cb, 100, NULL);
} }