在linux中调度任务

时间:2014-03-05 06:04:27

标签: c linux

我们可以安排程序每5毫秒或10毫秒等执行一次吗? 我需要通过串口产生1 khz和15 khz的脉冲。 但程序只应切换串口中的引脚,因此频率必须由调度程序产生。这是否可以在Linux中使用rt补丁?

4 个答案:

答案 0 :(得分:1)

我认为更好的解决方案是将“生成脉冲”函数放在循环中,例如:

for (;;) {
    generate_pulse(); /* generate a pulse */
    sleep(5ms);       /* or 10ms */
}

答案 1 :(得分:1)

is this possible in linux with a rt patch?

如果时机关键,我建议选择RT补丁。

Xenomai是我在几天前在2.6内核上使用的RT补丁。

这是一个每1秒运行一次的例子。 http://www.xenomai.org/documentation/trunk/html/api/trivial-periodic_8c-example.html

答案 2 :(得分:1)

PPS project现在是mainline linux kernel的一部分(至少是2.6分支的一部分,但在最新的3.x内核分支中看起来有完全集成){{3 }}

还明确提到将此PPS实现与链接的txt文件中的串行端口一起使用

  

PPS源可以连接到串口(通常连接到数据   载波检测引脚)或并行端口(ACK引脚)或特殊引脚   CPU的GPIO(这是嵌入式系统中的常见情况)但在每个中都是如此   当新脉冲到达时,系统必须向其应用时间戳   并将其记录在用户地区。

显然很好的示例/教程/指南,甚至不是that hard to find,我确信在使用搜索引擎时你会找到很多好的资源。

API的标头通常位于/usr/include/linux/pps.h

答案 3 :(得分:0)

我终于找到了完成它的方法。 最好的方法是首先创建一个具有所需时间的计时器。然后在每次定时器溢出时调用任务(这是脉冲生成程序)。计时器的程序可以在后台运行。可以分别使用timer_create()和timer_settime()创建和设置定时器。可以使用fork()和execl()从一个程序调用另一个程序。该程序可以使用守护进程()在后台运行。 通过使用所有这些东西,我们可以创建自己的调度程序。