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

📄 test.lss

📁 在M16上动行的Small RTOS
💻 LSS
📖 第 1 页 / 共 5 页
字号:
        OSTaskRuning &= ~OSMapTbl[TaskId];
#else
        if (TaskId < 8)
 1be:	e8 30       	cpi	r30, 0x08	; 8
 1c0:	60 f4       	brcc	.+24     	; 0x1da <OSClearSignal+0x34>
        {
            ((uint8 *)(&OSTaskRuning))[LOW_BYTE] &= ~OSMapTbl[TaskId];
 1c2:	aa 0f       	add	r26, r26
 1c4:	bb 1f       	adc	r27, r27
 1c6:	a0 5a       	subi	r26, 0xA0	; 160
 1c8:	bf 4f       	sbci	r27, 0xFF	; 255
 1ca:	9c 91       	ld	r25, X
 1cc:	90 95       	com	r25
 1ce:	80 91 82 00 	lds	r24, 0x0082
 1d2:	89 23       	and	r24, r25
 1d4:	80 93 82 00 	sts	0x0082, r24
 1d8:	0d c0       	rjmp	.+26     	; 0x1f4 <OSClearSignal+0x4e>
        }
        else
        {
            ((uint8 *)(&OSTaskRuning))[HIGH_BYTE] &= ~OSMapTbl[TaskId & 0x07];
 1da:	a7 70       	andi	r26, 0x07	; 7
 1dc:	b0 70       	andi	r27, 0x00	; 0
 1de:	aa 0f       	add	r26, r26
 1e0:	bb 1f       	adc	r27, r27
 1e2:	a0 5a       	subi	r26, 0xA0	; 160
 1e4:	bf 4f       	sbci	r27, 0xFF	; 255
 1e6:	9c 91       	ld	r25, X
 1e8:	90 95       	com	r25
 1ea:	80 91 83 00 	lds	r24, 0x0083
 1ee:	89 23       	and	r24, r25
 1f0:	80 93 83 00 	sts	0x0083, r24
        }
#endif

		OSTaskRuning &= ~OSMapTbl[TaskId];
 1f4:	ff 27       	eor	r31, r31
 1f6:	ee 0f       	add	r30, r30
 1f8:	ff 1f       	adc	r31, r31
 1fa:	e0 5a       	subi	r30, 0xA0	; 160
 1fc:	ff 4f       	sbci	r31, 0xFF	; 255
 1fe:	20 81       	ld	r18, Z
 200:	31 81       	ldd	r19, Z+1	; 0x01
 202:	20 95       	com	r18
 204:	30 95       	com	r19
 206:	80 91 82 00 	lds	r24, 0x0082
 20a:	90 91 83 00 	lds	r25, 0x0083
 20e:	82 23       	and	r24, r18
 210:	93 23       	and	r25, r19
 212:	90 93 83 00 	sts	0x0083, r25
 216:	80 93 82 00 	sts	0x0082, r24
        OS_EXIT_CRITICAL();
 21a:	80 91 a9 00 	lds	r24, 0x00A9
 21e:	81 50       	subi	r24, 0x01	; 1
 220:	80 93 a9 00 	sts	0x00A9, r24
 224:	88 23       	and	r24, r24
 226:	09 f4       	brne	.+2      	; 0x22a <OSClearSignal+0x84>
 228:	78 94       	sei
 22a:	08 95       	ret

0000022c <OSSched>:
    }
}

/*********************************************************************************************************
** 函数名称: OSIntExit
** 功能描述: 中断退出处理函数,在此进行中断后的任务切换
** 输 入: 无
** 输 出: 无
** 全局变量: OSIntNesting,OSNextTaskID
** 调用模块: OSIntCtxSw
**
** 作 者: 陈明计
** 日 期: 2002年6月20日
**-------------------------------------------------------------------------------------------------------
** 修改人: 陈明计
** 日 期: 2002年9月1日
**-------------------------------------------------------------------------------------------------------
** 修改人: 陈明计
** 日 期: 2002年9月4日
**------------------------------------------------------------------------------------------------------
** 修改人: 陈明计
** 日 期: 2002年10月19日
**------------------------------------------------------------------------------------------------------
** 修改人: 陈明计
** 日 期: 2002年12月2日
**------------------------------------------------------------------------------------------------------
** 修改人: 陈明计
** 日 期: 2002年12月30日
**------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        void OSIntExit(void)

{
    uint8 temp;

    OS_ENTER_CRITICAL();
                /* 中断嵌套处理 */
#if EN_OS_INT_ENTER > 0
    if (OSIntNesting > 0)
    {
        OSIntNesting--;
    }
    if (OSIntNesting == 0)
    {
#endif
        
        Os_Enter_Sum = 0;               /* 因为在中断中,所以关中断计数器为0 */
#if OS_MAX_TASKS < 9
                /* 查找处于就绪状态的任务中优先级最高的任务 */
        temp = OSTaskRuning;
        for (OSNextTaskID = 0; OSNextTaskID < OS_MAX_TASKS; OSNextTaskID++)
        {
            if ((temp & 0x01) != 0)
            {
                break;
            }
            temp = temp >> 1;
        }
        OSIntCtxSw();                   /* 进行任务调度 */
#else
                /* 查找处于就绪状态的任务中优先级最高的任务 */
        temp = OSTaskRuning % 256;
        for (OSNextTaskID = 0; OSNextTaskID < 8; OSNextTaskID++)
        {
            if ((temp & 0x01) != 0)
            {
                goto TaskSw;
            }
            temp = temp >> 1;
        }

        temp = OSTaskRuning / 256;
        for (; OSNextTaskID < OS_MAX_TASKS; OSNextTaskID++)
        {
            if ((temp & 0x01) != 0)
            {
                break;
            }
            temp = temp >> 1;
        }
TaskSw:
        OSIntCtxSw();                   /* 进行任务调度 */
#endif

#if EN_OS_INT_ENTER >0
    }
#endif
    OS_EXIT_CRITICAL();
}

/*********************************************************************************************************
** 函数名称: OSSched
** 功能描述: 非中断的任务切换函数
** 输 入: 无
** 输 出: 无
** 全局变量: OSIntNesting,OSNextTaskID
** 调用模块: OS_TASK_SW
**
** 作 者: 陈明计
** 日 期: 2002年6月20日
**-------------------------------------------------------------------------------------------------------
** 修改人: 陈明计
** 日 期: 2002年9月1日
**-------------------------------------------------------------------------------------------------------
** 修改人: 陈明计
** 日 期: 2002年9月4日
**------------------------------------------------------------------------------------------------------
** 修改人: 陈明计
** 日 期: 2002年10月19日
**------------------------------------------------------------------------------------------------------
** 修改人: 陈明计
** 日 期: 2002年12月2日
**------------------------------------------------------------------------------------------------------
** 修改人: 陈明计
** 日 期: 2002年12月30日
**------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        void  OSSched(void)

{
    uint8 temp;

    OS_ENTER_CRITICAL();
 22c:	f8 94       	cli
 22e:	80 91 a9 00 	lds	r24, 0x00A9
 232:	8f 5f       	subi	r24, 0xFF	; 255
 234:	80 93 a9 00 	sts	0x00A9, r24
#if EN_OS_INT_ENTER > 0
    if (OSIntNesting == 0)              /* 是否是中断中调用 */
 238:	20 91 ac 00 	lds	r18, 0x00AC
 23c:	22 23       	and	r18, r18
 23e:	19 f5       	brne	.+70     	; 0x286 <OSSched+0x5a>
    {
#endif

#if OS_MAX_TASKS < 9
                /* 查找处于就绪状态的任务中优先级最高的任务 */
        temp = OSTaskRuning;
        for (OSNextTaskID = 0; OSNextTaskID < OS_MAX_TASKS; OSNextTaskID++)
        {
            if ((temp & 0x01) != 0)
            {
                break;
            }
            temp = temp >> 1;
        }
        OS_TASK_SW();                   /* 进行任务调度 */
#else
                /* 查找处于就绪状态的任务中优先级最高的任务 */
        temp = OSTaskRuning % 256;
 240:	80 91 82 00 	lds	r24, 0x0082
 244:	90 91 83 00 	lds	r25, 0x0083
 248:	38 2f       	mov	r19, r24
        for (OSNextTaskID = 0; OSNextTaskID < 8; OSNextTaskID++)
 24a:	20 93 aa 00 	sts	0x00AA, r18
        {
            if ((temp & 0x01) != 0)
 24e:	30 fd       	sbrc	r19, 0
 250:	18 c0       	rjmp	.+48     	; 0x282 <OSSched+0x56>
            {
                goto TaskSw;
            }
            temp = temp >> 1;
 252:	36 95       	lsr	r19
 254:	20 91 aa 00 	lds	r18, 0x00AA
 258:	2f 5f       	subi	r18, 0xFF	; 255
 25a:	20 93 aa 00 	sts	0x00AA, r18
 25e:	28 30       	cpi	r18, 0x08	; 8
 260:	b0 f3       	brcs	.-20     	; 0x24e <OSSched+0x22>
        }

        temp = OSTaskRuning / 256 ;
 262:	89 2f       	mov	r24, r25
 264:	99 27       	eor	r25, r25
 266:	38 2f       	mov	r19, r24
        for (; OSNextTaskID < OS_MAX_TASKS; OSNextTaskID++)
 268:	82 2f       	mov	r24, r18
 26a:	20 31       	cpi	r18, 0x10	; 16
 26c:	50 f4       	brcc	.+20     	; 0x282 <OSSched+0x56>
        {
            if ((temp & 0x01) != 0)
 26e:	30 fd       	sbrc	r19, 0
 270:	06 c0       	rjmp	.+12     	; 0x27e <OSSched+0x52>
            {
                break;
            }
            temp = temp >> 1;
 272:	36 95       	lsr	r19
 274:	28 2f       	mov	r18, r24
 276:	2f 5f       	subi	r18, 0xFF	; 255
 278:	82 2f       	mov	r24, r18
 27a:	20 31       	cpi	r18, 0x10	; 16
 27c:	c0 f3       	brcs	.-16     	; 0x26e <OSSched+0x42>
 27e:	20 93 aa 00 	sts	0x00AA, r18
        }
TaskSw:
        OS_TASK_SW();                   /* 进行任务调度 */
 282:	0e 94 14 02 	call	0x428 <OSCtxSw>
#endif

#if EN_OS_INT_ENTER > 0
    }
#endif
    OS_EXIT_CRITICAL();
 286:	80 91 a9 00 	lds	r24, 0x00A9
 28a:	81 50       	subi	r24, 0x01	; 1
 28c:	80 93 a9 00 	sts	0x00A9, r24
 290:	88 23       	and	r24, r24
 292:	09 f4       	brne	.+2      	; 0x296 <OSSched+0x6a>
 294:	78 94       	sei
 296:	08 95       	ret

00000298 <OSSendSignal>:
 298:	0e 94 95 00 	call	0x12a <OSIntSendSignal>
 29c:	0e 94 16 01 	call	0x22c <OSSched>
 2a0:	08 95       	ret

