自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux篇:进程

每个进程都有一个非负整数表示的唯一ID,叫做pid,类似身份证,Pid=0:称为交换进程作用---进程调度Pid=0:init进程作用---系统初始化注意:编程调用getpid函数获取自身的进程标识符,getppid获取父进程的进程标识符。

2024-10-10 21:48:06 267

原创 Linux篇:open与fopen的区别

open返回文件描述符,而文件描述符是unix系统下的一个重要概念,unix下的一切设备都是以文件的形式操作,如网络套接字、硬件设备等,当然包括普通正规文件。低级文件IO运行在内核态,高级文件IO运行在用户态。fopen是ANSIC标准中C语言库函数,在不同系统中应该调用不同的内核api,返回的是一个指向文件结构的指针。open是unix系统调用函数(包括Linux),返回是文件描述符,它是文件在文件描述符表里的索引。fopen是c标准函数,拥有良好的移植性,而open是unix系统调用,移植性有限。

2024-10-07 21:31:00 118

原创 Linux篇:文件编程练手2

【代码】Linux篇:文件编程练手2。

2024-10-07 20:24:35 211

原创 Linux篇:文件编程练手1

【代码】Linux篇:文件编程练手1。

2024-10-07 12:03:05 296

原创 Linux篇:文件打开、创建与读写

在Linux中要操作一个文件,一般是先open打开一个文件,得到文件描述符,然后对文件进行读写操作(其他操作),最后是close关闭文件即可。Flags:O_RDONLY只读打开 O_WRONLY只写打开 O_RDWR可读可写打开。Pathname:要打开的文件名(含路径,缺省为当前路径)可读 r 可写w 执行x 可读可写rw。ls -l 列出所有清单。

2024-10-07 11:24:20 434

原创 QT篇:多态

想象一下,你有一个遥控器(这就像是一个基类的指针),这个遥控器可以控制不同的电子设备(这些 设备就像是派生类)。无论是电视、音响还是灯光,遥控器上的“开/关”按钮(这个按钮就像是一个虚函 数)都能控制它们,但具体的操作(打开电视、播放音乐、开灯)则取决于你指向的设备。3. 通过基类的引用或指针调用虚函数: 当我们使用基类类型的指针或引用来调用虚函数时,实际调用的是对象的实际类型(派生类) 中的函数版本。接口与实现分离:我们可以设计一个稳定的接口,而将具体的实现留给派生类去处理。

2024-10-04 17:37:29 339

原创 QT篇:继承

然 后,我们可以创建几个派生类,如 Lion 、 Elephant 和 Bird ,这些类继承自 Animal 类,并添加或 修改特定于它们自己的特性和行为。在C++中,继承可以是公有(public)、保护(protected)或私有(private)的,这决定了基类成员在 派生类中的访问权限。Lion 、 Elephant 和 Bird 是派生类,它们继承了 Animal 的特性,并根据自身的特性重写了。2. 扩展性:子类可以扩展父类的功能,添加新的属性和方法,或者重写(覆盖)现有的方法。

2024-10-04 17:35:49 356

原创 QT篇:析构函数

以下是关于 C++ 中析构函数需要了解的十个要点的表格: 标注粗体部分,是能快速上手的内容,方便后续QT的学习,而没有粗体的部分,会在QT结束后,如果安 排C++深入讲解的课程的话,会安排到。当 obj 的生命周 期结束时(即离开了它的作用域), MyClass 的析构函数被自动调用,负责清理资源,防止内存泄露。3. 自动调用:当对象的生命周期结束时(例如,一个局部对象的作用域结束,或者使用 delete 删除 一个动态分配的对象),析构函数会被自动调用。没有正确实现析构函数,可能导致资源泄露或其他问题。

2024-10-04 17:31:43 338

原创 QT篇:构造函数

