c语言
编程学习
Embedded-Alien
这个作者很懒,什么都没留下…
展开
-
usleep_range()函数
usleep_range 用于非原子环境的睡眠,目前内核建议用这个函数替换之前udelay。其源码分析如下:void __sched usleep_range(unsigned long min, unsigned long max){ #得到最早wakeup的时间 ktime_t exp = ktime_add_us(ktime_get(), min); #计算必须要在max-min这个时间段wakeup,然后将这个时间转成nsec u64 delta = (u64)(max - min)转载 2021-06-08 18:13:03 · 10689 阅读 · 0 评论 -
轻量级的菜单系统,可移植性强
menu.h#include "stdio.h"#include "stdlib.h"#include "string.h"#include "unistd.h"#include <curses.h>#define DISPLAY_C#define offsetof(TYPE, MEMBER) ((size_t) & ((TYPE *)0)->MEMBER)#define container_of(ptr, type, member) ({ \原创 2021-06-08 16:36:05 · 261 阅读 · 0 评论 -
socket C/S多线程编程
移植部分list.h#ifndef _LIST_H#define _LIST_H#include <stddef.h>//通过结构体成员指针获取结构体指针位置#define container_of(ptr, type, member) ( \ { \ const typeof(((type *)0)->member)原创 2021-06-08 16:03:03 · 118 阅读 · 0 评论 -
linux notifier的理解和应用
notifier主要用于内核间的各个模块的通信(通知源)子系统A进行定义初始化和回调函数的调用(被通知)子系统B进行回调函数的注册和注销当A系统发生某种事件时,就调用通知链中的所有回调函数,B系统中注册的回调函数就会得到执行。一旦执行回调函数,他会从链表头依次执行每一个回调函数,那么依次执行是依次性执行完,执行过程中任意时刻都可睡眠?这些需求也就产生了4种类型的notifier_chain。struct notifier_block { /* chain的基本单位 */ int (*noti原创 2021-03-09 19:33:53 · 948 阅读 · 0 评论 -
get_device()和put_device()函数
在linux内核中,get_device()和put_device()是一对相反的操作函数。get_device()是对设备引用数量加一,put_device()是对设备引用减一以下就是源码/** * get_device - increment reference count for device. * @dev: device. * * This simply forwards the call to kobject_get(), though * we do take care to原创 2021-03-09 11:21:47 · 3684 阅读 · 0 评论