生活随笔
收集整理的這篇文章主要介紹了
任务的删除
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1 任務的刪除
- 1.1 任務刪除問題
- 1.2 安全刪除原理
- 1.3 設計實現
1 任務的刪除
1.1 任務刪除問題
刪除任務需要做如下兩項工作:
將任務從所在隊列中刪除。
釋放關閉占用的資源。
1.2 安全刪除原理
安全刪除方式一:設置清理回調函數,在強制刪除時調用。
安全刪除方式之二:設置刪除請求標志,由任務自己決定何時刪除。
兩種刪除方式的比較:
1.3 設計實現
添加刪除清理和請求刪除標志位函數:
請求刪除函數:
檢查是否請求刪除函數:
刪除自己函數:
強制刪除函數:
關鍵代碼實現如下:
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自己動手寫嵌入式操作系統
總結
以上是生活随笔為你收集整理的任务的删除的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。