自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 valgrind使用记录

valgrind是一款用于内存调试、内存泄漏检测以及性能分析的软件开发工具。

2025-08-16 08:41:24 317

原创 Git、JSON、MQTT

是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,是基于TCP协议实现的一种应用层协议。同时兼具TCP的可靠性和UDP的分包特性,适合高频次小数据量的通信基于C/S(客户端-服务器)模式在物联网、小型设备、移动应用等方面有较广泛的应用适用范围:机器与机器(M2M)通信和物联网(IoT)补充:常见应用层协议:http(WEB领域)、modbusTCP(工业通信领域)、MQTT。

2025-08-15 17:21:49 831

原创 嵌入式学习之WIFI模组

3.5的发送太别扭了,每次发送要提前输入指令,还有长度限制,并不高效和方便,可以不可以有一种设置,只要设置好了,我们就可以让串口助手直接和服务器进行通信,ESP8266只作一个转发者的身份存在,当发送指定字符时才退出通信。这就是透传,让ESP8266透明化的一种数据传输方式。也就是,开启透传模式后,ESP8266接收到的任何数据他都不会将其看做命令,而是看做是要传输出去的数据,此时ESP8266就只是一个数据中转站,也就是实现了其透明化,数据好像直接从发送方到了接收方。

2025-08-15 17:20:58 1033

原创 FreeRTOS学习(二)

信号量代表某一类资源其值表示系统中该资源的数量。信号:起通知作用;量:还可以用来表示资源的数量信号量的值>0, 表示有资源可以用, 可以申请到资源,信号量的值=0, 表示没有资源可以用, 无法申请到资源, 阻塞.当"量"没有限制时,它就是"计数型信号量"(Counting Semaphores)当"量"只有 0、1 两个取值时,它就是"二进制信号量"(Binary Semaphores)支持的动作:"give"给出资源,计数值加 1;

2025-08-08 08:52:06 1090

原创 FreeRTOS学习(一)

ARM® Cortex™ 微控制器软件接口标准 (CMSIS) 是 Cortex-M 处理器系列的与供应商无关的硬件抽象层。CMSIS 可实现与处理器和外设之间的一致且简单的软件接口,从而简化软件的重用,缩短微控制器开发人员新手的学习过程,并缩短新设备的上市时间。CMSIS的结构:CMSIS 包含以下组件:CMSIS-CORE:提供与 Cortex-M0、Cortex-M3、Cortex-M4、SC000 和 SC300 处理器与外围寄存器之间的接口。

2025-08-04 19:59:46 1120

原创 硬件电路基础学习

二极管:二极管的工作原理是基于PN结的单向导电性。在正向偏置时,PN结中的电子会从N极流向P极,形成电流;在反向偏置时,PN结中的空穴会从P极流向N极,形成反向电流。二极管的主要作用是整流稳压和保护电路。三极管:三极管的工作原理是基于电流放大和开关的原理。三极管有三个极:发射极、基极和集电极。当三极管工作时,基区内的电子会被激发到发射区,形成发射极电流;同时,集电区的空穴会被吸引到基区,形成集电极电流。

2025-07-31 18:40:27 1034

原创 嵌入式ADC和DMA

数据搬运工(从哪搬?搬到哪?搬多少?DMA(Direct Memory Access,直接内存(存储器)访问)是一种内存访问技术,允许某些硬件设备独立地、直接地访问主内存,而不需要通过中央处理器(CPU)的介入。DMA传输是将数据从一个地址空间搬到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。

2025-07-26 10:36:04 774

原创 嵌入式USART

USART 能够灵活地与外部设备进行全双工数据交换,满足外部设备对工业标准 NRZ 异步串 行数据格式的要求。USART 通过小数波特率发生器实现了多种波特率。USART 不仅支持同步单向通信和半双工单线通信,以及 LIN(局域互连网络)、智能卡 协 议、IrDA(红外线数据协会)SIR ENDEC 规范和调制解调器操作 (CTS/RTS),还支持多 处 理器通信。通过配置多个缓冲区使用 DMA(直接存储器访问)可实现高速数据通信。USART 通用同步/异步收发器。

2025-07-21 18:41:38 950

原创 嵌入式中断

EXTI(Extern Interrupt)外部中断 InternEXTI可以监测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程序。支持的触发方式:上升沿/下降沿/双边沿/软件触发支持的GPIO口:所有GPIO口注意:不同端口相同的引脚号不能同时触发中断(例:PA0和PB0不能同时触发)原因如下:通道数。

2025-07-18 08:41:42 879 1

原创 嵌入式时钟系统

PWM,全称为脉冲宽度调制(Pulse Width Modulation),是一种调节信号的方法。简单来说,PWM 就是通过改变信号的高电平和低电平的时间比例来控制输出的平均电压或功率。想象一下,我们有一个周期性的信号,其中高电平表示“开”状态,低电平表示“关”状态。PWM 就是在一个固定的时间周期内,通过改变高电平和低电平的持续时间来控制信号的特性。例如,如果我们将高电平持续时间设为较长,低电平持续时间设为较短,那么平均电压或功率就会比较高。

2025-07-17 20:09:05 2181 2

原创 嵌入式SPI与IIC

串行外设接口)是一种同步串行通信技术,Motorola 首先提出的全双工三线/四线同步串行外围接口采用主从模式架构。时钟由Master控制(也就是用的谁的时钟谁就是主人),在时钟移位脉冲下,数据按位传输,高位在前,低位在后;SPI接口有2根单向数据线,为全双工通信。注意:串口默认低位先行,SPI默认高位先行SPI总线被广泛地使用在FLASH、ADC、LCD等设备与MCU间,要求通讯速率较高的场合。SPI通信特点:(1)一主多从(2)每一个从设备都有一个独立的片选线。

2025-07-15 20:35:35 1095

原创 嵌入式学习之GPIO

通用输入输出接口GPIO是一种在嵌入式系统中广泛使用的接口,它允许系统与外部设备进行交互。GPIO引脚可以配置为输入或输出模式,以读取或控制外部设备的状态。输入模式:GPIO作为输入时,可以接收来自传感器、开关或其他外部设备的信号。这些信号被传递给嵌入式系统的处理器,以便系统可以根据这些信号做出相应的决策或执行特定的操作。输出模式:GPIO作为输出时,可以向外部设备发送数字信号。例如,控制LED的亮灭、驱动电机运转等。通过改变输出信号的状态,嵌入式系统可以与外部设备进行交互。

2025-07-14 08:43:45 820

原创 Qt开发基础之常用类

QString是Qt的字符串类,与C++的string相比,不再使用ASCII编码,QString使用的是编码。QString中每个字符都是一个16位的QChar,而不是8位的char。QString完全支持中文但是由于不同的技术可能会采用不同的中文编码也有可能会遇到中文编码一致性的问题。Qt中对C的类重写时充分考虑到了C程序员的编程习惯因此QString几乎支持所有string的API除此。

2025-07-08 19:01:03 981

原创 Qt开发基础(续)

按钮类抽象基类,内部包含按钮的基础属性和函数单选按钮同一作用域下,所有单选按钮只有一个可以被选中,区分作用域的方式有两种:(1)使用布局(想家标题的话,用标签lable)(2) 使用GroupBox组件多选按钮:将图表加入到资源中然后更改完成后发现图标周围有个小边框勾选下面选项可以取消小框或者通过在styleSheet中设置样式来解决/* 取消边框 *//* 设置背景色为透明,使按钮看起来更加平滑 */

2025-07-02 11:14:35 773

原创 Qt开发基础

Qt不可能内置所有执行的动作代码特别是复杂的动作需要开发者手动编写槽函数这种方式也是所有连接方式中使用最多的。槽函数实际上是一种特殊的成员函数,在声明的时候所写的权限当槽函数当做普通成员函数使用时会受到权限限制,但在信号槽连接时(connect),该权限不会起作用在自定义槽函数时:注意最小权限原则,能private就private,实在不行就protected,最后public例:点击按钮窗口向右和向下移动10个像素同时输出。

2025-06-30 19:59:50 892

原创 C++基础之智能指针

堆内存对象需要手动使用delete销毁如果没有使用delete销毁就会造成内存泄漏。所以C在ISO98标准中引入了智能指针的概念并在ISO11中趋于完善。使用智能指针可以让堆内存对象具有栈内存对象的特点原理是给需要手动回收的内内存对象套上一个栈内存的模板类对象的即可。使用智能指针需要引入头文件includememory>C有四种智能指针●auto。

2025-06-25 19:02:08 743

原创 C++基础之异常处理

异常是程序在执行期间产生的问题C的异常是指在程序运行时发生的特殊情况比如at函数的下标访问越界等。异常提供了一种转移控制权的方式。程序一旦出现异常没有经过处理就会造成程序崩溃。异常的处理方式有两种抛出异常throw)和捕获异常try-catch)

2025-06-24 18:24:22 344

原创 C++基础之面向对象高级

本文介绍了C++中继承和多态的核心概念。在继承方面,详细阐述了基类和派生类的关系、函数隐藏、构造函数的限制与解决方案(包括透传构造、委托构造和继承构造)、对象创建销毁流程以及多重继承中的二义性问题(通过作用域限定符和虚继承解决)。还分析了三种权限修饰符(private、protected、public)在不同继承方式(公有、保护、私有)下的访问规则。 在多态方面,重点讲解了函数覆盖(override)作为多态触发条件的特点,包括虚函数的传递性、适用场景(成员函数可设为虚函数而静态成员函数不能)、构造函数不能

2025-06-20 18:33:22 419

原创 C++基础之STL容器

模板让程序员编写与类型无关的代码,可以让程序员专注于算法设计,因为运行过程中可以是任何类型,共用这一套算法。模板是泛型编程的基础泛型编程的目的是发明一种语言机制,能够帮助实现一个通用的标准模板库STL。模板通常有两种形式●函数模板●类模板。

2025-06-20 09:17:34 656

原创 C++基础之运算符重载

的。

2025-06-19 11:16:09 941

原创 C++基础之面向对象基础

类内的成员(尤指成员函数)可以声明与定义分离声明要在类内定义可以写在类外这种写法随后后期学习比重会逐渐增加。类内声明:函数类型 函数名(参数列表);类外定义格式:函数类型 类名::函数名(参数列表)...函数体...private:public://先声明//构造函数//后定义name=n;name=n;

2025-06-17 19:08:13 1007

原创 C++基础之C到C++

C++是面向对象编程更注重大局观(架构)忽视细节是一种新的编程方式适合大型软件项目。常用于系统开发,引擎开发、嵌入式开发等应用领域, 至今仍然是最受广大程序员喜爱的编程语言之一。特点:【熟悉】•在支持C的基础上,全面支持面向对象编程•编程领域广泛,功能强大(最强大的编程语言,没有之一)•标准保持更新,目前常用的基础标准为ISO C++98标准、ISO C++11标准等•为数不多的支持底层操作的面向对象语言•在面向对象的语言中执行效率极高面向对象:【重点】

2025-06-16 18:24:48 1050

原创 基于Webserver的数据采集

就是这个登录页面的判断,判断用户名和密码是否在数据库中,我在服务器端使用SQL语句查询数据库之后,若能找到对应的用户名密码会给网页响应"yes",否则就响应"no",然后,我明明 r 打印出来就是"no",结果 r=="no"的判断就是0,我真的好一顿捣鼓确认就是判等的问题后,我就去查了查,结果令我十分无语,用console.log(encodeURIComponent(r));显示了一下完整的字符串,no后面跟了一堆%00,这要能等才神奇,我就切片了一下,果然,就成功进去了。通信:(进程间通信)

2025-06-15 16:50:33 507

原创 网络编程之HTML语言基础

HTML(英文Hyper Text Markup Language的缩写)中文译为“超文本标记语言”。是用来描述网页的一种语言。所谓超文本,因为它可以加入图片、声音、动画、多媒体等内容,不仅如此,它还可以从一个文件跳转到另一个文件,与世界各地主机的文件连接。HTML 不是一种编程语言,而是一种标记语言Web 浏览器的作用是读取 HTML 文档,并以网页的形式显示出它们。浏览器不会显示 HTML 标签,而是使用标签来解释页面的内容。

2025-06-12 19:55:41 286

原创 网络编程之Modbus与HTTP

1.起源●Modbus由Modicon公司于1979年开发,是全球第一个真正用于工业现场的总线协议●●Modbus通信协议具有多个变种,其中有支持串口,以太网多个版本,其中最著名的是Modbus RTU、Modbus ASCII和Modbus TCP三种,其中Modbus TCP是在施耐德收购Modicon后1997年发布的。运行在串口上的协议,采用二进制表现形式以及紧凑的数据结构,通信效率较高,应用比较广泛运行在串口上的协议,采用ASCII码。

2025-06-12 08:29:24 1113

原创 数据库SQLite基础

SQLite的存储结构 --->B树大型数据库 :Oracle中型数据库 :Server是微软开发的数据库产品,主要支持windows平台小型数据库 : MySQL是一个小型关系型数据库管理系统。开放源码 (嵌入式不需要存储太多数据)

2025-06-06 20:13:40 852

原创 网络编程之服务器模型与UDP编程

->在accept之后(因为accept可以循环等待与多个客户建立连接,但无法同时与多个客户通信)-->在accept之后(因为accept可以循环等待与多个客户建立连接,但无法同时与多个客户通信)一个服务器可以连接多个客户端,但同一时间只能连接并处理一个客户的请求。-->解决服务器不能同时与多个客户通信。-->解决服务器不能同时与多个客户通信。---->用于循环等待客户的连接。---->用于循环等待客户的连接。作用--->获取消息发送方的信息。一样---->确定消息要发给谁。

2025-06-06 10:01:43 1121

原创 网络编程之TCP编程

ipv4通信使用的结构体:struct sockaddr_in我们只需要直接定义结构体变量即可。

2025-06-04 22:07:59 2708 3

原创 网络编程之网络基础

基础理论IP子网掩码端口号字节序网络基础模型传输协议socketTCPUDP广播组播抓包工具的使用协议头并发服务器Modbus协议HTTP协议HTML分析服务器源码、数据库一、认识网络网络:实现多设备通信。

2025-06-04 19:47:40 1740

原创 进程IO之 Linux IO 模型

最常见,但效率低,不浪费CPU。

2025-05-29 19:22:49 640

原创 进程IO之 线程

线程是一个轻量级的进程为了提高系统的性能引入线程。线程和进程都参与统一调度。在同一个进程中可创建多个线程,共享进程资源。1.2进程和线程的区别相同点:都为OS提供了并发执行能力:线程是系统调度的最小单位,进程是资源分配的最小单位:同一进程创建的的多个线程共享这个进程的资源,而各个进程之间的地址空间相互独立:线程通信相对简单,只需要通过全局变量就可以实现,但要注意临界资源的访问问题;进程通信比较复杂,需要借助进程间的通信机制。

2025-05-28 20:51:56 621

原创 进程IO之 进程

程序:静态的,编译好的可执行文件,存放在磁盘中的指令和数据的集合进程:动态的,是程序的一次执行过程,是独立的可调度的任务。

2025-05-26 21:09:28 1017

原创 进程IO之 库

使用他人的函数时,除了包含头文件还可以用库文件头文件函数声明结构体共用体枚举的定义宏定义重定义外部引用其他头文件。库:把一些常用的函数的目标文件打包在一起,提供相应的函数接口,便于程序员使用。本质上来说库是一种可执行代码的二进制形式文件。2. 库的分类静态库和动态库:本质区别是代码被载入的时刻不同2.1静态库程序编译时,会被复制到目标代码中,以.a结尾优点:程序运行时将不再需要该静态库,运行时无需加载库,运行速度更快,可移植性好。

2025-05-26 14:33:36 862

原创 进程IO之文件IO

posix中定义的一组用于输入输出的函数。

2025-05-25 09:30:55 659

原创 进程IO之 标准IO

