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

📄 test.lss

📁 改程序是ucos-ii在meg16上的移植
💻 LSS
📖 第 1 页 / 共 4 页
字号:
出口参数:	无
有关说明:	OSIntEnter()和OSIntExit()要成对出现使用
创建时间:	2007年3月7日
修改时间:	
************************************************************************************************************************/
void OSIntExit(void)
{
	OS_ENTER_CRITICAL();
 466:	0f b6       	in	r0, 0x3f	; 63
 468:	0f 92       	push	r0
 46a:	11 24       	eor	r1, r1
 46c:	f8 94       	cli
	if(OSIntNesting>0)
 46e:	41 10       	cpse	r4, r1
	{
		OSIntNesting--;     				/*中断嵌套减1			*/
 470:	4a 94       	dec	r4
	}
	if(OSIntNesting == 0)
 472:	44 20       	and	r4, r4
 474:	51 f4       	brne	.+20     	; 0x48a
	{
		OSFindPrioHighRdy();				/*找出就绪表中优先级最高的任务*/
 476:	0e 94 d4 00 	call	0x1a8
		if(OSPrioHighRdy != OSPrioCur)
 47a:	53 14       	cp	r5, r3
 47c:	31 f0       	breq	.+12     	; 0x48a
		{
			OS_EXIT_CRITICAL();
 47e:	0f 90       	pop	r0
 480:	0f be       	out	0x3f, r0	; 63
 482:	11 24       	eor	r1, r1
			IntSwitch();					/*进行任务调度	*/
 484:	0e 94 c8 00 	call	0x190
			return;
 488:	08 95       	ret
		}
	}
	OS_EXIT_CRITICAL();
 48a:	0f 90       	pop	r0
 48c:	0f be       	out	0x3f, r0	; 63
 48e:	11 24       	eor	r1, r1
 490:	08 95       	ret
 492:	08 95       	ret

00000494 <SIGNAL>:
}

/************************************************************************************************************************
函数名称:	SIGNAL(SIG_OVERFLOW0)
函数原型:	SIGNAL(SIG_OVERFLOW0)
函数功能:	定时器0溢出中断处理
入口参数:	无
出口参数:	无
有关说明:	用来为需要延时的任务进行任务延时
创建时间:	2007年3月3日
修改时间:	
************************************************************************************************************************/
SIGNAL(SIG_OVERFLOW0)
{
	OSIntEnter();
 494:	0e 94 28 02 	call	0x450
 498:	61 e0       	ldi	r22, 0x01	; 1
 49a:	70 e0       	ldi	r23, 0x00	; 0
 49c:	e0 e6       	ldi	r30, 0x60	; 96
 49e:	f0 e0       	ldi	r31, 0x00	; 0
 4a0:	20 e0       	ldi	r18, 0x00	; 0
 4a2:	30 e0       	ldi	r19, 0x00	; 0
 4a4:	42 e0       	ldi	r20, 0x02	; 2
	
	Uint_8bit i;
	for(i=0;i < OS_TASKS;i++)				/*刷新各任务时钟		*/
	{
		if(TCB[i].OSWaitTick && (TCB[i].OSWaitTick != 0xffff))
 4a6:	82 81       	ldd	r24, Z+2	; 0x02
 4a8:	93 81       	ldd	r25, Z+3	; 0x03
 4aa:	00 97       	sbiw	r24, 0x00	; 0
 4ac:	c9 f0       	breq	.+50     	; 0x4e0
 4ae:	5f ef       	ldi	r21, 0xFF	; 255
 4b0:	8f 3f       	cpi	r24, 0xFF	; 255
 4b2:	95 07       	cpc	r25, r21
 4b4:	a9 f0       	breq	.+42     	; 0x4e0
		{
			TCB[i].OSWaitTick--;
 4b6:	01 97       	sbiw	r24, 0x01	; 1
 4b8:	82 83       	std	Z+2, r24	; 0x02
 4ba:	93 83       	std	Z+3, r25	; 0x03
			if(TCB[i].OSWaitTick == 0)		/*当任务时钟到时,必须是由定时器减时的才行*/
 4bc:	89 2b       	or	r24, r25
 4be:	81 f4       	brne	.+32     	; 0x4e0
			{
				OSRdyTbl |= (0x01<<i);		/*使任务可以重新运行	*/
 4c0:	cb 01       	movw	r24, r22
 4c2:	02 2e       	mov	r0, r18
 4c4:	02 c0       	rjmp	.+4      	; 0x4ca
 4c6:	88 0f       	add	r24, r24
 4c8:	99 1f       	adc	r25, r25
 4ca:	0a 94       	dec	r0
 4cc:	e2 f7       	brpl	.-8      	; 0x4c6
 4ce:	28 2a       	or	r2, r24
				OSIntSchedReq();			/*中断中要求切换任务	*/
 4d0:	0f b6       	in	r0, 0x3f	; 63
 4d2:	0f 92       	push	r0
 4d4:	11 24       	eor	r1, r1
 4d6:	f8 94       	cli
 4d8:	02 60       	ori	r16, 0x02	; 2
 4da:	0f 90       	pop	r0
 4dc:	0f be       	out	0x3f, r0	; 63
 4de:	11 24       	eor	r1, r1
 4e0:	41 50       	subi	r20, 0x01	; 1
 4e2:	2f 5f       	subi	r18, 0xFF	; 255
 4e4:	3f 4f       	sbci	r19, 0xFF	; 255
 4e6:	35 96       	adiw	r30, 0x05	; 5
 4e8:	47 ff       	sbrs	r20, 7
 4ea:	dd cf       	rjmp	.-70     	; 0x4a6
			}
		}
	}
	TCNT0=100;
 4ec:	84 e6       	ldi	r24, 0x64	; 100
 4ee:	82 bf       	out	0x32, r24	; 50
	OSIntExit();
 4f0:	0e 94 33 02 	call	0x466
 4f4:	08 95       	ret

000004f6 <IdleTask>:
}

