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

📄 mac.lst

📁 adhoc汇聚节点程序源代码(点对多点)——for atmega128
💻 LST
📖 第 1 页 / 共 4 页
字号:
 168:mac.c         **** result_t MACBroadcastMsg(void* data, uint8_t length)
 169:mac.c         **** {
 222               	.LM24:
 223               	/* prologue: frame size=0 */
 224               	/* prologue end (size=0) */
 225 0088 FC01      		movw r30,r24
 170:mac.c         **** 	char intEnabled;					
 171:mac.c         **** 
 172:mac.c         **** 	// 错误的发送方式
 173:mac.c         **** 	if (data == 0 || length == 0 || length > MAX_PKT_LEN - - MAC_HEADER_LEN) {
 227               	.LM25:
 228 008a 892B      		or r24,r25
 229 008c A9F0      		breq .L12
 231               	.LM26:
 232 008e 6623      		tst r22
 233 0090 99F0      		breq .L12
 234 0092 6C36      		cpi r22,lo8(108)
 235 0094 88F4      		brsh .L12
 174:mac.c         **** 		return FAIL;
 175:mac.c         **** 	}
 176:mac.c         **** 
 177:mac.c         **** 	// 设置发送请求标识
 178:mac.c         **** 	intEnabled = inp(SREG) & 0x80;
 237               	.LM27:
 238 0096 9FB7      		in r25,95-0x20
 239 0098 9078      		andi r25,lo8(-128)
 179:mac.c         **** 	cli();
 241               	.LM28:
 242               	/* #APP */
 243 009a F894      		cli
 180:mac.c         **** 
 181:mac.c         **** 	if (txRequest == 0) {
 245               	.LM29:
 246               	/* #NOAPP */
 247 009c 8091 0000 		lds r24,txRequest
 248 00a0 8823      		tst r24
 249 00a2 39F4      		brne .L9
 182:mac.c         **** 		txRequest = 1;
 251               	.LM30:
 252 00a4 81E0      		ldi r24,lo8(1)
 253 00a6 8093 0000 		sts txRequest,r24
 183:mac.c         **** 		if (intEnabled) sei();
 255               	.LM31:
 256 00aa 9923      		tst r25
 257 00ac 41F0      		breq .L11
 258               	/* #APP */
 259 00ae 7894      		sei
 260               	/* #NOAPP */
 261 00b0 06C0      		rjmp .L11
 262               	.L9:
 184:mac.c         **** 	} else {     
 185:mac.c         **** 		if (intEnabled) sei();
 264               	.LM32:
 265 00b2 9923      		tst r25
 266 00b4 09F0      		breq .L12
 267               	/* #APP */
 268 00b6 7894      		sei
 269               	/* #NOAPP */
 270               	.L12:
 186:mac.c         **** 		return FAIL;
 272               	.LM33:
 273 00b8 80E0      		ldi r24,lo8(0)
 274 00ba 90E0      		ldi r25,hi8(0)
 275 00bc 0895      		ret
 276               	.L11:
 187:mac.c         **** 	}
 188:mac.c         **** 
 189:mac.c         **** 	dataPkt = (OSMACMsgPtr)data;
 278               	.LM34:
 279 00be F093 0000 		sts (dataPkt)+1,r31
 280 00c2 E093 0000 		sts dataPkt,r30
 190:mac.c         **** 	txPktLen = length + MAC_HEADER_LEN;
 282               	.LM35:
 283 00c6 695F      		subi r22,lo8(-(7))
 284 00c8 6093 0000 		sts txPktLen,r22
 191:mac.c         **** 	sendAddr = OS_BCAST_ADDR;
 286               	.LM36:
 287 00cc 8091 0000 		lds r24,OS_BCAST_ADDR
 288 00d0 9927      		clr r25
 289 00d2 9093 0000 		sts (sendAddr)+1,r25
 290 00d6 8093 0000 		sts sendAddr,r24
 192:mac.c         **** 	// 数据包包头设置
 193:mac.c         **** 	dataPkt->type = DATA_PKT;  
 292               	.LM37:
 293 00da 82E0      		ldi r24,lo8(2)
 294 00dc 8183      		std Z+1,r24
 194:mac.c         **** 	dataPkt->toAddr = OS_BCAST_ADDR;
 296               	.LM38:
 297 00de E091 0000 		lds r30,dataPkt
 298 00e2 F091 0000 		lds r31,(dataPkt)+1
 299 00e6 8091 0000 		lds r24,OS_BCAST_ADDR
 300 00ea 8283      		std Z+2,r24
 195:mac.c         **** 	dataPkt->fromAddr = OS_LOCAL_ADDRESS;
 302               	.LM39:
 303 00ec E091 0000 		lds r30,dataPkt
 304 00f0 F091 0000 		lds r31,(dataPkt)+1
 305 00f4 8091 0000 		lds r24,OS_LOCAL_ADDRESS
 306 00f8 8383      		std Z+3,r24
 196:mac.c         **** 	dataPkt->group = 0x01;
 308               	.LM40:
 309 00fa E091 0000 		lds r30,dataPkt
 310 00fe F091 0000 		lds r31,(dataPkt)+1
 311 0102 81E0      		ldi r24,lo8(1)
 312 0104 8483      		std Z+4,r24
 197:mac.c         **** 
 198:mac.c         ****     tryToSend();
 314               	.LM41:
 315 0106 0E94 0000 		call tryToSend
 199:mac.c         **** 
 200:mac.c         **** 	return SUCCESS;
 317               	.LM42:
 318 010a 81E0      		ldi r24,lo8(1)
 319 010c 90E0      		ldi r25,hi8(1)
 201:mac.c         **** }
 321               	.LM43:
 322 010e 0895      		ret
 323               	/* epilogue: frame size=0 */
 324 0110 0895      		ret
 325               	/* epilogue end (size=1) */
 326               	/* function MACBroadcastMsg size 72 (71) */
 333               	.global	MACUnicastMsg
 335               	MACUnicastMsg:
 202:mac.c         **** 
 203:mac.c         **** /*************************************************************************
 204:mac.c         **** *功能描述:发送单播数据包的接口函数
 205:mac.c         **** *参数说明:包地址,包长度(包括包头),目的地址
 206:mac.c         **** *返回值:  
 207:mac.c         **** **************************************************************************/
 208:mac.c         **** result_t MACUnicastMsg(void* data, uint8_t length, uint16_t toAddr)
 209:mac.c         **** {
 337               	.LM44:
 338               	/* prologue: frame size=0 */
 339               	/* prologue end (size=0) */
 210:mac.c         **** 	return SUCCESS;
 211:mac.c         **** }
 341               	.LM45:
 342 0112 81E0      		ldi r24,lo8(1)
 343 0114 90E0      		ldi r25,hi8(1)
 344               	/* epilogue: frame size=0 */
 345 0116 0895      		ret
 346               	/* epilogue end (size=1) */
 347               	/* function MACUnicastMsg size 3 (2) */
 350               	.global	MACTxReset
 352               	MACTxReset:
 212:mac.c         **** 
 213:mac.c         **** /*************************************************************************
 214:mac.c         **** *功能描述:强行取消所有正在发送的任务
 215:mac.c         **** *参数说明:无
 216:mac.c         **** *返回值:  
 217:mac.c         **** **************************************************************************/
 218:mac.c         **** result_t MACTxReset()
 219:mac.c         **** {
 354               	.LM46:
 355               	/* prologue: frame size=0 */
 356               	/* prologue end (size=0) */
 220:mac.c         **** 	txRequest = 0;	
 358               	.LM47:
 359 0118 1092 0000 		sts txRequest,__zero_reg__
 221:mac.c         **** 	state = IDLE; 
 361               	.LM48:
 362 011c 81E0      		ldi r24,lo8(1)
 363 011e 8093 0000 		sts state,r24
 222:mac.c         **** 	return SUCCESS;
 223:mac.c         **** }
 365               	.LM49:
 366 0122 81E0      		ldi r24,lo8(1)
 367 0124 90E0      		ldi r25,hi8(1)
 368               	/* epilogue: frame size=0 */
 369 0126 0895      		ret
 370               	/* epilogue end (size=1) */
 371               	/* function MACTxReset size 8 (7) */
 375               	.global	MACPhysicalTxPktDone
 377               	MACPhysicalTxPktDone:
 224:mac.c         **** 
 225:mac.c         **** /*************************************************************************
 226:mac.c         **** *功能描述:发送广播包
 227:mac.c         **** *参数说明:无
 228:mac.c         **** *返回值:  
 229:mac.c         **** **************************************************************************/
 230:mac.c         **** static void startBcast()					
 231:mac.c         **** {							
 232:mac.c         **** 	PhysicalTxPkt(dataPkt, txPktLen);		// 调用物理层发送接口发送数据包
 233:mac.c         **** 	
 234:mac.c         **** 	radioState = RADIO_TX;
 235:mac.c         **** 	state = TX_PKT;
 236:mac.c         **** 	geneTime = TX_PKT_DONE_TIME;			// 设置超时计时
 237:mac.c         **** }
 238:mac.c         **** 
 239:mac.c         **** /*************************************************************************
 240:mac.c         **** *功能描述:单播包分段发送完成,通知上层
 241:mac.c         **** *参数说明:无
 242:mac.c         **** *返回值:  
 243:mac.c         **** **************************************************************************/
 244:mac.c         **** static void txMsgDone()
 245:mac.c         **** {
 246:mac.c         **** 	// 发送下一个分段
 247:mac.c         **** 	txRequest = 0;
 248:mac.c         ****     state = IDLE;
 249:mac.c         **** 
 250:mac.c         **** 	testBaseUnicastDone(dataPkt);
 251:mac.c         **** }
 252:mac.c         **** 
 253:mac.c         **** /*************************************************************************
 254:mac.c         **** *功能描述:物理层发送完成,通知MAC
 255:mac.c         **** *参数说明:包地址
 256:mac.c         **** *返回值:  
 257:mac.c         **** **************************************************************************/
 258:mac.c         **** result_t MACPhysicalTxPktDone(void* packet)
 259:mac.c         **** {
 379               	.LM50:
 380               	/* prologue: frame size=0 */
 381               	/* prologue end (size=0) */
 382 0128 FC01      		movw r30,r24
 260:mac.c         **** 	char pktType;
 261:mac.c         **** 	geneTime = 0;
 384               	.LM51:
 385 012a 1092 0000 		sts (geneTime)+1,__zero_reg__
 386 012e 1092 0000 		sts geneTime,__zero_reg__
 262:mac.c         **** 	radioState = RADIO_IDLE;
 388               	.LM52:
 389 0132 21E0      		ldi r18,lo8(1)
 390 0134 2093 0000 		sts radioState,r18
 263:mac.c         **** 	if (packet == 0 || state != TX_PKT) 
 392               	.LM53:
 393 0138 892B      		or r24,r25
 394 013a 21F0      		breq .L17
 396               	.LM54:
 397 013c 8091 0000 		lds r24,state
 398 0140 8330      		cpi r24,lo8(3)
 399 0142 19F0      		breq .L16
 400               	.L17:
 264:mac.c         **** 		return FAIL;  
 402               	.LM55:
 403 0144 80E0      		ldi r24,lo8(0)
 404 0146 90E0      		ldi r25,hi8(0)
 405 0148 0895      		ret
 406               	.L16:
 265:mac.c         **** 	pktType = *((char*)packet + 1);
 408               	.LM56:
 409 014a 8181      		ldd r24,Z+1
 266:mac.c         **** 	switch (pktType) { 
 411               	.LM57:
 412 014c 8230      		cpi r24,lo8(2)
 413 014e 79F4      		brne .L18
 267:mac.c         **** 	case RTS_PKT:
 268:mac.c         **** 		break;
 269:mac.c         **** 	case CTS_PKT:  
 270:mac.c         **** 		break;
 271:mac.c         **** 	case DATA_PKT:
 272:mac.c         **** 		if (((OSMACMsgPtr)packet)->toAddr == OS_BCAST_ADDR) {
 415               	.LM58:
 416 0150 9281      		ldd r25,Z+2
 417 0152 8091 0000 		lds r24,OS_BCAST_ADDR
 418 0156 9817      		cp r25,r24
 419 0158 51F4      		brne .L18
 273:mac.c         ****             state = IDLE;
 421               	.LM59:
 422 015a 2093 0000 		sts state,r18
 274:mac.c         ****             txRequest = 0;
 424               	.LM60:
 425 015e 1092 0000 		sts txRequest,__zero_reg__
 275:mac.c         ****             testBaseBroadcastDone(dataPkt);
 427               	.LM61:
 428 0162 8091 0000 		lds r24,dataPkt
 429 0166 9091 0000 		lds r25,(dataPkt)+1
 430 016a 0E94 0000 		call testBaseBroadcastDone
 431               	.L18:
 276:mac.c         **** 		} 
 277:mac.c         **** 		break;
 278:mac.c         **** 	case ACK_PKT:										// ACK发送完成,进入空闲
 279:mac.c         **** 		break;
 280:mac.c         **** 	}
 281:mac.c         **** 	return SUCCESS;
 433               	.LM62:
 434 016e 81E0      		ldi r24,lo8(1)
 435 0170 90E0      		ldi r25,hi8(1)
 282:mac.c         **** }
 437               	.LM63:
 438 0172 0895      		ret
 439               	/* epilogue: frame size=0 */

⌨️ 快捷键说明

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