taskDelay 原理如下:主时钟中断ISR,调用tickAnnounce,此时处于延时态的任务,延时计数器减1,减到0,任务状态转为ready态。
主时钟中断间隔:sysClkRateSet(1000);
主时钟中断ISR:在usrClock中实现。
因而taskDelay的offset,取决于就绪队列的长度,
#include <time.h>
sysClkRateSet(1000);
struct timespec ts;
while(1){
clock_gettime( CLOCK_REALTIME, &ts );
logMsg( " %#X %#X\n", ts.tv_sec, ts.tv_nsec, 3, 4, 5, 6 );
taskDelay(1000);
}
输出值如下: