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

📄 test.lss

📁 avr和small操作系统的一个测试程序
💻 LSS
📖 第 1 页 / 共 5 页
字号:
     818:	cb 01       	movw	r24, r22
     81a:	88 0f       	add	r24, r24
     81c:	99 1f       	adc	r25, r25
     81e:	84 0f       	add	r24, r20
     820:	95 1f       	adc	r25, r21
     822:	9c 01       	movw	r18, r24
     824:	53 e0       	ldi	r21, 0x03	; 3
     826:	22 0f       	add	r18, r18
     828:	33 1f       	adc	r19, r19
     82a:	5a 95       	dec	r21
     82c:	e1 f7       	brne	.-8      	; 0x826 <SososCreateTask+0x5c>
     82e:	dc 01       	movw	r26, r24
     830:	aa 0f       	add	r26, r26
     832:	bb 1f       	adc	r27, r27
     834:	a2 0f       	add	r26, r18
     836:	b3 1f       	adc	r27, r19
     838:	a0 58       	subi	r26, 0x80	; 128
     83a:	bf 4f       	sbci	r27, 0xFF	; 255
     83c:	8d 91       	ld	r24, X+
     83e:	9c 91       	ld	r25, X
     840:	11 97       	sbiw	r26, 0x01	; 1
     842:	89 2b       	or	r24, r25
     844:	09 f0       	breq	.+2      	; 0x848 <SososCreateTask+0x7e>
     846:	85 c0       	rjmp	.+266    	; 0x952 <SososCreateTask+0x188>
   return SOSOS_TASK_EXIST;
 if(SOSOS_TASK_STACK_TOP<((SOSOS_ADDRESS)SOSOS_TASK_STACK+(SOSOS_ADDRESS)stack_size-1))
     848:	20 91 7d 00 	lds	r18, 0x007D
     84c:	30 91 7e 00 	lds	r19, 0x007E
     850:	8f 81       	ldd	r24, Y+7	; 0x07
     852:	98 85       	ldd	r25, Y+8	; 0x08
     854:	8e 53       	subi	r24, 0x3E	; 62
     856:	9f 4f       	sbci	r25, 0xFF	; 255
     858:	28 17       	cp	r18, r24
     85a:	39 07       	cpc	r19, r25
     85c:	18 f4       	brcc	.+6      	; 0x864 <SososCreateTask+0x9a>
     85e:	8c ef       	ldi	r24, 0xFC	; 252
     860:	90 e0       	ldi	r25, 0x00	; 0
     862:	79 c0       	rjmp	.+242    	; 0x956 <SososCreateTask+0x18c>
   return SOSOS_TASK_STACK_LIMITED;
#endif
//设置堆栈指针
 DISABLE_INTERRUPT();
     864:	f8 94       	cli
 stack=(unsigned char *)SOSOS_TASK_STACK_TOP;
#if STACK_SIZE_REPORT_ENABLE == 1
 TCB[pri*SOSOS_MAX_TASK_PER_PRI+id].TASK_STACK_BUTTON=SOSOS_TASK_STACK_TOP;
     866:	fd 01       	movw	r30, r26
     868:	33 83       	std	Z+3, r19	; 0x03
     86a:	22 83       	std	Z+2, r18	; 0x02
 TCB[pri*SOSOS_MAX_TASK_PER_PRI+id].TASK_STACK_SIZE=stack_size;
     86c:	8f 81       	ldd	r24, Y+7	; 0x07
     86e:	98 85       	ldd	r25, Y+8	; 0x08
     870:	95 83       	std	Z+5, r25	; 0x05
     872:	84 83       	std	Z+4, r24	; 0x04
#endif
 SOSOS_TASK_STACK_TOP-=stack_size;
     874:	c9 01       	movw	r24, r18
     876:	ef 81       	ldd	r30, Y+7	; 0x07
     878:	f8 85       	ldd	r31, Y+8	; 0x08
     87a:	8e 1b       	sub	r24, r30
     87c:	9f 0b       	sbc	r25, r31
     87e:	90 93 7e 00 	sts	0x007E, r25
     882:	80 93 7d 00 	sts	0x007D, r24
