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

📄 os_core.lst

📁 一个基于MEGA16的GUI
💻 LST
📖 第 1 页 / 共 3 页
字号:
 280               	.LM15:
 281 0068 8091 0000 		lds r24,OSIntNesting
 282 006c 8823      		tst r24
 283 006e 81F4      		brne .L9
 126:OS_CORE.c     ****     {
 127:OS_CORE.c     **** #endif
 128:OS_CORE.c     ****         
 129:OS_CORE.c     ****         Os_Enter_Sum = 0;               /* 因为在中断中,所以关中断计数器为0 */
 285               	.LM16:
 286 0070 8093 0000 		sts Os_Enter_Sum,r24
 130:OS_CORE.c     **** #if OS_MAX_TASKS < 9
 131:OS_CORE.c     ****                 /* 查找处于就绪状态的任务中优先级最高的任务 */
 132:OS_CORE.c     ****         temp = OSTaskRuning;
 288               	.LM17:
 289 0074 9091 0000 		lds r25,OSTaskRuning
 133:OS_CORE.c     ****         for (OSNextTaskID = 0; OSNextTaskID < OS_MAX_TASKS; OSNextTaskID++)
 291               	.LM18:
 292 0078 8093 0000 		sts OSNextTaskID,r24
 293               	.L14:
 134:OS_CORE.c     ****         {
 135:OS_CORE.c     ****             if ((temp & 0x01) != 0)
 295               	.LM19:
 296 007c 90FD      		sbrc r25,0
 297 007e 04C0      		rjmp .L17
 136:OS_CORE.c     ****             {
 137:OS_CORE.c     ****                 break;
 138:OS_CORE.c     ****             }
 139:OS_CORE.c     ****             temp = temp >> 1;
 299               	.LM20:
 300 0080 9695      		lsr r25
 302               	.LM21:
 303 0082 8F5F      		subi r24,lo8(-(1))
 304 0084 8430      		cpi r24,lo8(4)
 305 0086 D0F3      		brlo .L14
 306               	.L17:
 307 0088 8093 0000 		sts OSNextTaskID,r24
 140:OS_CORE.c     ****         }
 141:OS_CORE.c     ****         OSIntCtxSw();                   /* 进行任务调度 */
 309               	.LM22:
 310 008c 0E94 0000 		call OSIntCtxSw
 311               	.L9:
 142:OS_CORE.c     **** #else
 143:OS_CORE.c     ****                 /* 查找处于就绪状态的任务中优先级最高的任务 */
 144:OS_CORE.c     ****         temp = OSTaskRuning % 256;
 145:OS_CORE.c     ****         for (OSNextTaskID = 0; OSNextTaskID < 8; OSNextTaskID++)
 146:OS_CORE.c     ****         {
 147:OS_CORE.c     ****             if ((temp & 0x01) != 0)
 148:OS_CORE.c     ****             {
 149:OS_CORE.c     ****                 goto TaskSw;
 150:OS_CORE.c     ****             }
 151:OS_CORE.c     ****             temp = temp >> 1;
 152:OS_CORE.c     ****         }
 153:OS_CORE.c     **** 
 154:OS_CORE.c     ****         temp = OSTaskRuning / 256;
 155:OS_CORE.c     ****         for (; OSNextTaskID < OS_MAX_TASKS; OSNextTaskID++)
 156:OS_CORE.c     ****         {
 157:OS_CORE.c     ****             if ((temp & 0x01) != 0)
 158:OS_CORE.c     ****             {
 159:OS_CORE.c     ****                 break;
 160:OS_CORE.c     ****             }
 161:OS_CORE.c     ****             temp = temp >> 1;
 162:OS_CORE.c     ****         }
 163:OS_CORE.c     **** TaskSw:
 164:OS_CORE.c     ****         OSIntCtxSw();                   /* 进行任务调度 */
 165:OS_CORE.c     **** #endif
 166:OS_CORE.c     **** 
 167:OS_CORE.c     **** #if EN_OS_INT_ENTER >0
 168:OS_CORE.c     ****     }
 169:OS_CORE.c     **** #endif
 170:OS_CORE.c     ****     OS_EXIT_CRITICAL();
 313               	.LM23:
 314 0090 8091 0000 		lds r24,Os_Enter_Sum
 315 0094 8150      		subi r24,lo8(-(-1))
 316 0096 8093 0000 		sts Os_Enter_Sum,r24
 317 009a 8823      		tst r24
 318 009c 09F4      		brne .L7
 319               	/* #APP */
 320 009e 7894      		sei
 321               	/* #NOAPP */
 322               	.L7:
 323 00a0 0895      		ret
 324               	/* epilogue: frame size=0 */
 325               	/* epilogue: noreturn */
 326               	/* epilogue end (size=0) */
 327               	/* function OSIntExit size 44 (44) */
 332               	.Lscope2:
 334               	.global	OSSched
 336               	OSSched:
 171:OS_CORE.c     **** }
 172:OS_CORE.c     **** 
 173:OS_CORE.c     **** /**************************************************************************************************
 174:OS_CORE.c     **** ** 函数名称: OSSched
 175:OS_CORE.c     **** ** 功能描述: 非中断的任务切换函数
 176:OS_CORE.c     **** ** 输 入: 无
 177:OS_CORE.c     **** ** 输 出: 无
 178:OS_CORE.c     **** ** 全局变量: OSIntNesting,OSNextTaskID
 179:OS_CORE.c     **** ** 调用模块: OS_TASK_SW
 180:OS_CORE.c     **** * 日 期:
 181:OS_CORE.c     **** ***************************************************************************************************
 182:OS_CORE.c     ****         void  OSSched(void)
 183:OS_CORE.c     **** 
 184:OS_CORE.c     **** {
 338               	.LM24:
 339               	/* prologue: frame size=0 */
 340               	/* prologue end (size=0) */
 185:OS_CORE.c     ****     uint8 temp;
 186:OS_CORE.c     **** 
 187:OS_CORE.c     ****     OS_ENTER_CRITICAL();
 342               	.LM25:
 343               	/* #APP */
 344 00a2 F894      		cli
 345               	/* #NOAPP */
 346 00a4 8091 0000 		lds r24,Os_Enter_Sum
 347 00a8 8F5F      		subi r24,lo8(-(1))
 348 00aa 8093 0000 		sts Os_Enter_Sum,r24
 188:OS_CORE.c     **** #if EN_OS_INT_ENTER > 0
 189:OS_CORE.c     ****     if (OSIntNesting == 0)              /* 是否是中断中调用 */
 350               	.LM26:
 351 00ae 8091 0000 		lds r24,OSIntNesting
 352 00b2 8823      		tst r24
 353 00b4 71F4      		brne .L19
 190:OS_CORE.c     ****     {
 191:OS_CORE.c     **** #endif
 192:OS_CORE.c     **** 
 193:OS_CORE.c     **** #if OS_MAX_TASKS < 9
 194:OS_CORE.c     ****                 /* 查找处于就绪状态的任务中优先级最高的任务 */
 195:OS_CORE.c     ****         temp = OSTaskRuning;
 355               	.LM27:
 356 00b6 9091 0000 		lds r25,OSTaskRuning
 196:OS_CORE.c     ****         for (OSNextTaskID = 0; OSNextTaskID < OS_MAX_TASKS; OSNextTaskID++)
 358               	.LM28:
 359 00ba 8093 0000 		sts OSNextTaskID,r24
 360               	.L24:
 197:OS_CORE.c     ****         {
 198:OS_CORE.c     ****             if ((temp & 0x01) != 0)
 362               	.LM29:
 363 00be 90FD      		sbrc r25,0
 364 00c0 04C0      		rjmp .L27
 199:OS_CORE.c     ****             {
 200:OS_CORE.c     ****                 break;
 201:OS_CORE.c     ****             }
 202:OS_CORE.c     ****             temp = temp >> 1;
 366               	.LM30:
 367 00c2 9695      		lsr r25
 369               	.LM31:
 370 00c4 8F5F      		subi r24,lo8(-(1))
 371 00c6 8430      		cpi r24,lo8(4)
 372 00c8 D0F3      		brlo .L24
 373               	.L27:
 374 00ca 8093 0000 		sts OSNextTaskID,r24
 203:OS_CORE.c     ****         }
 204:OS_CORE.c     ****         OS_TASK_SW();                   /* 进行任务调度 */
 376               	.LM32:
 377 00ce 0E94 0000 		call OSCtxSw
 378               	.L19:
 205:OS_CORE.c     **** #else
 206:OS_CORE.c     ****                 /* 查找处于就绪状态的任务中优先级最高的任务 */
 207:OS_CORE.c     ****         temp = OSTaskRuning % 256;
 208:OS_CORE.c     ****         for (OSNextTaskID = 0; OSNextTaskID < 8; OSNextTaskID++)
 209:OS_CORE.c     ****         {
 210:OS_CORE.c     ****             if ((temp & 0x01) != 0)
 211:OS_CORE.c     ****             {
 212:OS_CORE.c     ****                 goto TaskSw;
 213:OS_CORE.c     ****             }
 214:OS_CORE.c     ****             temp = temp >> 1;
 215:OS_CORE.c     ****         }
 216:OS_CORE.c     **** 
 217:OS_CORE.c     ****         temp = OSTaskRuning / 256 ;
 218:OS_CORE.c     ****         for (; OSNextTaskID < OS_MAX_TASKS; OSNextTaskID++)
 219:OS_CORE.c     ****         {
 220:OS_CORE.c     ****             if ((temp & 0x01) != 0)
 221:OS_CORE.c     ****             {
 222:OS_CORE.c     ****                 break;
 223:OS_CORE.c     ****             }
 224:OS_CORE.c     ****             temp = temp >> 1;
 225:OS_CORE.c     ****         }
 226:OS_CORE.c     **** TaskSw:
 227:OS_CORE.c     ****         OS_TASK_SW();                   /* 进行任务调度 */
 228:OS_CORE.c     **** #endif
 229:OS_CORE.c     **** 
 230:OS_CORE.c     **** #if EN_OS_INT_ENTER > 0
 231:OS_CORE.c     ****     }
 232:OS_CORE.c     **** #endif
 233:OS_CORE.c     ****     OS_EXIT_CRITICAL();
 380               	.LM33:
 381 00d2 8091 0000 		lds r24,Os_Enter_Sum
 382 00d6 8150      		subi r24,lo8(-(-1))
 383 00d8 8093 0000 		sts Os_Enter_Sum,r24
 384 00dc 8823      		tst r24
 385 00de 09F4      		brne .L18
 386               	/* #APP */
 387 00e0 7894      		sei
 388               	/* #NOAPP */
 389               	.L18:
 390 00e2 0895      		ret
 391               	/* epilogue: frame size=0 */
 392               	/* epilogue: noreturn */
 393               	/* epilogue end (size=0) */
 394               	/* function OSSched size 35 (35) */
 399               	.Lscope3:
 402               	.global	OSSendSignal
 404               	OSSendSignal:
 406               	.LM34:
 407               	/* prologue: frame size=0 */
 408               	/* prologue end (size=0) */
 410               	.LM35:
 411 00e4 0E94 0000 		call OSIntSendSignal
 413               	.LM36:
 414 00e8 0E94 0000 		call OSSched
 415               	/* epilogue: frame size=0 */
 416 00ec 0895      		ret
 417               	/* epilogue end (size=1) */
 418               	/* function OSSendSignal size 5 (4) */
 420               	.Lscope4:
 422               	.global	OSTimeTick
 424               	OSTimeTick:
 234:OS_CORE.c     **** }
 235:OS_CORE.c     **** 
 236:OS_CORE.c     **** /**************************************************************************************************
 237:OS_CORE.c     **** ** 函数名称: OSTimeTick
 238:OS_CORE.c     **** ** 功能描述: 系统时钟处理函数,处理各个任务的延时
 239:OS_CORE.c     **** ** 输 入: 无
 240:OS_CORE.c     **** ** 输 出: 无
 241:OS_CORE.c     **** ** 全局变量: OSWaitTick
 242:OS_CORE.c     **** ** 调用模块: OSIntSendSignal
 243:OS_CORE.c     **** ***************************************************************************************************
 244:OS_CORE.c     ****         void  OSTimeTick(void)
 245:OS_CORE.c     **** {
 426               	.LM37:
 427               	/* prologue: frame size=0 */
 428 00ee 1F93      		push r17
 429 00f0 CF93      		push r28
 430 00f2 DF93      		push r29
 431               	/* prologue end (size=3) */
 246:OS_CORE.c     ****     uint8 i;
 247:OS_CORE.c     ****     
 248:OS_CORE.c     ****     for (i = 0; i < OS_MAX_TASKS; i++)                 
 433               	.LM38:
 434 00f4 10E0      		ldi r17,lo8(0)
 435 00f6 C0E0      		ldi r28,lo8(OSWaitTick)
 436 00f8 D0E0      		ldi r29,hi8(OSWaitTick)
 437               	.L35:
 249:OS_CORE.c     ****     {
 250:OS_CORE.c     ****         if (OSWaitTick[i] != 0 )
 439               	.LM39:
 440 00fa 8881      		ld r24,Y
 441 00fc 8823      		tst r24
 442 00fe 39F0      		breq .L32
 251:OS_CORE.c     ****         {
 252:OS_CORE.c     ****             OSWaitTick[i]--;
 444               	.LM40:
 445 0100 8150      		subi r24,lo8(-(-1))
 446 0102 8883      		st Y,r24
 253:OS_CORE.c     ****             if (OSWaitTick[i] == 0)
 448               	.LM41:
 449 0104 8823      		tst r24
 450 0106 19F4      		brne .L32

⌨️ 快捷键说明

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