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

📄 test.lss

📁 avr和small操作系统的一个测试程序
💻 LSS
📖 第 1 页 / 共 5 页
字号:
         SOSOS_RUNNING_INHERIT_PRI=mutex->INHERIT_PRI;
     648:	66 2e       	mov	r6, r22
         SOSOS_RUNNING_TASK_PRI=mutex->OWN_TASK_PRI;
     64a:	a5 2e       	mov	r10, r21
         SOSOS_RUNNING_TASK_ID=mutex->OWN_TASK_ID;
     64c:	b4 2e       	mov	r11, r20
         SOSOS_RUNNING_TASK_ID_INDEX=1<<SOSOS_RUNNING_TASK_ID;
     64e:	ce 01       	movw	r24, r28
     650:	02 c0       	rjmp	.+4      	; 0x656 <SososSched+0xc4>
     652:	88 0f       	add	r24, r24
     654:	99 1f       	adc	r25, r25
     656:	2a 95       	dec	r18
     658:	e2 f7       	brpl	.-8      	; 0x652 <SososSched+0xc0>
     65a:	c8 2e       	mov	r12, r24
         }
       }
     mutex=(SOSOS_MUTEX *)(mutex->NEXT_MUTEX);
     65c:	8d 91       	ld	r24, X+
     65e:	9c 91       	ld	r25, X
     660:	00 97       	sbiw	r24, 0x00	; 0
     662:	11 f0       	breq	.+4      	; 0x668 <SososSched+0xd6>
     664:	dc 01       	movw	r26, r24
     666:	d9 cf       	rjmp	.-78     	; 0x61a <SososSched+0x88>
     }
   }//互斥型信号量队列有成员
#endif
  SP=TCB[SOSOS_RUNNING_TASK_PRI*SOSOS_MAX_TASK_PER_PRI+SOSOS_RUNNING_TASK_ID].TASK_STACK_POINT;//切换堆栈指针
     668:	ea 2d       	mov	r30, r10
     66a:	ff 27       	eor	r31, r31
     66c:	ee 0f       	add	r30, r30
     66e:	ff 1f       	adc	r31, r31
     670:	eb 0d       	add	r30, r11
     672:	f1 1d       	adc	r31, r1
     674:	cf 01       	movw	r24, r30
     676:	63 e0       	ldi	r22, 0x03	; 3
     678:	88 0f       	add	r24, r24
     67a:	99 1f       	adc	r25, r25
     67c:	6a 95       	dec	r22
     67e:	e1 f7       	brne	.-8      	; 0x678 <SososSched+0xe6>
     680:	ee 0f       	add	r30, r30
     682:	ff 1f       	adc	r31, r31
     684:	e8 0f       	add	r30, r24
     686:	f9 1f       	adc	r31, r25
     688:	e0 58       	subi	r30, 0x80	; 128
     68a:	ff 4f       	sbci	r31, 0xFF	; 255
     68c:	80 81       	ld	r24, Z
     68e:	91 81       	ldd	r25, Z+1	; 0x01
     690:	9e bf       	out	0x3e, r25	; 62
     692:	8d bf       	out	0x3d, r24	; 61
//寄存器出栈
  SOSOS_POP_REGISTER();
     694:	df 91       	pop	r29
     696:	cf 91       	pop	r28
     698:	ff 91       	pop	r31
     69a:	ef 91       	pop	r30
     69c:	bf 91       	pop	r27
     69e:	af 91       	pop	r26
     6a0:	9f 91       	pop	r25
     6a2:	8f 91       	pop	r24
     6a4:	7f 91       	pop	r23
     6a6:	6f 91       	pop	r22
     6a8:	5f 91       	pop	r21
     6aa:	4f 91       	pop	r20
     6ac:	3f 91       	pop	r19
     6ae:	2f 91       	pop	r18
     6b0:	0f 91       	pop	r16
     6b2:	0f bf       	out	0x3f, r16	; 63
     6b4:	0f 91       	pop	r16
     6b6:	0f 90       	pop	r0
     6b8:	1f 90       	pop	r1
  __asm__ __volatile__("RET \n\t");
     6ba:	08 95       	ret

000006bc <SososScheder>:
}
#endif

#if SOSOS_TASK_ENALBE == 1
void SososScheder(void) __attribute__ ((naked));//任务调度器
void SososScheder(void)//任务调度器
//本函数只在系统内部使用,进入时中断是关闭的
{
//寄存器入栈
  SOSOS_PUSH_REGISTER();
     6bc:	1f 92       	push	r1
     6be:	0f 92       	push	r0
     6c0:	0f 93       	push	r16
     6c2:	0f b7       	in	r16, 0x3f	; 63
     6c4:	0f 93       	push	r16
     6c6:	11 24       	eor	r1, r1
     6c8:	2f 93       	push	r18
     6ca:	3f 93       	push	r19
     6cc:	4f 93       	push	r20
     6ce:	5f 93       	push	r21
     6d0:	6f 93       	push	r22
     6d2:	7f 93       	push	r23
     6d4:	8f 93       	push	r24
     6d6:	9f 93       	push	r25
     6d8:	af 93       	push	r26
     6da:	bf 93       	push	r27
     6dc:	ef 93       	push	r30
     6de:	ff 93       	push	r31
     6e0:	cf 93       	push	r28
     6e2:	df 93       	push	r29

  TCB[SOSOS_RUNNING_TASK_PRI*SOSOS_MAX_TASK_PER_PRI+SOSOS_RUNNING_TASK_ID].TASK_STACK_POINT=SP;//保存正在运行任务的栈指针
     6e4:	8d b7       	in	r24, 0x3d	; 61
     6e6:	9e b7       	in	r25, 0x3e	; 62
     6e8:	ea 2d       	mov	r30, r10
     6ea:	ff 27       	eor	r31, r31
     6ec:	ee 0f       	add	r30, r30
     6ee:	ff 1f       	adc	r31, r31
     6f0:	eb 0d       	add	r30, r11
     6f2:	f1 1d       	adc	r31, r1
     6f4:	9f 01       	movw	r18, r30
     6f6:	b3 e0       	ldi	r27, 0x03	; 3
     6f8:	22 0f       	add	r18, r18
     6fa:	33 1f       	adc	r19, r19
     6fc:	ba 95       	dec	r27
     6fe:	e1 f7       	brne	.-8      	; 0x6f8 <SososScheder+0x3c>
     700:	ee 0f       	add	r30, r30
     702:	ff 1f       	adc	r31, r31
     704:	e2 0f       	add	r30, r18
     706:	f3 1f       	adc	r31, r19
     708:	e0 58       	subi	r30, 0x80	; 128
     70a:	ff 4f       	sbci	r31, 0xFF	; 255
     70c:	91 83       	std	Z+1, r25	; 0x01
     70e:	80 83       	st	Z, r24
  SososSched();
     710:	40 df       	rcall	.-384    	; 0x592 <SososSched>

00000712 <__vector_9>:

}
#endif