重点:学会用函数,不要执着于函数实现底层逻辑标准I/O、文件I/O、库、linux的I/O模型进程之间通信:无名管道(pipe)、有名管道(fifo)、信号(signal)、共享内存(shared memory)消息队列(message queue)同步、互斥、条件变量。

2025-05-22 21:15:46 1082

原创 数据结构基础

数据结构:数据的逻辑结构以及存储操作数据:不是单纯数字,类似于一个集合的概念数据元素(节点):是数据基本单位,由若干数据项组成数据项:数据最小单位,描述数据元素的有用信息例:数据:所有图书的信息数据元素:某一本书的信息数据项:编号、书名、作者 ....

2025-05-15 19:12:23 944

原创 分文件编程与make工具

make:工程管理器,管理较多文件make工程管理器也就是个“自动编译管理器”,这里的“自动”是指它能构根据文件时间戳自动发现更新过的文件而减少编译的工作量(只编译改动过的文件),同时,它通过读入Makefile文件文件的内容来执行大量的编译工作。Makefile 或 makefile 是 make读取的唯一配置文件。2.格式makefile文件中命令格式:目标文件:依赖文件命令注意:命令前的是Tab键使用make工具的命令:makemake命令执行时,他一次只会。

2025-05-12 18:24:31 1009

原创 shell脚本编程

----> 获取的是上一条命令是否是正确的执行结果注意: 0:为真 非0:为假$$------->获取当前脚本的进程ID。

2025-05-09 19:45:31 721

原创 Linux命令(续)

了解不同操作系统的内核:查看系统版本命令:查看OS版本:lsb_release -a或者lsb_release -rcat/etc/issue --->查看存放OS版本信息的文件查看内核版本:uname -a 或者uname -rcat /proc/version ---->查看存放内核版本信息的文件。

2025-05-07 20:30:53 916

原创 C高级之存储类型、函数指针、指针函数

形参列表:指向函数的参数列表,只需保持与函数形参数据类型一致,因此可。本质是指针,指向的是函数,即指针中存储的是函数首地址。在Linux内核源码中,很多函数参数用的是函数指针。修饰全局变量,其作用域会被限制在。(对全局变量影响不大,主要是局部变量)的全局变量或函数(未被static修饰的)(对全局变量影响不大,主要是局部变量)修饰局部变量,其作用域保持不变,仍是。本质是函数,函数的返回值是地址(指针)同类型是指 返回值类型同,形参列表同。本质是数组,元素是同类型的函数指针。函数名:函数的首地址(函数入口)

2025-05-06 18:55:33 313

【软件开发工具】GDB调试工具常用指令详解:程序调试流程与核心功能介绍

内容概要:本文档详细介绍了GDB(GNU Debugger)这款强大的开源调试工具。GDB广泛应用于C、C++、Fortran等编程语言的调试,其主要功能包括设置断点(普通断点、观察断点、条件断点)、查看和修改变量值、回溯堆栈、内存监测、多线程调试以及远程调试。文档还阐述了调试步骤,首先需要在编译时添加-g参数以保留调试信息,然后启动GDB调试模式。此外,列举了常用的GDB命令,如break、run、continue、next、step、print、list等,并解释了info命令及其参数的使用方法,以帮助开发者获取程序执行状态的各种信息。 适合人群:适用于有一定编程基础,尤其是从事C、C++、Fortran等语言开发的程序员,无论是编程爱好者还是专业开发人员均可从中受益。 使用场景及目标:①在程序开发过程中遇到逻辑错误时,借助GDB进行调试;②通过设置不同类型断点(普通断点、观察断点、条件断点)精确定位问题;③利用info命令获取程序执行状态信息,如断点、变量、堆栈、寄存器、线程等;④进行内存监测,防止内存泄漏等问题;⑤支持多线程和远程调试,适应复杂环境下的程序调试需求。 阅读建议:由于GDB功能丰富且命令较多,在学习过程中建议结合实际代码进行实践操作,熟悉各命令的具体用法,逐步掌握GDB的调试技巧。同时,可以通过查阅文档中提供的示例加深理解。

2025-05-12

空空如也

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

TA关注的人

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