- 博客(14)
- 收藏
- 关注
原创 Mini2440移植uC/OS-II笔记(三).elf文件解读
预处理 (Pre-processing)main.c被处理,头文件展开。汇编 (Compilation): 编译器将其变成汇编,然后变成.o此时全是碎片,地址未定。链接 (Linking)ld将main.oos_core.ostartup.o等聚在一起。根据link.ld脚本,决定大家住哪(0x30000000解决所有的符号引用。生成 Program Headers,规划内存布局。此刻,mini2440_rtos.elf 诞生了。加载 (Loading)
2025-12-25 21:20:09
682
原创 Mini2440 Keil jlink烧录问题(一)Cannot Load Flash Programming Algorithnm
显示Cannot Load Flash Programming Algorithnm!之后显示Error: Flash Download failed -ARM920T。
2025-12-23 22:31:00
152
原创 Mini2440 启动流程分析
S3C2440 SOC芯片内部集成了一块容量极小的RAM,大小只有4KB。在官方数据手册中,这块 SRAM 被称为。它的作用正如其名——它是系统启动的一块垫脚石。因为 4KB 太小,跑不了操作系统,甚至跑不下完整的 u-boot,但它足够用来完成最基本的硬件初始化和代码搬运。排座位。通过链接脚本(.lds),start.s被安排在了最前面,main.c紧随其后。假如最终生成的.binstart.s的机器码(关看门狗、设栈、跳转)。main.c的机器码(配置寄存器、循环)。
2025-12-16 15:59:10
963
原创 Mini2440移植uC/OS-II笔记(二)数据结构分析+
本文深入分析了uC/OS-II实时操作系统的核心数据结构体系。系统采用静态内存池管理方式,通过Tbl数组提供固定存储空间,利用FreeList和List分别管理空闲和活动任务资源。关键的位图索引(Grp/Tbl)实现了O(1)时间复杂度的任务调度,而等待列表则复用位图逻辑处理资源阻塞情况。文章详细阐述了各组件在任务生命周期中的协作机制,并举例说明了从任务创建到资源等待的完整数据流转过程。uC/OS-II的设计体现了嵌入式系统"静态规划、逻辑复用"的哲学,其紧凑高效的数据结构体系是保证实时
2025-12-11 15:24:03
571
原创 Mini2440移植uC/OS-II笔记(一)数据结构分析
uC/OS-II通过位图算法实现O(1)时间复杂度的任务调度,核心由5个表组成:静态查找表OSMapTbl和OSUnMapTbl用于加速位运算;动态状态表OSRdyGrp和OSRdyTbl记录就绪任务;OSTCBPrioTbl存储任务控制块指针。系统通过将优先级拆分为组和位索引来更新就绪表,并利用查找表快速定位最高优先级任务。例如优先级11的任务就绪时,会设置相应位标志,调度时通过两次查表即可确定最高优先级,最后通过索引获取任务控制块完成切换。这种设计确保了高效的任务调度。
2025-12-11 14:35:26
1005
原创 Mini2440 vscode wsl openocd调试细节
本文详细介绍了在WSL+VSCode环境下搭建Mini2440裸机调试环境的配置方法和实用技巧。关键点包括:必须使用gdb-multiarch和.elf文件,需手动初始化SDRAM控制器,并提供完整的launch.json配置示例。调试技巧涵盖寄存器操作、变量修改、程序暂停、汇编调试和高级监视功能,解决了嵌入式开发中的常见问题。这套方案结合了Linux命令行和Windows GUI优势,虽然初期配置复杂,但能提供强大的底层调试能力,帮助开发者高效进行裸机开发。
2025-12-06 17:16:03
614
原创 Mini2440 调试环境搭建(wsl + vscode + openOCD)
本文介绍了基于WSL2+OpenOCD搭建Mini2440开发板(S3C2440芯片)的调试环境。硬件连接需注意J-Link供电问题,必须外接电源。配置步骤包括:准备OpenOCD配置文件(mini2440.cfg等)、安装J-Link驱动、启动OpenOCD服务器。在VSCode中配置launch.json调试文件,通过GDB连接OpenOCD服务器进行调试。调试过程中需要两次F5操作,第一次初始化CPU环境,第二次进入main函数断点。该方法虽然比Keil复杂,但适用于小众芯片开发,具有更强的灵活性。
2025-12-06 01:08:26
1167
原创 Mini2440 流水灯实验(wsl+docker)
本文详细介绍了在Mini2440开发板上实现LED裸机开发的完整流程。项目使用Docker封装交叉编译环境,包含启动代码(startup.S)完成硬件初始化、主程序(main.c)控制LED流水灯效果。关键技术点包括:1) 通过启动代码完成看门狗关闭、时钟设置、内存控制器初始化等硬件配置;2) 实现代码从SRAM/NOR到SDRAM的搬运;3) 使用Makefile自动化构建系统;4) 通过dnw工具实现程序烧录。项目为后续RTOS开发奠定了基础,并提供了完整的开发环境配置、代码编写和烧录步骤说明。
2025-11-28 01:00:06
562
原创 .data .text .bss段都是什么意思
本文通过旅行团队的比喻解析了ELF可执行文件的五大核心段:.text(代码指令)、.data(已初始化变量)、.bss(未初始化变量)、.rodata(常量)和.comment(编译信息)。重点探讨了动态链接相关的段,如.interp(动态链接器路径)、.plt/.got(函数跳转表)等,解释了它们如何实现延迟绑定和共享库调用。文章还介绍了.init/.fini等程序初始化段的作用,并通过WSL环境下的编译验证展示了实际ELF文件结构。最后指出ELF文件通过精密的段划分实现了指令与数据分离、空间优化和动态链
2025-11-25 15:55:18
600
原创 Mini2440 开发环境搭建(WSL2 + VScode)
适用环境: Windows + WSL2 (Ubuntu)核心目标: 在 Windows 上通过串口控制板子,在 WSL 里编译代码并通过 USB 烧写。
2025-11-24 21:51:41
886
原创 OMEN 笔记本 BIOS 更新失败排查指南:没U盘的情况,解决 “磁盘空间不足”
电脑重启后,保持电源适配器插入,再次运行 HP System BIOS Update Utility 程序。由于 EFI 分区中旧的备份已被清除,程序现在应有足够空间来暂存新文件,并会正常提示您重启以完成 BIOS 更新。
2025-11-15 18:15:10
875
原创 STM32学习笔记#3-面向对象编程思维
对于LED所用的GPIO口,PIN引脚等等进行宏定义,注意宏定义需要放在程序头部,否则会报错。然后将之前程序中的代码用宏定义取代,更改接口或是编程出错,都能很快修改,具备基础的项目思维。假如需要控制100个LED呢,不可能把每一组宏定义都写出来,非常容易出错也不容易管理,这简直是宏定义地狱。不仅要定义结构体,后续的函数调用中也要加上函数指针指向结构体,不清楚这部分的可以看一下b站郝斌C语言【郝斌】-C语言自学入门教程(182集全 | 最新高清修复版)_哔哩哔哩_bilibili。
2025-02-04 15:59:55
493
原创 STM32学习笔记#2-Keil调试
解决方案应包括以下步骤:1. 在Keil中设置断点,单步执行代码。2. 使用外设查看器检查GPIO寄存器的状态。3. 观察led_on和led_off执行时的寄存器、电信号波形变化。4. 对比预期与实际值,发现GPIOC的设置错误。5. 检查代码中的GPIO_WriteBit参数,确认是否正确。同时,可能需要解释如何利用观察窗口或内存窗口直接查看变量和寄存器的值,以及如何利用逻辑分析仪查看引脚电平变化波形,从而辅助确认问题所在。
2025-02-04 01:05:17
1868
原创 STM32学习笔记#1-回调函数
既然你正在学习STM32标准库(Standard Peripheral Library),我会用标准库的架构设计三个回调函数的例子,由浅入深,帮助你理解回调函数在底层开发中的应用逻辑。通过这些例子,你可以看到回调函数在标准库中如何实现硬件事件与用户逻辑的解耦。:如果回调函数可能被多个中断同时触发,需考虑数据保护的机制(如关闭中断或使用互斥锁)。中断发生时自动调用回调函数,实现**硬件事件与业务逻辑解耦**。:串口接收数据时触发中断,通过回调函数处理接收到的数据。串口接收中断触发时,通过回调函数。
2025-02-03 18:17:37
1873
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