cc1310 创建定时器问题
cc1310创建定时器为什么 必须再创建一个任务 然后任务里while(1){} 这样定时器才能准确延时,但是这样的话怎么任务调度呢
这是因为我们的 SDK基于TIRTOS这个操作系统的,类似Liunx, 有时间片的概念,有一个专门的定时器用于系统的任务调度,每隔一段时间会去运行一个task
你可以使用clock模块
示例代码如下,在clk0Fxn()函数中添加定时时间到后需要执行的代码即可。
每增加一个定时器,只需多创建一个clock instance,并在它对应的clk0Fxn()函数中添加计时时间到希望执行的代码。
/* Construct BIOS Objects */
Clock_Params clkParams;
Clock_Params_init(&clkParams);
clkParams.period = 5000/Clock_tickPeriod;
clkParams.startFlag = TRUE;
/* Construct a periodic Clock Instance */
Clock_construct(&clk0Struct, (Clock_FuncPtr)clk0Fxn,
5000/Clock_tickPeriod, &clkParams);
任务调度这样还怎么精确延时,这种系统和UCOS很像都是delay让出控制权。随着深入,已经会调用驱动去创建硬件定时器
这个不是调用delay让出系统控制权,你说的那个是Task_sleep()函数。
Clock模块是使用软件中断实现的,它以系统使用的system tick作为最小计时单位。
如果你需要使用更高精度的定时,可以使用GBTimer。
你可以把clock模块和Semaphore结合使用,实现任务的时间调度。
比如在task中使用Semaphore_pend,在clock的callback函数中使用Semaphore_post