TMOS的時(shí)間基準(zhǔn)是625us,每個(gè)任務(wù)占用一定的時(shí)間,所有的任務(wù)通過(guò)時(shí)間分片的方式處理-----------是輪詢每個(gè)任務(wù)都要相隔625us的時(shí)間嗎?如果有任務(wù)事件,處理時(shí)間沒(méi)有超過(guò)625us,也要等這個(gè)625us時(shí)間計(jì)時(shí)結(jié)束才能輪詢下一個(gè)任務(wù)?
625us是添加TMOS任務(wù)的單位時(shí)間,不影響輪詢?nèi)蝿?wù);輪詢?nèi)蝿?wù)的時(shí)間只與程序運(yùn)行時(shí)間有關(guān)。?
最明顯的方式在:僅執(zhí)行一個(gè)任務(wù)的時(shí)候,則輪詢的時(shí)間就是TMOS_SystemProcess的執(zhí)行時(shí)間。
多任務(wù)管理方式實(shí)際上只有一個(gè)任務(wù)在運(yùn)行,但是可以使用任務(wù)調(diào)度的策略將多個(gè)任務(wù)進(jìn)行調(diào)度,每個(gè)任務(wù)占用一定的時(shí)間--------占用一定的時(shí)間是不是說(shuō)每個(gè)任務(wù)都占用625us?
625us是系統(tǒng)時(shí)鐘的單位即添加的tmos任務(wù)的時(shí)間單位,并不是每個(gè)任務(wù)均要占用的時(shí)間。
參考tmos講解:
每一個(gè)輪詢?nèi)蝿?wù)時(shí)都是在每個(gè)625us的起點(diǎn),而每個(gè)任務(wù)的執(zhí)行都要在625us內(nèi)完成,是這個(gè)意思嗎?
您好,協(xié)議棧刷新接下來(lái)需要運(yùn)行的的事件及其執(zhí)行起始時(shí)間點(diǎn),是調(diào)用主循環(huán)中的TMOS_SystemProcess接口刷新的,這個(gè)接口輪詢的頻率越高越好。
事件執(zhí)行的起始時(shí)間點(diǎn),是以625us為刻度去安排的;事件執(zhí)行的結(jié)束時(shí)間點(diǎn),以實(shí)際跑完的時(shí)間點(diǎn)為準(zhǔn);執(zhí)行事件的時(shí)間長(zhǎng)度可以超過(guò)625us,以實(shí)際執(zhí)行需要的時(shí)長(zhǎng)為準(zhǔn),比如說(shuō)跑個(gè)算法需要5ms,那么這5ms期間是無(wú)法刷新、無(wú)法執(zhí)行其他事件的(協(xié)議棧是查詢式的,事件執(zhí)行期間硬件中斷可以觸發(fā))。TMOS事件運(yùn)行完后立即回到主函數(shù)運(yùn)行TMOS_SystemProcess接口再去不斷刷新接下來(lái)需要執(zhí)行的事件。
就好比用毫米刻度尺測(cè)量物件,要找個(gè)標(biāo)明的刻度比如說(shuō)3毫米整處開(kāi)始測(cè)量,一般不會(huì)從3.幾毫米處開(kāi)始測(cè)量;物件長(zhǎng)度也以實(shí)際長(zhǎng)度為準(zhǔn),不是每個(gè)物件都要小于1毫米長(zhǎng)。
明白了,謝謝
詳細(xì)補(bǔ)充:
調(diào)用tmos_start_task(參數(shù)1,參數(shù)2,參數(shù)3=n)在延時(shí)一段時(shí)間后執(zhí)行事件,開(kāi)始延時(shí)計(jì)時(shí)的時(shí)間點(diǎn)是基于RTC(32000時(shí)鐘頻率)的31.25us為單位的,比如說(shuō)選取了為31.25us*N為開(kāi)始計(jì)時(shí)的時(shí)間點(diǎn);結(jié)束延時(shí)計(jì)時(shí)的時(shí)間點(diǎn)是31.25us*N+625us*n(參數(shù)3);結(jié)束延時(shí)計(jì)時(shí)后,即到達(dá)了上述的“事件執(zhí)行的時(shí)間點(diǎn)”,會(huì)以最快的速度立即執(zhí)行事件。
調(diào)用tmos_set_event配置立即執(zhí)行事件,是在TMOS_SystemProcess查詢到有需要立即執(zhí)行的事件,以最快的速度立即執(zhí)行事件,所以說(shuō)TMOS_SystemProcess執(zhí)行頻率越快越好。