构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于 为某些成员变量设置初始值。默认的构造函数没有任何参数,但如果需要,构造函数也可以带有参数。类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。构造,那构造的是什么呢?构造成员变量的初始化值,内存空间等。

2024-10-04 17:29:21 304

原创 QT篇:重载

这种做法在设计类的时候是很有用的,因为它可以确保某些函数不 会意外地改变对象的状态,同时也使得这个函数可以在常量对象上被调用。这意味着你可以定义类似于内置类型的运算符行为,使你的自定义类型更加 直观和易于使用。在这个例子中, operator+ 被重载为一个成员函数,接受一个 Point 类型的常量引用作为参数,并返 回两个点相加的结果。示例2:假设我们有一个简单的 Point 类,我们可以重载 + 运算符来实现两个点的加法。2. 至少有一个操作数是用户定义的类型:不能重载两个基本类型的运算符。

2024-10-04 17:26:43 293

原创 QT篇:引用

官方没有明确说明,但是引用确实不是传统意义上的独立变量,它不能“变”嘛 试想变量名称是变量附属在内存位置中的标签,您可以把引用当成是变量附属在内存位置中的第二 个标签。在C语言中,一个数据对应一个内存,通过由一个变量名来访问这个内存空间的数据,叫做直接访问,相 对直接访问,有个间接访问的说法,叫做指针。引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。当返回一个引用时,要注意被引用的对象不能超出作用域。所以返回一个对局部变量的引用是不合法 的,但是,可以返回一个对静态变量的引用。

2024-10-04 17:21:18 322

原创 QT篇:权限初识

在这个示例中, balance 是一个 private 成员变量,它不能被类的外部直接访问。银行的账户是一个模板,是一个类,有存款人信息和账户额度,而具体的存款人视为一个对象, 一个对象不能私自修改账户额度,需要通过一个操作流程,比如去ATM或者柜台进行操作才能修改 到账户额度, 所以,存款人信息和账户额度设计成私有权限,通过公有的操作流程,也就是公有函数去操作私有 变量。public 权限相当于我们学习C语言结构体一样,不考虑访问权限的存在,但是要注意,类中不写权 限,默认是私有权限。

2024-10-04 17:15:54 218

原创 QT篇:类

C++ 中的类(class)是一种编程结构,用于创建对象。这些对象可以拥有属性(即数据成员)和行为 (即成员函数或方法)。类的概念是面向对象编程的核心之一,其主要目的是将数据和与数据相关的操 作封装在一起。例如,如果你有一个“汽车”类,它可能包含颜色、品牌、型号等属性(数据成员),以及 启动、停止、加速等行为(成员函数)。每当你基于这个类创建一个对象时,你就有了一个具体的汽 车,具有这些属性和行为。C++ 类的基本结构通常包含:1. 数据成员(Attributes):定义类的属性。

2024-10-04 17:11:59 524

原创 QT篇:从C语言快速入门

C++ 中的输入和输出(I/O)主要是通过标准库中的输入输出流来实现的。最常用的是 iostream 库,它 提供了用于输入和输出的基本流类,包括 cin 、 cout 、 cerr 和 clog。1.标准输出流 ( cout )2.标准输入流 ( cin )3.标准错误流 ( cerr ) 和标准日志流 ( clog )cerr 用于输出错误消息。与 cout 不同, cerr 不是缓冲的,这意味着它会立即输出。clog 类似于 cerr ,但它是缓冲的。它通常用于记录错误和日志信息。

2024-10-04 17:05:00 884

原创 QT篇:C++基础

1.定义命名空间假设我们要创建一个命名空间来包含与圆形相关的功能。我们可以命名这个命名空间为 Cir :在这个头文件中,我们定义了一个名为 Cir 的命名空间,其中包含了计算圆的面积和周长的函数,以及 圆周率常量 PI。2.使用命名空间在另一个文件中,我们可以使用这个命名空间中定义的函数和常量:在 main.cpp 中,我们首先包含了定义 Cir 命名空间的头文件。然后,我们可以使用 Cir:: 前缀来访 问该命名空间中的函数和常量。

