生活随笔
收集整理的這篇文章主要介紹了
任务的删除
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 1 任務(wù)的刪除
- 1.1 任務(wù)刪除問(wèn)題
- 1.2 安全刪除原理
- 1.3 設(shè)計(jì)實(shí)現(xiàn)
1 任務(wù)的刪除
1.1 任務(wù)刪除問(wèn)題
刪除任務(wù)需要做如下兩項(xiàng)工作:
將任務(wù)從所在隊(duì)列中刪除。
釋放關(guān)閉占用的資源。
1.2 安全刪除原理
安全刪除方式一:設(shè)置清理回調(diào)函數(shù),在強(qiáng)制刪除時(shí)調(diào)用。
安全刪除方式之二:設(shè)置刪除請(qǐng)求標(biāo)志,由任務(wù)自己決定何時(shí)刪除。
兩種刪除方式的比較:
1.3 設(shè)計(jì)實(shí)現(xiàn)
添加刪除清理和請(qǐng)求刪除標(biāo)志位函數(shù):
請(qǐng)求刪除函數(shù):
檢查是否請(qǐng)求刪除函數(shù):
刪除自己函數(shù):
強(qiáng)制刪除函數(shù):
關(guān)鍵代碼實(shí)現(xiàn)如下:
void tTaskSetCleanCallFunc
(tTask
* task
, void (*clean
)(void * param
), void * param
)
{task
->clean
= clean
;task
->cleanParam
= param
;
}
void tTaskForceDelete
(tTask
* task
)
{uint32_t status
= tTaskEnterCritical();if (task
->state
& TINYOS_TASK_STATE_DELAYED
) {tTimeTaskRemove(task
);}else if (!(task
->state
& TINYOS_TASK_STATE_SUSPEND
)){tTaskSchedRemove(task
);}if (task
->clean
) {task
->clean(task
->cleanParam
);}if (currentTask
== task
) {tTaskSched();}tTaskExitCritical(status
);
}
void tTaskRequestDelete
(tTask
* task
)
{uint32_t status
= tTaskEnterCritical();task
->requestDeleteFlag
= 1;tTaskExitCritical(status
);
}
uint8_t tTaskIsRequestedDelete
(void)
{uint8_t delete
;uint32_t status
= tTaskEnterCritical();delete
= currentTask
->requestDeleteFlag
;tTaskExitCritical(status
); return delete
;
}
void tTaskDeleteSelf
(void)
{uint32_t status
= tTaskEnterCritical();tTaskSchedRemove(currentTask
);if (currentTask
->clean
){currentTask
->clean(currentTask
->cleanParam
);}tTaskSched();tTaskExitCritical(status
);
}
參考資料:
【李述銅】從0到1自己動(dòng)手寫(xiě)嵌入式操作系統(tǒng)
總結(jié)
以上是生活随笔為你收集整理的任务的删除的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。