1)我用cubemx生成的rtthread-nano的makefile工程,不同优先级的线程可以正常调度。但我用官网上给出的线程时间片轮转调度示例程序无法正常运行。
2)例程里面的thread1运行了,相同优先级的thread2没有运行。thread1运行完之后,直接运行main线程了。
3)我把例程用thread-studio生成thread标准工程,可以正确执行。
4)有小伙伴们遇到过这种线程无法轮转的问题吗?请大神们指教?
第1次修改)
如果在线程函数里加入mdelay函数,可以让渡线程,让thread2也执行。
第2次修改)
我用闪灯程序测试了一下,从硬件电路实测来看,确实实现了闪灯,即使修改时间片,逻辑也是对的。但是打印信息的结果还是不对,只打印thread1的信息。
难道是console部分有问题?
你是如何启动thread1和thread2线程的?要注意线程的优先级。
举个例子,假设你的thread1和thread2的优先级是5,且在main线程中,创建两个线程,依次启动thread1和thread2,此时,只会有thread1运行,thread2是压根没有启动的,不可能从INIT状态变成就绪态,也就无法加入调度列表了。
如果你将thread1和thread2的优先级改成25,应该能从console看到thread1,2交替输出。
以下是我写的一段测试代码。
2023-04-26 12:39更新。我注意到你用的是Nano,代码已经更新,不使用rt_thread_create,去掉了Finsh部分,只使用rt_thread_init。
代码使用RT-Thread Nano 3.1.3,STM32L4321RCT6上测试。
上述代码的运行结果,只会有thread1输出。
将上述代码的优先级改成25
,如下图所示,是可以看到交替输出的。
确实有可能打印被冲掉了