2024-10-03 18:24:12 848

原创 QT篇:QT介绍

Qt 是一个跨平台的应用程序和用户界面框架,用于开发图形用户界面(GUI)应用程序以及命令行工 具。它最初由挪威的 Trolltech (奇趣科技)公司开发,现在由 Qt Company 维护,2020年12月8日发 布QT6。Qt 使用 C++ 语言编写,支持多种编程语言通过绑定进行使用。对于许多开发者和小型企业来说,Qt 的开源版提供了一个强大且灵活的开发框架,而对于需要额外支持 和专有功能的大型企业或具有特定需求的项目,商业版则提供了所需的服务和资源。学习QT5和QT6都是可以的,无论选择哪个版本,Q

2024-10-03 18:00:30 419

原创 FreeRTOS篇15:中断管理

任何中断的优先级都大于任务!在我们的操作系统,中断同样是具有优先级的,并且我们也可以设置它的优先级,但是他的优先 级并不是从 015 ,默认情况下它是从 515 ,0~4 这 5 个中断优先级不是 FreeRTOS 控制的(5是 取决于 configMAX_SYSCALL_INTERRUPT_PRIORITY)。

2024-10-03 16:56:05 143

原创 FreeRTOS篇14:软件定时器

简单可以理解为闹钟,到达指定一段时间后,就会响铃。STM32 芯片自带硬件定时器,精度较高,达到定时时间后会触发中断,也可以生成 PWM 、输入 捕获、输出比较,等等,功能强大,但是由于硬件的限制,个数有限。软件定时器也可以实现定时功能,达到定时时间后可调用回调函数,可以在回调函数里处理信 息。

2024-10-03 16:38:38 947

原创 FreeRTOS篇13:延时函数

相对延时:vTaskDelay绝对延时:vTaskDelayUntil。

2024-10-03 15:42:36 266

原创 FreeRTOS篇12:任务通知

FreeRTOS 从版本 V8.2.0 开始提供任务通知这个功能,每个任务都有一个 32 位的通知值。按照FreeRTOS 官方的说法,使用消息通知比通过二进制信号量方式解除阻塞任务快 45%, 并且更加 省内存(无需创建队列)。在大多数情况下,任务通知可以替代二值信号量、计数信号量、事件标志组,可以替代长度为 1的队列(可以保存一个 32 位整数或指针值),并且任务通知速度更快、使用的RAM更少!

2024-10-03 15:32:43 677

原创 FreeRTOS篇11:事件标志组

事件标志组事件标志组。

2024-10-03 12:17:58 474

原创 FreeRTOS篇10:互斥量

系统中有3个不同优先级的任务H/M/L,最高优先级任务H和最低优先级任务L通过 信号量机制,共享资源。目前任务L占有资源,锁定了信号量,Task H运行后将被阻塞,直到Task L释放信号量后,Task H才能够退出阻塞状态继续运行。但是Task H在等待Task L释放信号量的过 程中,中等优先级任务M抢占了任务L,从而延迟了信号量的释放时间,导致Task H阻塞了更长时 间,这种现象称为优先级倒置或反转。

2024-10-03 11:44:55 365

原创 FreeRTOS篇9:计数型信号量

计数型信号量相当于队列长度大于1 的队列,因此计数型信号量能够容纳多个资源,这在计数型 信号量被创建的时候确定的。

2024-10-03 11:14:08 330

原创 FreeRTOS篇8:二值信号量

二值信号量其实就是一个长度为1,大小为零的队列,只有0和1两种状态,通常情况下,我们用 它来进行互斥访问或任务同步。互斥访问:比如门钥匙,只有获取到钥匙才可以开门任务同步:比如我录完视频你才可以看视频。

2024-10-03 10:57:47 419

