自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【项目代码编写模板】

【代码】【源码编写模板】

2025-12-22 14:14:05 65

原创 STM32_I2C Timing参数计算方法(I2C speed:120k/240k/400k)

本文介绍了I2C时序参数的计算方法,包括获取必要参数(PCLK1频率、I2C速度、信号上升/下降时间)和使用STM32CubeMX配置工具或ST官方Excel工具自动生成TIMINGR值。详细说明了手动计算TIMINGR寄存器的步骤,包括预分频器、高低电平周期等设置,并提供了示例计算过程。最后给出实际应用建议和验证方法,强调使用官方工具确保参数符合I2C规范。

2025-12-18 14:05:11 283

原创 【C语言无符号常量好处】`4U` 表示一个无符号整数常量 4

摘要:代码中的4U表示无符号整型常量4,用于明确表示4字节操作。在sn_pack_word()函数中,4U用于循环处理4个ASCII字符(4字节=32位)的打包操作。使用4U而非4的好处包括:明确无符号类型、避免类型转换警告、清晰表达字节处理意图。其他实例如缓冲区大小计算和内存拷贝也使用4U来保持一致性。

2025-12-01 21:25:30 332

原创 【C语言】局部变量值传递无效,函数不会改变传进变量的值

在 cps5301_read_24_reg 函数中,由于 count 参数是值传递而非指针传递,导致函数内部对 count 的修改(变为37)无法影响外部调用者中的 dataLen 变量(仍为0)。要正确返回读取的寄存器数量,应改为指针传递方式,在调用时传入 &dataLen。

2025-11-20 16:59:03 60

原创 设计程序时,如何做到写的代码更有扩展性,更方便代码维护?

本文总结了嵌入式C语言开发中提升代码扩展性与可维护性的关键设计原则。主要包括:1)模块化设计(单一职责原则、高内聚低耦合);2)扩展性技巧(配置参数、策略模式、预留扩展点);3)可维护性实践(清晰接口、文档注释、错误处理);4)代码组织(分层架构、状态机设计);5)实用技巧(枚举替代魔术数字、配置分离、测试友好设计)。这些方法能帮助代码更好适应需求变化,降低维护成本,使系统更易理解和扩展。

2025-10-24 14:59:41 625

原创 【变量长度数组赋值方法】

【摘要】C语言变量长度数组(VLA)无法初始化引发错误。解决方案:1)使用memset清零数组;2)改用固定大小数组;3)动态内存分配;4)直接使用现有缓冲区。推荐方案1或4,通过memset实现初始化,既避免编译错误又满足需求。关键点:变量数组需单独初始化,不可直接赋值。

2025-09-25 11:21:52 261

原创 【枚举类型定义】

本文介绍了定义2字节枚举变量的三种方法:1)使用编译器特定属性如__attribute__((packed));2)结合stdint.h的固定宽度类型;3)直接使用uint16_t类型存储枚举值。同时指出了枚举定义的基本规范:枚举值默认从0开始递增,需用逗号分隔,避免重复。特别提醒示例代码中存在的语法错误(缺少逗号分隔符),需修正后才能正常使用。文中提供了完整的代码示例,展示了如何正确定义和使用2字节枚举变量。

2025-09-25 11:00:06 246

原创 【MCU EEPROM开发教程】

将EEPROM芯片作为传感器使用时,可通过I2C/SPI协议进行数据读写。关键在于优化读写算法以提高速度,并实现可靠的异常处理机制。与FLASH相比,EEPROM支持字节级擦写且寿命更长。在STM32开发中,还可通过FLASH模拟EEPROM功能,但需注意块擦除和磨损均衡等特殊处理。具体实现需结合时序控制、错误校验等底层操作(参考相关技术文档)。

2025-09-15 17:24:34 237

原创 【源码解析】位域成员在结构体中应用

