FreeRTOS空閒任務

2021-09-11 16:20:54 字數 1437 閱讀 3434

空閒任務在啟動排程器的時候被建立

/* 啟動排程器 */

void vtaskstartscheduler( void )

#else

#endif

....

if(xreturn == pdpass)

else

}else

......

}

空閒任務的作用包括:保證系統至少有乙個任務在執行、檢查等待終結列表中是否有任務並釋放它們。

/* 空閒任務 */

static porttask_function(prvidletask, pvparameters)

#endif

#if ((configuse_preemption == 1) && (configidle_should_yield == 1))

else

}#endif

#if (configuse_idle_hook == 1)

#endif

#if (configuse_tickless_idle != 0)

else

}(void)xtaskresumeall();

}else

}#endif

}}

其中prvchecktaskswaitingtermination()函式,負責檢查等待終結列表並釋放所有等待終結的任務

/* 檢查等待終結任務列表,釋放所有等待終結的任務 */

static void prvchecktaskswaitingtermination(void)

/* 退出臨界區 */

taskexit_critical();

/* 釋放任務tcb */

prvdeletetcb(pxtcb);

} }#endif

}

/* 刪除任務 */

void vtaskdelete(taskhandle_t xtasktodelete)

else

/* 任務被掛接到事件列表 */

if(listlist_item_container(&(pxtcb->xeventlistitem)) != null)

else

/* 任務id號加一 */

uxtasknumber++;

/* 該任務為當前任務 */

if(pxtcb == pxcurrenttcb)

else

tracetask_delete(pxtcb);

} /* 退出臨界區 */

taskexit_critical();

/* 排程器正在執行 */

if(xschedulerrunning != pdfalse)

else

}}

FreeRtos 空閒任務與空閒任務鉤子函式

以下基礎知識 自正點原子pdf資料。前面例子中建立的任務大部份時間都處於阻塞態。這種狀態下所有的任務都不可執行,所以也不能被排程器選中。但處理器總是需要 來執行 所以至少要有乙個任務處於執行態。為了保證這 一點,當呼叫 vtaskstartscheduler 時,排程器會自動建立乙個空閒任務。空閒任...

FreeRTOS 空閒任務與阻塞延遲實現

在裸機執行中,我們是使用軟體延時來實現延時的功能 delay 即是讓cpu空等來達到延時的目的。使用rtos的很大優勢就是榨乾cpu效能,永遠不讓他閒著,任務需要延時也就不需要讓cpu空等來實現延時的效果。rtos中的延時叫做阻塞延時,即任務需要延時的時候,任務會放棄cpu的使用權,cpu可以去幹其...

freeRTOS 空閒任務與阻塞延時 1

rtos中的延時是在需要延時的時間內任務放棄cpu的使用權,超過延時時間後重新獲得cpu的使用權。叫做 阻塞延時。空閒任務是在啟動排程器後建立的,是cpu空閒時候執行的,是優先順序最低的。空閒任務主要做一些清理記憶體的的任務。空閒任務是不允許阻塞的。如何實現空閒任務?1.在main.c定義空閒任務棧...