📄 sosos.lst
字号:
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 + -