- 博客(12)
- 收藏
- 关注
原创 FreeRTOS队列源码解析
FreeRTOS队列机制与临界区保护分析:本文分析了FreeRTOS的队列实现机制与临界区保护策略。队列通过Queue_t结构体管理存储区、等待任务列表等属性,采用xQueueGenericCreate创建队列空间。入队/出队操作通过临界区保护确保数据一致性,当队列满/空时任务会进入阻塞状态。信号量、互斥量等均基于队列实现,其中递归互斥量支持嵌套获取。FreeRTOS提供三种临界区保护方式:中断屏蔽(最强保护)、调度器挂起(仅防任务抢占)和互斥量(支持优先级继承),分别适用于不同场景的数据保护需求。
2025-07-08 11:16:04
636
原创 FreeRTOS任务调度机制
FreeRTOS任务管理机制解析: FreeRTOS通过任务控制块(TCB)管理任务,TCB包含栈指针、状态链表、优先级等关键信息。任务创建时,xTaskCreate函数会根据栈增长方向(向上/向下)动态分配TCB和任务栈空间,其中Cortex-M采用向下增长方式。任务栈从堆空间分配但逻辑上作为栈使用,需考虑栈扩展方向与TCB内存位置的匹配问题。系统维护多个状态链表(就绪、阻塞等),任务创建后通过prvAddNewTaskToReadyList加入就绪链表。任务删除时需暂停调度并从链表中移除,延时操作
2025-07-08 11:09:34
853
原创 FreeRTOS调度器启动流程
本文分析了嵌入式系统中FreeRTOS内核启动流程。从main函数开始,系统依次进行HAL库初始化、时钟配置、外设初始化,然后调用osKernelInitialize()设置内核就绪状态。在MX_FREERTOS_Init()中创建用户定义的线程和同步对象。关键阶段osKernelStart()调用vTaskStartScheduler()创建空闲任务(优先级0),初始化调度变量,并启动系统节拍定时器。调度器通过xPortStartScheduler()启动首个任务,该函数与硬件架构相关。整个过程确保在安全
2025-06-30 16:54:33
401
原创 Linux驱动开发基础
字符设备是指只能一个字节一个字节读写的设备(读写大小:单字节),不能随机读取设备内存中的某一数据,读取数据需要按照先后数据(读写顺序:顺序)。
2024-01-25 09:31:29
1026
原创 开发板无法nfs挂载根文件系统
开发板能够ping通ubuntu,而且可以执行tftp功能,但是在通过nfs挂载根文件系统的时候挂载失败。比较老一点的u-boot仅支持nfs v2,而Ubuntu 22.04默认把nfs v2服务和udp端口关闭了,导致文件系统挂载失败。
2023-12-26 10:18:25
1308
2
原创 开发板Ping不通Ubuntu解决办法
如果出现了网络问题的情况,基本上问题主要出现在两个地方。一个是虚拟机VMware设置,一个是Ubuntu和开发板的网络配置。
2023-12-12 17:20:02
1688
原创 Linux系统Uboot的移植
我们在启动一个Linux系统时,就是按照以上的顺序来依次启动。系统先运行bootload。这段bootloader程序会初始化DDR等外设(虽然I.MUX6ULL的DDR初始化是由内核的内部bootroom完成的),然后将Linux kernel的程序拷贝到内存(DDR)中执行,然后启动内核。
2023-11-26 10:29:14
1046
2
原创 I.MUX6ULL使用SD卡和EMMC两种方式烧写程序
关于I.MUX6ULL的开发板,我们通常可以使用两种方式来烧写裸机程序和linux系统。它们各有各的优势与缺点。但究其本质,SD卡和EMMC都是相同的,他们都是一种存储设备。只不过它们一种通过软件来烧写程序,一种通过硬件连接来烧写程序。
2023-11-14 15:59:51
743
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