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

📄 user_code.lss

📁 一个小的操作系统包括应用程序很有参考价值
💻 LSS
📖 第 1 页 / 共 4 页
字号:
 25e:	8d 93       	st	X+, r24
 260:	9c 93       	st	X, r25
 *sp_temp--=0;//R17
 262:	de 01       	movw	r26, r28
 264:	19 96       	adiw	r26, 0x09	; 9
 266:	8d 91       	ld	r24, X+
 268:	9c 91       	ld	r25, X
 26a:	11 97       	sbiw	r26, 0x01	; 1
 26c:	fc 01       	movw	r30, r24
 26e:	10 82       	st	Z, r1
 270:	01 97       	sbiw	r24, 0x01	; 1
 272:	8d 93       	st	X+, r24
 274:	9c 93       	st	X, r25
 *sp_temp--=0;//R18
 276:	de 01       	movw	r26, r28
 278:	19 96       	adiw	r26, 0x09	; 9
 27a:	8d 91       	ld	r24, X+
 27c:	9c 91       	ld	r25, X
 27e:	11 97       	sbiw	r26, 0x01	; 1
 280:	fc 01       	movw	r30, r24
 282:	10 82       	st	Z, r1
 284:	01 97       	sbiw	r24, 0x01	; 1
 286:	8d 93       	st	X+, r24
 288:	9c 93       	st	X, r25
 *sp_temp--=0;//R19
 28a:	de 01       	movw	r26, r28
 28c:	19 96       	adiw	r26, 0x09	; 9
 28e:	8d 91       	ld	r24, X+
 290:	9c 91       	ld	r25, X
 292:	11 97       	sbiw	r26, 0x01	; 1
 294:	fc 01       	movw	r30, r24
 296:	10 82       	st	Z, r1
 298:	01 97       	sbiw	r24, 0x01	; 1
 29a:	8d 93       	st	X+, r24
 29c:	9c 93       	st	X, r25
 *sp_temp--=0;//R20
 29e:	de 01       	movw	r26, r28
 2a0:	19 96       	adiw	r26, 0x09	; 9
 2a2:	8d 91       	ld	r24, X+
 2a4:	9c 91       	ld	r25, X
 2a6:	11 97       	sbiw	r26, 0x01	; 1
 2a8:	fc 01       	movw	r30, r24
 2aa:	10 82       	st	Z, r1
 2ac:	01 97       	sbiw	r24, 0x01	; 1
 2ae:	8d 93       	st	X+, r24
 2b0:	9c 93       	st	X, r25
 *sp_temp--=0;//R21
 2b2:	de 01       	movw	r26, r28
 2b4:	19 96       	adiw	r26, 0x09	; 9
 2b6:	8d 91       	ld	r24, X+
 2b8:	9c 91       	ld	r25, X
 2ba:	11 97       	sbiw	r26, 0x01	; 1
 2bc:	fc 01       	movw	r30, r24
 2be:	10 82       	st	Z, r1
 2c0:	01 97       	sbiw	r24, 0x01	; 1
 2c2:	8d 93       	st	X+, r24
 2c4:	9c 93       	st	X, r25
 *sp_temp--=0;//R22
 2c6:	de 01       	movw	r26, r28
 2c8:	19 96       	adiw	r26, 0x09	; 9
 2ca:	8d 91       	ld	r24, X+
 2cc:	9c 91       	ld	r25, X
 2ce:	11 97       	sbiw	r26, 0x01	; 1
 2d0:	fc 01       	movw	r30, r24
 2d2:	10 82       	st	Z, r1
 2d4:	01 97       	sbiw	r24, 0x01	; 1
 2d6:	8d 93       	st	X+, r24
 2d8:	9c 93       	st	X, r25
 *sp_temp--=0;//R23
 2da:	de 01       	movw	r26, r28
 2dc:	19 96       	adiw	r26, 0x09	; 9
 2de:	8d 91       	ld	r24, X+
 2e0:	9c 91       	ld	r25, X
 2e2:	11 97       	sbiw	r26, 0x01	; 1
 2e4:	fc 01       	movw	r30, r24
 2e6:	10 82       	st	Z, r1
 2e8:	01 97       	sbiw	r24, 0x01	; 1
 2ea:	8d 93       	st	X+, r24
 2ec:	9c 93       	st	X, r25
 *sp_temp--=0;//R24
 2ee:	de 01       	movw	r26, r28
 2f0:	19 96       	adiw	r26, 0x09	; 9
 2f2:	8d 91       	ld	r24, X+
 2f4:	9c 91       	ld	r25, X
 2f6:	11 97       	sbiw	r26, 0x01	; 1
 2f8:	fc 01       	movw	r30, r24
 2fa:	10 82       	st	Z, r1
 2fc:	01 97       	sbiw	r24, 0x01	; 1
 2fe:	8d 93       	st	X+, r24
 300:	9c 93       	st	X, r25
 *sp_temp--=0;//R25
 302:	de 01       	movw	r26, r28
 304:	19 96       	adiw	r26, 0x09	; 9
 306:	8d 91       	ld	r24, X+
 308:	9c 91       	ld	r25, X
 30a:	11 97       	sbiw	r26, 0x01	; 1
 30c:	fc 01       	movw	r30, r24
 30e:	10 82       	st	Z, r1
 310:	01 97       	sbiw	r24, 0x01	; 1
 312:	8d 93       	st	X+, r24
 314:	9c 93       	st	X, r25
 *sp_temp--=0;//R26
 316:	de 01       	movw	r26, r28
 318:	19 96       	adiw	r26, 0x09	; 9
 31a:	8d 91       	ld	r24, X+
 31c:	9c 91       	ld	r25, X
 31e:	11 97       	sbiw	r26, 0x01	; 1
 320:	fc 01       	movw	r30, r24
 322:	10 82       	st	Z, r1
 324:	01 97       	sbiw	r24, 0x01	; 1
 326:	8d 93       	st	X+, r24
 328:	9c 93       	st	X, r25
 *sp_temp--=0;//R27
 32a:	de 01       	movw	r26, r28
 32c:	19 96       	adiw	r26, 0x09	; 9
 32e:	8d 91       	ld	r24, X+
 330:	9c 91       	ld	r25, X
 332:	11 97       	sbiw	r26, 0x01	; 1
 334:	fc 01       	movw	r30, r24
 336:	10 82       	st	Z, r1
 338:	01 97       	sbiw	r24, 0x01	; 1
 33a:	8d 93       	st	X+, r24
 33c:	9c 93       	st	X, r25
 *sp_temp--=0;//R28
 33e:	de 01       	movw	r26, r28
 340:	19 96       	adiw	r26, 0x09	; 9
 342:	8d 91       	ld	r24, X+
 344:	9c 91       	ld	r25, X
 346:	11 97       	sbiw	r26, 0x01	; 1
 348:	fc 01       	movw	r30, r24
 34a:	10 82       	st	Z, r1
 34c:	01 97       	sbiw	r24, 0x01	; 1
 34e:	8d 93       	st	X+, r24
 350:	9c 93       	st	X, r25
 *sp_temp--=0;//R29
 352:	de 01       	movw	r26, r28
 354:	19 96       	adiw	r26, 0x09	; 9
 356:	8d 91       	ld	r24, X+
 358:	9c 91       	ld	r25, X
 35a:	11 97       	sbiw	r26, 0x01	; 1
 35c:	fc 01       	movw	r30, r24
 35e:	10 82       	st	Z, r1
 360:	01 97       	sbiw	r24, 0x01	; 1
 362:	8d 93       	st	X+, r24
 364:	9c 93       	st	X, r25
 *sp_temp--=0;//R30
 366:	de 01       	movw	r26, r28
 368:	19 96       	adiw	r26, 0x09	; 9
 36a:	8d 91       	ld	r24, X+
 36c:	9c 91       	ld	r25, X
 36e:	11 97       	sbiw	r26, 0x01	; 1
 370:	fc 01       	movw	r30, r24
 372:	10 82       	st	Z, r1
 374:	01 97       	sbiw	r24, 0x01	; 1
 376:	8d 93       	st	X+, r24
 378:	9c 93       	st	X, r25
 *sp_temp--=0;//R31
 37a:	de 01       	movw	r26, r28
 37c:	19 96       	adiw	r26, 0x09	; 9
 37e:	8d 91       	ld	r24, X+
 380:	9c 91       	ld	r25, X
 382:	11 97       	sbiw	r26, 0x01	; 1
 384:	fc 01       	movw	r30, r24
 386:	10 82       	st	Z, r1
 388:	01 97       	sbiw	r24, 0x01	; 1
 38a:	8d 93       	st	X+, r24
 38c:	9c 93       	st	X, r25
 
 *sp_temp=0x80;//SREG每条线程的总中断开关都为开
 38e:	e9 85       	ldd	r30, Y+9	; 0x09
 390:	fa 85       	ldd	r31, Y+10	; 0x0a
 392:	80 e8       	ldi	r24, 0x80	; 128
 394:	80 83       	st	Z, r24
 
 OS_TASK_ARRY[OS_TASK_INT_USED].task_sp=(unsigned int)sp_temp-1;        //赋予线程堆栈指针
 396:	80 91 60 00 	lds	r24, 0x0060
 39a:	99 27       	eor	r25, r25
 39c:	88 0f       	add	r24, r24
 39e:	99 1f       	adc	r25, r25
 3a0:	88 0f       	add	r24, r24
 3a2:	99 1f       	adc	r25, r25
 3a4:	88 0f       	add	r24, r24
 3a6:	99 1f       	adc	r25, r25
 3a8:	fc 01       	movw	r30, r24
 3aa:	eb 59       	subi	r30, 0x9B	; 155
 3ac:	ff 4f       	sbci	r31, 0xFF	; 255
 3ae:	89 85       	ldd	r24, Y+9	; 0x09
 3b0:	9a 85       	ldd	r25, Y+10	; 0x0a
 3b2:	01 97       	sbiw	r24, 0x01	; 1
 3b4:	80 83       	st	Z, r24
 3b6:	91 83       	std	Z+1, r25	; 0x01
 OS_TASK_INT_USED=OS_TASK_INT_USED+1;  //修改已使用的线程数目
 3b8:	80 91 60 00 	lds	r24, 0x0060
 3bc:	8f 5f       	subi	r24, 0xFF	; 255
 3be:	80 93 60 00 	sts	0x0060, r24
}
 3c2:	2a 96       	adiw	r28, 0x0a	; 10
 3c4:	0f b6       	in	r0, 0x3f	; 63
 3c6:	f8 94       	cli
 3c8:	de bf       	out	0x3e, r29	; 62
 3ca:	0f be       	out	0x3f, r0	; 63
 3cc:	cd bf       	out	0x3d, r28	; 61
 3ce:	df 91       	pop	r29
 3d0:	cf 91       	pop	r28
 3d2:	08 95       	ret

000003d4 <OS_GETTO_NEXT_TASK_INT>:

//下一条线程处理函数(中断模式)
void OS_GETTO_NEXT_TASK_INT(void)
{
 3d4:	cf 93       	push	r28
 3d6:	df 93       	push	r29
 3d8:	cd b7       	in	r28, 0x3d	; 61
 3da:	de b7       	in	r29, 0x3e	; 62
 3dc:	22 97       	sbiw	r28, 0x02	; 2
 3de:	0f b6       	in	r0, 0x3f	; 63
 3e0:	f8 94       	cli
 3e2:	de bf       	out	0x3e, r29	; 62
 3e4:	0f be       	out	0x3f, r0	; 63
 3e6:	cd bf       	out	0x3d, r28	; 61
 void *p;                                       //声明入口指针
 SP_POINTER=OS_TASK_ARRY[os_next_task].task_sp; //转移SP指针到下一条线程
 3e8:	80 91 82 00 	lds	r24, 0x0082
 3ec:	99 27       	eor	r25, r25
 3ee:	88 0f       	add	r24, r24
 3f0:	99 1f       	adc	r25, r25
 3f2:	88 0f       	add	r24, r24
 3f4:	99 1f       	adc	r25, r25
 3f6:	88 0f       	add	r24, r24
 3f8:	99 1f       	adc	r25, r25
 3fa:	fc 01       	movw	r30, r24
 3fc:	eb 59       	subi	r30, 0x9B	; 155
 3fe:	ff 4f       	sbci	r31, 0xFF	; 255
 400:	80 81       	ld	r24, Z
 402:	91 81       	ldd	r25, Z+1	; 0x01
 404:	90 93 5e 00 	sts	0x005E, r25
 408:	80 93 5d 00 	sts	0x005D, r24
 os_now_task=os_next_task;                       //修改当前线程标识
 40c:	80 91 82 00 	lds	r24, 0x0082
 410:	80 93 81 00 	sts	0x0081, r24
 p=&OS_GET_TO_TASK_INT;                              //获取汇编进入线程入口函数地址
 414:	8a e1       	ldi	r24, 0x1A	; 26
 416:	94 e0       	ldi	r25, 0x04	; 4
 418:	89 83       	std	Y+1, r24	; 0x01
 41a:	9a 83       	std	Y+2, r25	; 0x02
 goto *p;                                       //进入汇编进入线程函数
 41c:	e9 81       	ldd	r30, Y+1	; 0x01
 41e:	fa 81       	ldd	r31, Y+2	; 0x02
 420:	09 94       	ijmp

00000422 <OS_GETTO_NEXT_TASK_DISP>:
}