/************************************************************************************************************************
函数名称:	void IdleTask(void)
函数原型:	void IdleTask(void)
函数功能:	空闲任务,当其他任务没有就绪的时候运行
入口参数:	无
出口参数:	无
有关说明:	系统开始运行的时候是从运行空闲任务开始的。该任务不能删除
创建时间:	2007年3月3日
修改时间:	
************************************************************************************************************************/
void IdleTask(void)
{
	OSSched();
 4f6:	0e 94 e7 00 	call	0x1ce
	while(1)
 4fa:	ff cf       	rjmp	.-2      	; 0x4fa

000004fc <OSInit>:
	{
		
	}
}

/************************************************************************************************************************
函数名称:	OInit
函数原型:	void OInit (void)
函数功能:	初始化任务时钟和一些系统全局变量,建立空闲任务
入口参数:	无
出口参数:	无
有关说明:	
创建时间:	2007年3月5日
修改时间:	
************************************************************************************************************************/
void OSInit (void)
{
	OSRdyTbl=0;
 4fc:	22 24       	eor	r2, r2
	OSIntNesting=0;
 4fe:	42 2c       	mov	r4, r2
	
	TCN0Init();
 500:	0e 94 1e 02 	call	0x43c
	OSTaskCreate(IdleTask,&Stack[Total_Stack_Size-1],OS_TASKS);
 504:	43 e0       	ldi	r20, 0x03	; 3
 506:	63 e0       	ldi	r22, 0x03	; 3
 508:	72 e0       	ldi	r23, 0x02	; 2
 50a:	8b e7       	ldi	r24, 0x7B	; 123
 50c:	92 e0       	ldi	r25, 0x02	; 2
 50e:	0e 94 47 00 	call	0x8e
 512:	08 95       	ret

00000514 <Task0>:
}














/************************************************************************************************************************
函数名称:	void Task0(void)
函数原型:	void Task0(void)
函数功能:	任务0
入口参数:	无
出口参数:	无
有关说明:	
创建时间:	2007年3月3日
修改时间:	
************************************************************************************************************************/
void Task0(void)
{
	//DDRA = 0xff;
	//PORTA = 0x00;
	//DDRA|=0X7E;
	//PORTA|=0X20;
	OSSemCreat(0,0);
 514:	60 e0       	ldi	r22, 0x00	; 0
 516:	86 2f       	mov	r24, r22
 518:	0e 94 64 01 	call	0x2c8
	while(1)
	{
		OSTaskSemPend(0,0xffff);
 51c:	6f ef       	ldi	r22, 0xFF	; 255
 51e:	7f ef       	ldi	r23, 0xFF	; 255
 520:	80 e0       	ldi	r24, 0x00	; 0
 522:	0e 94 70 01 	call	0x2e0
 526:	fa cf       	rjmp	.-12     	; 0x51c

00000528 <Task1>:
		//PORTA = ~PORTA;
		//PORTA|=0X10;
	}
}

