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

📄 user_code.lss

📁 一个小的操作系统包括应用程序很有参考价值
💻 LSS
📖 第 1 页 / 共 4 页
字号:
 4ec:	99 1f       	adc	r25, r25
 4ee:	88 0f       	add	r24, r24
 4f0:	99 1f       	adc	r25, r25
 4f2:	fc 01       	movw	r30, r24
 4f4:	ec 59       	subi	r30, 0x9C	; 156
 4f6:	ff 4f       	sbci	r31, 0xFF	; 255
 4f8:	80 81       	ld	r24, Z
 4fa:	81 30       	cpi	r24, 0x01	; 1
 4fc:	69 f5       	brne	.+90     	; 0x558
 4fe:	89 81       	ldd	r24, Y+1	; 0x01
 500:	99 27       	eor	r25, r25
 502:	88 0f       	add	r24, r24
 504:	99 1f       	adc	r25, r25
 506:	88 0f       	add	r24, r24
 508:	99 1f       	adc	r25, r25
 50a:	88 0f       	add	r24, r24
 50c:	99 1f       	adc	r25, r25
 50e:	fc 01       	movw	r30, r24
 510:	e9 59       	subi	r30, 0x99	; 153
 512:	ff 4f       	sbci	r31, 0xFF	; 255
 514:	80 81       	ld	r24, Z
 516:	88 23       	and	r24, r24
 518:	f9 f4       	brne	.+62     	; 0x558
	      (OS_TASK_ARRY[loop_task_arry].task_wait_clock==0))
		   {
		    if (OS_TASK_ARRY[loop_task_arry].task_pri<task_high_pri)
 51a:	89 81       	ldd	r24, Y+1	; 0x01
 51c:	99 27       	eor	r25, r25
 51e:	88 0f       	add	r24, r24
 520:	99 1f       	adc	r25, r25
 522:	88 0f       	add	r24, r24
 524:	99 1f       	adc	r25, r25
 526:	88 0f       	add	r24, r24
 528:	99 1f       	adc	r25, r25
 52a:	fc 01       	movw	r30, r24
 52c:	ed 59       	subi	r30, 0x9D	; 157
 52e:	ff 4f       	sbci	r31, 0xFF	; 255
 530:	90 81       	ld	r25, Z
 532:	8a 81       	ldd	r24, Y+2	; 0x02
 534:	98 17       	cp	r25, r24
 536:	80 f4       	brcc	.+32     	; 0x558
			    {
				 task_high_pri=OS_TASK_ARRY[loop_task_arry].task_pri;
 538:	89 81       	ldd	r24, Y+1	; 0x01
 53a:	99 27       	eor	r25, r25
 53c:	88 0f       	add	r24, r24
 53e:	99 1f       	adc	r25, r25
 540:	88 0f       	add	r24, r24
 542:	99 1f       	adc	r25, r25
 544:	88 0f       	add	r24, r24
 546:	99 1f       	adc	r25, r25
 548:	fc 01       	movw	r30, r24
 54a:	ed 59       	subi	r30, 0x9D	; 157
 54c:	ff 4f       	sbci	r31, 0xFF	; 255
 54e:	80 81       	ld	r24, Z
 550:	8a 83       	std	Y+2, r24	; 0x02
				 os_next_task=loop_task_arry;
 552:	89 81       	ldd	r24, Y+1	; 0x01
 554:	80 93 82 00 	sts	0x0082, r24
 558:	89 81       	ldd	r24, Y+1	; 0x01
 55a:	8f 5f       	subi	r24, 0xFF	; 255
 55c:	89 83       	std	Y+1, r24	; 0x01
 55e:	bd cf       	rjmp	.-134    	; 0x4da
				}
		   }
     }
}
 560:	22 96       	adiw	r28, 0x02	; 2
 562:	0f b6       	in	r0, 0x3f	; 63
 564:	f8 94       	cli
 566:	de bf       	out	0x3e, r29	; 62
 568:	0f be       	out	0x3f, r0	; 63
 56a:	cd bf       	out	0x3d, r28	; 61
 56c:	df 91       	pop	r29
 56e:	cf 91       	pop	r28
 570:	08 95       	ret

