使用RTT操作系统创建了如下线程
Timer(定时器,主要用于直立平衡控制) 优先级1
camera(图像处理线程) 优先级5
程序逻辑:
Timer中有执行串级pid,直立环
我的设想:
在Timer线程有空闲的时候,调度camera线程,进行图像处理
实际:
成功调度了camera线程,但影响了直立环,即Timer线程,其并未有效的被优先级高的Timer线程抢占,导致开了camera线程就无法直立的问题
需求:
Timer线程及时抢占camera线程,不要让camera影响到直立环
一、个人猜测
1.你的“直立环”所在的线程应该是抢占成功了,但是在本线程执行过程中,有使用RT-Thread提供的延时函数;
2.所以RT-Thread调度器执行调度,切换到了“camera线程”;
3.而在camera中不知道为什么影响了“直立环”的效果;
二、解决办法—-使用调度锁
1.在你的“直立环”线程中,加入调度所函数;功能是执行此此线程时,是不能被其他线程“抢走”的(调度器关闭),也就是此线程单独占用CPU;
2.对应函数:
void rt_enter_critical(void);//进入调度临界区
void rt_exit_critical(void);//退出调度临界区
3.注意:使用时必须成套使用;