ulog开启
log_LVL等级 LOG_LVL_DBG
log_Out_LVL等级 LOG_LVL_DBG
程序在执行 rt_schedule_remove_thread(to_thread);语句里面的打印时会进 Hard_defaut;
但是下调 log_out_lvl 至 LOG_LVL_INFO 时就不会出错
跟踪了一下,是下面函数内部内存跑飞了
rt_uint32_t ulog_tag_lvl_filter_get(const char *tag)
{
rt_slist_t *node;
ulog_tag_lvl_filter_t tag_lvl = RT_NULL;
rt_uint32_t level = LOG_FILTER_LVL_ALL;
if (!ulog.init_ok)
return level;
/* lock output */
output_lock();
/* find the tag in list */
for (node = rt_slist_first(ulog_tag_lvl_list_get()); node; node = rt_slist_next(node))
{
tag_lvl = rt_slist_entry(node, struct ulog_tag_lvl_filter, list);
if (!rt_strncmp(tag_lvl->tag, tag, ULOG_FILTER_TAG_MAX_LEN))
{
level = tag_lvl->level;
break;
}
}
/* unlock output */
output_unlock();
return level;
}
for 的 ulog内部 filter 链表 第一个和第二个数值正常,后续单节地址均为 0xAAAAAAAA
tag_lvl = rt_slist_entry(node, struct ulog_tag_lvl_filter, list);
if (!rt_strncmp(tag_lvl->tag, tag, ULOG_FILTER_TAG_MAX_LEN))
{
level = tag_lvl->level;
break;
}
tag_lvl 获取的值为异常值,导致执行if判断进入Hard_default;
我想知道啥原因导致的。
2024-2-26 16:09:41
检查一下你的动态内存堆是否够用,这东西是malloc出来的
检查一下你的动态内存堆是否够用,这东西是malloc出来的
举报