📄 route.lst
字号:
127:route.c **** static void UpdateParentPool(void){
128:route.c **** uint8_t i;
129:route.c **** for(i = 0 ;i < MAXNEIGHBOR; i++) {
130:route.c **** if((nbrTable[i].state == SYMMETRICAL)&&(nbrTable[i].metric < metric )\
308 .LM42:
309 00f8 8181 ldd r24,Z+1
310 00fa 8130 cpi r24,lo8(1)
311 00fc 49F4 brne .L23
312 00fe 8281 ldd r24,Z+2
313 0100 8217 cp r24,r18
314 0102 30F4 brsh .L23
315 0104 8085 ldd r24,Z+8
316 0106 8823 tst r24
317 0108 19F0 breq .L23
318 010a 8081 ld r24,Z
319 010c 8C93 st X,r24
320 010e 01C0 rjmp .L22
321 .L23:
131:route.c **** &&(nbrTable[i].outdegree >= 1)) parentpool[i] = nbrTable[i].addr;
132:route.c **** else parentpool[i] = INVALID_NODE_ID;
323 .LM43:
324 0110 3C93 st X,r19
325 .L22:
327 .LM44:
328 0112 9150 subi r25,lo8(-(-1))
329 0114 3996 adiw r30,9
330 0116 1196 adiw r26,1
331 0118 97FF sbrs r25,7
332 011a EECF rjmp .L25
333 .LBE5:
334 .LBE4:
336 .LM45:
337 011c 80E0 ldi r24,lo8(pm(routeBroadcast))
338 011e 90E0 ldi r25,hi8(pm(routeBroadcast))
339 0120 0E94 0000 call OSPostTask
340 /* epilogue: frame size=0 */
341 0124 0895 ret
342 /* epilogue end (size=1) */
343 /* function routeTimerTask size 80 (79) */
359 routeBroadcast:
133:route.c **** }
134:route.c **** }
135:route.c **** /*************************************************************************
136:route.c **** *功能描述:路由包的建立和发送
137:route.c **** *参数说明:
138:route.c **** *返回值:
139:route.c **** *************************************************************************/
140:route.c **** static void routeBroadcast(void) {
361 .LM46:
362 /* prologue: frame size=0 */
363 0126 0F93 push r16
364 0128 1F93 push r17
365 012a CF93 push r28
366 012c DF93 push r29
367 /* prologue end (size=4) */
141:route.c **** //发送广播包
142:route.c **** uint8_t length;
143:route.c **** uint8_t i;
144:route.c **** SHopMsgPtr sHopMsg;
145:route.c **** sHopMsg = (SHopMsgPtr )routeMsgPtr->data;
369 .LM47:
370 012e C091 0000 lds r28,routeMsgPtr
371 0132 D091 0000 lds r29,(routeMsgPtr)+1
146:route.c ****
147:route.c **** sHopMsg->type = BROADCAST;
373 .LM48:
374 0136 84E0 ldi r24,lo8(4)
375 0138 8D83 std Y+5,r24
148:route.c **** sHopMsg->seq = broadseqno; //在发送完广播包以后需自加
377 .LM49:
378 013a 8091 0000 lds r24,broadseqno
379 013e 9091 0000 lds r25,(broadseqno)+1
380 0142 8E83 std Y+6,r24
381 0144 9F83 std Y+7,r25
149:route.c **** RoutePacket *broadPacket = (RoutePacket *) sHopMsg->data;
383 .LM50:
384 0146 8E01 movw r16,r28
385 0148 075F subi r16,lo8(-(9))
386 014a 1F4F sbci r17,hi8(-(9))
150:route.c **** if(GetFreeQueueLength() >= 1) broadPacket->QueueUseEnable = TRUE;
388 .LM51:
389 014c 0E94 0000 call GetFreeQueueLength
390 0150 8111 cpse r24,__zero_reg__
392 .LM52:
393 0152 81E0 ldi r24,lo8(1)
394 .L32:
151:route.c **** else broadPacket->QueueUseEnable = FALSE;
396 .LM53:
397 0154 8987 std Y+9,r24
152:route.c **** broadPacket->metric = metric;
399 .LM54:
400 0156 8091 0000 lds r24,metric
401 015a E801 movw r28,r16
402 015c 8983 std Y+1,r24
153:route.c **** ////
154:route.c **** if(OS_LOCAL_ADDRESS == SINKNODE ) broadPacket->outdegree = 255;
404 .LM55:
405 015e 8091 0000 lds r24,OS_LOCAL_ADDRESS
406 0162 8130 cpi r24,lo8(1)
407 0164 11F4 brne .L34
408 0166 8FEF ldi r24,lo8(-1)
409 0168 2BC0 rjmp .L55
410 .L34:
411 .LBB6:
412 .LBB7:
155:route.c **** else broadPacket->outdegree = GetLocalOutDegree();
156:route.c **** for (i = 0; i < MAXNEIGHBOR; i++) {
157:route.c **** broadPacket->neighbor[i] = nbrTable[i].addr;
158:route.c **** }
159:route.c ****
160:route.c **** length = sizeof(RoutePacket) + SHOP_HEADER_LEN;
161:route.c **** InBroadQueue(BROADCAST,length, routeMsgPtr);
162:route.c **** }
163:route.c ****
164:route.c **** static uint8_t GetLocalOutDegree(void){
165:route.c **** uint8_t i;
166:route.c **** uint16_t tempoutdegree = 0;
414 .LM56:
415 016a 20E0 ldi r18,lo8(0)
416 016c 30E0 ldi r19,hi8(0)
417 016e 5091 0000 lds r21,metric
418 0172 A0E0 ldi r26,lo8(nbrTable)
419 0174 B0E0 ldi r27,hi8(nbrTable)
420 0176 4DE1 ldi r20,lo8(29)
421 .L43:
167:route.c **** for(i = 0;i < MAXNEIGHBOR; i++) {
168:route.c **** if((nbrTable[i].addr != INVALID_NODE_ID)&&(nbrTable[i].state == SYMMETRICAL)\
423 .LM57:
424 0178 8C91 ld r24,X
425 017a 8F3F cpi r24,lo8(-1)
426 017c 99F0 breq .L38
427 017e FD01 movw r30,r26
428 0180 8181 ldd r24,Z+1
429 0182 8130 cpi r24,lo8(1)
430 0184 79F4 brne .L38
431 0186 E281 ldd r30,Z+2
432 0188 E517 cp r30,r21
433 018a 60F4 brsh .L38
434 .LBB8:
435 .LBB9:
169:route.c **** &&(nbrTable[i].metric < metric)) tempoutdegree = tempoutdegree + OutMapping(i);
170:route.c **** }
171:route.c **** if(tempoutdegree > 255 ) return 255;
172:route.c **** else return (tempoutdegree&0xff);
173:route.c **** }
174:route.c **** static uint8_t OutMapping(uint8_t i){
175:route.c ****
176:route.c **** if(nbrTable[i].metric <= 6) return DegreeTable[nbrTable[i].metric - 1];
437 .LM58:
438 018c E730 cpi r30,lo8(7)
439 018e 30F4 brsh .L40
440 0190 FF27 clr r31
441 0192 E050 subi r30,lo8(-(DegreeTable-1))
442 0194 F040 sbci r31,hi8(-(DegreeTable-1))
443 0196 8081 ld r24,Z
444 0198 9927 clr r25
445 019a 02C0 rjmp .L41
446 .L40:
177:route.c **** else return 1;
448 .LM59:
449 019c 81E0 ldi r24,lo8(1)
450 019e 90E0 ldi r25,hi8(1)
451 .L41:
452 .LBE9:
453 .LBE8:
455 .LM60:
456 01a0 280F add r18,r24
457 01a2 311D adc r19,__zero_reg__
458 .L38:
460 .LM61:
461 01a4 4150 subi r20,lo8(-(-1))
462 01a6 1996 adiw r26,9
463 01a8 47FF sbrs r20,7
464 01aa E6CF rjmp .L43
466 .LM62:
467 01ac 2F3F cpi r18,255
468 01ae 3105 cpc r19,__zero_reg__
469 01b0 21F0 breq .L44
470 01b2 18F0 brlo .L44
471 01b4 8FEF ldi r24,lo8(255)
472 01b6 90E0 ldi r25,hi8(255)
473 01b8 02C0 rjmp .L45
474 .L44:
476 .LM63:
477 01ba 822F mov r24,r18
478 01bc 9927 clr r25
479 .L45:
480 .LBE7:
481 .LBE6:
483 .LM64:
484 01be E801 movw r28,r16
485 .L55:
486 01c0 8A83 std Y+2,r24
487 01c2 D801 movw r26,r16
488 01c4 1396 adiw r26,3
489 01c6 E0E0 ldi r30,lo8(nbrTable)
490 01c8 F0E0 ldi r31,hi8(nbrTable)
491 01ca 9DE1 ldi r25,lo8(29)
492 .L50:
494 .LM65:
495 01cc 8081 ld r24,Z
496 01ce 3996 adiw r30,9
497 01d0 8D93 st X+,r24
499 .LM66:
500 01d2 9150 subi r25,lo8(-(-1))
501 01d4 97FF sbrs r25,7
502 01d6 FACF rjmp .L50
504 .LM67:
505 01d8 4091 0000 lds r20,routeMsgPtr
506 01dc 5091 0000 lds r21,(routeMsgPtr)+1
507 01e0 65E2 ldi r22,lo8(37)
508 01e2 84E0 ldi r24,lo8(4)
509 01e4 0E94 0000 call InBroadQueue
510 /* epilogue: frame size=0 */
511 01e8 DF91 pop r29
512 01ea CF91 pop r28
513 01ec 1F91 pop r17
514 01ee 0F91 pop r16
515 01f0 0895 ret
516 /* epilogue end (size=5) */
517 /* function routeBroadcast size 103 (94) */
531 .global routeBroadcastDone
533 routeBroadcastDone:
178:route.c **** }
179:route.c **** /*************************************************************************
180:route.c **** *功能描述:路由包的包号的递增
181:route.c **** *参数说明:发送包指针
182:route.c **** *返回值:
183:route.c **** *************************************************************************/
184:route.c **** void routeBroadcastDone(OSMACMsgPtr msg) {
535 .LM68:
536 /* prologue: frame size=0 */
537 /* prologue end (size=0) */
185:route.c ****
186:route.c **** broadseqno++;
539 .LM69:
540 01f2 8091 0000 lds r24,broadseqno
541 01f6 9091 0000 lds r25,(broadseqno)+1
542 01fa 0196 adiw r24,1
543 01fc 9093 0000 sts (broadseqno)+1,r25
544 0200 8093 0000 sts broadseqno,r24
545 /* epilogue: frame size=0 */
546 0204 0895 ret
547 /* epilogue end (size=1) */
548 /* function routeBroadcastDone size 10 (9) */
553 LocalAddrInReceive:
187:route.c **** }
188:route.c ****
189:route.c **** /*************************************************************************
190:route.c **** *功能描述:接受到路由包,进行相关的处理
191:route.c **** *参数说明:
192:route.c **** *返回值:
193:route.c **** *************************************************************************/
194:route.c **** void routeReceiveBroadcast(OSMACMsgPtr receivemsg) {
195:route.c ****
196:route.c **** SHopMsgPtr sHopMsg;
197:route.c **** uint8_t sourceaddr;
198:route.c **** uint8_t hopcount;
199:route.c **** uint16_t broadno;
200:route.c **** bool acceptable;
201:route.c **** uint8_t outdegree;
202:route.c ****
203:route.c **** sHopMsg = (SHopMsgPtr )receivemsg->data;
204:route.c **** broadno = sHopMsg->seq;
205:route.c **** RoutePacket *broadPacket = (RoutePacket *) sHopMsg->data;
206:route.c ****
207:route.c **** sourceaddr = receivemsg->fromAddr;
208:route.c **** hopcount = broadPacket->metric;
209:route.c **** acceptable = broadPacket->QueueUseEnable;
210:route.c **** outdegree = broadPacket->outdegree;
211:route.c ****
212:route.c **** LedGreenToggle(); //绿灯亮,表示接收到广播包
213:route.c ****
214:route.c **** tablemanage(outdegree,acceptable,sourceaddr,hopcount,broadno,receivemsg);
215:route.c ****
216:route.c **** if( OS_LOCAL_ADDRESS != SINKNODE ) {
217:route.c **** ChooseParent();
218:route.c **** }
219:route.c **** }
220:route.c ****
221:route.c **** /*************************************************************************
222:route.c **** *功能描述:路由表的修改(每收集到一个路由包都要修改路由表)
223:route.c **** *参数说明:acceptable 标示路由包源是否有缓冲区
224:route.c **** sourceaddr 标示路由包源的地址
225:route.c **** hopcount 标示路由包源的层号
226:route.c **** broadno 标示该路由包号
227:route.c **** receivemsg 标示接受到的包的指针
228:route.c **** *返回值:
229:route.c **** *************************************************************************/
230:route.c **** static void tablemanage(uint8_t outdegree,bool acceptable,uint8_t sourceaddr,uint8_t hopcount,uint1
231:route.c **** uint8_t location;
232:route.c **** ///metric变小最好暂时不要发送一个路由广播包,以防循环路由
233:route.c **** if(ReceiveInLocal(sourceaddr)){//发送路由包的节点在本节点的邻居表中
234:route.c **** location = GetLocation(sourceaddr);//定位相关路由记录表项
235:route.c **** if(LocalAddrInReceive(receivemsg)){ //本节点在路由包的源节点的邻居表中
236:route.c **** nbrTable[location].state = SYMMETRICAL;
237:route.c **** if (hopcount < ( metric - 1 ) ) {
238:route.c **** metric = hopcount + 1;
239:route.c **** if(acceptable&&(outdegree >= 1 )) InParentBool(nbrTable[location].addr,location);
240:route.c **** }
241:route.c **** }else {
242:route.c **** nbrTable[location].state = NOSYMMETRICAL;
243:route.c **** }
244:route.c **** nbrTable[location].metric = hopcount;
245:route.c **** nbrTable[location].broadseqno = broadno;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -