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

📄 sosos.lst

📁 基于AVR平台的RTOS
💻 LST
📖 第 1 页 / 共 5 页
字号:
 325 0108 9983      		mov r24,r25
 326 010a ED81      		subi r24,lo8(-(-16))
 327 010c FE81      		cpi r24,lo8(113)
 328 010e FC83      		brsh .L22
 330               	.LM32:
 331               		ldd r24,Z+9
 332               		tst r24
 333 0112 FD01      		breq .L22
 335 0116 892F      	.LM33:
 336 0118 8051      		subi r24,lo8(-(-1))
 337 011a 8137      		std Z+9,r24
 339               	.LM34:
 340               		tst r24
 341 011e 8185      		brne .L25
 343 0122 01F0      	.LM35:
 344               		ldd r30,Y+3
 345               		ldd r31,Y+4
 346 0124 8150      		ld r24,Z
 347 0126 8187      		ldd r31,Y+1
 348               		or r24,r31
 349               		ldd r30,Y+3
 350 0128 8823      		ldd r31,Y+4
 351 012a 01F4      		st Z,r24
 353               	.LM36:
 354 012c EB81      		cpi r25,lo8(17)
 355 012e FC81      		brlo .L27
 357 0132 F981      	.LM37:
 358 0134 8F2B      		subi r25,lo8(-(112))
 359 0136 EB81      		movw r30,r26
 360 0138 FC81      		std Z+6,r25
 361 013a 8083      		rjmp .L29
 362               	.L27:
 364 013c 9131      	.LM38:
 365 013e 00F0      		movw r30,r26
 366               		std Z+6,__zero_reg__
 367               	.L29:
 369 0142 FD01      	.LM39:
 370 0144 9683      		cp r22,r16
 371 0146 00C0      		brsh .L22
 373               	.LM40:
 374               		ori r17,lo8(1)
 375 0148 FD01      		rjmp .L22
 376 014a 1682      	.L25:
 378               	.LM41:
 379               		or r18,r19
 380 014c 6017      	.L22:
 118:sosos.c       **** #else
 119:sosos.c       ****            if(SOSOS_RUNNING_TASK_PRI>i){
 120:sosos.c       **** #endif
 121:sosos.c       ****              set_bit(SOSOS_STATE,STATE_SCHED_REQ);
 382               	1,lo8(-(1))
 383               		std Y+2,r31
 384 0150 1160      		cpi r31,lo8(2)
 385 0152 00C0      		breq .L31
 122:sosos.c       ****              }
 123:sosos.c       ****            }
 124:sosos.c       ****          else
 125:sosos.c       ****            SOSOS_WAIT_TASK=SOSOS_WAIT_TASK|tmpi;
 387               	:
 388               		ldd r24,Y+1
 389 0154 232B      		lsl r24
 390               		std Y+1,r24
 126:sosos.c       ****          }
 127:sosos.c       ****        }
 128:sosos.c       ****      tmpj=tmpj<<1;
 129:sosos.c       ****      point++;
 391               	p .L21
 392               	.L31:
 393 0156 1A96      		subi r20,lo8(-(20))
 394               		sbci r21,hi8(-(20))
 396 0158 FA81      	.LM45:
 397 015a FF5F      		lsl r19
 398 015c FA83      		subi r22,lo8(-(1))
 399 015e F230      		sbci r23,hi8(-(1))
 400 0160 01F0      		ldd r30,Y+5
 401               		ldd r31,Y+6
 402               		adiw r30,1
 403 0162 8981      		std Y+6,r31
 404 0164 880F      		std Y+5,r30
 406 0168 00C0      	.LM46:
 407               		cpi r22,3
 408 016a 4C5E      		cpc r23,__zero_reg__
 409 016c 5F4F      		breq .+2
 130:sosos.c       ****      }
 131:sosos.c       ****    tmpi=tmpi<<1;
 410               	r18
 412 016e 330F      	.LM47:
 413 0170 6F5F      		mov r24,r8
 414 0172 7F4F      		subi r24,lo8(-(1))
 415 0174 ED81      		mov r8,r24
 416 0176 FE81      		breq .L38
 418 017a FE83      	.LM48:
 419 017c ED83      		clr r8
 421               	.LM49:
 422 017e 6330      		cp r16,r10
 423 0180 7105      		brne .L38
 424 0182 01F0      		mov r30,r16
 425 0184 00C0      		clr r31
 426 0186 922E      		subi r30,lo8(-(SOSOS_TASK_READY))
 132:sosos.c       ****    }
 133:sosos.c       **** //时间片轮换处理
 134:sosos.c       ****  if((++SOSOS_TIMESLICE)>=SYS_TIMESLICE){
 427               	OSOS_TASK_READY))
 428               		ld r24,Z
 429 0188 882D      		cpse r24,r12
 431 018c 882E      	.LM50:
 432 018e 01F0      		ori r17,lo8(1)
 135:sosos.c       ****    SOSOS_TIMESLICE=0;
 433               	/* epilogue: frame size=6 */
 434               		adiw r28,6
 435 0190 8824      		in __tmp_reg__,__SREG__
 136:sosos.c       **** #if SOSOS_MUTEX_ENABLE == 1
 137:sosos.c       ****    if((SOSOS_RUNNING_INHERIT_PRI==SOSOS_RUNNING_TASK_PRI)&&(SOSOS_TASK_READY[SOSOS_RUNNING_TASK_PRI
 436               	i
 437               		out __SP_H__,r29
 438 0192 0A15      		out __SREG__,__tmp_reg__
 439 0194 01F4      		out __SP_L__,r28
 440 0196 E02F      		pop r29
 441 0198 FF27      		pop r28
 442 019a E050      		pop r16
 443 019c F040      		ret
 444 019e 8081      	/* epilogue end (size=10) */
 445 01a0 8C11      	/* function SososTimer0 size 126 (105) */
 138:sosos.c       **** #else
 139:sosos.c       ****    if(SOSOS_TASK_READY[SOSOS_RUNNING_TASK_PRI]!=SOSOS_RUNNING_TASK_ID_INDEX)
 140:sosos.c       **** #endif
 141:sosos.c       ****      set_bit(SOSOS_STATE,STATE_SCHED_REQ);
 446               	osTimer0, .-SososTimer0
 453 01a8 F894      	.Lscope3:
 455 01ac 0FBE      	.global	SososSched
 457 01b0 DF91      	SososSched:
 459 01b4 0F91      	.LM51:
 460 01b6 0895      	/* prologue: frame size=0 */
 461               	/* prologue: naked */
 462               	/* prologue end (size=0) */
 464               	.LM52:
 465               	/* #APP */
 466               		POP __tmp_reg__ 
 467               		
 469               	.LM53:
 470               		POP __tmp_reg__ 
 471               		
 473               	.LM54:
 474               	/* #NOAPP */
 142:sosos.c       ****    }
 143:sosos.c       **** }
 144:sosos.c       **** #endif
 145:sosos.c       **** 
 146:sosos.c       **** #if SOSOS_TASK_ENALBE == 1
 147:sosos.c       **** void SososSched (void) __attribute__ ((naked));//任务调度
 148:sosos.c       **** void SososSched(void)//任务调度
 149:sosos.c       **** //本函数是任务调度的核心函数,提供优先级继承的调度支持,进入时中断应该是关闭的
 150:sosos.c       **** {
 475               		mov r17,r24
 477               	.LM55:
 478               	/* #APP */
 479               		SEI 
 151:sosos.c       ****   __asm__ __volatile__("POP __tmp_reg__ \n\t");
 480               	tabn	68,0,160,.LM56-SososSched
 481               	.LM56:
 482               		NOP 
 483 01b8 0F90      		
 152:sosos.c       ****   __asm__ __volatile__("POP __tmp_reg__ \n\t");
 485               	:
 486               		CLI 
 487 01ba 0F90      		
 153:sosos.c       **** 
 154:sosos.c       ****  set_bit(SOSOS_STATE,STATE_SCHED_RUN);
 489               	8:
 490               	/* #NOAPP */
 491               		andi r17,lo8(-4)
 492 01bc 812F      		mov r19,r10
 493 01be 8260      		mov r18,r12
 155:sosos.c       ****  ENABLE_INTERRUPT();
 495               	
 496               		mov r22,r11
 497               		subi r22,lo8(-(1))
 498 01c2 7894      		ldi r20,lo8(0)
 499               		ldi r21,hi8(0)
 156:sosos.c       **** #if SOSOS_WDT_ENABLE == 1
 157:sosos.c       **** //看门狗
 158:sosos.c       ****  SOSOS_WDT_RST();//复位看门狗
 159:sosos.c       **** #else
 160:sosos.c       ****  __asm__ __volatile__("NOP \n\t");
 500               	 r26,lo8(SOSOS_TASK_READY)
 501               		ldi r27,hi8(SOSOS_TASK_READY)
 502 01c4 0000      	.L42:
 161:sosos.c       **** #endif
 162:sosos.c       ****  DISABLE_INTERRUPT();
 504               	0:
 505               		ld r24,X
 506 01c6 F894      		tst r24
 507               		breq .L43
 163:sosos.c       **** 
 164:sosos.c       ****  SOSOS_STATE=SOSOS_STATE&(~((1<<STATE_SCHED_RUN)|(1<<STATE_SCHED_REQ)));
 508               	abn	68,0,172,.LM61-SososSched
 509               	.LM61:
 510               		cp r19,r20
 511 01c8 1C7F      		breq .L45
 512 01ca 3A2D      		mov r19,r20
 513 01cc 2C2D      		rjmp .L68
 165:sosos.c       **** 
 166:sosos.c       ****  unsigned char i,j,SOSOS_TMP;
 167:sosos.c       **** 
 168:sosos.c       **** //任务调度
 169:sosos.c       ****  for(i=0;i<SOSOS_PRI_MAX;i++){
 170:sosos.c       ****    if(SOSOS_TASK_READY[i]==0)
 171:sosos.c       ****      continue;
 172:sosos.c       ****    if(SOSOS_RUNNING_TASK_PRI==i){
 173:sosos.c       ****      SOSOS_TMP=SOSOS_TASK_READY[i]&(~SOSOS_RUNNING_TASK_ID_INDEX);
 174:sosos.c       ****      if(SOSOS_TMP==0)
 175:sosos.c       ****        goto SososSchedEnd;
 176:sosos.c       **** 
 177:sosos.c       ****      if(SOSOS_TMP>SOSOS_RUNNING_TASK_ID_INDEX){
 178:sosos.c       ****        SOSOS_TMP=SOSOS_RUNNING_TASK_ID+1;
 515               	.LM62:
 516 01ce 6B2D      		ld r25,X
 517 01d0 6F5F      		mov r24,r18
 518 01d2 40E0      		com r24
 519 01d4 50E0      		and r25,r24
 521 01d8 B0E0      	.LM63:
 522               		breq .L48
 524               	.LM64:
 525 01da 8C91      		cp r18,r25
 526 01dc 8823      		brlo .L50
 527 01de 01F0      	.L68:
 528               		ldi r24,lo8(0)
 529               		ldi r18,lo8(1)
 530 01e0 3417      		rjmp .L47
 531 01e2 01F0      	.L50:
 533 01e6 00C0      	.LM65:
 534               		lsl r18
 535               		mov r24,r22
 536               	.L47:
 537 01e8 9C91      		mov r25,r24
 538 01ea 822F      		movw r30,r26
 539 01ec 8095      		rjmp .L52
 540 01ee 9823      	.L53:
 542               	.LM66:
 543 01f0 01F0      		ld r24,Z
 544               		and r24,r18
 545               		brne .L65
 547 01f4 00F0      	.LM67:
 548               		lsl r18
 550 01f8 21E0      	.LM68:
 551 01fa 00C0      		subi r25,lo8(-(1))
 552               	.L52:
 179:sosos.c       ****        SOSOS_RUNNING_TASK_ID_INDEX=SOSOS_RUNNING_TASK_ID_INDEX<<1;
 553               	r20,lo8(-(1))
 554               		sbci r21,hi8(-(1))
 555 01fc 220F      		adiw r26,1
 557               	.LM69:
 558 0200 982F      		cpi r20,3
 559 0202 FD01      		cpc r21,__zero_reg__
 560 0204 00C0      		brne .L42
 561               		rjmp .L48
 180:sosos.c       ****        }
 181:sosos.c       ****      else{
 182:sosos.c       ****        SOSOS_TMP=0;
 183:sosos.c       ****        SOSOS_RUNNING_TASK_ID_INDEX=1;
 184:sosos.c       ****        }
 185:sosos.c       ****      }
 186:sosos.c       ****    else{
 187:sosos.c       ****      SOSOS_RUNNING_TASK_PRI=i;
 188:sosos.c       ****      SOSOS_TMP=0;
 189:sosos.c       ****      SOSOS_RUNNING_TASK_ID_INDEX=1;
 190:sosos.c       ****      }
 191:sosos.c       **** 
 192:sosos.c       ****    for(j=SOSOS_TMP;j<SOSOS_MAX_TASK_PER_PRI;j++){
 193:sosos.c       ****      if((SOSOS_TASK_READY[i]&SOSOS_RUNNING_TASK_ID_INDEX)!=0){
 562               	tabn	68,0,193,.LM70-SososSched
 563               	.LM70:
 564 0206 8081      		mov r10,r19
 565 0208 8223      		mov r12,r18
 194:sosos.c       ****        SOSOS_RUNNING_TASK_ID=j;
 195:sosos.c       ****        goto SososSchedEnd;
 196:sosos.c       ****        }
 197:sosos.c       ****      else
 198:sosos.c       ****        SOSOS_RUNNING_TASK_ID_INDEX=SOSOS_RUNNING_TASK_ID_INDEX<<1;
 567               	:
 568               		mov r11,r25
 569 020c 220F      		rjmp .L56
 570               	.L48:
 572 020e 9F5F      	.LM72:
 573               		mov r10,r19
 574 0210 9230      		mov r12,r18
 575 0212 00F0      	.L56:
 577 0214 4F5F      	.LM73:
 578 0216 5F4F      		mov r6,r10
 580               	.LM74:
 581               		lds r26,SOSOS_MUTEX_POINT
 582 021a 4330      		lds r27,(SOSOS_MUTEX_POINT)+1
 583 021c 5105      		sbiw r26,0
 584 021e 01F4      		breq .L58
 585 0220 00C0      		ldi r28,lo8(1)
 586               		ldi r29,hi8(1)
 587               	.L59:
 588               	.LBB2:
 590 0224 C22E      	.LM75:
 591               		movw r30,r26
 592               		ldd r22,Z+2
 593 0226 B92E      		cp r10,r22
 594 0228 00C0      		brlo .L58
 596               	.LM76:
 597               		ldd r21,Z+3
 598 022a A32E      		mov r30,r21
 599 022c C22E      		clr r31
 600               		subi r30,lo8(-(SOSOS_TASK_READY))
 199:sosos.c       ****      }
 200:sosos.c       ****    }
 201:sosos.c       **** 
 202:sosos.c       **** SososSchedEnd:
 203:sosos.c       **** #if SOSOS_MUTEX_ENABLE == 1
 204:sosos.c       ****  SOSOS_RUNNING_INHERIT_PRI=SOSOS_RUNNING_TASK_PRI;
 601               	
 602               		ld r24,Z
 603 022e 6A2C      		clr r25
 205:sosos.c       ****  if(SOSOS_MUTEX_POINT!=0){//互斥型信号量队列有成员
 604               	ovw r30,r26
 605               		ldd r20,Z+4
 606 0230 A091 0000 		mov r18,r20
 607 0234 B091 0000 		clr r19
 608 0238 1097      		mov r0,r18
 609 023a 01F0      		rjmp 2f
 610 023c C1E0      	1:	asr r25
 611 023e D0E0      		ror r24
 612               	2:	dec r0
 613               		brpl 1b
 206:sosos.c       ****    SOSOS_MUTEX * mutex;
 207:sosos.c       **** 
 208:sosos.c       ****    mutex=SOSOS_MUTEX_POINT;
 209:sosos.c       ****    while(mutex!=0){

⌨️ 快捷键说明

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