搜索
bottom↓
回复: 14
打印 上一主题 下一主题

小小调度器功能增强

[复制链接]

出0入0汤圆

跳转到指定楼层
1
发表于 2022-7-15 17:27:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     关于小小OS的详细说明,可以去amobbs上看,也可以看本文末尾的附件资料。如果还没了解过这个OS,可以参照ucos, FreeRtos理解,就是解决MCU多任务运行问题。MCU多任务OS的核心就是任务切换的处理,ucos, FreeRtos都是要保存上下文,需要用很多RAM和很多时间。小小OS切换任务时不需保存那一堆特殊功能寄存器,只需要在退出任务的地方做个标识,下次运行这个任务函数时,根据标识直接跳到上次退出的地方接着运行。因此小小OS代码简单,资源要求非常少,除了不能像ucos, FreeRtos那样在中断里切换任务外,其它功能都可实现
     原版的小小OS只实现了ucos的一部分功能,但理解了多任务系统的原理和小小OS的运行机制后,可按实际需要自行增加功能


#define SUSPEND_TASK_A(TaskID) timers[TaskID]=0xff//使其它任务休眠,例如按暂停键停止加热,在按键任务里调用SUSPEND_TASK_A(TASK_HEAT)

#define SUSPEND_TASK_B() return 255        //使本任务休眠,确定不需要本任务运行了可以退出任务调度

#define IS_RUNNING_TASK(TaskID) ((timers[TaskID] != 0xff) ? 1 : 0)//查询某个任务是否在运行

#define WAKEUP_TASK_A(TaskID) \
        timers[TaskID]=0x0; \
        SET_WAKE_UP_FLAG(TaskID)//唤醒某个任务,并使这个任务从头开始运行

#define WAKEUP_TASK_B(TaskID) \
        timers[TaskID]=0x0//唤醒某个任务,并使这个任务从上次退出的地方接着运行


#define SUSPEND_TASK_C() {STATE=A; return 0xff;}//使本任务休眠,唤醒后接着运行

#define IS_WAKED_UP(N, M) if(wake_task_##M==0) \
        { \
                switch(STATE){ STATES##N;} \
        } \
        else \
        {STATE=0x0; wake_task_##M=0;}//上面的wake_task_##M指的是wake_task_0/1/2...,是全局变量,用于标记任务唤醒时需不需要从头开始运行

#define _SS_W(N, TaskID) static unsigned char STATE=0; \
                        IS_WAKED_UP(N, TaskID)//在每个任务的开头,判断任务是否需要从头运行,还是接着上次退出的地方运行


原版的信号量处理方式,我认为不太合理,应该仿照ucos的做法
#if USE_SEM
#define SEM_TASK_NUM        2
uint8_t sem_1_task[SEM_TASK_NUM];//定义一个数组,元素个数是使用此信号量的任务个数
#define WaitSem(A,n,TaskID) do{STATE=A; sem_task[n]=TaskID;} while(0);
#define SendSem(sem) do{timers[sem_1_task[0]]=0x0; timers[sem_1_task[1]]=0x0;} while(0);
#endif

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

2
 楼主| 发表于 2022-7-15 17:29:43 | 只看该作者
如有指正请电或WX13631645567

出0入90汤圆

3
发表于 2022-7-15 17:51:13 | 只看该作者
兄弟不错哟

出0入0汤圆

4
发表于 2022-7-15 17:58:42 | 只看该作者
学习学习下,以前的下载一直没认真看过。

出0入42汤圆

5
发表于 2022-7-15 19:06:45 | 只看该作者
感谢楼主分享

出0入0汤圆

6
发表于 2022-7-15 20:16:07 | 只看该作者
先看一下涨涨知识

出140入115汤圆

7
发表于 2022-7-18 09:50:31 | 只看该作者
多谢分享,可以加个应用例程吗?

出0入76汤圆

8
发表于 2022-7-18 15:08:07 | 只看该作者
不错,为LZ点赞

出0入0汤圆

9
发表于 2022-7-21 13:57:15 | 只看该作者
不放到gitee上吗

出0入92汤圆

10
发表于 2022-7-21 20:28:16 | 只看该作者
几天前也刚为自己整理的版本加上任务停止 启动,一系列测试还没完

出95入100汤圆

11
发表于 2024-3-16 16:22:20 | 只看该作者
好资料,我记得还有个群呢,今天想起来,打开QQ,找不见那个群了,那位大神告诉一下群的名字,好像加回来

出95入100汤圆

12
发表于 2024-3-16 17:06:33 | 只看该作者
xyb852 发表于 2022-7-21 20:28
几天前也刚为自己整理的版本加上任务停止 启动,一系列测试还没完
(引用自10楼)

你在小小调度器那个群里面吗?怎么加回那个群?

出0入92汤圆

13
发表于 2024-3-16 23:13:20 | 只看该作者
lhj200304 发表于 2024-3-16 17:06
你在小小调度器那个群里面吗?怎么加回那个群?
(引用自12楼)

那个群解散了

出95入100汤圆

14
发表于 2024-3-17 09:23:18 | 只看该作者

好的,谢谢。我问了 mset 他不在那个群里面,可惜了。

出0入0汤圆

15
发表于 2024-3-28 11:40:57 | 只看该作者
小小调度器好像和tiny os类似
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-2 19:56

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表