- 博客(29)
- 资源 (5)
- 问答 (1)
- 收藏
- 关注
原创 基于Milk-V Duo平台的AI小项目实践:软件架构逻辑与应用技术解析
本项目借助Milk-V Duo AI开发平台,不仅成功实现了从模型构建、训练到服务化的全过程,而且充分发挥了平台在深度学习计算、资源管理和系统稳定等方面的优势。模型层:在Milk-V Duo平台上,我们首先搭建了基于卷积神经网络(CNN)的图像识别模型结构,利用其内置的深度学习框架如TensorFlow或PyTorch,快速训练和优化模型参数。实时推理优化:针对嵌入式环境,结合Milk-V Duo的硬件特性进行模型量化压缩和优化,实现模型在有限资源下的快速、准确推理。二、软件架构设计逻辑。
2024-02-03 20:54:36
728
1
原创 使用HTTP协议实现嵌入式设备的空中升级
在嵌入式系统中,空中升级是一种常见的需求,它允许我们通过网络将新的固件或软件更新传输到设备中,以便更新设备的功能或修复错误。它是一种无状态的协议,每个请求和响应都是独立的,不会保留之前的状态信息。空中升级的基本原理是将新的固件或软件包通过HTTP协议传输到嵌入式设备中,并在设备端进行解析和更新。如果验证通过,设备端将新的固件或软件包写入设备的存储器中,并进行相应的更新操作。设备端接收到HTTP请求后,解析请求头和请求体,获取到要升级的固件或软件包。使用HTTP协议实现空中升级的代码示例。
2023-09-12 11:51:23
530
1
原创 嵌入式学习路径知识点
嵌入式系统是一种特殊的计算机系统,通常用于控制、监测和执行特定任务。如果您对嵌入式系统的学习感兴趣,以下是一些关键的知识点和学习路径,可以帮助您入门和深入了解嵌入式系统的工作原理和开发过程。以上是嵌入式系统学习路径的一些关键知识点,您可以根据自己的兴趣和需求进行深入学习和实践。请注意,这只是一个概述,嵌入式系统领域非常广泛和深入,还有很多其他的知识和技术需要掌握。
2023-09-06 14:44:42
247
原创 实现简单的1.2V电机控制设计
在过去十年中,口腔健康和卫生受到特别关注。这种趋势正在推动发明新的增强型口腔健康技术的设计师进行更多的创新。电动牙刷显著改善了刷牙体验和刷牙习惯。最流行和最有效的电动牙刷类型是旋转或左右移动的电动牙刷。由于电机,可以以声波或较低速度进行运动。现代电动牙刷通常依靠可充电电池,当牙刷在使用之间放置在充电底座中时,通过感应充电进行充电。他们通常使用镍氢(NiMH)电池,其标称电压为1.2 V。低压GreenPAK™ SLG47513的工作电压范围为1 V至1.65 V,可控制牙刷的操作。
2023-08-21 14:28:05
235
原创 记录C/C++回调函数
回调函数是一种在C/C++中常用的编程技术,它允许将一个函数作为参数传递给另一个函数。这种机制使得一个函数可以在运行时动态地调用另一个函数,从而实现更灵活和可扩展的程序设计。
2023-08-15 11:54:19
88
原创 自己的记录 结构体全局变量多个文件调用
定义条件编译:可以使用 #ifdef、#ifndef、#else 和 #endif 等条件编译指令来进行条件编译。// 声明为全局变量。a.c 包含头文件。
2023-06-09 15:14:46
526
原创 关于回调函数重复触发 如何解决的
可以将回调函数作为状态机的事件处理程序,并在每个状态转换时检查是否已经触发了回调函数。如果已经触发了回调函数,则不再执行该回调函数。2.使用计数器:可以在回调函数中添加一个计数器,每次调用回调函数时递增计数器的值。1.使用闭包:闭包是一个函数和其相关的引用环境的组合。通过将回调函数作为参数传递给另一个函数,并在该函数内部定义一个闭包来保存该回调函数及其引用环境,可以确保回调函数只被触发一次。无论使用哪种方法,都需要仔细考虑如何设计和实现回调函数以确保它们只被触发一次。
2023-06-07 20:49:24
731
原创 FreeRTOS的应用
FreeRTOS是一种开源实时操作系统,专门为嵌入式系统设计。它提供了一组任务调度、内存管理、中断控制等功能,可以帮助开发人员快速构建高效的嵌入式系统。本文将详细介绍如何使用FreeRTOS来构建一个简单的嵌入式系统。
2023-05-19 15:15:19
781
原创 记录自己使用 Gitee 仓库 上传 拉取
第三步:下载 Git https://npm.taobao.org/mirrors/git-for-windows/,直接翻到最下方找到最新版,然后点击进入,选择 Git-2.38.1-64-bit.exe 下载即可。第二步:第二步: 填写仓库信息 (初始化仓库、设置模板、选择分支模型部分大家根据需要酌情选择即可)第四步:安装完成后,到需要上传的项目文件夹下,鼠标右键点击,选择 Git Bash Here。第十二步:提交代码到远程仓库,-f 强制提交 (这种提交方式对远程协作的情况不合适)
2023-05-17 20:01:03
645
原创 本人对Microsoft Edge最近推出的分屏功能使用记录
总的来说,Microsoft Edge 的分屏功能可以让你更加高效地使用计算机,特别是在需要同时查看多个选项卡的情况下。另外,使用分屏功能可以帮助你更好地组织工作流程。例如,你可以将一个选项卡放在屏幕左边,另一个选项卡放在右边,这样就可以同时查看两个工具或者网站,而不需要来回切换。以下是关于如何在实际工作中使用 Microsoft Edge 新推出的分屏功能,以及该功能带来的好处和提高工作效率的一些想法。写一篇使用Microsoft Edge新推出的分屏功能,帮我在实际工作中使用的好处,提升了工作效率。
2023-05-06 14:36:02
703
原创 HC32F030通过Flash保存计数并自增
其中,我们首先从Flash中读取之前保存的计数值,如果读取的值不为0xFFFFFFFF,就将其赋值给u32Count。其中,我们首先初始化LED的IO口,并将其配置为输出推挽模式。然后,我们通过计数值的大小来控制LED的闪烁次数,每当计数值为1000的倍数时,就让LED闪烁一次。为了方便观察计数值是否正确保存,我们可以通过控制LED闪烁来表示计数值的大小。其中,FLASH_ADR_SAVE是我们在Flash中保存值的地址,这里定义为0x0800 3C00。在主函数中添加以下代码,实现计数值的保存。
2023-03-10 14:17:16
296
原创 STM32F4系列单片机,实现3个计数器的预置值。
在以上代码中,我们使用RCC_APB1PeriphClockCmd和RCC_APB2PeriphClockCmd函数开启TIM1、TIM2、TIM3计数器的时钟,然后使用TIM_TimeBaseInitStruct结构体初始化计数器。STM32系列单片机内部集成了多个计数器,这些计数器可以通过内部时钟或外部时钟源进行计数,并可以通过预置值(PR)来控制计数器的初始值。配置预置值:为了实现3个计数器的预置值,我们需要使用TIM_SetAutoreload函数设置计数器的自动重装值,即预置值。
2023-03-10 13:55:39
741
原创 使用VS Code配置单片机开发环境的一些基本步骤
配置调试器:在VS Code中安装并配置调试器,以便您可以在VS Code中调试您的单片机应用程序。例如,如果您使用的是OpenOCD调试器,您可以安装Cortex-Debug扩展,并在.vscode/launch.json文件中配置调试器。然后,在文件中编写您的代码。编译和调试:在VS Code中打开终端视图,切换到您的项目文件夹,使用编译器编译您的代码,并使用调试器调试您的应用程序。创建工作区:在VS Code中创建一个新的工作区,然后在工作区中创建一个新的文件夹,作为您的项目文件夹。
2023-03-10 13:43:02
1851
原创 基于STM32和SX1278做LoRa网关
本文介绍如何使用STM32和SX1278模块搭建一个简单的LoRa网关,该网关可用于连接远程LoRa节点和互联网,并将节点数据转发到云平台。
2023-03-08 15:37:47
1796
2
原创 如何选择合适的嵌入式操作系统
Windows Embedded是微软公司推出的一款商业嵌入式操作系统,它的特点是功能强大、易用、可扩展、可定制,适用于需要高度可定制化和高性能的嵌入式设备。Linux是一款广泛使用的开源操作系统,它的特点是功能强大、可移植、可定制、可扩展,适用于需要高度定制化和高性能的嵌入式设备。总之,选择合适的嵌入式操作系统需要考虑多个因素,包括设备的资源、项目的要求、开发者的技能以及社区的支持等。5.设备的性能和资源:资源有限的设备可以选择小巧、高效的嵌入式操作系统,而性能更强的设备可以选择功能更强大的操作系统。
2023-03-07 16:29:33
975
原创 第一次接触open cpu记录
一种普通应用模式,通常用户应用程序运行在外加MCU上,使用串口发送AT指令及反馈实现与模组的交互。而OpenCPU模式是一种以模块作为主处理器的应用方式。用户程序可把模组当做MCU,入口函数由main变成opencpu_task_main(名称根据具体模组而定)即可,通过函数调用实现与模组的交互。模组加上设备MCU,对于设备厂商,需要进行MCU软件开发,从而实现本地通讯协议,增加客户的研发难度。实际上,通过通信模组去实现MCU的功能,将远远大于MCU直接提供的能力。
2022-09-21 14:56:44
2870
原创 GD32F103RCT6 FMC写入flash 读出来全是ffff 是什么问题?
【代码】GD32F103RCT6 FMC写入flash 读出来全是ffff 是什么问题?
2022-08-25 08:59:19
1031
6
原创 GD32E230C8T6_OTA升级
GD32E230C8T6_OTA升级运行环境简介程序的起始地址进行分区总体流程图Bootloader 程序Bootloader 编译设置APP 分区部分APP 编译设置重点步骤运行环境1.Windows102. Keil5(MDK5) Version 5.27.0.03. MCU GD32E230C8T6简介本例程主要分析在线升级(OTA)的实现过程, 主要是针对IAP OTA从原理分析, 分区划分, 到代码编写和实验验证等过程阐述这一过程. 和大家以前理解OTA的原理.作者也是通过已有的网上
2021-08-27 14:56:45
6320
11
原创 通信模块usart接收的封装
usart初始化void usart_init(void){ /* enable USART clock */ rcu_periph_clock_enable(RCU_USART0); /* USART configure */ usart_deinit(USART0); usart_baudrate_set(USART0, 115200U); usa...
2020-03-31 14:18:44
1138
原创 GD32E230C8T6定时器
GD32E230C8T6开始新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入开始GD32E230C8T6的定...
2019-12-17 19:17:49
2846
原创 求助问题STC89C52和两个SR501实现计数加减
求助问题STC89C52和两个SR501实现计数加减功能描述:使用STC89C52和两个SR501模块,通过两个外部中断实现计数加减数码管显示结果。代码在这里插入代码片撤销:Ctrl/Command + Z重做:Ctrl/Command + Y加粗:Ctrl/Command + B斜体:Ctrl/Command + I标题:Ctrl/Command + Shift + H无序...
2019-09-03 21:26:38
295
原创 c++函数声明问题
正确改法12 void printArea(double radius = 1);1314 int main(){15 printArea();16 printArea(4);17 return 0;18 }19 void printArea(double radius ){20 //Do...
2019-03-25 14:46:49
199
原创 嵌入式第一篇(按键控制灯)
key.c#include "main.h"#include "key6.h"/*KEY0 -- PA0KEY1 -- PE2KEY2 -- PE3KEY3 -- PE4KEY_DOWN 0KEY_UP 1*///keyԵʼۯvoid key_init(){GPIO_InitTypeDef GPIO_Inittest;RCC_AHB1PeriphCl...
2019-03-02 15:45:02
2796
GD32E230_Firmware_Library_V1.0.0.rar
2019-09-03
硅麦模块输出的模拟信号如何转成可播放的WAV格式
2024-11-02
ats2837 spi2从机的代码
2024-05-13
关于PY32F002A实现TIM1和TIM16不能同时运行
2023-03-31
HC32F030F8TA移植FreeRTOS后LED常亮 不能正常闪烁
2023-03-16
关于GD32E230C8T6的SPI0配置中的问题
2022-05-18
TA创建的收藏夹 TA关注的收藏夹
TA关注的人