- 博客(104)
- 收藏
- 关注
原创 [杰理]蓝牙状态机设计与实现详解
这段代码实现了一个蓝牙应用的状态机,用于管理蓝牙应用在不同生命周期状态下的行为。状态机根据接收到的状态和意图(intent)执行相应的初始化、启动、暂停、恢复和销毁操作。这个状态机实现了蓝牙应用的基本生命周期管理,包括初始化、启动、后台运行、恢复和销毁。通过配置宏和意图参数,它支持多种应用场景和功能组合,是一个典型的嵌入式系统状态机设计。根据不同的启动意图(
2025-06-04 19:23:43
706
原创 [杰理]充电逻辑
这段代码是一个处理5V充电LDO(低压差线性稳压器)插入事件的函数,主要用于管理耳机或类似设备在连接充电器时的行为。它包含了一系列条件检查和状态切换操作,以确保设备在充电时能正确处理各种情况,如断开不必要的功能、进入充电模式、处理TWS连接等。记录充电事件并通知系统禁用不必要的功能(如传感器、ANC等)以节省电量根据当前应用状态和配置决定是否进入充电模式处理TWS连接状态,确保主设备在充电时能正确处理连接防止低电量时插拔充电器导致的充电异常问题。
2025-06-04 17:21:06
732
原创 [C]C语言日志系统宏技巧解析
这种设计使得日志系统更加模块化,不同的源文件可以使用不同的标签,便于调试和维护。这在日志系统中很常见,用于为不同模块添加标识前缀。在某些情况下,你可能需要对已经是宏的参数进行字符串化。这个字符串通常会作为日志前缀,例如在之前的。是另一个宏时,也能正确展开为对应的字符串。这段代码定义了一个名为。如果需要多级展开,使用。
2025-06-04 16:43:37
411
原创 [C]深入解析条件式日志宏的设计原理
这种日志宏设计在嵌入式系统和大型项目中非常常见,可以灵活控制日志输出的级别和内容,同时最小化对性能的影响。的宏,用于在满足特定条件时输出信息级别的日志。这段代码定义了一个名为。"温度: %d°C"
2025-06-04 16:41:17
893
原创 [C]memset给static修饰的数组赋值
修饰的数组(无论是全局变量还是局部静态变量)在内存中占据固定位置,其生命周期为程序的整个运行期。修饰的数组赋值,但需要注意赋值的时机和内容。可以用于初始化或重置这类数组的内存内容。:若需在程序运行中动态重置数组,分配的内存本质上都是连续内存块,在C语言中,可以使用。
2025-05-30 11:33:27
182
原创 [git]忽略.gitignore文件
导致的忽略规则失效问题。确认操作前的文件状态,避免意外变更。是一个 Git 命令,主要用于。执行时需注意路径正确性,并结合。
2025-05-29 14:26:23
753
原创 【C】箭头运算符
是C语言中通过指针访问结构体成员的标准方式,常用于访问结构体中的变量或函数指针。它本质上是“解引用指针 + 点号访问”的简写形式,让代码更简洁易读。是一种通过指针访问结构体成员的方法,称为。
2025-05-29 10:18:53
351
原创 【git】 pull + rebase 或 pull + merge什么区别?
是两种整合远程分支更新的方式,其核心区别在于如何处理提交历史。时提示冲突,需解决后继续;同样假设本地分支有提交。
2025-05-27 18:15:36
471
原创 【git】git rebase 和 git pull区别?
是两个用于整合远程分支更新的命令,但它们的实现方式和适用场景有显著区别。选择哪种方式取决于团队协作习惯和项目需求。多数情况下,个人开发分支推荐使用。会修改提交历史,导致与远程分支冲突。过程中出现冲突,需手动解决后执行。如果提交已推送到远程仓库,使用。),可能影响团队其他成员。同样假设本地分支有提交。
2025-05-27 18:01:57
494
原创 【C】怎么判断函数是否内联?
函数内联(Inline Expansion)是编译器优化技术,它会将函数体的代码直接复制到调用处,而非通过常规的函数调用机制。但实际日志中,两条指令连续且都指向同一行,说明代码被直接嵌入到调用点,因此判断为。编译器通过这种方式减少函数调用开销,提高执行效率。根据汇编指令和注释,推测。
2025-05-26 10:31:23
143
原创 【批处理脚本】怎么注释
是批处理脚本中最常用的注释方式,用于提升脚本的可读性和可维护性。合理使用注释可以帮助快速理解脚本功能,尤其在复杂脚本或多人协作场景中非常重要。这些注释不会被系统执行,仅用于向用户解释脚本的功能、步骤或注意事项,提高脚本的可读性。在脚本中插入对代码的解释,方便自己或他人理解脚本逻辑。当需要暂时停用某条命令时,可在其前加。将其注释掉,避免删除后难以恢复。REM [注释内容]
2025-05-26 10:31:00
263
原创 【音频】drc 限幅器、多带限幅器、压缩器、多带压缩器
限幅(Limiting):当音频信号超过设定的阈值(Threshold)时,强制将其音量限制在预设的最大值(天花板),避免信号削波(Clipping)导致失真。压缩比(Ratio):输入音量与输出音量的比例(限幅器通常采用极高压缩比,如 10:1 或∞:1,即超过阈值后完全限制)。阈值(Threshold)、压缩比(Ratio)、启动时间(Attack)、释放时间(Release)(与限幅器类似)。启动时间(Attack Time):信号超过阈值后,限幅器开始工作的速度(如 0.1ms-100ms)。
2025-05-24 17:16:51
828
原创 【C】函数未定义或者函数找不到原型实现
当编译器提示找不到extern void sys_timer_init(void);的函数原型时,通常有以下几个可能原因:头文件未包含问题:如果函数定义在某个头文件中,而当前源文件没有包含该头文件,编译器无法找到原型。示例:若sys_timer_init定义在timer.h中,需要在源文件添加:c#include “timer.h” // 自定义头文件用双引号函数未定义问题:extern声明仅告知编译器函数存在,但未实际定义。
2025-05-24 16:53:18
541
原创 【C】中断处理函数模板
如果你的处理器架构或开发环境不同(如 AVR、MSP430 等),可能需要调整中断属性的具体语法。某些编译器(如 IAR)使用不同的方式声明中断函数,例如:#pragma vector=EXCEPTION_vect。((interrupt(“”))) 这一 GCC/GNU C 语法,我推测你需要一个使用该语法的中断处理函数模板。((interrupt(“IRQ”))) 是 GCC 特有的语法,用于告诉编译器这是一个中断处理函数。/* 假设这是异常分析的实现。/* 假设这是日志刷新的实现。
2025-05-24 16:39:23
415
原创 demo板和评估板(EVB)什么意思
ATE(Auto Test Equipment) 在测试工厂完成. 大致是给芯片的输入管道施加所需的激励信号,同时监测芯片的输出管脚,看其输出信号是否是预期的值。SLT(System Level Test) 也是在测试工厂完成,与ATE一起称之为Final Test. SLT位于ATE后面,执行系统软件程序,测试芯片各个模块的功能是否正常。更适合量产或定制化场景。开发新功能(如浮点运算、传感器驱动)时,demo 板的标准配置能确保软件兼容性,减少硬件相关的调试成本。可能是特定厂商(如杰理科技)定义的。
2025-05-24 11:22:45
306
原创 [iic]iic四参数函数设备地址,寄存器地址,数据内容,数据长度
某些I2C设备不需要指定寄存器地址,或寄存器地址已通过其他方式配置(如通过设备配置命令)。通过理解I2C通信的本质,你可以根据SDK提供的接口灵活适配,实现对QMA6100P的正确操作。不支持重复起始,可能需要拆分操作并手动控制SCL/SDA引脚。I2C协议中,从机地址的最低位是读写位(0=写,1=读)。在两次事务之间(写寄存器地址 → 读数据),需要发送。,需要先指定要读取的寄存器,再获取数据。许多I2C设备(如QMA6100P)内部有。你观察到的函数参数数量差异源于。如果SDK提供了类似。
2025-05-24 10:54:43
779
原创 【C】【杰理】printf无法打印浮点数
如果确认printf的格式化字符串正确(包含%f占位符),且其他文本(如temp0 =)已输出但数值部分显示为0.00000000NaNINF0.0M_Gint01e-6%f0.000000±INFNaNM_G=9.8int32_t\n9.80665frawlsb_1g通过以上步骤,可逐步定位并解决浮点数输出异常的问题。
2025-05-24 10:41:37
1151
原创 【I2C】高效实现I2C寄存器读取函数
这个函数严格遵循了上述流程,确保能够正确读取I2C设备中的寄存器数据。系列函数,实现从I2C设备指定寄存器读取数据的功能。根据你提供的软件I2C驱动代码,我来帮你实现。这个函数需要结合现有的。
2025-05-22 17:44:41
235
原创 【三轴加速度计】QMA6100P数据手册解析
QMA6100P是一款三轴加速度传感器,采用表面贴装小型芯片封装,集成了加速度传感器与信号调理ASIC,可检测倾斜、运动、冲击和振动,适用于屏幕旋转、计步、睡眠监测、游戏和个人导航等移动及可穿戴智能设备。该器件基于先进的高分辨率单晶硅MEMS技术,结合定制设计的14位ADC ASIC,具有低噪声、高精度、低功耗和偏移校准等优势,支持I2C和SPI数字接口。QMA6100P的加速度传感器电路由三轴传感器和专用支持电路组成,用于测量设备的加速度。施加直流电源后,传感器将敏感轴方向的加速度转换为电荷输出。
2025-05-22 14:42:35
1078
原创 【三轴加速度计】QMA6100P驱动
这个驱动实现了对QMA6100P传感器的完整控制,支持所有数据手册中描述的功能,可直接用于嵌入式系统开发。支持从1.25Hz到1600Hz的输出速率,配置带宽同时设置低通滤波器。
2025-05-22 14:41:24
282
原创 【单片机】如何产生负电压?
以下是对知乎文章《单片机中常用的负电压是这样产生的!负电压本质是,需通过电源或储能元件(如电容、电感)构建电势差。核心方法是利用电源串联或能量转换,使目标点电势低于参考地。
2025-05-21 19:58:59
797
原创 【音频】如何解析mp3文件
(将MP3压缩数据转换为原始PCM音频)和(将PCM数据通过音频设备输出)。MP3文件由多个**帧(Frame)**组成,每帧包含固定时长的音频数据(通常为26ms)。解析MP3需要先读取帧头,然后根据头信息解码音频数据。
2025-05-21 16:53:23
1159
原创 【音频】wav文件如何解析编码格式(压缩格式)?
要确定一个WAV文件的编码格式,可以通过以下几种方法实现,包括使用操作系统自带工具、专业音频软件或编程解析文件头信息。
2025-05-21 16:44:46
1017
原创 【flash】如何区分flash是哪家的
通过Flash ID的厂商段(0xEF)确定为华邦产品,设备类型段(0x60)确定容量为1MB,版本段(0x14)匹配W25Q80的型号定义,因此可以准确判断日志中的SPI NOR Flash为华邦W25Q80(1MB容量。通过解析这3字节的数值,可以唯一确定芯片的厂商和具体型号。
2025-05-21 14:30:55
324
原创 C语言中三个点代表什么含义...
这意味着函数可以接受不定数量和类型的参数,类似于标准库中的。来接收任意数量的参数,这正是标准库中实现格式化输出的基础。),并从可变参数中提取对应类型的值。提供的宏可以实现灵活的参数处理。是C语言中表示可变参数的语法,结合。在C语言中,函数参数列表中的。需要解析格式字符串(如。
2025-05-20 16:53:45
295
原创 [条件编译]通过宏实现编译的使用教程
而非定义具体数值。这种用法在嵌入式系统和条件编译中非常常见,主要用于控制代码的编译路径。控制代码是否被编译,实现灵活的功能裁剪和平台适配,特别适合资源受限的嵌入式系统开发。若多个源文件依赖同一宏,需确保在所有编译单元中定义一致。检查它是否被定义,从而决定是否编译某段代码。这类宏会在编译时被直接替换为对应的值。这种不带值的宏定义是C语言中常用的。这类宏不定义具体值,仅作为。,用于标记功能开关。这种设计的核心优势是。
2025-05-19 10:16:58
310
原创 如何写汇报
通过以上方式,既能展现对代码的深度理解与技术贡献,又能体现系统性思考和团队协作意识,让汇报更具专业性与感染力。的方式,既能体现专业性,又能突出个人贡献。在汇报鞋底平台代码熟悉情况时,建议采用。
2025-05-19 09:43:39
231
原创 [AI]ai列表
ChatGPT文心一言海螺A1讯飞星火Perplexity秘塔AI搜索腾讯元宝KIMI智能助手通义千问心流(iFlow)360AI搜索天工夸克智谱清言TXYZ。
2025-05-18 13:45:39
72
原创 测试adc
测量adc提前应该提前校准,多次重复上电由芯片内部算法计算出一个稳定值,将这个稳定值写入寄存器,烧录失败,由于上拉电阻,负载太高烧录不上去,
2025-05-08 18:43:34
116
原创 怎么坐飞机坐高铁
4.在车次对应站台刷身份证进去,内侧大屏上会再次显示对应地标颜色,根据地面对应的颜色,找到自己的所在车厢数字,(如遇时间着急的特殊情况下,可以不顾车厢先上车,再慢慢找到自己的车厢)3.有行李托运情况下,根据机场大屏找到所在航班相应人工柜台,拿着身份证前往柜台可以直接办理托运,以及取得机票,同时会获得托运小票,保存好,后期取行李需要用到;注:充电宝,电脑,雨伞,易燃物品,喷雾类用品,含酒精类等诸多物品不可托运,不放心的话可对自己的物品有针对的上网再次确认下;
2025-05-07 17:59:10
2500
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人