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

📄 sosos.lst

📁 基于AVR平台的RTOS
💻 LST
📖 第 1 页 / 共 5 页
字号:
 939               	/* #APP */
 940               		POP R29 
 941               		
 942 03a2 D394      		POP R28 
 252:sosos.c       **** 
 253:sosos.c       ****  TCNT0=SYS_TIMER_VALUE;
 943               	 R22 
 944               		
 945 03a4 89ED      		POP R21 
 946 03a6 82BF      		
 254:sosos.c       ****  SOSOS_TICKS++;
 947               	 R20 
 948               		
 949 03a8 7394      		POP R19 
 255:sosos.c       **** 
 256:sosos.c       ****  ENABLE_INTERRUPT();
 950               	POP R18 
 951               		
 952               		POP R16 
 953 03aa 7894      		
 954               		OUT __SREG__,R16 
 257:sosos.c       ****  SososTimer0();
 955               	P R16 
 956               		
 957               		POP __tmp_reg__ 
 958 03ac 00D0      		
 258:sosos.c       **** 
 259:sosos.c       **** //离开中断
 260:sosos.c       ****  SOSOS_EXIT_INTERRUPT();
 959               	 __zero_reg__ 
 960               		
 961               		RETI 
 962 03ae F894      		
 963               	/* #NOAPP */
 964               	/* epilogue: frame size=0 */
 965 03b0 D110      	/* epilogue: naked */
 966 03b2 DA94      	/* epilogue end (size=0) */
 967               	/* function __vector_9 size 250 (250) */
 969 03b6 01F4      	.Lscope6:
 976               	.global	SososCreateTask
 978               	SososCreateTask:
 980 03c0 10FF      	.LM99:
 981 03c2 00C0      	/* prologue: frame size=8 */
 982 03c4 11FF      		push r16
 983 03c6 00D0      		push r28
 984               		push r29
 985               		in r28,__SP_L__
 986 03c8 DF91      		in r29,__SP_H__
 987               		sbiw r28,8
 988 03ca CF91      		in __tmp_reg__,__SREG__
 989               		cli
 990 03cc FF91      		out __SP_H__,r29
 991               		out __SREG__,__tmp_reg__
 992 03ce EF91      		out __SP_L__,r28
 993               	/* prologue end (size=11) */
 994 03d0 BF91      		std Y+2,r25
 995               		std Y+1,r24
 996 03d2 AF91      		std Y+8,r19
 997               		std Y+7,r18
 998 03d4 9F91      		std Y+4,r17
 999               		std Y+3,r16
 1001               	.LM100:
 1002 03d8 7F91      		cpi r22,lo8(3)
 1003               		brlo .L84
 1005               	.LM101:
 1006 03dc 5F91      		ldi r24,lo8(255)
 1007               		ldi r25,hi8(255)
 1008 03de 4F91      		rjmp .L86
 1009               	.L84:
 1011               	.LM102:
 1012 03e2 2F91      		cpi r20,lo8(2)
 1013               		brlo .L87
 1014 03e4 0F91      		ldi r24,lo8(254)
 1015               		ldi r25,hi8(254)
 1016 03e6 0FBF      		rjmp .L86
 1017               	.L87:
 1019               	.LM103:
 1020 03ea 0F90      		cpi r22,lo8(2)
 1021               		brne .L89
 1022 03ec 1F90      		cpi r20,lo8(1)
 1023               		brne .L89
 1024 03ee 1895      		ldd r18,Y+1
 1025               		ldd r19,Y+2
 1026               		subi r18,lo8(gs(SososIdleTask))
 1027               		sbci r19,hi8(gs(SososIdleTask))
 1028               		breq .+2
 1029               		rjmp .L92
 1030               	.L89:
 1032               	.LM104:
 1033               		clr r23
 1034               		clr r21
 1035               		movw r24,r22
 1036               		lsl r24
 1037               		rol r25
 1038               		add r24,r20
 1039               		adc r25,r21
 1040               		movw r18,r24
 1041               		ldi r21,3
 261:sosos.c       **** }
 262:sosos.c       **** #endif
 263:sosos.c       **** 
 264:sosos.c       **** #if SOSOS_TASK_ENALBE == 1
 265:sosos.c       **** void SososIdleTask(void *ptr)//系统空闲任务
 266:sosos.c       **** //本任务运行在定义的最低优先级的最后一个ID上
 267:sosos.c       **** //系统提供的定时器部件,是在本任务中处理的,处理时中断时关闭的
 268:sosos.c       **** //不允许任何挂起本任务的操作
 269:sosos.c       **** //提供一个名为SososIdleHook()的钩子函数,允许用户,在其中添加一些顺序执行的语句序列,不能有死循环
 270:sosos.c       **** {
 271:sosos.c       ****  DISABLE_INTERRUPT();
 272:sosos.c       ****  if(test_0(SOSOS_STATE,STATE_SCHED_RUN)&&(SOSOS_INT_NEST==0))
 273:sosos.c       ****  SososScheder();//任务调度器
 274:sosos.c       ****  ENABLE_INTERRUPT();
 275:sosos.c       ****  while(1){
 276:sosos.c       **** //计时处理
 277:sosos.c       ****    unsigned char i;
 278:sosos.c       **** 
 279:sosos.c       **** #if SOSOS_WDT_ENABLE == 1
 280:sosos.c       **** //看门狗
 281:sosos.c       ****  SOSOS_WDT_RST();//复位看门狗
 282:sosos.c       **** #endif
 283:sosos.c       **** //定时器部件
 284:sosos.c       ****    DISABLE_INTERRUPT();
 285:sosos.c       ****    if(SOSOS_TICKS>0){
 286:sosos.c       **** #if SOSOS_TIMER_ENABLE == 1
 287:sosos.c       ****      for(i=0;i<SOSOS_TIMER_NO;i++){
 288:sosos.c       ****        if(SOSOS_TIMER[i]>SOSOS_TICKS){
 289:sosos.c       ****          SOSOS_TIMER[i]-=SOSOS_TICKS;
 290:sosos.c       ****          }
 291:sosos.c       ****        else{
 292:sosos.c       ****          SOSOS_TIMER[i]=0;
 293:sosos.c       ****          }
 294:sosos.c       ****        }
 295:sosos.c       **** #endif
 296:sosos.c       ****      SOSOS_TICKS=0;
 297:sosos.c       ****      }
 298:sosos.c       ****    ENABLE_INTERRUPT();
 299:sosos.c       **** 
 300:sosos.c       ****    SososIdleHook();
 301:sosos.c       ****    }
 302:sosos.c       ****  }
 303:sosos.c       **** #endif
 304:sosos.c       **** 
 305:sosos.c       **** #if SOSOS_TASK_ENALBE == 1
 306:sosos.c       **** unsigned char SososCreateTask(void (*task)(void *),unsigned char pri,unsigned char id,unsigned int 
 307:sosos.c       **** //本函数用于创建任务
 308:sosos.c       **** //task:任务函数
 309:sosos.c       **** //pri:优先级
 310:sosos.c       **** //id:任务在本优先级的表示号
 311:sosos.c       **** //stack_size:堆栈的字节大小
 312:sosos.c       **** //ptr:传递给任务的一个数据指针
 313:sosos.c       **** {
 1042               		adc r27,r19
 1043               		subi r26,lo8(-(TCB))
 1044               		sbci r27,hi8(-(TCB))
 1045 03f0 0F93      		ld r24,X+
 1046 03f2 CF93      		ld r25,X
 1047 03f4 DF93      		sbiw r26,1
 1048 03f6 CDB7      		or r24,r25
 1049 03f8 DEB7      		breq .+2
 1050 03fa 2897      		rjmp .L92
 1052 03fe F894      	.LM105:
 1053 0400 DEBF      		lds r18,SOSOS_TASK_STACK_TOP
 1054 0402 0FBE      		lds r19,(SOSOS_TASK_STACK_TOP)+1
 1055 0404 CDBF      		ldd r24,Y+7
 1056               		ldd r25,Y+8
 1057 0406 9A83      		subi r24,lo8(-(SOSOS_TASK_STACK-1))
 1058 0408 8983      		sbci r25,hi8(-(SOSOS_TASK_STACK-1))
 1059 040a 3887      		cp r18,r24
 1060 040c 2F83      		cpc r19,r25
 1061 040e 1C83      		brsh .L94
 1062 0410 0B83      		ldi r24,lo8(252)
 314:sosos.c       ****  unsigned char *stack;
 315:sosos.c       **** #if ERROR_DETECT_ENABLE == 1
 316:sosos.c       ****  if(pri>=SOSOS_PRI_MAX)
 1063               	mp .L86
 1064               	.L94:
 1066 0414 00F0      	.LM106:
 1067               	/* #APP */
 1068               		CLI 
 1069 0416 8FEF      		
 1071 041a 00C0      	.LM107:
 1072               	/* #NOAPP */
 317:sosos.c       ****    return SOSOS_PRI_LIMITED;
 318:sosos.c       ****  if(id>=SOSOS_MAX_TASK_PER_PRI)
 1073               	r26
 1074               		std Z+3,r19
 1075 041c 4230      		std Z+2,r18
 1077 0420 8EEF      	.LM108:
 1078 0422 90E0      		ldd r24,Y+7
 1079 0424 00C0      		ldd r25,Y+8
 1080               		std Z+5,r25
 319:sosos.c       ****    return SOSOS_ID_LIMITED;
 320:sosos.c       ****  if((pri==SOSOS_PRI_MAX-1)&&(id==SOSOS_MAX_TASK_PER_PRI-1)&&(task!=SososIdleTask))
 1081               	,r24
 1083 0426 6230      	.LM109:
 1084 0428 01F4      		movw r24,r18
 1085 042a 4130      		ldd r30,Y+7
 1086 042c 01F4      		ldd r31,Y+8
 1087 042e 2981      		sub r24,r30
 1088 0430 3A81      		sbc r25,r31
 1089 0432 2050      		sts (SOSOS_TASK_STACK_TOP)+1,r25
 1090 0434 3040      		sts SOSOS_TASK_STACK_TOP,r24
 1092 0438 00C0      	.LM110:
 1093               		ldd r24,Y+1
 321:sosos.c       ****    return SOSOS_TASK_EXIST;
 322:sosos.c       ****  if(TCB[pri*SOSOS_MAX_TASK_PER_PRI+id].TASK_STACK_POINT!=0)
 1094               	
 1095               		st Z,r24
 1096 043a 7727      		subi r18,lo8(-(-1))
 1097 043c 5527      		sbci r19,hi8(-(-1))
 1098 043e CB01      		std Y+6,r19
 1099 0440 880F      		std Y+5,r18
 1101 0444 840F      	.LM111:
 1102 0446 951F      		ldd r30,Y+1
 1103 0448 9C01      		ldd r31,Y+2
 1104 044a 53E0      		mov r24,r31
 1105 044c 220F      		clr r25
 1106 044e 331F      		movw r30,r18
 1107 0450 5A95      		st Z,r24
 1108 0452 01F4      		ldd r30,Y+5
 1109 0454 DC01      		ldd r31,Y+6
 1110 0456 AA0F      		sbiw r30,1
 1112 045a A20F      	.LM112:
 1113 045c B31F      		st Z,__zero_reg__
 1114 045e A050      		sbiw r30,1
 1116 0462 8D91      	.LM113:
 1117 0464 9C91      		st Z,__zero_reg__
 1118 0466 1197      		sbiw r30,1
 1120 046a 01F0      	.LM114:
 1121 046c 00C0      		ldi r24,lo8(16)
 323:sosos.c       ****    return SOSOS_TASK_EXIST;
 324:sosos.c       ****  if(SOSOS_TASK_STACK_TOP<((SOSOS_ADDRESS)SOSOS_TASK_STACK+(SOSOS_ADDRESS)stack_size-1))
 1122               	bn	68,0,342,.LM115-SososCreateTask
 1123               	.LM115:
 1124 046e 2091 0000 		ldi r24,lo8(-128)
 1125 0472 3091 0000 		st Z,r24
 1126 0476 8F81      		sbiw r30,1
 1128 047a 8050      	.LM116:
 1129 047c 9040      		ldi r24,lo8(18)
 1130 047e 2817      		st Z,r24
 1131 0480 3907      		sbiw r30,1
 1133 0484 8CEF      	.LM117:
 1134 0486 90E0      		ldi r24,lo8(19)
 1135 0488 00C0      		st Z,r24
 1136               		sbiw r30,1
 325:sosos.c       ****    return SOSOS_TASK_STACK_LIMITED;
 326:sosos.c       **** #endif
 327:sosos.c       **** //设置堆栈指针
 328:sosos.c       ****  DISABLE_INTERRUPT();
 1137               	5,.LM118-SososCreateTask
 1138               	.LM118:
 1139               		ldi r24,lo8(20)
 1140 048a F894      		st Z,r24
 1141               		sbiw r30,1
 329:sosos.c       ****  stack=(unsigned char *)SOSOS_TASK_STACK_TOP;
 330:sosos.c       **** #if STACK_SIZE_REPORT_ENABLE == 1
 331:sosos.c       ****  TCB[pri*SOSOS_MAX_TASK_PER_PRI+id].TASK_STACK_BUTTON=SOSOS_TASK_STACK_TOP;
 1142               	bn	68,0,346,.LM119-SososCreateTask
 1143               	.LM119:
 1144               		ldi r24,lo8(21)
 1145 048c FD01      		st Z,r24
 1146 048e 3383      		sbiw r30,1
 332:sosos.c       ****  TCB[pri*SOSOS_MAX_TASK_PER_PRI+id].TASK_STACK_SIZE=stack_size;
 1148               	:
 1149               		ldi r24,lo8(22)
 1150 0492 8F81      		st Z,r24
 1151 0494 9885      		sbiw r30,1
 1153 0498 8483      	.LM121:
 333:sosos.c       **** #endif
 334:sosos.c       ****  SOSOS_TASK_STACK_TOP-=stack_size;
 1154               	24,lo8(23)
 1155               		st Z,r24
 1156 049a C901      		movw r18,r30
 1157 049c EF81      		subi r18,lo8(-(-1))
 1158 049e F885      		sbci r19,hi8(-(-1))
 1160 04a2 9F0B      	.LM122:
 1161 04a4 9093 0000 		ldd r24,Y+3
 1162 04a8 8093 0000 		movw r30,r18
 335:sosos.c       **** //任务地址入栈
 336:sosos.c       ****  *stack--=(SOSOS_ADDRESS)task;
 1163               	
 1164               		subi r18,lo8(-(-1))
 1165 04ac 8981      		sbci r19,hi8(-(-1))
 1166 04ae F901      		std Y+6,r19
 1167 04b0 8083      		std Y+5,r18
 1169 04b4 3040      	.LM123:
 1170 04b6 3E83      		ldd r30,Y+3
 1171 04b8 2D83      		ldd r31,Y+4
 337:sosos.c       ****  *stack--=(SOSOS_ADDRESS)task>>8; 
 1172               	,r31
 1173               		clr r25
 1174 04ba E981      		movw r30,r18
 1175 04bc FA81      		st Z,r24
 1176 04be 8F2F      		ldd r30,Y+5
 1177 04c0 9927      		ldd r31,Y+6
 1178 04c2 F901      		sbiw r30,1
 1180 04c6 ED81      	.LM124:
 1181 04c8 FE81      		ldi r24,lo8(26)
 1182 04ca 3197      		st Z,r24
 338:sosos.c       **** //寄存器入栈
 339:sosos.c       ****  *stack--=0;//R1 zero register
 1183               	
 1185 04cc 1082      	.LM125:
 1186 04ce 3197      		ldi r24,lo8(27)
 340:sosos.c       ****  *stack--=0;//R0 temp register
 1187               	 Z,r24
 1188               		sbiw r30,1
 1190 04d2 3197      	.LM126:
 341:sosos.c       ****  *stack--=0x10;//R16
 1191               	 r24,lo8(30)
 1192               		st Z,r24
 1193 04d4 80E1      		sbiw r30,1
 1195 04d8 3197      	.LM127:
 342:sosos.c       ****  *stack--=0x80;//SREG 开启全局中断
 1196               	r24,lo8(31)
 1197               		st Z,r24
 1198 04da 80E8      		sbiw r30,1
 1200 04de 3197      	.LM128:
 343:sosos.c       ****  *stack--=0x12;//R18
 1201               	r24,lo8(28)
 1202               		st Z,r24
 1203 04e0 82E1      		sbiw r30,1
 1205 04e4 3197      	.LM129:
 344:sosos.c       ****  *stack--=0x13;//R19
 1206               	r24,lo8(29)
 1207               		st Z,r24
 1209 04e8 8083      	.LM130:
 1210 04ea 3197      		sbiw r30,1
 345:sosos.c       ****  *stack--=0x14;//R20
 1211               	 r26,1
 1212               		st X,r31
 1213 04ec 84E1      		st -X,r30

⌨️ 快捷键说明

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