rtt——时钟管理

嘀嗒时钟

时钟tick的频率一般由RT_TICK_PER_SECOND宏定义决定,系统默认设置RT_TICK_PER_SECOND为1000,注意RT_TICK_PER_SECOND不能大于1000,防止嘀嗒硬件溢出,无返回值

定时器

我们首先要区分操作系统定时器和芯片上的硬件定时器:

  • 硬件定时器:是芯片本身提供的定时功能,一般由外部晶振提供芯片输入时钟,当到达设定的时间值后芯片中断控制器产生时钟中断;硬件定时器的精度都很高,都可以达到ns级别,并且是中断触发的方式,但是定时器数量有限
  • 操作系统定时器:是由操作系统提供给的一类接口,在硬件定时器基础上,使系统能够提供不受数量限制的定时器服务

RT-thread实时操作系统提供了软件定时器接口

创建定时器

rt_timer_t rt_timer_create(const char *name,
                           void (*timeout)(void *parameter),
                           void       *parameter,
                           rt_tick_t   time,
                           rt_uint8_t  flag);

flag的参数宏定义为:

#define RT_TIMER_FLAG_ONE_SHOT          0x0             /**< 单次定时 */
#define RT_TIMER_FLAG_PERIODIC          0x2             /**< 周期定时 */

#define RT_TIMER_FLAG_HARD_TIMER        0x0             /**< 硬件定时器 */
#define RT_TIMER_FLAG_SOFT1_TIMER        0x4             /**< 软件定时器 */

初始化定时器

void rt_timer_init(rt_timer_t  timer,
                   const char *name,
                   void (*timeout)(void *parameter),
                   void       *parameter,
                   rt_tick_t   time,
                   rt_uint8_t  flag);

删除定时器

rt_err_t rt_timer_delete(rt_timer_t timer);

使用create创建的定时器,调用这个函数,会将定时器从rt_timer链表中删除,并释放该定时器控制块占用的内存

脱离定时器

rt_err_t rt_timer_detach(rt_timer_t timer);

使用init初始化的定时,使用该函数会将定时器从内核对象容器中脱离出,但定时器对象所占用的空间不会释放

启动/关闭定时器

rt_err_t rt_timer_start(rt_timer_t timer);
rt_err_t rt_timer_stop(rt_timer_t timer);

启动定时器后,定时器的状态,会改为激活状态RT_TIMER_FLAG_ACTIVATED,并按照超时顺序插入到rt_timer队列链表中

停止定时器后,定时器的状态会更改为停止状态RT_TIMER_FLAG_DEACTIVATED,并从rt_timer链表中脱离出来不参与定时器超时检查;周期定时器在定时器到期时,可以待用这个函数停止该定时器

#define RT_TIMER_FLAG_DEACTIVATED       0x0             /**< timer 激活状态 */
#define RT_TIMER_FLAG_ACTIVATED         0x1             /**< timer 停止状态 */

控制定时器

rt_err_t rt_timer_control(rt_timer_t timer, int cmd, void *arg);

cmd支持的命令:

#define RT_TIMER_CTRL_SET_TIME          0x0             /**< 设置定时器事件 */
#define RT_TIMER_CTRL_GET_TIME          0x1             /**< 获取定时器事件 */
#define RT_TIMER_CTRL_SET_ONESHOT       0x2             /**< 单次定时 */
#define RT_TIMER_CTRL_SET_PERIODIC      0x3             /**< 周期定时 */
如果您觉得这篇文章不错,且手里较为宽裕,可以支持一下博主,一分也是缘分😊
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