原创 FreeRTOS篇7:队列

队列又称消息队列,是一种常用于任务间通信的数据结构,队列可以在任务与任务间、中断和任 务间传递信息。为什么不使用全局变量?如果使用全局变量,兔子(任务1)修改了变量 a ,等待树獭(任务3)处理,但树獭处理速度很 慢,在处理数据的过程中,狐狸(任务2)有可能又修改了变量 a ,导致树獭有可能得到的不是 正确的数据。在这种情况下,就可以使用队列。兔子和狐狸产生的数据放在流水线上,树獭可以慢慢一个个依 次处理。关于队列的几个名词:1)队列项目:队列中的每一个数据;

2024-10-03 10:15:15 880

原创 FreeRTOS篇6:任务综合小实验

创建 4 个任务:taskLED1,taskLED2,taskKEY1,taskKEY2,任务要求如下:taskLED1:间隔 500ms 闪烁 LED1;taskLED2:间隔 1000ms 闪烁 LED2;taskKEY1:如果 taskLED1 存在,则按下 KEY1 后删除 taskLED1 ,否则创建 taskLED1;taskKEY2:如果 taskLED2 正常运行,则按下 KEY2 后挂起 taskLED2 ,否则恢复 taskLED2。

2024-10-02 17:30:42 486

原创 FreeRTOS篇5:任务的状态

类似暂停,通过调用函数 vTaskSuspend() 对指定任务进行挂起,挂起后这个任务将不被执行, 只有调用函数 xTaskResume() 才可以将这个任务从挂起态恢复。处于就绪态的任务是指那些能够运行(没有被阻塞和挂起),但是当前没有运行的任务,因为同 优先级或更高优先级的任务正在运行。当任务处于实际运行状态称之为运行态,即CPU的使用权被这个任务占用(同一时间仅一个任务 处于运行态)。如果一个任务因延时,或等待信号量、消息队列、事件标志组等而处于的状态被称之为阻塞态。1)Running 运行态。

2024-10-02 17:01:19 181

原创 FreeRTOS篇4:任务调度

调度器就是使用相关的调度算法来决定当前需要执行的哪个任务。FreeRTOS中开启任务调度的函数是 vTaskStartScheduler() ,但在 CubeMX 中被封装为。

2024-10-02 16:53:19 362

原创 FreeRTOS篇3:任务的创建与删除

任务可以理解为进程/线程,创建一个任务,就会在内存开辟一个空间。比如: 玩游戏、陪女朋友,都可以视为任务Windows 系统中的 MarkText 、谷歌浏览器、记事本,都是任务。任务通常都含有 while(1) 死循环。

2024-10-02 16:38:28 397

原创 STM32篇(HAL):SPI

W25Q128 是华邦公司推出的一款 SPI 接口的 NOR Flash 芯片,其存储空间为 128 Mbit,相当于16M 字节。Flash 是常用的用于储存数据的半导体器件,它具有容量大,可重复擦写、按“扇区/块”擦除、掉 电后数据可继续保存的特性。Flash 是有一个物理特性:只能写 0 ,不能写 1 ,写 1 靠擦除。

2024-10-02 15:17:37 1159

原创 STM32篇(HAL):IIC

向OLED写命令的封装:向OLED写数据的封装:

2024-10-02 15:02:13 526

原创 STM32篇(HAL):ADC

全称:Analog-to-Digital Converter,指模拟/数字转换器。

2024-10-02 14:58:35 1007

原创 STM32篇(HAL):DMA

1.什么是DMADMA(Direct Memory Access,直接存储器访问) 提供在外设与内存、存储器和存储器、外设 与外设之间的高速数据传输使用。它允许不同速度的硬件装置来沟通,而不需要依赖于CPU,在这个时间中,CPU对于内存的工作来说就无法使用。简单描述: 就是一个数据搬运工!!2.DMA的意义代替 CPU 搬运数据,为 CPU 减负。1). 数据搬运的工作比较耗时间;2). 数据搬运工作时效要求高(有数据来就要搬走);

