- 博客(44)
- 收藏
- 关注
原创 RT-Thread 和 FreeRTOS 嵌入式实时操作系统对比
RT-Thread来自中国,功能比较全面,有丰富的中间件和组件,比如文件系统、网络协议栈,可能适合需要复杂功能的项目。FreeRTOS是MIT许可证,修改和闭源比较自由,而RT-Thread有Apache和商业许可,可能更适合需要商业支持的公司。内核架构方面,RT-Thread可能更模块化,支持动态加载模块,而FreeRTOS更静态,配置灵活但可能需要手动调整。功耗管理方面,RT-Thread可能有更细致的电源管理策略,适合电池供电的设备,而FreeRTOS需要自己实现或依赖第三方库。
2025-04-03 12:13:56
344
原创 串口中断接收与环形缓冲实例(apollo3 blue plus)
if(cnt == 1)//UTC(Coordinated Universal Time)时间,hhmmss(时分秒。else if(cnt == 9)//UTC日期,ddmmyy(日月年)格式。else if(cnt == 7)//地面速率。else if(cnt == 8)//地面航向。else if(cnt == 5)//经度。else if(cnt == 3)//纬度。
2025-03-31 16:36:28
765
原创 在中断服务程序(ISR)中直接调用阻塞式 xQueueSend()导致系统崩溃,解决方法
/ 优先级数值需大于 configMAX_SYSCALL_INTERRUPT_PRIORITY。通过以上方法,可以在中断中安全地使用队列,确保系统的实时性和稳定性。// 3. 触发任务切换(如果有更高优先级任务就绪)// 处理队列满的情况(如记录错误)// 2. 发送数据到队列(中断安全方式)// 队列已满,记录错误或采取恢复措施。// 原错误代码(在中断中使用阻塞式API)// 正确代码(使用中断安全API)// 处理队列创建失败。// FreeRTOS 队列句柄。// 1. 清除中断标志。
2025-03-28 15:16:44
824
原创 Apollo3的GPIO中断回调函数中直接调用FreeRTOS的 xTimerStart() 会导致系统崩溃解决方法
的作用:在中断上下文中安全触发任务切换,确保高优先级任务及时执行。关键原则在中断中必须使用FromISR后缀的 API。始终检查并传递到。确保中断优先级配置正确,避免破坏 FreeRTOS 内核。
2025-03-28 14:49:58
664
原创 xQueueSendFromISR() 和 xQueueSend()应用对比
在 FreeRTOS 中,和是用于向队列发送数据的两个关键函数,但它们的用途、行为和使用场景有显著差异。
2025-03-26 11:13:38
777
原创 ambiq apollo3 ADC实例程序注释
include "am_mcu_apollo.h" // Apollo MCU 外设寄存器定义和HAL库#include "am_bsp.h" // 板级支持包(引脚定义、LED函数等)#include "am_util.h" // 通用工具函数(如printf重定向)//// 全局变量//// ADC设备句柄,用于操作ADC实例// ADC采样计数信号量(ISR与主程序同步)
2025-03-25 16:56:52
770
原创 参考apollo3 FLASH样例改写实际应用的接口函数(带磨损均衡处理)
define WEAR_LEVELING_END_ADDR (START_PAGE_ADDRESS + WEAR_LEVELING_PAGE_NUM * FLASH_PAGE_SIZE - 1) // 结束地址。#define FLASH_PAGE_SIZE AM_HAL_FLASH_PAGE_SIZE //每页大小为8K字节,
2025-03-25 15:10:26
679
原创 结构体变量与指针变量相异处
可变性方面,结构体变量的大小和内容可以改变,而指针变量本身的大小固定,但指向的内容可以变。比如指针可以重新指向其他内存,而结构体变量本身的大小由其成员决定,可能需要动态调整,但通常结构体大小是固定的。结构体变量是存储结构体类型数据的变量,而指针变量则是存储内存地址的变量。内存分配方面,结构体变量通常在栈上自动分配,除非动态申请,而指针变量本身在栈上,但指向的内存可能在堆上。首先,存储内容方面,结构体变量直接保存结构体的数据成员,而指针变量保存的是地址。函数传递的时候,结构体变量传的是副本,指针传的是地址。
2025-03-24 12:17:33
550
原创 ambiq apollo3 Flash实例程序注释
include "am_mcu_apollo.h" // Apollo3芯片的硬件抽象层头文件//!Flash操作函数表(BootROM函数跳转表)// 各成员为BootROM中预置的Flash操作函数地址(通过逆向工程或厂商提供)((int (*)(uint32_t, uint32_t))0x0800004d), // flash_mass_erase: 整片擦除。
2025-03-20 17:40:43
564
原创 一个基于 Apollo3 芯片 和 FreeRTOS 的软件定时器应用实例
pdMS_TO_TICKS:将毫秒转换为 FreeRTOS Tick 数,需确保 configTICK_RATE_HZ 在 FreeRTOSConfig.h 中正确定义(例如 1000Hz 对应 1ms/Tick)。使用 am_hal_sysctrl_sleep(AM_HAL_SYSCTRL_SLEEP_DEEP);pdMS_TO_TICKS(TEMP_READ_PERIOD_MS), // 转换为Tick数。
2025-03-19 14:25:35
916
原创 BLE(低功耗蓝牙)通信从发送到手机成功接收需要的时间
在BLE(低功耗蓝牙)通信中,MTU=247字节的场景下,如果MCU向手机发送一包200字节的音频数据,数据包总长度 = 3B(头) + 200B(数据) + 3B(CRC) = 206B。:BLE主从机通信的时间间隔(默认7.5ms~4s,典型值为20ms~100ms)。:BLE 5.0支持2M PHY(速率2Mbps)或1M PHY(速率1Mbps)。ACK包长度=14B(固定),传输时间 = (14 × 8) / 2M ≈。BLE数据包包含协议头(3B)、有效载荷(≤244B)和CRC(3B)。
2025-03-19 11:34:27
266
原创 apollo3 blue plus调试函数接口打印uint64_t数据问题
//*****************************************************************************//! @file am_util_stdio.c//!//! @brief A few printf-style functions for use with Ambiq products// This is part of revision release_sdk_3_2_0-dd5f40c14b of the AmbiqSuite Dev
2025-03-18 17:57:27
836
原创 typedef uint8_t bdAddr_t[6]; 和结构体 dmAdvCb_t结合的妙用
含义定义一个名为bdAddr_t的新类型,它是一个包含 6 个uint8_t元素的数组。等价于uint8_t[6],但通过typedef提高了代码可读性。用途通常用于表示6字节的固定长度二进制数据蓝牙 MAC 地址(BLE 设备唯一标识符)以太网 MAC 地址其他需要 6 字节地址的通信协议。示例// 声明并初始化bdAddr_t:通过typedef定义 6 字节数组类型,提高代码可读性,专用于 MAC 地址等场景。dmAdvCb_t。
2025-03-18 16:20:24
729
原创 apollo3蓝牙MAC地址出处
///!//!//!/////*!*/else/*!*/else/*!*//*!*/pMsg++;pMsg++;break;break;break;break;
2025-03-18 16:09:35
511
原创 .gitignore 文件用于 Git 应忽略的文件夹的格式
gitignore文件用于指定 Git 应忽略的文件或文件夹的匹配规则。:每个忽略规则单独占一行。空行会被忽略。以开头的行是注释(除非用\#转义)。:匹配任意字符(除了路径分隔符**:匹配多级目录(如a/**/b匹配a/ba/x/ba/x/y/b?:匹配单个字符。开头:仅匹配项目根目录下的文件(如/build仅忽略根目录下的build文件)。结尾:仅匹配目录(如logs/会忽略logs目录,但不会忽略名为logs的文件)。!开头:排除已忽略的文件(优先级高于忽略规则)。
2025-03-14 11:24:43
355
原创 Windows 系统中安装 make 命令工具
MSYS2 是一个集成了 GNU 工具链的 Windows 开发环境,支持。MinGW-w64 是 Windows 下的 GNU 工具链,包含。下载安装程序并运行,按照提示安装(默认路径为。如果提示关闭终端,重新打开后再次运行。在 Windows 系统中安装。目录添加到系统环境变量。下载 MinGW-w64。下载并安装 MSYS2。若直接下载,选择包含。进入 MinGW 的。
2025-03-13 10:55:03
491
原创 博客摘录「 sscanf函数使用详解」2023年6月5日
输出结果:converted=3, year=2019, month=11, day=03"%04d%02d%02d"是用来解析字符串的格式,%表示格式转换的开始,d表示转换为一个整数,04作为d的修饰,表示这是一个长度为4位的整数,不足4位时以0补齐。
2025-03-12 18:23:22
320
原创 apollo3 blue plus录音的opus音频到播放记录
/ %02X 表示大写十六进制,固定2位。OPUS文件数据每一帧长度为88个字节,帧开头00 00 00 50,如下面二帧数据,保存BIN文件时,必须保证每帧数据完整,否则在转成PCM文件会出错。input/output:输入 Opus 比特流和输出文件(如 PCM)。下图出错,就是opus文件有帧不完整时,就会出现转换pcm文件时报错。channels:声道数(1/2)。
2025-03-12 18:20:33
887
原创 串口通信与SEGGER_RTT通信对比
选择串口(UART)当需要长距离通信(配合RS-485)对接传统设备或低成本硬件量产阶段需避免调试器依赖选择SEGGER RTT当开发阶段需要高速数据传输(>100KB/s)系统资源紧张(节省GPIO和CPU占用)需实时捕获崩溃现场数据终极方案开发阶段使用RTT加速调试,量产固件保留UART用于现场维护,两者通过条件编译切换。
2025-03-11 18:37:53
529
原创 apollo3录音文件格式说明
结合这个ftdi_bin_decoder.py脚本文件,以及SDK的C文件,可总结录音文件格式是基于 TLV 编码的 Apollo 设备数据解码支持两种操作模式:离线解码 和 实时记录解码数据帧结构:| 帧头(2B) | 长度(2)| 类型(2)| 包序号(2)| 时间戳(4) | 数据载荷(N) |"""from docopt import docopt # 命令行参数解析。
2025-03-11 17:06:48
594
原创 apollo3录音到wav播放解决方法
ePDMClkSpeed = AM_HAL_PDM_CLK_1_5MHZ, //PDM采样频率,1.5M转换后是16K音频频率。.eClkDivider = AM_HAL_PDM_MCLKDIV_1, //主时钟分频设置为1,不分频。.ePDMClkSource = AM_HAL_PDM_INTERNAL_CLK, //使用内部时钟源。.ePCMChannels = AM_HAL_PDM_CHANNEL_LEFT, //录音声道选择。在PCM音频(BIN)文件加上WAV文件头,
2025-03-11 15:06:02
527
原创 Opus 音频文件实例解释
→ 0x0138 = 312 样本(48kHz下对应 6.5ms)→ 时间戳位置(此处为起始位置)→ 表示此页为连续流的一部分。→ Ogg 格式版本 0。→ Opus 头版本 1。
2025-03-11 12:03:53
175
原创 麦克风录音转换成wav文件格式定义说明
WAV 文件是一种基于 的音频文件格式,广泛用于存储未压缩的音频数据(通常是线性脉冲编码调制,PCM)。WAV 文件是一种基于 的音频文件格式,广泛用于存储未压缩的音频数据(通常是线性脉冲编码调制,PCM)。
2025-03-10 10:08:02
697
原创 单片机串口发送浮点数方法
直接将浮点数的二进制数据通过串口按字节发送,接收端需知道数据格式(如IEEE 754单精度浮点)和字节序(大端/小端)。// 假设UART发送字符串函数为 UART_SendString(char* str)// 假设UART发送函数为 UART_SendByte(uint8_t data)// 注意:需确保发送和接收端的字节序一致(如均为小端):不同平台可能使用大端或小端存储,需确保发送端和接收端字节序一致。// 定义共用体,方便将float转为字节数组。:选方法2(字符串),适合人机交互或日志输出。
2025-03-07 16:56:20
423
原创 apollo3关键内存分配管理radio_task.c注解
{ 280*2, 8 } // 560字节buffer x8(长包/OTA数据,Apollo3支持扩展广播)// 广播配置(支持Apollo3扩展广播)+ 16*8 + 32*4 + 64*6 + 280*2*8) // 各池实际buffer空间。(WSF_BUF_POOLS*16 // 4个池的管理结构。// 初始化射频接口。// AES-128/256(硬件加速)/* 初始化WSF操作系统抽象层(Apollo3使用FreeRTOS) */
2025-03-07 09:33:48
298
原创 apollo3 blue plus使用FreeRTOS说明
1、apollo3 官方提供的SDK,需要使用vTaskDelay时,需要打开FreeRTOSConfig.h文件宏定义如下图:
2025-03-06 16:18:49
120
原创 apollo3 am_util_ble.c文件说明
c复制c复制常量发射模式主要用于射频测试,例如: 函数是 Ambiq Apollo3 Blue Plus 芯片提供的一个实用工具函数,用于在射频测试模式下控制 BLE 芯片的常量发射模式。这对于设备的射频性能测试和认证过程至关重要。它包含了一些与蓝牙低功耗(BLE)硬件交互的实用函数。: 这些函数是硬件抽象层(HAL)未涵盖的 BLE 功能。HAL 是一个抽象层,通常用于隐藏硬件的复杂性,提供一个通用的接口供上层应用调用。然而,某些特定的硬件功能或测试操作可能未被 HAL 包括,因
2025-02-25 15:49:38
670
原创 apollo3 blue plus调试和下载接线说明
3、 EVB使用1.8V时 将jlink 设置在1.8VIO模式 从EVB上1.8V电源和GND 为JLINK 供1.8V 电源共GND。4、DEBUG 信息可以将GP41连接到JLINK的SWO。1、将Jlink SCK 连接到GPIO 20。打开相关工程项目,进入DEBUG状态后,如下图操作,2、将Jlink SDIO 连接到GPIO21。
2025-02-25 10:59:52
169
原创 ambiq apoll3 blue plus 蓝牙服务UUID
厂商预留高位 | 固定段(如 0x11E1)| 固定段(如 0x9073)| 厂商自定义低位 |蓝牙服务UUID:E0262760-08C2-11E1-9073-0E8AC72E1001。结构如下:E0262760-08C2-11E1-9073-0E8AC72E XXXX。设备向主机推送数据的接口,UUID 通常为服务 UUID + 偏移量(如。),UUID 基于服务 UUID + 偏移量(通常是。在 BLE(低功耗蓝牙)协议中,用户向设备发送数据的接口(
2025-02-24 17:24:17
255
原创 Ambiq Apollo3 音频驱动录音的 am_hal_pdm_config_t 配置参数的注释说明
eClkDivider = AM_HAL_PDM_MCLKDIV_1, // 主时钟分频器设置为1,即不分频。.eLeftGain = AM_HAL_PDM_GAIN_0DB, // 左声道增益设置为0dB。.eRightGain = AM_HAL_PDM_GAIN_0DB, // 右声道增益设置为0dB。.ui32DecimationRate = 64, // 降采样率设置为64。
2025-02-24 11:38:43
573
原创 mbiq apollo3 blue plus 音频PDM CLK 6M相当于标准音频采样频率多少
通常情况下,PDM 信号需要经过降采样(decimation)处理,才能转换为常见的 PCM(脉冲编码调制)音频格式,例如 44.1 kHz 或 48 kHz 等标准音频采样率。然而,PDM 采样时钟频率并不直接等同于标准音频采样频率,而是需要通过特定的处理转换为标准音频采样率。因此,Apollo3 Blue Plus 的 PDM 接口虽然支持 6 MHz 的采样时钟,但实际输出的标准音频采样率需要根据具体的应用场景和降采样算法来确定。→ 将高频采样率降至标准音频频率(如 16kHz、44.1kHz)。
2025-02-24 10:45:33
669
原创 SBC蓝牙音频的标准编解码器,1秒钟最大数据量多大?
SBC(Subband Codec)是蓝牙音频的标准编解码器,其最高支持16-bit/48kHz的采样率,最大码率可达328kbps。因此,SBC音频编解码器在最大码率328kbps下,1秒钟的最大数据量为41000字节。数据量(字节)=8328×1000=41000 字节。数据量(字节)=8码率(kbps)×1000。
2025-02-21 17:34:25
119
原创 蓝牙5.4在音频性能上有哪些提升
LC3能够在低比特率下提供高质量的音频传输,同时支持多种采样率(如8 kHz到48 kHz)和位深度(如16位、24位),适用于从语音到高质量音乐的各种音频类型。通过改进信号处理和抗干扰能力,蓝牙5.4能够在复杂的无线环境中保持更稳定的音频连接,减少音频中断或失真的情况。蓝牙5.4支持高达24位96 kHz的高解析度音频流媒体传输,能够提供更丰富的音频细节和更高的音质表现。这些改进使得蓝牙5.4在音频传输方面更加高效、稳定且低延迟,为用户带来了更优质的无线音频体验。
2025-02-21 17:30:17
173
原创 蓝牙5.0常见的音频编解码器
蓝牙5.0支持多种编解码器,用户可以根据设备支持情况选择适合的编解码器。一般来说,SBC是最低标准,而aptX HD、LDAC和LHDC则提供更高的音质。
2025-02-21 17:29:39
309
原创 Apollo3 Blue Plus支持的音频格式
Apollo3 Blue Plus支持通过PDM(脉冲密度调制)接口采集音频,输出的原始音频格式可以是单声道、16kHz采样率、16位采样精度的PCM数据。在某些示例中,Apollo3 Blue Plus可以将采集到的音频数据编码为OPUS格式,这是一种高效的音频压缩格式,适用于低带宽传输。因此,Apollo3 Blue Plus的音频输出格式具有较高的灵活性,开发者可以根据具体需求选择合适的格式进行处理和传输。当与蓝牙音频设备配合时,音频数据可以按照蓝牙音频协议(如SBC、AAC等)进行编码和传输。
2025-02-21 17:26:27
198
原创 AmbiqSuite-SDK-v3-2-0 SDK中主要文件框架
如果需要具体工程的编译与烧录步骤,可进一步说明开发环境(如 Keil、GCC 或 IAR)。基于 FreeRTOS 的蓝牙通知服务(ANCS)实现,展示 BLE 连接与低功耗优化。安全引擎(Crypto)和内存管理(Memory Manager)提供板级支持包(BSP),包括引脚定义、外设初始化代码等。编译器脚本(如 GCC、IAR、Keil 的链接脚本)多传感器(如加速度计、温度)数据采集与实时显示。芯片专用外设驱动(如 UART、SPI、I2C)用于调试和烧录(需配合 J-Link 硬件)。
2025-02-13 12:12:06
916
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人