自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(75)
  • 收藏
  • 关注

原创 Docker基础

namespace 是 Linux 内核用来隔离内核资源的方式。通过 namespace 可以让一些进程只能看到与自己相关的一部分资源,而另外一些进程也只能看到与它们自己相关的 资源这两拨进程根本就感觉不到对方的存在。具体的实现方式是把一个或多个进程 的相关资源指定在同一个 namespace 中。

2026-05-15 08:14:25 137

原创 Docker(容器技术发展史)

与其他只做容器的项目不同的是,Docker 引入了一整套管理容 器的生态系统,这包括高效、分层的容器镜像模型、全局和本地的容器注册库、清晰 的 REST API、命令行等等。的概念,对当前的主流开发模式产生深远的影响。技术革命带来新的市场机遇,CoreOS 也是其中的一员,在容器生态圈中贴有标签: 专为容器设计的操作系统 CoreOS。,与最开始是“一个简单的基础单元”不同,Docker 也在通过开发或收 购逐步完善容器云平台的各种组件,准备打造自己的生态圈,而这与 CoreOS 的布局 有直接竞争关系。

2026-05-15 08:14:18 12

原创 技术架构

例:打开浏览器/app访问了一个地址,域名并不能告诉我们是哪个服务器由我们的dns做一个转换,就知道了服务器ip(找到服务器门牌号),就去访问服务器。默认先去访问80端口,应用服务绑定了80端口。我们就访问到了应用服务,我们去查找一个商品----应用服务去访问数据库服务,数据库查到商品信息后,返回给应用服务。从第一次dns后就不需要再进行,直接用户直接跟服务器进行通信。应用服务直接把信息返回给用户app,应用就看到了有哪些商品。

2026-05-14 18:26:10 362

原创 Python(for循环进阶)

反向步长# 生成等差数列,但需要浮点步长时怎么办?range 不接受浮点,可以用 numpy.arange 或手动 while# 或者使用 itertools.count 配合 takewhile。

2026-05-14 15:46:00 362

原创 基础IO(文件缓冲区)

可以理解为快递超市、菜鸟驿站,可以先带存。对于快递员来说只需要将快递送至指定的位置,用户也只需要去指定位置取包裹,大大提高了效率快递员就是操作系统,菜鸟驿站就是文件的内核缓冲区。

2026-05-12 20:36:47 265

原创 基础IO(一切皆文件)

其次⼀些在windows中不是文件的东西,比如进程、磁盘、显示器、键盘这样硬件设备也被抽象成了文件,你可以使用访问文件的方法访问它们获得信息;将来我们要学习网络编程中的socket(套接字)这样的东西,使用的接口跟文件接口也是⼀致的。所以一个4GB的内存,在操作系统中有4GB/4KB个数据页构成的。将来为内存也有一个管理内存的数据结构叫做struct_page,只要找到内存对应的struct_page就能找到对应的数据块。进程有自己的管理列表,文件有自己的管理列表。f_mode打开的文件对应的权限。

2026-05-12 16:27:34 394

原创 STM(GPIO)下篇

关键字:#define用途:用一个字符串代替一个数字,便于理解,防止出错;提取程序中经常出现的参数,便于快速修改定义宏定义:引用宏定义://等效于。

2026-05-10 11:45:54 449

原创 STM(GPIO)中篇

最后,再给大家介绍几种使用库函数的方法第一种,就是像之前那样,先打开.h文件的最后,看一下都有哪些函数。然后再右键转到定义,查看一下函数和参数的用法第二种,打开提供资料文件里的这个库函数用户手册,其中有所有函数的介绍和使用方法。

2026-05-10 09:17:25 601

原创 STM(GPIO)上篇

我们主要使用库函数来操作,库函数使用的是读写位设置和位清除寄存器的方法。

2026-05-08 23:06:52 479

原创 STM32---新建工程

可以看到这个结构体有三个参数,分别是GPIO模式、GPIO端口、GPIO速度Mode跳转一下Ctrl+F搜索点击Find Next,可以看到,这是个枚举,GPIOMode就是这里的其中一个值然后我们选择Out_PP这一项,复制,这个就是通用推挽输出这样这个参数就配置好了同理然后发现这个有框跳出来,说明定义有很多个我们选择member的这个同样去搜索复制GPIO_Pin_13,填在第二个参数中第三个一样复制GPIO_Speed_50MHz。

2026-05-08 13:51:30 751

原创 STM32简介以及软件安装

使用面包板更有利于我们对硬件电路的学习,可以避免开发板的一些问题比如引脚冲突、引脚无法更改等当然了使用面包板也有一些问题,程序现象不出来,不仅可能是程序的问题,也有可能是接线的问题。在连线时要细心一些STM32 ST公司基于ARMCortex-M内核开发的32位微控制器微控制器就是MCU,也就是我们常说的单片机ARM Cortex-M内核相当于CPUSTM32常应用在嵌入式领域,如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等STM32功能强大、性能优异。

2026-05-07 14:42:29 501

原创 基础IO(文件描述符)

/下面是shell定义的全局数据//1.命令行参数表//2.环境变量表//3.别名映射表//for test//last exit code 最后退出码const char *GetUserName()//获取用户名const char *GetHostName()//获取主机名const char *GetPwd()//获取当前路径if(pwd!= NULL)const char *GetHome()//获取家目录"" : home;

2026-05-07 13:52:54 371

原创 基础IO(系统文件I/O---文件)

宏含义典型二进制(32位)O_RDONLY只读0O_WRONLY只写1O_RDWR读写2O_CREAT若文件不存在则创建0100(八进制 64)O_APPEND追加写(每次写入定位到末尾)02000(八进制 1024)O_TRUNC若文件存在,截断为空01000(八进制 512)perror是最方便的错误报告函数,它会直接帮你把错误信息打印到标准错误输出(stderr)。open提供第三个参数主要是为新建文件时指定权限int main()if(fd<0)return 1;

2026-05-06 09:03:45 375 1

原创 小车串口控制

轮趣的机器人底盘 STM32 控制器上集成有 USB 转串口芯片,用户不仅可以使用串口对 STM32 的固件进行一键烧录,还可以通过串口通信与上位机进行通讯。主要介绍串口的位置以及应用。

2026-05-05 10:33:52 359

原创 基础IO(理解文件)

fwrite第一个参数是要写入的字符串的起始地址,第二三个参数组合使用。第二个是单次往文件中写入的基本大小,第三个是写几个这个基本大小,第四个是往哪个文件里写。这个输出重定向>log.txt 就第一步打开文件,打开文件旧内容就被清空了。• 磁盘上的文件 本质是对文件的所有操作,都是对外设的输入和输出 简称 IO。•仔细观察发现,这三个流的类型都是FILE*,fopen返回值类型,⽂件指针。• 磁盘是永久性存储介质,因此文件在磁盘上的存储是永久性的。• 磁盘是外设(即是输出设备也是输入设备)

2026-05-05 10:25:54 420

原创 Python(for循环)

在许多语言中(如 C、Java),for循环是基于计数器的:C语言int main()i < 10;i++)但 Python 的for完全不同:它是迭代器风格的循环,直接遍历一个可迭代对象中的每个元素,而不需要手动管理索引。Python简洁:不需要写索引、边界条件、步长。安全:不会出现“差一错误”(off-by-one error)。通用:可以遍历任何可迭代对象(列表、字符串、字典、文件、生成器等)。yield aprint(num)陷阱后果解决方案遍历时修改列表长度跳过或重复元素。

2026-05-03 16:27:47 469

原创 Python(列表进阶)

如果你定义自己的类并希望支持切片,可以实现和方法,并处理slice对象。else:else:这样就可以使用obj[1:3]等操作。

2026-05-01 22:25:07 541

原创 Python(列表入门)

想象你有一个购物清单:苹果、牛奶、面包、鸡蛋。你需要一个地方按顺序记下这些东西,随时可以添加新物品、划掉已买的、查看是否还有某样东西。在 Python 中,列表(list)就是这样的“超级购物清单”。列表是一种有序、可变、可包含任意类型元素的容器。用方括号[]表示,元素之间用逗号分隔。shopping_list = ["苹果", "牛奶", "面包", "鸡蛋"]可以在列表中放数字、字符串、甚至另一个列表……几乎任何东西。

2026-05-01 11:20:31 434

原创 Python(复杂判断)

上一篇文章我们只学了if—— 它只能决定“做”或“不做”。但现实往往不是黑白二元的:比如根据成绩划分 A、B、C、D、F 五个等级;根据用户输入的命令执行不同操作。这就引出了if-else(二选一)和elif(多选一)以及更强大的match-case(模式匹配)。

