gpt4 book ai didi

c - Linux内核定时器函数传递自定义指针数据

转载 作者:行者123 更新时间:2023-11-30 17:11:09 25 4
gpt4 key购买 nike

我第一次尝试使用 Linux 内核计时器,并且尝试将指针作为函数参数传递,但我使用的任何方法都会使我的 3.12 内核崩溃。

这是我所拥有的:

init (struct lis3lv02d *lis3) {

printk("Timer module installing\n");
setup_timer( &poll_timer, accel_chip_poll, 0 );
poll_timer.data=(unsigned long) lis3;
ret = mod_timer( &poll_timer, jiffies + msecs_to_jiffies(POLL_MSECS) );
}



accel_chip_poll(unsigned long data) {
struct lis3lv02d *lis3 = (struct lis3lv02d*)data;
get_data (stacc3);
...
}

它不断地使我的内核崩溃(模块是内置的)。有人可以帮我弄清楚我错过了什么吗?

谢谢

最佳答案

在accel_chip_poll中。您正在将一个长值(数据)转换为指向结构的指针(并且根据标准,该行为是未定义的)。您可能想要将指针转换为如下所示的数据:

struct lis3lv02d lis3 = (struct lis3lv02d)&data;

这同样适用于:

poll_timer.data=(无符号长) lis3;

您需要先取消引用它,请检查如何通过指针访问结构体元素。

关于c - Linux内核定时器函数传递自定义指针数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32492644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com