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

📄 app.lst

📁 一个WSN的树状路由,对于那些学WSN路由方面的朋友应该有说帮助.
💻 LST
📖 第 1 页 / 共 3 页
字号:
 336 0102 DF93      		push r29
 337               	/* prologue end (size=2) */
 142:app.c         ****     uint8_t i;
 143:app.c         **** 	i = (sensordataflag + 1)%LOCALDATABUFFSIZE;
 339               	.LM42:
 340 0104 2091 0000 		lds r18,sensordataflag
 341 0108 822F      		mov r24,r18
 342 010a 9927      		clr r25
 343               	.L38:
 345               	.LM43:
 346 010c 0196      		adiw r24,1
 347 010e 6AE0      		ldi r22,lo8(10)
 348 0110 70E0      		ldi r23,hi8(10)
 349 0112 0E94 0000 		call __divmodhi4
 144:app.c         **** 	for( ; i != sensordataflag ; ){
 351               	.LM44:
 352 0116 8217      		cp r24,r18
 353 0118 09F4      		brne .+2
 354 011a 5DC0      		rjmp .L35
 145:app.c         **** 		if(sensordatabuff[i] != 0xFFFF) {
 356               	.LM45:
 357 011c C82F      		mov r28,r24
 358 011e DD27      		clr r29
 359 0120 FE01      		movw r30,r28
 360 0122 EC0F      		add r30,r28
 361 0124 FD1F      		adc r31,r29
 362 0126 E050      		subi r30,lo8(-(sensordatabuff))
 363 0128 F040      		sbci r31,hi8(-(sensordatabuff))
 364 012a 4081      		ld r20,Z
 365 012c 5181      		ldd r21,Z+1
 366 012e 8FEF      		ldi r24,hi8(-1)
 367 0130 4F3F      		cpi r20,lo8(-1)
 368 0132 5807      		cpc r21,r24
 369 0134 09F4      		brne .+2
 370 0136 4DC0      		rjmp .L26
 371               	.LBB4:
 372               	.LBB5:
 146:app.c         **** 		SendSensorData(sensordatabuff[i]); 
 147:app.c         **** 		sensordatabuff[i] = 0xFFFF;
 148:app.c         **** 		return 1;
 149:app.c         **** 		}
 150:app.c         **** 	i = (i + 1)%LOCALDATABUFFSIZE;
 151:app.c         **** 	}
 152:app.c         **** 	return 0;
 153:app.c         **** }
 154:app.c         **** /***********************************************************
 155:app.c         ****                     以下为内部函数
 156:app.c         ****  **********************************************************/
 157:app.c         **** 
 158:app.c         **** static void SendSensorData(uint16_t localsensordata) {
 159:app.c         **** 	//发送采集到的数据,暂为空
 160:app.c         **** 	SensorMsg *sensordata;
 161:app.c         **** 	SHopMsgPtr sHopMsg;
 162:app.c         ****     uint8_t i;
 163:app.c         ****     uint8_t length;
 164:app.c         **** 
 165:app.c         **** 	if (OS_LOCAL_ADDRESS == 1) {
 374               	.LM46:
 375 0138 8091 0000 		lds r24,OS_LOCAL_ADDRESS
 376 013c 8130      		cpi r24,lo8(1)
 377 013e F1F1      		breq .L28
 166:app.c         **** 		return;
 167:app.c         **** 	}
 168:app.c         ****    
 169:app.c         **** 		sHopMsg = (SHopMsgPtr )routesensormsgptr->data;
 379               	.LM47:
 380 0140 6091 0000 		lds r22,routesensormsgptr
 381 0144 7091 0000 		lds r23,(routesensormsgptr)+1
 382 0148 DB01      		movw r26,r22
 383 014a 1596      		adiw r26,5
 170:app.c         **** 		sHopMsg->type = SENSOR;
 385               	.LM48:
 386 014c 23E0      		ldi r18,lo8(3)
 387 014e FB01      		movw r30,r22
 388 0150 2583      		std Z+5,r18
 171:app.c         **** 		sHopMsg->seq = networkseq;
 390               	.LM49:
 391 0152 8091 0000 		lds r24,networkseq
 392 0156 9091 0000 		lds r25,(networkseq)+1
 393 015a FD01      		movw r30,r26
 394 015c 8183      		std Z+1,r24
 395 015e 9283      		std Z+2,r25
 172:app.c         **** 		sHopMsg->lifetime = 3;// 允许的循环路由的次数
 397               	.LM50:
 398 0160 2383      		std Z+3,r18
 173:app.c         **** 		
 174:app.c         **** 		sensordata = (SensorMsg *) (sHopMsg->data);
 400               	.LM51:
 401 0162 DB01      		movw r26,r22
 402 0164 1996      		adiw r26,9
 175:app.c         **** 	    sensordata->sensorseq = sensorseq;
 404               	.LM52:
 405 0166 8091 0000 		lds r24,sensorseq
 406 016a 9091 0000 		lds r25,(sensorseq)+1
 407 016e FB01      		movw r30,r22
 408 0170 8187      		std Z+9,r24
 409 0172 9287      		std Z+10,r25
 176:app.c         **** 		sensordata->reading = localsensordata;
 411               	.LM53:
 412 0174 FD01      		movw r30,r26
 413 0176 4283      		std Z+2,r20
 414 0178 5383      		std Z+3,r21
 177:app.c         **** 		sensordata->type = LIGHT; //传感数据为光数据 
 416               	.LM54:
 417 017a 81E0      		ldi r24,lo8(1)
 418 017c 8483      		std Z+4,r24
 178:app.c         **** 		sensordata->src = OS_LOCAL_ADDRESS;
 420               	.LM55:
 421 017e 8091 0000 		lds r24,OS_LOCAL_ADDRESS
 422 0182 8583      		std Z+5,r24
 179:app.c         **** 		sensorseq++;//应用层数据包号自增
 424               	.LM56:
 425 0184 8091 0000 		lds r24,sensorseq
 426 0188 9091 0000 		lds r25,(sensorseq)+1
 427 018c 0196      		adiw r24,1
 428 018e 9093 0000 		sts (sensorseq)+1,r25
 429 0192 8093 0000 		sts sensorseq,r24
 430 0196 FB01      		movw r30,r22
 431 0198 3F96      		adiw r30,15
 432 019a 8DE0      		ldi r24,lo8(13)
 433               	.L32:
 180:app.c         **** 		for (i = 0; i < MAXPASS; i++) {
 181:app.c         **** 	    	sensordata->passnode[i] = 0;  		
 435               	.LM57:
 436 019c 1192      		st Z+,__zero_reg__
 438               	.LM58:
 439 019e 8150      		subi r24,lo8(-(-1))
 440 01a0 87FF      		sbrs r24,7
 441 01a2 FCCF      		rjmp .L32
 182:app.c         **** 		}
 183:app.c         **** 
 184:app.c         **** 		sensordata->passnode[0] = OS_LOCAL_ADDRESS;
 443               	.LM59:
 444 01a4 8091 0000 		lds r24,OS_LOCAL_ADDRESS
 445 01a8 FD01      		movw r30,r26
 446 01aa 8683      		std Z+6,r24
 185:app.c         **** 		
 186:app.c         **** 		length = SHOP_HEADER_LEN + sizeof(SensorMsg);
 187:app.c         **** 
 188:app.c         **** 		InLocalMsgQueue(SENSOR,length, routesensormsgptr);			
 448               	.LM60:
 449 01ac 4091 0000 		lds r20,routesensormsgptr
 450 01b0 5091 0000 		lds r21,(routesensormsgptr)+1
 451 01b4 68E1      		ldi r22,lo8(24)
 452 01b6 83E0      		ldi r24,lo8(3)
 453 01b8 0E94 0000 		call InLocalMsgQueue
 454               	.L28:
 455               	.LBE5:
 456               	.LBE4:
 458               	.LM61:
 459 01bc CC0F      		add r28,r28
 460 01be DD1F      		adc r29,r29
 461 01c0 C050      		subi r28,lo8(-(sensordatabuff))
 462 01c2 D040      		sbci r29,hi8(-(sensordatabuff))
 463 01c4 8FEF      		ldi r24,lo8(-1)
 464 01c6 9FEF      		ldi r25,hi8(-1)
 465 01c8 8883      		st Y,r24
 466 01ca 9983      		std Y+1,r25
 468               	.LM62:
 469 01cc 81E0      		ldi r24,lo8(1)
 470 01ce 90E0      		ldi r25,hi8(1)
 471 01d0 04C0      		rjmp .L23
 472               	.L26:
 474               	.LM63:
 475 01d2 CE01      		movw r24,r28
 476 01d4 9BCF      		rjmp .L38
 477               	.L35:
 479               	.LM64:
 480 01d6 80E0      		ldi r24,lo8(0)
 481 01d8 90E0      		ldi r25,hi8(0)
 482               	.L23:
 483               	/* epilogue: frame size=0 */
 484 01da DF91      		pop r29
 485 01dc CF91      		pop r28
 486 01de 0895      		ret
 487               	/* epilogue end (size=3) */
 488               	/* function LocalDataIn size 112 (107) */
 498               	.global	routeSendSENSORDone
 500               	routeSendSENSORDone:
 189:app.c         **** }
 190:app.c         **** 
 191:app.c         **** 
 192:app.c         **** result_t routeSendSENSORDone(OSMACMsgPtr msg) {
 502               	.LM65:
 503               	/* prologue: frame size=0 */
 504               	/* prologue end (size=0) */
 193:app.c         **** 	networkseq++; //网络层数据包号自增
 506               	.LM66:
 507 01e0 2091 0000 		lds r18,networkseq
 508 01e4 3091 0000 		lds r19,(networkseq)+1
 509 01e8 2F5F      		subi r18,lo8(-(1))
 510 01ea 3F4F      		sbci r19,hi8(-(1))
 511 01ec 3093 0000 		sts (networkseq)+1,r19
 512 01f0 2093 0000 		sts networkseq,r18
 194:app.c         **** 	RouteChangeV(msg->toAddr);
 514               	.LM67:
 515 01f4 FC01      		movw r30,r24
 516 01f6 8281      		ldd r24,Z+2
 517 01f8 0E94 0000 		call RouteChangeV
 195:app.c         **** 	return SUCCESS;
 196:app.c         **** }
 519               	.LM68:
 520 01fc 81E0      		ldi r24,lo8(1)
 521 01fe 90E0      		ldi r25,hi8(1)
 522               	/* epilogue: frame size=0 */
 523 0200 0895      		ret
 524               	/* epilogue end (size=1) */
 525               	/* function routeSendSENSORDone size 17 (16) */
 529               	.global	ReceiveDone
 531               	ReceiveDone:
 197:app.c         **** 
 198:app.c         **** /***************************************************************
 199:app.c         ****                   接收部分函数
 200:app.c         ****   *******************************************************/
 201:app.c         **** result_t ReceiveDone(OSMACMsgPtr packet) {  //与底层接口函数
 533               	.LM69:
 534               	/* prologue: frame size=0 */
 535 0202 0F93      		push r16
 536 0204 1F93      		push r17
 537 0206 CF93      		push r28
 538 0208 DF93      		push r29
 539               	/* prologue end (size=4) */
 540 020a EC01      		movw r28,r24
 202:app.c         ****     uint8_t type;
 203:app.c         **** 	SHopMsgPtr sHopMsg;
 204:app.c         **** 	sHopMsg = (SHopMsgPtr )packet->data;
 542               	.LM70:
 543 020c BC01      		movw r22,r24
 544 020e 6B5F      		subi r22,lo8(-(5))
 545 0210 7F4F      		sbci r23,hi8(-(5))
 205:app.c         ****     
 206:app.c         ****  		type = sHopMsg->type;
 547               	.LM71:
 548 0212 9D81      		ldd r25,Y+5
 207:app.c         **** 		if( packet->group == 0x01) {
 550               	.LM72:
 551 0214 8C81      		ldd r24,Y+4
 552 0216 8130      		cpi r24,lo8(1)
 553 0218 09F0      		breq .+2
 554 021a 93C0      		rjmp .L41
 555               	.LBB6:
 556               	.LBB7:
 208:app.c         **** 		routehandlepkt(type, packet);
 209:app.c         **** 		     }
 210:app.c         **** 
 211:app.c         ****     return 1; 
 212:app.c         ****    
 213:app.c         **** }
 214:app.c         **** 
 215:app.c         **** static void routehandlepkt(uint8_t type, OSMACMsgPtr receivemsg) {
 216:app.c         **** 		
 217:app.c         ****     switch (type) {
 558               	.LM73:
 559 021c 892F      		mov r24,r25
 560 021e 9927      		clr r25
 561 0220 8330      		cpi r24,3
 562 0222 9105      		cpc r25,__zero_reg__
 563 0224 39F0      		breq .L44
 564 0226 0497      		sbiw r24,4
 565 0228 09F0      		breq .+2
 566 022a 8BC0      		rjmp .L41
 218:app.c         ****     case BROADCAST: 
 219:app.c         ****       routeReceiveBroadcast(receivemsg);
 568               	.LM74:
 569 022c CE01      		movw r24,r28
 570 022e 0E94 0000 		call routeReceiveBroadcast
 220:app.c         ****       break;
 572               	.LM75:
 573 0232 87C0      		rjmp .L41
 574               	.L44:
 575               	.LBB8:
 576               	.LBB9:
 221:app.c         **** 
 222:app.c         **** 	case SENSOR:
 223:app.c         ****       routeReceiveSENSOR(receivemsg);
 224:app.c         **** 	  break;
 225:app.c         ****     }
 226:app.c         **** }
 227:app.c         **** 
 228:app.c         **** static void routeReceiveSENSOR(OSMACMsgPtr receivemsg) {
 229:app.c         **** 	SHopMsgPtr sHopMsg;
 230:app.c         **** 	SensorMsg *sensordata;
 231:app.c         ****     uint8_t i;
 232:app.c         **** 	uint8_t j;
 233:app.c         **** 
 234:app.c         **** 	uartMsg = *receivemsg;
 578               	.LM76:
 579 0234 8CE3      		ldi r24,lo8(60)
 580 0236 A0E0      		ldi r26,lo8(uartMsg)
 581 0238 B0E0      		ldi r27,hi8(uartMsg)
 582 023a FE01      		movw r30,r28
 583 023c 0190      		ld __tmp_reg__,Z+
 584 023e 0D92      		st X+,__tmp_reg__
 585 0240 8A95      		dec r24
 586 0242 E1F7      		brne .-8
 235:app.c         **** 
 236:app.c         ****     if (receivemsg->fromAddr == OS_LOCAL_ADDRESS) {
 588               	.LM77:
 589 0244 1B81      		ldd r17,Y+3
 590 0246 0091 0000 		lds r16,OS_LOCAL_ADDRESS
 591 024a 1017      		cp r17,r16
 592 024c 09F4      		brne .+2
 593 024e 79C0      		rjmp .L41
 237:app.c         **** 		return ;
 238:app.c         **** 	}
 239:app.c         **** 
 240:app.c         **** 	if (OS_LOCAL_ADDRESS != 1) {
 595               	.LM78:
 596 0250 0130      		cpi r16,lo8(1)
 597 0252 09F4      		brne .+2
 598 0254 70C0      		rjmp .L47
 241:app.c         **** 		sHopMsg = (SHopMsgPtr )receivemsg->data;
 242:app.c         **** 		sensordata = (SensorMsg *) (sHopMsg->data);
 600               	.LM79:
 601 0256 DE01      		movw r26,r28
 602 0258 1996      		adiw r26,9
 603               	.LBB10:
 243:app.c         **** 		if((CheckPassed(receivemsg->fromAddr,sHopMsg->seq)) == 0){ //没有记录过
 244:app.c         **** 			if(((sHopMsg->lifetime)&0xF0) == 0){
 245:app.c         **** 			LifeTime = sHopMsg->lifetime;
 246:app.c         **** 			}else{
 247:app.c         **** 			LifeTime = ((sHopMsg->lifetime)&0x0F) - 1;
 248:app.c         **** 			}
 249:app.c         **** 					
 250:app.c         **** 			forwardsensor.sensorseq = sensordata->sensorseq;
 251:app.c         **** 			forwardsensor.reading = sensordata->reading;
 252:app.c         **** 			forwardsensor.type = sensordata->type;
 253:app.c         **** 			forwardsensor.src = sensordata->src;
 254:app.c         **** 			
 255:app.c         **** 			for (i = 0; i < MAXPASS; i++) {
 256:app.c         **** 				forwardsensor.passnode[i] = sensordata->passnode[i];
 257:app.c         **** 			}
 258:app.c         **** 			j = 0;
 259:app.c         **** 			for (i = 0; i < MAXPASS; i++) {
 260:app.c         **** 				if (sensordata->passnode[i] != 0) {

⌨️ 快捷键说明

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