在rt-thread中,保护临界区的方法除了IPC线程间通信机制,然后就是调度锁与关闭中断了。 调度锁 rt-thread调度锁的目的是让调度器停止工作,这时不进行线程的切换工作。也就是说,在调度锁范围内的代码是独占CPU资源的,当前的被调度锁锁住的代码不能切换到其他的线程。 调度锁不会阻止系统的响应中断,中断处理完成退出...
1.1 方法一:关闭系统调度保护临界区禁止调度/* 调度器商锁,上锁后不再切换到其他线程,仅响应中断 */ rt_enter_critical(); /* 临界操作 */ rt_exit_critical(); 关闭中断:因为所有的线程的调度都是建立在中断的基础上的,所以当关闭中断后系统将不能再进行调度,线程自身也自然不会被其他线程抢占了...
RTOS所有的线程调度都是建立在中断基础上的,关闭中断,不仅可以屏蔽,外部中断,也可以禁止调度,他比上面的禁止调度“更能够保护”临界区。 RT-Thread 屏蔽中断 和 使能中断的函数如下: /* 返回值: 中断状态 rt_hw_interrupt_disable 函数运行前的中断状态 */ rt_base_t rt_hw_interrupt_disable(void);//屏蔽中...
挂起状态的线程,如果调用rt_thread_delete/detach将更改为关闭状态;而运行状态的线程,如果运行结束会在线程最后部分执行rt_thread_exit函数而更改为关闭状态。 空闲线程 空闲线程具有最低的优先级,当系统中无其他线程可运行是,调度器将调度到空闲线程。空闲线程通常是一个死循环,永远不被挂起。除了调用钩子函数,RT-Th...
#defineRT_THREAD_CLOSE0x04/**< 关闭/结束状态 */ 处于初始化状态的接口函数有:rt_thread_init,rt_thread_create 这两个函数的差别在于一个是静态的初始化一个线程实体,还有一个是动态的创建线程实体再来初始化。 /*** ** 函数名称: rt_thread_init ** 函数功能: 静态初始化线程实例 ** 入口參数: thre...
2022-5-25 15:17:43 2332 RT-Thread 中断 处理器 扫一扫,分享给好友 复制链接分享 链接复制成功,分享给好友0 1 中断锁定义 中断锁即为全局中断开关,是禁止多线程访问临界区最简单的一种方式,即通过关闭中断的方式,来保证当前线程不会被其他事件打断(此时系统不再响应可以触发线程调度的外部事件),除非这个线程...
rt_cputimer_init(&cputimer, "cputime_sleep", _cputime_sleep_timeout, thread, 0, RT_TIMER_FLAG_ONE_SHOT | RT_TIMER_FLAG_SOFT_TIMER); rt_cputimer_control(&cputimer, RT_TIMER_CTRL_SET_TIME, &tick); rt_cputimer_start(&cputimer);@...
若某线程运行完毕,系统将自动删除线程:自动执行rt_thread_exit() 函数,先将该线程从系统就绪队列中删除,再将该线程的状态更改为关闭状态,不再参与系统调度,然后挂入rt_thread_defunct 僵尸队列(资源未回收、处于关闭状态的线程队列)中,最后空闲线程会回收被删除线程的资源。
第二步:关闭中断,将系统当前运行的寄存器压入栈空间 第三步: 找到需要运行的线程的PC指针,并找到栈起始处弹出栈中的寄存器状态 第四部:打开中断,执行异常ret,让系统恢复执行 此时,就切换到已经就绪的更高优先级的线程去运行了。 5.总结 rt-thread线程的调度原理和过程上述文章已经写的比较详细了,主要需要注意的...
(e) 调用rtthread_startup进行线程调度。(e1): 调用rt_thread_resume,将创建的线程放入就绪列表(r...