嵌入式工程狮的升级打怪之路

[DHO-H7]初始化及任务调度系统TIMOS

DHO-H7基于开源示波器OSC509的硬件,主要芯片有stm32H7B0以及MXT2088等。在一章,我主要介绍H7系列示波器的任务初始化以及基于定时器的伪实时操作系统TIMOS。

初始化模块

我们摒弃了常规的初始化模式,而是使用attribute关键字的特性了——其在预处理阶段即可将所有的需要初始化的代码“归类到”特定的section段中,并且这些初始化结构体都是连续的,所以我们只需要根据其初始化优先级逐优先级进行初始化即可。
详情请参考另一篇文章:[attribute关键字]section在初始化中的妙用 – www.hawkjgogogo.com

TIMOS伪实时操作系统

为什么说是伪实时呢?
TIMOS是基于定时器魔改的一种调度方式,主要利用的就是定时器每隔1ms触发一次中断,优先级最高的会抢占,此时cpu会自动保存现场,跳转到更高优先级。
而常规的实时操作系统使用的是在.s文件中手动保存现场,将R0-R15压入堆栈,等到再次切换回来的时候再弹出,也就是所谓的上下文切换,并且可以人工操作切换线程。

所以说,本质上我认为TIMOS是一种在裸机程序与RTOS中间的一种调度方式:对于不同优先级,根据NVIC对TIM的设置,高优先级优先调度,低优先级等高优先级处理结束后再运行;对于相同的优先级,会根据时间片依次运行,类似于RTOS中时间片的操作。

当我们需要加入新的任务,我们只需要在新任务.c文件中注册任务TIMOS_TASK_REGISTER(任务入口函数,任务优先级,任务时间片)。

在初始化的最后,TIMOS会被初始化,类似于调度器。
在初始化定时器后,循环遍历task的section段并将所有的同一优先级任务使用单向链表连接起来,在任务运行的时候触发定时器中断,在中断处理函数中便会遍历链表查找到需要运行的任务并执行:


已发布

分类

来自

标签:

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注