📄 os_core.lst
字号:
C51 COMPILER V7.06 OS_CORE 07/31/2004 19:16:34 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE OS_CORE
OBJECT MODULE PLACED IN OS_Core.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE OS_Core.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*
2 *********************************************************************************************************
3 * minOS 0.01v
4 * The Real-Time OS Kernel
5 * All Rights Reserved
6 * File : OS_Core.C
7 * 作者 : 21icbbs网友 LM7556 ,2004年7月 by : LM7556 , China , 2004-2004
8 *
9 *********************************************************************************************************
10 */
11
12
13 #define OS_GLOBALS /* Declare GLOBAL variables */
14 #include "OS_Includes.h"
15
16 #ifndef NULL
#define NULL 0
#endif
19
20 // initialization OSTCB --- 初始化任务控制块.
21 void OSInit(void)
22 { INT8U i;
23 1 for (i=0;i<OS_MAX_TASKS;i++)
24 1 {
25 2 OSTCB[i].OSStkTop=(INT8U)NULL;
26 2 OSTCB[i].OSTaskStatus=no_TASK_Rdy;
27 2 OSTCB[i].OSTimeDly=0;
28 2 }
29 1 }
30
31 //Start OS --- 启动OS
32 void OSStart(void)
33 {
34 1 Init_OS_Timer();
35 1 OS_TASK_CrtPrio=Task_main_Prio;
36 1 OS_TASK_HighPri=OS_TASK_CrtPrio;
37 1 OSTCB[OS_TASK_HighPri].OSTaskStatus=OS_TASK_Run;
38 1 OS_INT_ENABLE();
39 1 OS_TASK_INT();
40 1 }
41
42 //返回优先级最高的处于就绪态任务的优先级,否则返回no_TASK_Rdy。
43 static INT8U OSPrioHighRdy(void)
44 { INT8U i;
45 1 for (i=0;i<OS_MAX_TASKS;i++)
46 1 {
47 2 if ((OSTCB[i].OSStkTop!=(INT8U)NULL) & (OSTCB[i].OSTaskStatus==OS_TASK_Rdy)) {return i;}
48 2 }
49 1 return no_TASK_Rdy;
50 1 }
51
52 //Task OSTimeDly Decrease 1 per Time Tick --- 每个时钟节拍,任务等待延时的时间OSTimeDly减1.
53 //如果任务的OSTimeDly减到0,把任务设置为准备就绪OS_TASK_Rdy。
54 void OSTimeTick(void)
55 { INT8U i;
C51 COMPILER V7.06 OS_CORE 07/31/2004 19:16:34 PAGE 2
56 1 for (i=0;i<OS_MAX_TASKS;i++)
57 1 {
58 2 if (OSTCB[i].OSTimeDly>OS_TASK_TimeOut)
59 2 {
60 3 if (--OSTCB[i].OSTimeDly==0) {OSTCB[i].OSTaskStatus=OS_TASK_Rdy;}
61 3 }
62 2 }
63 1 OS_TASK_HighPri=OSPrioHighRdy();
64 1 }
65
66 #if OS_TIME_DLY_EN
67 //OS Time Delay --- 使任务延时Tdly个时间节拍
68 void OSTimeDly(INT16U Tdly) /* Delay Tdly clock tick */
69 {
70 1 OSTCB[OS_TASK_CrtPrio].OSTimeDly=Tdly+OS_TASK_TimeOut;
71 1 OSTCB[OS_TASK_CrtPrio].OSTaskStatus=OS_TASK_WaitTicks;
72 1 OSSched();
73 1 }
74 #endif
75
76 #if OS_TASK_SUSPEND_EN>0
//把正在运行的任务挂起(Suspend a task)。
void OSTaskSuspend(INT8U TaskPrio)
{
OSTCB[OS_TASK_CrtPrio].OSTaskStatus=OS_TASK_Rdy;
OSTCB[TaskPrio].OSTaskStatus=OS_TASK_Suspend;
OSTCB[TaskPrio].OSTimeDly=OS_TASK_TimeOut;
OSSched();
}
#endif
86
87 #if OS_TASK_Resume_EN>0
// 恢复被挂起的任务(resume a task)。
void OSTaskResume(INT8U TaskPrio)
{
OSTCB[TaskPrio].OSTaskStatus=OS_TASK_Rdy;
}
#endif
94
95 //任务调度,把CPU控制权转到优先级最高的处于就绪态的任务。如果没有处于就绪态的任务,就地等待,
96 void OSSched(void)
97 {
98 1 do
99 1 {
100 2 OS_TASK_HighPri=OSPrioHighRdy();
101 2 } while (OS_TASK_HighPri==no_TASK_Rdy);
102 1 OSTCB[OS_TASK_HighPri].OSTaskStatus=OS_TASK_Run;
103 1 OS_TASK_INT();
104 1 }
105
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 227 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 22 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -