软件定时器是由操作系统提供的一类系统接口,它构建在硬件定时器基础之上,使系统能够提供不受数目限制的定时器服务。
在开始使用
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