- 博客(50)
- 收藏
- 关注
原创 边缘计算网关项目(含上报进程、32&Modbus采集进程、设备搜索响应进程源码)
随着智能化发展,越来越多的设备需要联网,海量的数据需要汇总处理。传统的云计算压力太大,所以越来越多的任务由云端转到边缘端进行处理。边缘设备是部署在网络边缘侧的高性能嵌入式设备,一般会使用高性能的处理器,搭配Linux或者安卓等智能操作系统来实现。通过网络联接、协议转换等功能联接物理和数字世界,提供轻量化的联接管理、实时数据分析及应用管理功能。比较常见的就是智能家居中智能音箱(蓝牙网关)+路由器(wifi网关),工厂里的工业网关等。
2024-07-24 16:07:24 1648 4
原创 Qt入门(三):项目打包
以下是给项目设置图标的操作步骤:1.设计或下载一个图标图片(推荐分辨率64*64 128*128 256*256),转换成.ico格式。转换完成后,把.ico文件放置到中。免费图标可以在以下网站下载:2.在Qt Creator 中选中项目名称,鼠标右键,单击“添加新文件”3.在弹出的窗口中,按照下图所示操作。4.在弹出的窗口中输入配置文件名称(例如 icon_config.rc)点击下一步->完成,注意一定要输入.rc后缀!!!!!!添加完成后可以在项目管理界面看到如下文件5.
2024-07-14 12:16:20 2855
原创 Qt入门教程(一):Qt使用的基本知识
Qt是一个跨平台的C++应用程序开发框架。它提供了一套丰富的工具和类库,能够帮助开发者快速开发高质量的应用程序。Qt最初由挪威公司Trolltech开发,现在由Digia公司维护和支持。跨平台性:Qt可以在多个操作系统上运行,包括Windows、macOS、Linux等。这意味着开发者可以使用同一套代码开发应用程序,而不需要为不同的平台编写不同的代码。强大的图形界面设计能力:Qt提供了丰富的图形界面设计工具和类库,开发者可以轻松地创建漂亮的用户界面。
2024-07-02 20:15:16 1433 2
原创 学习CAN协议(二):使用CAN发送数据
本文主要讲述如何使用STM32 CubeMX配置和使用CAN发送一包数据。示例芯片:STM32F103C8T6
2024-07-01 08:36:33 2158
原创 从0开始C++(十):异常处理——throw、try-catch、标准异常体系与粗略捕获
异常处理机制可以帮助开发人员在程序发生异常时进行适当的处理,以确保程序可以正常执行或提供错误信息。C++的异常处理通过使用 try 、catch 和 throw 关键字来实现。 try 块用于包含可能引发异常的代码,而 catch 块用于捕获并处理异常。 throw 关键字用于引发异常。
2024-06-28 08:30:00 1831 1
原创 从0开始C++(九):强制类型转换
在C++11中不建议使用C风格的类型转换,因为可能会带来一些安全隐患,让程序的错误难以发现。C++11提供了一组适用于不同场景的强制类型转换函数:●static_cast(静态转换)●dynamic_cast(动态转换)●const_cast(常量转换)●reinterpret_cast(重解释转换)
2024-06-27 08:30:00 1088
原创 从0开始C++(十一):智能指针
智能指针有以下几个主要作用:自动释放内存:智能指针使用了RAII(资源获取即初始化)的原则,即在初始化时获取资源,在对象销毁时自动释放资源。这样可以确保在离开作用域时,分配的内存会被正确释放。简化内存管理:智能指针隐藏了手动释放内存的细节,减少了开发人员的工作量和出错的机会。开发人员无需记住所有动态分配内存的位置,也无需手动调用delete释放内存。避免悬空指针问题:悬空指针是指指向已释放内存的指针,使用悬空指针可能导致未定义行为或程序崩溃。智能指针通过在对象不再使用时自动释放内存,有效地避免了
2024-06-26 20:21:04 740
原创 从0开始C++(八):多态的实现
多态是面向对象编程中的一个重要概念,它指的是同一种行为或方法可以根据不同的对象来表现出不同的形态或结果。简单来说,多态就是同一个方法在不同的对象上产生不同的效果。在面向对象编程中,多态是通过继承和方法重写来实现的。当一个父类有多个子类时,可以使用父类的引用来指向任意一个子类的对象,然后通过调用相同的方法来实现不同的行为。这样可以极大地提高代码的灵活性和可扩展性。
2024-06-26 08:35:24 988
原创 从0开始C++(七):继承
继承是一种面向对象的编程特性,允许一个类(称为子类或派生类)从另一个类(基类或父类)继承属性和方法。通过继承,子类可以获得基类的成员变量和成员函数,并且可以添加自己的特定实现。C++中还存在虚继承的概念。虚继承用于解决多重继承中的菱形继承问题(即一个派生类继承了多个共同的基类)以及相关的二义性问题。虚继承可以通过在基类之间添加 virtual 关键字来实现。
2024-06-25 09:18:36 1039
原创 从0开始C++(六):模板与容器的使用详讲
简单介绍了常见函数模板和类模板的创建和使用方法,容器的概念和常见容器的使用方法。以及迭代器的介绍和使用方法数组 (array):固定大小的连续存储空间,可以快速访问元素。向量 (vector):动态数组,可以根据需要调整大小,支持快速随机访问和在尾部插入/删除元素。列表 (list):双向链表,可以在任意位置插入/删除元素,但随机访问效率较低。队列 (queue):先进先出 (FIFO) 的数据结
2024-06-24 19:58:03 1042 1
原创 驱动开发(六):应用层通过文件系统与内核层交互
用户空间操作设备文件:在应用层,应用程序可以通过文件系统接口(如open()、read()、write()和close()等函数)来操作设备文件。例如,应用程序可以使用open()函数打开设备文件,使用write()函数向设备发送命令,使用read()函数读取设备的状态,并使用close()函数关闭设备文件。这样,在应用程序通过文件系统接口操作设备文件时,相应的设备文件操作函数将会被内核调用,实现设备的处理和控制。应用程序通过操作设备文件,触发设备文件操作函数的调用,从而实现与内核驱动的通信和控制。
2024-06-24 08:37:55 1556 1
原创 从0开始C++(五):友元函数&运算符重载
C++中的友元函数是一种特殊的函数,它可以访问和操作类的私有成员和保护成员。友元函数可以在类的内部或外部声明和定义,但在其声明和定义中需要使用关键字friend来标识。友元函数可以是全局函数,也可以是其他类的成员函数。下面是友元函数的一些重要特点和用法:友元函数可以访问和操作类的私有成员和保护成员,这使得函数可以直接访问类的私有数据,而无需通过类的公有接口进行访问。友元函数可以在类的内部或外部声明和定义。在类的内部声明友元函数时,使用friend关键字来标识函数为友元函数。
2024-06-21 09:02:38 1191
原创 从0开始C++(三):构造函数与析构函数详解
构造函数析构函数创建对象时手动调用当对象销毁时,自动调用函数名称是类名函数名称是~类名构造函数可以重载析构函数没有参数,不能重载用于创建对象时并初始化用于销毁对象时释放资源有返回值但是不写,返回值是新创建的对象没有返回值。
2024-06-20 09:09:59 1320
原创 从0开始C++(四):作用域限定符、this指针、static与const关键字详解
2、引用嵌套命名空间中的变量或函数:如果在命名空间的内部定义了与外部命名空间同名的变量或函数,可以使用作用域解析运算符来引用外部命名空间中的变量或函数。const可以应用于变量、函数参数、函数返回值等。3、引用类的静态成员:如果在类的内部定义了静态成员变量或静态成员函数,可以使用类名加上作用域解析运算符来引用类的静态成员。使用this指针可以明确指示当前对象的地址,可以解决对象之间的命名冲突问题,同时也方便了对对象的成员变量和成员函数的操作。它可以在类的成员函数中使用,用于引用调用该成员函数的对象的地址。
2024-06-20 08:38:53 1644
原创 从0开始C++(一):从C到C++
C++是一种通用的高级编程语言,它是从C语言发展而来的。C++在C语言的基础上增加了许多新的特性和功能,使得它成为一种更强大、更灵活的编程语言。C++具有面向对象的编程能力,可以使用类和对象来组织和管理代码。它支持封装、继承和多态等面向对象编程的特性,可以更好地组织和管理大型项目的代码。C++也可以进行底层系统编程,它提供了许多与硬件交互和操作系统相关的功能,例如内存管理、指针操作和文件读写等。
2024-06-18 11:03:08 1270
原创 驱动开发(应用):设计一个社区饮水机控制系统
功能简介:1、检测终端输入数据 (有包头包尾的数据处理功能)2、本地保存用户数据(保存ID和消费金额)。3、驱动层上电红灯闪烁,当检测到应用层安装以后绿灯常亮。4、用户刷卡或扫码前(接收到应用层数据前)按键无效,提示“请先刷卡”5、接收到金额数据后,判断按键(开始、停止)6、开始灌水亮红灯,售水结束亮绿灯并且蜂鸣器响一段时间表示水停。7、无操作检测,按下停止后10s内没有其他操作则售水结束,退还剩余金额。
2024-06-17 08:38:43 1035 2
原创 驱动开发(五):Linux内核定时器
定时的本质是计时,计时的本质是计数。LInux内核定时器是一种基于未来时间点的计时方式,以当前时刻来启动的时间点,以未来的某一时刻为终止点。因此,我们要实现定时需要两个值,一个是当前时刻值(起始时间),一个是目标时间值(触发中断时间)
2024-06-16 09:00:00 2613 3
原创 驱动开发(四):Linux内核中断
Linux内核中断是一种控制传递机制,用于处理硬件设备的事件和异常。当硬件设备发生特定事件时,例如数据传输完成、错误发生或设备准备就绪,它会向CPU发送中断信号,以引起CPU的注意。Linux内核中断分为两种类型:外部中断和内部中断。外部中断由外部硬件设备触发,如键盘按键、鼠标点击或网络数据包到达。内部中断由CPU内部产生,如除法错误、缺页异常或系统调用。中断处理程序是用来响应和处理中断的函数。当中断发生时,CPU会暂时停止当前正在执行的任务,并跳转到相应的中断处理程序执行。
2024-06-15 07:30:00 961
原创 驱动开发(三):内核层控制硬件层
需要注意的是,在操作寄存器时,要确保对寄存器的访问是合法的,遵循芯片厂商的规定,避免对未定义或者只读的寄存器进行写操作。此外,还要考虑并发访问的问题,如果多个驱动同时操作同一个寄存器,可能会引发竞争条件或者数据不一致的问题,需要进行同步或者互斥操作。读取寄存器的值:使用编程语言提供的位操作或者寄存器操作函数,读取寄存器的当前值。:使用编程语言提供的位操作或者寄存器操作函数,将需要设置的值写入到寄存器中。控制rgb_led灯的寄存器是物理地址,但是在Linux内核启动之后,在使用地址的时候,
2024-06-14 07:30:00 1286
原创 驱动开发(二):创建字符设备驱动
处理设备的控制和管理:字符设备驱动可以实现设备的控制和管理功能,包括设备的初始化、中断处理、传输数据的协议等。提供设备的访问权限和保护:字符设备驱动可以限制对设备的访问权限,并提供访问控制和保护机制。总而言之,字符设备驱动的作用是为用户空间的应用程序提供对设备的访问接口,并实现设备的读写、控制和管理功能,从而实现设备和应用程序之间的数据交互。驱动开发中创建字符设备驱动的目的是为了提供对字符设备的访问接口,使用户空间的应用程序能够通过文件操作系统调用来与字符设备进行交互。次设备号:大类中的小类。
2024-06-13 14:31:04 1556 1
原创 驱动开发(一):驱动代码的基本框架
本篇文章简单介绍了驱动代码的作用,和驱动代码的框架,以及一段示例代码。驱动程序的功能是使操作系统能够与硬件设备进行有效的通信和控制,以便实现各种设备操作和管理功能,并提供系统性能优化和故障排除等服务。
2024-06-11 19:49:52 1927 6
原创 学习CAN协议(一):CAN协议简介
can协议是一种用于控制网络的通信协议。它是一种基于广播的多主机总线网络协议,常用于工业自动化和控制领域。can协议具有高可靠性、实时性强和抗干扰能力强的特点,被广泛应用于汽车、机械、航空等领域。can协议采用了先进的冲突检测和错误检测机制,可以在总线上同时存在多个节点进行通信。它的数据帧结构简单且有效,由标识符、控制位、数据字段和错误检测字段组成。can协议使用了多种数据传输速率,最常见的有经典can(1 Mbps)和can-FD(8 Mbps)。
2024-06-09 13:17:16 1811
原创 系统移植 (以将Linux系统移植到S5P6818开发板为例)
将操作系统移植到对应的硬件平台在众多嵌入式操作系统中,Linux目前发展最快、应用最为广泛。性能优良、源码开放的Linux具有体积小、内核可裁减、网络功能完善、可移植性强等诸多优点,非常适合作为嵌入式操作系统。
2024-06-07 10:30:53 1471
原创 ARM的异常处理
当前程序被异常打断,切换到异常处理程序里,异常处理完之后,返回当前被打断模式继续执行,因此必须要保存当前执行指令的下一条指令的地址到LR_excep(异常模式下LR,并不存在LR_excep寄存器,为方便读者理解加上_excep,以下道理相同),由于异常模式不同以及ARM内核采用流水线技术,异常处理程序里要根据异常模式计算返回地址。当前程序的执行状态是保存在CPSR里面的,异常发生时,要保存当前的CPSR里的执行状态到异常模式里的SPSR里,将来异常返回时,恢复回CPSR,恢复执行状态。
2024-06-06 08:00:00 1188
原创 ARM的工作模式
Supervisor(SVC) : 当复位或软中断指令执行时将会进入这种模式。IRQ : 当一个低优先级(normal) 中断产生时将会进入这种模式。FIQ : 当一个高优先级(fast) 中断产生时将会进入这种模式。Monitor : 是为了安全而扩展出的用于执行安全监控代码的模式。System : 使用和User模式相同寄存器集的特权模式。User : 非特权模式,大部分任务执行在这种模式。Abort : 当指令存取异常时将会进入这种模式。Undef : 当执行未定义指令时会进入这种模式。
2024-06-05 19:02:20 1791 2
原创 Ubuntu18.04 文件管理器无法打开的解决方法
问题:打开Ubuntu虚拟机发现文件管理器无法打开,一直在转圈圈。按照解决措施一步步运行,完成后即可重启文件管理器。
2024-06-05 14:10:13 1018
原创 【通信协议】一文搞懂I2C(IIC)
I2C分为软件I2C和硬件I2C软件I2C:软件I2C通信指的是用单片机的两个I/O端口模拟出来的I2C,用软件控制管脚状态以模拟I2C通信波形,软件模拟寄存器的工作方式硬件I2C:一块硬件电路,硬件I2C对应芯片上的外设,有相应的I2C驱动电路,其所使用的I2C管脚也是专用的,硬件I2C直接调用内部寄存器进行配置。硬件I2C的效率要远高于软件的,而软件I2C由于不受管脚限制,接口比较灵活。
2024-06-04 14:35:29 8173 7
原创 【STM32】一文看懂中断系统
中断的主要目的是提高计算机系统的效率和响应性能。它允许计算机在处理其他任务时及时响应外部事件的发生,如接收用户输入、处理实时数据等。通过中断,计算机可以灵活地分配和管理任务的处理顺序,提高系统的并发性和吞吐量。
2024-06-01 08:00:00 1304
原创 SPI协议
SPI (Serial Peripheral Interface)是一种同步的串行通信接口协议,用于连接微控制器或其他外围设备。SPI协议使用四根线(时钟线、数据线、数据输入线、数据输出线)进行通信。其中,时钟线由主设备控制,数据线由主设备发送数据,数据输入线由从设备发送数据,数据输出线由从设备接收数据。SPI协议适用于需要高速传输数据的应用,如存储器芯片、传感器、显示屏等。SPI协议具有简单、低成本、高可靠性等优点,但是由于没有标准化的物理接口,所以不同设备的SPI接口可能有差异。
2024-05-31 09:00:00 460
原创 【gdb教程】gdb调试工具使用方法及常用命令
GDB是GNU调试器(GNU Debugger)的缩写,是一个功能强大的命令行调试工具。它通常用于调试程序的运行过程,帮助程序员追踪和修复代码中的错误。GDB可以用于以下目的找到程序中的错误:GDB允许程序员在程序中设置断点,当程序执行到断点时,可以查看当前的变量值、堆栈信息等,帮助发现代码中的错误。理解程序的运行过程:GDB允许程序员逐步执行程序,并在每个步骤中查看变量值和堆栈信息,帮助理解程序的运行过程。追踪程序崩溃的原因。
2024-05-30 13:03:49 517
原创 使用CUBE配置FreeRTOS
1、更新安装freertos插件2、配置FreeRTOS如果点开没有X-CUBE_FREERTOS,关掉刷新一下就好了选择不支持TZ、内存管理方式选哪个都可以,
2024-05-30 07:45:00 525
原创 串口调试助手中文乱码 解决方案
2、查看.c文件的编码格式方法:找到出问题的.c文件,右击选择在记事本中编辑,右下角可以查看编码格式,如果编码格式不一样,点击文件->另存为->右下角选择编码格式->保存->覆盖原文件。数据位、停止位或校验位设置错误:除了波特率外,串口通信还需要保证发送和接收的设备设置相同的数据位、停止位和校验位。请确保这些设置一致。电平不匹配:串口通信需要发送和接收的设备使用相同的电平标准,例如TTL电平、RS232电平等。数据帧错误:在发送和接收数据时,数据帧的格式需要一致,包括起始位、数据位、校验位和停止位。
2024-05-29 11:13:45 5385
原创 配置阿里云物联网平台 保姆级教程
联网方式首选WiFi如果需要别的协议就选对应的,数据格式最常用的就是JSON,然后校验级别默认弱校验,认证方式默认设备密钥,产品描述可以自己添加对该产品的描述。然后节点类型:普通设备(如灯开关,温湿度,二氧化碳浓度等等显示类和控制类的)都是选择直连设备,网关设备就选网关设备,看后期具体需求。(8)添加设备,两种方法,一可以在创建完产品之后,在当前界面点击前往添加,也可以在设备管理->设备->添加设备。(6)创建好之后点进去,左侧找到设备管理,点开,再点击产品,点击创建产品。(1)找到阿里云平台官网,
2024-05-28 20:22:35 2819 1
原创 单片机的内存映射和重映射
单片机的内存映射是指将外部设备或外部存储器映射到单片机的地址空间中的一段连续的内存区域,以便单片机可以通过读写内存的方式来访问这些外部设备或外部存储器。另外,还有一部分地址被映射为外部存储器的地址。实现外设控制和数据交换:将外部设备,如各种传感器、显示器、键盘等,映射到单片机的地址空间,可以通过读写特定地址的方式来与这些外部设备进行通信和控制,实现数据的输入和输出。简化编程和操作:通过内存映射,开发人员可以使用统一的读写内存的方式来访问外部设备或外部存储器,无需额外的编程和操作步骤,简化了开发工作。
2024-05-28 07:00:00 1334
原创 SRAM和Flash的区别
SRAM:全称为Static Random Access Memory,即静态随机存取存储器,是一种常见的计算机内存类型。SRAM电路通常由存储矩阵、地址译码器和读/写控制电路三部分组成,存储矩阵由很多行和列存储单元组成,每一个存储单元中都能存储一个二值数据;地址译码器一般分成行地址译码器和列地址译码器,前者通过将地址代码的若干位译出行存储单元,后者通过地址代码的剩余位译出列存储单元,由此选定某一行某一列的存储单元,再经过读写控制单元控制在选出的存储单元进行写或读操作。
2024-05-27 20:16:43 1186
原创 【练手项目】基于STM32的智能空调系统
LCD显示屏:开机显示开启界面,设备自检成功后显示温湿度,风机开关情况,制冷片开关情况,加热片开关情况。LED:三个灯分别模拟风机、制冷片,加热片。灯亮表示开,灯灭表示关)串口:数据接收及下发数据控制。使用定时器中断实现,每0.5秒读取一次上位机命令,每两秒发送设备状态信息(温湿度值,风机状态,制冷片状态,加热片状态)到上位机。低温加热:当环境温度低于设置的阈值时,加热片启动,高于一个值时加热片关闭。高温降温:当环境温度高于设置的阈值时,制冷片启动。
2024-05-27 18:30:00 364
原创 【STM32】常用通信协议
串口通信又分为不同的方式,常见的有UART、RS232、RS485、RS422。长距离布线会有信号衰减,而且引入噪声和干扰的可能性更大,在线缆A和B上的表现就是电压幅度的变化,但是,采用差分线的好处就是,差值相减就会忽略掉干扰依旧能输出正常的信号,把这种差分接收器忽略两条信号线上相同电压的能力称为。RS-485不需要使用特定的总线电压,只看最小差分电压,在较长的电缆长度上,接收器接收到的电压可能会降低到+/- 200 mV,这对于RS-485仍然是完全可以接受的,这也是RS-485的优点之一。
2024-05-25 19:03:45 918
原创 【STM32】串口不定长接收 保姆级教程
串口空闲中断是指当串口接收缓冲区中没有数据时,串口控制器产生的一种中断信号。在串口通信中,当接收到一个完整的数据帧后,通常会有一个停止位,表示数据的传输结束。当接收缓冲区中没有数据时,串口控制器会检测到停止位的连续空闲状态,并产生空闲中断信号。使用串口空闲中断可以消除轮训接收缓冲区的需要,提高系统的性能和效率。注意:(1)空闲中断的允许需要手动解除中断屏蔽(2)空闲中断必须手动清零,不然中断会一直置位,系统会不断进入中断处理函数。
2024-05-25 13:50:16 3717
MQTT.fx 编写的MQTT客户端工具
2024-05-28
基于STM32的除湿器 涉及内容:GPIO、串口通信、 定时器、ADC、 LCD显示屏、 DHT11等
2024-05-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人