📄 sch51.lst
字号:
C51 COMPILER V7.06 SCH51 03/13/2007 13:55:51 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE SCH51
OBJECT MODULE PLACED IN SCH51.OBJ
COMPILER INVOKED BY: F:\电子\ElectronicsSoftware\KEIL\UV2\C51\BIN\C51.EXE SCH51.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*------------------------------------------------------------------*-
2
3 SCH51.C
4 -----------------------------------------------------------------*/
5
6 #include "Main.h"
7 #include "Port.h"
8
9 #include "Sch51.h"
10
11 //数据区
12 sTask SCH_tasks_G[SCH_MAX_TASKS]; //调度器任务队列
13 tByte Error_code_G = 0;
14 //系统休眠函数
15 static void SCH_Go_To_Sleep(void);
16 //设置系统报错参数
17 static tWord Error_tick_count_G; //报错周期
18 static tByte Last_error_code_G; //上次报错状态
19
20
21 /*------------------------------------------------------------------*-
22 SCH_Dispatch_Tasks()
23 系统调度执行任务
24 -*------------------------------------------------------------------*/
25 void SCH_Dispatch_Tasks(void)
26 {
27 1 tByte Index;
28 1
29 1 for (Index = 0; Index < SCH_MAX_TASKS; Index++) //查询任务队列,优先级按队列位置排列
30 1 {
31 2 if (SCH_tasks_G[Index].RunMe > 0) //任务就绪
32 2 {
33 3 (*SCH_tasks_G[Index].pTask)(); //执行任务
34 3
35 3 SCH_tasks_G[Index].RunMe -= 1; // 任务出列
36 3
37 3 if (SCH_tasks_G[Index].Period == 0) //如果不是周期性任务,则删除
38 3 {
39 4 SCH_Delete_Task(Index);
40 4 }
41 3 }
42 2 }
43 1
44 1 // 报告系统状态
45 1 SCH_Report_Status();
46 1
47 1 // 系统休眠
48 1 SCH_Go_To_Sleep();
49 1 }
50
51 /*------------------------------------------------------------------*-
52 SCH_Add_Task()
53 系统添加任务
54 参数:
55 *pFunction--函数名
C51 COMPILER V7.06 SCH51 03/13/2007 13:55:51 PAGE 2
56 DELAY--启动延时,赋0则立刻执行
57 PERIOD--运行周期,赋0则只执行一次
58 返回值:任务号或系统报错
59 -*------------------------------------------------------------------*/
60 tByte SCH_Add_Task(void (code * pFunction)(),
61 const tWord DELAY,
62 const tWord PERIOD)
63 {
64 1 tByte Index = 0;
65 1
66 1 while ((SCH_tasks_G[Index].pTask != 0) && (Index < SCH_MAX_TASKS))
67 1 {
68 2 Index++;
69 2 }
70 1
71 1 if (Index == SCH_MAX_TASKS)
72 1 {
73 2
74 2 Error_code_G = ERROR_SCH_TOO_MANY_TASKS;
75 2
76 2 return SCH_MAX_TASKS;
77 2 }
78 1
79 1
80 1 SCH_tasks_G[Index].pTask = pFunction;
81 1
82 1 SCH_tasks_G[Index].Delay = DELAY;
83 1 SCH_tasks_G[Index].Period = PERIOD;
84 1
85 1 SCH_tasks_G[Index].RunMe = 0;
86 1
87 1 return Index;
88 1 }
89
90 /*------------------------------------------------------------------*-
91 SCH_Delete_Task()
92 系统删除任务
93 参数:
94 TASK_INDEX--任务号
95 返回值:
96 1--成功,0--失败
97 -*------------------------------------------------------------------*/
98 bit SCH_Delete_Task(const tByte TASK_INDEX)
99 {
100 1 bit Return_code;
101 1
102 1 if (SCH_tasks_G[TASK_INDEX].pTask == 0) //任务为空时,删除失败
103 1 {
104 2 Error_code_G = ERROR_SCH_CANNOT_DELETE_TASK;
105 2 Return_code = RETURN_ERROR;
106 2 }
107 1 else
108 1 {
109 2 Return_code = RETURN_NORMAL;
110 2 }
111 1
112 1 SCH_tasks_G[TASK_INDEX].pTask = 0x0000;
113 1 SCH_tasks_G[TASK_INDEX].Delay = 0;
114 1 SCH_tasks_G[TASK_INDEX].Period = 0;
115 1
116 1 SCH_tasks_G[TASK_INDEX].RunMe = 0;
117 1
C51 COMPILER V7.06 SCH51 03/13/2007 13:55:51 PAGE 3
118 1 return Return_code; // return status
119 1 }
120
121
122 /*------------------------------------------------------------------*-
123
124 SCH_Report_Status()
125 报告系统状态
126
127 -*------------------------------------------------------------------*/
128 void SCH_Report_Status(void)
129 {
130 1 #ifdef SCH_REPORT_ERRORS
131 1 if (Error_code_G != Last_error_code_G)
132 1 {
133 2 Error_port = 255 - Error_code_G;
134 2
135 2 Last_error_code_G = Error_code_G;
136 2
137 2 if (Error_code_G != 0)
138 2 {
139 3 Error_tick_count_G = 60000;
140 3 }
141 2 else
142 2 {
143 3 Error_tick_count_G = 0;
144 3 }
145 2 }
146 1 else
147 1 {
148 2 if (Error_tick_count_G != 0)
149 2 {
150 3 if (--Error_tick_count_G == 0)
151 3 {
152 4 Error_code_G = 0;
153 4 }
154 3 }
155 2 }
156 1 #endif
157 1 }
158
159
160 /*------------------------------------------------------------------*-
161
162 SCH_Go_To_Sleep()
163 系统休眠
164 -*------------------------------------------------------------------*/
165 void SCH_Go_To_Sleep()
166 {
167 1 PCON |= 0x01;
168 1 }
169
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 306 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 3
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
C51 COMPILER V7.06 SCH51 03/13/2007 13:55:51 PAGE 4
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -