本帖最后由 轻若尘 于 2015-11-6 15:23 编辑
先来说说内核都有那些特点,首先实现了类似UCOS的延时功能,可以给每个任务设置不同的周期,调用延时函数后挂起任务不阻塞CPU,除此之外每个任务还可以主动放弃CPU使用权,等到其他任务都执行后再切回来,任务的数量没有限制,任务也没有优先级每个任务都是执行完后主动让出CPU的控制权。另外也实现了信号量,邮箱和消息队列现在还在考虑要不要加,我初步的想法是可以通过信号量实现任务与任务之间,以及任务与中断函数之间的同步,任务间的数据传输可以用全局变量,所以就没必要加邮箱和消息队列了。用户可以自己设置任务的数量,系统保留两个任务,一个作为空闲任务,一个作为统计任务计算CPU的使用率。整个内核总共也就几百行代码,任务通过函数指针切换不额外占用CPU时间,代码全部用C编写,不需要移植,只需要加入自己的工程中即可,使用非常简单方便。
说一下写这个OS的初衷,叫程序架构可能更合适点,毕竟没有像UCOS、RT-Thread、FreeRTOS等RTOS那么完善。我就姑且叫它OS吧,我给他起了名字叫eTOS。很多时候我们可能会计较纠结一个问题,要不要在产品中使用RTOS,可能需要处理的事情对实时性并没什么要求,但要处理的事情却比较的多,使用传统的前后台系统所有要处理的事情都放在一个循环中就比较困难了,有时候不得不阻塞CPU,这样就会影响其他任务的处理。很多时候我们需要的仅仅是一个调度器来管理任务,并不需要一个完整的RTOS。我就遇到过好多人在产品中使用RTOS就是出于这个目的。最近工作不多,空闲时间比较富裕,就想到自己写个小内核,从构思到完成代码花了不到一个星期的时间。
我这里先说下写这个OS的一些思路,一些核心的代码我贴出来大家一起讨论,我再测试一段时间再把整个工程贴出来。 和RTOS一样,每个任务也都有一个自己的任务控制块TCB:
现在直接上工程,工程是基于STM32芯片完成的,但系统可以用在任何单片机上,不需要移植,对芯片RAM也没有要求(RAM会影响任务的数量)。
我现在只是实现了一些必须的功能,主要是让系统比较简洁,不过多占用资源,只是在一些不是很复杂的场合使用,并不是要取代RTOS。
用户和一通过eTconfig.h配置任务数量、信号量的数量、是否使用信号量、任务名长度以及是否使用统计任务(统计任务开机会先占用1S获取空闲任务最大计数值,可以在调试中开启,调试完后关闭即可)。
工程包括task.c、timer.c和task_ipc.c三个.文件和一些.h文件。使用时只需要将文件加入工程在用户代码中包含#include "user_api.h"文件,调用系统提供的API函数就可以。
|