📄 os_cpu_c.lst
字号:
C51 COMPILER V9.01 OS_CPU_C 10/31/2012 17:19:07 PAGE 1
C51 COMPILER V9.01, COMPILATION OF MODULE OS_CPU_C
OBJECT MODULE PLACED IN .\Output\OS_CPU_C.obj
COMPILER INVOKED BY: D:\keil c51完全版\an_zhuang_51\C51\BIN\C51.EXE uCOS-II\MCS-51\OS_CPU_C.C LARGE BROWSE INCDIR(.\ucos
--ii\inc\) DEBUG OBJECTEXTEND PRINT(.\Listing\OS_CPU_C.lst) OBJECT(.\Output\OS_CPU_C.obj)
line level source
1 /*
2 *********************************************************************************************************
3 * uC/OS-II
4 * The Real-Time Kernel
5 *
6 * (c) Copyright 1992-2002, Jean J. Labrosse, Weston, FL
7 * All Rights Reserved
8 *
9 *
10 * uCOS_51 for MCS-51
11 *
12 * File : OS_CPU_C.C
13 * By : Jean J. Labrosse
14 * Created by : QQ 591881218
15 *********************************************************************************************************
16 */
17
18 #define OS_CPU_GLOBALS
19
20 #include "..\ucos_51\ucos-ii\inc\includes.h"
21
22 /*
23 *********************************************************************************************************
24 * 初始化任务栈
25 *
26 * 描述 : 本函数为OSTaskCreate()和OSTaskCreateExt()函数所调用,用于任务栈的初始化。初始化后的任务栈
27 * 看起来像刚刚发生过一次中断并将所有的寄存器都保存进了堆栈的情形一样。
28 *
29 * 参数 : task 任务代码的指针。
30 *
31 * ppdata 当任务开始执行时传递给任务的参数的指针。
32 *
33 * ptos 分配给任务堆栈的栈顶指针。
34 *
35 * opt 用于设定OSTaskCreateExt()的选项,指定是否允许堆栈检验,是否将堆栈清零,是否进行
36 * 浮点操作等。当用OSTaskCreate()函数调用时,设置为0。
37 *
38 * 返回值 : 返回栈顶指针
39 *
40 * 注意 : 任务栈结构示意图(杨屹)
41 *
42 * ---------- -
43 * 用户栈最高地址---->| | |
44 * ---------- |
45 * | ... | 仿真堆栈空间
46 *---------- ---------- | 每任务一个
47 *|OSTCBCur| ?C_XBP---->| | | KEIL自动处理
48 *---------- ---------- -
49 * | |空闲间隔|
50 * | ----------------------- ---------- ----------
51 * \---->|OSTCBCur->OSTCBStkPtr| |?C_XBP低| SP---->| |
52 * ----------------------- ---------- ----------
53 * | |?C_XBP高| | |
54 * | ---------- - ----------
C51 COMPILER V9.01 OS_CPU_C 10/31/2012 17:19:07 PAGE 2
55 * | | | | | . |
56 * | ---------- | | . |
57 * | | | | | . |
58 * | ---------- | ----------
59 * | | . |长度 | | +1
60 * | | . | | ----------
61 * | | . | | OSStack---->| | 0
62 * | ---------- | ----------
63 * | | | | OSStkStart---->| 不关心 | -1 低地址
64 * | ---------- - ----------
65 * \------------->| 长度 | 低地址 系统硬件堆栈
66 * ----------
67 * 用户堆栈 长度=SP-OSStkStart
68 *********************************************************************************************************
69 */
70 void *OSTaskStkInit(void(*task)(void *pd), void *ppdata, void *ptos, INT16U opt) REENTRANT
71 {
72 1 OS_STK *stk;
73 1 ppdata=ppdata;
74 1 opt =opt; /* opt没被用到,保留此语句防止警告产生 */
75 1 stk =(OS_STK *)ptos; /* 任务堆栈最低有效地址 */
76 1 *stk++=15; /* 任务堆栈长度 */
77 1 *stk++=(INT16U)task & 0xFF; /* 任务代码地址低8位 */
78 1 *stk++=(INT16U)task >> 8; /* 任务代码地址高8位 */
79 1 /* 处理器是按特定的顺序将寄存器存入堆栈的,所以用户在将寄存器存入堆栈的时候也要依照这一顺序 */
80 1 *stk++=0x00; /* PSW */
81 1 *stk++=0x0A; /* ACC */
82 1 *stk++=0x0B; /* B */
83 1 *stk++=0x00; /* DPL */
84 1 *stk++=0x00; /* DPH */
85 1 *stk++=0x00; /* R0 */
86 1 *stk++=0x01; /* R1 */
87 1 *stk++=0x02; /* R2 */
88 1 *stk++=0x03; /* R3 */
89 1 *stk++=0x04; /* R4 */
90 1 *stk++=0x05; /* R5 */
91 1 *stk++=0x06; /* R6 */
92 1 *stk++=0x07; /* R7 */
93 1 /* 不用保存SP,任务切换时根据用户堆栈长度计算得出 */
94 1 *stk++=(INT16U)(ptos+MAX_STK_SIZE) >> 8; /* ?C_XBP 仿真堆栈指针高8位 */
95 1 *stk++=(INT16U)(ptos+MAX_STK_SIZE) & 0xFF; /* ?C_XBP 仿真堆栈低8位 */
96 1 return ((void *)ptos); /* 返回最低地址,这里不用弹出栈顶指针是为了提高计算效率 */
97 1 }
98
99 /*********************************************** 钩子函数 ***********************************************/
100
101 #if OS_CPU_HOOKS_EN
102 /*
103 *********************************************************************************************************
104 * OS INITIALIZATION HOOK
105 * (BEGINNING)
106 *
107 * Description: This function is called by OSInit() at the beginning of OSInit().
108 *
109 * Arguments : none
110 *
111 * Note(s) : 1) Interrupts should be disabled during this call.
112 *********************************************************************************************************
113 */
114 #if OS_VERSION > 203
115 void OSInitHookBegin (void)
116 {
C51 COMPILER V9.01 OS_CPU_C 10/31/2012 17:19:07 PAGE 3
117 1 }
118 #endif
119
120 /*
121 *********************************************************************************************************
122 * OS INITIALIZATION HOOK
123 * (END)
124 *
125 * Description: This function is called by OSInit() at the end of OSInit().
126 *
127 * Arguments : none
128 *
129 * Note(s) : 1) Interrupts should be disabled during this call.
130 *********************************************************************************************************
131 */
132 #if OS_VERSION > 203
133 void OSInitHookEnd (void)
134 {
135 1 }
136 #endif
137
138 /*
139 *********************************************************************************************************
140 * TASK CREATION HOOK
141 *
142 * Description: This function is called when a task is created.
143 *
144 * Arguments : ptcb is a pointer to the task control block of the task being created.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -