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

📄 physical.lst

📁 一个WSN的树状路由,对于那些学WSN路由方面的朋友应该有说帮助.
💻 LST
📖 第 1 页 / 共 3 页
字号:
 216:physical.c    **** *参数说明:无
 217:physical.c    **** *返回值:  无
 218:physical.c    **** **************************************************************************/
 219:physical.c    **** result_t PhysicalStartSymDetected(void)
 220:physical.c    **** {
 513               	.LM68:
 514               	/* prologue: frame size=0 */
 515               	/* prologue end (size=0) */
 221:physical.c    **** 	// 物理层处于空闲状态时
 222:physical.c    **** 	if (state == IDLE && recvBufState == FREE) {
 517               	.LM69:
 518 0226 8091 0000 		lds r24,state
 519 022a 8823      		tst r24
 520 022c 91F4      		brne .L36
 522               	.LM70:
 523 022e 9091 0000 		lds r25,recvBufState
 524 0232 9923      		tst r25
 525 0234 71F4      		brne .L36
 223:physical.c    **** 		state = RECEIVING;
 527               	.LM71:
 528 0236 81E0      		ldi r24,lo8(1)
 529 0238 8093 0000 		sts state,r24
 224:physical.c    **** 		recvCount = 0;
 531               	.LM72:
 532 023c 9093 0000 		sts recvCount,r25
 225:physical.c    **** 		// MAC层可通过此调用对接收缓存中的字段打时间戳
 226:physical.c    **** 		MACStartSymDetected(recvPtr);
 534               	.LM73:
 535 0240 8091 0000 		lds r24,recvPtr
 536 0244 9091 0000 		lds r25,(recvPtr)+1
 537 0248 0E94 0000 		call MACStartSymDetected
 227:physical.c    **** 		return SUCCESS;
 539               	.LM74:
 540 024c 81E0      		ldi r24,lo8(1)
 541 024e 90E0      		ldi r25,hi8(1)
 542 0250 0895      		ret
 543               	.L36:
 228:physical.c    **** 	} else if(recvBufState == BUSY){
 545               	.LM75:
 546 0252 8091 0000 		lds r24,recvBufState
 547 0256 8130      		cpi r24,lo8(1)
 548 0258 11F4      		brne .L37
 229:physical.c    **** 	        packet_received();
 550               	.LM76:
 551 025a 0E94 0000 		call packet_received
 552               	.L37:
 230:physical.c    **** 	}
 231:physical.c    **** 	return FAIL;
 554               	.LM77:
 555 025e 80E0      		ldi r24,lo8(0)
 556 0260 90E0      		ldi r25,hi8(0)
 232:physical.c    **** }
 558               	.LM78:
 559 0262 0895      		ret
 560               	/* epilogue: frame size=0 */
 561 0264 0895      		ret
 562               	/* epilogue end (size=1) */
 563               	/* function PhysicalStartSymDetected size 32 (31) */
 567               	.global	PhysicalRxByteDone
 569               	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    **** {
 571               	.LM79:
 572               	/* prologue: frame size=0 */
 573 0266 1F93      		push r17
 574 0268 CF93      		push r28
 575               	/* prologue end (size=2) */
 576 026a A82F      		mov r26,r24
 241:physical.c    **** 	if (state != RECEIVING) 
 578               	.LM80:
 579 026c 1091 0000 		lds r17,state
 580 0270 1130      		cpi r17,lo8(1)
 581 0272 81F4      		brne .L48
 242:physical.c    **** 		return FAIL;
 243:physical.c    **** 
 244:physical.c    **** 	if (recvCount == 0) {											// 第一个字节为包长度
 583               	.LM81:
 584 0274 C091 0000 		lds r28,recvCount
 585 0278 CC23      		tst r28
 586 027a A9F4      		brne .L41
 245:physical.c    **** 		if ((uint8_t)data > MAX_PKT_LEN 
 588               	.LM82:
 589 027c 8750      		subi r24,lo8(-(-7))
 590 027e 8633      		cpi r24,lo8(54)
 591 0280 60F0      		brlo .L42
 246:physical.c    ****             || (uint8_t)data < MIN_PKT_LEN) {						// 包太长或太短,不能正确接收
 247:physical.c    ****             RadiocontrolIdle();
 593               	.LM83:
 594 0282 0E94 0000 		call RadiocontrolIdle
 248:physical.c    ****             state = IDLE;
 596               	.LM84:
 597 0286 C093 0000 		sts state,r28
 249:physical.c    **** 			// 通知上层接收包出错
 250:physical.c    ****             MACPhysicalRxPktDone((void *) 0, 1);
 599               	.LM85:
 600 028a 612F      		mov r22,r17
 601 028c 80E0      		ldi r24,lo8(0)
 602 028e 90E0      		ldi r25,hi8(0)
 603 0290 0E94 0000 		call MACPhysicalRxPktDone
 604               	.L48:
 251:physical.c    ****             return FAIL;
 606               	.LM86:
 607 0294 80E0      		ldi r24,lo8(0)
 608 0296 90E0      		ldi r25,hi8(0)
 609 0298 50C0      		rjmp .L39
 610               	.L42:
 252:physical.c    **** 		}
 253:physical.c    **** 		pktLength = (uint8_t)data;									// 得到包长度
 612               	.LM87:
 613 029a A093 0000 		sts pktLength,r26
 254:physical.c    **** 		crcRx = 0;
 615               	.LM88:
 616 029e 1092 0000 		sts (crcRx)+1,__zero_reg__
 617 02a2 1092 0000 		sts crcRx,__zero_reg__
 618               	.L41:
 255:physical.c    **** 	}
 256:physical.c    **** 	recvPtr[recvCount] = data;
 620               	.LM89:
 621 02a6 E091 0000 		lds r30,recvPtr
 622 02aa F091 0000 		lds r31,(recvPtr)+1
 623 02ae EC0F      		add r30,r28
 624 02b0 F11D      		adc r31,__zero_reg__
 625 02b2 A083      		st Z,r26
 257:physical.c    **** 	recvCount++;
 627               	.LM90:
 628 02b4 4091 0000 		lds r20,recvCount
 629 02b8 4F5F      		subi r20,lo8(-(1))
 630 02ba 4093 0000 		sts recvCount,r20
 258:physical.c    **** 		
 259:physical.c    **** 	if (recvCount < pktLength - 1) {
 632               	.LM91:
 633 02be 242F      		mov r18,r20
 634 02c0 3327      		clr r19
 635 02c2 5091 0000 		lds r21,pktLength
 636 02c6 852F      		mov r24,r21
 637 02c8 9927      		clr r25
 638 02ca 0197      		sbiw r24,1
 639 02cc 2817      		cp r18,r24
 640 02ce 3907      		cpc r19,r25
 641 02d0 64F4      		brge .L43
 260:physical.c    **** 		crcRx=update_crc(data, crcRx);
 643               	.LM92:
 644 02d2 6091 0000 		lds r22,crcRx
 645 02d6 7091 0000 		lds r23,(crcRx)+1
 646 02da 8A2F      		mov r24,r26
 647 02dc 0E94 0000 		call update_crc
 648 02e0 9093 0000 		sts (crcRx)+1,r25
 649 02e4 8093 0000 		sts crcRx,r24
 650 02e8 26C0      		rjmp .L44
 651               	.L43:
 261:physical.c    **** 	} else if (recvCount == pktLength) {							// 接收完成
 653               	.LM93:
 654 02ea 4517      		cp r20,r21
 655 02ec 21F5      		brne .L44
 262:physical.c    **** 		RadiocontrolIdle();											// 转入空闲状态
 657               	.LM94:
 658 02ee 0E94 0000 		call RadiocontrolIdle
 263:physical.c    **** 		state = IDLE;
 660               	.LM95:
 661 02f2 1092 0000 		sts state,__zero_reg__
 264:physical.c    **** 		if (procBufState == FREE) {									// 处理缓存区可用
 663               	.LM96:
 664 02f6 4091 0000 		lds r20,procBufState
 665 02fa 4423      		tst r20
 666 02fc C9F4      		brne .L46
 265:physical.c    ****             procPtr = recvPtr;										// 数据包存入处理缓存区
 668               	.LM97:
 669 02fe 2091 0000 		lds r18,recvPtr
 670 0302 3091 0000 		lds r19,(recvPtr)+1
 671 0306 3093 0000 		sts (procPtr)+1,r19
 672 030a 2093 0000 		sts procPtr,r18
 266:physical.c    ****             recvPtr = procBufPtr;									// 接收缓存与处理缓存交换地址
 674               	.LM98:
 675 030e 8091 0000 		lds r24,procBufPtr
 676 0312 9091 0000 		lds r25,(procBufPtr)+1
 677 0316 9093 0000 		sts (recvPtr)+1,r25
 678 031a 8093 0000 		sts recvPtr,r24
 267:physical.c    ****             procBufPtr = procPtr;
 680               	.LM99:
 681 031e 3093 0000 		sts (procBufPtr)+1,r19
 682 0322 2093 0000 		sts procBufPtr,r18
 268:physical.c    **** 			recvBufState = FREE;
 684               	.LM100:
 685 0326 4093 0000 		sts recvBufState,r20
 269:physical.c    **** 			packet_received();						// 接收缓存可用
 687               	.LM101:
 688 032a 0E94 0000 		call packet_received
 689 032e 03C0      		rjmp .L44
 690               	.L46:
 270:physical.c    ****            
 271:physical.c    **** 		} else {													// 处理缓存不可用时不能再接收数据
 272:physical.c    ****             recvBufState = BUSY;
 692               	.LM102:
 693 0330 81E0      		ldi r24,lo8(1)
 694 0332 8093 0000 		sts recvBufState,r24
 695               	.L44:
 273:physical.c    **** 		    
 274:physical.c    **** 		}
 275:physical.c    **** 		
 276:physical.c    **** 	}
 277:physical.c    **** 	return SUCCESS;
 697               	.LM103:
 698 0336 81E0      		ldi r24,lo8(1)
 699 0338 90E0      		ldi r25,hi8(1)
 700               	.L39:
 701               	/* epilogue: frame size=0 */
 702 033a CF91      		pop r28
 703 033c 1F91      		pop r17
 704 033e 0895      		ret
 705               	/* epilogue end (size=3) */
 706               	/* function PhysicalRxByteDone size 109 (104) */
 708               		.comm RecordPassed,30,1
 709               		.lcomm state,1
 710               		.lcomm pktLength,1
 711               		.lcomm buffer1,60
 712               		.lcomm buffer2,60
 713               		.lcomm recvBufState,1
 714               		.lcomm procBufState,1
 715               		.lcomm procBufPtr,2
 716               		.lcomm sendPtr,2
 717               		.lcomm recvPtr,2
 718               		.lcomm procPtr,2
 719               		.lcomm txCount,1
 720               		.lcomm recvCount,1
 721               		.lcomm crcRx,2
 722               		.lcomm crcTx,2
 738               		.text
 740               	Letext:
 741               	/* File "physical.c": code  416 = 0x01a0 ( 396), prologues   6, epilogues  14 */
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__
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cca0aaaa.s:89     .text:00000000 update_crc
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cca0aaaa.s:145    .text:0000002e packet_received
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cca0aaaa.s:717    .bss:00000082 procPtr
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cca0aaaa.s:720    .bss:00000086 crcRx
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cca0aaaa.s:712    .bss:0000007a recvBufState
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cca0aaaa.s:716    .bss:00000080 recvPtr
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cca0aaaa.s:714    .bss:0000007c procBufPtr
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cca0aaaa.s:713    .bss:0000007b procBufState
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cca0aaaa.s:246    .text:000000ba packet_sent
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cca0aaaa.s:715    .bss:0000007e sendPtr
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cca0aaaa.s:264    .text:000000c8 PhysicalInit
                             .bss:00000000 state
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cca0aaaa.s:710    .bss:00000002 buffer1
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cca0aaaa.s:711    .bss:0000003e buffer2
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cca0aaaa.s:311    .text:000000fe PhysicalTxPkt
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cca0aaaa.s:709    .bss:00000001 pktLength
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cca0aaaa.s:718    .bss:00000084 txCount
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cca0aaaa.s:721    .bss:00000088 crcTx
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cca0aaaa.s:386    .text:00000162 PhysicalTxByteReady
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cca0aaaa.s:511    .text:00000226 PhysicalStartSymDetected
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cca0aaaa.s:719    .bss:00000085 recvCount
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cca0aaaa.s:569    .text:00000266 PhysicalRxByteDone
                            *COM*:0000001e RecordPassed
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cca0aaaa.s:740    .text:00000340 Letext

UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
MACPhysicalRxPktDone
MACPhysicalTxPktDone
RadiocontrolInit
RadiocontrolStartTx
RadiocontrolTxNextByte
RadiocontrolIdle
MACStartSymDetected

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -