内核定时器使用的错误

glacierful glacierful 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
想使用内核定时器来对开发板上的灯,定时的点亮、关闭,相成闪烁的效果。在用户态应用程序调用这个驱动时,linux直接崩溃了,问题出在定时器调用的那个函数中:

void led_twinkle_timer_function(unsigned long arg)
{
if (!led_twinkle_status)
{
myled_ioctl_led_on();
//printk(KERN_ALERT"led on \n");
led_twinkle_status = 1;
}
else
{
myled_ioctl_led_off();
//printk(KERN_ALERT"led off \n");
led_twinkle_status = 0;
}

mod_timer(&myled_dev->s_timer, jiffies+HZ);
}

执行到myled_ioctl_led_on()或者myled_ioctl_led_off()时就出错了。奇怪的是如果把这两个函数禁掉,直接printk,是正常的。函数中就是调用了一个内核中的函数,而且不用时钟,直接调用时是正常的。

void myled_ioctl_led_on(void)
{
cpm2_set_pin(2, 13, CPM_PIN_OUTPUT|CPM_PIN_GPIO|CPM_PIN_VALUE_0);
}
...全文

相关推荐

评论 10
收藏 已收藏
分享
返回顶部
glacierful
Linux_Kernel 4,469 成员 17,458 内容