- 博客(63)
- 收藏
- 关注
原创 《STM32单片机开发》p6
EEPROM(EErasablePRead-OnlyMemory)型号AT24C02设备地址 0x50容量 2Kbit(位) = 256Byte(字节)地址的编码范围 0~255。
2025-11-28 19:23:19
814
原创 《STM32单片机开发》p5
queue.hqueue.c输入重定向(需要打开微库开关)ESP8266 是一个WIFI芯片,他的接口是串口,可以使用USART或UART进行通信。控制ESP8266 需要发送 AT 指令进行控制。AT 指令是移动通信领域的常用操作指令,主要用于各种移动通信的模块控制。ATOK'\r\n'设备丝印: ESP-015。
2025-11-11 14:55:06
512
原创 《STM32单片机开发》p4
它支持同步单向通信和半双工单线通信,也支持LIN(局部互连网),智能卡协议和IrDA(红外数据 组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。方法:点击魔法棒,在“Options for Target 'Targets'” 对话框的"Target" 标签页的右侧,勾选 “Use MicroLIB”如果一个码元能传送0v、2v、4v、6v 四种电平,则一个码元能表示数字:0、1、2、3(二进制的两个位),则比特率是波特率的2倍。通信速率指的是在单位时间内,通信系统能够传输的有效数据量。
2025-11-11 14:52:20
1216
原创 《STM32单片机开发》p3
HC595_SCLK(SH_CP管脚) 低电平时变化数据(HC595_DATA - DS管脚)HC595_SCLK 上升沿,触发移位(低位-> 高位),并将 DS 管脚数据放入最低位。中断向量表是一个数组,内部存储各个中断处理函数的地址(可以理解成函数指针的数组)。中断可以打断主程序的执行,高优先级的中断可以打断低优先级的中断。中断是指通过某个事件打断一个线程程序或另一个中断执行的情况。HC595_SCLK(SH_CP管脚) 处于低电平。响应式优先级、子优先级或副优先级。中断向量是中断处理函数的地址。
2025-11-11 14:45:15
437
原创 《STM32单片机开发》p2
CMSIS标准CMSIS 的全称是 Cortex Microcontroller Software Interface Standard,即 ARM-Cortex微控制器软件接口标准。简单来说,它是ARM公司制定的一套软件标准,目的是为基于Cortex-M系列处理器(比如STM32使用的Cortex-M0, M3, M4, M7等)的芯片厂商和软件开发人员提供一个统一的硬件抽象层。STM32固件库(Fireware Library)(标准外设库)ST公司为自己的产品而设计,复合 CMSIS标准。
2025-11-11 14:33:36
949
原创 《STM32单片机开发》
芯片型号: STM32F103RBT6我们通常管 STM32 系列的处理器叫做单片机或微控制单元(MCU:Microcontoller Unit).
2025-11-11 14:28:28
1157
原创 《Qt应用开发》笔记p5
SQLite 是一个轻量级的关系型数据库SQL(Structured Query Language) 是结构化查询语言。Lite 是轻量的意思。SQLite专门为嵌入式设计,仅仅需要几百K内存就可以运行。SQLite 支持多个操作系统:Windows,Linux,UNIX等。SQLite 数据库是遵守ACID规则的数据库。DDL用于定义和管理数据库的结构,包括创建、修改和删除数据库对象(如表)
2025-10-13 19:25:24
971
1
原创 《Qt应用开发》笔记p4
目标:使用 QWidget 实现自定的按钮功能:Q_OBJECTpublic:protected:// 重写 paintEvent来覆盖父类的 paintEvent// 重写鼠标的按下和抬起的事件处理函数。private:// 用来记下鼠标的状态。signals:{}// qDebug() << "paintEvent被调用";// 创建一个 绘图对象 QPainter,用来绘制此Widget的内容。
2025-10-13 19:10:39
376
原创 《Qt应用开发》笔记p3
void clicked(bool checked = false) // 点击信号(给出按钮的值)void pressed() // 按钮按下void released() // 释放按钮void toggled(bool checked) // 按钮状态变化。槽是对象自定义的函数,他可以象普通成员函数一样调用。还可以连接某个对象的信号。class MyWidget: public QObject类或他的子类 {Q_OBJECT // 必须添加此宏返回类型 槽函数名1(参数列表) {函数体}
2025-10-13 19:06:21
366
原创 《C++程序设计》笔记p8
lambda表达式又叫匿名函数,是C++11标准后新增加的特有的表达式。作用:在需要的地方创建函数并作为表达式返回,避免在其他地方定义在此调用,可以使程序更易于理解。语法结构捕获列表的写法示例lambda 表达式示例2。
2025-09-28 20:44:18
798
原创 《C++程序设计》笔记p7
修改冒泡排序的算法,将其修改为函数模板,使其能对 int 类型的数组,double 类型的数组,甚至动态数组。泛型算法是一种编程范式,核心思想是编写与类型无关的通用代码,让算法和数据结构等能够适用于不同的数据类型。用于遍历原生数组或含有.begin() 和 .end()成员函数并返回迭代器的可迭代的对象。模版的参数内不仅可以有模版类型的定义,还可以有变量的定义。STL的容器类中都封装了迭代器类,用于操作容器类内的数据。作用:编写于类型无关的通用类,实现与类型无关代码的复用。作用:统一容器类的数据访问方法。
2025-09-25 20:32:18
896
原创 《C++程序设计》笔记p6
异常是 C++ 提供的一种处理程序运行时错误的机制,它运行程序时检测错误,并快速返回到上层调用的地方进行错误处理,同时会调用栈上创建对象的析构函数。作用:抛出错误,让程序进入异常状态(走异常路径),返回到上层调用处理待处理。运算符的对象,此类对象能像函数一样调用,因此叫函数对象。作用:用于尝试并捕获异常,将程序转成正常状态。new、delete 运算符重载函数。作用:自定义对象的存放地址。自增、自减运算符重载。
2025-09-25 20:23:38
715
原创 《C++程序设计》笔记p5
覆盖是指,子类实现了同名,参数列表也完全相同的成员函数,在子类对象代用该方法时调用的是子类的方法(父类的方法不会被调用),此种现象成为制覆盖(或屏蔽)。子类成员函数的调用规则是向上查找规则,即子类先查找自己是否有这个成员函数,如果没有就查找父类,如果再没有就查找父类的父类... 以此类推。都没有找到则报错。子类对象显式调用父类对象的成员函数的方法。语法:示例多态(Polymorphism)多态是不同的对象展现出不同的状态。多态的作用:允许程序使用同一的接口(通常是基类的指针)来操作不同的派生
2025-09-24 20:24:06
793
原创 《C++程序设计》笔记p4
作用:声明一个成员函数为常成员函数,常成员函数在修改该类成员变量时将会报错(在编译阶段报错),且不能调用。继承是允许一个类(子类或派生类)基于另外一个类(父类或基类)创建,并继承基类的成员变量和成员函数。作用:代替默认的赋值运算符成员函数来控制对象复制的过程,从而避免复制过程中的浅拷贝。友元声明是指让声明的一个函数、类或成员函数可以访问该类的私有和保护成员。作用:让全局函数、其他类或其他类的成员函数可以访问该类的私有和保护成员。是类的函数,他只能访问类的静态成员变量,不能访问对象的成员变量。
2025-09-24 20:15:22
922
原创 《C++程序设计》笔记p3
作用:释放对象对象使用的资源。析构函数 会在对象销毁前自动调用。如果类内没有定义析构函数,则编译器也会为其添加一个析构函数,默认的析构函数什么都不做。析构函数的语法全局变量(对象)存在于数据段,而数据段是在 main 函数调用之前创建,并创建数据段内的对象,因此全局变量(对象)的构造函数会先用main调用。同样析构函数也会在 main 函数结束后调用。如示例代码delete作用:在堆上创建对象和释放对象。C 语言分配内存的方法: malloc/freeC++ 创建对象的方法:newdelete语法。
2025-09-20 14:52:56
292
原创 《C++程序设计》笔记p2
的每个成员函数都有一个this指针指向调用此函数的对象(默认成员函数的第一个参数就是this指针,只不过CPP的语法隐藏了this指针(第一个参数));**属性:**用于保存一个对象的数据。**行为:**用于描述一个对象的动作;C++ 用成员函数来实现。是定义在类内的函数,名字空间属于类,需要使用该类的对象来调用。this 指针是 C++ 成员函数内,指向调用对象地址的指针。作用:创建一个自定义的类型,同C语言中的结构体。作用:用于对新创建的对象的成员变量进行初始化。同C 语言的结构体成员变量相同。
2025-09-19 19:37:43
506
原创 《C++程序设计》笔记
cpp.cxx安装 g++ 编译器第一个C ++程序编译方法命名空间也叫名字空间,是一个标识符的范围空间。名字空间内标识符的使用方法(有两种)using namespace说明:如果语句用在函数内,则此声明只在函数内执行处向下有效,在函数调用结束后名字空间失效。示例。
2025-09-18 20:58:50
1018
原创 《LINUX系统编程》笔记p15
核心思想:想象一个桶的底部有一个小孔向外流水。无论桶里面的水是多开始少,小孔每分钟流出的水量基本一致。实现方法:在程序中,允许发送数据的控制方(我们称之为生产者)周期性的使用信号(或线程)将一个标记 Flag 置为1,1代表可以发送数据,如:每 1秒将 Flag 置为1。将要发送流量的线程在发送数据之前检查Flag 标志,如果标志为零则等待,如果标志位1,则将其置零,然后发送数据。
2025-09-17 20:37:15
222
原创 《LINUX系统编程》笔记p12
作用:告诉编译器,取消结构体(struct)或联合体(union)在编译过程中的“字节对齐”优化,使其成员在内存中紧密排列,不留任何空隙。
2025-09-16 20:11:35
389
原创 《LINUX系统编程》笔记p11
多进程或多线程,在竞争资源的时候,由于互相抢占而导致僵死的状态叫做死锁。死锁是由于一方拿到资源不释放。而其他线程或进程无法获取资源导致。
2025-09-16 19:57:01
622
原创 《LINUX系统编程》笔记p10
作用:对信号量进行增、减操作。增操作(V操作):会唤醒等待信号量的进程。减操作(P操作):如果减后的结果小于零,进程会阻塞(睡眠),直至信号量增加值可以减少的值。
2025-09-16 19:53:29
586
原创 《LINUX系统编程》笔记p9
作用:用于将一段内存的每个字节都填充成指定的数值。函数格式作用:用于非亲属关系之间的进程间的数据流通信。mkfifo命令创建管道的函数 myfifo打开命名管道的函数open使用UNIX系统 open(2) 函数打开命名管道。open函数在建立管道前是阻塞函数。等待另外一端打开才向下继续执行。
2025-09-03 19:42:36
472
原创 《LINUX系统编程》笔记p7
示例:尝试让子进程给 父进程发送 SIGKILL 信号,杀死父进程,子进程继续运行。作用:定时为 当前进程发送 SIGALRM 信号,实现定时器的功能。作用:注册新的信号处理函数,返回旧的信号处理函数。子进程状态变化会触发此信号(一般是子进程退出)UNIX 预定义的信号 (1 ~ 31),以。一个信号只能有一个信号处理函数生效。实时信号 (34 ~ 64),以。作用:实现精准定时和循环定时。使用信号回收子进程资源示例。handle 参数的取值。
2025-09-01 11:57:02
341
原创 《LINUX系统编程》笔记p5
学习如何来创建进程,销毁进程以及UNIX 下的进程机制。在 Linux 系统下每个进程都有一个唯一的整数值标号,称之为进程ID(process ID),简写PID。每个进程又一定是某个进制创建的。我们把创建此进行的进程称之为父进程。当前进程父进程的ID 称之为PPID。
2025-09-01 11:32:38
790
原创 《LINUX系统编程》笔记p3
(Not in// 用法int ret;printf("文件大小:%ld\n", st.st_size);printf("文件块个数:%ld\n", st.st_blocks);printf("修改时间:%s\n", ctime(&st.st_mtim.tv_sec));// 判断stat 的第一个参数是什么类型的文件。switch (st.st_mode & S_IFMT) { // man 7 inode 查找宏定义printf("普通文件\n");break;
2025-08-22 18:45:23
852
原创 《LINUX系统编程》笔记p2
Shell 中的输入输出重定向的符号扩展用法特殊的黑洞文件,向此文件内写入数据,数据会被丢弃。/dev/null示例代码复制函数给出一个旧的文件描述符,返回一个最小的可用的文件描述符。给出一个旧的文件描述符和一个你期望的新的文件描述符newfd,返回新的文件描述符。如果新的文件描述符已经打开了文件。则先关闭 newfd, 然后再复制文件描述符。复制的文件描述符在不用时也需要关闭示例。
2025-08-22 09:15:13
459
原创 《LINUX系统编程》笔记
作用:打开Linux 内核的文件(包括设备文件等),是Linux 内核的基本API(应用程序接口 Application Interface)。在Linux操作系统中,文件描述符的范围默认是[0 ~ 1023],是因为Linux操作系统默认一个进程同时可以打开1024个文件[文件描述符是一个非负整数,当程序打开一个现有的文件或者创建一个新的文件时并打开,内核就会返回一个文件描述符。文件描述符其实就是文件IO,作为我们打开文件的标志,这个标志是一个非负的整数(>=0)],文件描述符时从 0 开始分配的。
2025-08-20 09:01:59
1049
原创 C语言中宏的作用
_DATE__:当前源文件的编译日期,格式为 "Mmm dd yyyy"(如 "Aug 6 2023")。__TIME__:当前源文件的编译时间,格式为 "hh:mm:ss"(如 "14:30:00")。__FILE__:当前源文件的文件名(字符串形式)。__LINE__:当前代码行的行号(十进制整数)。__func__(C99 引入):当前所在的函数名(字符串形式)。printf("当前函数名:%s\n", __func__);printf("当前行号:%d\n", __LINE__);
2025-08-20 08:55:36
313
原创 《C语言程序设计》笔记p11
位域是一种特殊的结构体成员或联合体成员,他允许指定结构体或联合体中的成员占用特定的位数(而不是整个字节或字)作用:用于精确控制内存的使用或硬件交互式使用。语法示例完整示例代码文件是以字节为单位,用来长期存储数据的存储单元。序列化:把程序中无序的数据以字节为单位依次摆放,放入文件中的过程叫做序列化。文件操作的步骤:打开文件:fopen函数,返回FILE 类型的结构体指针(FILE是用typedef 定义的结构体别名)读写文件文本文件关闭文件 fclose() 函数man 3 函数名。
2025-08-18 18:46:30
912
原创 数据结构与算法p4
定义 树(Tree)是n(n≥0)个节点的有限集合T,它满足两个条件:有且仅有一个特定的称为根(Root)的节点;二叉树(Binary Tree)是n(n≥0)个节点的有限集合,它或者是空集(n=0),或者是由一个根节点以及两棵互不相交的、分别称为左子树和右子树的二叉树组成。二叉树每个节点中除了存储数据的元素本身外,还需要两个变量来记录当前节点的左子树和右子树。1、如果是一个满二叉排序树(二叉查找树),他的查找的时间复杂度是。最大度为 3 的树的节点的定义。2、 二叉树链式存储节点的定义。
2025-08-15 20:45:28
889
原创 数据结构与算法p3
什么是递归递归是指函数直接或间接的调用自身。作用:代替循环,简化循环。示例:使用递归,求 1 + 2 + 3 + .... + 99 + 100 的和对有序或无序的数据进行查找时间复杂度二分查又叫折半查找。对有序的顺序存储的数据进行查找。时间复杂度完整代码。
2025-08-13 18:39:32
884
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