不是真的2.0吧, |
大佬们,多任务操作同一硬件,譬如串口1,怎么做互斥处理呢? |
学习一下思想,看能不能移植 |
我觉得调度器还是用定时器来控制时基 |
编译没有通过,好像是宏不支持这种写法,或者哪里没搞对,大神帮忙看看有没有遇到这种问题 |
Snipaste_2023-02-20_20-43-25.jpg (414.8 KB, 下载次数: 157)
学习了,一直在找可用的小系统 |
先收藏再说。觉得还可以 |
时间轮片?![]() |
下载研究一下 |
不错 好好研究一下 |
这个小调度器,真心不错,尤其适合哪种资源太小的MCU; |
这个资料整理的很全面,真的不错啊! |
这种写法源于Linux内核代码。 do{...}while(0)这样的写法可以避免宏展开时的一些坑。 |
![]() 弄到现在终于搞定了, 但是我还有疑问,就是 1, 那两个子程序结尾的do whlie 有什么具体作用呢? 我认为可以不要do while |
本帖最后由 CSM_Min 于 2019-11-14 23:14 编辑 smset 发表于 2018-8-24 23:38 ![]() 1, 代码使用pic编译出错, HI-TECH Software\PICC\9.83, 不知道到底是哪里不支持? ![]() 2, 用stm32的keil编译,仿真功能正常 |
整理得不错 |
谢谢楼主! |
学习了 |
学习一下对比protothreads有哪些改进。 |
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); } } |