os_q.lst
来自「cs5460a做功率表用 cs5460a做功率表用 cs5460a做功率表」· LST 代码 · 共 439 行 · 第 1/2 页
LST
439 行
1 .file "OS_Q.c"
2 .arch atmega8
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:
105 .global OSQCreat
107 OSQCreat:
1:driver/OS_Q.c **** /********************************************
2:driver/OS_Q.c **** 公司名称:
3:driver/OS_Q.c **** 文 件 名:
4:driver/OS_Q.c **** 版 本 号:
5:driver/OS_Q.c **** 程序设计:
6:driver/OS_Q.c **** 说 明:
7:driver/OS_Q.c **** 完成日期:
8:driver/OS_Q.c **** 修改日期:
9:driver/OS_Q.c **** 功能摘要:
10:driver/OS_Q.c **** **********************************************/
11:driver/OS_Q.c **** #define _OS_Q
12:driver/OS_Q.c **** #include "includes.h"
13:driver/OS_Q.c ****
14:driver/OS_Q.c **** OS_Q *OSQCreat(OS_Q *pEvent,uint8 *start,uint8 size);
15:driver/OS_Q.c **** uint8 OSQPost (OS_Q *pEvent,uint8 msg);
16:driver/OS_Q.c **** uint8 OSQAccept (OS_Q *pEvent,uint8 *const msg);
17:driver/OS_Q.c **** uint8 OSQQuery(OS_Q *pEvent);
18:driver/OS_Q.c **** //-----------------------------------------------
19:driver/OS_Q.c ****
20:driver/OS_Q.c **** OS_Q *OSQCreat(OS_Q *pEvent,uint8 *start,uint8 size) //创建一个消息队列
21:driver/OS_Q.c **** {
109 .LM1:
110 /* prologue: frame size=0 */
111 /* prologue end (size=0) */
112 0000 FC01 movw r30,r24
22:driver/OS_Q.c ****
23:driver/OS_Q.c **** pEvent->OSQStart = start;
114 .LM2:
115 0002 7183 std Z+1,r23
116 0004 6083 st Z,r22
24:driver/OS_Q.c **** pEvent->OSQEnd = &start[size];
118 .LM3:
119 0006 CB01 movw r24,r22
120 0008 840F add r24,r20
121 000a 911D adc r25,__zero_reg__
122 000c 9383 std Z+3,r25
123 000e 8283 std Z+2,r24
25:driver/OS_Q.c **** pEvent->OSQIn = start;
125 .LM4:
126 0010 7583 std Z+5,r23
127 0012 6483 std Z+4,r22
26:driver/OS_Q.c **** pEvent->OSQOut = start;
129 .LM5:
130 0014 7783 std Z+7,r23
131 0016 6683 std Z+6,r22
27:driver/OS_Q.c **** pEvent->OSQSize = size;
133 .LM6:
134 0018 4087 std Z+8,r20
28:driver/OS_Q.c **** pEvent->OSQCnt = 0;
136 .LM7:
137 001a 1186 std Z+9,__zero_reg__
29:driver/OS_Q.c ****
30:driver/OS_Q.c **** return (pEvent);
31:driver/OS_Q.c **** }
139 .LM8:
140 001c CF01 movw r24,r30
141 /* epilogue: frame size=0 */
142 001e 0895 ret
143 /* epilogue end (size=1) */
144 /* function OSQCreat size 16 (15) */
146 .Lscope0:
150 .global OSQPost
152 OSQPost:
32:driver/OS_Q.c **** //------------------------------------------------
33:driver/OS_Q.c **** uint8 OSQPost (OS_Q *pEvent,uint8 msg) //向消息队列发送一则消息
34:driver/OS_Q.c **** {
154 .LM9:
155 /* prologue: frame size=0 */
156 0020 CF93 push r28
157 0022 DF93 push r29
158 /* prologue end (size=2) */
159 0024 DC01 movw r26,r24
35:driver/OS_Q.c ****
36:driver/OS_Q.c **** if (pEvent == (OS_Q *)0) //无效事件
161 .LM10:
162 0026 892B or r24,r25
163 0028 19F4 brne .L3
37:driver/OS_Q.c **** {
38:driver/OS_Q.c **** return (OS_ERR_PEVENT_NULL);
165 .LM11:
166 002a 85E0 ldi r24,lo8(5)
167 002c 90E0 ldi r25,hi8(5)
168 002e 36C0 rjmp .L2
169 .L3:
39:driver/OS_Q.c **** }
40:driver/OS_Q.c **** OS_CLOSE_INT();
171 .LM12:
172 /* #APP */
173 0030 F894 cli
174 /* #NOAPP */
175 0032 8091 0000 lds r24,Os_Enter_Sum
176 0036 8F5F subi r24,lo8(-(1))
177 0038 8093 0000 sts Os_Enter_Sum,r24
41:driver/OS_Q.c **** if (pEvent->OSQCnt >= pEvent->OSQSize) //时件长度超过所给长度,已满
179 .LM13:
180 003c ED01 movw r28,r26
181 003e 9985 ldd r25,Y+9
182 0040 8885 ldd r24,Y+8
183 0042 9817 cp r25,r24
184 0044 68F0 brlo .L4
42:driver/OS_Q.c **** {
43:driver/OS_Q.c **** OS_OPEN_INT();
186 .LM14:
187 0046 8091 0000 lds r24,Os_Enter_Sum
188 004a 8150 subi r24,lo8(-(-1))
189 004c 8093 0000 sts Os_Enter_Sum,r24
190 0050 8091 0000 lds r24,Os_Enter_Sum
191 0054 8823 tst r24
192 0056 09F4 brne .L5
193 /* #APP */
194 0058 7894 sei
195 /* #NOAPP */
196 .L5:
44:driver/OS_Q.c **** return (OS_Q_FULL);
198 .LM15:
199 005a 82E0 ldi r24,lo8(2)
200 005c 90E0 ldi r25,hi8(2)
201 005e 1EC0 rjmp .L2
202 .L4:
45:driver/OS_Q.c **** }
46:driver/OS_Q.c **** *pEvent->OSQIn++ = msg; //OSQIn++ = msg
204 .LM16:
205 0060 ED01 movw r28,r26
206 0062 EC81 ldd r30,Y+4
207 0064 FD81 ldd r31,Y+5
208 0066 6193 st Z+,r22
209 0068 FD83 std Y+5,r31
210 006a EC83 std Y+4,r30
47:driver/OS_Q.c **** pEvent->OSQCnt++;
212 .LM17:
213 006c 8985 ldd r24,Y+9
214 006e 8F5F subi r24,lo8(-(1))
215 0070 8987 std Y+9,r24
48:driver/OS_Q.c **** if (pEvent->OSQIn == pEvent->OSQEnd) //如果已满则重新开始
217 .LM18:
218 0072 8A81 ldd r24,Y+2
219 0074 9B81 ldd r25,Y+3
220 0076 E817 cp r30,r24
221 0078 F907 cpc r31,r25
222 007a 21F4 brne .L6
49:driver/OS_Q.c **** {
50:driver/OS_Q.c **** pEvent->OSQIn = pEvent->OSQStart;
224 .LM19:
225 007c 8D91 ld r24,X+
226 007e 9C91 ld r25,X
227 0080 9D83 std Y+5,r25
228 0082 8C83 std Y+4,r24
229 .L6:
51:driver/OS_Q.c **** }
52:driver/OS_Q.c **** OS_OPEN_INT();
231 .LM20:
232 0084 8091 0000 lds r24,Os_Enter_Sum
233 0088 8150 subi r24,lo8(-(-1))
234 008a 8093 0000 sts Os_Enter_Sum,r24
235 008e 8091 0000 lds r24,Os_Enter_Sum
236 0092 8823 tst r24
237 0094 09F4 brne .L7
238 /* #APP */
239 0096 7894 sei
240 /* #NOAPP */
241 .L7:
53:driver/OS_Q.c **** return (OS_Q_OK);
243 .LM21:
244 0098 81E0 ldi r24,lo8(1)
245 009a 90E0 ldi r25,hi8(1)
246 .L2:
247 /* epilogue: frame size=0 */
248 009c DF91 pop r29
249 009e CF91 pop r28
250 00a0 0895 ret
251 /* epilogue end (size=3) */
252 /* function OSQPost size 68 (63) */
254 .Lscope1:
258 .global OSQAccept
260 OSQAccept:
54:driver/OS_Q.c **** }
55:driver/OS_Q.c ****
56:driver/OS_Q.c **** //------------------------------------------------
57:driver/OS_Q.c **** uint8 OSQAccept (OS_Q *pEvent,uint8 * const msg) //从消息队列中取出消息
58:driver/OS_Q.c **** {
262 .LM22:
263 /* prologue: frame size=0 */
264 00a2 CF93 push r28
265 00a4 DF93 push r29
266 /* prologue end (size=2) */
267 00a6 DC01 movw r26,r24
268 00a8 EB01 movw r28,r22
59:driver/OS_Q.c ****
60:driver/OS_Q.c **** if (pEvent == (OS_Q *)0)
270 .LM23:
271 00aa 892B or r24,r25
272 00ac 19F4 brne .L9
61:driver/OS_Q.c **** {
62:driver/OS_Q.c **** return (OS_ERR_PEVENT_NULL);
274 .LM24:
275 00ae 85E0 ldi r24,lo8(5)
276 00b0 90E0 ldi r25,hi8(5)
277 00b2 3BC0 rjmp .L8
278 .L9:
63:driver/OS_Q.c **** }
64:driver/OS_Q.c **** OS_CLOSE_INT();
280 .LM25:
281 /* #APP */
282 00b4 F894 cli
283 /* #NOAPP */
284 00b6 8091 0000 lds r24,Os_Enter_Sum
285 00ba 8F5F subi r24,lo8(-(1))
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?