自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 资源 (1)
  • 收藏
  • 关注

原创 关于Keil编译器使用C90的说明及如何切换成C99规则

前几天打开keil编译器编译了一个代码,提示我的一个变量没有定义,我写了如下的代码:提示我的ret没有定义,后面仔细研究了一下发现是keil编译器默认的编译规则问题,keil默认使用C90的规则,所有变量在使用前就已经定义完成,这样可以提升编译器的编译效率,随用随定义的规则是C99引入的,代码灵活,但是编译效率不如C90规则下的,但是就习惯性来说,C99下的规则更符合代码编写逻辑,大部分工程师开发的代码都是基于C99规则下的,如果C90规则不习惯,我们可以修改KEIL的默认编译规则为C99下的。

2025-03-20 19:55:35 923

原创 STM32时钟概述

STM32F103 采用多级时钟树结构,支持多种时钟源以适应不同的功耗和性能需求。正确理解和使用时钟系统对于确保系统稳定运行至关重要。下图是典型的时钟树的图,我们做下区分学习,先关注四大始终源头。STM可选时钟源有4个,分别是HSE、LSE、LSI和HSI,前两个是外部晶体震荡产生的时钟源,后两个是内部RC电路震荡产生的时钟源。通过开启PLL锁相环可以倍频出最大72MHz(使用8M HSE)的系统时钟频率。

2025-03-20 09:09:36 847

原创 从零开始动手DIY一台桌面宠物狗(直播帖手动滑稽.jpg)——【电路母板焊接】

初步电路搞完了,舵机没有转动,软件有问题,调下软件让舵机跑起来就可以封壳子调试了。

2025-03-18 10:33:20 145

原创 从零开始动手DIY一台桌面宠物狗(直播帖手动滑稽.jpg)——【电路设计】

准备一块3.7V锂电池准备一个充放电一体模块,要2A大电流那种准备一个ASM1117芯片和几个电容。

2025-03-04 20:53:39 710

原创 从零开始动手DIY一台桌面宠物狗(直播帖手动滑稽.jpg)——【三】

昨天添加了I2C的驱动代码,OLED的表情代码烧录进入初步测试一下,看起来基本正常。第一个表情基本正常显示了。今天添加上PWM相关代码和接口

2025-02-28 13:37:44 296

原创 从零开始动手DIY一台桌面宠物狗(直播帖手动滑稽.jpg)——【二】

上一篇末尾更新了代码路径这一篇我们使用git down下来的代码去完成点灯操作,验证OK后添加驱动代码,添加软件i2c的驱动代码和oled的显示接口IO引脚如下。

2025-02-27 17:31:40 367 2

原创 从零开始动手DIY一台桌面宠物狗(直播帖手动滑稽.jpg)——【一】

最近网上刷到很多diy的桌面宠物狗,感觉很有意思,于是我也萌生了这个想法,从零diy一个桌面机器狗。大致思路是一块MCU单片机,四个sg90舵机当腿,一块0.97寸oled当脸部的表情。辅助硬件可以有蓝牙hc05模块,超声波收发一体检测模块,语音转换和扬声器模块等。我们先从最简单的开始一步步迭代。下图是网络图来此小红书,保留了作者水印,后期我换上自己的成品图。

2025-02-21 15:26:16 809 1

原创 PCA9685舵机控制板使用

引脚描述连接说明VCC电源输入(3.3V 或 5V)连接到主控芯片的电源V+电源输入(舵机电源 5V、6V 或 7.4V)连接到舵机电源(一般不接,使用图片上的绿色端子供电)SDAI2C 数据线连接到主控的 SDA 引脚SCLI2C 时钟线连接到主控的 SCL 引脚GND地线连接到主控地线OE输出使能(控制是否输出 PWM 信号)默认接地,启用 PWM 输出。

2025-02-06 20:57:44 1442 1

原创 使用STM32驱动舵机sg90

先简单看一下产品参数,这里以mg90为例,产品参数显示,死区是5微秒5微秒死区:意味着舵机控制系统在信号输入的时间变化小于5微秒时,舵机不会做出任何响应。当PWM信号的脉宽变化不到5微秒时,舵机内部的反馈控制系统认为这是噪声或微小的波动,忽略它,不会做出位置调整如何理解死区的存在?死区简单理解为一个特别微小的变化,可能是主动的驱动或者被动的震动的幅度太小,不足以使舵机转动,我是把他理解为推动一个静止物体的最大静摩擦力即可,当驱动力不足以克服静止物体的最大静摩擦力时候,物体是推不动的。

