任务切换与整数tick的问题

不是说一个任务阻塞后,剩余时间会被操作系统回收,然后从就绪列表切换一个任务为运行态并重新分配1的tick去运行吗? 老师我好像明白了,您的意思是第一轮B只执行了0.2tick,下一轮B会执行0.8tick然后切换任务并在下一次重新分配1tick给B吗?C可以运行完整的一个1tick,但是在下一轮B执行0.8tick后,A是不是执行0.2tick又进入中断切换给别的任务了?这样每个任务会因为阻塞延时等时间逐渐碎片化执行?

当前任务0.8tick时因为阻塞而释放掉剩余的tick时间,CPU会把这个剩余的0.2tick分配给下一个任务,而不是重新分配一个完整的1tick给下一个任务。所以当这个0.2tick消耗完后,后续任务无阻塞无提前完成情况时,每一个任务都可以被分配1tick而执行完整的1个tick直到固定周期发生的中断而启动任务切换机制决定执行的下一个任务并重新分配tick,这样理解对吗?

核心就3个:①当前任务阻塞后会"立刻、马上"切换到其他任务,②当前任务唤醒更高优先级的任务后会"立刻、马上"切换到更高优先级的任务,③平时是tick中断触发切换。下一轮B会执行0.8tick?不对,根据③,可以知道下一轮B可以执行完一整个tick。A是不是执行完0.2tick又进入中断?不对,tick中断发生的时间是恒定的,A可以执行完一整个tick

只要记住一个关键点:tick中断的发生是恒定的,在tick中断里会判断是否要切换任务。当前任务运行0.8个tick后阻塞,那就必定要挑选一个任务来运行;再过0.2个tick产生了tick中断,这时必定要挑选下一个任务来运行。你别想复杂了,RTOS没有“分配时间”、“释放时间”的操作。