📄 os_cpu_c.lst
字号:
153 }
154 */
155
156 /*********************************************************************************************************
157 ** 函数名称: OSIdle
158 ** 功能描述: 优先级最低的任务
159 ** 输 入: 无
160 ** 输 出 : 无
161 ** 全局变量: 无
162 ** 调用模块: 无
163 **
164 ** 作 者: 陈明计
165 ** 日 期: 2002年12月2日
166 **-------------------------------------------------------------------------------------------------------
167 ** 修改人:
168 ** 日 期:
169 **-------------------------------------------------------------------------------------------------------
170 ********************************************************************************************************/
171
172 void OSIdle(void)
173 {
174 1 while(1)
175 1 {
176 2 PCON = PCON | 0x01; /* CPU进入休眠状态 */
177 2 }
178 1 }
C51 COMPILER V8.08 OS_CPU_C 10/17/2008 09:11:32 PAGE 4
179
180 /*********************************************************************************************************
181 ** 函数名称: OSStart
182 ** 功能描述: Small RTOS 51初始化函数,调用此函数后多任务开始运行,首先执ID为0的任务
183 ** 输 入: 无
184 ** 输 出 : 无
185 ** 全局变量: OSTsakStackBotton,SP
186 ** 调用模块: 无
187 **
188 ** 作 者: 陈明计
189 ** 日 期: 2002年2月22日
190 **-------------------------------------------------------------------------------------------------------
191 ** 修改人: 陈明计
192 ** 日 期: 2002年12月2日
193 **-------------------------------------------------------------------------------------------------------
194 ** 修改人: 陈明计
195 ** 日 期: 2002年12月30日
196 **-------------------------------------------------------------------------------------------------------
197 ** 修改人:
198 ** 日 期:
199 **-------------------------------------------------------------------------------------------------------
200 ********************************************************************************************************/
201 void OSStart(void)
202
203 {
204 1 uint8 idata *cp;
205 1 uint8 i;
206 1
207 1 cp = STACK;
208 1
209 1 OSTsakStackBotton[0] = STACK;
210 1 OSTsakStackBotton[OS_MAX_TASKS + 1] = (uint8 idata *)(IDATA_RAM_SIZE % 256);
211 1
212 1 /* 初始化优先级最高的任务堆栈,使返回地址为任务开始地址 */
213 1 *cp++ = ((uint16)(TaskFuction[0])) % 256;
214 1 SP = (uint8) cp;
215 1 *cp = ((uint16)(TaskFuction[0])) / 256;
216 1
217 1 /* 初始化优先级最低的任务堆栈 */
218 1 cp = (uint8 idata *)(IDATA_RAM_SIZE - 1) ;
219 1 *cp-- = 0;
220 1 *cp-- = ((uint16)(OSIdle)) / 256;
221 1 OSTsakStackBotton[OS_MAX_TASKS] = cp;
222 1 *cp-- = ((uint16)(OSIdle)) % 256;
223 1
224 1 /* 初始化其它优先级的任务堆栈 */
225 1 for(i = OS_MAX_TASKS - 1; i > 0; i--)
226 1 {
227 2 *cp-- = 0;
228 2 *cp-- = ((uint16)(TaskFuction[i])) / 256;
229 2 OSTsakStackBotton[i] = cp;
230 2 *cp-- = ((uint16)(TaskFuction[i])) % 256;
231 2 }
232 1 /* 允许中断 */
233 1 Os_Enter_Sum = 1;
234 1 OS_EXIT_CRITICAL();
235 1 /* 函数返回优先级最高的任务 */
236 1 }
237
238 /*********************************************************************************************************
239 ** 函数名称: OSTickISR
240 ** 功能描述: 系统时钟中断服务函数
C51 COMPILER V8.08 OS_CPU_C 10/17/2008 09:11:32 PAGE 5
241 ** 输 入: 无
242 ** 输 出 : 无
243 ** 全局变量: 无
244 ** 调用模块: OS_IBT_ENTER,(UserTickTimer),OSTimeTick,OSIntExit
245 **
246 ** 作 者: 陈明计
247 ** 日 期: 2002年2月22日
248 **-------------------------------------------------------------------------------------------------------
249 ** 修改人: 陈明计
250 ** 日 期: 2002年10月23日
251 **-------------------------------------------------------------------------------------------------------
252 ** 修改人:
253 ** 日 期:
254 **-------------------------------------------------------------------------------------------------------
255 ********************************************************************************************************/
256 #if EN_OS_INT_ENTER >0
257 #pragma disable /* 除非最高优先级中断,否则,必须加上这一句
- */
258 #endif
259 void OSTickISR(void) interrupt OS_TIME_ISR
260
261 {
262 1 #if TICK_TIMER_SHARING >1
static uint8 TickSum = 0;
#endif
265 1
266 1 #if EN_USER_TICK_TIMER > 0
UserTickTimer(); /* 用户函数
- */
#endif
269 1
270 1 #if TICK_TIMER_SHARING >1
TickSum = (TickSum + 1) % TICK_TIMER_SHARING;
if (TickSum != 0)
{
return;
}
#endif
277 1
278 1 #if EN_OS_INT_ENTER > 0
279 1 OS_INT_ENTER(); /* 中断开始处理
- */
280 1 #endif
281 1
282 1
283 1 #if EN_TIMER_SHARING > 0
284 1 OSTimeTick(); /* 调用系统时钟处理函数
- */
285 1 #else
OSIntSendSignal(TIME_ISR_TASK_ID); /* 唤醒ID为TIME_ISR_TASK_ID的任务
-*/
#endif
288 1
289 1 OSIntExit(); /* 中断结束处理
- */
290 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 204 ----
CONSTANT SIZE = 9 ----
XDATA SIZE = ---- ----
C51 COMPILER V8.08 OS_CPU_C 10/17/2008 09:11:32 PAGE 6
PDATA SIZE = ---- ----
DATA SIZE = 6 ----
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 + -