看到了基于systick的软件定时器,但是stm32本身有好多硬件定时器,rtos不支持使用硬件定时器吗?谢谢
当然可以使用硬件定时器呀,参考文档看一下,有使用例程 HWTIMER 设备
RT-Thread 的定时器提供两类定时器机制:第一类是单次触发定时器,这类定时器在启动后只会触发一次定时器事件,然后定时器自动停止。第二类是周期触发定时器,这类定时器会周期性的触发定时器事件,直到用户手动的停止,否则将永远持续执行下去。
另外,根据超时函数执行时所处的上下文环境,RT-Thread 的定时器可以分为 HARD_TIMER 模式与SOFT_TIMER 模式
HARD_TIMER 模式
HARD_TIMER 模式的定时器超时函数在中断上下文环境中执行,可以在初始化 / 创建定时器时使用参数 RT_TIMER_FLAG_HARD_TIMER 来指定。
在中断上下文环境中执行时,对于超时函数的要求与中断服务例程的要求相同:执行时间应该尽量短,执行时不应导致当前上下文挂起、等待。例如在中断上下文中执行的超时函数它不应该试图去申请动态内存、释放动态内存等。
RT-Thread 定时器默认的方式是 HARD_TIMER 模式,即定时器超时后,超时函数是在系统时钟中断的上下文环境中运行的。在中断上下文中的执行方式决定了定时器的超时函数不应该调用任何会让当前上下文挂起的系统函数;也不能够执行非常长的时间,否则会导致其他中断的响应时间加长或抢占了其他线程执行的时间。
SOFT_TIMER 模式
SOFT_TIMER 模式可配置,通过宏定义 RT_USING_TIMER_SOFT 来决定是否启用该模式。该模式被启用后,系统会在初始化时创建一个 timer 线程,然后 SOFT_TIMER 模式的定时器超时函数在都会在 timer 线程的上下文环境中执行。可以在初始化 / 创建定时器时使用参数 RT_TIMER_FLAG_SOFT_TIMER 来指定设置 SOFT_TIMER 模式。
滴答定时器提供心跳,其他的定时器延时,容易超过线程的时间片
@伊森亨特 不能死等。。。
@伊森亨特
一、就像本楼说的,你在裸机stm32中如何使用定时器,在RT-Thread中也能这样使用;
二、至于你说的可能会影响滴答时钟的时间片的问题;
1)如果是延时,就是用RT-Thread中提供的函数;
2)如果试用定时器做其他操作,一般是中断,那就尽量减少中断中执行的语句;其他使用也是同样的思想
@游走在01的海洋 好的,我试试,我写一个按键控制pwm呼吸灯速度的试试。
rtos好难啊,跟着视频写了一遍代码,但是不理解,不知道什么时候用啊