000002a2 <OSIntExit>:
 2a2:	f8 94       	cli
 2a4:	80 91 a9 00 	lds	r24, 0x00A9
 2a8:	8f 5f       	subi	r24, 0xFF	; 255
 2aa:	80 93 a9 00 	sts	0x00A9, r24
 2ae:	80 91 ac 00 	lds	r24, 0x00AC
 2b2:	88 23       	and	r24, r24
 2b4:	19 f0       	breq	.+6      	; 0x2bc <OSIntExit+0x1a>
 2b6:	81 50       	subi	r24, 0x01	; 1
 2b8:	80 93 ac 00 	sts	0x00AC, r24
 2bc:	20 91 ac 00 	lds	r18, 0x00AC
 2c0:	22 23       	and	r18, r18
 2c2:	29 f5       	brne	.+74     	; 0x30e <OSIntExit+0x6c>
 2c4:	20 93 a9 00 	sts	0x00A9, r18
 2c8:	80 91 82 00 	lds	r24, 0x0082
 2cc:	90 91 83 00 	lds	r25, 0x0083
 2d0:	38 2f       	mov	r19, r24
 2d2:	20 93 aa 00 	sts	0x00AA, r18
 2d6:	30 fd       	sbrc	r19, 0
 2d8:	18 c0       	rjmp	.+48     	; 0x30a <OSIntExit+0x68>
 2da:	36 95       	lsr	r19
 2dc:	20 91 aa 00 	lds	r18, 0x00AA
 2e0:	2f 5f       	subi	r18, 0xFF	; 255
 2e2:	20 93 aa 00 	sts	0x00AA, r18
 2e6:	28 30       	cpi	r18, 0x08	; 8
 2e8:	b0 f3       	brcs	.-20     	; 0x2d6 <OSIntExit+0x34>
 2ea:	89 2f       	mov	r24, r25
 2ec:	99 27       	eor	r25, r25
 2ee:	38 2f       	mov	r19, r24
 2f0:	82 2f       	mov	r24, r18
 2f2:	20 31       	cpi	r18, 0x10	; 16
 2f4:	50 f4       	brcc	.+20     	; 0x30a <OSIntExit+0x68>
 2f6:	30 fd       	sbrc	r19, 0
 2f8:	06 c0       	rjmp	.+12     	; 0x306 <OSIntExit+0x64>
 2fa:	36 95       	lsr	r19
 2fc:	28 2f       	mov	r18, r24
 2fe:	2f 5f       	subi	r18, 0xFF	; 255
 300:	82 2f       	mov	r24, r18
 302:	20 31       	cpi	r18, 0x10	; 16
 304:	c0 f3       	brcs	.-16     	; 0x2f6 <OSIntExit+0x54>
 306:	20 93 aa 00 	sts	0x00AA, r18
 30a:	0e 94 14 02 	call	0x428 <OSCtxSw>
 30e:	80 91 a9 00 	lds	r24, 0x00A9
 312:	81 50       	subi	r24, 0x01	; 1
 314:	80 93 a9 00 	sts	0x00A9, r24
 318:	88 23       	and	r24, r24
 31a:	09 f4       	brne	.+2      	; 0x31e <OSIntExit+0x7c>
 31c:	78 94       	sei
 31e:	08 95       	ret

00000320 <OSTimeTick>:
}

/*********************************************************************************************************
** 函数名称: OSTimeTick
** 功能描述: 系统时钟处理函数,处理各个任务的延时
** 输 入: 无
** 输 出: 无
** 全局变量: OSWaitTick
** 调用模块: OSIntSendSignal
**
** 作 者: 陈明计
** 日 期: 2002年6月20日
**-------------------------------------------------------------------------------------------------------
** 修改人: 陈明计
** 日 期: 2002年9月1日
**-------------------------------------------------------------------------------------------------------
** 修改人: 陈明计
** 日 期: 2002年9月4日
**------------------------------------------------------------------------------------------------------
** 修改人: 陈明计
** 日 期: 2002年12月30日
**------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        void  OSTimeTick(void)
{
 320:	1f 93       	push	r17
 322:	cf 93       	push	r28
 324:	df 93       	push	r29
    uint8 i;

    for (i = 0; i < OS_MAX_TASKS; i++)                 
 326:	10 e0       	ldi	r17, 0x00	; 0
 328:	cd ea       	ldi	r28, 0xAD	; 173
 32a:	d0 e0       	ldi	r29, 0x00	; 0
    {
        if (OSWaitTick[i] != 0 )
 32c:	88 81       	ld	r24, Y
 32e:	88 23       	and	r24, r24
 330:	39 f0       	breq	.+14     	; 0x340 <OSTimeTick+0x20>
        {
            OSWaitTick[i]--;
 332:	81 50       	subi	r24, 0x01	; 1
 334:	88 83       	st	Y, r24
            if (OSWaitTick[i] == 0)
 336:	88 23       	and	r24, r24

⌨️ 快捷键说明

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