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

📄 mac.lst

📁 一个WSN的树状路由,对于那些学WSN路由方面的朋友应该有说帮助.
💻 LST
📖 第 1 页 / 共 4 页
字号:
 280 00b6 8183      		std Z+1,r24
 179:mac.c         **** 	dataPkt->toAddr = OS_BCAST_ADDR;
 282               	.LM36:
 283 00b8 E091 0000 		lds r30,dataPkt
 284 00bc F091 0000 		lds r31,(dataPkt)+1
 285 00c0 8091 0000 		lds r24,OS_BCAST_ADDR
 286 00c4 8283      		std Z+2,r24
 180:mac.c         **** 	dataPkt->fromAddr = OS_LOCAL_ADDRESS;
 288               	.LM37:
 289 00c6 E091 0000 		lds r30,dataPkt
 290 00ca F091 0000 		lds r31,(dataPkt)+1
 291 00ce 8091 0000 		lds r24,OS_LOCAL_ADDRESS
 292 00d2 8383      		std Z+3,r24
 181:mac.c         **** 	dataPkt->group = 0x01;
 294               	.LM38:
 295 00d4 E091 0000 		lds r30,dataPkt
 296 00d8 F091 0000 		lds r31,(dataPkt)+1
 297 00dc 81E0      		ldi r24,lo8(1)
 298 00de 8483      		std Z+4,r24
 182:mac.c         **** 
 183:mac.c         ****     tryToSend();
 300               	.LM39:
 301 00e0 0E94 0000 		call tryToSend
 184:mac.c         ****     
 185:mac.c         **** 	return SUCCESS;
 303               	.LM40:
 304 00e4 81E0      		ldi r24,lo8(1)
 305 00e6 90E0      		ldi r25,hi8(1)
 186:mac.c         **** }
 307               	.LM41:
 308 00e8 0895      		ret
 309               	/* epilogue: frame size=0 */
 310 00ea 0895      		ret
 311               	/* epilogue end (size=1) */
 312               	/* function MACBroadcastMsg size 69 (68) */
 319               	.global	MACUnicastMsg
 321               	MACUnicastMsg:
 187:mac.c         **** 
 188:mac.c         **** /*************************************************************************
 189:mac.c         **** *功能描述:发送单播数据包的接口函数
 190:mac.c         **** *参数说明:包地址,包长度(包括包头),目的地址
 191:mac.c         **** *返回值:  
 192:mac.c         **** **************************************************************************/
 193:mac.c         **** result_t MACUnicastMsg(void* data, uint8_t length, uint8_t toAddr)
 194:mac.c         **** {
 323               	.LM42:
 324               	/* prologue: frame size=0 */
 325               	/* prologue end (size=0) */
 326 00ec FC01      		movw r30,r24
 195:mac.c         ****    	char intEnabled;					
 196:mac.c         **** 
 197:mac.c         **** 	// 错误的发送方式
 198:mac.c         **** 	if (data == 0 || length == 0 || length > MAX_PKT_LEN - MAC_HEADER_LEN) {
 328               	.LM43:
 329 00ee 892B      		or r24,r25
 330 00f0 C9F0      		breq .L21
 332               	.LM44:
 333 00f2 6623      		tst r22
 334 00f4 B9F0      		breq .L21
 335 00f6 6633      		cpi r22,lo8(54)
 336 00f8 A8F4      		brsh .L21
 199:mac.c         **** 		return FAIL;
 200:mac.c         **** 	}
 201:mac.c         **** 
 202:mac.c         **** 	// 设置发送请求标识
 203:mac.c         **** 	intEnabled = inp(SREG) & 0x80;
 338               	.LM45:
 339 00fa 9FB7      		in r25,95-0x20
 340 00fc 9078      		andi r25,lo8(-128)
 204:mac.c         **** 	cli();
 342               	.LM46:
 343               	/* #APP */
 344 00fe F894      		cli
 205:mac.c         **** 
 206:mac.c         **** 	if ((txRequest == 0)&&(AckWaitTime == 0)) {
 346               	.LM47:
 347               	/* #NOAPP */
 348 0100 8091 0000 		lds r24,txRequest
 349 0104 8823      		tst r24
 350 0106 59F4      		brne .L18
 351 0108 8091 0000 		lds r24,AckWaitTime
 352 010c 8823      		tst r24
 353 010e 39F4      		brne .L18
 207:mac.c         **** 		txRequest = 1;
 355               	.LM48:
 356 0110 81E0      		ldi r24,lo8(1)
 357 0112 8093 0000 		sts txRequest,r24
 208:mac.c         **** 		if (intEnabled) sei();
 359               	.LM49:
 360 0116 9923      		tst r25
 361 0118 41F0      		breq .L20
 362               	/* #APP */
 363 011a 7894      		sei
 364               	/* #NOAPP */
 365 011c 06C0      		rjmp .L20
 366               	.L18:
 209:mac.c         **** 	} else {     
 210:mac.c         **** 		if (intEnabled) sei();
 368               	.LM50:
 369 011e 9923      		tst r25
 370 0120 09F0      		breq .L21
 371               	/* #APP */
 372 0122 7894      		sei
 373               	/* #NOAPP */
 374               	.L21:
 211:mac.c         **** 		return FAIL;
 376               	.LM51:
 377 0124 80E0      		ldi r24,lo8(0)
 378 0126 90E0      		ldi r25,hi8(0)
 379 0128 0895      		ret
 380               	.L20:
 212:mac.c         **** 	}
 213:mac.c         ****     
 214:mac.c         **** 	dataPkt = (OSMACMsgPtr)data;
 382               	.LM52:
 383 012a F093 0000 		sts (dataPkt)+1,r31
 384 012e E093 0000 		sts dataPkt,r30
 215:mac.c         **** 	txPktLen = length + MAC_HEADER_LEN;
 386               	.LM53:
 387 0132 695F      		subi r22,lo8(-(7))
 388 0134 6093 0000 		sts txPktLen,r22
 216:mac.c         **** 	// 数据包包头设置
 217:mac.c         **** 	dataPkt->type = DATA_PKT;  
 390               	.LM54:
 391 0138 82E0      		ldi r24,lo8(2)
 392 013a 8183      		std Z+1,r24
 218:mac.c         **** 	dataPkt->toAddr = toAddr;
 394               	.LM55:
 395 013c E091 0000 		lds r30,dataPkt
 396 0140 F091 0000 		lds r31,(dataPkt)+1
 397 0144 4283      		std Z+2,r20
 219:mac.c         **** 	dataPkt->fromAddr = OS_LOCAL_ADDRESS;
 399               	.LM56:
 400 0146 E091 0000 		lds r30,dataPkt
 401 014a F091 0000 		lds r31,(dataPkt)+1
 402 014e 8091 0000 		lds r24,OS_LOCAL_ADDRESS
 403 0152 8383      		std Z+3,r24
 220:mac.c         **** 	dataPkt->group = 0x01;
 405               	.LM57:
 406 0154 E091 0000 		lds r30,dataPkt
 407 0158 F091 0000 		lds r31,(dataPkt)+1
 408 015c 81E0      		ldi r24,lo8(1)
 409 015e 8483      		std Z+4,r24
 221:mac.c         **** 
 222:mac.c         ****     tryToSend();
 411               	.LM58:
 412 0160 0E94 0000 		call tryToSend
 223:mac.c         **** 
 224:mac.c         **** 	
 225:mac.c         **** 	return SUCCESS;
 414               	.LM59:
 415 0164 81E0      		ldi r24,lo8(1)
 416 0166 90E0      		ldi r25,hi8(1)
 226:mac.c         **** }
 418               	.LM60:
 419 0168 0895      		ret
 420               	/* epilogue: frame size=0 */
 421 016a 0895      		ret
 422               	/* epilogue end (size=1) */
 423               	/* function MACUnicastMsg size 67 (66) */
 428               	MACTxReset:
 227:mac.c         **** 
 228:mac.c         **** /*************************************************************************
 229:mac.c         **** *功能描述:发送ack任务
 230:mac.c         **** *参数说明:无
 231:mac.c         **** *返回值:  
 232:mac.c         **** **************************************************************************/
 233:mac.c         **** static void sendACK(uint8_t DataSrcAddr){
 234:mac.c         ****     // 控制包初始化
 235:mac.c         **** 	ctrlPkt.fromAddr = OS_LOCAL_ADDRESS;
 236:mac.c         ****     ctrlPkt.type = ACK_PKT;
 237:mac.c         **** 	ctrlPkt.group = 0x01;
 238:mac.c         **** 	ctrlPkt.ack = 0x06;
 239:mac.c         **** 	ctrlPkt.length = 1;
 240:mac.c         ****     ctrlPktPt = &ctrlPkt; 
 241:mac.c         ****     ctrlPktPt->toAddr = DataSrcAddr;
 242:mac.c         **** 	ctrlPktLen = 1 + MAC_HEADER_LEN;
 243:mac.c         **** 	tryToSendACK();
 244:mac.c         **** }
 245:mac.c         **** /*************************************************************************
 246:mac.c         **** *功能描述:强行取消所有正在发送的任务
 247:mac.c         **** *参数说明:无
 248:mac.c         **** *返回值:  
 249:mac.c         **** **************************************************************************/
 250:mac.c         **** 
 251:mac.c         **** static result_t MACTxReset()
 252:mac.c         **** {   
 430               	.LM61:
 431               	/* prologue: frame size=0 */
 432               	/* prologue end (size=0) */
 253:mac.c         ****     radioState = RADIO_IDLE;
 434               	.LM62:
 435 016c 81E0      		ldi r24,lo8(1)
 436 016e 8093 0000 		sts radioState,r24
 254:mac.c         **** 	txRequest = 0;	
 438               	.LM63:
 439 0172 1092 0000 		sts txRequest,__zero_reg__
 255:mac.c         **** 	state = IDLE;
 441               	.LM64:
 442 0176 8093 0000 		sts state,r24
 256:mac.c         **** 	oldstate = IDLE;
 444               	.LM65:
 445 017a 8093 0000 		sts oldstate,r24
 257:mac.c         ****     return SUCCESS;
 258:mac.c         **** }
 447               	.LM66:
 448 017e 81E0      		ldi r24,lo8(1)
 449 0180 90E0      		ldi r25,hi8(1)
 450               	/* epilogue: frame size=0 */
 451 0182 0895      		ret
 452               	/* epilogue end (size=1) */
 453               	/* function MACTxReset size 12 (11) */
 457               	.global	MACPhysicalTxPktDone
 459               	MACPhysicalTxPktDone:
 259:mac.c         **** 
 260:mac.c         **** /*************************************************************************
 261:mac.c         **** *功能描述:发送广播包
 262:mac.c         **** *参数说明:无
 263:mac.c         **** *返回值:  
 264:mac.c         **** **************************************************************************/
 265:mac.c         **** static void startBcast()					
 266:mac.c         **** {							
 267:mac.c         **** 	PhysicalTxPkt(dataPkt, txPktLen);		// 调用物理层发送接口发送数据包
 268:mac.c         **** 	radioState = RADIO_TX;
 269:mac.c         **** 	state = TX_PKT;
 270:mac.c         **** 
 271:mac.c         **** }
 272:mac.c         **** /*************************************************************************
 273:mac.c         **** *功能描述:发送ack帧
 274:mac.c         **** *参数说明:
 275:mac.c         **** *返回值:  
 276:mac.c         **** **************************************************************************/
 277:mac.c         **** 
 278:mac.c         **** static void startACK()
 279:mac.c         **** {
 280:mac.c         ****     PhysicalTxPkt(ctrlPktPt,ctrlPktLen );		// 调用物理层发送接口发送数据包
 281:mac.c         **** 	radioState = RADIO_TX;
 282:mac.c         **** 	state = TX_PKT;
 283:mac.c         **** }
 284:mac.c         **** 
 285:mac.c         **** 
 286:mac.c         **** 
 287:mac.c         **** /*************************************************************************
 288:mac.c         **** *功能描述:物理层发送完成,通知MAC
 289:mac.c         **** *参数说明:包地址
 290:mac.c         **** *返回值:  
 291:mac.c         **** **************************************************************************/
 292:mac.c         **** result_t MACPhysicalTxPktDone(void* packet)
 293:mac.c         **** {   
 461               	.LM67:
 462               	/* prologue: frame size=0 */
 463               	/* prologue end (size=0) */
 464 0184 FC01      		movw r30,r24
 294:mac.c         **** 	char pktType;
 295:mac.c         **** 	
 296:mac.c         **** 	if (packet == 0 || state != TX_PKT) {
 466               	.LM68:
 467 0186 892B      		or r24,r25
 468 0188 21F0      		breq .L25
 470               	.LM69:
 471 018a 8091 0000 		lds r24,state
 472 018e 8330      		cpi r24,lo8(3)
 473 0190 29F0      		breq .L24
 474               	.L25:
 297:mac.c         **** 		MACTxReset();
 476               	.LM70:
 477 0192 0E94 0000 		call MACTxReset
 298:mac.c         **** 		return FAIL;  
 479               	.LM71:
 480 0196 80E0      		ldi r24,lo8(0)
 481 0198 90E0      		ldi r25,hi8(0)
 482 019a 0895      		ret
 483               	.L24:
 299:mac.c         **** 		}
 300:mac.c         **** 
 301:mac.c         **** 	pktType = *((char*)packet + 1);
 485               	.LM72:
 486 019c 8181      		ldd r24,Z+1
 302:mac.c         **** 	switch (pktType) { 
 488               	.LM73:
 489 019e 9927      		clr r25
 490 01a0 8230      		cpi r24,2
 491 01a2 9105      		cpc r25,__zero_reg__
 492 01a4 19F0      		breq .L29
 493 01a6 0397      		sbiw r24,3
 494 01a8 04F1      		brlt .L26
 495 01aa 1DC0      		rjmp .L37
 496               	.L29:
 303:mac.c         **** 	case RTS_PKT:
 304:mac.c         **** 	    break;
 305:mac.c         **** 	case CTS_PKT:  
 306:mac.c         **** 		break;
 307:mac.c         **** 	case DATA_PKT:
 308:mac.c         **** 		if (((OSMACMsgPtr)packet)->toAddr == OS_BCAST_ADDR) {	// 发广播完成
 498               	.LM74:
 499 01ac 9281      		ldd r25,Z+2
 500 01ae 8091 0000 		lds r24,OS_BCAST_ADDR
 501 01b2 9817      		cp r25,r24
 502 01b4 79F0      		breq .L32
 309:mac.c         **** 		    MACTxReset();
 310:mac.c         ****             TransmitDone(dataPkt);
 311:mac.c         ****         } 
 312:mac.c         **** 		else													// 发单播完成
 313:mac.c         **** 		{
 314:mac.c         **** 			if(ACK_ON == 1){
 504               	.LM75:
 505 01b6 8091 0000 		lds r24,ACK_ON
 506 01ba 8130      		cpi r24,lo8(1)
 507 01bc 59F4      		brne .L32
 508               	.LBB2:
 509               	.LBB3:
 315:mac.c         **** 			//县设置等待时间实现mac的隔离
 316:mac.c         **** 			SetWaitTime();
 317:mac.c         **** 			MACTxReset();
 318:mac.c         **** 			} else {
 319:mac.c         **** 			MACTxReset();
 320:mac.c         **** 			TransmitDone(dataPkt);
 321:mac.c         **** 			}
 322:mac.c         **** 			
 323:mac.c         ****         }
 324:mac.c         **** 		break;
 325:mac.c         **** 	case ACK_PKT:										// ACK发送完成,进入空闲
 326:mac.c         **** 	    MACTxReset();
 327:mac.c         **** 	    break;
 328:mac.c         **** 	default: MACTxReset();
 329:mac.c         **** 	}
 330:mac.c         **** 	return SUCCESS;
 331:mac.c         **** }

⌨️ 快捷键说明

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