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

📄 dataqueue.lst

📁 一个WSN的树状路由,对于那些学WSN路由方面的朋友应该有说帮助.
💻 LST
📖 第 1 页 / 共 3 页
字号:
 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 + -