嵌入式技术论坛
直播中

贾大林

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

RTThread线程自然退出导致调度器异常如何解决呢

最近wavplayer使用的recoder功能,发现输入wavrecoder指令后,只能录制1次,结束后,main函数负责1Hz点灯的功能,变成疯狂点灯。如果启动第二次录制,程序直接复位。

经过长时间排查,终于可以将问题锁定在线程自然退出问题。

如下代码所示,只要有个线程自然退出,就会引起完全一样的问题:

/*

Copyright (c) 2006-2018, RT-Thread Development Team

SPDX-License-Identifier: Apache-2.0

Change Logs:m
Date Author Notes
2019-04-29 tyustli first version

*/
#include <rtdevice.h>
#include <board.h>
#include "drv_gpio.h"
#define LED0_PIN GET_PIN(1, 3)
static void test_entry(void parameter)
{
return;
}
int main(void)
{
rt_thread_t tid;
rt_kprintf("hello commander!\n");
/
set LED0 pin mode to output */
rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);
if (RT_NULL != (tid=rt_thread_create("test", test_entry, RT_NULL, 2048, 3, 20)))
rt_thread_startup(tid);
while (1)
{
rt_pin_write(LED0_PIN, PIN_HIGH);
rt_thread_mdelay(500);
rt_pin_write(LED0_PIN, PIN_LOW);
rt_thread_mdelay(500);
}
}

后来在ChangeLog.md找到,从V4.0.3版本开始,rt_thread_exit()函数已经被移除:

2.jpg

不知道rtt做这个优化的时候,是不是没留意到线程自然终止会导致调度器异常这个问题。请高人讲解一下。

ps:本人实在rtt studio开发环境下,在正点原子rt1052号令者开发板做的测试结果。同样在studio,用stm32f407做测试,确实没有这样的情况。请有NXP类似MCU的朋友试试,验证一下是否有跟我相同的问题,谢谢!

回帖(2)

贾大林

2022-12-14 17:12:04
拿潘多拉试了下,跑这个例程没有问题的,main运行是正常的
举报

贾大林

2022-12-14 17:12:09
不需要手动退出,自然退出即可,空闲线程会自动回收资源
内核是当前master版本的,要高于4.0.3
举报

更多回帖

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