【发布时间】:2015-10-26 08:54:36
【问题描述】:
我为 LED 闪烁编写了我的第一个简单的 Linux 模块。如果我使用命令 ssleep(1) 在 Led ON 和 Led Off 之间暂停,那么一切正常,但如果我使用 udelay(40),那么整个 Linux 和 SSH、Webserver 等应用程序都会被冻结。您能帮我解释一下为什么会发生这种情况以及如何解决吗?
#include <linux/init.h>
#include <linux/module.h>
#include <linux/delay.h>
#include <linux/gpio.h>
#include <mach/gpio.h>
MODULE_LICENSE("GPL");
static int led_on_init(void)
{
gpio_direction_output(AT91_PIN_PA24, 0);
int i = 1;
while (i == 1)
{
gpio_set_value(AT91_PIN_PA24, 1);
/*udelay(40);*/
ssleep(1);
gpio_set_value(AT91_PIN_PA24, 0);
ssleep(1);
/*udelay(40);*/
}
}
static void led_on_exit(void)
{
gpio_set_value(AT91_PIN_PA24, 0);
}
module_init(led_on_init);
module_exit(led_on_exit);
【问题讨论】: