- 博客(36)
- 收藏
- 关注
原创 Linux驱动程序
驱动程序: ioctl(struct file, unsigned int, unsigned long);应用层: ioctl(fd, cmd, ...);Platform总线。
2024-01-24 20:37:19 402
原创 ARM-Linux驱动内核(S3C2440)
远程主机(ubuntu): uboot通过tftp将ubuntu中的uImage下载到内存的0x30008000地址处,启动内核。2. make uImage (如果原来该模块为 y,则需要重新编译出不包含该模块的内核)------非必要。动态库 :不会被编译进可执行程序 , 程序执行时需要库文件 (编译和运行都需要库文件的存在).config 保存内核的配置(保存的是选择条件的值)长跳转(绝对跳转): 目标函数的跳转地址是固定的(绝对位置)短跳转(相对跳转): 目标函数的跳转地址是可变的(相对位置)
2024-01-22 21:44:07 999
原创 ARM汇编指令
ARM源程序文件(可简称为源文件)可以由任意一种文本编辑器来编写程序代码,它一般为文本格式。ARM汇编语言是以段(section)为单位来组织源文件的。段是相对独立的、具有特定名称的、不可分割的指令或者数据序列。若指定“S”,则根据指令执行结果更新CPSR中的条件码。段又可以分为代码段和数据段,代码段存放执行代码,数据段存放代码运行时需要的数据。一个ARM源程序至少需要一个代码段,大的程序可以包含多个代码段和数据段。在汇编文件中,我们需要先定义一个段,在段中添加我们实现的汇编程序语句。
2024-01-11 20:59:46 922
原创 ARM硬件编程
CPSR: 当前程序状态寄存器, 存储进位,借位,溢出,结果为0,工作模式,大小端,中断使能等等。PC:程序计数器,指向正在执行的下下条指令,默认做自增运算。I-Chche: 指令缓存 D-Chche: 数据缓存。SPSR: 保存程序状态寄存器,是CPSR的备份。MMU: 内存管理单元,虚拟地址到物理地址的转换。LR:链接寄存器, 存储函数的返回地址。Cortex-A 低功耗,消费类电子。ARM Flash 输入输出设备。Cortex-M 高性能,偏控制。SP:栈指针寄存器,指向栈顶。
2024-01-10 20:45:52 388
原创 tcp协议网络编程
backlog:尚未处理的连接请求最大等待个数。addr:存放请求方地址信息空间首地址。addrlen:请求方地址信息长度。buf:存放接收到的数据空间首地址。sockfd:套接字文件描述符。sockfd:套接字文件描述符。sockfd:套接字文件描述符。sockfd:套接字文件描述符。sockfd:套接字文件描述符。addrlen:IP地址的大小。flags:属性 默认为0。addr:对方的IP地址信息。buf:发送数据空间首地址。flags:属性默认为0。UDP MTU 最大为:1500。
2023-12-18 09:08:41 421
原创 liunx网络编程
桥接模式:Ubuntu直接使用真实的网卡作为操作系统的网卡,通过实际网卡进行数据收发(网络传输不经过windows了)NAT模式:Ubuntu虚拟出来一个网卡,IP地址也是虚拟的,只要windows有网,Ubuntu就有网。发送方:sendto本身具有绑定的功能(IP地址绑定为当前主机的IP,端口号绑定随机端口)网段号:网络位不变,主机位全为0,则表示网段号 192.168.0.0。发送方 接收方。子网掩码对应的二进制形式中是1的部分对应IP地址的网络位。
2023-12-15 09:12:59 410
原创 Linux 进程间通信,共享内存和信号灯
* operation flags */ 信号量的标志(SEM_UNDO)/* semaphore operation */ 对信号量的操作(+1, -1)SHM_RND 将离传入地址最近的能够映射的地址进行映射。IPC_CREAT 如果IPC对应的共享内存不存在就创建。shmaddr:将该地址(必须为4k的整数倍)映射到共享空间中。clientB.c将共享内存空间中的数据打印在终端。shmid:共享内存的ID号。
2023-12-11 17:28:57 465 1
原创 linux通信
SIGKILL(9) SIGSTOP(19) 不能被忽略和捕捉。SIGINT:打断进程任务 可以从终端输入(ctrl + c)SIGQUIT:让进程任务退出 可以从终端输入(ctrl + \)SIGTSTP:然进程任务挂起 可以从终端输入(ctrl + z)ipcrm -M/Q/S id(共享内存/消息队列/信号灯ID)ipcrm -m/q/s key(IPC对象名称)按下 ctrl + \ 打印 "SIGQUIT信号来了"按下 ctrl + c 打印 "SIGINT信号来了"
2023-12-11 09:09:17 419
原创 linux信号量与进程通信
申请:让资源数-1,如果当前资源数为0,申请资源时会阻塞等待,直到资源不为0,才能继续向下执行。2.如果管道中写满(64k),阻塞等待,直到有数据读出才能继续写入。2.如果没有数据,阻塞等待直到读取到数据,再继续向下执行。接收write.c内容。1.向管道中写入数据会产生管道破裂,导致进程异常退出。1.如果管道中没有写满(64k),则直接写入。创建3个线程任务,任务一循环打印 "A",任务二循环打印"B",创建一个无名管道,获得操作管道的两个文件描述符。任务三循环打印"C",要求打印出来的顺序总是先。
2023-12-07 21:04:58 1006
原创 linux互斥锁笔记
PTHREAD_CREATE_JOINABLE 加入属性(阻塞属性)2.pthread_mutex_trylock 替换 pthread_mutex_lock。1.分离属性优点: 线程结束时可以自动回收线程空间,避免多线程回收时阻塞引发僵尸线程的问题。1.pthread_join具有阻塞功能,线程不结束会一直阻塞等待。2.加入属性优点: 可以实现线程的同步,获得线程结束的状态。创建两个线程任务,线程1负责从终端接收学生的信息,retval:存放线程结束值的空间首地址。attr:属性空间首地址。
2023-12-06 17:28:06 608
原创 linux 线程笔记
多线程位于同一个进程空间内部,共享文本段、数据段、堆区,全局变量、静态变量、字符串常量、malloc空间都是共享的。多进程空间是独立的,任务调度时CPU需要在不同的进程空间切换,增大系统的资源开销。多线程共享同一进程空间,一个线程异常结束,会导致进程结束,其余线程均无法执行。多进程空间独立,没有共享空间,多进程间通信需要依赖第三方的文件才能实现通信。线程是独享 8M 栈区空间,其余进程中文本段、数据段、堆区与其余线程共享。多进程空间独立,一个进程异常结束,不会影响其余进程的执行。
2023-12-05 17:45:18 558
原创 linux进程笔记
1.一个进程的父进程先结束,子进程会成为孤儿进程,被init进程收养,子进程再结束,被init进程回收空间。1.让父进程先结束,子进程成为孤儿进程,此时子进程再结束,会被系统进程回收空间。子进程结束,父进程没有回收子进程空间,子进程会成为僵尸进程。2.子进程结束,父进程回收子进程空间,避免产生僵尸进程。随着操作系统开启运行进程,随着操作系统结束,进程结束,为用户提供服务。2.进程:程序运行的过程,包括进程的创建,进程的调度,进程的消亡。3.一个进程有多个子进程,wait回收先结束的子进程。
2023-12-04 17:30:00 327
原创 项目:利用文件操作实现日志记录的功能
1.在软件运行中都需要使用日志模块,该模块主要负责记录软件运行状态,记录软件出错的信息提示,方便开发人员对软件运行状态和出错信息进行分析。设定日志的级别,如果用户打印的日志级别超过设定日志级别,则写入文件中,如果没有超过则不写入。将所有日志文件路径信息打印在终端界面上(目录的遍历)6.可以通过函数接口查看所有日志文件的文件名及路径信息。3.每天一个文件记录日志信息,分文件夹对日志信息存储。按照日志文件格式,向日志文件中写入信息。日志初始化,打开一个日志文件。2.日志记录就是将一些软件信息记录到文件中。
2023-12-01 15:15:34 408
原创 Linux 项目学习笔记
3.能够重置该软件的IP地址及端口号信息(恢复出厂设置:192.168.0.1 50000)2.能够通过在终端设置该软件的IP地址及端口号信息,每次开关机仍保留之前配置的地址信息。5.能够通过查看历史记录追溯该软件IP地址和端口号被修改的时间及原来的IP地址和端口。4.能够实现后台记录功能,记录软件中IP地址及端口号被修改的时间。IP地址: 192.168.0.1。端口号: 50000。1.能够在终端显示该软件的IP地址及端口号信息。编写软件实现以下功能。
2023-11-29 20:48:40 392
原创 linux day3笔记
O_EXCL 检测文件是否存在。打开文件获得操作文件的文件描述符(很小、非负整数)O_TRUNC 截断(清零)2.文件IO是系统调用,只有在Linux内核平台中才能使用。标准IO中的函数接口将数据放入缓存区,满足刷新条件交给内核。O_ASYNC 异步IO。O_NONBLOCK 非阻塞IO。1.主要用来操作设备文件以及除普通文件外其余类型的文件。2.程序结束刷新(fclose刷新)3.程序结束刷新(fclose刷新)O_APPEND 追加。
2023-11-28 20:48:16 891
原创 linux day2笔记
fgetc/fputc fprintf/fscanf fgets/fputs ->ASCII码文件。向文件写入nmemb个对象,每个对象size个字节大小,存放在ptr指向的空间中。从流中读取nmemb个对象,每个对象size个字节大小,存放在ptr指向的空间中。文件中的内容可以是不能在界面上显示的字节编码。文件中的内容均为能够在界面显示的字符。成功返回实际读取对象的个数。ptr:存放数据空间的首地址。ptr:存放数据空间的首地址。size:写入对象的字节数。nmemb:写入对象的个数。
2023-11-27 18:39:04 397 1
原创 linux day1笔记
tar -jcvf 文件名.tar.bz2 文件夹/*文件不存在,创建,文件存在,清空文件,只写打开。文件不存在,创建,文件存在,清空文件,写读打开。tar -zcvf 文件名.tar.gz 文件夹/*文件不存在,创建,文件存在,追加只写打开。文件不存在,创建,文件存在,追加写读打开。文件不存在,报错,文件存在,只读打开。文件不存在,报错,文件存在,读写打开。tar -jxvf 文件名.tar.bz2。tar -zxvf 文件名.tar.gz。Linux、Windows、Android、鸿蒙、iOS。
2023-11-24 17:38:43 331 1
原创 day16笔记
2.malloc()必须对返回值判空,否则可能出现程序崩溃。返回值:申请成功 返回申请到的连续空间的起始地址;注意事项:1.有申请必须在使用完成后释放,否则可能造成内存泄漏。参数:size:申请的连续空间的字节数;功能:在堆区申请一段连续内存空间;销毁:free释放头节点 数据节点。清空:free数据节点。空链表:1.创建:malloc申请头节点。头节点:第一个节点并且不能保存有效数据。指针域:保存节点关系。节点:数据域:保存数据。
2023-11-14 21:01:22 46 1
原创 day15笔记
如果一个规模较大的问题,可以不断地分解成为若干个规模较小的相似问题,一般可以使用递归解决。6.递归函数:在调用一个函数的过程中又出现直接过间接地调用该函数本身,称为函数的递归调用。1.带参宏不是函数,不需要入栈 出栈 传参 传递返回值,效率高于函数调用。注意:被调函数内部返回的指针一般不能是被调函数的局部变量;1.递归需要函数反复地调用,(入栈 出栈 传参)(1)封装简化有规律或重复性的代码,提高代码的复用性;指针函数是一个函数,返回值为指针类型的函数;函数的函数名是指向函数入口的地址;
2023-11-13 22:03:54 29
原创 day14笔记
4和5:定义了一个指针变量p,变量p自身空间不可以被修改,p指向的空间不能被修改,p = 不能作为左值,*p = 不能作为左值;1和2:定义了一个指针变量p,变量p自身可以被修改,p指向的空间不能被修改,*p = 不能作为左值;3:定义了一个指针变量p,变量p自身空间不可以被修改,p指向的空间可以被修改,p = 不能作为左值;用途:1.被调想要修改主调空间的值,就需要对主调空间类型&,得到指向该类型的指针;定义了一个数组,数组的数组名a,a包含了5个元素,元素的类型是int *;
2023-11-13 09:10:59 27
原创 day13笔记
处理器在存取处理内存中的数据时的字节顺序;数据通信过程中数据的字节顺序;大端存储:地址低位保存数据高位;小端存储:地址低位保存数据低位;结构体成员在内存中空间独立;共用体成员在内存中空间共享;数据类型1 变量名1;数据类型2 变量名2;数据类型3 变量名3;数据类型n 变量名n;性别:字符 ‘J’ 'L'union 共用体类型名 变量名;2.共用体类型变量的定义。
2023-11-10 11:58:55 44 1
原创 day12 笔记
内存对齐原则:1. 结构体的成员变量分配在内存中的起始地址一定是自身基本数据类型整数倍的地址编号;通过指向结构体变量的指针访问结构体内部成员变量时“->”(指向结构体成员运算符);2. 结构体的大小必须是自身最大数据成员的整数倍。通过结构体变量名访问结构体内部成员变量时“.”(结构体成员运算符);struct 结构体类型名 变量名;数据类型1 变量1;数据类型2 变量2;数据类型n 变量n;3.结构体数据类型变量的初始化。4.结构体数据类型变量的访问。2.结构体数据类型的变量定义。1.结构体类型变量;
2023-11-08 21:22:27 23 1
原创 day11 笔记
p = p + 1 指针向高地址偏移自身指向空间的数据类型字节数;自减:p-- --p;p = p - 1 指针向低地址偏移自身指向空间的数据类型字节数;p - p(必须同种类型的指针):两个指针地址编号之间包含的指针所指向空间类型的数量;减法:p - N: 指针向低地址偏移自身指向空间的数据类型字节数的N倍个字节。指向:以自身地址编号开始的自己指向类型字节大小的连续空间;加法:p + N:指针向高地址偏移自身指向空间的数据类型字节数的N倍个字节。野指针:指针所指向的空间为无效的非法的空间。
2023-11-07 18:59:59 26
原创 day10 note
3.当函数返回值类型与实际返回的值的类型不一致时,会发生数据类型隐式转换。(1) 修饰局部变量,称为静态变量,保存数据区,具有和全局变量一样的生命周期,作用域不发生改变;注意事项:1.当函数调用时,传递的实际参数类型与形参不一致时,以形参类型为准,发生数据类型的隐式转换。注意事项:1.当函数返回值类型不为void时,必须写return值;形参的空间与主调实参的空间互相独立,仅存在拷贝关系;1.被调函数在主调执行到被调函数的函数调用语句被执行;数组作为函数参数传递的时候,传递的是空间的编号;
2023-11-06 19:33:15 33 1
原创 day9笔记
字符型数组,保存的是六个字符,是字符串。n:访问二维数组的第m+1(一维数组)元素的第n+1个元素。src: 拷贝的源字符串空间;1.含义:由n个数据类型相同的一维数组所组成的数组;拷贝到的目标空间的地址标号;拷贝到的目标空间的地址标号;
2023-11-05 18:52:58 33
原创 day8笔记
2.需要的是一个整型常量或者整型常量表达式;相邻两个元素间进行比较,大的数据向后放,小的往前放(升序)注意:默认初始化 数组的元素个数由初始化列表内值的数量决定;练习:1.定义一个整型数组并且进行初始化;找到数组中的最大、最小值;遍历每个位置,为每个位置选择一个合适的值;注意:1.数组的大小是固定的;注意:没有初始化的元素,初始化为0;由数据类型相同的n个元素所组成的一个有限集合;数组中所有元素的类型必须相同。拓展:柔性数组(变长数组);元素在内存中是有序存放的;2.每个元素的类型都是相同;
2023-11-05 10:42:22 29
原创 day7笔记+拓展
1.循环结构1.执行重复的代码2.执行有规律的代码3.暴力穷举(1)for循环1.基本形式for (表达式1;表达式2;表达式3)语句块A;表达式1: 初始化:进入循环之前的准备工作表达式2: 循环结束条件:决定循环在什么时候退出;表达式3: 循环变量改变:推动循环趋向结束的代码;练习:1. 从终端接收一个非0 自然数N;计算0 - N 之间所有自然数之和;2. 从终端接收一个非0 自然数N;计算0 - N 之间所有奇数之和;N sum。
2023-11-02 08:58:17 28
原创 day6笔记
2.%c 与 %c 有区别, %c可以过滤不接收''字符;从终端输入一个格式化的字符串打印 并将分割转换对应类型数据存储;当程序执行到某个位置时,程序后序的执行方向 由某个条件决定,多选其一;当程序执行到某个位置时,程序会反复执行某段代码,直到循环满足退出条件;3.不要再""最后结束前使用\n;注意:1.只能获取一个字符,获取多个字符需要调用多次;成功返回成功匹配并转换到的格式化控制符数量;注意:1.非格式化控制符仅用作格式匹配;成功返回获取的字符的ASCII值;if简单分支 if阶梯分支 if嵌套分支。
2023-10-31 21:09:45 29 1
原创 day5笔记
如果为假,取表达式3的值作为特殊表达式的值;表达式1的值 非0即为真1 如果为真,取表达式2的值作为特殊表达式的值;1.短路法则:左操作数执行完毕已确定表达式整体的结果,则短路右操作数的执行。逗号表达式的值:取最后一个子表达式的值作为逗号表达式的值;表达式1, 表达式2, 表达式3, ......表达式n;注意:1.只能获取一个字符,获取多个字符需要调用多次;关系表达式的值:逻辑真 (1) 逻辑假(0)(表达式2):(表达式3)2.浮点型数据的关系判断:在有限的精度范围内的关系判断;
2023-10-30 20:57:18 25 1
原创 day4笔记
表达式:以一个或多运算符连接的 变量、常量、其他表达式 所形成式子称之为表达式。表达式: 有空间(临时性空间) 有值 有类型。先加再用(加之后的值作为 ++a 这个表达式的值去使用)先用再加(加之前的值作为 a++ 这个表达式的值去使用)2. 大空间的数据类型 精度高于 小空间数据类型的精度。3. 无符号的数据类型 精度高于 有符号数据类型的精度。(3)汇编阶段:将编译阶段产生的汇编语言翻译为二进制机器语言。(4)链接阶段:将汇编阶段产生的机器语言链接成可执行的程序。
2023-10-28 15:34:21 31
原创 day3笔记
long long int(超长整型 8B): 2^64种 [-2^63 2^63) [0 2^64)long int(长整型 32 4B 64 8B): 2^64种 [-2^63 2^63) [0 2^64)char(字符型 1B): 2^8 [-2^7 ,2^7) [0 ,2^8)
2023-10-26 18:24:16 25 1
原创 day2笔记
long int(长整型 32 4B 64 8B): 2^64种 [-2^63 2^63) [0 2^64)short int(短整型 2B): 2^16种 [-2^15 2^15) [0 2^16)位值制:一个数可以由若干个数字按照特定的顺序组成,他的大小不仅取决于数字本身,还由他所在的位置上的权值决定。
2023-10-25 20:01:43 27 1
原创 day1笔记
d(文件类型)rwx(文件所有者) rwx(所有者同组) r-x(其他)(操作权限) 4(硬链接数) linux(用户名) linux(组名) 4096(大小) 9月 19 21:49(修改时间) assembly(文件名)cp -r 源路径1/filename1 源路径2/filename2 源路径3/filename3 ... 目标路径/(filename)mv 源路径1/filename1 源路径2/filename2 源路径3/filename3 ... 目标路径/(filename)
2023-10-24 20:52:08 42
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人