add:添加日志管理系统,写日志到存储器,日志无效的率为 0.167%
This commit is contained in:
@@ -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) {
|
||||||
DEF_QUEUE_SET_VAL_SIZE(q, bufPos, DEF_QUEUE_VAL_LEN_INVAILD);
|
if (bufPos + sizeof(val_size) <= q->bufSize) {
|
||||||
|
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) {
|
||||||
|
bufPos = q->tail + DEF_QUEUE_GET_VAL_SIZE(q, q->tail);
|
||||||
if (q->tail >= q->front) {
|
if (q->tail >= q->front) {
|
||||||
bufPos = q->tail + DEF_QUEUE_GET_VAL_SIZE(q, q->tail);
|
|
||||||
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) {
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -62,11 +77,7 @@ 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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user