- 博客(52)
- 收藏
- 关注
原创 C语言实现的Bootloader
以下是一个简单的bootloader实现,用于从备份地址(0x08040000)将应用程序复制到运行区(0x08004000),页大小为4KB。这个实现适用于STM32系列微控制器,使用了标准外设库。
2025-04-03 15:20:37
121
原创 bootloader+APP中,有些APP引脚无法正常使用?
主控芯片GD32F415,多次测试给PB13引脚给高电平,均为成功。经过分析得知,是PB13引脚在。
2025-04-02 14:52:40
317
原创 C/C++中的条件编译指令#if
if是 C/C++ 中的预处理指令,用于条件编译。它允许根据预定义的条件来决定是否编译某段代码。#if通常与#define#ifdef#ifndef#else和#endif等指令一起使用。
2025-03-24 14:18:58
288
原创 ASCII字符编码表简介
通过 C 语言,可以轻松实现字符与 ASCII 值之间的转换,以及基于 ASCII 值的字符操作(如大小写转换、字符类型判断等)。掌握 ASCII 值的应用是理解字符处理的基础。
2025-03-20 09:50:27
951
原创 C语言结构体闪存数据对齐方法
使用alignof和sizeof检查对齐和大小。使用_Alignas或显式指定对齐。使用调整对齐(需谨慎)。检查指针地址确认对齐。这些方法确保结构体在闪存中的存取是对齐的,避免未对齐访问的问题。
2025-03-14 17:00:20
238
原创 单片机FreeRTOS系统中,CPU计算的延时函数
CPU 计算延时函数适用于短时间的忙等待延时,但会浪费 CPU 资源。在 FreeRTOS 中,建议优先使用或实现延时。如果需要精确的短时间延时,可以使用空循环实现,但要注意防止编译器优化。
2025-03-12 16:45:54
835
原创 单片机字符串换行符使用说明
在单片机中,处理字符串时,通常需要根据具体的通信协议或显示设备的要求来确定换行符的使用方式。是常见的换行符表示方式,但具体使用哪种换行符取决于你使用的协议或设备的要求。例如,如果你通过串口发送这个字符串到某个设备,设备可能需要。是换行(Line Feed)。是回车(Carriage Return),是 Windows 系统中的标准换行符。在单片机中,字符串的换行通常使用。后面换行,那么你可以将其改为。例如,如果你有一个字符串。
2025-03-12 16:38:35
236
原创 FreeRTOS系统中如何保障一段程序完整执行完
互斥锁:防止高优先级任务抢占。关闭中断:防止中断打断。关闭调度器:防止任务切换。提高任务优先级:防止其他任务抢占。任务通知:同步任务执行。队列:同步任务执行。事件组:同步多个任务。软件定时器:在指定时间执行代码。任务挂起和恢复:挂起其他任务。临界区:防止任务切换和中断打断。根据具体需求选择合适的方法,确保关键代码段完整执行。
2025-03-11 15:46:18
424
原创 taskENTER_CRITICAL(); 的作用
是 FreeRTOS 中的一个宏,用于进入临界区。临界区是一段代码,在这段代码执行期间,任务不会被其他任务或中断打断。具体来说,:调用该宏后,系统会禁用所有中断(或部分中断,取决于具体实现),以确保当前任务不会被中断打断。:在临界区内,任务可以安全地访问共享资源(如全局变量、硬件寄存器等),而不用担心被其他任务或中断干扰。:在临界区内,FreeRTOS 的任务调度器也会被暂时禁用,防止任务切换。
2025-03-11 15:39:19
406
原创 校验和-计算函数 CalChecksum代码及分析
该函数通过累加数据块中所有字节的值,并取最低 8 位作为校验和,实现了一个简单的校验和计算。适用于对数据完整性要求不高的场景。
2025-03-10 11:00:44
400
原创 FDEV_SETUP_STREAM 的作用
是 AVR Libc(用于 AVR 单片机的 C 标准库)中的一个宏,用于创建一个自定义的文件流(FILE类型),并将其与用户定义的输入/输出函数关联。通过这种方式,可以将标准库函数(如printfscanf等)重定向到自定义的硬件设备(如串口)。
2025-03-07 17:58:57
360
原创 fprintf与printf的区别及使用场景
使用printf时,输出直接显示在屏幕上。使用fprintf时,可以指定输出到文件或其他流(如stdout或stderr例如,将fprintf的输出定向到标准输出时,效果与printf相同:\n");这行代码与\n");效果一致。
2025-03-07 16:25:20
278
原创 把uint32_t每个字节存到4个uint8_t变量中
在C语言中,你可以通过位操作将一个uint32_t类型的变量拆分成四个uint8_t类型的变量。
2025-03-05 09:42:11
354
原创 C语言数组复制方法
在C语言中,复制一个数组的值到另一个数组可以通过多种方式实现。最常见的方法是使用循环逐个复制数组元素,或者使用标准库函数memcpy。
2025-03-03 17:11:11
284
原创 C语言只读关键字const使用详解
const关键字用于声明只读变量或指针。const可以应用于变量、指针、函数参数等,以提高代码的安全性和可读性。使用const可以帮助编译器进行优化,并防止意外的修改。
2025-02-28 15:42:27
165
原创 问题记录:xQueueSend队列总是为空
uxQueueMessagesWaiting和uxQueueSpacesAvailable均为0,队列写入失败
2025-02-27 11:25:16
291
原创 FreeRTOS中configUSE_QUEUE_SETS是用来配置什么的
FreeRTOS 中,队列集合是一种高级特性,允许任务同时等待多个队列或信号量,并在其中任何一个队列或信号量有数据时唤醒任务。
2025-02-27 10:34:57
297
原创 二阶巴特沃斯滤波器原型及代码
二阶巴特沃斯滤波器设计的关键在于选择合适的截止频率和元件值,以实现所需的滤波特性。/** 函数名:butterworth_lpf* 描述 :二阶巴特沃斯滤波器原型* 输入 :now_input输入数据, buffer中间数据缓存,parameter滤波参数* 返回 :滤波之后的数据*//* x(n) 保存 *//* y(n) 保存 */
2025-02-25 16:00:07
179
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人