huangxinji8 发表于 2023-6-30 15:19:47

从FreeRTOS移植而来软件定时器,可用于没有跑系统的单片机中

介绍
从FreeRTOS移植而来软件定时器,所有接口和FreeRTOS一致,可用于没有跑系统的单片机中

如何使用
下面给出一个使用的示例。其中dk_timer_task()方法可以放置在主循环中,也可以放置在滴答定时器中断里。如果放在主循环中,滴答定时器中断非必须,只要能提供一个计数器即可

#include "dk_soft_timer.h"

static uint32_t s_TickCount = 0;

//滴答定时器中断
void SysTick_Handler(void) {
    s_TickCount++;

    //软件定时器任务,可以放在主循环或者滴答定时器中断中。最终定时器的回调是在dk_timer_task调用的地方执行的。
    // dk_timer_task();
}

uint32_t sys_get_tick_count(void) {
    return s_TickCount;
}

//定时器回调,和FreeRTOS一样
static void s_time_callback( TimerHandle_t xTimer ) {
    printf("hello world!\r\n");
}

int main() {
    //初始化滴答定时器1ms节拍
    SysTick_Config(GetSysClock() / 1000);

    //软件定时器初始化
    dk_soft_timer_init(&sys_get_tick_count);

    //初始化一个软件定时器,和FreeRTOS一样使用
    xTimerHandle timer_handle = xTimerCreate("timer_handle", 10000, pdTRUE, (void *)0, s_time_callback);
    if (timer_handle != NULL) {
      xTimerStart( timer_handle, 0 );
    }

    while (1) {
      //软件定时器任务,可以放在主循环或者滴答定时器中断中。最终定时器的回调是在dk_timer_task调用的地方执行的。
      dk_timer_task();
    }
}



国学芯用 发表于 2023-6-30 15:59:56

huangxinji8 发表于 2023-6-30 16:25:27

国学芯用 发表于 2023-6-30 15:59

(引用自2楼)

???????

Trylin 发表于 2023-6-30 17:18:32

这个点子不错,用裸奔系统的定时器或者大循环代替原来的定时任务

zzz123456 发表于 2023-6-30 23:06:54

不错,关注。

huangxinji8 发表于 2023-7-4 16:03:36

最新的代码,修复了定时器无法停止的问题


foxpro2005 发表于 2023-7-4 21:55:28

先点个赞不错!
但若是裸机跑,还是感觉是还是复杂化了,相比较而言,个人还是比较推崇 那个"小小调度器";
同时也喜欢用,同样是基于systick的1ms计数器主线的(g_u32SystickCounter相当于一个伪时间戳), 在while大循环里 直接查询判断DelayTimeOut(&TimerID, 100),执行相应任务,简单清晰明了

huangxinji8 发表于 2023-7-5 09:24:19

foxpro2005 发表于 2023-7-4 21:55
先点个赞不错!
但若是裸机跑,还是感觉是还是复杂化了,相比较而言,个人还是比较推崇 那个"小小调度器";
...
(引用自7楼)

看了下小小调度器,不得不说确实精妙,有用的知识又增加了,哈哈哈

eyancool 发表于 2023-7-6 18:04:35

中国移动OneOS的软件定时器,能不能剥离操作系统单独移植?
页: [1]
查看完整版本: 从FreeRTOS移植而来软件定时器,可用于没有跑系统的单片机中