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

📄 minos_avr.lst

📁 非剥夺型占先式minOS_iccavr avr单片机 icc编译环境
💻 LST
📖 第 1 页 / 共 2 页
字号:
__text_start:
__start:
    0010 E5CF      LDI	R28,0x5F
    0011 E0D2      LDI	R29,2
    0012 BFCD      OUT	P3D,R28
    0013 BFDE      OUT	P3E,R29
    0014 51C0      SUBI	R28,0x10
    0015 40D0      SBCI	R29,0
    0016 EA0A      LDI	R16,0xAA
    0017 8308      STD	R16,0+Y
    0018 2400      CLR	R0
    0019 E6E0      LDI	R30,0x60
    001A E0F0      LDI	R31,0
    001B E011      LDI	R17,1
    001C 33ED      CPI	R30,0x3D
    001D 07F1      CPC	R31,R17
    001E F011      BEQ	0x0021
    001F 9201      ST	R0,Z+
    0020 CFFB      RJMP	0x001C
    0021 8300      STD	R16,0+Z
    0022 E2E0      LDI	R30,0x20
    0023 E0F0      LDI	R31,0
    0024 E6A0      LDI	R26,0x60
    0025 E0B0      LDI	R27,0
    0026 E010      LDI	R17,0
    0027 32E0      CPI	R30,0x20
    0028 07F1      CPC	R31,R17
    0029 F021      BEQ	0x002E
    002A 95C8      LPM
    002B 9631      ADIW	R30,1
    002C 920D      ST	R0,X+
    002D CFF9      RJMP	0x0027
    002E D001      RCALL	_main
_exit:
    002F CFFF      RJMP	_exit
_main:
    0030 9721      SBIW	R28,1
FILE: C:\icc\minOS_iccavr\App.c
(0000) #include "OS_Includes.h"
(0001) 
(0002) //PORTB bit4-bit7 for to drive LED1-LED4.
(0003) #define LED1_ON() (PORTB |= (0x1<<4))
(0004) #define LED1_OFF() (PORTB &= ~(0x1<<4))
(0005) #define LED2_ON() (PORTB |= (0x1<<5))
(0006) #define LED2_OFF() (PORTB &= ~(0x1<<5))
(0007) #define LED3_ON() (PORTB |= (0x1<<6))
(0008) #define LED3_OFF() (PORTB &= ~(0x1<<6))
(0009) #define LED4_ON() (PORTB |= (0x1<<7))
(0010) #define LED4_OFF() (PORTB &= ~(0x1<<7))
(0011) 
(0012) #define INIT_LED_Drv() (DDRB |= 0xf0)   //PORTB bit4-bit7 used to LED1-LED4
(0013) 
(0014) void TaskA(void);
(0015) #define TaskAPrio	 1                        //声明任务TaskA(void)的优先级。
(0016) OS_STK TaskAStk[MAX_STK_SIZE];   //声明任务TaskA(void)的堆栈空间。
(0017) void TaskB(void);
(0018) #define TaskBPrio	 2                        //声明任务TaskB(void)的优先级。
(0019) OS_STK TaskBStk[MAX_STK_SIZE];   //声明任务TaskB(void)的堆栈空间。
(0020) void TaskC(void);
(0021) #define TaskCPrio	 3                        //声明任务TaskC(void)的优先级。
(0022) OS_STK TaskCStk[MAX_STK_SIZE];   //声明任务TaskC(void)的堆栈空间。
(0023) 
(0024) void main(void)
(0025) {
(0026)     OSInitSP();
    0031 D1D0      RCALL	_OSInitSP
(0027) 	OSInit();               //初始化OS任务控制块(initialization OSTCB)。
    0032 D04E      RCALL	_OSInit
(0028) 	OSTaskCreate(TaskA,&TaskAStk[MAX_STK_SIZE],TaskAPrio); //建立任务TaskA(void)。
    0033 E081      LDI	R24,1
    0034 8388      STD	R24,0+Y
    0035 EF20      LDI	R18,0xF0
    0036 E030      LDI	R19,0
    0037 E10E      LDI	R16,0x1E
    0038 E010      LDI	R17,0
    0039 D133      RCALL	_OSTaskCreate
(0029) 	OSTaskCreate(TaskB,&TaskBStk[MAX_STK_SIZE],TaskBPrio); //建立任务TaskB(void)。
    003A E082      LDI	R24,2
    003B 8388      STD	R24,0+Y
    003C EC20      LDI	R18,0xC0
    003D E030      LDI	R19,0
    003E E10C      LDI	R16,0x1C
    003F E010      LDI	R17,0
    0040 D12C      RCALL	_OSTaskCreate
(0030) 	OSTaskCreate(TaskC,&TaskCStk[MAX_STK_SIZE],TaskCPrio); //建立任务TaskC(void)。
    0041 E083      LDI	R24,3
    0042 8388      STD	R24,0+Y
    0043 E920      LDI	R18,0x90
    0044 E030      LDI	R19,0
    0045 E10A      LDI	R16,0x1A
    0046 E010      LDI	R17,0
    0047 D125      RCALL	_OSTaskCreate
(0031) 
(0032) 	INIT_LED_Drv();
    0048 B387      IN	R24,P17
    0049 6F80      ORI	R24,0xF0
    004A BB87      OUT	P17,R24
(0033) 	
(0034) 	OSStart();                              //起动OS。
    004B D04A      RCALL	_OSStart
    004C C00D      RJMP	0x005A
(0035) 	
(0036) 	while (1)
(0037) 	{
(0038) 		LED1_ON();
    004D 9AC4      SBI	P18,4
(0039) 		OSTaskResume(TaskAPrio);	
    004E E001      LDI	R16,1
    004F D0EB      RCALL	_OSTaskResume
(0040) 		OSTaskSuspend(OS_TASK_Me);
    0050 9100013A  LDS	R16,_OS_TASK_CrtPrio
    0052 D0D6      RCALL	_OSTaskSuspend
(0041) 		OSTimeDly(1);
    0053 E001      LDI	R16,1
    0054 E010      LDI	R17,0
    0055 D0B1      RCALL	_OSTimeDly
(0042) 		LED1_OFF();	
    0056 98C4      CBI	P18,4
(0043) 		OSTimeDly(1);
    0057 E001      LDI	R16,1
    0058 E010      LDI	R17,0
    0059 D0AD      RCALL	_OSTimeDly
(0044) 	}
    005A CFF2      RJMP	0x004D
(0045) }
    005B 9621      ADIW	R28,1
    005C 9508      RET
