- 博客(12)
- 收藏
- 关注
原创 润芯微rk3588固件分区配置文件获取
我们可以选择编译对应的SDK之后会生成相应的parameter.txt文件,以下是以rk3588为例生成的parameter.txt文件。当我们需要手动更新某个部件的镜像,比如kernel镜像,可以使用润芯微开发工具单独更新,官方提供的没有做固件分区。我们编译产生的只有txt文件,通过润芯微开发工具导出的才会生成config.cfg文件。
2026-09-04 22:53:04
176
原创 嵌入式高效消息队列:无malloc线程安全方案
这篇文章介绍了一个适用于嵌入式环境的消息环形缓冲区实现方案。该方案具有以下特点: 内存管理:使用静态数组或用户提供的缓冲区,避免动态内存分配(malloc/free) 线程安全:提供原子操作接口钩子,在单核MCU上可通过关中断实现临界区保护 通用性:支持任意结构体大小的消息拷贝 高效性:实现了基本的环形缓冲区操作(push/pop)和状态查询功能 实现包含头文件(msg_ringbuf.h)和源文件(msg_ringbuf.c),提供了初始化、消息入队/出队、缓冲区状态查询等功能。示例代码展示了如何在GD3
2026-05-17 22:04:24
21
原创 无依赖自注册驱动框架实现
本文提出了一种基于标准C语法的轻量级驱动框架,具有无依赖、自注册和自动遍历的特点。框架通过编译器特定的section属性将驱动结构体放置在连续内存区域,无需修改主循环或初始化列表。驱动描述结构体包含名称、操作函数集和私有数据指针,使用DRV_REGISTER宏实现自注册。系统启动时通过遍历链接器段完成驱动初始化,主循环中可调用轮询函数。该方案不依赖特定操作系统,仅需标准C语法和链接脚本配置,适用于嵌入式系统开发。
2026-05-17 21:57:17
20
原创 RT-thread线程创建成功但未执行原因分析
排查各种配置发现没有异常怀疑是线程调度问题,在RT-thread中,有一个单独的线程main被执行,但是在源代码中没有释放MCU,导致main线程一直被占用,而自己创建的两个线程的优先级较低未进入运行态,一直被main抢占。基于RT-thread创建两个线程,一个采用动态创建的方式,一个采用静态创建的方式,创建任务成功,但是两个线程均未执行。在创建线程成功之后任务并没有被执行。
2026-05-10 15:25:11
23
原创 STM32启动流程浅析~
将 0x0800 0000 映射到 0x0000 0000,即从内部 FLASH 启动,那么内核会从地址 0x0800 0000 处取出堆栈指针 MSP 的初始值,从地址 0x0800 0004 处取出程序计数器指针 PC的初始值。我们知道的复位方式有三种:上电复位,硬件复位和软件复位。在STM32复位后,会延迟4个时钟周期,将BOOT引脚的状态锁存到锁存器中,芯片根据锁存器的数据决定启动的位置。(2)从地址 0x0000 0004 处取出程序计数器指针 PC 的初始值,该值指向复位后执行的第。
2026-05-08 21:13:20
229
原创 Bootloader跳转App触发异常问题分析
在STM32的bootloader中,跳转app之前执行了__disable_irq(),进入app之后重新配置了中断向量表,但为什么还是会响应中断?我需要解释这个现象。答:__disable_irq()通过设置CPSR中的I位来禁止中断。在ARM架构中,CPSR是一个重要的寄存器,其中I位用于控制中断的使能状态。当I位被设置时,CPU将不再响应中断请求如果之前开启了相关外设的中断功能,在调用__disable_irq()函数关中断后,这时如果有中断触发,那么不会去进行中断响应。
2026-05-05 19:07:14
347
原创 全局变量与局部变量之间的差异
全局变量的内存分配是静态的(编译时确定),而局部变量通过栈指针动态管理,这种差异导致了它们的所有行为区别。全局变量在程序加载时由操作系统分配内存(通过ELF/PE文件中的.data/.bss段信息)生成不同的目标代码(全局变量用绝对地址,局部变量用栈偏移)全局变量在编译时被记录在符号表中,分配固定内存地址。局部变量编译时生成栈指针(SP)相对寻址代码。局部变量在函数调用时通过栈指针动态分配。全局变量地址被最终确定(填入符号表)编译器通过语法分析识别变量声明位置。局部变量信息不参与链接。
2026-05-05 08:16:32
28
原创 BUG之地址打印
指定输出宽度为 16 位十六进制数字(即 64 位),但实际有效数据只有 32 位(8 个十六进制数字),因此输出会形如。会从堆栈中只读取 4 字节数据(或根据调用约定可能读错位置),导致。(通常 4 字节),数值上可能巧合对应,但严格来说仍是不规范的。是专门用于打印指针的格式说明符,要求参数类型为。,只输出低 32 位的十六进制值。中,指针占 8 字节,而。是地址的低 32 位。(其他指针会隐式转换)。(通常是十六进制,前导。,宽度由地址位数决定)。的完整 64 位地址。通常只占 4 字节。
2026-05-04 18:28:28
48
原创 解决Ubuntu无法使用root登录的问题
1、登录普通用户 2、使用vi编辑器打开/etc/pam.d/gdm-autologin并注释掉auth required pam_succeed_if.so user != root quiet_success 3、使用vi编辑器打开/etc/pam.d/gdm-password并注释掉auth required pam_succeed_if.so user != root quiet_success 4、注销用户重新用root即可解决!
2024-05-23 12:58:16
1104
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