00000572 <OS_DLY_TIME_DEC>:

//线程等待时钟节拍处理过程
void OS_DLY_TIME_DEC(void)
{
 572:	cf 93       	push	r28
 574:	df 93       	push	r29
 576:	cd b7       	in	r28, 0x3d	; 61
 578:	de b7       	in	r29, 0x3e	; 62
 57a:	21 97       	sbiw	r28, 0x01	; 1
 57c:	0f b6       	in	r0, 0x3f	; 63
 57e:	f8 94       	cli
 580:	de bf       	out	0x3e, r29	; 62
 582:	0f be       	out	0x3f, r0	; 63
 584:	cd bf       	out	0x3d, r28	; 61
 unsigned char loop_i;
 for (loop_i=0;loop_i<TASK_NUMBER;loop_i++)
 586:	19 82       	std	Y+1, r1	; 0x01
 588:	89 81       	ldd	r24, Y+1	; 0x01
 58a:	84 30       	cpi	r24, 0x04	; 4
 58c:	08 f0       	brcs	.+2      	; 0x590
 58e:	2b c0       	rjmp	.+86     	; 0x5e6
      {
	   if (OS_TASK_ARRY[loop_i].task_wait_clock!=0)
 590:	89 81       	ldd	r24, Y+1	; 0x01
 592:	99 27       	eor	r25, r25
 594:	88 0f       	add	r24, r24
 596:	99 1f       	adc	r25, r25
 598:	88 0f       	add	r24, r24
 59a:	99 1f       	adc	r25, r25
 59c:	88 0f       	add	r24, r24
 59e:	99 1f       	adc	r25, r25
 5a0:	fc 01       	movw	r30, r24
 5a2:	e9 59       	subi	r30, 0x99	; 153
 5a4:	ff 4f       	sbci	r31, 0xFF	; 255
 5a6:	80 81       	ld	r24, Z
 5a8:	88 23       	and	r24, r24
 5aa:	c9 f0       	breq	.+50     	; 0x5de
	       {
			   OS_TASK_ARRY[loop_i].task_wait_clock--;
 5ac:	89 81       	ldd	r24, Y+1	; 0x01
 5ae:	99 27       	eor	r25, r25
 5b0:	88 0f       	add	r24, r24
 5b2:	99 1f       	adc	r25, r25
 5b4:	88 0f       	add	r24, r24
 5b6:	99 1f       	adc	r25, r25
 5b8:	88 0f       	add	r24, r24
 5ba:	99 1f       	adc	r25, r25
 5bc:	dc 01       	movw	r26, r24
 5be:	a9 59       	subi	r26, 0x99	; 153
 5c0:	bf 4f       	sbci	r27, 0xFF	; 255
 5c2:	89 81       	ldd	r24, Y+1	; 0x01
 5c4:	99 27       	eor	r25, r25
 5c6:	88 0f       	add	r24, r24
 5c8:	99 1f       	adc	r25, r25
 5ca:	88 0f       	add	r24, r24
 5cc:	99 1f       	adc	r25, r25
 5ce:	88 0f       	add	r24, r24
 5d0:	99 1f       	adc	r25, r25
 5d2:	fc 01       	movw	r30, r24
 5d4:	e9 59       	subi	r30, 0x99	; 153
 5d6:	ff 4f       	sbci	r31, 0xFF	; 255
 5d8:	80 81       	ld	r24, Z
 5da:	81 50       	subi	r24, 0x01	; 1
 5dc:	8c 93       	st	X, r24
 5de:	89 81       	ldd	r24, Y+1	; 0x01
 5e0:	8f 5f       	subi	r24, 0xFF	; 255
 5e2:	89 83       	std	Y+1, r24	; 0x01
 5e4:	d1 cf       	rjmp	.-94     	; 0x588
	       }
	  }
}
 5e6:	21 96       	adiw	r28, 0x01	; 1
 5e8:	0f b6       	in	r0, 0x3f	; 63
 5ea:	f8 94       	cli
 5ec:	de bf       	out	0x3e, r29	; 62
 5ee:	0f be       	out	0x3f, r0	; 63
 5f0:	cd bf       	out	0x3d, r28	; 61
 5f2:	df 91       	pop	r29
 5f4:	cf 91       	pop	r28
 5f6:	08 95       	ret

000005f8 <OS_TASK_DLY>:

//线程延时函数
void OS_TASK_DLY(unsigned char disp_time)
{
 5f8:	cf 93       	push	r28
 5fa:	df 93       	push	r29
 5fc:	cd b7       	in	r28, 0x3d	; 61
 5fe:	de b7       	in	r29, 0x3e	; 62
 600:	21 97       	sbiw	r28, 0x01	; 1
 602:	0f b6       	in	r0, 0x3f	; 63
 604:	f8 94       	cli
 606:	de bf       	out	0x3e, r29	; 62
 608:	0f be       	out	0x3f, r0	; 63
 60a:	cd bf       	out	0x3d, r28	; 61
 60c:	89 83       	std	Y+1, r24	; 0x01
 OS_TASK_ARRY[os_now_task].task_wait_clock=disp_time;//设置当前线程等待时钟节拍数
 60e:	80 91 81 00 	lds	r24, 0x0081
 612:	99 27       	eor	r25, r25
 614:	88 0f       	add	r24, r24
 616:	99 1f       	adc	r25, r25
 618:	88 0f       	add	r24, r24
 61a:	99 1f       	adc	r25, r25
 61c:	88 0f       	add	r24, r24
 61e:	99 1f       	adc	r25, r25
 620:	fc 01       	movw	r30, r24
 622:	e9 59       	subi	r30, 0x99	; 153
 624:	ff 4f       	sbci	r31, 0xFF	; 255
 626:	89 81       	ldd	r24, Y+1	; 0x01
 628:	80 83       	st	Z, r24
 OS_DISP_TIME_P();                                    //进入汇编线程等待处理过程
 62a:	4c d1       	rcall	.+664    	; 0x8c4
}
 62c:	21 96       	adiw	r28, 0x01	; 1
 62e:	0f b6       	in	r0, 0x3f	; 63
 630:	f8 94       	cli
 632:	de bf       	out	0x3e, r29	; 62
 634:	0f be       	out	0x3f, r0	; 63
 636:	cd bf       	out	0x3d, r28	; 61
 638:	df 91       	pop	r29
 63a:	cf 91       	pop	r28
 63c:	08 95       	ret

0000063e <OS_GET_TASK_ID>:

