📄 physical.lst
字号:
214:physical.c **** }
567 .LM80:
568 0272 81E0 ldi r24,lo8(1)
569 0274 90E0 ldi r25,hi8(1)
570 /* epilogue: frame size=0 */
571 0276 0895 ret
572 /* epilogue end (size=1) */
573 /* function PhysicalTxByteReady size 100 (99) */
576 .global PhysicalStartSymDetected
578 PhysicalStartSymDetected:
215:physical.c ****
216:physical.c **** /*************************************************************************
217:physical.c **** *功能描述:检测到起始符号,通知MAC,准备接收数据,将缓存地址传给MAC
218:physical.c **** *参数说明:无
219:physical.c **** *返回值: 无
220:physical.c **** **************************************************************************/
221:physical.c **** result_t PhysicalStartSymDetected(void)
222:physical.c **** {
580 .LM81:
581 /* prologue: frame size=0 */
582 /* prologue end (size=0) */
223:physical.c **** // 物理层处于空闲状态时
224:physical.c **** if (state == IDLE && recvBufState == FREE) {
584 .LM82:
585 0278 8091 0000 lds r24,state
586 027c 8823 tst r24
587 027e 91F4 brne .L40
589 .LM83:
590 0280 9091 0000 lds r25,recvBufState
591 0284 9923 tst r25
592 0286 71F4 brne .L40
225:physical.c **** state = RECEIVING;
594 .LM84:
595 0288 81E0 ldi r24,lo8(1)
596 028a 8093 0000 sts state,r24
226:physical.c **** recvCount = 0;
598 .LM85:
599 028e 9093 0000 sts recvCount,r25
227:physical.c **** // MAC层可通过此调用对接收缓存中的字段打时间戳
228:physical.c **** MACStartSymDetected(recvPtr);
601 .LM86:
602 0292 8091 0000 lds r24,recvPtr
603 0296 9091 0000 lds r25,(recvPtr)+1
604 029a 0E94 0000 call MACStartSymDetected
229:physical.c **** return SUCCESS;
606 .LM87:
607 029e 81E0 ldi r24,lo8(1)
608 02a0 90E0 ldi r25,hi8(1)
609 02a2 0895 ret
610 .L40:
230:physical.c **** }
231:physical.c **** return FAIL;
612 .LM88:
613 02a4 80E0 ldi r24,lo8(0)
614 02a6 90E0 ldi r25,hi8(0)
232:physical.c **** }
616 .LM89:
617 02a8 0895 ret
618 /* epilogue: frame size=0 */
619 02aa 0895 ret
620 /* epilogue end (size=1) */
621 /* function PhysicalStartSymDetected size 26 (25) */
625 .global PhysicalRxByteDone
627 PhysicalRxByteDone:
233:physical.c ****
234:physical.c **** /*************************************************************************
235:physical.c **** *功能描述:将收到的字节打包成数据包,并发出包处理任务
236:physical.c **** *参数说明:收到的字节
237:physical.c **** *返回值: 执行结果
238:physical.c **** **************************************************************************/
239:physical.c **** result_t PhysicalRxByteDone(char data)
240:physical.c **** {
629 .LM90:
630 /* prologue: frame size=0 */
631 02ac 1F93 push r17
632 02ae CF93 push r28
633 /* prologue end (size=2) */
634 02b0 A82F mov r26,r24
241:physical.c **** if (state != RECEIVING)
636 .LM91:
637 02b2 1091 0000 lds r17,state
638 02b6 1130 cpi r17,lo8(1)
639 02b8 81F4 brne .L52
242:physical.c **** return FAIL;
243:physical.c ****
244:physical.c **** if (recvCount == 0) { // 第一个字节为包长度
641 .LM92:
642 02ba C091 0000 lds r28,recvCount
643 02be CC23 tst r28
644 02c0 A9F4 brne .L43
245:physical.c **** if ((uint8_t)data > MAX_PKT_LEN
646 .LM93:
647 02c2 8750 subi r24,lo8(-(-7))
648 02c4 8E35 cpi r24,lo8(94)
649 02c6 60F0 brlo .L44
246:physical.c **** || (uint8_t)data < MIN_PKT_LEN) { // 包太长或太短,不能正确接收
247:physical.c **** RadiocontrolIdle();
651 .LM94:
652 02c8 0E94 0000 call RadiocontrolIdle
248:physical.c **** state = IDLE;
654 .LM95:
655 02cc C093 0000 sts state,r28
249:physical.c **** // 通知上层接收包出错
250:physical.c **** MACPhysicalRxPktDone((void *) 0, 1);
657 .LM96:
658 02d0 612F mov r22,r17
659 02d2 80E0 ldi r24,lo8(0)
660 02d4 90E0 ldi r25,hi8(0)
661 02d6 0E94 0000 call MACPhysicalRxPktDone
662 .L52:
251:physical.c **** return FAIL;
664 .LM97:
665 02da 80E0 ldi r24,lo8(0)
666 02dc 90E0 ldi r25,hi8(0)
667 02de 61C0 rjmp .L41
668 .L44:
252:physical.c **** }
253:physical.c **** pktLength = (uint8_t)data; // 得到包长度
670 .LM98:
671 02e0 A093 0000 sts pktLength,r26
254:physical.c **** crcRx = 0;
673 .LM99:
674 02e4 1092 0000 sts (crcRx)+1,__zero_reg__
675 02e8 1092 0000 sts crcRx,__zero_reg__
676 .L43:
255:physical.c **** }
256:physical.c **** recvPtr[recvCount] = data;
678 .LM100:
679 02ec E091 0000 lds r30,recvPtr
680 02f0 F091 0000 lds r31,(recvPtr)+1
681 02f4 EC0F add r30,r28
682 02f6 F11D adc r31,__zero_reg__
683 02f8 A083 st Z,r26
257:physical.c **** recvCount++;
685 .LM101:
686 02fa 4091 0000 lds r20,recvCount
687 02fe 4F5F subi r20,lo8(-(1))
688 0300 4093 0000 sts recvCount,r20
258:physical.c ****
259:physical.c **** if (recvCount < pktLength - 1) {
690 .LM102:
691 0304 242F mov r18,r20
692 0306 3327 clr r19
693 0308 5091 0000 lds r21,pktLength
694 030c 852F mov r24,r21
695 030e 9927 clr r25
696 0310 0197 sbiw r24,1
697 0312 2817 cp r18,r24
698 0314 3907 cpc r19,r25
699 0316 64F4 brge .L45
260:physical.c **** crcRx=update_crc(data, crcRx);
701 .LM103:
702 0318 6091 0000 lds r22,crcRx
703 031c 7091 0000 lds r23,(crcRx)+1
704 0320 8A2F mov r24,r26
705 0322 0E94 0000 call update_crc
706 0326 9093 0000 sts (crcRx)+1,r25
707 032a 8093 0000 sts crcRx,r24
708 032e 37C0 rjmp .L46
709 .L45:
261:physical.c **** } else if (recvCount == pktLength) { // 接收完成
711 .LM104:
712 0330 4517 cp r20,r21
713 0332 A9F5 brne .L46
262:physical.c **** if (procBufState == FREE) { // 处理缓存区可用
715 .LM105:
716 0334 2091 0000 lds r18,procBufState
717 0338 2223 tst r18
718 033a 51F5 brne .L48
263:physical.c **** procPtr = recvPtr; // 数据包存入处理缓存区
720 .LM106:
721 033c 8091 0000 lds r24,recvPtr
722 0340 9091 0000 lds r25,(recvPtr)+1
723 0344 9093 0000 sts (procPtr)+1,r25
724 0348 8093 0000 sts procPtr,r24
264:physical.c **** recvPtr = procBufPtr; // 接收缓存与处理缓存交换地址
726 .LM107:
727 034c 8091 0000 lds r24,procBufPtr
728 0350 9091 0000 lds r25,(procBufPtr)+1
729 0354 9093 0000 sts (recvPtr)+1,r25
730 0358 8093 0000 sts recvPtr,r24
265:physical.c **** recvBufState = FREE; // 接收缓存可用
732 .LM108:
733 035c 2093 0000 sts recvBufState,r18
266:physical.c **** if (OSPostTask(packet_received) ) { // 发出接收处理任务
735 .LM109:
736 0360 80E0 ldi r24,lo8(pm(packet_received))
737 0362 90E0 ldi r25,hi8(pm(packet_received))
738 0364 0E94 0000 call OSPostTask
739 0368 8823 tst r24
740 036a 21F0 breq .L49
267:physical.c **** procBufState = BUSY;
742 .LM110:
743 036c 81E0 ldi r24,lo8(1)
744 036e 8093 0000 sts procBufState,r24
745 0372 11C0 rjmp .L51
746 .L49:
268:physical.c **** } else { // 任务队列满
269:physical.c **** procBufPtr = procPtr; // 丢包
748 .LM111:
749 0374 8091 0000 lds r24,procPtr
750 0378 9091 0000 lds r25,(procPtr)+1
751 037c 9093 0000 sts (procBufPtr)+1,r25
752 0380 8093 0000 sts procBufPtr,r24
270:physical.c **** MACPhysicalRxPktDone((void *) 0, 1); // 通知MAC已丢包
754 .LM112:
755 0384 61E0 ldi r22,lo8(1)
756 0386 80E0 ldi r24,lo8(0)
757 0388 90E0 ldi r25,hi8(0)
758 038a 0E94 0000 call MACPhysicalRxPktDone
759 038e 03C0 rjmp .L51
760 .L48:
271:physical.c **** }
272:physical.c **** } else { // 处理缓存不可用时不能再接收数据
273:physical.c **** recvBufState = BUSY;
762 .LM113:
763 0390 81E0 ldi r24,lo8(1)
764 0392 8093 0000 sts recvBufState,r24
765 .L51:
274:physical.c **** }
275:physical.c **** RadiocontrolIdle(); // 转入空闲状态
767 .LM114:
768 0396 0E94 0000 call RadiocontrolIdle
276:physical.c **** state = IDLE;
770 .LM115:
771 039a 1092 0000 sts state,__zero_reg__
772 .L46:
277:physical.c **** }
278:physical.c **** return SUCCESS;
774 .LM116:
775 039e 81E0 ldi r24,lo8(1)
776 03a0 90E0 ldi r25,hi8(1)
777 .L41:
778 /* epilogue: frame size=0 */
779 03a2 CF91 pop r28
780 03a4 1F91 pop r17
781 03a6 0895 ret
782 /* epilogue end (size=3) */
783 /* function PhysicalRxByteDone size 126 (121) */
785 .lcomm state,1
786 .comm pktLength,1,1
787 .comm buffer1,100,1
788 .comm buffer2,100,1
789 .comm recvBufState,1,1
790 .comm procBufState,1,1
791 .comm procBufPtr,2,1
792 .comm sendPtr,2,1
793 .comm recvPtr,2,1
794 .comm procPtr,2,1
795 .lcomm txCount,1
796 .comm recvCount,1,1
797 .comm crcRx,2,1
798 .comm crcTx,2,1
813 .text
815 Letext:
816 /* File "physical.c": code 468 = 0x01d4 ( 448), prologues 5, epilogues 15 */
DEFINED SYMBOLS
*ABS*:00000000 physical.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/cc0sbaaa.s:77 .text:00000000 update_crc
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/cc0sbaaa.s:133 .text:0000002e packet_received
*COM*:00000002 procPtr
*COM*:00000002 crcRx
*COM*:00000001 recvBufState
*COM*:00000002 recvPtr
*COM*:00000002 procBufPtr
*COM*:00000001 procBufState
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/cc0sbaaa.s:269 .text:000000f4 packet_sent
*COM*:00000002 sendPtr
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/cc0sbaaa.s:287 .text:00000102 PhysicalInit
.bss:00000000 state
*COM*:00000064 buffer1
*COM*:00000064 buffer2
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/cc0sbaaa.s:328 .text:00000130 PhysicalIdle
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/cc0sbaaa.s:351 .text:0000013e PhysicalSleep
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/cc0sbaaa.s:376 .text:0000014c PhysicalTxPkt
*COM*:00000001 pktLength
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/cc0sbaaa.s:785 .bss:00000001 txCount
*COM*:00000002 crcTx
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/cc0sbaaa.s:451 .text:000001b0 PhysicalTxByteReady
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/cc0sbaaa.s:578 .text:00000278 PhysicalStartSymDetected
*COM*:00000001 recvCount
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/cc0sbaaa.s:627 .text:000002ac PhysicalRxByteDone
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/cc0sbaaa.s:815 .text:000003a8 Letext
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
MACPhysicalRxPktDone
OSPostTask
MACPhysicalTxPktDone
RadiocontrolInit
RadiocontrolIdle
RadiocontrolSleep
RadiocontrolStartTx
RadiocontrolTxNextByte
MACStartSymDetected
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -