嵌入式技术论坛
直播中

王树林

7年用户 1666经验值
私信 关注
[经验]

RT-Thread Studio的SoftTimer配置记录

软件定时器是由操作系统提供的一类系统接口,它构建在硬件定时器基础之上,使系统能够提供不受数目限制的定时器服务。
在开始使用STM32硬件设备之前,先使用下系统软件定时器,功能还是比较强大的,可以没有个数限制,对于处理一些定时任务,十分方便。这次只写一个简单demo,参照是官网的demo。只是做了些可以批量使用的处理。
因为RT-Thread Studio 没有官方的详细使用说明,所以有些需要自己摸索设置软件,今天关于系统提示“可以修改硬件复位为系统复位”,意思就是可以不用手动复位,这个配置我找了一会才找到,记录如下。

按照图示的步骤可以完成操作。
为了便于使用定时器,重新定义了结构体
typedef struct {
char *name;
void (*timeout)(void *parameter);
void *parameter;
rt_tick_t time;
rt_uint8_t flag;

}SoftTimerStruct;
利用数组对结构体赋值

SoftTimerStruct sfTimer[]={
{"timer1", Time1_Callback,RT_NULL, 1000, RT_TIMER_FLAG_PERIODIC},
{"timer2", Time2_Callback,RT_NULL, 3000, RT_TIMER_FLAG_PERIODIC},
};
这样可以方便的增加软件定时器。这样可以方便的增加定时器。

创建一个测试demo

int timer_sample(void)
{
rt_uint8_t SoftTimerIndex = 0;

while(1)
{
if(strcmp(sfTimer[SoftTimerIndex].name,"") != 0)
{
soft_timer[SoftTimerIndex] =
rt_timer_create(sfTimer[SoftTimerIndex].name,
sfTimer[SoftTimerIndex].timeout,
sfTimer[SoftTimerIndex].parameter,
sfTimer[SoftTimerIndex].time,
sfTimer[SoftTimerIndex].flag
);
if (soft_timer[SoftTimerIndex] != 0)
{

rt_timer_start(soft_timer[SoftTimerIndex]);
rt_kprintf("soft_timer %d creat success!
",SoftTimerIndex);
}

SoftTimerIndex++;
if(SoftTimerIndex==2)break;
}
else {
break;
}
}


return 0;
}
以上测试结果如下:

后续会将led的驱动加入到软件定时器中做一个led闪烁。
总结:
设置复位模式,这个官方应该给个更详细的配置说明,实在要吐槽下。这样的摸索太费时间。
2.debug的配置说明,还没有特别会使用,后续会测试下,这个需要测试下。
3.项目的保存,必须没有空格和中文,项目直接使用重命名来进行更换名称。
4.创建软件定时器需要做个上限判断不然会系统死机。


原作者:cgh198510

更多回帖

发帖
×
20
完善资料,
赚取积分