📄 dataqueue.lst
字号:
327 0114 982F mov r25,r24
121:dataqueue.c **** if(QueueLocalMsgState == IDLE ) {
329 .LM37:
330 0116 8091 0000 lds r24,QueueLocalMsgState
331 011a 8823 tst r24
332 011c A9F4 brne .L16
122:dataqueue.c **** QueueLocalMsgState = WRITE;
334 .LM38:
335 011e 81E0 ldi r24,lo8(1)
336 0120 8093 0000 sts QueueLocalMsgState,r24
123:dataqueue.c **** QueueLocalMsg.length = length;
338 .LM39:
339 0124 6093 0000 sts QueueLocalMsg,r22
124:dataqueue.c **** QueueLocalMsg.type = type;
341 .LM40:
342 0128 9093 0000 sts QueueLocalMsg+1,r25
125:dataqueue.c **** QueueLocalMsg.Msg = *msg;
344 .LM41:
345 012c 8CE3 ldi r24,lo8(60)
346 012e A0E0 ldi r26,lo8(QueueLocalMsg+2)
347 0130 B0E0 ldi r27,hi8(QueueLocalMsg+2)
348 0132 FA01 movw r30,r20
349 0134 0190 ld __tmp_reg__,Z+
350 0136 0D92 st X+,__tmp_reg__
351 0138 8A95 dec r24
352 013a E1F7 brne .-8
126:dataqueue.c **** QueueLocalMsgState = USEFULL;
354 .LM42:
355 013c 82E0 ldi r24,lo8(2)
356 013e 8093 0000 sts QueueLocalMsgState,r24
127:dataqueue.c **** return 1;
358 .LM43:
359 0142 81E0 ldi r24,lo8(1)
360 0144 90E0 ldi r25,hi8(1)
361 0146 0895 ret
362 .L16:
128:dataqueue.c **** }else{
129:dataqueue.c **** return 0;
364 .LM44:
365 0148 80E0 ldi r24,lo8(0)
366 014a 90E0 ldi r25,hi8(0)
130:dataqueue.c **** }
131:dataqueue.c **** }
368 .LM45:
369 014c 0895 ret
370 /* epilogue: frame size=0 */
371 014e 0895 ret
372 /* epilogue end (size=1) */
373 /* function InLocalMsgQueue size 30 (29) */
376 .global MACTask
378 MACTask:
132:dataqueue.c **** /**************************************************************************
133:dataqueue.c **** *功能描述:定时调用发送任务
134:dataqueue.c **** *参数说明:
135:dataqueue.c **** *返回值:
136:dataqueue.c **** **************************************************************************/
137:dataqueue.c **** void MACTask(void){
380 .LM46:
381 /* prologue: frame size=0 */
382 /* prologue end (size=0) */
138:dataqueue.c **** if(currentparent != INVALID_NODE_ID) {
384 .LM47:
385 0150 8091 0000 lds r24,currentparent
386 0154 8F3F cpi r24,lo8(-1)
387 0156 19F0 breq .L19
139:dataqueue.c **** LedRedOn();
389 .LM48:
390 0158 0E94 0000 call LedRedOn
391 015c 02C0 rjmp .L20
392 .L19:
140:dataqueue.c **** }else {
141:dataqueue.c **** LedRedOff();
394 .LM49:
395 015e 0E94 0000 call LedRedOff
396 .L20:
142:dataqueue.c **** }
143:dataqueue.c **** if(TimeMask == 0 ){
398 .LM50:
399 0162 8091 0000 lds r24,TimeMask
400 0166 8823 tst r24
401 0168 D9F4 brne .L21
144:dataqueue.c **** if(QueueBroadcastState == USEFULL) {
403 .LM51:
404 016a 8091 0000 lds r24,QueueBroadcastState
405 016e 8230 cpi r24,lo8(2)
406 0170 19F4 brne .L22
145:dataqueue.c **** OSPostTask(routeSendBroadcast);
408 .LM52:
409 0172 80E0 ldi r24,lo8(pm(routeSendBroadcast))
410 0174 90E0 ldi r25,hi8(pm(routeSendBroadcast))
411 0176 06C0 rjmp .L29
412 .L22:
146:dataqueue.c **** }else if(QueueLocalMsgState == USEFULL){
414 .LM53:
415 0178 8091 0000 lds r24,QueueLocalMsgState
416 017c 8230 cpi r24,lo8(2)
417 017e 29F4 brne .L24
147:dataqueue.c **** OSPostTask(routeSendLocalMsg);
419 .LM54:
420 0180 80E0 ldi r24,lo8(pm(routeSendLocalMsg))
421 0182 90E0 ldi r25,hi8(pm(routeSendLocalMsg))
422 .L29:
423 0184 0E94 0000 call OSPostTask
424 0188 0895 ret
425 .L24:
148:dataqueue.c **** }else{
149:dataqueue.c **** if(QueueLocalMsgState == IDLE) LocalDataIn();
427 .LM55:
428 018a 8823 tst r24
429 018c 11F4 brne .L26
430 018e 0E94 0000 call LocalDataIn
431 .L26:
150:dataqueue.c **** if( OS_LOCAL_ADDRESS != SINKNODE){
433 .LM56:
434 0192 8091 0000 lds r24,OS_LOCAL_ADDRESS
435 0196 8130 cpi r24,lo8(1)
436 0198 31F0 breq .L18
151:dataqueue.c **** OSPostTask(routeSendTask); //调度发送任务,完成数据向MAC的传送
438 .LM57:
439 019a 80E0 ldi r24,lo8(pm(routeSendTask))
440 019c 90E0 ldi r25,hi8(pm(routeSendTask))
441 019e F2CF rjmp .L29
442 .L21:
152:dataqueue.c **** }
153:dataqueue.c **** }
154:dataqueue.c **** }else {
155:dataqueue.c **** TimeMask--;
444 .LM58:
445 01a0 8150 subi r24,lo8(-(-1))
446 01a2 8093 0000 sts TimeMask,r24
447 .L18:
448 01a6 0895 ret
449 /* epilogue: frame size=0 */
450 01a8 0895 ret
451 /* epilogue end (size=1) */
452 /* function MACTask size 45 (44) */
456 routeSendBroadcast:
156:dataqueue.c **** }
157:dataqueue.c ****
158:dataqueue.c **** }
159:dataqueue.c **** /**************************************************************************
160:dataqueue.c **** *功能描述:调用MAC层函数实现广播包发送
161:dataqueue.c **** *参数说明:
162:dataqueue.c **** *返回值:
163:dataqueue.c **** **************************************************************************/
164:dataqueue.c **** static void routeSendBroadcast(void){
458 .LM59:
459 /* prologue: frame size=0 */
460 /* prologue end (size=0) */
165:dataqueue.c ****
166:dataqueue.c **** MACBroadcastMsg(&QueueBroadcast.Msg, QueueBroadcast.length);
462 .LM60:
463 01aa 6091 0000 lds r22,QueueBroadcast
464 01ae 80E0 ldi r24,lo8(QueueBroadcast+2)
465 01b0 90E0 ldi r25,hi8(QueueBroadcast+2)
466 01b2 0E94 0000 call MACBroadcastMsg
467 /* epilogue: frame size=0 */
468 01b6 0895 ret
469 /* epilogue end (size=1) */
470 /* function routeSendBroadcast size 7 (6) */
474 routeSendLocalMsg:
167:dataqueue.c **** }
168:dataqueue.c ****
169:dataqueue.c **** /**************************************************************************
170:dataqueue.c **** *功能描述:调用MAC层函数实现本地数据包发送
171:dataqueue.c **** *参数说明:
172:dataqueue.c **** *返回值:
173:dataqueue.c **** **************************************************************************/
174:dataqueue.c **** static void routeSendLocalMsg(void){
476 .LM61:
477 /* prologue: frame size=0 */
478 /* prologue end (size=0) */
175:dataqueue.c **** //本地的数据包直接以currentparent为下一跳地址
176:dataqueue.c **** if(currentparent != INVALID_NODE_ID) {
480 .LM62:
481 01b8 4091 0000 lds r20,currentparent
482 01bc 4F3F cpi r20,lo8(-1)
483 01be 31F0 breq .L31
177:dataqueue.c **** MACUnicastMsg(&QueueLocalMsg.Msg, QueueLocalMsg.length,currentparent);
485 .LM63:
486 01c0 6091 0000 lds r22,QueueLocalMsg
487 01c4 80E0 ldi r24,lo8(QueueLocalMsg+2)
488 01c6 90E0 ldi r25,hi8(QueueLocalMsg+2)
489 01c8 0E94 0000 call MACUnicastMsg
490 .L31:
491 01cc 0895 ret
492 /* epilogue: frame size=0 */
493 01ce 0895 ret
494 /* epilogue end (size=1) */
495 /* function routeSendLocalMsg size 12 (11) */
499 routeSendTask:
178:dataqueue.c **** }
179:dataqueue.c **** }
180:dataqueue.c **** /**************************************************************************
181:dataqueue.c **** *功能描述:调用MAC层函数实现发送
182:dataqueue.c **** *参数说明:
183:dataqueue.c **** *返回值:
184:dataqueue.c **** **************************************************************************/
185:dataqueue.c **** //读队列数据的时候可以写,但是写的时候不能读
186:dataqueue.c **** static void routeSendTask(void) {
501 .LM64:
502 /* prologue: frame size=0 */
503 01d0 1F93 push r17
504 01d2 CF93 push r28
505 01d4 DF93 push r29
506 /* prologue end (size=3) */
187:dataqueue.c **** SHopMsgPtr sHopMsg;
188:dataqueue.c **** if (QueueIdle == FALSE ) return ; //正在写队列
508 .LM65:
509 01d6 8091 0000 lds r24,QueueIdle
510 01da 8823 tst r24
511 01dc 09F4 brne .+2
512 01de 78C0 rjmp .L33
189:dataqueue.c **** if (Queuemsgqueue[dequeue_next].length != 0) { //队列中还有消息存在 则
514 .LM66:
515 01e0 9091 0000 lds r25,dequeue_next
516 01e4 292F mov r18,r25
517 01e6 3327 clr r19
518 01e8 CEE3 ldi r28,lo8(62)
519 01ea D0E0 ldi r29,hi8(62)
520 01ec 2C9F mul r18,r28
521 01ee F001 movw r30,r0
522 01f0 2D9F mul r18,r29
523 01f2 F00D add r31,r0
524 01f4 3C9F mul r19,r28
525 01f6 F00D add r31,r0
526 01f8 1124 clr r1
527 01fa E050 subi r30,lo8(-(Queuemsgqueue))
528 01fc F040 sbci r31,hi8(-(Queuemsgqueue))
529 01fe 8081 ld r24,Z
530 0200 8823 tst r24
531 0202 09F4 brne .+2
532 0204 59C0 rjmp .L35
190:dataqueue.c **** if(currentparent == INVALID_NODE_ID) return ;
534 .LM67:
535 0206 8091 0000 lds r24,currentparent
536 020a 8F3F cpi r24,lo8(-1)
537 020c 09F4 brne .+2
538 020e 60C0 rjmp .L33
191:dataqueue.c **** nextAddr = CheckRoute(&Queuemsgqueue[dequeue_next].Msg);
540 .LM68:
541 0210 1EE3 ldi r17,lo8(62)
542 0212 919F mul r25,r17
543 0214 C001 movw r24,r0
544 0216 1124 clr r1
545 0218 8050 subi r24,lo8(-(Queuemsgqueue+2))
546 021a 9040 sbci r25,hi8(-(Queuemsgqueue+2))
547 021c 0E94 0000 call CheckRoute
548 0220 482F mov r20,r24
549 0222 8093 0000 sts nextAddr,r24
550 0226 3091 0000 lds r19,dequeue_next
192:dataqueue.c **** if (nextAddr != INVALID_NODE_ID) {
552 .LM69:
553 022a 8F3F cpi r24,lo8(-1)
554 022c 79F0 breq .L37
193:dataqueue.c **** MACUnicastMsg(&Queuemsgqueue[dequeue_next].Msg, Queuemsgqueue[dequeue_next].length,nextAddr)
556 .LM70:
557 022e 832F mov r24,r19
558 0230 9927 clr r25
559 0232 8C9F mul r24,r28
560 0234 F001 movw r30,r0
561 0236 8D9F mul r24,r29
562 0238 F00D add r31,r0
563 023a 9C9F mul r25,r28
564 023c F00D add r31,r0
565 023e 1124 clr r1
566 0240 E050 subi r30,lo8(-(Queuemsgqueue))
567 0242 F040 sbci r31,hi8(-(Queuemsgqueue))
568 0244 319F mul r19,r17
569 0246 C001 movw r24,r0
570 0248 1124 clr r1
571 024a 19C0 rjmp .L43
572 .L37:
194:dataqueue.c **** } else{ //如果currentparent存在但是没有可以解决循环路由的合适的下一跳节点,drop该数据项
195:dataqueue.c **** /*Queuemsgqueue[dequeue_next].length = 0;
196:dataqueue.c **** dequeue_next++;
197:dataqueue.c **** dequeue_next %= MESSAGE_QUEUE_SIZE;
198:dataqueue.c **** FreeAreaInQueue = FreeAreaInQueue + 1;*/
199:dataqueue.c **** sHopMsg = (SHopMsgPtr )Queuemsgqueue[dequeue_next].Msg.data;
574 .LM71:
575 024c 319F mul r19,r17
576 024e C001 movw r24,r0
577 0250 1124 clr r1
578 0252 DC01 movw r26,r24
579 0254 A050 subi r26,lo8(-(Queuemsgqueue+7))
580 0256 B040 sbci r27,hi8(-(Queuemsgqueue+7))
200:dataqueue.c **** if(sHopMsg->lifetime >= 1 ){
582 .LM72:
583 0258 FD01 movw r30,r26
584 025a 2381 ldd r18,Z+3
585 025c 432F mov r20,r19
586 025e 5527 clr r21
587 0260 2223 tst r18
588 0262 99F0 breq .L39
201:dataqueue.c **** sHopMsg->lifetime = (sHopMsg->lifetime)|0xF0;
590 .LM73:
591 0264 206F ori r18,lo8(-16)
592 0266 2383 std Z+3,r18
202:dataqueue.c **** MACUnicastMsg(&Queuemsgqueue[dequeue_next].Msg, Queuemsgqueue[dequeue_next].length,currentpare
594 .LM74:
595 0268 4C9F mul r20,r28
596 026a F001 movw r30,r0
597 026c 4D9F mul r20,r29
598 026e F00D add r31,r0
599 0270 5C9F mul r21,r28
600 0272 F00D add r31,r0
601 0274 1124 clr r1
602 0276 E050 subi r30,lo8(-(Queuemsgqueue))
603 0278 F040 sbci r31,hi8(-(Queuemsgqueue))
604 027a 4091 0000 lds r20,currentparent
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -