【发布时间】:2011-02-04 13:31:57
【问题描述】:
我们有一个 Linux 嵌入式项目,我们关心性能。
串行端口异步输入示例位于: http://www.faqs.org/docs/Linux-HOWTO/Serial-Programming-HOWTO.html#AEN105 几乎做我们想要的。
但是,负责工程师反对 CPU 性能损失 循环睡眠呼叫。他希望程序等待一个信号来执行响应处理代码。
我尝试将该代码从 main() 移动到信号函数内部,即:
void signal_handler_IO (int status)
{
// I moved my code here
}
结果不起作用,写入该函数中的串行端口很快失败,程序完全没有响应。
这是为什么呢?
有没有人有一个很好的仅用于一个串行端口的信号驱动 I/O 在线示例?我一直在研究 Kerrisk 的“The Linux Priogramming Interface”一书的第 63 章,并且疯狂地搜索。我开始认为可能没有更好的方法来做最初的例子。
提前致谢,
伯特
【问题讨论】:
-
查看评论“通常我们会在这里做一些有用的事情”。不要设置非阻塞 I/O 然后调用 sleep,设置非阻塞 I/O 然后在该线程中做一些有用的事情,如果你喜欢使用单线程应用程序,就像你的所有其他功能一样。否则,如果您想使用多线程专用线程来监视串行并使用阻塞 I/O,那么内核将暂停线程,直到有事情要做。或者有一个 I/O 线程使用 select 来监视多个输入源,并且只有在其中一个输入源上有输入时才会被唤醒。
-
一般来说,在同一个问题中问两个单独的问题(“为什么会这样?”和“有人有例子吗?”)是个坏主意。见meta.stackexchange.com/questions/39223/…。
标签: linux embedded serial-port