最近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()函数已经被移除:
不知道rtt做这个优化的时候,是不是没留意到线程自然终止会导致调度器异常这个问题。请高人讲解一下。
ps:本人实在rtt studio开发环境下,在正点原子rt1052号令者开发板做的测试结果。同样在studio,用stm32f407做测试,确实没有这样的情况。请有NXP类似MCU的朋友试试,验证一下是否有跟我相同的问题,谢谢!
更多回帖