2026-04-30 22:15:15 605

原创 Python(简单判断) —— 从 if 开始

name = input("请输入姓名:") or "匿名用户"如果用户输入了非空字符串,input返回的字符串为真,or直接返回该字符串,赋值给name。如果用户直接回车(空字符串),空字符串为假,or继续计算右边的值,于是name被赋值为"匿名用户"。这种写法一行就实现了“如果输入为空则用默认值”。

2026-04-30 21:38:03 475

原创 Python(真与假)

True(真)和False(假)。注意:必须首字母大写,truefalse会报错。

2026-04-29 19:26:35 504

原创 进程控制---自定义Shell

我们自己有个对应的字符串,shell启动时也可以打出类似形式的字符串int main()return 0;获取指定环境变量的值。

2026-04-29 17:46:57 783

原创 Python(运算与操作)

字符串是 Python 中最常用的数据类型之一。格式化输出,通常使用占位符和格式说明符,来指定输出的内容和格式。包括控制输出的格式精度、小数位数,以便更好的展示和处理数据。在编程中取整是指无论小数部分是多少,都只保留整数部分。10除以3等于3余1,所以取整结果是3取余结果是1。Python 中的加减乘除与数学中几乎一致,注意。如果左边是字符串,右边必须是字符串(字符串拼接)在编程中格式化输出,是指按指定的格式输出数据。如果左边是数字,右边必须是数字(数字加法)取余是当一个数除以另一个数后,余下的部分。

2026-04-28 16:09:02 496

原创 python(环境安装,输入输出,变量)

今天我们来进行python的学习和英国人交流,我们需要说英语;和法国人交流,我们需要说法语。和计算机进行交流,我们也需要使用计算机"能懂"的语言,这就是编程语言。编程语言有很多种,Python是其中一种,它不仅简单易学,并且应用广泛时下常用的数据分析,人工智能,量化交易等领域都有它的身影影。

2026-04-28 15:22:36 460

原创 进程控制---进程程序替换

我们之前学过指令,这些指令跑起来其实也是一个进程但是为什么我们在sleep里面输入指令没有反应呢?sleep父进程是bash,sleep期间bash在阻塞等待,所以当然没反应。

2026-04-27 22:20:10 496

原创 进程控制---进程等待(下)

继进程等待(上),我们来继续进行下的学习。

2026-04-27 20:32:26 454

原创 进程控制---进程等待(上)

那么又该如何获取退出状态呢?把status整型变量右移8位,把8位全部清除掉,就可以拿到对应的1了。

2026-04-25 22:33:52 513

原创 进程控制---进程创建和进程终止

COW 机制对父子进程的行为是对称的,谁先写入,谁就触发 COW。你的表述“是子进程”在 fork 场景下是正确的,但如果父进程在 fork 后也先写入,同样会触发 COW。因此,更通用的说法是“是 fork 产生的相关进程”。在命令结束以后,我们可以知道命令 是成功完成的还是以错误结束的。完成了进程独立性的技术保证!在 linux 中 fork 函数是非常重要的函数,它从已存在进程中创建一个新进程。通常,父子代码共享,父子再不写入时,数据也是共享的,当任意一方试图写入,便以写时拷贝的方 式各自一份副本。

2026-04-25 08:15:00 363

原创 进程--程序地址空间下篇(进程地址空间)

为什么父子进程输出地址是一致的,但是变量内容不一样?首先这个并不是物理内存。

2026-04-24 15:19:43 475

原创 进程--程序地址空间(引文)上篇