//下一条线程处理函数(普通模式)
void OS_GETTO_NEXT_TASK_DISP(void)
{
 422:	cf 93       	push	r28
 424:	df 93       	push	r29
 426:	cd b7       	in	r28, 0x3d	; 61
 428:	de b7       	in	r29, 0x3e	; 62
 42a:	22 97       	sbiw	r28, 0x02	; 2
 42c:	0f b6       	in	r0, 0x3f	; 63
 42e:	f8 94       	cli
 430:	de bf       	out	0x3e, r29	; 62
 432:	0f be       	out	0x3f, r0	; 63
 434:	cd bf       	out	0x3d, r28	; 61
 void *p;                                       //声明入口指针
 SP_POINTER=OS_TASK_ARRY[os_next_task].task_sp; //转移SP指针到下一条线程
 436:	80 91 82 00 	lds	r24, 0x0082
 43a:	99 27       	eor	r25, r25
 43c:	88 0f       	add	r24, r24
 43e:	99 1f       	adc	r25, r25
 440:	88 0f       	add	r24, r24
 442:	99 1f       	adc	r25, r25
 444:	88 0f       	add	r24, r24
 446:	99 1f       	adc	r25, r25
 448:	fc 01       	movw	r30, r24
 44a:	eb 59       	subi	r30, 0x9B	; 155
 44c:	ff 4f       	sbci	r31, 0xFF	; 255
 44e:	80 81       	ld	r24, Z
 450:	91 81       	ldd	r25, Z+1	; 0x01
 452:	90 93 5e 00 	sts	0x005E, r25
 456:	80 93 5d 00 	sts	0x005D, r24
 os_now_task=os_next_task;                       //修改当前线程标识
 45a:	80 91 82 00 	lds	r24, 0x0082
 45e:	80 93 81 00 	sts	0x0081, r24
 p=&OS_GET_TO_TASK_DISP;                              //获取汇编进入线程入口函数地址
 462:	8e e3       	ldi	r24, 0x3E	; 62
 464:	94 e0       	ldi	r25, 0x04	; 4
 466:	89 83       	std	Y+1, r24	; 0x01
 468:	9a 83       	std	Y+2, r25	; 0x02
 goto *p;                                       //进入汇编进入线程函数
 46a:	e9 81       	ldd	r30, Y+1	; 0x01
 46c:	fa 81       	ldd	r31, Y+2	; 0x02
 46e:	09 94       	ijmp

00000470 <OS_SAVE_TASK_SP>:
}