2025-01-26 13:34:54 990

原创 0.96寸OLED驱动显示图片、汉字、GIF图

0.96寸的OLED模块通常是使用SSD1306 驱动芯片的。这个芯片非常常见,支持I2C或SPI通信等通信方式,通常用于低功耗显示应用,1306芯片手册。从1306芯片的芯片手册8.1能看到支持很多种通信方式,使用最多的是I2C和SPI方式,也就造就市面上OLED的两种主流型号,4针I2C和7针OLED![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/fbf048b85ac240bf9dc812551deee79d.png。

2025-01-26 10:41:22 1050

原创 音箱音效和调音(软件侧)

EQ(均衡器)主要用于调整音频的频率分布,增强或削减某些频段的音量,影响音色和音质。Limiter(限制器)则控制音频的最大音量,防止过强的音频信号导致失真,并保持音量在安全范围内。DRC(动态范围压缩器)则主要用于控制音频的动态范围,通过压缩信号的强弱差距,使音频表现更加均衡一致。

2025-01-22 11:10:46 892

原创 如何用C语言实现结构体链表增删改查

下面是一个我项目中写的一个标准的结构体链表,需要修改数据结果可以直接修改结构体,在结构体中添加或者修改对应的项目。

2025-01-16 16:34:40 154

原创 如何用C语言实现Ringbufer环形队列数据结构

以下代码实现了环形队列的数据结构,并且当数据长度超过缓存区大小时候,会覆盖掉旧的数据。可通过代码里面的main函数测试结果。

2025-01-16 16:06:10 213

原创 软件项目开发关键节点——开源合规扫描

开源合规扫描是确保项目在使用开源软件时遵守所有相关许可证要求、避免版权和法律问题的关键步骤。通过自动化扫描工具,开发团队可以有效识别开源组件、分析许可证合规性、发现许可证冲突和安全漏洞,从而降低法律风险、提高项目的透明度,并确保开源软件的合理使用。在现代敏捷开发和持续集成的环境中,开源合规扫描已经成为软件开发流程中不可或缺的一部分。

2025-01-14 13:55:06 1204

原创 小米vela系统(基于开源nuttx内核)——openvela开源项目

相对于freertos这种较为成熟的系统来说,vela系统还有很长的路要走,但是其在解决多平台设备互联上的优势还是不错的,如果一个厂商同时在多种类型的设备做开发,使用vela系统进行互联还是很方便的,希望openvela能够继续完善下去。

2025-01-14 09:39:47 1496

原创 小米vela系统(基于开源nuttx内核)——如何使用信号量进行PV操作

在嵌入式系统中,任务间的同步与通信是非常重要的。NuttX作为一款轻量级实时操作系统,提供了多种同步机制,其中信号量(Semaphore)是一种常见且高效的工具,用于实现线程或任务之间的同步。本文将深入探讨如何在NuttX中使用信号量,并通过一个实例来展示其应用。在 Vela 操作系统(nuttx内核)中,使用标准的 POSIX接口,信号量的管理也是与linux系统类似的。信号量是一种用于线程间同步的机制,它可以控制多个任务的访问权限。二值信号量。

2025-01-13 19:06:03 1178

原创 小米vela系统(基于开源nuttx内核)——如何创建一个线程并且设置线程参数

小米 Vela 操作系统是一个高效且适用于嵌入式系统的实时操作系统(RTOS)。它为开发者提供了多种线程管理和调度机制,使得我们能够在多任务环境中有效地管理系统资源。线程是 Vela 中并发执行的基本单位,它可以通过任务和调度机制来管理。在这篇文章中,我们将详细介绍如何在 Vela 操作系统 中创建并管理线程。我们将通过一个简单的示例,展示如何创建一个线程来执行下载任务,并在该线程中实现任务的优先级管理。

2025-01-11 12:04:31 628

原创 cJson——序列化格式json和protobuf对比

特性ProtobufJSON消息大小更小(二进制格式)较大(文本格式)序列化/反序列化速度更快较慢数据类型强类型(需要.proto文件定义)弱类型(只存储文本)兼容性良好的向前向后兼容性无内建的版本控制机制带宽消耗更低更高跨语言支持提供自动化代码生成,支持多种语言支持多种语言,但没有标准生成机制复杂数据结构支持强大的数据类型和结构支持支持嵌套结构,但缺乏类型验证机制适用场景高效、大数据、跨平台系统简单的配置文件、日志文件、Web API总结。

2025-01-10 22:18:08 1079

原创 程序员可以转型的方向

给所有还在一线程序员岗位奋斗的战友们一句经验,工作是死的,人是活的,国内的环境不适合程序员长期的发展,要在上升期和安逸期多思考,多学习,多谋求其他出路。35岁是个无法逃避的现实,硬件类岗位可能40左右也会面临就业危机。我是做嵌入式开发的,我曾经一直以为这个行业不是纯互联网不会遇到中年危机,直到身边出现了越来越多实力强劲的大龄同事,大幅降薪后来和年轻人卷机会,甚至过来做外包开发,我才反应过来,这种情况早晚会到我身上,总有一天我可能加入外包大军成为一个没有灵魂的马楼。早做准备才能灵活应对未来的挑战。

2025-01-10 22:04:50 909

原创 解决repo工程代码清理不干净的问题

现在主流的嵌入式软件开发工程,是通过repo去管理多个git仓库,通过xml文件对应的仓库节点去索引对应的仓库head。开发repo代码过程编译前需要进行clean或者distclean的清理,有的工程的主makefile写的不够完善,导致clean或者distclean时候本地缓存没有清理干净,在这种情况下直接去编译会导致最新修改无法被编译进入镜像或者bin文件,造成错误的验证结果。推荐使用如下两条repo指令,在编译前执行一次,可以清理掉所有缓存和没有提交的记录,确保本地干净。

2025-01-10 14:54:17 386

原创 项目实战——使用python脚本完成指定OTA或者其他功能的自动化断电上电测试

在嵌入式设备的OTA场景测试和其他断电上电测试过程中,有的场景发生在或者可能发生,这个时候不可能24h人工盯着,需要自动化抓取串口日志处罚断电上电操作。下面的python脚本可以实现自动抓取串口指定关键词,然后触发继电器的主动断电上电操作,具体场景是在我实际开发项目中,有一个静默升级的功能,在夜间静默推送升级功能,需要做下载过程的随机断电防止出现升级过程卡死。我写了以下的工具,可以捕捉mobxterm上面的日志指定关键字,当扫描到指定关键字进行断电或者上电的测试,完成夜间的随机物理断电测试。

2025-01-09 20:22:24 1158

原创 nanopb(一)——概述和介绍

是一个极其适合嵌入式系统的轻量级 Protobuf 实现,它能够在资源受限的环境中高效地处理数据交换任务。通过使用它,开发者可以在嵌入式设备之间实现高效、可靠、可扩展的二进制数据交换,且不需要过多关注内存和计算开销。nanopb 提供了简单的 API 来序列化(编码)和反序列化(解码)消息。这会生成与 Protobuf 数据结构相对应的 C 结构体和函数,方便你在嵌入式环境中进行序列化和反序列化操作。则是其精简版,旨在减少内存占用和提高编码/解码的效率,特别适合在微控制器和嵌入式系统中使用。

2025-01-09 10:51:15 932

原创 软件开发阶段说明

阶段含义主要目标Pre-alpha软件开发初期,功能和设计尚在原型阶段。开始编写代码,进行概念验证,进行初步设计。Alpha内部开发和调试阶段,软件功能初步完成,但不稳定。开发和集成核心功能,解决大部分缺陷。Beta向外部用户发布,进行公开测试,寻找更多问题。通过用户反馈发现问题,完善软件功能和稳定性。接近最终版本,准备发布前的最后验证。完成最后的修复,确保软件稳定,准备发布。Stable稳定版本,经过全面测试,稳定可靠。解决大部分 bug,功能完整且稳定。软件正式发布并面向所有用户可用。

2025-01-08 19:44:11 761

原创 硬件项目生命周期说明(EVTtoOTA)

在硬件和软件开发的项目生命周期中,常常会涉及到多个阶段,包括等。除了硬件开发的传统验证阶段外,随着智能设备和联网设备的发展,更新也成为了项目周期中的一个关键环节。

2025-01-08 19:29:32 1059

原创 嵌入式应用软件开发中C语言方向面试题

做嵌入式开发这么多年了,简单记录下C语言方向常见面试题,这里是应用软件方向的。

2025-01-03 18:30:51 1072

原创 培养技术领导力:从代码执行者到团队掌舵人

技术领导力的培养并非一蹴而就,而是需要通过不断的实践、学习与反思来实现。从精通技术到带领团队攻坚克难,从单打独斗到有效管理团队,技术领导者的成长之路充满挑战,但也充满机会。每一位技术人员都可以通过不断积累经验,提升自己在技术、管理与战略等方面的综合能力,逐步迈向技术领导的巅峰。

2025-01-02 22:39:48 987

原创 AI如何给IT行业带来大地震

AI正在深刻改变IT行业的各个领域,从软件开发到数据分析,再到运维管理和网络安全,AI的应用正在使这些领域变得更加高效、智能和自动化。尽管AI技术的引入可能会导致一些低技术含量的工作被取代,但它更大程度上是推动IT行业向高价值、创新性工作转型。IT从业者需要具备更加全面的技能,包括AI、数据分析、自动化工具的使用等,才能在这个变革的时代中站稳脚跟。AI不是IT行业的“职业终结者”,而是IT从业者的“助推器”。

2025-01-02 15:18:47 975

原创 基于cURL工具在嵌入式场景中的使用与在STM32F1上的移植

cURL(Client URL)是一个开源的、支持多种协议的命令行工具和库。它可以在网络编程中实现数据的发送和接收,并且支持HTTP、HTTPS、FTP、FTPS、SFTP等协议。cURL库提供了强大的功能,适合用于嵌入式设备的网络交互。libcurl:提供了cURL的API接口,用于应用程序与远程服务器进行数据交换。cURL命令行工具:提供了一个简单的命令行接口,允许用户快速进行网络请求。在嵌入式系统中,通常只需要使用libcurl进行网络通信。

2025-01-02 15:09:09 1527 4

原创 使用shell脚本去切换python版本

在嵌入式交叉编译环境中,可能存在同时存在Python2和Python3的情况,这两种库不兼容,需要进行python的切换,下面shell脚本会自动查找当前开发环境的python2和python3位置并切换。需要提前安装Python2和Python3,如果同时安装了这两个,不进行切换的话,默认使用一般是python3.这个 Shell 脚本,通过自动查找 python2 和 python3 的安装路径,来进行切换操作,并在切换成功后打印日志。

2024-12-31 14:13:02 435

原创 嵌入式场景kvdb数据库的使用(二)——UnQLite数据库在嵌入式设备上的移植和使用

将UnQLite数据库移植到嵌入式设备时,硬件配置的要求主要取决于你嵌入式系统的性能、存储容量和具体应用场景。UnQLite 是一个轻量级的数据库,适用于资源受限的设备,但仍有一些硬件要求需要考虑。硬件资源建议配置CPU架构ARM Cortex-M 或 Cortex-A(ARMv7+)、MIPS、x86 等主频最低 100 MHz,推荐 500 MHz 或更高(尤其是 Cortex-A 系列)内存(RAM)最低 16MB,推荐 64MB 或更多(对于 STM32 系列至少 32MB)

2024-12-31 13:10:24 911

原创 小米自研vela系统kvdb数据库的使用(一)

KVDB 数据库详细介绍KVDB 的基本原理KVDB 的应用场景1. 缓存系统2. 配置管理3. 会话存储与用户状态管理4. 实时数据处理5. 日志记录与事件存储6. 分布式存储KVDB 的作用KVDB 数据库的典型实现1. LevelDB2. RocksDBKVDB 调用方式下面以 **LevelDB** 和 **RocksDB** 为例,简要介绍如何在代码中使用 KVDB 数据库。见嵌入式场景kvdb数据库的使用(二)KVDB。

2024-12-30 20:48:52 1182

原创 嵌入式设备常用协议-MIPI 协议(一)

MIPI 协议的分类与作用MIPI 协议的特点MIPI 协议的应用MIPI 协议示意图MIPI DSI(Display Serial Interface)示意图MIPI CSI(Camera Serial Interface)示意图总结MIPI(Mobile Industry Processor Interface)协议是一系列面向移动设备的标准接口规范,由 MIPI 联盟(Mobile Industry Processor Interface Alliance)开发和维护。

2024-12-30 11:19:15 651

原创 OTA场景使用mbed TLS 进行 MD5 校验

通过 mbed TLS 提供的 API,计算 MD5 校验变得非常简单。在嵌入式开发中,使用 mbedtls_md5 函数可以快速生成 MD5 校验值,确保数据的完整性。如果你的应用需要对大数据或流式数据进行 MD5 计算,可以使用增量计算方法(通过 mbedtls_md5_context)。这种方法不仅适用于简单的数据校验,也适合处理更复杂的场景。

2024-12-28 16:33:34 858

原创 cJson—json和XML比较

在嵌入式设备开发中,JSON和XML是两种常用的数据交换格式。选择使用哪种格式往往取决于设备的资源限制、性能需求、以及开发的便利性。下面我会从多个维度比较 JSON 和 XML,帮助你更好地理解它们在嵌入式系统中的优缺点。特性JSONXML效率较高,解析和传输较为高效,内存占用少较低,解析较慢,内存消耗大存储占用较小,占用存储空间少较大,占用更多存储空间易用性简单易用,开发便利复杂,学习成本高跨平台支持优秀,几乎所有语言支持优秀,但更多用于企业系统灵活性简单,适合较简单的数据结构。

2024-12-28 13:05:24 809

原创 cjson——excel转json文件(python脚本转换)

将 Excel 表格的配置参数转换成 JSON 文件是一项常见的任务,通常需要将每一行或每个工作表的数据结构化为 JSON 格式。下面是详细的步骤,使用 Python 中的pandas库来读取 Excel 表格,并将其转换为 JSON 格式。假设你有一个 Excel 文件Data TypeSensor Afloat0.5Sensor AFrequencyint100Sensor BThresholdint10Sensor CModestring“auto”Sensor C。

2024-12-28 13:01:35 1087

原创 python应用场景随笔

Python的应用场景:从Web开发到人工智能的广泛应用Python,作为一种简洁而强大的编程语言,因其易学性、丰富的库支持以及跨平台的特性,已经在各行各业中得到广泛应用。从Web开发、数据分析到机器学习,Python已经成为许多开发者和工程师的首选工具。本文将介绍Python在一些典型应用场景中的优势和实际应用。

2024-12-27 17:15:13 884

原创 cjson系列——EXAMPLES

此示例展示了如何创建一个简单的 JSON 对象,并将其打印为 JSON 字符串。这篇文章列举出大部分常用cjson调用的demo场景,并列举出对应的打印。此示例展示了如何创建一个 JSON 数组,并添加一些元素。此示例展示了如何解析 JSON 字符串,并访问其中的值。

2024-12-27 15:02:07 622

原创 cJson系列——json数组和json对象有什么区别

JSON 对象是一个无序的键值对集合,适合表示具有命名属性的数据结构。JSON 数组是一个有序的元素集合,适合表示数据的列表或序列。两者可以灵活地组合和嵌套,构建复杂的 JSON 数据结构。

2024-12-27 14:39:59 1073

原创 cJson系列——如何调用cjson库

在C语言中,处理JSON数据通常使用第三方库,如或。下面以为例,演示如何调用JSON解析函数的流程。

2024-12-26 20:47:52 635

原创 cJson系列——常用cJson库函数

这里列出常见的Cjson函数函数名作用创建一个空的 JSON 对象创建一个空的 JSON 数组向 JSON 对象中添加字符串类型数据向 JSON 对象中添加数字类型数据获取 JSON 对象中的某个键值将 JSON 对象转换为字符串解析 JSON 字符串,返回 JSON 对象删除 JSON 对象及其包含的所有数据向 JSON 对象添加一个项判断项是否为字符串类型。

2024-12-26 20:43:37 1831

开源云笔记蚂蚁笔记docker镜像压缩包

开源云笔记蚂蚁笔记压缩包,axboy/leanote版本,因为上传1G限制,本文件进行了两次压缩,zip解压后是docker的tar类型,可以直接上传到群晖docker管理器中去运行容器,亲测可用

2024-12-02

esp8266程序

esp8266的程序,单片机方面的,下载下来只需要修改成你所在的局域网和你所在网络的名字,加上密码

2018-05-09

空空如也

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

TA关注的人

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