它通过打印各种变量、函数、动态分配内存、命令行参数、环境变量等的地址,让我们直观地理解进程的虚拟地址空间布局(如代码段、数据段、堆、栈、命令行参数和环境变量区等)。多次调用可以看到堆地址通常向上增长(地址逐渐增大)。存放在静态存储区(BSS 或数据段,取决于是否初始化),与全局变量相邻。多个栈变量地址通常向下增长(地址逐渐减小)。)在数据段和 BSS 段,地址介于代码段和堆之间。的字符串位于栈顶附近,地址可能与栈变量相近或更高。等)地址更高,且连续分配时地址递增。等)地址最高,通常位于堆之上(且。

2026-04-24 08:15:00 207

原创 进程--命令行参数和环境变量

发现在env中查不到这个。

2026-04-23 18:56:00 954

原创 进程切换与调度

今天我们的学习就到此结束,期待我们下次再见!

2026-04-23 08:00:00 727

原创 进程优先级

• 还可以把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整体性能。如果linux优先级跨度太大,用户就可能通过恶意修改自己进程的优先级,来尽可能让自己优先得到资源。• PPID :代表这个进程是由哪个进程发展衍生而来的,亦即父进程的代号。• cpu资源分配的先后顺序,就是指进程的优先权(priority)。• PRI :代表这个进程可被执行的优先级,其值越小越早被执行。• NI :代表这个进程的nice值。先直接尝试干到-100和100。下图的UID是1001。

2026-04-22 15:06:36 321

原创 进程--进程状态(下)

之前不是讲进程状态就是一个整数吗?但是为什么不删掉呢?问题感觉又不严重,由用户来决定。kill -19 297259----这样也能暂停。今天我们的学习就到此结束,期待我们下次再见!将当前myprocess放在后台运行。如果要改成运行状态,不要让其io。被debug,断点:进程被暂停了。暂停状态一般是用来做止损的。

2026-04-22 10:15:14 369

原创 进程--进程状态(上)

当一个设备没有活跃的时候,操作系统会认为无法执行,把这个进程从cpu上拿下来从运行队列中移走,把它的PCB链入到特定设备的等待队列中,不在运行队列中该进程就永远不会被调度了,这个进程就处于阻塞状态。把每一个设备连接起来,对应底层的硬件。• D磁盘休眠状态(Disk sleep)有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个 状态的进程通常会等待IO的结束。• R运行状态(running): 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。

2026-04-21 22:58:37 363

原创 进程(父子进程)

所以到时候下面那个printf被执行两次,而getpid打印出来的值应该是不一样的。如果我们多运行几次,会发现每次重新运行程序,进程pid是会增加的或者说不同的。我们命令行写的命令都是喂给了bash,我们历史上所执行的所有命令都是一个进程。3.为什么一个变量,即==0,又大于0?如果成功了,它的返回值会把子进程的pid返回给父进程,现在我们打开三个,然后关闭一个,会发现终端也会变化。1.为什么fork给父子返回各自的不同返回值。每次启动我们的父进程都是bash。而父进程id是一样的。bash是我们之前的。

2026-04-21 18:33:41 543

原创 进程概念(下)

一旦一个可执行程序加载到内存中,这个可执行程序是最不重要的,重要的是操作系统创建对应的PCB来描述它。所有运行在系统里的进程都以 task_struct 双链表的形式存在内核里。:进程执⾏时处理器的寄存器中的数据[休学例⼦,要加图CPU,寄存器]。:包括显⽰的I/O请求,分配给进程的I∕O设备和被进程使⽤的⽂件列表。:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针。:可能包括处理器时间总和,使⽤的时钟数总和,时间限制,记账号等。•课本概念:程序的⼀个执⾏实例,正在执⾏的程序等。

2026-04-20 22:52:54 574

原创 进程概念(上)

把网卡、显卡、键盘、显示器等统一使用一项struct_device定义一个类,类里面包含每种硬件的各种属性,然后每一个设备对应一个struct_device对象管理起来,同理,对每个进程定义struct结构体对象,然后把进程相关的属性放在结构体里,里面添加属性,用链接节点连起来,转化成对链表的增删查改。网卡通过网络,对面从输入设备从网络中拿到,将读到的数据交给cpu,交给存储器交给输出设备刷新到显示器上。就可以用较低的成本获得一个效率还可以的计算机,所以当代计算机,是性价比的产物。

2026-04-20 20:12:26 608

原创 Linux开发工具(gdb/cgdb篇)

在Makefile里面加个-g。

2026-04-16 19:11:57 723

原创 Linux基础开发工具(git篇)

所谓的版本控制器,就是能让你了解到一个文件的历史,以及它的发展过程的系统。但在此之前的工作都需要这些不同版本的报告,于是每次都是复制粘贴副本,产出的文件就越来越 多,文件多不是问题,问题是:随着版本数量的不断增多,你还记得这些版本各自都是修改了什么 吗?不知道你工作或学习时,有没有遇到这样的情况:我们在编写各种文档时,为了防止文档丢失,更改失误,失误后能恢复到原来的版本,不得不复制出一个副本。:没有唯一的中央服务器,每个开发者的本地仓库都包含完整的版本历史,任何一个副本都可以作为新的“中心”。

2026-04-16 15:05:39 493

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除