//保存线程SP指针
void OS_SAVE_TASK_SP(unsigned int task_sp)
{
 470:	cf 93       	push	r28
 472:	df 93       	push	r29
 474:	cd b7       	in	r28, 0x3d	; 61
 476:	de b7       	in	r29, 0x3e	; 62
 478:	22 97       	sbiw	r28, 0x02	; 2
 47a:	0f b6       	in	r0, 0x3f	; 63
 47c:	f8 94       	cli
 47e:	de bf       	out	0x3e, r29	; 62
 480:	0f be       	out	0x3f, r0	; 63
 482:	cd bf       	out	0x3d, r28	; 61
 484:	89 83       	std	Y+1, r24	; 0x01
 486:	9a 83       	std	Y+2, r25	; 0x02
 OS_TASK_ARRY[os_now_task].task_sp=task_sp;    //保存当前线程的SP指针
 488:	80 91 81 00 	lds	r24, 0x0081
 48c:	99 27       	eor	r25, r25
 48e:	88 0f       	add	r24, r24
 490:	99 1f       	adc	r25, r25
 492:	88 0f       	add	r24, r24
 494:	99 1f       	adc	r25, r25
 496:	88 0f       	add	r24, r24
 498:	99 1f       	adc	r25, r25
 49a:	fc 01       	movw	r30, r24
 49c:	eb 59       	subi	r30, 0x9B	; 155
 49e:	ff 4f       	sbci	r31, 0xFF	; 255
 4a0:	89 81       	ldd	r24, Y+1	; 0x01
 4a2:	9a 81       	ldd	r25, Y+2	; 0x02
 4a4:	80 83       	st	Z, r24
 4a6:	91 83       	std	Z+1, r25	; 0x01
}
 4a8:	22 96       	adiw	r28, 0x02	; 2
 4aa:	0f b6       	in	r0, 0x3f	; 63
 4ac:	f8 94       	cli
 4ae:	de bf       	out	0x3e, r29	; 62
 4b0:	0f be       	out	0x3f, r0	; 63
 4b2:	cd bf       	out	0x3d, r28	; 61
 4b4:	df 91       	pop	r29
 4b6:	cf 91       	pop	r28
 4b8:	08 95       	ret

000004ba <OS_ATTEMPER>:

//系统调度器
void OS_ATTEMPER(void)
{
 4ba:	cf 93       	push	r28
 4bc:	df 93       	push	r29
 4be:	cd b7       	in	r28, 0x3d	; 61
 4c0:	de b7       	in	r29, 0x3e	; 62
 4c2:	22 97       	sbiw	r28, 0x02	; 2
 4c4:	0f b6       	in	r0, 0x3f	; 63
 4c6:	f8 94       	cli
 4c8:	de bf       	out	0x3e, r29	; 62
 4ca:	0f be       	out	0x3f, r0	; 63
 4cc:	cd bf       	out	0x3d, r28	; 61
 unsigned char loop_task_arry;  //求出下一条线程的循环变量
 unsigned char task_high_pri=0xff;   //求出最高优先权临时变量
 4ce:	8f ef       	ldi	r24, 0xFF	; 255
 4d0:	8a 83       	std	Y+2, r24	; 0x02
 //为经检验 原来值为0XFF
 os_next_task=TASK_NUMBER-1;     //预设下一条线程为最后ID线程
 4d2:	83 e0       	ldi	r24, 0x03	; 3
 4d4:	80 93 82 00 	sts	0x0082, r24
 
 for (loop_task_arry=0;loop_task_arry<TASK_NUMBER;loop_task_arry++)
 4d8:	19 82       	std	Y+1, r1	; 0x01
 4da:	89 81       	ldd	r24, Y+1	; 0x01
 4dc:	84 30       	cpi	r24, 0x04	; 4
 4de:	08 f0       	brcs	.+2      	; 0x4e2
 4e0:	3f c0       	rjmp	.+126    	; 0x560
     {
	   if( (OS_TASK_ARRY[loop_task_arry].task_ready==1)&&
 4e2:	89 81       	ldd	r24, Y+1	; 0x01
 4e4:	99 27       	eor	r25, r25
 4e6:	88 0f       	add	r24, r24
 4e8:	99 1f       	adc	r25, r25
 4ea:	88 0f       	add	r24, r24

⌨️ 快捷键说明

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