//任务地址入栈
 *stack--=(SOSOS_ADDRESS)task;
     886:	89 81       	ldd	r24, Y+1	; 0x01
     888:	f9 01       	movw	r30, r18
     88a:	80 83       	st	Z, r24
     88c:	21 50       	subi	r18, 0x01	; 1
     88e:	30 40       	sbci	r19, 0x00	; 0
     890:	3e 83       	std	Y+6, r19	; 0x06
     892:	2d 83       	std	Y+5, r18	; 0x05
 *stack--=(SOSOS_ADDRESS)task>>8; 
     894:	e9 81       	ldd	r30, Y+1	; 0x01
     896:	fa 81       	ldd	r31, Y+2	; 0x02
     898:	8f 2f       	mov	r24, r31
     89a:	99 27       	eor	r25, r25
     89c:	f9 01       	movw	r30, r18
     89e:	80 83       	st	Z, r24
     8a0:	ed 81       	ldd	r30, Y+5	; 0x05
     8a2:	fe 81       	ldd	r31, Y+6	; 0x06
     8a4:	31 97       	sbiw	r30, 0x01	; 1
//寄存器入栈
 *stack--=0;//R1 zero register
     8a6:	10 82       	st	Z, r1
     8a8:	31 97       	sbiw	r30, 0x01	; 1
 *stack--=0;//R0 temp register
     8aa:	10 82       	st	Z, r1
     8ac:	31 97       	sbiw	r30, 0x01	; 1
 *stack--=0x10;//R16
     8ae:	80 e1       	ldi	r24, 0x10	; 16
     8b0:	80 83       	st	Z, r24
     8b2:	31 97       	sbiw	r30, 0x01	; 1
 *stack--=0x80;//SREG 开启全局中断
     8b4:	80 e8       	ldi	r24, 0x80	; 128
     8b6:	80 83       	st	Z, r24
     8b8:	31 97       	sbiw	r30, 0x01	; 1
 *stack--=0x12;//R18
     8ba:	82 e1       	ldi	r24, 0x12	; 18
     8bc:	80 83       	st	Z, r24
     8be:	31 97       	sbiw	r30, 0x01	; 1
 *stack--=0x13;//R19
     8c0:	83 e1       	ldi	r24, 0x13	; 19
     8c2:	80 83       	st	Z, r24
     8c4:	31 97       	sbiw	r30, 0x01	; 1
 *stack--=0x14;//R20
     8c6:	84 e1       	ldi	r24, 0x14	; 20
     8c8:	80 83       	st	Z, r24
     8ca:	31 97       	sbiw	r30, 0x01	; 1
 *stack--=0x15;//R21
     8cc:	85 e1       	ldi	r24, 0x15	; 21
     8ce:	80 83       	st	Z, r24
     8d0:	31 97       	sbiw	r30, 0x01	; 1
 *stack--=0x16;//R22
     8d2:	86 e1       	ldi	r24, 0x16	; 22
     8d4:	80 83       	st	Z, r24
     8d6:	31 97       	sbiw	r30, 0x01	; 1
 *stack--=0x17;//R23
     8d8:	87 e1       	ldi	r24, 0x17	; 23
     8da:	80 83       	st	Z, r24
     8dc:	9f 01       	movw	r18, r30
     8de:	21 50       	subi	r18, 0x01	; 1
     8e0:	30 40       	sbci	r19, 0x00	; 0
 *stack--=(SOSOS_ADDRESS)ptr;//R24
     8e2:	8b 81       	ldd	r24, Y+3	; 0x03
     8e4:	f9 01       	movw	r30, r18
     8e6:	80 83       	st	Z, r24
     8e8:	21 50       	subi	r18, 0x01	; 1
     8ea:	30 40       	sbci	r19, 0x00	; 0
     8ec:	3e 83       	std	Y+6, r19	; 0x06
     8ee:	2d 83       	std	Y+5, r18	; 0x05
 *stack--=(SOSOS_ADDRESS)ptr>>8;//R25
     8f0:	eb 81       	ldd	r30, Y+3	; 0x03
     8f2:	fc 81       	ldd	r31, Y+4	; 0x04
     8f4:	8f 2f       	mov	r24, r31
     8f6:	99 27       	eor	r25, r25
     8f8:	f9 01       	movw	r30, r18
     8fa:	80 83       	st	Z, r24
     8fc:	ed 81       	ldd	r30, Y+5	; 0x05
     8fe:	fe 81       	ldd	r31, Y+6	; 0x06
     900:	31 97       	sbiw	r30, 0x01	; 1
 *stack--=0x1a;//R26
     902:	8a e1       	ldi	r24, 0x1A	; 26
     904:	80 83       	st	Z, r24
     906:	31 97       	sbiw	r30, 0x01	; 1
 *stack--=0x1b;//R27
     908:	8b e1       	ldi	r24, 0x1B	; 27
     90a:	80 83       	st	Z, r24
     90c:	31 97       	sbiw	r30, 0x01	; 1
 *stack--=0x1e;//R30
     90e:	8e e1       	ldi	r24, 0x1E	; 30
     910:	80 83       	st	Z, r24
     912:	31 97       	sbiw	r30, 0x01	; 1
 *stack--=0x1f;//R31
     914:	8f e1       	ldi	r24, 0x1F	; 31
     916:	80 83       	st	Z, r24
     918:	31 97       	sbiw	r30, 0x01	; 1
 *stack--=0x1c;//R28
     91a:	8c e1       	ldi	r24, 0x1C	; 28
     91c:	80 83       	st	Z, r24
     91e:	31 97       	sbiw	r30, 0x01	; 1
 *stack--=0x1d;//R29
     920:	8d e1       	ldi	r24, 0x1D	; 29
     922:	80 83       	st	Z, r24
