📄 os_core.lst
字号:
C51 COMPILER V8.08 OS_CORE 02/04/2008 22:01:36 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE OS_CORE
OBJECT MODULE PLACED IN .\OS_core.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\CORE\OS_core.c BROWSE DEBUG OBJECTEXTEND PRINT(.\OS_core.lst) OBJECT(.\O
-S_core.obj)
line level source
1 /*--------------------------------------------------------------------------------*-
2 * ck/OS
3 * 调度器内核文件
4 * -------------------------------
5 *
6 *文件名称:OS_core.c
7 *
8 *作 者:冯耿超
9 *版 本:V1.1.2
10 *创建日期:2008年01月31日
11 *
12 *文件描述:OS_core.c文件主要包括三个内核函数:OS_Add_Task()、OS_Assign_Task()、
13 * OS_Delete_Tasks()、分别为添加任务,任务分配,删除任务。本文件与MCU
14 * 的硬件无关。
15 -*--------------------------------------------------------------------------------*/
16 #include "..\INC\OS_cfg.h"
17 #include "..\string.h"
18 #include "..\INC\OS_core.h"
19
20 //static void *SetMem(void *cPtr,tByte const Contant,int sLen);
21
22 sTask OS_TCB[OS_MAX_TASK];//定义任务结构数组
23 /*--------------------------------------------------------------------------------*-
24 *函数原型:OS_Add_Task(void (*pTask)(void),tByte const ID,
25 * tWord const tDelay, tPeriod)
26 *输入参数:*pTask--->任务的入口地址
27 * ID --->任务控制块地址,在以后版本中会做为任务的优先级
28 * tDelay--->任务延迟时间
29 * tPeriod-->任务周期
30 *输出参数:无
31 *返 回 值:ID--->任务添加成功放回任务ID
32 * Error->任务添加不成功返回错误信号
33 *
34 *描 述:本程序用于向内核添加用户任务,需要主意任务ID不得大于最大系统任务量
35 * 即ID必须小于OS_MAX_TASK。函数调用库函数memset(),来初始化任务控制
36 * 块OS_TCB。
37 -*--------------------------------------------------------------------------------*/
38 //添加任务
39 tByte OS_Add_Task(void (code *pTask)(void),const tByte ID,
40 const tWord tDelay,const tWord tPeriod)
41 {
42 1 if(ID < OS_MAX_TASK)//判断任务ID是否超出最大任务数
43 1 {
44 2 // memset( &OS_TCB[ID],0,sizeof(sTask));//清零任务指定区域
45 2 OS_TCB[ID].aTask = pTask;//存放任务首地址
46 2
47 2 OS_TCB[ID].TaskID = ID;//任务位置,任务优先级
48 2
49 2 OS_TCB[ID].Period = tPeriod;//任务周期
50 2
51 2 OS_TCB[ID].Delay = tDelay;//任务有效延迟时间初值
52 2
53 2 OS_TCB[ID].RunMe = 0;
54 2
C51 COMPILER V8.08 OS_CORE 02/04/2008 22:01:36 PAGE 2
55 2 return ID;//任务添加成功返回任务优先级
56 2 }
57 1 else
58 1 {
59 2 return Error;//任务添加出错
60 2 }
61 1 }
62
63 /*--------------------------------------------------------------------------------*-
64 *函数原型:OS_Assign_Task(void)
65 *
66 *输入参数:无
67 *
68 *输出参数:无
69 *
70 *返 回 值:无
71 *
72 *描 述:本程序为内核添规划分配任务,必须放在超级循环体中,及必须放在while(1){}
73 * 语句中。当任务标志位RUNME有效时执行任务。
74 -*--------------------------------------------------------------------------------*/
75 //系统规划分配任务
76 void OS_Assign_Task(void)
77 {
78 1 tByte Index;
79 1 for(Index = 0;Index < OS_MAX_TASK;Index++)
80 1 {
81 2 if(OS_TCB[Index].RunMe > 0)//运行标志是否有效
82 2 {
83 3 (*OS_TCB[Index].aTask)();//运行任务
84 3
85 3 OS_TCB[Index].RunMe -= 1;//任务复位
86 3 }
87 2
88 2 if(OS_TCB[Index].Period == 0)
89 2 {
90 3 OS_Delete_Tasks(Index);//周期为0时删除任务,任务只被运行一次
91 3 }
92 2 }
93 1 }
94
95 /*--------------------------------------------------------------------------------*-
96 *函数原型:OS_Delete_Tasks(tByte tID)
97 *
98 *输入参数:tID--->需要被删除的任务ID
99 *
100 *输出参数:无
101 *
102 *返 回 值:无
103 *
104 *描 述:删除任务,将原来任务数据结构内存块清零。
105 -*--------------------------------------------------------------------------------*/
106 //删除任务,将原来任务数据结构内存块清零
107 void OS_Delete_Tasks(const tByte tID)
108 {
109 1 memset(&OS_TCB[tID],0,sizeof(sTask));//将任务数据块清零,删除内存中的任务
110 1 }
111
112 /*--------------------------------------------------------------------------------*-
113 *函数原型:OS_Init(void)
114 *
115 *输入参数:无
116 *
C51 COMPILER V8.08 OS_CORE 02/04/2008 22:01:36 PAGE 3
117 *输出参数:无
118 *
119 *返 回 值:无
120 *
121 *描 述:初始化系统程序,清理系统所有的任务控制块。
122 -*--------------------------------------------------------------------------------*/
123 //初始化系统程序
124 void OS_Init(void)
125 {
126 1 memset(&OS_TCB[0],0,(sizeof(sTask)*OS_MAX_TASK));//清零所有任务块
127 1
128 1 }
129
130 /*--------------------------------------------------------------------------------*-
131 *函数原型:*SetMem(void *cPtr,char const Contant,int sLen)
132 *
133 *输入参数:*cPtr--->需要设置的内存区首地址
134 * Contant->需要设置的内容
135 * sLen---->需要设置的内存区长度
136 *
137 *输出参数:无
138 *
139 *返 回 值:无
140 *
141 *描 述:设置内存区域,首地址为cPtr,长度sLen,内容Contant
142 -*--------------------------------------------------------------------------------*/
143 /*
144 //设置内存区域
145 void *SetMem(void *cPtr,char const Contant,int sLen)
146 {
147 tByte *addPtr;
148 addPtr = (tByte *)cPtr;
149 if(cPtr != NULL)
150 {
151 while(sLen > 0)
152 {
153 *addPtr++ = Contant;
154 --sLen;
155 }
156 return cPtr;//返回首地址
157 }
158 else
159 {
160 return NULL;
161 }
162 }*/
163
164 /*--------------------------------------------------------------------------------*-
165 -*-------------------------------End of file--------------------------------------*-
166 -*--------------------------------------------------------------------------------*/
167
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 187 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 22 8
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILER V8.08 OS_CORE 02/04/2008 22:01:36 PAGE 4
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -