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

📄 os_core.lst

📁 一个基于MEGA16的GUI
💻 LST
📖 第 1 页 / 共 3 页
字号:
 254:OS_CORE.c     ****             {
 255:OS_CORE.c     ****                 OSIntSendSignal(i);
 452               	.LM42:
 453 0108 812F      		mov r24,r17
 454 010a 0E94 0000 		call OSIntSendSignal
 455               	.L32:
 457               	.LM43:
 458 010e 1F5F      		subi r17,lo8(-(1))
 459 0110 2196      		adiw r28,1
 460 0112 1430      		cpi r17,lo8(4)
 461 0114 90F3      		brlo .L35
 462               	/* epilogue: frame size=0 */
 463 0116 DF91      		pop r29
 464 0118 CF91      		pop r28
 465 011a 1F91      		pop r17
 466 011c 0895      		ret
 467               	/* epilogue end (size=4) */
 468               	/* function OSTimeTick size 24 (17) */
 473               	.Lscope5:
 477               	.global	OSWait
 479               	OSWait:
 256:OS_CORE.c     ****             }
 257:OS_CORE.c     ****         }
 258:OS_CORE.c     ****     }
 259:OS_CORE.c     **** }
 260:OS_CORE.c     **** 
 261:OS_CORE.c     **** /**************************************************************************************************
 262:OS_CORE.c     **** ** 函数名称: OSWait
 263:OS_CORE.c     **** ** 功能描述: 系统等待函数,任务调用此函数可以等待一定时间或信号
 264:OS_CORE.c     **** ** 输 入: typ: 等待事件类型,目前可以取以下值,或是其中任意个值的按位或
 265:OS_CORE.c     **** **             K_SIG: 等待信号
 266:OS_CORE.c     **** **             K_TMO: 等待超时
 267:OS_CORE.c     **** **        ticks : 等待超时时的系统嘀嗒数
 268:OS_CORE.c     **** ** 输 出 : NOT_OK : 参数错误
 269:OS_CORE.c     **** **         TMO_EVENT : 超时到
 270:OS_CORE.c     **** **         SIG_EVENT : 有信号
 271:OS_CORE.c     **** ** 全局变量: OSWaitTick
 272:OS_CORE.c     **** ** 调用模块: OSClearSignal
 273:OS_CORE.c     **** ***************************************************************************************************
 274:OS_CORE.c     ****         uint8 OSWait(uint8 typ, uint8 ticks) 
 275:OS_CORE.c     **** 
 276:OS_CORE.c     **** {
 481               	.LM44:
 482               	/* prologue: frame size=0 */
 483               	/* prologue end (size=0) */
 277:OS_CORE.c     ****     OSWaitTick[OSTaskID] = ticks;               /* 设置超时时间         */
 485               	.LM45:
 486 011e 2091 0000 		lds r18,OSTaskID
 487 0122 E22F      		mov r30,r18
 488 0124 FF27      		clr r31
 489 0126 E050      		subi r30,lo8(-(OSWaitTick))
 490 0128 F040      		sbci r31,hi8(-(OSWaitTick))
 491 012a 6083      		st Z,r22
 278:OS_CORE.c     ****                                                 /* 可以优化寄存器的使用  */
 279:OS_CORE.c     ****     switch(typ)
 493               	.LM46:
 494 012c 9927      		clr r25
 495 012e 8230      		cpi r24,2
 496 0130 9105      		cpc r25,__zero_reg__
 497 0132 81F0      		breq .L41
 499               	.LM47:
 500 0134 8330      		cpi r24,3
 501 0136 9105      		cpc r25,__zero_reg__
 502 0138 1CF4      		brge .L51
 503 013a 0197      		sbiw r24,1
 504 013c 21F0      		breq .L40
 505 013e 53C0      		rjmp .L50
 506               	.L51:
 507 0140 0397      		sbiw r24,3
 508 0142 39F1      		breq .L46
 509 0144 50C0      		rjmp .L50
 510               	.L40:
 280:OS_CORE.c     ****     {
 281:OS_CORE.c     ****     case K_SIG:                                 /* 等待信号,即挂起自己  */
 282:OS_CORE.c     ****         OSWaitTick[OSTaskID] = 0;               /* 没有超时处理         */
 512               	.LM48:
 513 0146 1082      		st Z,__zero_reg__
 283:OS_CORE.c     ****         OSClearSignal(OSTaskID);                /* 任务进入等待状态     */
 515               	.LM49:
 516 0148 822F      		mov r24,r18
 517 014a 0E94 0000 		call OSClearSignal
 284:OS_CORE.c     ****         OSSched();                              /* 运行下一个任务       */
 519               	.LM50:
 520 014e 0E94 0000 		call OSSched
 521 0152 43C0      		rjmp .L55
 522               	.L41:
 285:OS_CORE.c     ****         return SIG_EVENT;
 286:OS_CORE.c     ****     case K_TMO:                                 /* 等待超时,即延时一段时间 */
 287:OS_CORE.c     ****         OS_ENTER_CRITICAL();
 524               	.LM51:
 525               	/* #APP */
 526 0154 F894      		cli
 527               	/* #NOAPP */
 528 0156 8091 0000 		lds r24,Os_Enter_Sum
 529 015a 8F5F      		subi r24,lo8(-(1))
 530 015c 8093 0000 		sts Os_Enter_Sum,r24
 288:OS_CORE.c     ****         while (OSWaitTick[OSTaskID] != 0)       /* 判断超时时间是否到   */
 289:OS_CORE.c     ****         {
 290:OS_CORE.c     ****             OSClearSignal(OSTaskID);            /* 任务进入等待状态     */
 291:OS_CORE.c     ****             OSSched();                          /* 运行下一个任务       */
 532               	.LM52:
 533 0160 922F      		mov r25,r18
 534               	.L54:
 535 0162 E92F      		mov r30,r25
 536 0164 FF27      		clr r31
 537 0166 E050      		subi r30,lo8(-(OSWaitTick))
 538 0168 F040      		sbci r31,hi8(-(OSWaitTick))
 539 016a 8081      		ld r24,Z
 540 016c 8823      		tst r24
 541 016e 41F0      		breq .L53
 543               	.LM53:
 544 0170 892F      		mov r24,r25
 545 0172 0E94 0000 		call OSClearSignal
 547               	.LM54:
 548 0176 0E94 0000 		call OSSched
 549 017a 9091 0000 		lds r25,OSTaskID
 550 017e F1CF      		rjmp .L54
 551               	.L53:
 292:OS_CORE.c     ****         }
 293:OS_CORE.c     ****         OS_EXIT_CRITICAL();
 553               	.LM55:
 554 0180 8091 0000 		lds r24,Os_Enter_Sum
 555 0184 8150      		subi r24,lo8(-(-1))
 556 0186 8093 0000 		sts Os_Enter_Sum,r24
 557 018a 8823      		tst r24
 558 018c 49F5      		brne .L49
 559               	/* #APP */
 560 018e 7894      		sei
 561               	/* #NOAPP */
 562 0190 27C0      		rjmp .L49
 563               	.L46:
 294:OS_CORE.c     ****         return TMO_EVENT;
 295:OS_CORE.c     ****     case (K_TMO | K_SIG):                       /* 等待信号(挂起自己)直到超时  */
 296:OS_CORE.c     ****                                                 /* 别的任务或中断可以恢复它 */
 297:OS_CORE.c     ****         OS_ENTER_CRITICAL();
 565               	.LM56:
 566               	/* #APP */
 567 0192 F894      		cli
 568               	/* #NOAPP */
 569 0194 8091 0000 		lds r24,Os_Enter_Sum
 570 0198 8F5F      		subi r24,lo8(-(1))
 571 019a 8093 0000 		sts Os_Enter_Sum,r24
 298:OS_CORE.c     ****         if (OSWaitTick[OSTaskID] == 0)          /* 判断超时时间是否到   */
 573               	.LM57:
 574 019e E22F      		mov r30,r18
 575 01a0 FF27      		clr r31
 576 01a2 E050      		subi r30,lo8(-(OSWaitTick))
 577 01a4 F040      		sbci r31,hi8(-(OSWaitTick))
 578 01a6 8081      		ld r24,Z
 579 01a8 8823      		tst r24
 580 01aa D1F0      		breq .L49
 299:OS_CORE.c     ****         {
 300:OS_CORE.c     ****             return TMO_EVENT;
 301:OS_CORE.c     ****         }
 302:OS_CORE.c     ****         OSClearSignal(OSTaskID);                /* 任务进入等待状态     */
 582               	.LM58:
 583 01ac 822F      		mov r24,r18
 584 01ae 0E94 0000 		call OSClearSignal
 303:OS_CORE.c     ****         OS_EXIT_CRITICAL();
 586               	.LM59:
 587 01b2 8091 0000 		lds r24,Os_Enter_Sum
 588 01b6 8150      		subi r24,lo8(-(-1))
 589 01b8 8093 0000 		sts Os_Enter_Sum,r24
 590 01bc 8823      		tst r24
 591 01be 09F4      		brne .L48
 592               	/* #APP */
 593 01c0 7894      		sei
 594               	/* #NOAPP */
 595               	.L48:
 304:OS_CORE.c     ****         OSSched();                              /* 运行下一个任务       */
 597               	.LM60:
 598 01c2 0E94 0000 		call OSSched
 305:OS_CORE.c     ****         if (OSWaitTick[OSTaskID] != 0)
 600               	.LM61:
 601 01c6 8091 0000 		lds r24,OSTaskID
 602 01ca E82F      		mov r30,r24
 603 01cc FF27      		clr r31
 604 01ce E050      		subi r30,lo8(-(OSWaitTick))
 605 01d0 F040      		sbci r31,hi8(-(OSWaitTick))
 606 01d2 8081      		ld r24,Z
 607 01d4 8823      		tst r24
 608 01d6 21F0      		breq .L49
 306:OS_CORE.c     ****         {
 307:OS_CORE.c     ****             OSWaitTick[OSTaskID] = 0;
 610               	.LM62:
 611 01d8 1082      		st Z,__zero_reg__
 612               	.L55:
 308:OS_CORE.c     ****             return SIG_EVENT;
 614               	.LM63:
 615 01da 84E0      		ldi r24,lo8(4)
 616 01dc 90E0      		ldi r25,hi8(4)
 617 01de 0895      		ret
 618               	.L49:
 309:OS_CORE.c     ****         }
 310:OS_CORE.c     ****         return TMO_EVENT;
 620               	.LM64:
 621 01e0 88E0      		ldi r24,lo8(8)
 622 01e2 90E0      		ldi r25,hi8(8)
 623 01e4 0895      		ret
 624               	.L50:
 311:OS_CORE.c     ****     default:
 312:OS_CORE.c     ****         OSWaitTick[OSTaskID] = 0;
 626               	.LM65:
 627 01e6 E22F      		mov r30,r18
 628 01e8 FF27      		clr r31
 629 01ea E050      		subi r30,lo8(-(OSWaitTick))
 630 01ec F040      		sbci r31,hi8(-(OSWaitTick))
 631 01ee 1082      		st Z,__zero_reg__
 313:OS_CORE.c     ****         return NOT_OK;
 633               	.LM66:
 634 01f0 8FEF      		ldi r24,lo8(255)
 635 01f2 90E0      		ldi r25,hi8(255)
 314:OS_CORE.c     ****     }
 315:OS_CORE.c     **** }
 637               	.LM67:
 638 01f4 0895      		ret
 639               	/* epilogue: frame size=0 */
 640               	/* epilogue: noreturn */
 641               	/* epilogue end (size=0) */
 642               	/* function OSWait size 114 (114) */
 644               	.Lscope6:
 645               		.comm Alarm,1,1
 646               		.comm OSIntNesting,1,1
 647               		.comm OSWaitTick,4,1
 656               		.text
 658               	Letext:
 659               	/* File "OS_CORE.c": code  265 = 0x0109 ( 257), prologues   3, epilogues   5 */
DEFINED SYMBOLS
                            *ABS*:00000000 OS_CORE.c
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:3      *ABS*:0000003f __SREG__
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:4      *ABS*:0000003e __SP_H__
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:5      *ABS*:0000003d __SP_L__
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:6      *ABS*:00000000 __tmp_reg__
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:7      *ABS*:00000001 __zero_reg__
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:129    .bss:00000000 Os_Enter_Sum
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:135    .data:00000000 OSMapTbl
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:148    .data:00000009 OSTaskRuning
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:155    .bss:00000001 OSNextTaskID
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:161    .bss:00000002 OSTaskID
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:168    .text:00000000 OSIntSendSignal
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:212    .text:00000026 OSClearSignal
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:256    .text:0000004e OSIntExit
                            *COM*:00000001 OSIntNesting
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:336    .text:000000a2 OSSched
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:404    .text:000000e4 OSSendSignal
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:424    .text:000000ee OSTimeTick
                            *COM*:00000004 OSWaitTick
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:479    .text:0000011e OSWait
                            *COM*:00000001 Alarm
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:658    .text:000001f6 Letext

UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
OSIntCtxSw
OSCtxSw

⌨️ 快捷键说明

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