Linux系统20ms高精度时序实现方法(20ms精确定时linux)

摘要:本文介绍了在Linux系统中实现20ms高精度时序的方法。首先介绍了系统时钟的原理和实现方式,然后介绍了内核定时器和用户态定时器的使用方法,最后介绍了使用Linux RT实现高精度定时器的方法。

水富网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。创新互联2013年至今到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联。

一、引言

在嵌入式系统和实时控制系统中,高精度时序是非常重要的。Linux系统中提供了多种实现高精度时序的方法,本文将介绍如何在Linux系统中实现20ms高精度时序。

二、系统时钟原理

Linux系统中使用的是抢占式多任务操作系统,其时间管理的核心是系统时钟。系统时钟的工作原理如下:

1.时钟中断:系统时钟会定时向CPU发送一个中断信号,告诉CPU现在的时间。

2.硬件时钟:系统时钟采用定时器模块实现,一般是在CPU上集成的硬件定时器。

3.计数器:时钟中断发生时,系统时钟会读取定时器模块中的计数器,记录下当前时间。

4.时钟频率:时钟频率是指CPU每秒钟能产生多少时钟中断,一般为10ms或1ms。

三、内核定时器

内核定时器是Linux内核提供的一组定时器函数,它可以在内核中创建周期性或非周期性的定时器。内核定时器主要有以下几个接口:

1.init_timer(struct timer_list *timer); // 初始化定时器

2.add_timer(struct timer_list *timer); // 启动定时器

3.mod_timer(struct timer_list *timer, unsigned long expires); // 修改定时器

4.del_timer(struct timer_list *timer); // 删除定时器

示例代码:

#include

static struct timer_list mytimer;

static void myfunction(unsigned long data) {

// 定时器回调函数

}

int init_module(void) {

// 初始化定时器

init_timer(&mytimer);

// 设置定时器回调函数

mytimer.function = myfunction;

// 设置定时器超时时间

mytimer.expires = jiffies + 20*HZ/1000;

// 启动定时器

add_timer(&mytimer);

return 0;

}

四、用户态定时器

用户态定时器是通过使用POSIX定时器接口实现的,可以在用户态使用。它主要有以下几个接口:

1.timer_create(clockid_t clockid, struct sigevent *evp, timer_t *timerid); // 创建定时器

2.timer_settime(timer_t timerid, int flags, const struct itimerspec *new_value, struct itimerspec *old_value); // 设置定时器

3.timer_delete(timer_t timerid); // 删除定时器

示例代码:

#include

#include

void myfunction(int signo) {

// 定时器回调函数

}

int mn(int argc, char *argv[]) {

timer_t timerid;

struct sigevent sev;

struct itimerspec its;

// 设置定时器回调函数

sev.sigev_notify_function = myfunction;

sev.sigev_notify = SIGEV_SIGNAL;

// 创建定时器

timer_create(CLOCK_REALTIME, &sev, &timerid);

// 设置定时器超时时间

its.it_value.tv_sec = 0;

its.it_value.tv_nsec = 20230000;

its.it_interval.tv_sec = 0;

its.it_interval.tv_nsec = 20230000;

// 启动定时器

timer_settime(timerid, 0, &its, NULL);

// 主循环

while(1) {

// 等待定时器回调函数执行完毕

}

// 删除定时器

timer_delete(timerid);

return 0;

}

五、RT高精度定时器

RT是一个开源的实时操作系统扩展,它提供了一组高精度的定时器函数,可以实现微秒级别的高精度计时。RT主要有以下几个接口:

1.rt_task_delete(RT_TASK *task); // 删除任务

2.rt_task_create(RT_TASK *task, const char *name, int stack_size, int priority, int mode); // 创建实时任务

3.rt_timer_start(RTTIMER *timer, void (*function)(union sigval), void *arg, RTIME timer_value); // 启动定时器

4.rt_timer_stop(RTTIMER *timer); // 停止定时器

示例代码:

#include

#include

#include

#include

RT_TASK mytask;

RTTIMER mytimer;

void myfunction(union sigval arg) {

// 定时器回调函数

}

int mn(int argc, char *argv[]) {

RTIME period;

// 创建实时任务

rt_task_create(&mytask, “mytask”, 0, 99, 0);

// 启动实时任务

rt_task_start(&mytask, mytask_function, NULL);

// 启动定时器

period = nano2count(20230000);

rt_timer_start(&mytimer, myfunction, NULL, period);

// 主循环

while(1) {

// 等待定时器回调函数执行完毕

}

// 删除定时器

rt_timer_stop(&mytimer);

// 删除实时任务

rt_task_delete(&mytask);

return 0;

}

六、

成都网站建设公司-创新互联为您提供网站建设、网站制作、网页设计及定制高端网站建设服务!

如何在linux系统上设置定时执行任务

你可巧迟灶以通过编写一个 SHELL 脚本程序(在编程过程孝扮旦睁中会用到 Linux 系统的 at 命令),就可以实现在指定的时间执行指定的任务。

20ms精确定时 linux的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于20ms精确定时 linux,Linux系统20ms高精度时序实现方法,如何在linux系统上设置定时执行任务的信息别忘了在本站进行查找喔。

香港服务器选创新互联,香港虚拟主机被称为香港虚拟空间/香港网站空间,或者简称香港主机/香港空间。香港虚拟主机特点是免备案空间开通就用, 创新互联香港主机精选cn2+bgp线路访问快、稳定!

分享名称:Linux系统20ms高精度时序实现方法(20ms精确定时linux)
路径分享:http://www.shufengxianlan.com/qtweb/news5/519905.html

成都网站建设公司_创新互联,为您提供ChatGPT商城网站网站维护网站排名服务器托管全网营销推广

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联