📄 mac.lst
字号:
390:mac.c **** *功能描述:处理错误数据包,进入睡眠
391:mac.c **** *参数说明:
392:mac.c **** *返回值: 执行结果
393:mac.c **** **************************************************************************/
394:mac.c **** static void handleErrPkt(void)
395:mac.c **** {
670 .LM103:
671 /* prologue: frame size=0 */
672 /* prologue end (size=0) */
396:mac.c **** if (state == BACKOFF) state = IDLE;
674 .LM104:
675 027c 8091 0000 lds r24,state
676 0280 8430 cpi r24,lo8(4)
677 0282 19F4 brne .L49
679 .LM105:
680 0284 81E0 ldi r24,lo8(1)
681 0286 8093 0000 sts state,r24
682 .L49:
397:mac.c **** if (state == IDLE) {
684 .LM106:
685 028a 8091 0000 lds r24,state
686 028e 8130 cpi r24,lo8(1)
687 0290 39F4 brne .L48
398:mac.c **** if (txRequest == 1) {
689 .LM107:
690 0292 8091 0000 lds r24,txRequest
691 0296 8130 cpi r24,lo8(1)
692 0298 19F4 brne .L48
399:mac.c **** retryTime = EIFS;
694 .LM108:
695 029a 8AE0 ldi r24,lo8(10)
696 029c 8093 0000 sts retryTime,r24
697 .L48:
698 02a0 0895 ret
699 /* epilogue: frame size=0 */
700 02a2 0895 ret
701 /* epilogue end (size=1) */
702 /* function handleErrPkt size 20 (19) */
707 .global MACPhysicalRxPktDone
709 MACPhysicalRxPktDone:
400:mac.c **** }
401:mac.c **** }
402:mac.c **** }
403:mac.c ****
404:mac.c **** /*************************************************************************
405:mac.c **** *功能描述:物理层调用,对已经接收到的数据包根据包类型调用相就的处理函数
406:mac.c **** *参数说明:包地址 接收出错标志
407:mac.c **** *返回值: 执行结果
408:mac.c **** **************************************************************************/
409:mac.c **** void* MACPhysicalRxPktDone(void* packet, char error)
410:mac.c **** {
711 .LM109:
712 /* prologue: frame size=0 */
713 02a4 CF93 push r28
714 02a6 DF93 push r29
715 /* prologue end (size=2) */
716 02a8 EC01 movw r28,r24
411:mac.c **** char pktType;
412:mac.c ****
413:mac.c **** radioState = RADIO_IDLE;
718 .LM110:
719 02aa 21E0 ldi r18,lo8(1)
720 02ac 2093 0000 sts radioState,r18
414:mac.c ****
415:mac.c **** if (error) { // 接收到错误包,有碰撞发生
722 .LM111:
723 02b0 6623 tst r22
724 02b2 49F5 brne .L73
416:mac.c **** handleErrPkt();
417:mac.c **** return packet;
418:mac.c **** }
419:mac.c ****
420:mac.c **** pktType = *((char*)packet + 1);
726 .LM112:
727 02b4 8981 ldd r24,Y+1
421:mac.c **** if (pktType == DATA_PKT) {
729 .LM113:
730 02b6 8230 cpi r24,lo8(2)
731 02b8 01F5 brne .L54
732 .LBB4:
733 .LBB5:
422:mac.c **** return handleDATA(packet);
423:mac.c **** } else if (pktType == RTS_PKT) {
424:mac.c **** handleRTS(packet);
425:mac.c **** } else if (pktType == CTS_PKT) {
426:mac.c **** handleCTS(packet);
427:mac.c **** } else if (pktType == ACK_PKT) {
428:mac.c **** handleACK(packet);
429:mac.c **** } else {
430:mac.c **** handleErrPkt();
431:mac.c **** }
432:mac.c **** return packet;
433:mac.c **** }
434:mac.c ****
435:mac.c **** /*************************************************************************
436:mac.c **** *功能描述:对接收到的RTS数据包进行处理
437:mac.c **** *参数说明:包地址
438:mac.c **** *返回值:
439:mac.c **** **************************************************************************/
440:mac.c **** static void handleRTS(void* pkt)
441:mac.c **** {
442:mac.c ****
443:mac.c **** }
444:mac.c ****
445:mac.c **** /*************************************************************************
446:mac.c **** *功能描述:对接收到的CTS数据包进行处理
447:mac.c **** *参数说明:包地址
448:mac.c **** *返回值:
449:mac.c **** **************************************************************************/
450:mac.c **** static void handleCTS(void* pkt)
451:mac.c **** {
452:mac.c ****
453:mac.c **** }
454:mac.c ****
455:mac.c **** /*************************************************************************
456:mac.c **** *功能描述:对接收到的DATA数据包进行处理
457:mac.c **** *参数说明:包地址
458:mac.c **** *返回值: 包地址
459:mac.c **** **************************************************************************/
460:mac.c **** static void* handleDATA(void* pkt)
461:mac.c **** {
462:mac.c **** void* tmp;
463:mac.c **** OSMACMsgPtr packet = (OSMACMsgPtr)pkt;
464:mac.c ****
465:mac.c **** if (packet->toAddr == OS_BCAST_ADDR) {
735 .LM114:
736 02ba 9A81 ldd r25,Y+2
737 02bc 8091 0000 lds r24,OS_BCAST_ADDR
738 02c0 9817 cp r25,r24
739 02c2 A1F4 brne .L55
466:mac.c **** if (state == BACKOFF)
741 .LM115:
742 02c4 8091 0000 lds r24,state
743 02c8 8430 cpi r24,lo8(4)
744 02ca 11F4 brne .L56
467:mac.c **** state = IDLE;
746 .LM116:
747 02cc 2093 0000 sts state,r18
748 .L56:
468:mac.c **** if (state == IDLE) {
750 .LM117:
751 02d0 8091 0000 lds r24,state
752 02d4 8130 cpi r24,lo8(1)
753 02d6 31F4 brne .L57
469:mac.c **** if (txRequest == 1) {
755 .LM118:
756 02d8 8091 0000 lds r24,txRequest
757 02dc 8130 cpi r24,lo8(1)
758 02de 11F4 brne .L57
470:mac.c **** tryToSend();
760 .LM119:
761 02e0 0E94 0000 call tryToSend
762 .L57:
471:mac.c **** }
472:mac.c **** }
473:mac.c **** tmp = testBaseRxMsgDone(packet);
764 .LM120:
765 02e4 CE01 movw r24,r28
766 02e6 0E94 0000 call testBaseRxMsgDone
767 02ea 10C0 rjmp .L52
768 .L55:
474:mac.c **** return tmp;
475:mac.c **** } else if (packet->toAddr == OS_LOCAL_ADDRESS) {
770 .LM121:
771 02ec 8091 0000 lds r24,OS_LOCAL_ADDRESS
772 02f0 9817 cp r25,r24
773 02f2 59F0 breq .L63
476:mac.c ****
477:mac.c **** } else {
478:mac.c **** state = IDLE;
775 .LM122:
776 02f4 2093 0000 sts state,r18
777 02f8 08C0 rjmp .L63
778 .L54:
779 .LBE5:
780 .LBE4:
782 .LM123:
783 02fa 8823 tst r24
784 02fc 31F0 breq .L63
786 .LM124:
787 02fe 8130 cpi r24,lo8(1)
788 0300 21F0 breq .L63
790 .LM125:
791 0302 8330 cpi r24,lo8(3)
792 0304 11F0 breq .L63
793 .L73:
795 .LM126:
796 0306 0E94 0000 call handleErrPkt
797 .L63:
799 .LM127:
800 030a CE01 movw r24,r28
801 .L52:
802 /* epilogue: frame size=0 */
803 030c DF91 pop r29
804 030e CF91 pop r28
805 0310 0895 ret
806 /* epilogue end (size=3) */
807 /* function MACPhysicalRxPktDone size 55 (50) */
810 .lcomm state,1
811 .lcomm radioState,1
812 .comm clockTime,4,1
813 .comm durCtrlPkt,2,1
814 .comm timeWaitCtrl,2,1
815 .comm durDataPkt,2,1
816 .comm timeWaitData,2,1
817 .comm geneTime,2,1
818 .comm txDelay,1,1
819 .comm retryTime,1,1
820 .comm txRequest,1,1
821 .comm howToSend,1,1
822 .comm sendAddr,2,1
823 .comm numRetry,1,1
824 .comm numExtend,1,1
825 .comm txPktLen,1,1
826 .lcomm dataPkt,2
827 .comm ctrlPkt,7,1
828 .comm recvAddr,2,1
850 .text
852 Letext:
853 /* File "mac.c": code 398 = 0x018e ( 380), prologues 3, epilogues 15 */
DEFINED SYMBOLS
*ABS*:00000000 mac.c
*ABS*:0000003f __SREG__
*ABS*:0000003e __SP_H__
*ABS*:0000003d __SP_L__
*ABS*:00000000 __tmp_reg__
*ABS*:00000001 __zero_reg__
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/ccQpbaaa.s:84 .data:00000000 OS_BCAST_ADDR
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/ccQpbaaa.s:89 .data:00000001 OS_LOCAL_ADDRESS
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/ccQpbaaa.s:95 .text:00000000 MACInit
.bss:00000000 state
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/ccQpbaaa.s:810 .bss:00000001 radioState
*COM*:00000004 clockTime
*COM*:00000001 txDelay
*COM*:00000001 txRequest
*COM*:00000001 retryTime
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/ccQpbaaa.s:145 .text:0000003c tryToSend
*COM*:00000001 howToSend
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/ccQpbaaa.s:220 .text:00000088 MACBroadcastMsg
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/ccQpbaaa.s:811 .bss:00000002 dataPkt
*COM*:00000001 txPktLen
*COM*:00000002 sendAddr
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/ccQpbaaa.s:335 .text:00000112 MACUnicastMsg
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/ccQpbaaa.s:352 .text:00000118 MACTxReset
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/ccQpbaaa.s:377 .text:00000128 MACPhysicalTxPktDone
*COM*:00000002 geneTime
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/ccQpbaaa.s:448 .text:00000176 MACClockFire
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/ccQpbaaa.s:542 .text:000001fe MACChannelBusy
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/ccQpbaaa.s:573 .text:00000218 MACChannelIdle
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/ccQpbaaa.s:634 .text:0000025c MACStartSymDetected
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/ccQpbaaa.s:668 .text:0000027c handleErrPkt
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/ccQpbaaa.s:709 .text:000002a4 MACPhysicalRxPktDone
*COM*:00000002 durCtrlPkt
*COM*:00000002 timeWaitCtrl
*COM*:00000002 durDataPkt
*COM*:00000002 timeWaitData
*COM*:00000001 numRetry
*COM*:00000001 numExtend
*COM*:00000007 ctrlPkt
*COM*:00000002 recvAddr
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/ccQpbaaa.s:852 .text:00000312 Letext
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
uartDebug_init
RandomInit
ClockStart
PhysicalInit
RandomLFSRGen
RadiocontrolCarrierSenseStart
testBaseBroadcastDone
PhysicalIdle
LedGreenToggle
PhysicalTxPkt
testBaseRxMsgDone
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -