- 博客(32)
- 收藏
- 关注
原创 day42-单片机
2.阳极输出高电平(VCC 5V),如果发光二极管阴极输出低电平(OV),阳极和阴极之间会形成一个正向电压差,满足发光二极管的单向导通性,所以电流会从阳极流向阴极,发光二极管被点亮。集成度较高,将所有功能集成到芯片中(CPU、RAM、ROM、定时器、UART、IO),适用于简单控制场景,成本低。集成度较低,只有一块CPU,需外接外设和存储模块才能组成完整系统,应用于复杂领域,Linux操作系统,成本高。如果都为0,结果为0;主要用于存放程序、代码、指令,掉电时数据不会丢失,读写速度慢,价格便宜。
2025-09-02 21:04:07
1810
原创 day32-进程与线程(5)
①进程空间是独立的,共享内存是开辟一段内核空间,进程都映射到这一片空间上,实现空间的共享。④每个IPC对象可以创建一个消息队列、一个共享内存、一个信号灯。④用于线程间通信的信号量称为无名信号量,信号灯是有名信号量。⑶将进程空间地址映射到共享内存空间中。③信号灯是一组信号量,即信号量的数组。⑷读写共享内存空间实现进程间通信。成功返回映射到共享内存空间中的地址。将进程空间中的地址映射到共享内存中。消息队列/共享内存/信号灯的ID。①搭配共享内存实现进程间的通信。对信号量进行操作的空间的首地址。
2025-08-19 18:32:54
736
原创 day31-进程与线程(4)
②读取数据时,如果管道中没有数据则阻塞等待有数据写入才能读出。②写入数据时,如果管道存满则阻塞等待有效数据读出才能继续写入。①写入数据时,会产生管道破裂的信号导致进程任务异常退出。③两个进程可以通过向管道文件中读写数据实现进程的通信。①Linux系统中的信号主要实现应用层和内核层之间的信号通知。②读取数据时,管道中没有数据不阻塞等待直接向下执行。1.进程空间是独立的,包含文本段,数据段和系统数据段。①读取数据时,如果管道中有数据则直接读出。①写入数据时,如果管道没有写满则直接写入。
2025-08-18 19:06:19
601
原创 day30-进程和线程(3)
●只能加锁一次,加锁期间不能再次加锁,也不能强制占有一个已经加锁的锁资源,必须等待锁资源释放,也就是解锁后才能继续操作该锁。●如果信号量资源数为0,申请资源会阻塞等待,直到占用资源的任务释放资源,资源数不为0时才能申请到资源并继续向下执行。●一个进程中的多个线程独享栈空间,文本段、数据段、堆区进程多线程共享。●只能防止多个线程对资源的竞争,不能决定代码的先后执行顺序。,则会阻塞等待,直到有任务释放资源,才能拿到资源并继续向下执行。●信号量只能完成四种操作(初始化,销毁,申请,释放)
2025-08-16 17:23:07
871
原创 day29-进程和线程(2)
exec常搭配fork使用,fork负责创建新的子进程,exec负责让子进程执行自己的代码。线程和进程不完全一致,轻量指空间,进程空间和线程空间管理方法不同。1.线程本质是进程,线程是任务创建、调度、回收的过程。线程必须位于进程空间内部,没有进程,线程无法独立存在。一个进程中的多个线程切换调度任务时,资源开销比较小。线程结束需要回收线程空间,否则产生僵尸线程。●进程是操作系统资源分配的最小单元。●线程是CPU任务调度的最小单元。一个进程中的所有线程共享文本段。线程是一个轻量级的进程。3.system函数。
2025-08-15 18:04:18
733
原创 day28-进程和线程
①子进程结束后,父进程没有回收子进程空间,导致进程执行结束,空间依然被占用的状态,称为僵尸进程。①父进程先结束,子进程会成为孤儿进程,孤儿进程被init进程收养,子进程再结束,init进程回。●进程用户空间:文本段(文本区)+数据段(数据区)+系统数据段(堆区、栈区)父进程与子进程空间独立,同一份代码中的变量和数据都会在父子进程中各有一份,父子进程修。●多个进程空间在操作系统中存储时,空间是独立的(物理地址是独立的)killall -编号 进程名。②子进程结束,父进程回收子进程空间,避免产生僵尸进程。
2025-08-14 18:23:54
798
原创 day27-IO(3)
2.fdopen: 根据已经打开的文件描述符获得文件流指针。●w: 写权限,决定用户是否能够在目录下新建文件。●r:读权限,决定用户是否能够查看目录下所有文件名。1.fileno: 根据文件流指针获得文件描述符。●x: 执行权限,决定用户是否能够进入目录。7.文件IO与标准IO互相转换的函数。3.feof: 判断文件流指针是否到达末尾。成功返回包含目录项信息结构体指针。2.读取目录文件中的目录项。成功返回包含字符串空间的首地址。成功返回包含时间的结构体指针。读取并返回下一个目录项的信息。
2025-08-13 18:06:14
634
原创 day26-IO(2)
2.库函数是对系统调用的封装,可以在不同的操作系统中安装并使用,库函数最终还是要调用系统调用完成对应功能。1.标准IO是有缓存的IO,文件IO没有缓存,适合于通信、硬件设备操作。1.系统调用:是Linux内核中的代码,只能在Linux系统中使用。2.标准IO是库函数,文件IO是系统调用。文件描述符是有上限的,到达上限后再打开会报错误。文件不存在创建(注意要给定创建文件的权限)4.标准IO对应的文件IO的打开方式。有三个特殊的文件描述符:标准输入(打开文件获得操作文件的文件描述符。写入的每个对象的大小。
2025-08-12 18:36:16
580
原创 day25-IO
●按块扫描信息的文件,称为块设备文件。①ASCII码文件:文件中所有内容均为能够在屏幕上显示的ASCII码字符。●按字符扫描信息的文件,称为字符设备文件。追加 文件存在追加,文件不存在创建,只写打开。只读 文件存在只读打开,文件不存在报错。读写 文件存在读写打开,文件不存在报错。追加读写 文件存在追加,文件不存在创建,写读打开。1.IO指intput/output。●操作文件等价于操作文件指向的文件。●目录文件,存放文件的文件夹。
2025-08-11 21:48:48
644
原创 day24-Linux系统概述
1.操作系统为了屏蔽底层不同的硬件平台,为上层提供统一的接口2.Linux应用场景:服务器、嵌入式常见的Linux系统:Ubuntu、Deblan、Redhat、CentOS等Linux操作系统是操作系统的核心,也称内核,内核的主要功能为:●内存管理●多任务管理●文件系统管理●多任务间的通信● 网络管理●硬件设备管理shell是操作系统的外壳,主要作用:●保护Linux内核,防止用户直接操内核导致的异常问题。
2025-08-10 16:32:11
449
原创 day23-哈希表、排序和查找算法
●依次和前面元素比较,比元素大的向后走,直到前一个元素比要插入的元素小,或者到达有序数列开头停止。3.选择左边的作为键值,从后面找一个比键值小的放前面,从前面找一个比键值大的放后面,键值放中间。将数据通过哈希算法映射成一个键值,存取都在同一位置实现数据的高效存储和查找,将时间复杂。3.通过选择不同的步长,将数组拆分成若干个小的数组实现插入排序。1.时间复杂度O(),如果素组有序时间复杂度降低至O(n)4若干个小的数组称为有序数列后,使得数组中的数据大致有序。相邻的两个元素比较,大的向后走,小的向前走。
2025-08-08 23:26:37
759
原创 day21-栈与队列
常见的顺序栈:空增栈 空减栈 满赠栈 满减栈。1.链表,栈和队列都是一种线性结构(一对一)5.栈和队列只允许在指定位置插入和删除元素。3.栈只允许在栈顶位置入栈和出栈元素。栈底:不允许入栈和出栈的一端称为栈底。栈顶:允许入栈和出栈的一端称为栈顶。2.栈和队列是一种特殊的表状结构。入栈(压栈):将元素放入栈顶位置。⑥栈针:记录栈顶位置的标记。判断空白节点后面还有没有节点。满栈:栈针指向栈顶元素的位置。增栈:栈的方向自低向高增长。减栈:栈的方向自高向低增长。空栈:栈针指向要入栈的位置。
2025-08-08 19:18:29
878
原创 day20-链表(3)
赋值为之前的最后一个节点地址。指向要删除节点的后一个节点。指向要删除节点的前一个节点。让删除节点的前一个节点的。让伤处节点的后一个节点的。赋值为最后一个节点地址。将要删除的节点释放掉。找到链表最后一个节点。指向链表最后一个节点。将之前最后一个节点的。
2025-08-06 22:09:10
718
原创 day16-代码调试、逻辑错误、段错误、内存泄露
1.warning:并不影响生成最终的可执行程序,但可能程序运行会出错2.error:编译代码语法出错,不会生成最终的可执行程序3.每次修改编译报错的第一个错误,重新编译,再重复完成修改第一个报错的操作,直到语法错误修改完毕为止。
2025-08-03 02:05:16
810
原创 day13-指针(3)
二级指针是指向一级指针变量的指针int **q;定义一个指针变量q,占8个字节空间,指向一个指针变量空间,即指向一级指针变量的指针,也就是二级指针1.指针数组:是数组,数组的每个元素是指针2.数组指针:是指针,指针指向整个数组定义一个数组,占40个字节,数组名为a,数组中每个元素都是int *型的指针定义一个指针,占8个字节,指针变量名为a,是指向数组20个字节空间的指针。
2025-07-28 23:04:01
345
原创 day12-指针(2)
数组的数组名a可以理解为int*型(两种特殊情况不能理解为int*型)指针变量p的值不能改变,但是可以利用指针p修改指向空间中的值。指针变量p的值可以改变,但是不能利用p修改指向空间中的值。指针变量p的值不能变,也不能通过p修改指向空间中的值。当访问a[i]元素时,等价于*(a+i),能操作对应的空间。第四种和第五种等价(const修饰*p,const修饰p)注意指针变量p必须初始化,否则后续无法复赋值。注意指针变量p必须初始化,否则后续无法赋值。第一种和第二种形式等价(const修饰*p)
2025-07-27 22:51:20
421
原创 day11-指针
存储类型 数据类型 * 变量名;int *p;char *p;float *p;不能使用未经初始化的指针2.野指针:未经初始化的指针或者指向已经被释放空间的指针,称为野指针3.空指针:指向内存地址为0x0的指针称为kongzhiz,用NULL表示内存地址0x0空间为只读空间,不能赋值,NULL指针不能执行*p=value操作变量两种访问形式:1.直接访问:通过变量的变量名访问变量空间2.间接访问:通过变量在内存中的地址访问变量空间p = &Num;*p;
2025-07-26 02:45:41
475
原创 day10 - 函数(2),预处理命令
1.不带参宏: #define PI 3.14宏名可以是小写,但为了和变量区分,一般定义为全部大写2.带参宏(宏函数)x : y。
2025-07-25 00:37:30
310
原创 day09-函数
(定义一个函数的实现)定义形式: 函数类型 函数名(数据类型1 形参1, 数据类型2 形参2......)数据类型:决定返回值类型(如int用于返回整数,void表示无返回值,char用于返回字符等)函数名:遵循变量命名规则,与变量名要求保持一致形参:定义时需声明类型,用于接收外部传入数据,是函数与外界交互的“接口”函数体:函数的运行结果。
2025-07-23 23:07:22
743
原创 day6-数组
数组是一组相同类型有限个数据的集合 (类型相同,元素必须有限)1.一维整形数组2.二位整形数组3.一维字符型数组4.二维字符型数组5.多维数组。
2025-07-21 02:19:48
170
原创 C语言(2)
-------取最后一部分 a-c 作为结果。+(加法) -(减法) *(乘法) /(除法) %(取余) ++(自增) --(自减)如果小数据放入大空间,需要补位,有符号数补符号位,无符号补0。●能够放在等号右边的值称为右值,右值可以是变量、常量、表达式。1.定义:表达式是由一个或多个运算符连接变量或常量组成的式子。●能够放在等号左边的值成为左值,左值只能是变量。浮点数类型赋值给整数类型,舍弃小数点后的精度。2.特点:表达式一定要有值,表达式一定有类型。
2025-07-16 21:46:41
347
原创 嵌入式学习day2
hi\123bc” ------- 'h' + 'i' + '\123'(八进制) + 'b' + 'c' + ' \0 ' 占6个字节。"hello" ------- 'h' + 'e' + 'l' + 'l' + 'o' + ' \0 ' 占6个字节。double(64位):符号位(1位)+ 指数位(11位)+ 尾数位(52位)●存储:float(32位):符号位(1位)+ 指数位(8位)+ 尾数位(23位)
2025-07-15 20:29:54
1794
原创 嵌入式学习day1
第一天的内容主要围绕 Linux 系统和 C 语言开发基础展开,虽然知识点有点多,但一点点啃下来还是很有成就感的。4.cp:文件拷贝 (如要将源目录拷贝到目的目录下,需要在最后加上 -rf)ls -a:查看当前目录下所有文件包括隐藏文件(隐藏文件是以。10.相对路径:所在路径不同,登录用户不同,相同路径会产生不同含义。绝对路径:所在路径不同,登录用户不同,相同路径含义相同。③汇编(-c):将汇编代码编译为二进制代码。cd ~:进入当前登录用户的家目录。ls -l:查看文件的详细信息。
2025-07-15 01:08:36
375
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