【发布时间】:2019-05-16 10:38:21
【问题描述】:
不确定我是否应该在此处发布此内容,但我得问一下。
上下文:
- 嵌入式平台上的 Linux (CPU @~500MHz)
- 一个团队致力于单一用户空间软件
- 一个团队致力于 Linux + 驱动程序 + uboot 等。
软件必须处理 GPIO,一些是输出(需要时写入),一些是输入(需要时读取,对另一些最好类似中断)。
该软件是一个多线程应用程序,在 SCHED_FIFO 调度策略中具有约 10-15 个线程。
假设我有一个名为 WGPIO 的模块,它是一个处理 GPIO 的包装器。 (顺便说一句,这是由 Linux 团队开发的。WGPIO 仍在用户空间中,但如果需要,他们可以开发驱动程序)
这是我们所说的设计的一些伪代码。
gpio_state state = ON;
// IO_O is output. Set to ON, don't care if it's active_high or active_low btw
WGPIO_WriteOutput(IO_O,state);
// IO_I is input, read when needed
WGPIO_ReadInput(IO_I,&state);
// register callback when rising edge occurs on IO named IO_IT
WGPIO_SetCallback(IO_IT,EDGE_RISING,my_callback);
// Unmask to enable further IT-like processing
WGPIO_UnmaskIRQ(IO_IT);
我必须能够在 5 到 10 毫秒内处理一些 GPIO 更改。
多个 FD 上的一些用户空间轮询(WGPIO 会有一个 SCHED_FIFO 线程)是否足以在我的应用程序中模拟“类似中断”的处理?这看起来是最简单的想法。
如果您需要更多详细信息,请随时询问。 提前致谢。
【问题讨论】: