RT-Thread论坛
直播中

贾飞小

7年用户 1757经验值
私信 关注

RT-Thread程序在执行rt_schedule_remove_thread(to_thread);语句里面的打印时会进Hard_defaut的原因?

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;
我想知道啥原因导致的。

回帖(1)

胡文娅

2024-2-26 16:09:41
检查一下你的动态内存堆是否够用,这东西是malloc出来的
举报

更多回帖

发帖
×
20
完善资料,
赚取积分