- 博客(11)
- 收藏
- 关注
原创 从0构建一个基于STM32F103的类FreeRTOS系统内核 -8 时间片轮询
静态创建任务支持优先级支持阻塞支持时间片轮询接下来,我们就需要探讨一些根据有挑战性的任务,即,我们需要实现类似于FreeRTOS中常用的通信量-队列、信号量等任务,接下来的章节,我们再来一一实现(挖坑)
2025-09-06 22:31:45
329
原创 从0构建一个基于STM32F103的类FreeRTOS系统内核 -7 阻塞态实现
在第五章,我们实现了简单的阻塞切换,即一个任务阻塞,就移除它在就绪优先级位图中的状态,但这显然存在很多的问题和不方便,因此,本章我们将完善任务的阻塞态,采用一些新的机制来实现阻塞态。
2025-09-02 21:49:57
797
原创 从0构建一个基于STM32F103的类FreeRTOS系统内核 -5阻塞
本节,为了提高CPU的利用率,我们引入了阻塞的概念,即一个任务不需要此时运行的时候,就主动或者被动的进入一定时间的阻塞,让出CPU的资源。为此,我们定义了一个成员变量,以及更新它的中断服务函数SysTick中断,以此来进行相应处理。但我们可以轻松的发现,我们OS这样的阻塞机制过于简单,如:不支持相同优先级的阻塞,只要这个优先级上的任务阻塞了,整个优先级就完了。任务的调度过于简单,不支持添加任意调度后续,我们在引入优先级的概念后在解决阻塞遗留下来的问题。
2025-09-01 17:59:21
860
原创 从0构建一个基于STM32F103的类FreeRTOS系统内核 - 3 任务
本文介绍了RTOS中任务创建的核心实现,主要包括任务结构体TCB的定义和任务初始化流程。TCB结构体包含栈顶指针、任务节点、堆栈指针和任务名称等关键信息。任务创建通过xTaskCreateStatic函数实现,其中核心是prvInitialiseNewTask函数,负责初始化TCB成员变量和任务栈。任务栈初始化由pxPortInitialiseStack完成,它会在栈中预置寄存器信息(如xPSR、PC、LR等)和参数空间,为后续任务切换时恢复上下文做好准备。整个过程通过静态内存分配方式实现任务创建,为RTO
2025-08-19 22:51:56
1154
原创 从0构建一个基于STM32F103的类FreeRTOS系统内核 - 2 链表
由多个链表项构成的链表,每个链表项都挂载了一个任务。除此之外,还有一个MINI链表,但迷你列表项仅用于标记列表的末尾和挂载其他插入列表中的列表项,用户是用不到迷你列表项的,通常在在 list.h 文件中。维护一个链表的有序性是至关重要的,因此,我们不仅需要尾部插入的函数,还需要实现一个执行按升序或者降序插入指定位置的函数。接下里介绍的数据结构就是包含上述两个数据结构的东西的完整链表,即。的前/后链表项指针均指向自己,因为初始化链表时只有尾链表项。可以理解成专用于表示链表的尾节点的数据结构,即链表的尾巴。
2025-07-07 22:06:07
959
原创 从0构建一个基于STM32F103的类FreeRTOS系统内核 - 1 工程创建
准备工作:(1) 一块正点原子的STM32精英开发板,主控是STM32F103ZET6。具体参数见图:在进行正式的RTOS书写之前,我需要验证这个开发板是否能够正常下载和运行程序。为此,我需要首先就是下载这个开发板的部分资料,网址如下正点原子精英版资料;给的百度网盘,这点绝对差评!
2025-07-02 22:08:11
752
原创 正点原子 IMX6ULL移植OV5640驱动
使用的是 正点原子的IMX6LL+ 1024 x 600的屏幕系统是自己根据busybox移植的根文件系统Linux内核是根据NXP官方结合正点原子教程修改而来 设备树也是。
2025-06-15 14:11:31
857
1
原创 正点原子IMX6ULL 编写虚拟串口 卸载驱动阶段 报错及解决过程
这个函数,但我们并没有这个函数,所以释放的时候就会指向空指针,而且NXP的原版驱动中。也没有提供对应的项,算是一个bug吧。我们仿照别人有的驱动代码,填充这个操作函数。均是后续添加进入内核的,重新复现错误,输出如下打印信息。当初,韦老师视频中随意设置了一项,所以会进入。学习正点原子驱动时的LINUX内核版本是。最后,别忘了复原内核的代码。出现问题,结合我们驱动程序中。再次加载运行,问题就解决了。命令管理自己的内核版本。
2025-06-05 22:15:33
301
原创 正点原子IMX6ULL安装g_zero.ko驱动
这点比较坑,还得自己的试一下如何安装。首先,内核方面,我们需要在编译内核的时候编译一些模块。此时,我参考了正点原子的将USB OTG使用大容量U盘的文档,发现。也是同样的道理,那么,我们有理由推测,我们的USB ZERO驱动,也需要一个。,在前面章节中,我们需要回环功能有一个这样的程序,所以,我们注册它,后注册。因为是模块编译,因此,我们需要到对应的文件夹下将模块移植到开发板上。的功能性模块驱动,而且后续教程中将USB OTG做声卡的实验。的功能驱动,于是,在对应的文件夹中找到了。然后,按下面的顺序启动。
2025-05-23 22:08:32
334
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