//保存栈顶
 TCB[pri*SOSOS_MAX_TASK_PER_PRI+id].TASK_STACK_POINT=(SOSOS_ADDRESS)stack;
     924:	31 97       	sbiw	r30, 0x01	; 1
     926:	11 96       	adiw	r26, 0x01	; 1
     928:	fc 93       	st	X, r31
     92a:	ee 93       	st	-X, r30
 set_bit(SOSOS_TASK_READY[pri],id);//设置任务就绪状态
     92c:	fb 01       	movw	r30, r22
     92e:	e6 58       	subi	r30, 0x86	; 134
     930:	ff 4f       	sbci	r31, 0xFF	; 255
     932:	20 81       	ld	r18, Z
     934:	81 e0       	ldi	r24, 0x01	; 1
     936:	90 e0       	ldi	r25, 0x00	; 0
     938:	02 c0       	rjmp	.+4      	; 0x93e <SososCreateTask+0x174>
     93a:	88 0f       	add	r24, r24
     93c:	99 1f       	adc	r25, r25
     93e:	4a 95       	dec	r20
     940:	e2 f7       	brpl	.-8      	; 0x93a <SososCreateTask+0x170>
     942:	28 2b       	or	r18, r24
     944:	20 83       	st	Z, r18
 TCB[pri*SOSOS_MAX_TASK_PER_PRI+id].TASK_STATE=TASK_STATE_OK;
     946:	fd 01       	movw	r30, r26
     948:	16 82       	std	Z+6, r1	; 0x06
 ENABLE_INTERRUPT();
     94a:	78 94       	sei
     94c:	80 e0       	ldi	r24, 0x00	; 0
     94e:	90 e0       	ldi	r25, 0x00	; 0
     950:	02 c0       	rjmp	.+4      	; 0x956 <SososCreateTask+0x18c>
 return SOSOS_OK;
     952:	8d ef       	ldi	r24, 0xFD	; 253
     954:	90 e0       	ldi	r25, 0x00	; 0
     956:	28 96       	adiw	r28, 0x08	; 8
     958:	0f b6       	in	r0, 0x3f	; 63
     95a:	f8 94       	cli
     95c:	de bf       	out	0x3e, r29	; 62
     95e:	0f be       	out	0x3f, r0	; 63
     960:	cd bf       	out	0x3d, r28	; 61
     962:	df 91       	pop	r29
     964:	cf 91       	pop	r28
     966:	0f 91       	pop	r16
     968:	08 95       	ret