(0046) 
(0047) void TaskA(void)
(0048) {
_TaskA:
    005D C00A      RJMP	0x0068
(0049) 	while (1)
(0050) 	{
(0051) 		OSTaskResume(Task_main_Prio);	
    005E 2700      CLR	R16
    005F D0DB      RCALL	_OSTaskResume
(0052) //		OSTaskSuspend(OS_TASK_Me);
(0053) 		LED2_ON();	
    0060 9AC5      SBI	P18,5
(0054) 		OSTimeDly(2);
    0061 E002      LDI	R16,2
    0062 E010      LDI	R17,0
    0063 D0A3      RCALL	_OSTimeDly
(0055) 		LED2_OFF();	
    0064 98C5      CBI	P18,5
(0056) 		OSTimeDly(2);
    0065 E002      LDI	R16,2
    0066 E010      LDI	R17,0
    0067 D09F      RCALL	_OSTimeDly
(0057) 	}
    0068 CFF5      RJMP	0x005E
(0058) }
    0069 9508      RET
(0059) 
(0060) void TaskB(void)
(0061) {
_TaskB:
    006A C008      RJMP	0x0073
(0062) 	while (1)
(0063) 	{
(0064) 		LED3_ON();	
    006B 9AC6      SBI	P18,6
(0065) 		OSTimeDly(3);
    006C E003      LDI	R16,3
    006D E010      LDI	R17,0
    006E D098      RCALL	_OSTimeDly
(0066) 		LED3_OFF();	
    006F 98C6      CBI	P18,6
(0067) 		OSTimeDly(3);
    0070 E003      LDI	R16,3
    0071 E010      LDI	R17,0
    0072 D094      RCALL	_OSTimeDly
(0068) 	}
    0073 CFF7      RJMP	0x006B
(0069) }
    0074 9508      RET
(0070) 
(0071) void TaskC(void)
(0072) {
_TaskC:
    0075 C008      RJMP	0x007E
(0073) 	while (1)
(0074) 	{
(0075) 		LED4_ON();	
    0076 9AC7      SBI	P18,7
(0076) 		OSTimeDly(5);
    0077 E005      LDI	R16,5
    0078 E010      LDI	R17,0
    0079 D08D      RCALL	_OSTimeDly
(0077) 		LED4_OFF();	
    007A 98C7      CBI	P18,7
(0078) 		OSTimeDly(5);
    007B E005      LDI	R16,5
    007C E010      LDI	R17,0
    007D D089      RCALL	_OSTimeDly
(0079) 	}
    007E CFF7      RJMP	0x0076
(0080) }
    007F 9508      RET
(0081) 
(0082) //hook function for user App --- 时钟节拍回掉函数
(0083) void AppTickHook()
(0084) {
(0085) }
_AppTickHook:
    0080 9508      RET
