- 博客(60)
- 收藏
- 关注
原创 linux内核编译及驱动程序的添加
如果要添加一个新kconfig的文件到menuconfig中则需要在Kconfig中添加。我使用的是内核源码顶层目录下的config_mini2440_td35。make menuconfig //可视化配置菜单 --内核活地图。(官方所有的默认配置文件在arch/arm/configs下)在Kconfig中定义menuconfig中的可配置选项。3.在同层目录下的Kconfig文件中新增一个配置选项。4. make menuconfig 将新加的选项选中。2.在同层的Makefile中新增一行。
2024-08-22 19:43:39
364
原创 linux内核驱动流程
setenv abc 123:设置一个新的abc为123(set abc 456:设置已有的abc为456)下载一个bootloader到norflash的0地址处(norflash被接到2440的0地址处)bl main:相对跳转(PC加偏移)短跳转,加载地址与链接地址无关,地址无关代码。向内核传参(根文件系统类型/位置,控制台,init进程,ip(如果需要))1.bootloader启动(裸机程序)--uboot.bin。进程管理,内存管理,网络管理,文件管理,设备管理。
2024-08-22 09:20:39
526
原创 硬件开发流程
2.配置引脚功能(对应硬件的工作原理)--在原理图中根据丝印找到对应的器件。--开发板上找到LED,查看丝印。volatile: 易失性修饰符。3.控制对应的引脚(或控制器)
2024-08-14 21:35:18
947
原创 汇编:基本指令及格式
立即数:一个数字(或按位取反后)将其循环右移偶数位后所有的1能放进低8位中。1.四个以内的参数使用 R0~R3。2.超过四个的参数使用栈传递。寄存器只有名字,没有地址。import引用外部函数。export外部可用声明。
2024-08-13 19:30:04
364
原创 arm体系结构(1)
CPSR:当前程序状态寄存器 进、借位、结果为负/零 中断使能 大小端配置 工作模式。PC:程序计数器 指向正在执行的下下条指令,默认值为0,默认做自加操作。ROM: 只读存储(辅助存储器) 速度慢、掉电数据不丢失。flash:结合RAM和ROM的优点,快、掉电数据不丢失。Cache:缓存 I(指令)D(数据)--分别16KB。RAM: 随机存储(主存储器) 速度快、掉电数据丢失。---- Cache 替换原则 最少 最早未使用的。可编程 可擦除 电可擦可编程。静态 动态 同步。
2024-08-12 19:38:40
281
原创 C++:多态及虚函数
Virtual必须加在基类,两个函数同名且同参(全局函数不能为虚函数,构造函数也不能为虚)多态:面向对象的多态性可以分为4类:重载多态、强制多态、包含多态和参数多态。多态从实现的角度来讲可以划分为两类:编泽时的多态和运行时的多态。前置++和后置++重载(后置++参数必须加一个int)有纯虚函数则被称为抽象类,抽象类无法创建对象。foo(i)相当于i的一个别名。全部是纯虚函数的称为接口类。函数模板应写在头文件。
2024-08-10 19:57:46
336
原创 C++(4):基类-派生类
指向Clock里三个int参数且返回值为void的函数的指针。复制构造函数,采用类型兼容性规则即用派生类代替基类。使用protect派生类可访问其它地方不能访问。类型兼容性规则:只访问到自己类型大小的内容。匿名对象形式向基类传参,基类先构造先传参。explicit禁止编译器做隐式类型转换。p访问的是自己类里的showTime。private只能自己访问。先构造基类再构造派生类。
2024-08-09 19:27:15
193
原创 C++(2):λ表达式,类函数重载
深复制(解决浅复制问题在复制一个新),浅复制(默认复制(默认复制后只是两个指针指向同一个目标))C++里Struct class都是声明类只是struct默认公有class默认私有。[i] j闭包函数内访问不了,在函数内i只能用不能改。new,delete和malloc,free区别。new [ ]时销毁时delete [ ][&I,j] i在函数内可改j不行。未捕获可以充当函数指针使用。
2024-08-08 20:05:53
251
原创 C++(2):命名空间赋,静态变量,友元函数
第一行:右值引用(引用常量的值不改变常量)后面必须是匿名对象。Clock(10,20,30)匿名对象生存期只在这一行。Company为本类对象共有(要独立开辟一块空间)友元函数(使用后可在其它函数内调用类里的私有单位)可在函数内访问被覆盖的全局变量。namespace命名空间符。静态变量未初始化以位模式清零。引用后生存期加到了正常变量。Vector 模拟数组行为。匿名空间符只有自己能用。::全局命名空间作用域。去原来的cinst属性。所有匿名对象都是右值。
2024-08-07 20:20:30
220
原创 C++(1):构造函数,复制函数和析构函数
自动匹配a的类型,但是初始化必须给值。引用和指针区别区别1.引用直接绑定2.引用必须初始化。函数重载:同名不同参(返回值不能作为依据)::作用域分辨符(分辨是哪个类的函数)默认形参b有b后面的都必须有默认。这样就使用到了下面一个fn函数。ref这里是对i起了一个别名。这里面两个函数默认为内联函数。拷贝,复制构造(不进入构造)初始化列表(这是初始化)复制构造函数不写有默认。默认构造(只是赋值)
2024-08-06 19:40:24
166
原创 学习笔记(数据结构:树)6
3,完全二叉树,对于一颗有n个结点的二叉树按层序编号,如果编号i(1<=i<=n)的结点于同样深度的满二叉树中编号为i的结点在二叉树中位置完全相同,则这可树为完全二叉树。n个结点的有限集合,集合要么为空树,要么由一个根结点和两棵互不相交,分别称谓根结点的左子树和右子树的二叉树组成。中序,左根右,先从根开始(不是先访问根),从左开始访问,在访问根,在访问右结点。1,斜树,所有的结点都只有左子树,左斜树,所有结点都只有右子树,右树。n = 0 ,空树。树的度数是指,这棵树中,最大的结点的度数,称谓树的度数。
2024-07-27 19:58:04
333
原创 学习笔记(数据结构:队列)4
队列是只允许在一段进行插入,而在另一端进行删除操作的线性表。允许插入的称谓队尾,允许删除的一端队头。常用操作,入队,出队。用:管道,tcp套接字。
2024-07-26 09:11:42
178
原创 学习笔记(数据结构:链表 栈)3
2.销毁 DestroySeqStack。1.创建 CreateSeqStack。3.判断是否为空栈 IsEmptySeqStack。栈是限定仅在表尾进行插入和删除操作的线性表。4.判断是否为满栈 IsFullSeqStack。5.压栈 PushSeqStack。6.出栈 PopSeqStack。栈底:不允许操作的一端。栈顶:允许操作的一端。fun为回调函数由主函数决定。
2024-07-24 20:50:09
348
原创 学习笔记(数据结构)2
为了表示每个数据元素,ai与其直接后继数据元素ai+1之间的逻辑关系,对ai来说,除了存储其本身的信息外,还需要存一个指示器直接后续的信息。把存储元素信息的域叫数据域,把存储直接后继位置的域叫指针域。这两部分信息组成数据元素ai的存储映像,叫结点(Node);,线性表链式存储结构的特点是一组任意的存储单位存储线性表的数据元素,存储单元可以是连续的,也可以不连续。在链式结构中还需要一个元素存储下一个元素的地址。解决顺序存储的缺点,插入和删除,动态存储问题。线性表顺序存储的优点,缺点。
2024-07-23 21:48:02
383
原创 学习笔记(数据结构)1
当线性表元素的个数n(n>=0)定义为线性表的长度,当n=0时,为空表。在非空的表中每个元素都有一个确定的位置,如果a1是第一个元素,那么an就是第n个元素。如果存在多个元素,第一个元素无前驱,最有一个没有后继,其他的元素只有一个前驱和一个后继。2,有穷性,执行的步骤会自动结束,不能是死循环,并且每一步是在可以接受的时间内完成。逻辑关系和物理关系一致。3,健壮性,输入非法数据,能进行相应的处理,而不是产生异常。1,输入,输出特性,输入时可选的,输出时必须的。3,确定性,同一个输入,会得到唯一的输出。
2024-07-22 19:34:28
372
原创 学习笔记(数据库)1
insert into user1 values (2,'张三',23,datetime('now','+8 hours'));sqlite> insert into user3 (NULL,'李四',23,datetime('now'));2、标准SQL语句:===》通用语法在其他平台可以直接使用。===>用sqlite3 来打开一个名称为test.db的本地数据库。create table 表名 (表字段 类型,表字段 类型,。create table 表名(表字段1,表字段2,...);
2024-07-15 18:56:22
406
原创 学习笔记(linux高级编程)17
④ select返回-1表示错误,返回0表示超时时间到没有监听到的事件发生,返回正数表示监听到的所有事件数(包括可读,可写,异常),通常在处理事件时 会利用这个返回值来提高效率,避免不必要的事件触发检查。① readfds等是指针结果参数,会被函数修改,所以一般会另外定义一个allread_fdset,保持全部要监听读的句柄,将它的拷贝传递给select函数,返回可读的句柄集合,类型fdset支持赋值运算符=;显著提高性能的前提是:监听大量描述符,并且每次触发事件的描述符文件非常少。
2024-07-13 21:00:39
425
原创 学习笔记(linux高级编程)16
而CPU单核在同一时刻只能做一件事情,一种解决办法是对CPU进行时分复用(多个事件流将CPU切割成多个时间片,不同事件流的时间片交替进行)。在计算机系统中,我们用线程或者进程来表示一条执行流,通过不同的线程或进程在操作系统内部的调度,来做到对CPU处理的时分复用。应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标的输入、中断信号等等事件,再比如web服务器如nginx,需要同时处理来来自N个客户端的事件。、非阻塞IO ===》在阻塞IO的基础上调整其为不再阻塞等待。
2024-07-12 19:26:40
271
原创 学习笔记(linux高级编程)15
生存时间(TTL)表明是数据报在网络中的寿命。其目的是防止无法交付的数据报无限制地在因特网中兜圈子,因而白白消耗网络资源。、抓包工具 tcp.port == 50000 && tcp.ip == 192.168.0.183。、根据ip地址过滤:ip.src == x.x.x.x。、根据端口过滤:tcp.srcport == xx;注意:如果没有写端口,则默认登录23 号端口。使用格式: telnet ip地址 端口。列出所有TCP通信的端口信息。列出所有UDP通信的端口信息。
2024-07-10 20:57:20
265
原创 学习笔记(linux高级编程)13
要存储数据的内存区,一般是数组或者动态内存。如果对方地址是NULL,则该值也为NULL。功能:用于UDP协议中获取对方发送的数据。必选,表示要发送到的目标主机信息结构体。要获取的数据长度,一般是buff的大小。注意:socket()的参数需要调整。参数:sockfd 本地的套接字id。本地的数据存储,一般是要发送的数据。如果为NULL,表示不关心对方地址。客户端是可选的,服务器端是比选的。可选,表示对方的地址信息结构体,返回值:成功 发送的数据长度。返回值:成功 接收到的数据长度。
2024-07-08 21:37:13
229
原创 学习笔记(linux高级编程)12
socket 套接字 ==》BSD socket ==》用于网络通信的一组接口函数。主机转网络:in_addr_t inet_addr(const char *cp);参数:domain 地址族,PF_INET == AF_INET ==>互联网程序。网络转主机:char *inet_ntoa(struct in_addr in);主机转网络:uint32_t htonl(uint32_t hostlong);主机个数: 2^8 个 254 个+2 ===》1 是网关 1是广播。
2024-07-05 19:39:12
1643
原创 学习笔记(linux高级编程)11
key值 ==> 申请 ==》读写 ==》关闭 ==》卸载。功能:通过该函数可以给pid进程发送信号为sig的系统信号。、信号 kill -l ==>前32个有具体含义的信号。参数:pathname 路径+名称===》任意文件,只要不会。当前程序要发送的信号编号 《=== kill -l。本地可用的地址,如果不确定则用NULL,表示。共享内存 ===》效率最高的进程间通信方式。》申请对象 ==》映射对象==》读写对象。整形的数字,一般用ASCII码的单字符。参数:pid 要接收信号的进程pid。
2024-07-03 19:12:58
557
原创 学习笔记(linux高级编程)10
可以,取决于pipe有没有内容,===>read返回值为0 不阻塞。写: write(fd-write,buff,sizeof(buff));不可以 ===>SIGPIPE 异常终止。无名管道 ===》pipe ==》只能给有亲缘关系进程通信。有名管道 ===》fifo ==》可以给任意单机进程通信。,写端是存在的,读管道,如果管道为空的话,读会阻塞。、无名管道 ===》管道的特例 ===>pipe函数。参数:pipefd[0] ==>无名管道的固定读端。有名管道===》fifo ==》有文件名称的管道。
2024-07-02 18:45:21
384
原创 学习笔记(linux高级编程)9
(高优先级运行,低优先级拿到锁没释放不运行)下的线程同步 ===》信号量机制 ===》semaphore.h posix。信号量的定义 ===》信号量的初始化 ==》信号量的PV操作===》信号量的销毁。线程的同步 ===》同步 ===》有一定先后顺序的对资源的排他性访问。定义互斥锁 ==》初始化锁 ==》加锁 ==》解锁 ==》销毁。互斥机制 ===》互斥锁 ===》保证临界资源的访问控制。如果sem有资源(==1),则申请该资源,程序继续运行。互斥 ===》在多线程中对临界资源的排他性访问。
2024-07-01 19:33:00
1983
原创 学习笔记(linux高级编程)8
传整数 ===》int add(int a,int b);、线程的回收机制 ====》不同与进程没有孤儿线程和僵尸线程。参数: retval 线程退出时候的返回状态,临死遗言。概念:线程是轻量级进程,一般是一个进程中的多个任务。创建多线程 ==》线程空间操作 ===》线程资源回收。功能:通过该函数可以将指定的线程资源回收,该函数具有。线程id是线程的唯一标识,是CPU维护的一组数字。: 强制退出 ==》他杀 ==》主线程结束子线程。: 自行退出 ==》自杀 ==》子线程自己退出。
2024-06-28 19:55:29
266
原创 学习笔记(linux高级编程)7
子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的。用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),如果要回收进程退出状态,则用WEXITSTATUS回收。回收和当前调用waitpid一个组的所有子进程,组内。新进程,所以调用exec前后该进程的id并未改变。注册的退出函数,将会由注册时顺序倒序被调用。参数:status 进程退出时候的状态。回收指定进程组内的任意子进程。
2024-06-27 19:09:22
492
原创 学习笔记(linux高级编程)6
退出状态,终止的进程会通知父进程,自己使如何终止的。任何情况下,负进程都能使用wait,waitpid获得这个状态,以及资源的回收。)exit(), c库函数,会执行io库的清理工作(刷缓冲区),关闭所有 的流,以及所有打开的文件。)_exit,_Exit 会关闭所有的已经打开的文件,不执行清理函数(不刷缓冲区直接清理)。子进程复制父进程的0到3g空间和父进程内核中的PCB,但id号不同。进程是一个程序执行的过程,会去分配内存资源,cpu的调度。克隆的进程称为子进程,原有的进程称为 父进程。
2024-06-26 22:32:21
478
原创 学习笔记(linux高级编程)5
文件类型 相关权限 目录 所有者 所在组 文件大小 最后被修改的时间 文件名。成功返回包含路径空间的字符串首地址。用户 (子目录个数)其他人 (硬链接数)保存工作路径空间的首地址。改变当前程序的工作路径。所在组 文件。同一个文件,多个名字。某一个文件的快捷方式。最后的状态改变的时间)属性存放空间的首地址。
2024-06-26 10:24:32
357
原创 学习笔记(linux高级编程)4
需要和O_CREAT同时使用,表示新建的文件不存在,成功,否则open就会失败。、不支持O_APPEND的追加模式,无法生成空洞文件。、lseek函数执行失败,文件指针还在偏移前的位置。必须项:他们之间是互斥的,所以有且只能有一个。从目录流中读取文件信息并将保存信息的结构体。成功返回文件描述符 (最近最小未使用)通过文件描述符向文件中写一串数据。获得一个文件流指针中的文件描述符。通过文件描述符读取文件中的数据。要写入文件的字符串的首地址。文件描述符,要读取的文件。成功返回读到数据的个数。
2024-06-24 19:15:15
700
原创 学习笔记(linux高级编程)3
功能:从ptr所在本地内存中取出nmemb个大小为size的数据块写入到stream流对应。功能:从指定的stream流对象中获取nmemeb个大小为size字节的数据块到ptr。如果从文件的指定位置向后偏移过程中已经超过了文件的当前末尾位置,则会自动以。参数: s 要写的信息,一般是固定的字符串或者有数据的数组。参数:ptr 要写的数据块地址,一般是数组或者结构体指针。写到终端屏幕显示,如果是fp的普通文件则会写入到文件中。要获取的数据块的个数,拷贝的数据块个数。偏移的起始位置,由系统定义的三个宏开始。
2024-06-21 17:16:13
600
原创 学习笔记(linux高级编程)2
参数: s 要写的信息,一般是固定的字符串或者有数据的数组。返回值:成功 返回指向有效数据的首地址,一般等于s的地址。读写 -- fgetc/fputc / 按字符读写。如果文件已经存在,则在文件末尾进行写入。如果文件已经存在,则在文件末尾进行写入。如果是普通文件fp 则指向文件第一行数据。如果文件不 存在,则会创建一个新文件。如果文件不 存在,则会创建一个新文件。如果文件已经存在,则会将文件截断为0。如果文件已经存在,则会将文件截断为0。如果文件不存在,则会创建一个新文件。
2024-06-20 19:50:04
553
原创 学习笔记(linux高级编程)1
把其余所有的词赋给最后一个变量.如果执行read语句时标准输入无数据, 则程序在此停留等侯, 直到数据的到来或被终止运行。块设备文件 block test -b /dev/usb0 --- 硬盘。打印字符串,遇到$变量($name)则打印变量中的值(name变量的值)反单引号,波浪号下面):将中间的字符串按照命令打印(命令置换)。加(+)、减(-)、乘(\*)、整除(/)和求模(%)等操作。打印字符串,遇到$变量依然打印 $变量 (原样输出)边翻译边执行 (ls cp(程序))
2024-06-19 18:56:43
1673
原创 学习笔记51(3)
int sprintf(char *str, const char *format, ...) //结果可以输出到一块内存空间上,成为第一个字符串。4800,n,8,1 (波特率4800,n 无奇偶校验,8 位数据位,1 位停止位)b7 SMOD = 1 //表示波特率翻倍。0 1 //方式1 8位的uart。b6 TR1 = 1//开启定时器1。1 0 //8位自动重装。b0 RI //接收完成标志。TH1 //重装的值。SCON : 串行控制寄存器。TL1 //计数。
2024-06-18 20:32:11
233
原创 学习笔记51(2)
波特率:数据的速率(单位时间内传输的二进制位个数)一次性多位数据给到 --- 并行通信。51单片机:内部的通信;一位一位给数据 --- 串行通信。有源蜂鸣器 –- 无振荡电路。无源蜂鸣器 – 有振荡电路。数据(信息)的传递和交换。PWM 脉冲宽度调制。
2024-06-17 09:34:36
173
原创 学习笔记(51)
操作思路:中断功能部件1.芯片手册了解该功能部件2.清楚需要用到哪些寄存器以及寄存器的哪些位和这些位要设置成什么值。中断:在执行一个任务过程中,被另一个任务打断,处理完这个中断后,返回来继续原先的任务。IE0 –--外部中断请求标志位,当外部中断0发生中断时这一位会被置一。寄存器(进行单片机操作时有些寄存器操作会直接影响到引脚的变化)表示发生了中断,中断处理完成后硬件自动清零。中断处理流程:硬件部分;
2024-06-13 18:50:59
219
原创 学习笔记(C)2048
在linux系统里实现了一下2048小游戏。核心就是game_run,先判定键值进行上下左右合并操作,然后根据它的返回值判定退出、重新输入还是继续运行,后面last_shape和现在的shape做比较如果相等就不生成数,game_cue是为了判别当前格子是否为满,满了如果还能合成就提示其它方向不能合成就game over,最后就是判断胜利了。另一个比较重要的就是移动合成操作了,先对齐在加在对齐防止2020向左后成2200。
2024-06-07 20:13:42
167
原创 学习笔记21(C)
(1.c语言中对于枚举类型实际上是当作整型处理的2.提高代码可读性,写成枚举可以做语法检查3.枚举常量用逗号隔开4.枚举常量可以给初值给到后后面的值会依次受到影响(后面依次加一))Typedef(它不能定义出一个新的类型,它是给已有的类型起别名):int a;>>右移运算:算数右移(要移动的数据是有符号类型,最高位补符号位)逻辑右移(要移动的数据是无符号类型,最高位补0)<<左移运算:操作数1 <<操作数2(操作数1是要进行位移的数据,操作数2是要移动的位数)左移一位相当于乘2。|按位或运算(置1运算)
2024-06-05 19:06:19
203
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