自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 项目-Holocubic透明桌面站

电路设计与焊接、外壳3D建模、软件开发从零开始,最终完成了一个Holocubic桌面站。实现了获取天气、时间的功能,且内部实现了多个APP,包括定时、图库、电脑投影、系统设置。涉及Altium Designer电路设计、立创EDA、fusion360外壳设计、STM32、DMP库、LVGL图形库等。项目灵感来源于B站up主稚晖君。本项目开源,github开源链接:https://github.com/lihuayao1/STM32-Holocubic

2022-10-22 14:08:27 10465 15

原创 嵌入式AI---如何用C++实现YOLO的NMS(非极大值抑制)算法

YOLO系列的目标检测算法在边缘部署方面展现出了强大的性能和广泛的应用潜力。大部分业务场景是利用PyTorch在服务器端完成检测模型的训练,得到相应的.pt、.onnx检测模型文件。随后,综合考量成本、模型计算量完成边缘计算设备选型。最后,根据不同的硬件设备,将.pt或onnx模型文件转化成适配对应硬件平台的模型文件再进行推理(如瑞芯微的rknn格式、昇腾的om格式)。目前网上大多数资料用的是YOLOV5官方源码提供的Python推理版本,然而实际业务场景往往需要基于C++在板子上完成模型推理。

2024-09-13 16:28:11 1528

原创 Linux应用开发:浅谈为什么条件变量要和互斥锁配合使用

linux系统下的线程同步组件有很多,例如互斥锁、自旋锁、信号量、条件变量等等。使用条件变量进行线程同步时我们注意到,条件变量等待函数的调用方式为:pthread_cond_wait(&cond, &mutex)。等待函数的参数中附带了一个互斥锁,那么这个互斥锁的作用是什么呢?互斥锁在多线程编程场景中比较常用,尤其是在多个线程需要同时访问同一变量时。它的主要作用是确保在任何给定时刻,仅有一个线程能够访问该共享变量,从而避免数据竞争和不一致性问题。当线程尝试访问共享资源前,它必须先请求获得互斥锁。

2024-09-12 17:31:34 644 2

原创 IIC死锁的产生原因和解决办法

本文简单介绍了关于I2C在实际使用中死锁产生的原因、 导致的后果以及如何解决死锁问题。

2024-09-11 11:04:40 690

原创 RTOS二值信号量和互斥量的区别