FILE: C:\icc\minOS_iccavr\OS_Core.c
(0000) /*
(0001) *********************************************************************************************************
(0002) *                                      minOS 0.01v
(0003) *                                The Real-Time OS Kernel
(0004) *                                  All Rights Reserved
(0005) * File : OS_Core.C
(0006) * 作者 : 21icbbs网友 LM7556 ,2004年7月   by : LM7556 , China , 2004-2004 
(0007) *
(0008) *********************************************************************************************************
(0009) */
(0010) 
(0011) 
(0012) #define  OS_GLOBALS                           /* Declare GLOBAL variables   */
(0013) #include "OS_Includes.h"
(0014) 
(0015) // initialization OSTCB --- 初始化任务控制块.
(0016) void OSInit(void) 
(0017) {	INT8U i;
(0018)     OS_TCB *pOS_TCB;
(0019) 	pOS_TCB=OSTCB;
_OSInit:
  i                    --> R16
  pOS_TCB              --> R18
    0081 E220      LDI	R18,0x20
    0082 E031      LDI	R19,1
(0020) 	for (i=0;i<OS_MAX_TASKS;i++,pOS_TCB++) 
    0083 2700      CLR	R16
    0084 C00E      RJMP	0x0093
(0021) 	{
(0022) 		pOS_TCB->OSStkTop=(INT16U)NULL;
    0085 2422      CLR	R2
    0086 2433      CLR	R3
    0087 2FE2      MOV	R30,R18
    0088 2FF3      MOV	R31,R19
    0089 8220      STD	R2,0+Z
    008A 8231      STD	R3,1+Z
(0023) 		pOS_TCB->OSTaskStatus=OS_TASK_Suspend;
    008B EF8D      LDI	R24,0xFD
    008C 8382      STD	R24,2+Z
(0024) 		pOS_TCB->OSTimeDly=0;
    008D 2422      CLR	R2
    008E 8223      STD	R2,3+Z
    008F 8234      STD	R3,4+Z
(0025) 	}
    0090 9503      INC	R16
    0091 5F2B      SUBI	R18,0xFB
    0092 4F3F      SBCI	R19,0xFF
    0093 3005      CPI	R16,5
    0094 F380      BCS	0x0085
(0026) }
    0095 9508      RET
(0027) 
(0028) //Start OS --- 启动OS
(0029) void OSStart(void) 
(0030) {
(0031) 	Init_OS_Timer();
_OSStart:
    0096 D0CD      RCALL	_InitOSTimer
(0032) 	OS_TASK_CrtPrio=Task_main_Prio;
    0097 2422      CLR	R2
    0098 9220013A  STS	R2,_OS_TASK_CrtPrio
(0033) 	OSTCB[OS_TASK_CrtPrio].OSTaskStatus=OS_TASK_Run;
    009A 2D22      MOV	R18,R2
    009B 2733      CLR	R19
    009C E005      LDI	R16,5
    009D E010      LDI	R17,0
    009E D17B      RCALL	mpy16s
    009F 2FE0      MOV	R30,R16
    00A0 2FF1      MOV	R31,R17
    00A1 E282      LDI	R24,0x22
    00A2 E091      LDI	R25,1
    00A3 0FE8      ADD	R30,R24
    00A4 1FF9      ADC	R31,R25
    00A5 EF8B      LDI	R24,0xFB
    00A6 8380      STD	R24,0+Z
(0034) 	OS_INT_ENABLE();
(0035) 	OS_TASK_INT();
    00A7 D10C      RCALL	_OSCtxSw
(0036) }
    00A8 9508      RET
_OSPrioHighRdy:
  i                    --> R16
  pOS_TCB              --> R18
    00A9 D1C9      RCALL	push_gset2
(0037) 
(0038) //返回优先级最高的处于就绪态任务的优先级,否则返回no_TASK_Rdy。
(0039) static INT8U OSPrioHighRdy(void) 
(0040) { INT8U i;
(0041)     OS_TCB *pOS_TCB;
(0042) 	pOS_TCB=OSTCB;
    00AA E220      LDI	R18,0x20
    00AB E031      LDI	R19,1
(0043) 	for (i=0;i<OS_MAX_TASKS;i++,pOS_TCB++) 
    00AC 2700      CLR	R16
    00AD C024      RJMP	0x00D2
(0044) 	{
(0045) 		if ((pOS_TCB->OSStkTop!=(INT8U)NULL) & (pOS_TCB->OSTaskStatus==OS_TASK_Rdy)) {return i;}
    00AE 2FE2      MOV	R30,R18
    00AF 2FF3      MOV	R31,R19
    00B0 8020      LDD	R2,0+Z
    00B1 8031      LDD	R3,1+Z
    00B2 2022      TST	R2
    00B3 F411      BNE	0x00B6
    00B4 2033      TST	R3
    00B5 F019      BEQ	0x00B9
    00B6 E061      LDI	R22,1
    00B7 E070      LDI	R23,0
    00B8 C002      RJMP	0x00BB
    00B9 2766      CLR	R22
    00BA 2777      CLR	R23
    00BB 2FE2      MOV	R30,R18
    00BC 2FF3      MOV	R31,R19
    00BD 8182      LDD	R24,2+Z
    00BE 3F8C      CPI	R24,0xFC
    00BF F419      BNE	0x00C3
    00C0 E041      LDI	R20,1
    00C1 E050      LDI	R21,0
    00C2 C002      RJMP	0x00C5
    00C3 2744      CLR	R20
    00C4 2755      CLR	R21
    00C5 2E26      MOV	R2,R22
    00C6 2E37      MOV	R3,R23
    00C7 2224      AND	R2,R20
    00C8 2235      AND	R3,R21
    00C9 2022      TST	R2
    00CA F411      BNE	0x00CD
    00CB 2033      TST	R3
    00CC F011      BEQ	0x00CF
    00CD 2711      CLR	R17
    00CE C007      RJMP	0x00D6
(0046) 	}
    00CF 9503      INC	R16
    00D0 5F2B      SUBI	R18,0xFB
    00D1 4F3F      SBCI	R19,0xFF
    00D2 3005      CPI	R16,5
    00D3 F2D0      BCS	0x00AE
(0047) 	return no_TASK_Rdy;
    00D4 EF0F      LDI	R16,0xFF
    00D5 E010      LDI	R17,0
    00D6 D19F      RCALL	pop_gset2
    00D7 9508      RET
_OSTimeTick:
  i                    --> R20
  pOS_TCB              --> R22
    00D8 D19A      RCALL	push_gset2
(0048) }
(0049) 
(0050) //Task OSTimeDly Decrease 1 per Time Tick --- 每个时钟节拍,任务等待延时的时间OSTimeDly减1.
(0051) //如果任务的OSTimeDly减到0,把任务设置为准备就绪OS_TASK_Rdy。
(0052) void OSTimeTick(void) 
(0053) { INT8U i;
(0054)     OS_TCB *pOS_TCB;
(0055) 	pOS_TCB=OSTCB;
    00D9 E260      LDI	R22,0x20
    00DA E071      LDI	R23,1
(0056) 	for (i=0;i<OS_MAX_TASKS;i++,pOS_TCB++) 
    00DB 2744      CLR	R20
    00DC C021      RJMP	0x00FE
(0057) 	{
(0058) 		if (pOS_TCB->OSTimeDly>OS_TASK_TimeOut) 
    00DD 2FE6      MOV	R30,R22
    00DE 2FF7      MOV	R31,R23
    00DF 8023      LDD	R2,3+Z
    00E0 8034      LDD	R3,4+Z
    00E1 2022      TST	R2
    00E2 F411      BNE	0x00E5
    00E3 2033      TST	R3
    00E4 F0B1      BEQ	0x00FB
(0059) 		{
(0060) 			if (--pOS_TCB->OSTimeDly==0) {pOS_TCB->OSTaskStatus=OS_TASK_Rdy;}
    00E5 2F86      MOV	R24,R22
    00E6 2F97      MOV	R25,R23
    00E7 9603      ADIW	R24,3
    00E8 2E28      MOV	R2,R24
    00E9 2E39      MOV	R3,R25
    00EA 2DE2      MOV	R30,R2
    00EB 2DF3      MOV	R31,R3
    00EC 8180      LDD	R24,0+Z
    00ED 8191      LDD	R25,1+Z
    00EE 9701      SBIW	R24,1
    00EF 2E48      MOV	R4,R24
    00F0 2E59      MOV	R5,R25
    00F1 8240      STD	R4,0+Z
    00F2 8251      STD	R5,1+Z
    00F3 2044      TST	R4
    00F4 F431      BNE	0x00FB
    00F5 2055      TST	R5
    00F6 F421      BNE	0x00FB
    00F7 EF8C      LDI	R24,0xFC
    00F8 2FE6      MOV	R30,R22
    00F9 2FF7      MOV	R31,R23
    00FA 8382      STD	R24,2+Z
(0061) 		}
(0062) 	}
    00FB 9543      INC	R20
    00FC 5F6B      SUBI	R22,0xFB
    00FD 4F7F      SBCI	R23,0xFF
    00FE 3045      CPI	R20,5
    00FF F2E8      BCS	0x00DD
(0063) 	OS_TASK_HighPri=OSPrioHighRdy();
    0100 DFA8      RCALL	_OSPrioHighRdy
    0101 2E20      MOV	R2,R16
    0102 2E31      MOV	R3,R17
    0103 92200139  STS	R2,_OS_TASK_HighPri
(0064) }
    0105 D170      RCALL	pop_gset2
    0106 9508      RET
_OSTimeDly:
  Tdly                 --> R20
    0107 D154      RCALL	push_gset1
    0108 2F40      MOV	R20,R16
    0109 2F51      MOV	R21,R17

⌨️ 快捷键说明

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