Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C linux中的任务调度_C_Linux - Fatal编程技术网

C linux中的任务调度

C linux中的任务调度,c,linux,C,Linux,我们能安排一个程序每5毫秒或10毫秒执行一次吗? 我需要通过串行端口产生1 khz和15 khz的脉冲。 但是程序应该只切换串行端口中的管脚,因此频率必须由调度器生成。这在使用rt补丁的linux中是否可行?我认为更好的解决方案是将“生成脉冲”函数放入循环中,例如: for (;;) { generate_pulse(); /* generate a pulse */ sleep(5ms); /* or 10ms */ } 这在使用rt修补程序的linux中可能吗?

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

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

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

这在使用rt修补程序的linux中可能吗?

如果时间紧迫,我建议使用RT贴片

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

下面是一个每1秒运行一次的示例。

现在有一部分(2.6分支至少有一部分,但在最新的3.x内核分支中,它看起来是完全集成的)

在链接的txt文件中,还明确提到使用带有串行端口的PPS实现

PPS源可以连接到串行端口(通常连接到数据端口) 载波检测引脚)或并行端口(ACK引脚)或专用端口 CPU的GPIO(这是嵌入式系统中常见的情况),但在每个 当新脉冲到达时,系统必须对其应用时间戳 并为userland记录它

很明显,好的例子/教程/指南,甚至不是,我相信你会在使用搜索引擎时找到很多好的资源


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

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

我对此表示怀疑。你考虑过使用线程吗?没有,我从来没有使用过线程。但是这在rt linux中不应该是可能的吗,毕竟这是它的用途,对吗?是的,这是可行的,我已经尝试过了,但是我想测试我的内核的调度能力。@aash但是每5毫秒或10毫秒启动一个程序,实际上你在测试缓存和/或磁盘设备的读取能力,而不是内核的调度功能。但是如果我要为这两个任务分配优先级,并将它们调度为同时运行,然后我可以检查优先级更高的任务是否正在运行。@aash我认为您选择的方法不适合您想要测试的内容。您能建议一个更好的方法吗?我已经从kernel.org下载了一个rt补丁,并用我的3.0内核进行了修补。我可以将xenomai与3.x内核一起使用吗?它是否比kernel.org上的补丁更好?@aash最新的xenomai版本2.6.3可能适用于3.4和3.5内核。但我从未测试过。