【发布时间】:2010-08-31 11:52:06
【问题描述】:
对于基于 MIPS 的嵌入式平台,我正在实现一个小程序来轮询 GPIO,即我正在使用芯片供应商的用户级 GPIO 库,它具有基本功能(打开 /dev/gpio、读取、写入引脚等)。设计很简单:
int gpio_fd;
fd_set rfds;
gpio_fd = gpio_open(...);
while (1) {
FD_ZERO(&rfds);
FD_SET(gpio_fd, &rfds);
if (select(gpio_fd + 1, &rfds, NULL, NULL, NULL) > 0) {
if (FD_ISSET(gpio_fd, &rfds)) {
/* read pins and similar */
}
}
}
但是我面临一个严重的问题 - 这个应用程序在运行时以“&”结尾,即把它放在后台,消耗 99% 的 CPU,这显然是因为紧密的循环,但我观察到类似的方法许多网络代码,它运行良好。
我是否遗漏了什么,会不会是 gpio 库的缺陷?
实际上,只需一个“while(1) ;”就可以达到同样的效果。这可能是内核的“自然”行为吗?
谢谢。
【问题讨论】:
标签: linux embedded-linux