摘要:
1、一般树 将这种一般的树转化成我们熟悉的单链表形式,这有三层,每一层都可以看成单链表或者多个分散的单链表 数据节点如下: struct tree { int elem; struct tree *FirstChild; struct tree *NextBro;}; 每个节点和第一个孩子还有下一个 阅读全文
摘要:
位图文件主要分为3部分:1. 文件信息头 14Byte 2. 位图信息头 40Byte 3. RGB颜色阵列 由图像长宽尺寸决定 1. 文件信息头 定义结构体: typedef struct tagBITMAPFILEHEADER { /* bmfh */ UINT bfType; DWORD bf 阅读全文
摘要:
字符设备驱动含有open、read、write、ioctl等函数,用于用户层和内核之间的通信,所以当用户要获得内核驱动的一些数据或者发送一些控制命令,就需要使用设备驱动了。对于一些中断类型的驱动,比如输入子系统,用户层不需要对其进行操作,可以不使用设备驱动。 阅读全文
摘要:
● R+L 输出PCB中所有网络的布线长度 ● Ctrl+左键点击 对正在布的线完成自动布线连接 ● Ctrl+左键点击 对正在布的线完成自动布线连接 ● M+G 可更改铜的形状; ● M+G 可更改铜的形状; ● 按P+T在布线状态下,按Shift+A可直接进行蛇线走线 ● 按P+T在布线状态下, 阅读全文
摘要:
select、poll、epoll都是IO多路复用的机制,其中epoll是Linux特有的。本质上都是同步IO,有设备就绪或超时才能执行后面的动作 select与poll: 本质上没有区别,时间复杂度都是O(n);实现上都需要不断轮询从用户空间拷贝过来的文件句柄fd的数组,看是否有设备准备就绪,这样 阅读全文
摘要:
1、自旋锁 获得自旋锁之后禁止内核抢占,但可以被中断上半部打断。运行于中断上下文 单cpu不可抢占内核:空操作 单cpu可抢占内核:禁止内核抢占,不发生自旋 多cpu可抢占内核:禁止内核抢占+自旋 2、互斥锁 内核可以抢占,可以被其他进程抢占,运行于进程上下文 3、读写锁 由于其特殊的逻辑使得其效率 阅读全文
摘要:
CFS调度: 新进程创建会调用到do_fork -->wake_up_new_task -->activate_task(rq, p, 0); -->enqueue_task(rq, p, flags); // 入就绪队列 -->p->sched_class->enqueue_task(rq, p, 阅读全文
摘要:
1、初始化 静态:DECLARE_TASKLET(name, func, data); 动态: struct tasklet_struct{ struct tasklet_struct *next; unsigned long state; atomic_t count; void (*func)( 阅读全文
摘要:
视频传输方式一:以IIC协议,通过IO口传输视频流: 视频传输方式二:以usb接口传输视频流: 驱动:字符设备驱动 怎么写驱动程序:构造file_operations 告诉内核 入口函数 出口函数 v4l2驱动框架:核心层 -- > file_operations 硬件相关层: 1、将usb摄像头设 阅读全文
摘要:
1、打断点 在代码前面单击就能打断点 2、打完断点调试 点击这个长的像虫子的图标:Debug 'app' 或 shift + F9 3、左下角会出现调试的图标 第一个是step over:点击该图标程序执行下一行,如果是调用方法,这个方法会被直接执行不会进入该方法内部; //不会进入方法内部 第二个 阅读全文
摘要:
1、编译要加上-g选项 gcc -g -o hello hello.c 2、常用命令 l 查看源码 , b 加断点, r 开始运行调试, n 下一步, s下一步但是会进入子函数. p 输出数据. info args查看当前函数参数值;info locals 看当前函数栈上值信息;info regis 阅读全文
摘要:
注意这个链表只能在驱动程序中使用 定义struct list_head { struct list_head *prev; struct list_head *next; }; 初始化链表: #define LIST_HEAD_INIT(name) { &name, &name} #define L 阅读全文