/************************************************************************************************************************
函数名称:	void Task1(void)
函数原型:	void Task1(void)
函数功能:	任务1
入口参数:	无
出口参数:	无
有关说明:	
创建时间:	2007年3月3日
修改时间:	
************************************************************************************************************************/
void Task1(void)
{
	DDRB = 0xff;
 528:	8f ef       	ldi	r24, 0xFF	; 255
 52a:	87 bb       	out	0x17, r24	; 23
	PORTB = 0xff;
 52c:	88 bb       	out	0x18, r24	; 24
	OSSemCreat(1,0);
 52e:	60 e0       	ldi	r22, 0x00	; 0
 530:	81 e0       	ldi	r24, 0x01	; 1
 532:	0e 94 64 01 	call	0x2c8
	while(1)
	{
		OSTaskSemPend(1,0xffff);
 536:	6f ef       	ldi	r22, 0xFF	; 255
 538:	7f ef       	ldi	r23, 0xFF	; 255
 53a:	81 e0       	ldi	r24, 0x01	; 1
 53c:	0e 94 70 01 	call	0x2e0
		PORTB = ~PORTB;
 540:	88 b3       	in	r24, 0x18	; 24
 542:	80 95       	com	r24
 544:	88 bb       	out	0x18, r24	; 24
 546:	f7 cf       	rjmp	.-18     	; 0x536

00000548 <Task2>:
	}
}

/************************************************************************************************************************
函数名称:	void Task2(void)
函数原型:	void Task2(void)
函数功能:	任务2
入口参数:	无
出口参数:	无
有关说明:	
创建时间:	2007年3月3日
修改时间:	
************************************************************************************************************************/
void Task2(void)
{
	while(1)
	{
		OSTimeDly(200);
 548:	88 ec       	ldi	r24, 0xC8	; 200
 54a:	90 e0       	ldi	r25, 0x00	; 0
 54c:	0e 94 3f 01 	call	0x27e
		OSTaskSemPost(0);
 550:	80 e0       	ldi	r24, 0x00	; 0
 552:	0e 94 0f 02 	call	0x41e
		OSTimeDly(200);
 556:	88 ec       	ldi	r24, 0xC8	; 200
 558:	90 e0       	ldi	r25, 0x00	; 0
 55a:	0e 94 3f 01 	call	0x27e
		OSTaskSemPost(1);
 55e:	81 e0       	ldi	r24, 0x01	; 1
 560:	0e 94 0f 02 	call	0x41e
 564:	f1 cf       	rjmp	.-30     	; 0x548

00000566 <main>:
	}
}

/************************************************************************************************************************
函数名称:	int main(void)
函数原型:	int main(void)
函数功能:	主函数
入口参数:	无
出口参数:	无
有关说明:	
创建时间:	2007年3月3日
修改时间:	
************************************************************************************************************************/
int main(void)
{
 566:	cf e5       	ldi	r28, 0x5F	; 95
 568:	d4 e0       	ldi	r29, 0x04	; 4
 56a:	de bf       	out	0x3e, r29	; 62
 56c:	cd bf       	out	0x3d, r28	; 61
	OSInit();
 56e:	0e 94 7e 02 	call	0x4fc
	
	OSTaskCreate(Task0,&Stack[99],0);
 572:	40 e0       	ldi	r20, 0x00	; 0
 574:	67 ed       	ldi	r22, 0xD7	; 215
 576:	70 e0       	ldi	r23, 0x00	; 0
 578:	8a e8       	ldi	r24, 0x8A	; 138
 57a:	92 e0       	ldi	r25, 0x02	; 2
 57c:	0e 94 47 00 	call	0x8e
	OSTaskCreate(Task1,&Stack[199],1);
 580:	41 e0       	ldi	r20, 0x01	; 1
 582:	6b e3       	ldi	r22, 0x3B	; 59
 584:	71 e0       	ldi	r23, 0x01	; 1
 586:	84 e9       	ldi	r24, 0x94	; 148
 588:	92 e0       	ldi	r25, 0x02	; 2
 58a:	0e 94 47 00 	call	0x8e
	OSTaskCreate(Task2,&Stack[299],2);
 58e:	42 e0       	ldi	r20, 0x02	; 2
 590:	6f e9       	ldi	r22, 0x9F	; 159
 592:	71 e0       	ldi	r23, 0x01	; 1
 594:	84 ea       	ldi	r24, 0xA4	; 164
 596:	92 e0       	ldi	r25, 0x02	; 2
 598:	0e 94 47 00 	call	0x8e
	
	OSStartTask();
 59c:	0e 94 6d 00 	call	0xda
	return 0;
}
 5a0:	80 e0       	ldi	r24, 0x00	; 0
 5a2:	90 e0       	ldi	r25, 0x00	; 0
 5a4:	0c 94 d4 02 	jmp	0x5a8

000005a8 <_exit>:
 5a8:	ff cf       	rjmp	.-2      	; 0x5a8

⌨️ 快捷键说明

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