- 博客(1931)
- 资源 (10)
- 收藏
- 关注
原创 嵌入式Linux与边缘智能开发文章汇总(共38篇,2024/12/01更新)
本专栏将专注于嵌入式Linux内核驱动开发、用户态设备驱动、嵌入式系统移植与剪裁,嵌入式图形、嵌入式应用开发,嵌入式边缘计算,嵌入式边缘智能等等相关。
2024-12-01 14:38:20 25
原创 国产单片机开发系列文章汇总(共583篇2024/12/01更新)
本文将对常见的国产系列单片机开发相关文章进行汇总,文章将按单片机的指令集进行分类汇总,持续更新。
2024-11-02 10:49:45 132
原创 数字图像处理与Python语言实现系列文章汇总(共115篇)
数字图像处理与Python语言实现专栏将使用Python语言实现经典数字图像处理领域的经典图像处理算法,为深度学习图像处理打下基础。专栏将包含:图像颜色空间转换、图像几何变换、图像频域变换、图像降噪、图像增强、图像形态学处理、图像边缘检测、图像特征提取、图像滤波、图像分割、图像重建、高性能图像处理等等。
2023-03-19 10:36:30 1999 4
原创 物联网全栈开发实战系列文章汇总(共1194篇,持续更新-2024.12.01)
物联网全栈开发实战专栏将涵盖各类单片机、嵌入式设备及驱动开发实例。从仿真到硬件,从单个实例到综合实例,从单个设备到多个设备的各种方式通信、联网等等。以实例为线索,从硬件到用户终端,掌握物联网全栈开发基础。.................................
2022-04-27 22:55:29 8856 6
原创 【STM32 Modbus编程】-作为主设备写单个线圈和寄存器
本文将实现STM32作为ModBus主设备,将数据写入从设备的单个线圈和保持寄存器。
2024-12-08 08:49:02 155
原创 【RK3588 Linux 5.x 内核编程】-使用EXPORT_SYMBOL模块间代码共享
当在同一个设备中编写多个驱动程序(模块)时,您可能希望将一个模块的某些功能用于另一个模块。 如何做到这一点? 如果我们只使用 `extern` 那么在内核代码中它没有作用。在这篇文章中,将详细介绍如何使用EXPORT_SYMBOL进行模块间代码共享。
2024-12-08 08:43:14 278
原创 【RK3588 Linux 5.x 内核编程】-内核线程与Completion
如果有一个或多个线程必须等待某些内核活动达到某个点或特定状态,Linux内核的Completion机制可以为该问题提供无竞争的解决方案。 从语义上讲,它们有点像 pthread_barrier() 并且具有相似的用例。本文将详细介绍在Linux内核中如何使用Completion。
2024-12-06 21:06:59 454
原创 【STM32 Modbus编程】-作为主设备读取线圈和输入
本文将在前面文章的基础上,实现主设备通过ModBus协议对从设备的线圈和输入数据读取。
2024-12-04 10:50:09 144
原创 【RK3588 Linux 5.x 内核编程】-内核高分辨率定时器
在前面的文章中,我们知道了如果在Linux内核中使用定时器。本文将详细介绍Linux内核中另外一种定时器:高分辨率定时器(High Resolution Timer (HRT/hrtimer))。
2024-12-03 08:22:51 50
原创 【STM32 Modbus编程】-作为主设备读取保持/输入寄存器
在本文中,我们将专注于如何读取保持寄存器和输入寄存器。ModBus是一种协议,可以与任何通信标准一起使用。您可以将 modbus 协议与 RS232、RS485 或任何其他标准一起使用。虽然它与 RS485 一起广泛使用,因此在文章中,将使用 RS485。
2024-12-02 19:00:51 193 1
原创 【RK3588 Linux 5.x 内核编程】-内核定时器
Linux内核提供了两种定时器,一种是通用定时器(低精度),另外一种是高精度定时器。本文将详细介绍如何在设备驱动程序中使用通用定时器。
2024-12-01 14:33:12 482
原创 【RK3588 Linux 5.x 内核编程】-发送信号到用户空间
信号是一种发送简单消息的方式,用于通知特定事件的进程或线程,是最古老的进程间通信方法之一。本文将介绍如何从Linux内核中断向用户空间发送信号。本文的实例分为两部分,一部分是内核驱动程序,另外一部分是用户空间应用程序。内核驱动程序接收到硬件中断后,以信号形式通知用户空间应用程序
2024-11-29 14:28:47 435
原创 Python编程实例-实现环形缓冲(Ring Buffer)
环形缓冲区(Circular Buffer),又称循环缓冲区或环形队列,是一种固定大小的先进先出(FIFO)数据结构。它广泛应用于实时系统、音频处理、网络通信等需要连续数据处理的场景中。环形缓冲区的主要特点是当缓冲区满时,新的数据会覆盖最早的数据,从而保证数据流的连续性和稳定性。它有如下特点和优势
2024-11-28 22:47:43 62
原创 【RK3588 Linux 5.x 内核编程】-内核线程与读写自旋锁
自旋锁是一个非常简单的单持锁。 如果进程试图获取自旋锁但它不可用,则该进程将继续尝试(自旋)直到它可以获取锁。 Read Write 自旋锁也做同样的事情,但它有单独的锁用于读取和写入操作。自旋锁与读写自旋锁在操作中相似,那么在什么样场景中需要使用读写自旋锁呢?
2024-11-27 17:02:06 265
原创 【杂谈】-Linux中的GUI与图形栈
在本文中,我们将探讨基于Linux操作系统中使用的图形栈。我们将了解使图形应用程序成为可能的不同技术,以及它们是如何相互交互的。我们将从基础开始,逐步引导至高级的GUI工具包。
2024-11-26 10:18:10 991
原创 【RK3588 Linux 5.x 内核编程】-内核线程与自旋锁
在前面的文章中,我们了解了在Linux内核线程中如何使用Mutex。Spinlock(自旋锁)与Mutex类似。 两者都用于保护共享资源不被两个或多个进程同时修改。本文将详细介绍,如何在Linux内核线程中使用Spinlock。
2024-11-26 08:21:41 206
原创 【国产MCU】-GD32F470-串行外设接口(SPI)
串行外设接口(Serial Peripheral Interface,缩写为 SPI)提供了基于 SPI协议的数据发送和接收功能,可以工作于主机或从机模式。 SPI接口支持具有硬件 CRC计算和校验的全双工和单工模式。 SPI5还支持 SPI四 线 主机模式。
2024-11-24 15:45:26 439
原创 【RK3588 Linux 5.x 内核编程】-内核线程与Mutex
在前面的文章中,介绍了如何Linux内核中的线程,但是在实际的使用过程中,可能面临线程间的竞争问题,并且需要解决线程间的竞争导致的死锁、线程饥饿等问题。为了避免竞争条件,Linux内核提供了很多方法,比如 Semaphore、Spinlock 和 Mutex。本文将详细介绍在Linux内核线程中如何使用Mutex。
2024-11-23 08:18:19 267
原创 【国产MCU系列】-GD32F470-内部集成电路总线接口(I2C)
I2C总线是PHILIPS公司推出的一种双线式半双工串行总线,是具备多主机系统所需的总线裁决和高低速器件同步功能的性能串行总线。用于连接微控制器及外围设备。I2C总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。
2024-11-21 12:02:48 222
原创 【RK3588 Linux 5.x 内核编程】-内核中断与Tasklet
在前面的文章中,对Linux的内核中断做了详细的介绍。我们知道,在Linux内核的中断机制中,为了快速响应设备中断,Linux内核将中断分为上半部分(Top Half)和下半部分(Bottom Half)。上半部分将在收到中断后立即运行,并仅执行时间关键的工作,而下半部分用于处理数据,让上半部分处理新传入的中断。
2024-11-21 09:38:31 181
原创 【国产MCU系列】-GD32F470-高级定时器
GD32F4系列单片机有五种定时器:高级定时器(定时器0/7),通用定时器L0(定时器1~4),通用定时器L1(定时器8/11),通用定时器L2(定时器9/10/12/13)以及基本定时器(定时器5/6)。
2024-11-20 09:29:22 260
原创 【RK3588 Linux 5.x 内核编程】-内核线程
线程是并发处理中使用的编程抽象。 内核线程是在内核中实现后台任务的一种方式。 后台任务可以忙于处理异步事件,也可以处于休眠状态,等待事件发生。 内核线程类似于用户进程,只是它们位于内核空间并可以访问内核函数和数据结构。 与用户进程一样,内核线程似乎由于抢占式调度而独占处理器。
2024-11-20 09:21:14 175
原创 【杂谈】-了解控制器局域网络(CAN)协议
控制器局域网络(CAN)协议是一种在车辆中嵌入的电子设备之间进行通信的方法,例如引擎管理系统、主动悬挂系统、中央锁、空调、气囊等。这一概念由罗伯特·博世有限公司在1983年提出,旨在提高汽车的质量和安全性,增强汽车的可靠性和燃油效率。
2024-11-17 08:06:25 890
原创 【国产MCU系列】-GD32F470-通用同步异步收发器(USART)
在GD32F4单片机中,USART不仅支持标准的异步收发模式,还实现了一些其他类型的串行数据交换模式,如红外编码规范, SIR,智能卡协议 LIN,以及同步单双工模式。它还支持多处理器通信和 Modem流控操作( CTS/RTS 。数据帧支持从 LSB或者 MSB开始传输。数据位的极性和 TX/RX引脚都可以灵活配置。所有USART都支持DMA功能,以实现高速率的数据通信。
2024-11-17 07:59:34 413
原创 【RK3588 Linux 5.x 内核编程】-内核中的链表(Linked List)及使用
链表是一种非常重要的数据结构,它允许大量存储和高效地操作数据。 大部分内核代码都是在这个数据结构的帮助下编写的。 所以在Linux内核中,不需要自己实现Linked List,也不需要使用第三方库。 它有一个内置的链表,即双向链表。
2024-11-16 06:30:29 215
原创 【国产MCU系列】-GD32F470-直接存储器访问控制器(DMA)
直接内存访问(DMA)控制器是一个专门的可编程硬件单元,它允许MCU外设不经过Cortex-M核心的干预直接访问内部存储器。CPU从数据传输产生的开销中完全解放出来(除了与DMA配置相关的开销),并且可以并行执行其他活动¹。DMA设计为双向工作(即,它允许从内存到外设的数据传送,反之亦然),GD32F4微控制器都提供两个独立的DMA。
2024-11-15 09:17:18 356
原创 【RK3588 Linux 5.x 内核编程】-内核中断与工作队列(Work Queue)
在前面的文章中,介绍了Linux内核的中断及中断处理机制。我们知道,中断不适合处理长时间任务,Linux的中断处理机制中上半部(Top Half)和下半部(Bottom Half)巧妙在将中断响应和中断任务处理分离,即,在上半部中,快速响应响应,仅执行时间关键的工作,例如确认收到中断或重置硬件。然后将中断处理任务交由下半部处理
2024-11-15 09:12:19 454
原创 【国产MCU系列】-GD32F470-GPIO输入与外部中断
EXTI(中断/事件控制器)包括23个相互独立的边沿检测电路并且能够向处理器内核产生中断请求或唤醒事件。EXTI有三种触发类型:上升沿触发、下降沿触发和任意沿触发。EXTI中的每一个边沿检测电路都可以独立配置和屏蔽。
2024-11-14 15:40:25 195
原创 【RK3588 Linux 5.x 内核编程】-内核中断
中断是由来自硬件设备的电子信号产生的,并被引导到中断控制器(一个简单的芯片,将多条中断线路复用到处理器的一条线路)上的输入引脚。 这些是内核将完成的过程。
2024-11-14 15:37:17 653
原创 【Python编程实例】-Python中的__slots__详解
在Python编程中,每个类实例默认拥有一个名为`__dict__`的属性,用于存储实例变量。然而,在某些情况下,为了优化内存使用和提高性能,我们可以使用`__slots__`来限制实例属性的集合。本文将详细介绍`__slots__`的概念、用法及其优缺点,并提供一些实际示例和常见问题解答。
2024-11-09 08:59:56 42
原创 【国产MCU系列】-GD32F470通用GPIO操作
GD32F4最多可支持140个通用 I/O引脚( GPIO),分别为 PA0 ~ PA15 PB0 ~ PB15 PC0 ~ PC15 PD0 ~ PD15 PE0 ~ PE15 PF0 ~ PF15 PG0 ~ PG15 PH0 ~ PH15和 PI0 ~ PI11,各片上设备用其来实现逻辑输入 /输出功能。每个 GPIO端口有相关的控制和配置寄存器以满足特定应用的需求。 GPIO引脚上的外部中断在中断 /事件控制器( EXTI)中有相关的控制和配置寄存器。
2024-11-09 08:30:08 469
原创 【杂谈】-Linux系统编程涉及的一些相关概念
系统软件位于底层,直接与内核和核心系统库接口相连。系统软件包括你的外壳程序(shell)和文本编辑器、编译器和调试器、核心工具以及系统守护进程。这些组件完全基于内核和C库的系统软件。许多其他软件(如高级GUI应用程序)主要存在于更高层次,偶尔才会深入到低层。
2024-11-08 08:40:18 639
原创 【国产MCU系列】-深入理解GD32F470的位带(Bit-Banding)操作
为了减少“读 -改 -写 ”操作的次数 Cortex®-M4处理器提供了一个可以执行单原子比特操作的位带功能 。存储器映射包含了两个支持位带操作的区域。 其中一个是 SRAM区的最低 1MB范围,第二个是片内外设区的最低 1MB范围 。 这两个区域中的地址除了普通应用外 还有自己的 “位带别名区 ”。 位带别名区把每个比特扩展成一个 32位的字 。 当用户访问位带别名区时 就可以达到访问原始比特的目的。
2024-11-08 07:24:28 184
原创 【RK3588 Linux 5.x 内核编程】-GPIO输入(非中断方式)
在前面的文章中,详细介绍了Linux的GPIO内核子系统及其使驱动开发方式并实现了LED点亮。本文在该基础上,实现GPIO按键输入与LED控制。
2024-11-07 07:26:53 214
原创 【Python编程实例】-深入理解Python线程安全
Python 的线程允许你并行运行代码的某些部分,从而使代码更高效。然而,如果你在不了解线程安全的情况下引入线程,可能会遇到竞争条件等问题。你可以通过使用锁、信号量、事件、条件和屏障等工具来解决这些问题。
2024-11-06 09:48:55 253
原创 【RK3588 Linux 5.x 内核编程】-GPIO设备驱动与点亮LED
GPIO 是嵌入式 Linux 系统中最常用的外设之一。从 4.8 版本开始,Linux 内核引入了一个新的基于字符设备的用户空间 API,用于管理和控制 GPIO(通用输入/输出)。本文介绍了新的GPIO接口API基础知识以及一个简单的教程/示例来演示如何使用新的 API 来控制 GPIO。
2024-11-05 18:09:56 137
原创 【国产MCU系列】-GD32F4内存映射
ARM处理器是指由多家硅制造商生产的CPU的基本构建块(因此称为核心)的多个RISC架构家族和几个完整核心家族。在处理基于ARM的处理器时,可能会产生很多混淆,因为有许多不同的ARM架构修订版(如ARMv6、ATMv6-M、ARMv7-M、ARMv7-A、ARMv8-M等)和许多核心架构,这些架构又是基于某个ARM架构修订版的。为了清晰起见,例如,基于Cortex-M4核心的处理器是在ARMv7-M架构上设计的。
2024-11-04 16:57:33 1098
Blynk服务器和客户端 App
2023-12-09
ArduinoLibraryforProteusV2.0.zip
2021-10-18
OpenCV4.x图像处理实例-社交距离检测Caffe模型
2020-11-17
Mastering Go Web Services
2017-11-07
Pro Processing for Images and Computer Vision with OpenCV
2017-11-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人