找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

小小调度器V2.0简易版源码与分析

查看数: 11892 | 评论数: 20 | 收藏 17
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2018-8-24 23:37

正文摘要:

本文作者:Gthgth 注意:小小调度器V2.0 作者:  兔子、smset 在作者和“兔子”大虾的努力下,小小调度器迎来一个激动人心的新版本。(2.0正式版,为了大家方便学习才有V2.0简易版) 在作者和兔 ...

回复

ID:899151 发表于 2025-1-24 09:57
不是真的2.0吧,
ID:1130560 发表于 2024-11-16 08:31
大佬们,多任务操作同一硬件,譬如串口1,怎么做互斥处理呢?
ID:1109308 发表于 2024-1-18 10:12
学习一下思想,看能不能移植
ID:339654 发表于 2023-3-21 19:03
我觉得调度器还是用定时器来控制时基
ID:898721 发表于 2023-2-20 20:46
编译没有通过,好像是宏不支持这种写法,或者哪里没搞对,大神帮忙看看有没有遇到这种问题

Snipaste_2023-02-20_20-43-25.jpg (414.8 KB, 下载次数: 157)

Snipaste_2023-02-20_20-43-25.jpg
ID:87000 发表于 2023-2-13 11:21
学习了,一直在找可用的小系统
ID:87000 发表于 2023-1-9 09:00
先收藏再说。觉得还可以
ID:433219 发表于 2023-1-9 08:41
时间轮片?
ID:67839 发表于 2023-1-8 16:12
下载研究一下
ID:105845 发表于 2022-11-8 15:09
不错  好好研究一下
ID:40043 发表于 2021-4-13 12:57
这个小调度器,真心不错,尤其适合哪种资源太小的MCU;
ID:40043 发表于 2021-4-13 12:56
这个资料整理的很全面,真的不错啊!
ID:115836 发表于 2019-12-9 19:24
这种写法源于Linux内核代码。
do{...}while(0)这样的写法可以避免宏展开时的一些坑。
ID:641609 发表于 2019-11-15 11:44


弄到现在终于搞定了, 但是我还有疑问,就是
1, 那两个子程序结尾的do whlie 有什么具体作用呢?   我认为可以不要do while



ID:641609 发表于 2019-11-14 19:24
本帖最后由 CSM_Min 于 2019-11-14 23:14 编辑


1, 代码使用pic编译出错,  HI-TECH Software\PICC\9.83, 不知道到底是哪里不支持?

2, 用stm32的keil编译,仿真功能正常


ID:641609 发表于 2019-11-14 00:46
整理得不错
ID:43342 发表于 2019-9-14 19:07
谢谢楼主!
ID:428114 发表于 2019-7-6 21:51
学习了
ID:445062 发表于 2019-4-14 22:04
学习一下对比protothreads有哪些改进。
ID:389812 发表于 2018-8-24 23:38
main.c

#include <limits.h>
#include <reg52.h>
#include "OS.h"

TaskFun(led)
{
        while(1)
        {
                if(me.pin==5)
                {
                        P0_5=0;
                        WaitX(1_s);
                        P0_5=1;
                        WaitX(1_s);
                }
                if(me.pin==6)
                {
                        P0_6=0;
                        WaitX(2_s);
                        P0_6=1;
                        WaitX(2_s);
                }
        }
}EndFun

TaskFun(display)
{
                CallSub(led,me.led);
}EndFun


void timer1() interrupt 3
{                       
        TR1 = 0;                        //暂停定时器
        n.b[0] = TH1;
        n.b[1] = TL1;
        n.a = n.a + CT;
        TH1 = n.b[0];
        TL1 = n.b[1];
        TR1 = 1;                        //启动定时器

        UpdateTimers();
               
}

void main(void)
{       
        TMOD = 0x15;
        ET1 = 1;
        EA = 1;
        TR1 = 1;

        display_1.led.pin=5;
        display_2.led.pin=6;

        while(1)
        {
                RunTask(display,display_1);
                RunTask(display,display_2);
        }
}

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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