#if SOSOS_TASK_ENALBE == 1
SOSOS_ISR(SIG_OVERFLOW0)//定时器0溢出中断处理
//提供系统的时间基准,中间开了下中断,以允许响应其他中断
{
//进入中断
 SOSOS_ENTER_INTERRUPT();
     712:	1f 92       	push	r1
     714:	0f 92       	push	r0
     716:	0f 93       	push	r16
     718:	0f b7       	in	r16, 0x3f	; 63
     71a:	0f 93       	push	r16
     71c:	11 24       	eor	r1, r1
     71e:	2f 93       	push	r18
     720:	3f 93       	push	r19
     722:	4f 93       	push	r20
     724:	5f 93       	push	r21
     726:	6f 93       	push	r22
     728:	7f 93       	push	r23
     72a:	8f 93       	push	r24
     72c:	9f 93       	push	r25
     72e:	af 93       	push	r26
     730:	bf 93       	push	r27
     732:	ef 93       	push	r30
     734:	ff 93       	push	r31
     736:	cf 93       	push	r28
     738:	df 93       	push	r29
     73a:	dd 20       	and	r13, r13
     73c:	f9 f4       	brne	.+62     	; 0x77c <__vector_9+0x6a>
     73e:	11 fd       	sbrc	r17, 1
     740:	17 c0       	rjmp	.+46     	; 0x770 <__vector_9+0x5e>
     742:	8d b7       	in	r24, 0x3d	; 61
     744:	9e b7       	in	r25, 0x3e	; 62
     746:	ea 2d       	mov	r30, r10
     748:	ff 27       	eor	r31, r31
     74a:	ee 0f       	add	r30, r30
     74c:	ff 1f       	adc	r31, r31
     74e:	eb 0d       	add	r30, r11
     750:	f1 1d       	adc	r31, r1
     752:	9f 01       	movw	r18, r30
     754:	22 0f       	add	r18, r18
     756:	33 1f       	adc	r19, r19
     758:	22 0f       	add	r18, r18
     75a:	33 1f       	adc	r19, r19
     75c:	22 0f       	add	r18, r18
     75e:	33 1f       	adc	r19, r19
     760:	ee 0f       	add	r30, r30
     762:	ff 1f       	adc	r31, r31
     764:	e2 0f       	add	r30, r18
     766:	f3 1f       	adc	r31, r19
     768:	e0 58       	subi	r30, 0x80	; 128
     76a:	ff 4f       	sbci	r31, 0xFF	; 255
     76c:	91 83       	std	Z+1, r25	; 0x01
     76e:	80 83       	st	Z, r24
     770:	ed b7       	in	r30, 0x3d	; 61
     772:	fe b7       	in	r31, 0x3e	; 62
     774:	ed be       	out	0x3d, r14	; 61
     776:	fe be       	out	0x3e, r15	; 62
     778:	ef 93       	push	r30
     77a:	ff 93       	push	r31
     77c:	d3 94       	inc	r13

 TCNT0=SYS_TIMER_VALUE;
     77e:	89 ed       	ldi	r24, 0xD9	; 217
     780:	82 bf       	out	0x32, r24	; 50
 SOSOS_TICKS++;
     782:	73 94       	inc	r7

 ENABLE_INTERRUPT();
     784:	78 94       	sei
 SososTimer0();
     786:	8d de       	rcall	.-742    	; 0x4a2 <SososTimer0>

//离开中断
 SOSOS_EXIT_INTERRUPT();
     788:	f8 94       	cli
     78a:	d1 10       	cpse	r13, r1
     78c:	da 94       	dec	r13
     78e:	dd 20       	and	r13, r13
     790:	41 f4       	brne	.+16     	; 0x7a2 <__vector_9+0x90>
     792:	ff 91       	pop	r31
     794:	ef 91       	pop	r30
     796:	ed bf       	out	0x3d, r30	; 61
     798:	fe bf       	out	0x3e, r31	; 62
     79a:	10 ff       	sbrs	r17, 0
     79c:	02 c0       	rjmp	.+4      	; 0x7a2 <__vector_9+0x90>
     79e:	11 ff       	sbrs	r17, 1
     7a0:	f8 de       	rcall	.-528    	; 0x592 <SososSched>
     7a2:	df 91       	pop	r29
     7a4:	cf 91       	pop	r28
     7a6:	ff 91       	pop	r31
     7a8:	ef 91       	pop	r30
     7aa:	bf 91       	pop	r27
     7ac:	af 91       	pop	r26
     7ae:	9f 91       	pop	r25
     7b0:	8f 91       	pop	r24
     7b2:	7f 91       	pop	r23
     7b4:	6f 91       	pop	r22
     7b6:	5f 91       	pop	r21
     7b8:	4f 91       	pop	r20
     7ba:	3f 91       	pop	r19
     7bc:	2f 91       	pop	r18
     7be:	0f 91       	pop	r16
     7c0:	0f bf       	out	0x3f, r16	; 63
     7c2:	0f 91       	pop	r16
     7c4:	0f 90       	pop	r0
     7c6:	1f 90       	pop	r1
     7c8:	18 95       	reti

000007ca <SososCreateTask>:
}
#endif

#if SOSOS_TASK_ENALBE == 1
void SososIdleTask(void *ptr)//系统空闲任务
//本任务运行在定义的最低优先级的最后一个ID上
//系统提供的定时器部件,是在本任务中处理的,处理时中断时关闭的
//不允许任何挂起本任务的操作
//提供一个名为SososIdleHook()的钩子函数,允许用户,在其中添加一些顺序执行的语句序列,不能有死循环
{
 DISABLE_INTERRUPT();
 if(test_0(SOSOS_STATE,STATE_SCHED_RUN)&&(SOSOS_INT_NEST==0))
 SososScheder();//任务调度器
 ENABLE_INTERRUPT();
 while(1){
//计时处理
   unsigned char i;

#if SOSOS_WDT_ENABLE == 1
//看门狗
 SOSOS_WDT_RST();//复位看门狗
#endif
//定时器部件
   DISABLE_INTERRUPT();
   if(SOSOS_TICKS>0){
#if SOSOS_TIMER_ENABLE == 1
     for(i=0;i<SOSOS_TIMER_NO;i++){
       if(SOSOS_TIMER[i]>SOSOS_TICKS){
         SOSOS_TIMER[i]-=SOSOS_TICKS;
         }
       else{
         SOSOS_TIMER[i]=0;
         }
       }
#endif
     SOSOS_TICKS=0;
     }
   ENABLE_INTERRUPT();

   SososIdleHook();
   }
 }