//获取线程ID
unsigned char OS_GET_TASK_ID(void *task)
{
 63e:	cf 93       	push	r28
 640:	df 93       	push	r29
 642:	cd b7       	in	r28, 0x3d	; 61
 644:	de b7       	in	r29, 0x3e	; 62
 646:	25 97       	sbiw	r28, 0x05	; 5
 648:	0f b6       	in	r0, 0x3f	; 63
 64a:	f8 94       	cli
 64c:	de bf       	out	0x3e, r29	; 62
 64e:	0f be       	out	0x3f, r0	; 63
 650:	cd bf       	out	0x3d, r28	; 61
 652:	89 83       	std	Y+1, r24	; 0x01
 654:	9a 83       	std	Y+2, r25	; 0x02
 unsigned char loop_i;
 for (loop_i=0;loop_i<TASK_NUMBER;loop_i++)
 656:	1b 82       	std	Y+3, r1	; 0x03
 658:	8b 81       	ldd	r24, Y+3	; 0x03
 65a:	84 30       	cpi	r24, 0x04	; 4
 65c:	08 f0       	brcs	.+2      	; 0x660
 65e:	1b c0       	rjmp	.+54     	; 0x696
     {
	  if (OS_TASK_ARRY[loop_i].task_address==(unsigned int)task)
 660:	8b 81       	ldd	r24, Y+3	; 0x03
 662:	99 27       	eor	r25, r25
 664:	88 0f       	add	r24, r24
 666:	99 1f       	adc	r25, r25
 668:	88 0f       	add	r24, r24
 66a:	99 1f       	adc	r25, r25
 66c:	88 0f       	add	r24, r24
 66e:	99 1f       	adc	r25, r25
 670:	fc 01       	movw	r30, r24
 672:	ef 59       	subi	r30, 0x9F	; 159
 674:	ff 4f       	sbci	r31, 0xFF	; 255
 676:	20 81       	ld	r18, Z
 678:	31 81       	ldd	r19, Z+1	; 0x01
 67a:	89 81       	ldd	r24, Y+1	; 0x01
 67c:	9a 81       	ldd	r25, Y+2	; 0x02
 67e:	28 17       	cp	r18, r24
 680:	39 07       	cpc	r19, r25
 682:	29 f4       	brne	.+10     	; 0x68e
	      {
		    return loop_i;
 684:	8b 81       	ldd	r24, Y+3	; 0x03
 686:	99 27       	eor	r25, r25
 688:	8c 83       	std	Y+4, r24	; 0x04
 68a:	9d 83       	std	Y+5, r25	; 0x05
 68c:	04 c0       	rjmp	.+8      	; 0x696
 68e:	8b 81       	ldd	r24, Y+3	; 0x03
 690:	8f 5f       	subi	r24, 0xFF	; 255
 692:	8b 83       	std	Y+3, r24	; 0x03
 694:	e1 cf       	rjmp	.-62     	; 0x658
		  }
	 }
}
 696:	8c 81       	ldd	r24, Y+4	; 0x04
 698:	9d 81       	ldd	r25, Y+5	; 0x05
 69a:	25 96       	adiw	r28, 0x05	; 5
 69c:	0f b6       	in	r0, 0x3f	; 63
 69e:	f8 94       	cli
 6a0:	de bf       	out	0x3e, r29	; 62
 6a2:	0f be       	out	0x3f, r0	; 63
 6a4:	cd bf       	out	0x3d, r28	; 61
 6a6:	df 91       	pop	r29
 6a8:	cf 91       	pop	r28
 6aa:	08 95       	ret

000006ac <OS_START_TICK>:


//************************************************
//
//   以下是用户使用时需要修改的代码部分
//     (主要用来确定时钟节拍)
//************************************************

//启动RTOS
inline void OS_START_TICK(void)
{
 6ac:	cf 93       	push	r28
 6ae:	df 93       	push	r29
 6b0:	cd b7       	in	r28, 0x3d	; 61
 6b2:	de b7       	in	r29, 0x3e	; 62
 6b4:	22 97       	sbiw	r28, 0x02	; 2
 6b6:	0f b6       	in	r0, 0x3f	; 63
 6b8:	f8 94       	cli
 6ba:	de bf       	out	0x3e, r29	; 62
 6bc:	0f be       	out	0x3f, r0	; 63
 6be:	cd bf       	out	0x3d, r28	; 61
 void *p;             //获取汇编函数第一次启动时跳入调度入口点的地址临时指针(用户不必理会)
 
 SREG=SREG|0X80;      //开总中断       (用户可能需要修改部分)
 6c0:	80 91 5f 00 	lds	r24, 0x005F
 6c4:	80 68       	ori	r24, 0x80	; 128
 6c6:	80 93 5f 00 	sts	0x005F, r24
 TIMSK=TIMSK|0X01;    //开时钟0中断    (用户可能需要修改部分)
 6ca:	80 91 59 00 	lds	r24, 0x0059
 6ce:	81 60       	ori	r24, 0x01	; 1
 6d0:	80 93 59 00 	sts	0x0059, r24
 TCNT0=0X80;          //设置时钟初值    (用户可能需要修改部分)
 6d4:	80 e8       	ldi	r24, 0x80	; 128
 6d6:	80 93 52 00 	sts	0x0052, r24
 TCCR0=TCCR0|0X03;    //启动时钟0      (用户可能需要修改部分)
 6da:	80 91 53 00 	lds	r24, 0x0053
 6de:	83 60       	ori	r24, 0x03	; 3
 6e0:	80 93 53 00 	sts	0x0053, r24
 
 p=&START_TICK_POINT; //获取汇编函数第一次启动时跳入调度入口点地址   (用户不必理会)
 6e4:	8a e8       	ldi	r24, 0x8A	; 138
 6e6:	94 e0       	ldi	r25, 0x04	; 4
 6e8:	89 83       	std	Y+1, r24	; 0x01
 6ea:	9a 83       	std	Y+2, r25	; 0x02
 goto *p;            //跳入汇编函数第一次启动时跳入调度入口点       (用户不必理会)
 6ec:	e9 81       	ldd	r30, Y+1	; 0x01
 6ee:	fa 81       	ldd	r31, Y+2	; 0x02
 6f0:	09 94       	ijmp

000006f2 <OS_RELOAD_TICK>:
}

