嵌入式技术论坛
直播中

贾埃罗

7年用户 1709经验值
私信 关注
[问答]

为什么使用事件通知线程同步会导致线程死掉呢?

使用事件通知线程同步,导致线程死掉,而且使用ps命令,系统直接出错死掉 2.jpg
3.jpg
代码如下
static void fin_timer_handler(void *args)//这个是中断的下半部,使用的软件定时器
{
    rt_event_send(&event, EVENT_PRESS_FR);//<唤醒读取指纹线程,读取   
    rt_pin_irq_enable(FIN_PIN, PIN_IRQ_ENABLE);   
    LOG_D("111111");
}
void test_entry(void *parameter)
{
    int ret = 0;
    while(1)
    {
        LOG_D("Xinme");
      rt_event_recv(&event, EVENT_PRESS_FR,RT_EVENT_FLAG_CLEAR | RT_EVENT_FLAG_AND, RT_WAITING_FOREVER, NULL);
        LOG_D("2222222");
        ret = press_FR();
        if(!ret){
            class_find_person(class, seach.pageID, 1);
            LOG_D("33333333");
            msgbox_create(CHECK_IN_MESSAGE);
            LOG_D("4444444444");
            rt_event_send(&lvgl_event, EVENT_PRESS_REFRSH);//这里会执行,但是下面的这个打印                                                        //信息不会执行
            LOG_D("5555555555");
        }
    }
}



回帖(3)

贾永世

2023-3-14 10:32:53
要不尝试换个思路,也许用了lvgl的线程的栈溢出了。
举报

贾埃罗

2023-3-14 10:32:59
大佬,好像是的,我这个线程的栈才给了512字节,一般栈溢出怎么判断哦
举报

贾永世

2023-3-14 10:33:08
开启rtconfig里面的栈溢出检测.
ps命令查看最大占用率,大于70%,加大栈空间.
有的时候会出现一些函数需要的栈空间特别大,但是需要特定条件触发.这种只能自己判断了
举报

更多回帖

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