jwd 发表于 2025-7-20 19:34:57

王昱顺 发表于 2025-7-20 10:33
可以这么写:
task_start(0);
//步骤1内容


好的,谢谢

hfofcfcb 发表于 2025-7-21 09:42:48

Istar_MCU 发表于 2025-7-23 08:43:56

学习中

我想diy 发表于 2025-7-24 17:41:05

太强了!!

逍遥派掌门人 发表于 2025-8-15 09:00:09

貌似是网上流传已久的 “小小调度器”

王昱顺 发表于 2025-8-15 11:28:26

逍遥派掌门人 发表于 2025-8-15 09:00
貌似是网上流传已久的 “小小调度器”

我进行了一点小小的改进,可以支持for嵌套了,程序灵活性提升很多

Tuier 发表于 4 天前

版主你好,对你的程序很感兴趣。把你的程序下载到单片机里运行正常。程序里的主频是固定位40M吗?我加了OLED12864(ST7567芯片)显示模块,结果40M频率无法显示,将主频改为24M后,屏幕能显示了(我的这块屏幕主频不能太高,高于24M就不显示了),但灯不闪烁了。请版主支招。谢谢!

while(1)
      {
                task_start(0);//协程0开始
                P34 = ~P34;//每次执行取反P00端口电平
                task_delay(100);//设定延时100ms
                task_wait(!P32);//P32电平作为判断条件,为1则等待,为0则继续向下执行
                //因为按键按下为0,所以正常是一直闪烁,按下P32则LED00停止闪烁
                task_end(1);//为1则循环执行
               
                task_start(1);//协程1开始
                P35 = 0;//P01端口置0,LED亮
                task_delay(200);//设定延时200ms
                P35 = 1;//P01端口置1,LED灭
                task_delay(500);//设定延时500ms
                task_end(1);//为1则循环执行
               
                task_start(2);//协程2开始
                task_delay(1000);//先长延时一段
                task_for(cnt1=0, cnt1++)//初始化和运行表达式(中间要用逗号链接!)
                {
                        task_for(cnt2=0, cnt2++)//第二层for循环
                        {
                              P36 = ~P36;//取反P02端口
                              task_delay(50);//小延时,快速闪烁
                        }
                        task_break(cnt2<3);//第二层for的判断条件,为1则返回for开头,为0则继续执行
                        P36 = 0;//强制给P02端口置低
                        task_delay(300);//设定延时300ms
                }
                task_break(cnt1<5);//第一层for的判断条件,为1则返回for开头,为0则继续执行
                task_end(1);//为1则循环运行

      task_start(3);//协程0开始
      OLED_BuffClear();                                  //清屏

      OLED_BuffShowString(0,0,"温度",0);
      OLED_BuffShowChar(10,2,'A',0);
      
OLED_BuffShow();
      task_delay(2);
      task_end(1);
      }
}

王昱顺 发表于 4 天前

Tuier 发表于 2025-8-20 16:16
版主你好,对你的程序很感兴趣。把你的程序下载到单片机里运行正常。程序里的主频是固定位40M吗?我加了OLE ...

那么可能是你的oled驱动函数不大适应高频率。我的这个程序运行在什么频率都可以,只要保证1ms的定时器基准是准的就可以了
还有,建议运行不同线程的时候,对程序内的执行分开一些,不然可能会堵塞到其他部分线程的执行,简单方法是加入一些task_delay,delay的同时会自动切换到其他有任务的线程运行
页: 1 2 3 4 5 [6]
查看完整版本: 【协程方式】实现【多任务调度 / 多线程】 仅需2byte的RAM 并带有详细视频讲解