信号量是一种高效的机制,用于实现任务间的通信与同步,以及确保对临界资源的互斥访问。它常被用于协调一组相互竞争的任务,以安全地访问共享资源。在多任务操作系统中,这种机制对于维护任务间的同步和防止资源冲突至关重要。二值信号量与互斥信号量(通常简称为互斥量互斥量内置了优先级继承机制,这一特性有助于防止优先级反转问题,确保系统运行的稳定性和可预测性。相比之下,二值信号量则不直接支持优先级继承,因此它更多地被用于实现任务间的同步需求,包括任务间的直接同步以及任务与中断之间的同步。而互斥量更偏向应用于临界资源的访问。

2024-09-07 22:11:46 742

原创 RTOS的移植过程

在实际的项目开发中,裸机系统通常无法充分利用CPU资源,导致项目实时性较差。例如,裸机系统通常通过无限循环和轮询的方式来处理任务和中断,这可能导致CPU在等待某些事件时处于空闲状态。此外,随着系统功能的增加和复杂度的提高,裸机系统的扩展性较差,难以适应新的需求和变化。针对上述问题,RTOS通过任务调度和优先级管理,有效地利用了CPU的资源。此外,RTOS提供了良好的扩展性和可配置性,可以根据实际需求进行灵活调整和扩展。

2024-09-07 16:55:42 913

原创 Linux应用开发:如何用C语言手写一个线程池

在实际的业务开发中,我们往往需要引入多线程编程,例如socket通信,服务器端需要根据连接请求单独创建一个新的线程与客户端进行通信。然而,每当需要执行一个任务时立即创建一个新线程的做法虽然简单快捷,但面对大量并发且执行时间短暂的任务时,这种策略会显著降低系统效率。原因在于,频繁地创建和销毁线程会占用大量的系统资源,增加了不必要的开销。针对这一问题,我们思考是否存在一种机制,能让线程在完成一个任务后不被销毁,而是能够继续被复用执行其他任务?答案是肯定的,这种机制就是线程池。

2024-09-07 13:26:36 525

原创 串级PID:为什么外环的输出是内环的输入?

经典PID:上图是一种最典型的反馈系统,那么其中的控制器是怎么改变被控对象的呢?其实真实的流程图应当入下图所示:其实真正改变被控对象的是执行器,典型的执行器就是电机,电机的驱动器,例如电调,通常都是用PWM信号就可以控制。最简单的思路其实就是直接用误差来产生PWM。这个很容易理解,当我们误差很大时,我们自然就希望执行器能输出最大值尽快缩小这个误差。当我们误差很小时,自然希望根据较小的误差降低输出,避免调整过度。但是误差还有其他信息我们可以用,例如。

2024-09-07 00:20:14 969

原创 RTOS的内存管理机制

在嵌入式开发中,内存分配策略的选择应紧密依据所设计系统的特定需求与特性。对于那些对可靠性有着极高要求的系统,推荐采用静态内存分配算法,以确保系统的稳定运行;而对于一般的业务系统推荐采用动态内存分配,从而提升内存使用的灵活性与效率。静态分配的优势在于能够确保设备的稳定运行,但相应地,它要求开发者对内存使用有严格的规划,以避免超出预设的内存上限,这可能导致内存使用效率相对较低。相反,动态内存分配则提供了更高的灵活性,但也需要开发者注意内存泄漏与碎片化等问题,以确保系统的长期稳定运行。

2024-09-06 23:06:37 978

原创 四轴飞控:Mahony姿态解算代码及思路

本文详细介绍了飞控姿态解算中的难点,包括姿态结算为什么要使用传感器数据融合,如何进行数据融合,最后详细解析了Mahony姿态解算的代码。

2024-07-30 16:05:23 1942 2

原创 入门BFS问题:《九宫重排》

很多年前读大学的时候做的一道广搜题目,非常经典,适合对广搜进行复盘,以下进行简单回顾:[原题链接](https://blog.dotcpp.com/a/67342)**问题描述**> 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着。与空格子相邻的格子中的卡片可以移动到空格中。经过若干次移动,可以形成第二个图所示的局面。

2024-07-29 17:40:17 511

原创 入门DFS问题:《2N皇后》

很多年前刚读大学时候做的一道经典深搜题目,适合对深搜进行复盘,以下进行简单回顾:[原题链接](https://blog.dotcpp.com/a/67415)**问题描述**> 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后。现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行、同一列或同一条对角线上,任意的两个白皇后都不在同一行、同一列或同一条对角线上。问总共有多少种放法?n小于等于8。

2024-07-29 17:16:27 277

原创 嵌入式AI---在华为昇腾推理自己的yolov5目标检测模型

本文介绍了MindStudio的安装步骤以及如何基于MindStudio让自己的模型在板端实现推理

2024-07-29 16:36:16 3631 6

原创 嵌入式AI---yolov5模型转化为华为昇腾om模型

本文介绍了如何将.pt模型文件转化为onnx格式,以及将onnx格式转换为om文件的两种方法

2024-07-29 10:38:36 4924 10

原创 嵌入式AI---训练自己的yolov5目标检测模型

基于常用的轻量级检测算法yolov5s,在3060显卡训练了一个自己的车辆检测模型。源码版本为yolov5 v6.0,采用UA-DETRAC数据集训练。

2024-07-26 11:05:55 2687 4

空空如也

空空如也

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

TA关注的人

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