//重新初始化系统时钟
void OS_RELOAD_TICK(void)
{
 6f2:	cf 93       	push	r28
 6f4:	df 93       	push	r29
 6f6:	cd b7       	in	r28, 0x3d	; 61
 6f8:	de b7       	in	r29, 0x3e	; 62
 TCNT0=0X80;         //重新装入定时器    (用户可能需要修改部分)
 6fa:	80 e8       	ldi	r24, 0x80	; 128
 6fc:	80 93 52 00 	sts	0x0052, r24
}
 700:	df 91       	pop	r29
 702:	cf 91       	pop	r28
 704:	08 95       	ret

00000706 <dispt>:


//可重入函数
void dispt(void)
{
 706:	cf 93       	push	r28
 708:	df 93       	push	r29
 70a:	cd b7       	in	r28, 0x3d	; 61
 70c:	de b7       	in	r29, 0x3e	; 62
 70e:	22 97       	sbiw	r28, 0x02	; 2
 710:	0f b6       	in	r0, 0x3f	; 63
 712:	f8 94       	cli
 714:	de bf       	out	0x3e, r29	; 62
 716:	0f be       	out	0x3f, r0	; 63
 718:	cd bf       	out	0x3d, r28	; 61
 unsigned int i;
 for (i=0;i<0x01ff;i++);
 71a:	19 82       	std	Y+1, r1	; 0x01
 71c:	1a 82       	std	Y+2, r1	; 0x02
 71e:	89 81       	ldd	r24, Y+1	; 0x01
 720:	9a 81       	ldd	r25, Y+2	; 0x02
 722:	21 e0       	ldi	r18, 0x01	; 1
 724:	8f 3f       	cpi	r24, 0xFF	; 255
 726:	92 07       	cpc	r25, r18
 728:	08 f0       	brcs	.+2      	; 0x72c
 72a:	06 c0       	rjmp	.+12     	; 0x738
 72c:	89 81       	ldd	r24, Y+1	; 0x01
 72e:	9a 81       	ldd	r25, Y+2	; 0x02
 730:	01 96       	adiw	r24, 0x01	; 1
 732:	89 83       	std	Y+1, r24	; 0x01
 734:	9a 83       	std	Y+2, r25	; 0x02
 736:	f3 cf       	rjmp	.-26     	; 0x71e
}
 738:	22 96       	adiw	r28, 0x02	; 2
 73a:	0f b6       	in	r0, 0x3f	; 63
 73c:	f8 94       	cli
 73e:	de bf       	out	0x3e, r29	; 62
 740:	0f be       	out	0x3f, r0	; 63

⌨️ 快捷键说明

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