MCU小型调度OS之一:由ODM项目引起跨平台、跨系统的兼容、可移植

项目背景:        

       最近公司在做一个ODM项目,需要把公司内部的协议栈交互与加密方式封装成一个SDK,提供给ODM厂家调用,达到其他公司只做适配BSP,而核心业务由我们自己掌控,达到ODM厂家更换任意平台芯片,任意RTOS或者逻辑,我们都能适配,因为公司协议栈内部有交互(设备与APP之间有命令交互和阻塞等待超时等场景),因此需要制作一个跨平台的调度机制,又能保证性能和兼容性,如下图:

 架构思想:

        

        如上图,每个任务就是一个节点,每个节点里面包含了taskId、status、timer以及function等变量,你可以理解为这是操作系统的每个任务的结构体,在节点里包含着一个定时器的结构体(为了计时每个任务的动作,实现型号量以及超时机制,这个下节详细解释),调度思想如下面两点:

        1、在主程序里,while(1)循环内,不断对task链表进行查询,查询每个task节点当前的状态,如果ready,就运行,如果休眠就next,如下图1。

        2、设置个1ms一次定时中断,作为tickets,在中断处理函数里,依次对所有的timer定时器链表节点,查询,修改状态,如果是任务附带的timer,如果出现超时,在定时器超时回调函数里,顺便把任务节点的状态给修改了,从而实现了虚拟的时间片轮询,如下图2。

图1

图2

跨平台兼容性:

        该调度OS可以跨任意平台、芯片,如果从一个平台移植到其他平台,修改点很少,即可无缝融合进其他系统,又可自己作为一套调度系统,如下三种情况:

        一、如果新平台方案,是mcu(裸机),不带任何架构,只需要把该架构移植过去即可,修改点如下:1、配置新平台1ms定时的计时器;2、在程序开始,初始化任务链表以及定时器;3、在主程序while(1)里面加上OSRun(),反复循环调用即可,如下图。

        二、自带或者使用芯片自带的调度机制,只需要在while(1)内加上OSRun即可,不影响默认的架构,如下图

        三、如果该芯片自带的freeRTOS或者其他调度系统,只需要单独开启一个任务线程,定时调用运行OSRun即可。

        有些同学不明白的没关系,下面章节会重点分析该系统的实现,本章节只是大概普及一下该系统的使用场景以及使用方式。

        调度系统下载链接如下: https://download.csdn.net/download/moonlinux20704/12073629

猜你喜欢

转载自blog.csdn.net/moonlinux20704/article/details/103805174
今日推荐