#endif

#if SOSOS_TASK_ENALBE == 1
unsigned char SososCreateTask(void (*task)(void *),unsigned char pri,unsigned char id,unsigned int stack_size,void *ptr)//创建任务
//本函数用于创建任务
//task:任务函数
//pri:优先级
//id:任务在本优先级的表示号
//stack_size:堆栈的字节大小
//ptr:传递给任务的一个数据指针
{
     7ca:	0f 93       	push	r16
     7cc:	cf 93       	push	r28
     7ce:	df 93       	push	r29
     7d0:	cd b7       	in	r28, 0x3d	; 61
     7d2:	de b7       	in	r29, 0x3e	; 62
     7d4:	28 97       	sbiw	r28, 0x08	; 8
     7d6:	0f b6       	in	r0, 0x3f	; 63
     7d8:	f8 94       	cli
     7da:	de bf       	out	0x3e, r29	; 62
     7dc:	0f be       	out	0x3f, r0	; 63
     7de:	cd bf       	out	0x3d, r28	; 61
     7e0:	9a 83       	std	Y+2, r25	; 0x02
     7e2:	89 83       	std	Y+1, r24	; 0x01
     7e4:	38 87       	std	Y+8, r19	; 0x08
     7e6:	2f 83       	std	Y+7, r18	; 0x07
     7e8:	1c 83       	std	Y+4, r17	; 0x04
     7ea:	0b 83       	std	Y+3, r16	; 0x03
 unsigned char *stack;
#if ERROR_DETECT_ENABLE == 1
 if(pri>=SOSOS_PRI_MAX)
     7ec:	63 30       	cpi	r22, 0x03	; 3
     7ee:	18 f0       	brcs	.+6      	; 0x7f6 <SososCreateTask+0x2c>
     7f0:	8f ef       	ldi	r24, 0xFF	; 255
     7f2:	90 e0       	ldi	r25, 0x00	; 0
     7f4:	b0 c0       	rjmp	.+352    	; 0x956 <SososCreateTask+0x18c>
   return SOSOS_PRI_LIMITED;
 if(id>=SOSOS_MAX_TASK_PER_PRI)
     7f6:	42 30       	cpi	r20, 0x02	; 2
     7f8:	18 f0       	brcs	.+6      	; 0x800 <SososCreateTask+0x36>
     7fa:	8e ef       	ldi	r24, 0xFE	; 254
     7fc:	90 e0       	ldi	r25, 0x00	; 0
     7fe:	ab c0       	rjmp	.+342    	; 0x956 <SososCreateTask+0x18c>
   return SOSOS_ID_LIMITED;
 if((pri==SOSOS_PRI_MAX-1)&&(id==SOSOS_MAX_TASK_PER_PRI-1)&&(task!=SososIdleTask))
     800:	62 30       	cpi	r22, 0x02	; 2
     802:	41 f4       	brne	.+16     	; 0x814 <SososCreateTask+0x4a>
     804:	41 30       	cpi	r20, 0x01	; 1
     806:	31 f4       	brne	.+12     	; 0x814 <SososCreateTask+0x4a>
     808:	29 81       	ldd	r18, Y+1	; 0x01
     80a:	3a 81       	ldd	r19, Y+2	; 0x02
     80c:	2f 57       	subi	r18, 0x7F	; 127
     80e:	38 40       	sbci	r19, 0x08	; 8
     810:	09 f0       	breq	.+2      	; 0x814 <SososCreateTask+0x4a>
     812:	9f c0       	rjmp	.+318    	; 0x952 <SososCreateTask+0x188>
   return SOSOS_TASK_EXIST;
 if(TCB[pri*SOSOS_MAX_TASK_PER_PRI+id].TASK_STACK_POINT!=0)
     814:	77 27       	eor	r23, r23
     816:	55 27       	eor	r21, r21

⌨️ 快捷键说明

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