caoai3033 2016-09-07 10:59 采纳率: 0%
浏览 2806

linux gpio 通过创建节点控制led,echo问题

/*timer handle*/
static void change_status(unsigned long time)
{
printk(KERN_INFO "---------handle---------------\nWangyf: Enter timer handle!\n");
printk(KERN_INFO "Wangyf: gpio_get_value = %d\n",gpio_get_value(GPIO_NUM));

if(gpio_get_value(GPIO_NUM) == 1) {
    printk(KERN_INFO "Wangyf: led down!\n");
    gpio_set_value(GPIO_NUM,0);
}
else if(gpio_get_value(GPIO_NUM) == 0) {
    printk(KERN_INFO "Wangyf: led up!\n");
    gpio_set_value(GPIO_NUM,1);
}

if(blink_flag){
    printk(KERN_INFO "Wangyf: Add timer again!\n----------------------------\n");
    my_timer.expires = jiffies + HZ;                                                                                                                                                                     
    add_timer(&my_timer);
}   
return;

}


/*set blink*/
static ssize_t blink_gpio(struct device *dev,
struct device_attribute *attr,
char *buf,size_t size)
{
int blink_status;

printk(KERN_INFO "Wangyf: blink get order from echo!\n");                                                                                                                                                

sscanf(buf,"%du",&blink_status);

printk(KERN_INFO "Wangyf: blink_status = %d\n",blink_status);

if(blink_status){
    printk(KERN_INFO "Wangyf: Open blink!\n");
    if(!blink_flag){
        my_timer.expires = jiffies + HZ; 
        add_timer(&my_timer);
    }   
    blink_flag = true;
} else {
    printk(KERN_INFO "Wangyf: Close blink!\n");
    del_timer(&my_timer);
    blink_flag = false;
}
return blink_status;

}


DEVICE_ATTR(blink,0666,NULL,blink_gpio);

static struct attribute *my_led_attribute[] = {
&dev_attr_blink.attr,
NULL
};


生成blink文件节点,使用命令
echo 1 > blink
灯会闪烁,但是会有输出:
bash: echo: write error: Success

使用命令
echo 0 > blink
会进入不停的循环,dmesg结果:

[ 2309.131709] Wangyf: blink get order from echo!
[ 2309.131715] Wangyf: blink_status = 0
[ 2309.131720] Wangyf: Close blink!
[ 2309.131726] Wangyf: blink get order from echo!
[ 2309.131732] Wangyf: blink_status = 0
[ 2309.131737] Wangyf: Close blink!
[ 2309.131744] Wangyf: blink get order from echo!
[ 2309.131750] Wangyf: blink_status = 0
[ 2309.131755] Wangyf: Close blink!
[ 2309.131762] Wangyf: blink get order from echo!
[ 2309.131768] Wangyf: blink_status = 0
[ 2309.131774] Wangyf: Close blink!
[ 2309.131781] Wangyf: blink get order from echo!
[ 2309.131786] Wangyf: blink_status = 0
[ 2309.131791] Wangyf: Close blink!
[ 2309.131797] Wangyf: blink get order from echo!
[ 2309.131802] Wangyf: blink_status = 0
[ 2309.131806] Wangyf: Close blink!
[ 2309.131811] Wangyf: blink get order from echo!
[ 2309.131816] Wangyf: blink_status = 0
[ 2309.131820] Wangyf: Close blink!
[ 2309.131826] Wangyf: blink get order from echo!
[ 2309.131830] Wangyf: blink_status = 0


probe函数中:
init_timer(&my_timer);
my_timer.function = change_status;
my_timer.expires = jiffies + HZ;

如果设置 2 为关闭blink就正常,这是为什么呢?

  • 写回答

1条回答 默认 最新

  • devmiao 2016-09-07 15:02
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 请求分析基于spring boot+vue的前后端分离的项目
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥200 关于#c++#的问题,请各位专家解答!网站的邀请码
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?