TMOS的时间基准是625us,每个任务占用一定的时间,所有的任务通过时间分片的方式处理-----------是轮询每个任务都要相隔625us的时间吗?如果有任务事件,处理时间没有超过625us,也要等这个625us时间计时结束才能轮询下一个任务?
625us是添加TMOS任务的单位时间,不影响轮询任务;轮询任务的时间只与程序运行时间有关。
最明显的方式在:仅执行一个任务的时候,则轮询的时间就是TMOS_SystemProcess的执行时间。
多任务管理方式实际上只有一个任务在运行,但是可以使用任务调度的策略将多个任务进行调度,每个任务占用一定的时间--------占用一定的时间是不是说每个任务都占用625us?
625us是系统时钟的单位即添加的tmos任务的时间单位,并不是每个任务均要占用的时间。
参考tmos讲解:
每一个轮询任务时都是在每个625us的起点,而每个任务的执行都要在625us内完成,是这个意思吗?
您好,协议栈刷新接下来需要运行的的事件及其执行起始时间点,是调用主循环中的TMOS_SystemProcess接口刷新的,这个接口轮询的频率越高越好。
事件执行的起始时间点,是以625us为刻度去安排的;事件执行的结束时间点,以实际跑完的时间点为准;执行事件的时间长度可以超过625us,以实际执行需要的时长为准,比如说跑个算法需要5ms,那么这5ms期间是无法刷新、无法执行其他事件的(协议栈是查询式的,事件执行期间硬件中断可以触发)。TMOS事件运行完后立即回到主函数运行TMOS_SystemProcess接口再去不断刷新接下来需要执行的事件。
就好比用毫米刻度尺测量物件,要找个标明的刻度比如说3毫米整处开始测量,一般不会从3.几毫米处开始测量;物件长度也以实际长度为准,不是每个物件都要小于1毫米长。
明白了,谢谢
详细补充:
调用tmos_start_task(参数1,参数2,参数3=n)在延时一段时间后执行事件,开始延时计时的时间点是基于RTC(32000时钟频率)的31.25us为单位的,比如说选取了为31.25us*N为开始计时的时间点;结束延时计时的时间点是31.25us*N+625us*n(参数3);结束延时计时后,即到达了上述的“事件执行的时间点”,会以最快的速度立即执行事件。
调用tmos_set_event配置立即执行事件,是在TMOS_SystemProcess查询到有需要立即执行的事件,以最快的速度立即执行事件,所以说TMOS_SystemProcess执行频率越快越好。