细微到bit存储数据,节约高贵的内存空间,在嵌入式应用开发和底层驱动中经常使用到,相当于一个纸箱切割成几个小纸箱存东西。这是通过将所有成员的内存占用相加得出的:3字节(前3个成员)+ 1字节(位域成员)+ 2字节(后2个成员)= 6字节。需要注意的是,这个大小是基于当前的编译器和平台设置,实际大小可能会因为内存对齐等因素而有所不同。

2025-09-11 15:12:52 261

原创 【源码解析:memcpy、memmove、memset】

这段代码是GNU C库中用于内存安全操作的宏定义,主要功能是防止缓冲区溢出。它通过__ssp_bos_check3宏将标准内存操作函数(memcpy、memmove、memset)重定向到带有安全检查的版本。该机制会在编译时检测目标缓冲区大小,在运行时验证操作长度,若发现溢出则终止程序。在嵌入式开发中,这些函数常用于结构体复制、数据初始化、协议处理等场景,特别适合对安全性要求高的应用。通过条件编译,还支持GNU扩展函数mempcpy,用于连续数据打包操作。这种保护机制能有效预防常见的内存操作漏洞。

2025-09-11 11:09:21 823

原创 【曝光】【2023年10月被惠州某相亲机构骗2000多元真实经历】

2000多块钱只见了2个女的,只是被骗惨了。我甚至怀疑那两个女生是机构花钱请过来的演员。聊天说话,只会:嗯,啊,哦!那这钱请兄弟朋友吃饭,他们要把我当做爷爷棒着,或者自己拿去旅行,买些好看衣服比这爽10000倍。1. 90%婚恋机构都是割韭菜,传销,诈骗2. 相亲就是最不会泡妞的男人去泡社会上最难泡的妞3. 相亲男都是去接盘的,就是接盘侠,女的不知道和前任玩得多么花,你心目中的圣土,早已车水马龙。

2025-09-09 21:54:33 976

原创 【字符压缩存在整数32bit技术】

这段C语言宏定义将ASCII字符"READ"组合为32位整数值,采用位运算方式:'R'作为最低8位,'E'/'A'/'D'分别左移8/16/24位构成高位。这种设计常见于嵌入式系统,用于USB通信协议中的命令标识,既节省存储空间又提高比较效率。在代码中,当USB接收到对应"READ"的整数值时,会触发dfu_read函数执行读取操作,适用于带宽受限的嵌入式通信场景。

2025-09-09 16:53:04 175

原创 【延时函数】sleep()和delay()在嵌入式系统中相同点和差异点分布是什么?

摘要:sleep()和delay()函数在嵌入式系统中均用于程序暂停,但存在关键差异。delay()采用忙等待机制实现高精度延时,持续占用CPU资源,适合硬件时序控制;sleep()基于系统调度释放CPU资源,精度较低但更节能,适用于任务同步。示例代码中的[GetCurrentDelayMs()]结合RTOS节拍计数,兼具两种特性。选择时需权衡精度需求与系统资源消耗。(149字)

2025-09-05 09:57:12 343

原创 【定时器】prompt_timer启动后,是立刻运行prompt_timer_callback_test回调函数还是按设定的延时5000ms再执行prompt_timer_callback_

该代码片段创建了一个周期为5000ms的定时器prompt_timer,其回调函数prompt_timer_callback_test不会立即执行,而是在首次启动后延迟5000ms才首次触发,之后每隔5000ms周期性执行。定时器通过xTimerStart()启动后,需等待设定的延时时间才会首次调用回调函数,而非立即执行。

2025-09-02 14:15:27 279

原创 【被骗经历】探探认识叫去打麻将被骗300元

摘要: 作者通过探探认识一名主动女性,应邀参与麻将局,发现对方三人疑似团伙设局。虽察觉异常,仍硬撑几局后输掉300元,果断离场止损。总结:遇到骗局需立即识别并撤离,避免赌徒心理;涉及金钱时保持警惕,及时清醒判断。

2025-09-01 21:02:01 425

原创 【能促进情感发展的三十六个话题】

