笔记
嵌入式的假粉丝
这个作者很懒,什么都没留下…
展开
-
【无标题】
关于背包问题的一些思考原创 2022-06-15 20:39:50 · 82 阅读 · 1 评论 -
提高git clone的速度
用于提高git的速度转载 2022-04-12 13:12:29 · 142 阅读 · 0 评论 -
关于补码、无符号及有符号类型的理解
对于数值存储有补码、原码、反码三种方式:补码:解决负数加法运算正负零问题,弥补了反码的不足。原码:可直观反映出数据的大小。反码:解决负数加法运算问题,将减法运算转换为加法运算,从而简化运算规则负值采用反码的形式进行存储,计算机通过第一位来判断一个数值是否为负数,当第一位为1时,则为负数,否之则为正数,而对于负数想要得到为十进制的负数则需要对其取补码的补码,接下来以实例解析:对于数值-5而言,5的二进制为0000 0101,取反码为1111 1010,补码则为1111 1011,将其存储至计算机中。原创 2021-03-23 16:32:06 · 818 阅读 · 0 评论 -
《linux kernel develpoment》第九章
《linux内核设计与实现》内核同步介绍1、临界区和竞争条件临界区:访问和操作共享数据的代码段。竞争条件:两个线程有可能处于同一个临界区中同时执行,那么就算是一个BUG,即成为竞争条件。2、加锁为了防止同时两个进程修改同一个数据导致出错,此时当我们进程要修改一个数据时,就需要上一把锁,以防止其他进程修改。伪并发:在一个程序内通过处理信号去实现同步真并发:通过对称多处理器去实现同步在内核抢占时能并发访问的成为抢占安全代码(preempt-safe)在对称多处理器能避免并发访问的成为SMP安原创 2020-12-21 14:55:28 · 164 阅读 · 0 评论 -
《linux kernel develpoment》第八章
《linux内核设计与实现》下半部和退后执行的工作1、下半部下半部的任务就是执行与中断处理密切相关但中断处理程序本身不执行的工作,理想情况下是所有工作都给下半部,即想让上半部尽快结束,因为在上半部中会锁定中断线,因此能够越快越好。但大部分时候是没办法达到理想情况的,因为他需要做一些工作,如需要操作硬件对中断的到达来确认或者从硬件拷贝数据,这些都对于时间较为敏感,因此需要上半部完成,而下半部主要对数据进行处理分析。以下几点有助于区分上下部:1、时间较为敏感,放在中断处理程序2、与硬件相关,放在中断原创 2020-12-17 19:56:04 · 108 阅读 · 0 评论 -
函数prepare_to_wait和finish_wait
原文链接:http://blog.chinaunix.net/uid-7332782-id-3217821.html__wait_event 具体实现过程wait_event() & wait_event_interruptible() & prepare_to_wait() finish_wait()#define __wait_event(wq, condition) do { DEFINE_WAIT(__wait);转载 2020-12-17 16:47:47 · 2736 阅读 · 0 评论 -
《linux kernel develpoment》第七章
《linux内核设计与实现》中断和中断处理1、中断中断是硬件发出通知给处理器。键盘输入->处理器接收到中断->向操作系统反映此信号到来->操作系统做出处理。对于不同的设备对应的中断不同,每个中断都会有一个唯一的数字标志,这使得系统才能给不同中断提供对应的中断处理程序。中断值通常被称为中断请求(IRQ)线,每个IRQ线都会被关联一个数值量,如PC机上,IRQ 0是时钟中断,IRQ 1是键盘中断,但有些并不是这么严格定义的,如在PCI总线上的设备而言,中断是动态分配的,无论如何,都原创 2020-12-11 11:40:52 · 129 阅读 · 0 评论 -
WIFI模块相关
先介绍局域网控制第一种方法:wifi模块工作在AP模式,智能终端(手机、平板)直接接入wifi模块提供的网络,在同一个热点网络实现无线控制。(如图一左边)但是由于wifi模块工作AP模式也就是热点模式下,它接入的智能设备端有限,我司的wifi模块提供6个其他智能控制端(如手机平板)。(如图一右边)局域网点对点控制(图一)第二种方法:wifi模块工作sta模式,智能终端和wifi模块工作由无线路由器提供的无线网络环境中,数据信号经过无线路由器转发,从而实现局域网无线控制。(如图二)局域网过路由器转载 2020-12-07 20:22:53 · 371 阅读 · 0 评论 -
关于函数static关键字
一、 static全局变量与普通的全局变量有什么区别 ?全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,转载 2020-12-07 14:58:27 · 167 阅读 · 0 评论 -
《linux kernel develpoment》第六章
《linux内核设计与实现》内核数据结构1、链表1.1 单向链表和双向链表以下是一个最简单的数据结构表达一个链表/* an element in a linked list */struct list_element { void *data; /* the payload */ struct list_element *next; /* pointer to the next element */};下图是一个单项链表下图表示一个双向链表/* an element in a原创 2020-12-06 22:39:34 · 107 阅读 · 0 评论 -
《linux kernel develpoment》第五章
《linux内核设计与实现》系统调用1、与内核通信补充:在系统中,我们假设我们的运行内存有4G,在用户看来,我们一个程序本身可以拥有4G运行内存大小的虚拟空间,但系统会将其划分为内核空间和用户空间,假设内核为1G,用户空间为3G。而每个进程都可以陷入内核去执行调用,顾每个进程的虚拟运行空间理论上都能打到4G。系统调用在空间进程和设备中添加了一个中间层:1、提供了一种硬件的抽象接口,使得应用程序在读写文件时可以不管硬件的类型;2、系统调用保证了系统的稳定安全;3、实现多任务和虚拟内存。2、AP原创 2020-12-03 17:09:19 · 80 阅读 · 0 评论 -
《linux kernel develpoment》第四章
《linux内核设计与实现》进程调度1、多任务原创 2020-12-01 14:01:59 · 236 阅读 · 0 评论