0000096a <SososGetTaskId>:
}
#endif

#if SOSOS_GET_TASK_ID_ENABLE == 1
unsigned char SososGetTaskId(void)//获得当前任务ID
//返回值的高半字节是任务优先级,低半字节是任务在该优先级的ID
{
     96a:	8a 2d       	mov	r24, r10
     96c:	82 95       	swap	r24
     96e:	80 7f       	andi	r24, 0xF0	; 240
     970:	8b 0d       	add	r24, r11
 return((SOSOS_RUNNING_TASK_PRI<<4)+SOSOS_RUNNING_TASK_ID);
 }
     972:	99 27       	eor	r25, r25
     974:	08 95       	ret

00000976 <SososSuspendTask>:
#endif

#if SOSOS_SUSPEND_TASK_ENABLE == 1
void SososSuspendTask(unsigned char pri,unsigned char id)//挂起任务
//挂起指定的任务,不要在中断中调用该函数
//pri:优先级
//id:任务在本优先级的表示号
{
 ENTER_CRITICAL();
     976:	0f b6       	in	r0, 0x3f	; 63
     978:	f8 94       	cli
     97a:	0f 92       	push	r0
 clr_bit(SOSOS_TASK_READY[pri],id);//清除任务就绪状态
     97c:	e8 2f       	mov	r30, r24
     97e:	ff 27       	eor	r31, r31
     980:	e6 58       	subi	r30, 0x86	; 134
     982:	ff 4f       	sbci	r31, 0xFF	; 255
     984:	90 81       	ld	r25, Z
     986:	21 e0       	ldi	r18, 0x01	; 1
     988:	30 e0       	ldi	r19, 0x00	; 0
     98a:	06 2e       	mov	r0, r22
     98c:	02 c0       	rjmp	.+4      	; 0x992 <SososSuspendTask+0x1c>
     98e:	22 0f       	add	r18, r18
     990:	33 1f       	adc	r19, r19
     992:	0a 94       	dec	r0
     994:	e2 f7       	brpl	.-8      	; 0x98e <SososSuspendTask+0x18>
     996:	20 95       	com	r18
     998:	92 23       	and	r25, r18
     99a:	90 83       	st	Z, r25

 if((pri==SOSOS_RUNNING_TASK_PRI)&&(id==SOSOS_RUNNING_TASK_ID)){
     99c:	8a 15       	cp	r24, r10
     99e:	19 f4       	brne	.+6      	; 0x9a6 <SososSuspendTask+0x30>
     9a0:	6b 15       	cp	r22, r11
     9a2:	09 f4       	brne	.+2      	; 0x9a6 <SososSuspendTask+0x30>
   SososScheder();//挂起的是当前任务,重新调度
     9a4:	8b de       	rcall	.-746    	; 0x6bc <SososScheder>
   }
 EXIT_CRITICAL();
     9a6:	0f 90       	pop	r0
     9a8:	0f be       	out	0x3f, r0	; 63
     9aa:	08 95       	ret

000009ac <SososResumeTask>:
}
#endif

#if SOSOS_RESUME_TASK_ENABLE == 1
void SososResumeTask(unsigned char pri,unsigned char id)//恢复任务
//恢复指定的任务,不要在中断中调用该函数
//pri:优先级
//id:任务在本优先级的表示号
{
 ENTER_CRITICAL();
     9ac:	0f b6       	in	r0, 0x3f	; 63
     9ae:	f8 94       	cli
     9b0:	0f 92       	push	r0
 set_bit(SOSOS_TASK_READY[pri],id);//设置任务就绪状态
     9b2:	e8 2f       	mov	r30, r24
     9b4:	ff 27       	eor	r31, r31
     9b6:	e6 58       	subi	r30, 0x86	; 134
     9b8:	ff 4f       	sbci	r31, 0xFF	; 255
     9ba:	90 81       	ld	r25, Z
     9bc:	21 e0       	ldi	r18, 0x01	; 1
     9be:	30 e0       	ldi	r19, 0x00	; 0
     9c0:	02 c0       	rjmp	.+4      	; 0x9c6 <SososResumeTask+0x1a>
     9c2:	22 0f       	add	r18, r18
     9c4:	33 1f       	adc	r19, r19
     9c6:	6a 95       	dec	r22
     9c8:	e2 f7       	brpl	.-8      	; 0x9c2 <SososResumeTask+0x16>
     9ca:	92 2b       	or	r25, r18
     9cc:	90 83       	st	Z, r25

#if SOSOS_MUTEX_ENABLE == 1
 if(SOSOS_RUNNING_INHERIT_PRI>pri){
     9ce:	86 15       	cp	r24, r6
     9d0:	08 f4       	brcc	.+2      	; 0x9d4 <SososResumeTask+0x28>
#else
 if(SOSOS_RUNNING_TASK_PRI>pri){
#endif
   SososScheder();//恢复的任务优先级更高,重新调度
     9d2:	74 de       	rcall	.-792    	; 0x6bc <SososScheder>
   }
 EXIT_CRITICAL();
     9d4:	0f 90       	pop	r0
     9d6:	0f be       	out	0x3f, r0	; 63
     9d8:	08 95       	ret

000009da <SososDelay>:
}
#endif

#if SOSOS_DELAY_TASK_ENABLE == 1
void SososDelay(unsigned int ticks)//任务延时
//将任务延时指定的时间间隔,不要在中断中调用该函数
//ticks:延时值,为0就立即返回
{
     9da:	9c 01       	movw	r18, r24
 if(ticks>0){
     9dc:	89 2b       	or	r24, r25
     9de:	61 f1       	breq	.+88     	; 0xa38 <SososDelay+0x5e>
   ENTER_CRITICAL();
     9e0:	0f b6       	in	r0, 0x3f	; 63
     9e2:	f8 94       	cli
     9e4:	0f 92       	push	r0
   set_bit(SOSOS_WAIT_TASK,SOSOS_RUNNING_TASK_PRI);
     9e6:	ea 2d       	mov	r30, r10
     9e8:	ff 27       	eor	r31, r31
     9ea:	81 e0       	ldi	r24, 0x01	; 1
     9ec:	90 e0       	ldi	r25, 0x00	; 0
     9ee:	0e 2e       	mov	r0, r30
     9f0:	02 c0       	rjmp	.+4      	; 0x9f6 <SososDelay+0x1c>
     9f2:	88 0f       	add	r24, r24
     9f4:	99 1f       	adc	r25, r25
     9f6:	0a 94       	dec	r0
     9f8:	e2 f7       	brpl	.-8      	; 0x9f2 <SososDelay+0x18>
     9fa:	98 2a       	or	r9, r24
   SOSOS_TASK_READY[SOSOS_RUNNING_TASK_PRI]=SOSOS_TASK_READY[SOSOS_RUNNING_TASK_PRI]&(~SOSOS_RUNNING_TASK_ID_INDEX);//清除任务就绪状态
     9fc:	df 01       	movw	r26, r30
     9fe:	a6 58       	subi	r26

⌨️ 快捷键说明

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