心理学研究表明,通过渐进式自我暴露的36个问题可以有效促进情感连接。这些话题分为三个阶段:从日常破冰到价值观碰撞,最终触及内心脆弱。最著名的实验表明,当陌生人完成这些问题并静默对视4分钟后,35%的人会建立亲密关系。使用时需注意环境营造和节奏把控,避免在未建立信任时使用深度问题。这套方法特别适合暧昧期或倦怠期的伴侣,但需配合现实行动才能真正维系关系。核心在于用真诚打开心门,而非机械式问答。

2025-08-28 09:11:13 983

原创 【git指令自动解决合并冲突】git指令永远选择冲突的Current Change / Incoming Change部分合入

Git 合并冲突解决方案 冲突说明:代码中出现 bt_call_state(本地变更)和 bt_action_state(远程变更)的冲突。 解决方案: 使用命令选择远程分支变更: git checkout --theirs 文件路径 批量处理所有冲突文件: git diff --name-only --diff-filter=U | xargs git checkout --theirs 提交变更: git add . git commit 快捷参考: 选择本地变更:--ours 选择远程变更:--the

2025-08-22 10:06:03 339

原创 【C语言防御性编程】if条件常量在前,变量在后

经验丰富的工程师推荐使用「Yoda条件」(if (VP_INDEX_PAIRING == vp_index))主要是出于防御性编程考虑。这种将常量前置的写法能有效防止意外赋值错误(如误将==写成=),因为给常量赋值会直接导致编译错误。虽然现代编译器能检测这类问题,但该写法仍被推崇为良好实践,能提高代码安全性、审查友好性,并符合团队规范要求。这种源自早期C/C++开发的技巧,至今在嵌入式系统和大型项目中仍被广泛采用。

2025-08-14 17:10:10 509

原创 【C语言】解释形参void *data用法

摘要: 在C语言中,void *data作为通用指针类型,可以指向任意数据而无需指定具体类型。它常用于需要传递多类型参数的场景,如回调函数、通用数据处理等。使用时需显式转换为具体类型指针才能访问数据。void*提供了接口灵活性,但也要求开发者自行保证类型安全。通过联合体或结构体封装可增强类型安全性。典型应用包括设备驱动中的消息分发机制,通过msg参数区分不同数据类型,但需注意内存对齐和类型转换的正确性。

2025-08-12 09:25:55 490

原创 【250802产线问题】项目产线遇到问题,分析解决流程

《产线问题快速处理流程》摘要:针对产线故障,首先区分软硬件问题,概率性问题多为软件所致。立即分类问题并联系供应商派工程师现场处理,同时组织多线排查。通过分布式实验定位高概率复现手法,收集日志分析。逐步缩小问题影响范围,明确责任归属后制定解决方案,并评估改动可能带来的负面影响。该流程强调快速响应、多方协作和系统性分析,以最大限度减少损失。(149字)

2025-08-07 11:11:22 234

原创 函数在头文件声明函数,为啥要加extern关键字?

摘要:C语言中函数声明前的extern关键字是可选的,加与不加效果相同。在头文件中使用extern主要为了:1)明确函数在其他地方定义;2)保持与变量声明的一致性;3)提高代码可读性;4)遵循编码规范。与变量不同,函数默认就是extern性质。虽然extern对函数非必需,但使用它能更清晰地表达设计意图,使代码风格更统一。

2025-07-31 16:59:19 404

原创 【git】服务器code已更新,但git pull失败怎么办

解决git pull冲突的方法:当本地与服务器代码冲突导致pull失败时,建议先使用git stash暂存本地修改,再执行git pull同步最新代码,最后通过git stash pop恢复修改并手动解决冲突。这种方法比直接还原本地代码更安全高效。操作步骤:1)暂存修改;2)拉取更新;3)恢复修改;4)手动处理冲突文件。

2025-07-22 10:50:43 219

原创 【被骗】7.20周日雨天,活力羽毛球陪打被骗,高估了人性

摘要 本文记录了作者在咸鱼平台遭遇羽毛球陪打骗局的经历。骗子方某(45岁,程序员)以约球为由,在惠州某球馆打完1小时羽毛球后拒绝支付25元陪打费。作者反思自己过于轻信对方,并提出"先支付再服务"的交易原则。文中详细描述了骗子的外貌特征、车辆信息及打球过程的不合理细节,提醒读者在网络交易中需提高警惕,通过正规平台保障权益。最后作者总结此次教训:社会复杂,需在吃亏中积累经验,同时谴责骗子的失信行为。

2025-07-22 10:35:31 1081

原创 int8_t与uint8_t有什么区别以及在嵌入式开发中应用场景,其他类型同理

摘要:int8_t和uint8_t是C/C++中8位整数类型,主要区别在于符号性和表示范围。int8_t为有符号(-128~127),适用于传感器数据、有符号协议字段等场景;uint8_t为无符号(0~255),常用于寄存器操作、ADC采样等嵌入式应用。选择时应根据数据是否需要负数、避免隐式转换,并在资源受限系统中优先使用最小够用类型以节省内存。两者均需C99标准支持,可提升代码可读性和内存效率。

2025-07-18 16:44:26 617

原创 【Linux】项目编译环境问题1及解决办法

摘要: 在Linux子系统环境中同时安装1585和1592芯片SDK后,第二天发现1592项目的DSP和MCU编译失败。分析认为两个SDK环境冲突导致问题。通过重新安装1592 SDK覆盖1585环境的方法解决了冲突,最终编译成功。验证结果显示build success,问题得到解决。该方法简单有效,避免了复杂的隔离操作。

2025-07-18 10:35:28 316

原创 【拍摄写真被坑】2025.7购买了的拍摄服务,但他没有达到规定的服务水平,要求退款,他不退怎么办

通过这些步骤,你可以更有条理地解决与摄影馆的纠纷,并争取到应有的权益。

2025-07-17 20:12:35 483

原创 【Linux编译】./build.sh: line 17: $‘\r‘: command not found

./build.sh: line 17: $'\r': command not found

2025-07-16 16:15:08 1052

原创 【git】在Linux系统下clone指定分支

tws/polaris.git Cloning into 'polaris'... fatal: Remote branch sdk.5.6.0_remove_minios not found in upstream origin 13353:/mnt/e/Project_Code/07Jabra_Polaris/08_polaris_remove# fatal: the remote end hung up unexpectedly remote: remote: ====================

2025-07-16 11:12:51 938

原创 【问题排查流程总结】tmd2635模块开发中断异常,排查心得

摘要: 在TWS耳机tmd2635传感器模块开发中,出现中断异常触发问题。经排查发现中断函数中clear操作位置影响触发结果,但根本原因是驱动代码意外修改了阈值寄存器值。通过注释干扰代码确保阈值写入正确,最终解决了中断异常。本次调试经验表明,对于复杂问题需系统性从头排查,而非零散测试。

2025-07-15 22:47:43 359

原创 demo.py,in <module> from Crypto.Cipher import AES ModuleNotFoundError: No module named ‘Crypto‘

Linux系统提示pip未找到时,需先安装pip工具。若使用Python 2.7,需运行python2.7 --version确认版本,再通过curl命令安装对应pip版本,最后执行pip install pycryptodome。建议升级到Python 3,使用pip3 install pycryptodome更安全。若安装失败,可通过系统包管理器安装python-pip。包含Python 2.7卸载方法和迁移到Python 3的建议。

2025-07-15 22:21:11 495

原创 人生经历反思和总结

【摘要】2025年7月,作者反思了理财与消费观念,指出培训机构常借知识付费"割韭菜",强调通过向专业人士学习、阅读和实践获取真知。社会经验显示职场充满营销陷阱,提醒警惕美女销售等诱导消费手段,建议购物前多方比价。作者秉持"正难则反"原则,主张理性消费、资产积累,立志在复杂环境中坚守正道,实现财务自由。(149字)

2025-07-07 09:21:38 163

原创 【嵌入式开发知识点整理】

摘要: 音响充电温度范围设为2~47℃,主要保护电池安全(防极端温度损坏)、优化充电效率并符合行业标准。NTC温度计算可通过数据手册查表或公式转换(Rt=REXP[B(1/T-1/T0)]),涉及对数运算。区分恢复温度与放电温度(如-11~-7℃保护区间)类似硬件消抖机制,避免误触发保护,确保系统稳定运行。(150字)

2025-06-18 11:33:21 689

原创 【Markdown编辑器教程】

本文介绍了Markdown编辑器的基本使用方法和新增功能。Markdown是一种轻量级标记语言,适用于快速格式化文本。文章详细说明了如何创建标题、改变文本样式、插入链接与图片、生成列表和表格等基本操作。此外,还介绍了新增功能,如代码高亮、图片拖拽、KaTeX数学公式、甘特图、UML图表和流程图等。文章还提供了快捷键的使用指南,帮助用户更高效地编辑文档。最后,介绍了如何导出和导入Markdown文件,方便用户在不同平台间进行创作和分享。

2025-05-09 11:38:28 783

原创 【概念解读】开发中遇到的概念阶段

许可证(License)是在版权(Copyright)基础上,由作者指定以明确使用者权利的法律文件。它允许作者在法律规定之外,进一步界定他人使用其作品的条件。软件许可证是一种特殊类型的许可证,作为软件作者与用户之间的格式合同,它规定了用户使用软件或其源代码的权利,以及作者的相关义务。常见的软件许可证包括GPL、BSD许可证和私权软件许可证等,每种许可证都有其特定的使用条款和限制。

2025-05-09 11:34:44 184

原创 【FreeRTOS】1、学习FreeRTOS创建任务

栈就是一块空闲的内存。

2025-05-09 11:32:35 163

原创 【key】key事件枚举

这段代码定义了一个名为key事件枚举

2025-03-08 15:04:28 1209

原创 J01C95无线麦克风项目遇到的问题记录

Airoha串口与开发板接线不对,要RX—RX,TX—TX。我错误将src文件夹写成scr名字,导致编译器找不到该文件夹。需要拔掉开发板子uart的rx线,只保留GND和TX。3.重新打开串口工具再试一下。2.将串口工具路径换成英文。

2025-03-06 22:29:15 298

原创 C语言初始化结构体变量5种方式

初始化结构体可以避免使用未初始化的垃圾数据,从而减少潜在的错误。这种方法类似于第一种方法和第二种方法的结合体,既能初始化时赋值,也可以不考虑顺序。C99标准新增了一个特性,可以在定义结构体时使用= { 0 }的方式直接将结构体所有成员初始化为零。在定义结构体时,可以直接赋值给结构体的各个成员。总之,根据具体情况选择最适合的初始化方法,可以提高代码的可读性和维护性。这种方法适用于任何值的初始化,但可能有性能开销。这种方法适用于C++,可以避免手动逐个赋值。这种方法适用于C++,可以简化初始化过程。

2025-03-01 10:08:03 1130

原创 20250223C语言指针与应用

【代码】20250223C语言指针与应用。

2025-02-23 17:29:41 228

原创 TUSB422 MCU 软件用户指南

TUSB422 基于 MCU 的软件原生支持 TI 的 MSP-EXP432P401R 和 MSP-EXP430FR5969 MCU LaunchPad 评估模块(EVM),并与 TUSB422 EVM 配合使用。该软件通过 I²C 控制 TUSB422,并通过 GPIO 控制 VBUS 的独立电源模块。有关如何将 EVM 与 LaunchPad 设置的详细信息,请参阅 TUSB422 EVM 用户指南。USB Type-C 端口控制器接口规范,Rev 1.0,Ver 1.1。

2025-02-12 16:24:26 1508 2

空空如也

空空如也

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

TA关注的人

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