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

📄 sosos.lst

📁 基于AVR平台的RTOS
💻 LST
📖 第 1 页 / 共 5 页
字号:
 1215 04f0 3197      	.LM131:
 346:sosos.c       ****  *stack--=0x15;//R21
 1216               	 r30,r22
 1217               		subi r30,lo8(-(SOSOS_TASK_READY))
 1218 04f2 85E1      		sbci r31,hi8(-(SOSOS_TASK_READY))
 1219 04f4 8083      		ld r18,Z
 1220 04f6 3197      		ldi r24,lo8(1)
 347:sosos.c       ****  *stack--=0x16;//R22
 1221               	r25,hi8(1)
 1222               		rjmp 2f
 1223 04f8 86E1      	1:	lsl r24
 1224 04fa 8083      		rol r25
 1225 04fc 3197      	2:	dec r20
 348:sosos.c       ****  *stack--=0x17;//R23
 1226               	 1b
 1227               		or r18,r24
 1228 04fe 87E1      		st Z,r18
 1230 0502 9F01      	.LM132:
 1231 0504 2150      		movw r30,r26
 1232 0506 3040      		std Z+6,__zero_reg__
 349:sosos.c       ****  *stack--=(SOSOS_ADDRESS)ptr;//R24
 1233               		68,0,361,.LM133-SososCreateTask
 1234               	.LM133:
 1235 0508 8B81      	/* #APP */
 1236 050a F901      		SEI 
 1237 050c 8083      		
 1238 050e 2150      	/* #NOAPP */
 1239 0510 3040      		ldi r24,lo8(0)
 1240 0512 3E83      		ldi r25,hi8(0)
 1241 0514 2D83      		rjmp .L86
 350:sosos.c       ****  *stack--=(SOSOS_ADDRESS)ptr>>8;//R25
 1242               	tabn	68,0,362,.LM134-SososCreateTask
 1243               	.LM134:
 1244 0516 EB81      		ldi r24,lo8(253)
 1245 0518 FC81      		ldi r25,hi8(253)
 1246 051a 8F2F      	.L86:
 1247 051c 9927      	/* epilogue: frame size=8 */
 1248 051e F901      		adiw r28,8
 1249 0520 8083      		in __tmp_reg__,__SREG__
 1250 0522 ED81      		cli
 1251 0524 FE81      		out __SP_H__,r29
 1252 0526 3197      		out __SREG__,__tmp_reg__
 351:sosos.c       ****  *stack--=0x1a;//R26
 1253               	__,r28
 1254               		pop r29
 1255 0528 8AE1      		pop r28
 1256 052a 8083      		pop r16
 1257 052c 3197      		ret
 352:sosos.c       ****  *stack--=0x1b;//R27
 1258               	ilogue end (size=10) */
 1259               	/* function SososCreateTask size 216 (195) */
 1261 0530 8083      	.Lscope7:
 353:sosos.c       ****  *stack--=0x1e;//R30
 1263               	al	SososGetTaskId
 1265 0534 8EE1      	SososGetTaskId:
 1267 0538 3197      	.LM135:
 354:sosos.c       ****  *stack--=0x1f;//R31
 1268               	ologue: frame size=0 */
 1269               	/* prologue end (size=0) */
 1270 053a 8FE1      		mov r24,r10
 1271 053c 8083      		swap r24
 1272 053e 3197      		andi r24,0xf0
 355:sosos.c       ****  *stack--=0x1c;//R28
 1273               	r24,r11
 1275 0540 8CE1      	.LM136:
 1276 0542 8083      		clr r25
 1277 0544 3197      	/* epilogue: frame size=0 */
 356:sosos.c       ****  *stack--=0x1d;//R29
 1278               	/* epilogue end (size=1) */
 1279               	/* function SososGetTaskId size 6 (5) */
 1281 0548 8083      	.Lscope8:
 357:sosos.c       **** //保存栈顶
 358:sosos.c       ****  TCB[pri*SOSOS_MAX_TASK_PER_PRI+id].TASK_STACK_POINT=(SOSOS_ADDRESS)stack;
 1282               	abs	"SososSuspendTask:F(0,15)",36,0,0,SososSuspendTask
 1285 054c 1196      	.global	SososSuspendTask
 1287 0550 EE93      	SososSuspendTask:
 359:sosos.c       ****  set_bit(SOSOS_TASK_READY[pri],id);//设置任务就绪状态
 1288               	n	68,0,379,.LM137-SososSuspendTask
 1289               	.LM137:
 1290 0552 FB01      	/* prologue: frame size=0 */
 1291 0554 E050      	/* prologue end (size=0) */
 1293 0558 2081      	.LM138:
 1294 055a 81E0      	/* #APP */
 1295 055c 90E0      		IN __tmp_reg__,__SREG__ 
 1296 055e 00C0      		
 1297 0560 880F      		CLI 
 1298 0562 991F      		
 1299 0564 4A95      		PUSH __tmp_reg__ 
 1300 0566 02F4      		
 1302 056a 2083      	.LM139:
 360:sosos.c       ****  TCB[pri*SOSOS_MAX_TASK_PER_PRI+id].TASK_STATE=TASK_STATE_OK;
 1303               	ov r30,r24
 1304               		clr r31
 1305 056c FD01      		subi r30,lo8(-(SOSOS_TASK_READY))
 1306 056e 1682      		sbci r31,hi8(-(SOSOS_TASK_READY))
 361:sosos.c       ****  ENABLE_INTERRUPT();
 1307               	r25,Z
 1308               		ldi r18,lo8(1)
 1309               		ldi r19,hi8(1)
 1310 0570 7894      		mov r0,r22
 1311               		rjmp 2f
 1312               	1:	lsl r18
 1313 0572 80E0      		rol r19
 1314 0574 90E0      	2:	dec r0
 1315 0576 00C0      		brpl 1b
 1316               		com r18
 362:sosos.c       ****  return SOSOS_OK;
 1317               	18
 1318               		st Z,r25
 1320 057a 90E0      	.LM140:
 1321               		cp r24,r10
 1322               		brne .L100
 1324 057e 0FB6      	.LM141:
 1325 0580 F894      		cp r22,r11
 1326 0582 DEBF      		brne .L100
 1328 0586 CDBF      	.LM142:
 1329 0588 DF91      		rcall SososScheder
 1330 058a CF91      	.L100:
 1332 058e 0895      	.LM143:
 1333               	/* #APP */
 1334               		POP __tmp_reg__ 
 1335               		
 1336               		OUT __SREG__,__tmp_reg__ 
 1337               		
 1338               	/* #NOAPP */
 1339               	/* epilogue: frame size=0 */
 1340               		ret
 363:sosos.c       **** }
 364:sosos.c       **** #endif
 365:sosos.c       **** 
 366:sosos.c       **** #if SOSOS_GET_TASK_ID_ENABLE == 1
 367:sosos.c       **** unsigned char SososGetTaskId(void)//获得当前任务ID
 368:sosos.c       **** //返回值的高半字节是任务优先级,低半字节是任务在该优先级的ID
 369:sosos.c       **** {
 1341               	 */
 1342               	/* function SososSuspendTask size 42 (41) */
 1344               	.Lscope9:
 1348 0596 8B0D      	.global	SososResumeTask
 370:sosos.c       ****  return((SOSOS_RUNNING_TASK_PRI<<4)+SOSOS_RUNNING_TASK_ID);
 371:sosos.c       ****  }
 1349               	ososResumeTask, @function
 1350               	SososResumeTask:
 1352               	.LM144:
 1353 059a 0895      	/* prologue: frame size=0 */
 1354               	/* prologue end (size=0) */
 1356               	.LM145:
 1357               	/* #APP */
 1358               		IN __tmp_reg__,__SREG__ 
 1359               		
 1360               		CLI 
 1361               		
 1362               		PUSH __tmp_reg__ 
 1363               		
 372:sosos.c       **** #endif
 373:sosos.c       **** 
 374:sosos.c       **** #if SOSOS_SUSPEND_TASK_ENABLE == 1
 375:sosos.c       **** void SososSuspendTask(unsigned char pri,unsigned char id)//挂起任务
 376:sosos.c       **** //挂起指定的任务,不要在中断中调用该函数
 377:sosos.c       **** //pri:优先级
 378:sosos.c       **** //id:任务在本优先级的表示号
 379:sosos.c       **** {
 1364               	7,.LM146-SososResumeTask
 1365               	.LM146:
 1366               	/* #NOAPP */
 1367               		mov r30,r24
 380:sosos.c       ****  ENTER_CRITICAL();
 1368               	 r31
 1369               		subi r30,lo8(-(SOSOS_TASK_READY))
 1370               		sbci r31,hi8(-(SOSOS_TASK_READY))
 1371 059c 0FB6      		ld r25,Z
 1372               		ldi r18,lo8(1)
 1373 059e F894      		ldi r19,hi8(1)
 1374               		rjmp 2f
 1375 05a0 0F92      	1:	lsl r18
 1376               		rol r19
 381:sosos.c       ****  clr_bit(SOSOS_TASK_READY[pri],id);//清除任务就绪状态
 1377               	2
 1378               		brpl 1b
 1379               		or r25,r18
 1380 05a2 E82F      		st Z,r25
 1382 05a6 E050      	.LM147:
 1383 05a8 F040      		cp r24,r6
 1384 05aa 9081      		brsh .L105
 1386 05ae 30E0      	.LM148:
 1387 05b0 062E      		rcall SososScheder
 1388 05b2 00C0      	.L105:
 1390 05b6 331F      	.LM149:
 1391 05b8 0A94      	/* #APP */
 1392 05ba 02F4      		POP __tmp_reg__ 
 1393 05bc 2095      		
 1394 05be 9223      		OUT __SREG__,__tmp_reg__ 
 1395 05c0 9083      		
 382:sosos.c       **** 
 383:sosos.c       ****  if((pri==SOSOS_RUNNING_TASK_PRI)&&(id==SOSOS_RUNNING_TASK_ID)){
 1396               	logue: frame size=0 */
 1397               		ret
 1398 05c2 8A15      	/* epilogue end (size=1) */
 1399 05c4 01F4      	/* function SososResumeTask size 39 (38) */
 1401               	.Lscope10:
 384:sosos.c       ****    SososScheder();//挂起的是当前任务,重新调度
 1404               	SososDelay
 1406 05ca 00D0      	SososDelay:
 385:sosos.c       ****    }
 386:sosos.c       ****  EXIT_CRITICAL();
 1408               	50:
 1409               	/* prologue: frame size=0 */
 1410               	/* prologue end (size=0) */
 1411 05cc 0F90      		movw r18,r24
 1413 05ce 0FBE      	.LM151:
 1414               		or r24,r25
 1415               		breq .L111
 1417 05d0 0895      	.LM152:
 1418               	/* #APP */
 1419               		IN __tmp_reg__,__SREG__ 
 1420               		
 1421               		CLI 
 1422               		
 1423               		PUSH __tmp_reg__ 
 1424               		
 1426               	.LM153:
 1427               	/* #NOAPP */
 387:sosos.c       **** }
 388:sosos.c       **** #endif
 389:sosos.c       **** 
 390:sosos.c       **** #if SOSOS_RESUME_TASK_ENABLE == 1
 391:sosos.c       **** void SososResumeTask(unsigned char pri,unsigned char id)//恢复任务
 392:sosos.c       **** //恢复指定的任务,不要在中断中调用该函数
 393:sosos.c       **** //pri:优先级
 394:sosos.c       **** //id:任务在本优先级的表示号
 395:sosos.c       **** {
 1428               	1
 1429               		ldi r24,lo8(1)
 1430               		ldi r25,hi8(1)
 1431               		mov r0,r30
 396:sosos.c       ****  ENTER_CRITICAL();
 1432               	p 2f
 1433               	1:	lsl r24
 1434               		rol r25
 1435 05d2 0FB6      	2:	dec r0
 1436               		brpl 1b
 1437 05d4 F894      		or r9,r24
 1439 05d6 0F92      	.LM154:
 1440               		movw r26,r30
 397:sosos.c       ****  set_bit(SOSOS_TASK_READY[pri],id);//设置任务就绪状态
 1441               	,lo8(-(SOSOS_TASK_READY))
 1442               		sbci r27,hi8(-(SOSOS_TASK_READY))
 1443               		ld r24,X
 1444 05d8 E82F      		mov r25,r12
 1445 05da FF27      		com r25
 1446 05dc E050      		and r24,r25
 1447 05de F040      		st X,r24
 1449 05e2 21E0      	.LM155:
 1450 05e4 30E0      		lsl r30
 1451 05e6 00C0      		rol r31
 1452 05e8 220F      		add r30,r11
 1453 05ea 331F      		adc r31,__zero_reg__
 1454 05ec 6A95      		movw r24,r30
 1455 05ee 02F4      		ldi r27,3
 1456 05f0 922B      	1:	lsl r24
 1457 05f2 9083      		rol r25
 398:sosos.c       **** 
 399:sosos.c       **** #if SOSOS_MUTEX_ENABLE == 1
 400:sosos.c       ****  if(SOSOS_RUNNING_INHERIT_PRI>pri){
 1458               	
 1459               		lsl r30
 1460 05f4 8615      		rol r31
 1461 05f6 00F4      		add r30,r24
 401:sosos.c       **** #else
 402:sosos.c       ****  if(SOSOS_RUNNING_TASK_PRI>pri){
 403:sosos.c       **** #endif
 404:sosos.c       ****    SososScheder();//恢复的任务优先级更高,重新调度
 1462               	c r31,r25
 1463               		subi r30,lo8(-(TCB))
 1464 05f8 00D0      		sbci r31,hi8(-(TCB))
 1465               		ldi r24,lo8(16)
 405:sosos.c       ****    }
 406:sosos.c       ****  EXIT_CRITICAL();
 1466               	 Z+6,r24
 1468               	.LM156:
 1469 05fa 0F90      		std Z+9,r18
 1471 05fc 0FBE      	.LM157:
 1472               		rcall SososScheder
 1474               	.LM158:
 1475 05fe 0895      	/* #APP */
 1476               		POP __tmp_reg__ 
 1477               		
 1478               		OUT __SREG__,__tmp_reg__ 
 1479               		
 1480               	/* #NOAPP */
 1481               	.L111:
 1482               		ret
 1483               	/* epilogue: frame size=0 */
 1484               	/* epilogue: noreturn */
 407:sosos.c       **** }
 408:sosos.c       **** #endif
 409:sosos.c       **** 
 410:sosos.c       **** #if SOSOS_DELAY_TASK_ENABLE == 1
 411:sosos.c       **** void SososDelay(unsigned int ticks)//任务延时
 412:sosos.c       **** //将任务延时指定的时间间隔,不要在中断中调用该函数
 413:sosos.c       **** //ticks:延时值,为0就立即返回
 414:sosos.c       **** {
 1485               	ze=0) */
 1486               	/* function SososDelay size 63 (63) */
 1488               	.Lscope11:
 415:sosos.c       ****  if(ticks>0){
 1490               	bs	"no:P(0,11)",64,0,0,24
 1491               	.global	SososGetTimer
 1493 0604 01F0      	SososGetTimer:
 416:sosos.c       ****    ENTER_CRITICAL();
 1494               	abn	68,0,431,.LM159-SososGetTimer
 1495               	.LM159:
 1496               	/* prologue: frame size=0 */
 1497 0606 0FB6      	/* prologue end (size=0) */
 1498               		ldi r30,lo8(SOSOS_TIMER)
 1499 0608 F894      		ldi r31,hi8(SOSOS_TIMER)
 1500               		add r30,r24
 1501 060a 0F92      		adc r31,__zero_reg__
 1502               		ld r24,Z
 417:sosos.c       ****    set_bit(SOSOS_WAIT_TASK,SOSOS_RUNNING_TASK_PRI);
 1503               	8,0,433,.LM160-SososGetTimer
 1504               	.LM160:
 1505               		clr r25
 1506 060c EA2D      	/* epilogue: frame size=0 */
 1507 060e FF27      		ret
 1508 0610 81E0      	/* epilogue end (size=1) */
 1509 0612 90E0      	/* function SososGetTimer size 7 (6) */
 1511 0616 00C0      	.Lscope12:
 1515 061e 02F4      	.global	SososSetTime

⌨️ 快捷键说明

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