微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI无线射频设计 > cc1310 创建定时器问题

cc1310 创建定时器问题

时间:12-23 整理:3721RD 点击:

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top