📄 os_core.lst
字号:
1 .file "OS_CORE.c"
2 .arch atmega16
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
11 .text
12 .Ltext0:
124 .global Os_Enter_Sum
125 .global Os_Enter_Sum
126 .section .bss
129 Os_Enter_Sum:
130 0000 00 .skip 1,0
131 .global OSMapTbl
132 .data
135 OSMapTbl:
136 0000 01 .byte 1
137 0001 02 .byte 2
138 0002 04 .byte 4
139 0003 08 .byte 8
140 0004 10 .byte 16
141 0005 20 .byte 32
142 0006 40 .byte 64
143 0007 80 .byte -128
144 0008 00 .byte 0
145 .global OSTaskRuning
148 OSTaskRuning:
149 0009 FF .byte -1
150 .global OSNextTaskID
151 .global OSNextTaskID
152 .section .bss
155 OSNextTaskID:
156 0001 00 .skip 1,0
157 .global OSTaskID
158 .global OSTaskID
161 OSTaskID:
162 0002 00 .skip 1,0
163 .text
166 .global OSIntSendSignal
168 OSIntSendSignal:
1:OS_CORE.c **** /**************************************************************************************************
2:OS_CORE.c **** **
3:OS_CORE.c **** **-------------------------------------------------------------------------------------------------
4:OS_CORE.c **** ***************************************************************************************************
5:OS_CORE.c ****
6:OS_CORE.c **** #define IN_OS_CORE
7:OS_CORE.c **** #include "config.h"
8:OS_CORE.c ****
9:OS_CORE.c **** #if EN_OS_INT_ENTER > 0
10:OS_CORE.c **** uint8 OSIntNesting;
11:OS_CORE.c **** #endif
12:OS_CORE.c ****
13:OS_CORE.c **** uint8 OSTaskID = 0;
14:OS_CORE.c **** uint8 OSNextTaskID = 0;
15:OS_CORE.c ****
16:OS_CORE.c **** uint8 OSWaitTick[OS_MAX_TASKS];
17:OS_CORE.c **** #if OS_MAX_TASKS < 9
18:OS_CORE.c **** uint8 OSTaskRuning = 0xff;
19:OS_CORE.c **** #else
20:OS_CORE.c **** uint16 OSTaskRuning = 0xffff;
21:OS_CORE.c **** #endif
22:OS_CORE.c ****
23:OS_CORE.c **** uint8 const OSMapTbl[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00};
24:OS_CORE.c **** uint8 Os_Enter_Sum = 0;
25:OS_CORE.c ****
26:OS_CORE.c **** void OSSched(void);
27:OS_CORE.c ****
28:OS_CORE.c **** /**************************************************************************************************
29:OS_CORE.c **** ** 函数名称: OSIntSendSignal
30:OS_CORE.c **** ** 功能描述: 中断中给指定任务发送信号,既使指定任务就绪
31:OS_CORE.c **** ** 输 入: TaskId : 任务ID
32:OS_CORE.c **** ** 输 出: 无
33:OS_CORE.c **** ** 全局变量: OSTaskRuning
34:OS_CORE.c **** ** 调用模块: 无
35:OS_CORE.c **** **-------------------------------------------------------------------------------------------------
36:OS_CORE.c **** ***************************************************************************************************
37:OS_CORE.c **** void OSIntSendSignal(uint8 TaskId)
38:OS_CORE.c ****
39:OS_CORE.c **** {
170 .LM1:
171 /* prologue: frame size=0 */
172 /* prologue end (size=0) */
40:OS_CORE.c **** if (TaskId < OS_MAX_TASKS)
174 .LM2:
175 0000 8430 cpi r24,lo8(4)
176 0002 80F4 brsh .L1
41:OS_CORE.c **** {
42:OS_CORE.c **** OS_ENTER_CRITICAL();
178 .LM3:
179 /* #APP */
180 0004 F894 cli
181 /* #NOAPP */
182 0006 2091 0000 lds r18,Os_Enter_Sum
43:OS_CORE.c **** #if OS_MAX_TASKS < 9
44:OS_CORE.c **** OSTaskRuning |= OSMapTbl[TaskId];
184 .LM4:
185 000a E82F mov r30,r24
186 000c FF27 clr r31
187 000e E050 subi r30,lo8(-(OSMapTbl))
188 0010 F040 sbci r31,hi8(-(OSMapTbl))
189 0012 8091 0000 lds r24,OSTaskRuning
190 0016 9081 ld r25,Z
191 0018 892B or r24,r25
192 001a 8093 0000 sts OSTaskRuning,r24
45:OS_CORE.c **** #else
46:OS_CORE.c **** if (TaskId < 8)
47:OS_CORE.c **** {
48:OS_CORE.c **** ((uint8 *)(&OSTaskRuning))[LOW_BYTE] |= OSMapTbl[TaskId];
49:OS_CORE.c **** }
50:OS_CORE.c **** else
51:OS_CORE.c **** {
52:OS_CORE.c **** ((uint8 *)(&OSTaskRuning))[HIGH_BYTE] |= OSMapTbl[TaskId & 0x07];
53:OS_CORE.c **** }
54:OS_CORE.c **** #endif
55:OS_CORE.c **** OS_EXIT_CRITICAL();
194 .LM5:
195 001e 2223 tst r18
196 0020 09F4 brne .L1
197 /* #APP */
198 0022 7894 sei
199 /* #NOAPP */
200 .L1:
201 0024 0895 ret
202 /* epilogue: frame size=0 */
203 /* epilogue: noreturn */
204 /* epilogue end (size=0) */
205 /* function OSIntSendSignal size 21 (21) */
207 .Lscope0:
210 .global OSClearSignal
212 OSClearSignal:
56:OS_CORE.c **** }
57:OS_CORE.c **** }
58:OS_CORE.c ****
59:OS_CORE.c **** /**************************************************************************************************
60:OS_CORE.c **** ** 函数名称: OSSendSignal
61:OS_CORE.c **** ** 功能描述: 任务中给指定任务发送信号,既使指定任务就绪
62:OS_CORE.c **** ** 输 入: TaskId : 任务ID
63:OS_CORE.c **** ** 输 出: 无
64:OS_CORE.c **** ** 全局变量: 无
65:OS_CORE.c **** ** 调用模块: OSSched,OSIntSendSignal
66:OS_CORE.c **** ***************************************************************************************************
67:OS_CORE.c **** #if EN_OS_SEND_SIGNAL>0
68:OS_CORE.c **** void OSSendSignal(uint8 TaskId)
69:OS_CORE.c ****
70:OS_CORE.c **** {
71:OS_CORE.c **** OSIntSendSignal(TaskId);
72:OS_CORE.c **** OSSched(); //开始任务切换
73:OS_CORE.c **** }
74:OS_CORE.c **** #endif
75:OS_CORE.c **** /**************************************************************************************************
76:OS_CORE.c **** ** 函数名称: OSClearSignal
77:OS_CORE.c **** ** 功能描述: 清除指定任务信号,既使指定任务休眠
78:OS_CORE.c **** ** 输 入: TaskId : 任务ID
79:OS_CORE.c **** ** 输 出: 无
80:OS_CORE.c **** ** 全局变量: OSTaskRuning
81:OS_CORE.c **** ** 调用模块: 无
82:OS_CORE.c **** ***************************************************************************************************
83:OS_CORE.c ****
84:OS_CORE.c **** void OSClearSignal(uint8 TaskId)
85:OS_CORE.c **** {
214 .LM6:
215 /* prologue: frame size=0 */
216 /* prologue end (size=0) */
86:OS_CORE.c **** if (TaskId < OS_MAX_TASKS)
218 .LM7:
219 0026 8430 cpi r24,lo8(4)
220 0028 88F4 brsh .L4
87:OS_CORE.c **** {
88:OS_CORE.c **** OS_ENTER_CRITICAL();
222 .LM8:
223 /* #APP */
224 002a F894 cli
225 /* #NOAPP */
226 002c 2091 0000 lds r18,Os_Enter_Sum
89:OS_CORE.c **** #if OS_MAX_TASKS < 9
90:OS_CORE.c **** OSTaskRuning &= ~OSMapTbl[TaskId];
228 .LM9:
229 0030 E82F mov r30,r24
230 0032 FF27 clr r31
231 0034 E050 subi r30,lo8(-(OSMapTbl))
232 0036 F040 sbci r31,hi8(-(OSMapTbl))
233 0038 9081 ld r25,Z
234 003a 9095 com r25
235 003c 8091 0000 lds r24,OSTaskRuning
236 0040 8923 and r24,r25
237 0042 8093 0000 sts OSTaskRuning,r24
91:OS_CORE.c **** #else
92:OS_CORE.c **** if (TaskId < 8)
93:OS_CORE.c **** {
94:OS_CORE.c **** ((uint8 *)(&OSTaskRuning))[LOW_BYTE] &= ~OSMapTbl[TaskId];
95:OS_CORE.c **** }
96:OS_CORE.c **** else
97:OS_CORE.c **** {
98:OS_CORE.c **** ((uint8 *)(&OSTaskRuning))[HIGH_BYTE] &= ~OSMapTbl[TaskId & 0x07];
99:OS_CORE.c **** }
100:OS_CORE.c **** #endif
101:OS_CORE.c **** OS_EXIT_CRITICAL();
239 .LM10:
240 0046 2223 tst r18
241 0048 09F4 brne .L4
242 /* #APP */
243 004a 7894 sei
244 /* #NOAPP */
245 .L4:
246 004c 0895 ret
247 /* epilogue: frame size=0 */
248 /* epilogue: noreturn */
249 /* epilogue end (size=0) */
250 /* function OSClearSignal size 22 (22) */
252 .Lscope1:
254 .global OSIntExit
256 OSIntExit:
102:OS_CORE.c **** }
103:OS_CORE.c **** }
104:OS_CORE.c ****
105:OS_CORE.c **** /**************************************************************************************************
106:OS_CORE.c **** ** 函数名称: OSIntExit
107:OS_CORE.c **** ** 功能描述: 中断退出处理函数,在此进行中断后的任务切换
108:OS_CORE.c **** ** 输 入: 无
109:OS_CORE.c **** ** 输 出: 无
110:OS_CORE.c **** ** 全局变量: OSIntNesting,OSNextTaskID
111:OS_CORE.c **** ** 调用模块: OSIntCtxSw
112:OS_CORE.c **** ***************************************************************************************************
113:OS_CORE.c **** void OSIntExit(void)
114:OS_CORE.c ****
115:OS_CORE.c **** {
258 .LM11:
259 /* prologue: frame size=0 */
260 /* prologue end (size=0) */
116:OS_CORE.c **** uint8 temp;
117:OS_CORE.c ****
118:OS_CORE.c **** OS_ENTER_CRITICAL();
262 .LM12:
263 /* #APP */
264 004e F894 cli
265 /* #NOAPP */
266 0050 8091 0000 lds r24,Os_Enter_Sum
267 0054 8F5F subi r24,lo8(-(1))
268 0056 8093 0000 sts Os_Enter_Sum,r24
119:OS_CORE.c **** /* 中断嵌套处理 */
120:OS_CORE.c **** #if EN_OS_INT_ENTER > 0
121:OS_CORE.c **** if (OSIntNesting > 0)
270 .LM13:
271 005a 8091 0000 lds r24,OSIntNesting
272 005e 8823 tst r24
273 0060 19F0 breq .L8
122:OS_CORE.c **** {
123:OS_CORE.c **** OSIntNesting--;
275 .LM14:
276 0062 8150 subi r24,lo8(-(-1))
277 0064 8093 0000 sts OSIntNesting,r24
278 .L8:
124:OS_CORE.c **** }
125:OS_CORE.c **** if (OSIntNesting == 0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -