线程退出的时候,需要idle线程执行rt_thread_idle_excute才能回收退出线程的资源,但是工作线程比idle线程级别高的话,idle线程得不到执行,跟idle线程同优先级的话,idle线程会跟工作线程来回切换,占用执行太多cpu资源,是不是有点尴尬
高优先级线程不能长时间占死cpu,否则你的线程设计就是有问题的。
一般一件事务处理使用一个线程,事务工作来了线程激活,完成此次处理后释放cpu,继续等待下次事务到了。
比如一个键盘扫描事务,可以设计成每10ms扫描一遍各按键按下状态,有键按下就向按键队列发按键码,一次扫描完成后等待10ms,然后再次扫描。
一、最好不要设置与空闲idle线程优先级相同的工作线程;
二、在一个RTOS系统当中,RTT提供了优先级抢占+时间片轮询的调度机制;基于这个调度机制,我们要合理的分配线程的优先级、时间片、延时时间(让出CPU);
三、线程让出CPU是系统能够协调工作的一个重要标准(特殊:你就是想卡在这个任务);
四、至于你说的来回切换占用CPU资源。本身RTOS的核心处理,就是线程的上下文切换,实现高实时性;并且线程切换到时间也是再ms级别;所以,从宏观上看,任务的实时性是没有影响的。
RTOS重要的是实时性,而不是占用CPU资源。
在RTOS下编程,无论是哪种RTOS,其都是有一定编程规则的,不是想怎么用就怎么用:
工作线程如果比idle优先级高,idle怎么执行呢?我在工作线程里用rt_thread_yield,idle线程还是得不到执行,用rt_thread_delay又太浪费工作线程的时间。请问你们是怎么解决的
@cris8259 rt_thread_yield一般也不给用户使用的,因为要自己搭配schedule进行。可以使用 rt_thread_mdelay()或者线程间同步的方式
@yangjie 工作线程执行频次越高越好,rt_thread_mdelay一下就完蛋了