⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 physical.lst

📁 adhoc信息节点程序源代码(点对多点)——for atmega128
💻 LST
📖 第 1 页 / 共 3 页
字号:
 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 + -