55337575 发表于 2024-7-5 11:13:08

基于STC15的原创极简时间片轮询多任务-MyTinyOS

该MyTinyOS是基于STC15的,由本人2022年因工作需要编写并应用于小型检测设备中。

该模块main()中共运行5个极简任务,目的是调试任务切换动作状态。

程序使用keilC51-9.6编译,程序尺寸:data=169.1 xdata=0 code=790。
该模块仅适用于Large:64K program 程序尺寸,Small:varables in DATA存储方式。
MyTinyOS整个调度过程没有进行中断屏蔽,没有进行现场保护,使用过程中要将

重要变量放在外部变量或使用static进行修饰的内部变量中。

MyTinyOS需要配置的参数都在<config.h>中:
1、OS_TASK_MAXNUM         5//最大任务数。任务槽个数.必须大于或等于实际任务数(小于7)。2、OS_TASK_STACK_SIZE(2+13+2*3)//任务栈尺寸。3、MAIN_Fosc                  30000000L//系统主频。默认30M。4、T0_TIM                         (65536-(MAIN_Fosc/12/200))//节拍时钟重装值。

MyTinyOS的用户函数1、voidvoid OS_Initial();OS初始化函数。2、char OS_CreateTask(unsigned int fn);OS系统任务添加函数。3、   void OS_StartUp();   OS系统启动函数。4、   void OS_TimeDly(unsigned intdelay);任务延时(让出CPU)指定节拍数函数。Delay任务延时的节拍数。5、   void OS_CurTaskWait(unsignedchar event,unsigned int waitfor));任务等待事件函数。event:事件类型,0x01——时间延时时间;0x02——信号事件6、   void OS_SendSigMark(unsignedchar taskID);发送事件函数。程序调用CurTaskWait()函数,当event=0x02时的启动事件通过该函数发送。7、   voidOS_ProcessMutualASK(unsigned char taskID,unsigned char status);请求进程挂起或运行。8、UserIdle()自定义空闲操作。可用于MCU进入休眠模式、清除看门狗、查询端口状态等。

代码开源,如有使用请反馈使用效果和出现的问题,以期共同进步共同提高。

soma 发表于 2024-7-5 12:19:01

下载学习一下

hsrzq 发表于 2024-7-5 12:54:43

有点意思!应该适合用来学OS相关知识

杨为民 发表于 2024-7-5 15:17:22

对于实际产品来说,RTOS不必完美,够用就好

lezjin 发表于 2024-7-5 15:37:01

学习学习

55337575 发表于 2024-7-5 15:38:40

谢谢杨老师

蜗牛 发表于 2024-7-29 20:48:48

已收藏,学习学习

xiangzichen 发表于 2024-7-30 10:55:11

大概看来 一下,这个不错,有时间测试看看.

哈哈哈哈 发表于 2024-8-21 17:42:50

学习一下学习一下

tamadeji303 发表于 2024-10-5 16:05:12

感谢分享{:4_165:}
页: [1] 2
查看完整版本: 基于STC15的原创极简时间片轮询多任务-MyTinyOS