2024-09-25 21:52:29 1086

原创 STM32篇(HAL):窗口看门狗WWDG

窗口看门狗用于监测单片机程序运行时效是否精准,主要检测软件异常,一般用于需要精准检测 程序运行时间的场合。窗口看门狗的本质是一个能产生系统复位信号和提前唤醒中断的6位计数器。产生中断条件: 当递减计数器等于 0x40 时可产生提前唤醒中断 (EWI)。在窗口期内重装载计数器的值,防止复位,也就是所谓的喂狗。

2024-09-22 23:12:41 448

原创 STM32篇(HAL):独立看门狗 IWDG

在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造 成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会 造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测 的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片,俗称“看门狗” (watchdog)。独立看门狗工作在主程序之外,能够完全独立工作,它的时钟是专用的低速时钟(LSI),由VDD 电压供电, 在停止模式和待机模式下仍能工作。

2024-09-22 22:59:52 410

原创 STM32篇(HAL):串口

1.串口发送/接收函数:串口发送数据,使用超时管理机制串口接收数据,使用超时管理机制串口中断模式发送串口中断模式接收作用:以阻塞的方式发送指定字节的数据作用:以中断的方式接收指定字节的数据此函数执行完后将清除中断,需要再次调用以重新开启中断。2.串口中断回调函数://串口中断处理函数//发送中断回调函数//接收中断回调函数3.状态标记变量:从0开始,串口中断接收到一个数据(一个字节)就自增1。

2024-09-22 22:49:45 531

原创 STM32篇(HAL):定时器

1.STM32F103C8T6 PWM资源:高级定时器(TIM1):7路通用定时器(TIM2~TIM4):各4路2.PWM输出模式:PWM模式1:在向上计数时,一旦 CNT < CCRx 时输出为有效电平,否则为无效电平;在向 下计数时,一旦 CNT > CCRx 时输出为无效电平,否则为有效电平。PWM模式2:在向上计数时,一旦 CNT < CCRx 时输出为无效电平,否则为有效电平;在向 下计数时,一旦 CNT > CCRx 时输出为有效电平,否则为无效电平。

2024-09-22 22:36:24 477

原创 STM32篇(HAL库):中断

外部中断/事件控制器(EXTI)管理了控制器的 23 个中断/事件线。每个中断/事件线都对应有一 个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。EXTI 可以实现对每个中断/事 件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。EXTI 可分为两大部分功能,一个是产生中断,另一个是产生事件,这两个功能从硬件上就有所不 同。产生中断线路目的是把输入信号输入到 NVIC,进一步会运行中断服务函数,实现功能,这样是软 件级的。

2024-09-22 17:30:17 652

原创 STM32篇:复位和时钟控制(RCC)

1)三种不同的时钟源可被用来驱动系统时钟(SYSCLK)HSI振荡器时钟(高速内部时钟)HSE振荡器时钟(高速外部时钟)PLL时钟(锁相环倍频时钟)2)二级时钟源:0kHz低速内部RC(LSIRC)振荡器32.768kHz低速外部晶体(LSE晶体)

2024-09-22 12:13:44 460

原创 STM32篇:STM32CubeMX的安装

7. 点击 Open Project 即可调用 Keil5 打开自动生成的工程文件。1. 点击「ACCESS TO MCU SELECTOR」;更新固件包位置(比较大,默认在C盘,可以更改到其它盘)2. 左上角搜索对应的芯片,并在右侧双击对应的芯片;二.使用STM32CubeMX生成工程文件。3. 点击芯片对应的引脚,并进行配置;通过界面的方式,快速生成工程文件。一路下一步,建议不要安装在C盘。

2024-09-21 21:58:35 548

空空如也

空空如也

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

TA关注的人

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