preempt : 抢占


每个任务都有4种状态:分别是:
- 运行态,
- 就绪态,
- 等待态,
- 不活动态

来自<RL-ARM 实时库用户指南.chm>
next_TCB->state = READY;
rt_put_prio (&os_rdy, next_TCB);
重点研究一下 ,其中的 优先级 链表 list




rt_init_context (&os_idle_TCB, 0, os_idle_demon);

os_idle_demon任务的优先级为0
init任务的优先级为1
phaseA任务的优先级为1

rt_free_box (mp_tcb, os_tsk.run);
struct OS_TSK os_tsk;
typedef struct OS_TSK {
P_TCB run; /* Current running task /
P_TCB new; / Scheduled task to run */
} *P_TSK;
int rt_free_box (void *box_mem, void *box)

参考:nu-lb-nuc140 RTX 流程 分析(二)
os_evt_wait_and (0x0001, 0xffff);
#define os_evt_wait_and(wflags,tmo) _os_evt_wait((U32)rt_evt_wait,wflags,tmo,__TRUE)
extern OS_RESULT _os_evt_wait(U32 p, U16 wait_flags, U16 timeout,
BOOL and_wait) __SVC_0;
OS_RESULT rt_evt_wait (U16 wait_flags, U16 timeout, BOOL and_wait)
rt_evt_wait(0x0001, 0xffff,__TRUE)


rt_system.c
/--------------------------- rt_systick ------------------------------------/
void rt_systick (void) {
/* Check for system clock update, suspend running task. */
P_TCB next;
os_tsk.run->state = READY;
rt_put_rdy_first (os_tsk.run);
/* Check Round Robin timeout. */
rt_chk_robin ();
/* Update delays. */
os_time++;
rt_dec_dly ();
/* Check the user timers. */
rt_tmr_tick ();
/* Switch back to highest ready task */
next = rt_get_first (&os_rdy);
rt_switch_req (next);
}
os_dly 解析
struct OS_XCB os_dly;








(稍后补充)
RTOS任务状态与调度机制
本文深入探讨实时操作系统(RTOS)中任务的四种状态:运行态、就绪态、等待态和不活动态,以及任务调度机制。通过分析RL-ARM实时库用户指南,详细解释了任务状态转换和优先级链表的作用,包括idle任务和初始化任务的优先级设定,以及任务切换和事件等待的具体实现。
772

被折叠的 条评论
为什么被折叠?



