ARM&Linux基础
+ -

同步总结笔记

2025-11-25 14 0
struct device_node* nd = of_find_node_by_path("/key");

int gpio =  of_get_named_gpio(nd,"key_gpio",0);

char name[100];
sprintf(name,"ke_gpio");

gpio_request(gpio,name);
gpio_direction_input(gpio);

int irqnum = irq_of_parse_and_map(nd,0);
int irqnum = gpio_to_irq(gpio);




atomic_t value;
atomic_set(&value,10);
int v =  automic_read(&value);

automic_dec_and_test -1,==0?true:false;



spinlock_t lock;
spin_lock_init(&lock);

sprin_lock(&lock);
spin_unlokc(&lock);

unsigned int flag;
spin_lock_irqsave(&flag);
spin_unlock_irqrestore(&flag);



mutex t;
mutex_init(&t);
mutex_lock(&t);
mutex_unlokc(&t);

timer_list

msecs_to_jiffies(10)

timer_list timer;
init_timer(&timer);
timer.function = timer_function;

mod_timer(&tier,jiffies+mssecs_to_jiffies(10));

void timer_function()
{
    mod_timer(&tier,jiffies+mssecs_to_jiffies(10));
}

wait_queue_head_t

wait_queue_head_t wait;
init_wait_queue_head(&wait);

//setevnet
wake_up_interruptible(&wait);

wait_event_interruptible(&wait,atomic_read(&value));

semaphore_t

semaphore_t sem;
sema_init(&sem,10);

down_interruptible(&sem);
up_interruptible(&sem);

complection

    struct completion req_done;
    reinit_completion(&req_done);
    ret = wait_for_completion_timeout(&ureq->req_done, msecs_to_jiffies(500));
    if (ret == 0)
            uvcg_warn(&video->uvc->func, "timed out waiting for req done\n");

    //置
    complete(&req_done);

work_struct

work_struct相当于Windows的workitem

work_struct pmmp;
INIT_WORK(&pump, uvcg_video_pump);
schedule_work(&pump);
static void uvcg_video_pump(struct work_struct *work)
{
//通过这种方式传递数据指针也是一个很不错的方法
    struct uvc_video *video = container_of(work, struct uvc_video, pump);
}

device-tree

--------------device-tree- dts-->dtc----->dtb--------

device_noe* n = of_find_node_by_path("/gpio");
int gpio =  of_get_named_gpio("led-gpio,"key-gpio");
gpio_request(gpio,"mygpio");
gpio_direction_input(gpio);
gpio_direction_output(gpio,0);

int value = gpio_get_value(gpio);
gpio_set_value(gpio,1);

int intnum = gpio_to_irq(gpio);
int intnum =  irq_of_parse_and_map(node,0);

request_irq(intnum,irq_function,IRQF_TRIGGER_FALLING|IRQF_TRIGGER_RASING,"IRQ_NANME",&dev);

0 篇笔记 写笔记

关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!