os_time.txt
28.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
; generated by Component: ARM Compiler 5.06 update 6 (build 750) Tool: ArmCC [4d3637]
; commandline ArmCC [--c99 --list --split_sections --debug -c --asm --interleave -o.\flash\obj\os_time.o --asm_dir=.\Flash\List\ --list_dir=.\Flash\List\ --depend=.\flash\obj\os_time.d --cpu=Cortex-M4.fp --apcs=interwork -O1 --diag_suppress=9931,870 -I..\..\Libraries\CMSIS\Include -I..\..\Libraries\CMSIS\Device\ST\STM32F4xx\Include -I..\..\Libraries\STM32F4xx_StdPeriph_Driver\inc -I..\..\uCOS-III\uC-CPU -I..\..\uCOS-III\uC-LIB -I..\..\uCOS-III\uCOS-III\Ports -I..\..\uCOS-III\uCOS-III\Source -I..\..\uCOS-III\uC-CPU\ARM-Cortex-M4\RealView -I..\..\uCOS-III\uC-LIB\Ports\ARM-Cortex-M4\RealView -I..\..\uCOS-III\uCOS-III\Ports\ARM-Cortex-M4\Generic\RealView -I..\..\User -I..\..\User\bsp -I..\..\User\bsp\inc -I..\..\User\libapp -I..\..\RL-ARM\Config -I..\..\RL-ARM\Driver -I..\..\RL-ARM\RL-RTX\inc -I..\..\User\bsp\BSP -I..\..\RL-ARM\RL-CAN -I..\..\Libraries\DSP_LIB\Include -I..\..\MODBUS\modbus\rtu -I..\..\MODBUS\BARE\port -I..\..\MODBUS\modbus\include -I..\..\User\bsp\BSP -I..\..\PLC -I..\..\Avoid -I..\..\User\parameter -I..\..\User\LaserMotionCtr -I..\..\User\W5100S -I..\..\User\bsp -I..\..\User\CHASSIS -I..\..\User\CONTROLFUNCTION -I..\..\User\DATAUPDATE -I..\..\User\HARAWARE -I..\..\User\MOTORDRIVER -I..\..\User\NAVAGATION -I..\..\User\PLATFORM -I..\..\User\SENSOR -I.\RTE\_Flash -IC:\Users\YDJ\AppData\Local\Arm\Packs\ARM\CMSIS\5.5.1\CMSIS\Core\Include -IC:\Users\YDJ\AppData\Local\Arm\Packs\Keil\STM32F4xx_DFP\2.13.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include -D__UVISION_VERSION=527 -D_RTE_ -DSTM32F407xx -DUSE_STDPERIPH_DRIVER -DSTM32F40_41xxx -D__RTX -D__FPU_USED=1 --omf_browse=.\flash\obj\os_time.crf ..\..\uCOS-III\uCOS-III\Source\os_time.c]
THUMB
AREA ||i.OSTimeDly||, CODE, READONLY, ALIGN=2
OSTimeDly PROC
;;;79
;;;80 void OSTimeDly (OS_TICK dly,
000000 e92d41f0 PUSH {r4-r8,lr}
;;;81 OS_OPT opt,
;;;82 OS_ERR *p_err)
;;;83 {
000004 4607 MOV r7,r0
000006 460d MOV r5,r1
000008 4614 MOV r4,r2
;;;84 CPU_SR_ALLOC();
;;;85
;;;86
;;;87
;;;88 #ifdef OS_SAFETY_CRITICAL
;;;89 if (p_err == (OS_ERR *)0) {
;;;90 OS_SAFETY_CRITICAL_EXCEPTION();
;;;91 return;
;;;92 }
;;;93 #endif
;;;94
;;;95 #if OS_CFG_CALLED_FROM_ISR_CHK_EN > 0u
;;;96 if (OSIntNestingCtr > (OS_NESTING_CTR)0u) { /* Not allowed to call from an ISR */
;;;97 *p_err = OS_ERR_TIME_DLY_ISR;
;;;98 return;
;;;99 }
;;;100 #endif
;;;101
;;;102 if (OSSchedLockNestingCtr > (OS_NESTING_CTR)0u) { /* Can't delay when the scheduler is locked */
00000a 481c LDR r0,|L1.124|
00000c 7800 LDRB r0,[r0,#0] ; OSSchedLockNestingCtr
00000e 2800 CMP r0,#0
000010 d004 BEQ |L1.28|
;;;103 *p_err = OS_ERR_SCHED_LOCKED;
000012 f6465063 MOV r0,#0x6d63
000016 8020 STRH r0,[r4,#0]
|L1.24|
;;;104 return;
;;;105 }
;;;106
;;;107 switch (opt) {
;;;108 case OS_OPT_TIME_DLY:
;;;109 case OS_OPT_TIME_TIMEOUT:
;;;110 case OS_OPT_TIME_PERIODIC:
;;;111 if (dly == (OS_TICK)0u) { /* 0 means no delay! */
;;;112 *p_err = OS_ERR_TIME_ZERO_DLY;
;;;113 return;
;;;114 }
;;;115 break;
;;;116
;;;117 case OS_OPT_TIME_MATCH:
;;;118 break;
;;;119
;;;120 default:
;;;121 *p_err = OS_ERR_OPT_INVALID;
;;;122 return;
;;;123 }
;;;124
;;;125 OS_CRITICAL_ENTER();
;;;126 OSTCBCurPtr->TaskState = OS_TASK_STATE_DLY;
;;;127 OS_TickListInsert(OSTCBCurPtr,
;;;128 dly,
;;;129 opt,
;;;130 p_err);
;;;131 if (*p_err != OS_ERR_NONE) {
;;;132 OS_CRITICAL_EXIT_NO_SCHED();
;;;133 return;
;;;134 }
;;;135 OS_RdyListRemove(OSTCBCurPtr); /* Remove current task from ready list */
;;;136 OS_CRITICAL_EXIT_NO_SCHED();
;;;137 OSSched(); /* Find next task to run! */
;;;138 *p_err = OS_ERR_NONE;
;;;139 }
000018 e8bd81f0 POP {r4-r8,pc}
|L1.28|
00001c b14d CBZ r5,|L1.50|
00001e 2d02 CMP r5,#2 ;107
000020 d007 BEQ |L1.50|
000022 2d04 CMP r5,#4 ;107
000024 d006 BEQ |L1.52|
000026 2d08 CMP r5,#8 ;107
000028 d003 BEQ |L1.50|
00002a f6456025 MOV r0,#0x5e25 ;121
00002e 8020 STRH r0,[r4,#0] ;121
000030 e7f2 B |L1.24|
|L1.50|
000032 b19f CBZ r7,|L1.92|
|L1.52|
000034 f7fffffe BL CPU_SR_Save
000038 4680 MOV r8,r0 ;125
00003a 4e11 LDR r6,|L1.128|
00003c 2101 MOVS r1,#1 ;126
00003e 6830 LDR r0,[r6,#0] ;126 ; OSTCBCurPtr
000040 f8801036 STRB r1,[r0,#0x36] ;126
000044 4623 MOV r3,r4 ;127
000046 462a MOV r2,r5 ;127
000048 4639 MOV r1,r7 ;127
00004a f7fffffe BL OS_TickListInsert
00004e 8820 LDRH r0,[r4,#0] ;131
000050 b140 CBZ r0,|L1.100|
000052 4640 MOV r0,r8 ;132
000054 e8bd41f0 POP {r4-r8,lr} ;132
000058 f7ffbffe B.W CPU_SR_Restore
|L1.92|
00005c f247207e MOV r0,#0x727e ;112
000060 8020 STRH r0,[r4,#0] ;112
000062 e7d9 B |L1.24|
|L1.100|
000064 6830 LDR r0,[r6,#0] ;135 ; OSTCBCurPtr
000066 f7fffffe BL OS_RdyListRemove
00006a 4640 MOV r0,r8 ;136
00006c f7fffffe BL CPU_SR_Restore
000070 f7fffffe BL OSSched
000074 2000 MOVS r0,#0 ;138
000076 8020 STRH r0,[r4,#0] ;138
000078 e7ce B |L1.24|
;;;140
ENDP
00007a 0000 DCW 0x0000
|L1.124|
DCD OSSchedLockNestingCtr
|L1.128|
DCD OSTCBCurPtr
AREA ||i.OSTimeDlyHMSM||, CODE, READONLY, ALIGN=2
OSTimeDlyHMSM PROC
;;;199 #if OS_CFG_TIME_DLY_HMSM_EN > 0u
;;;200 void OSTimeDlyHMSM (CPU_INT16U hours,
000000 e92d41f0 PUSH {r4-r8,lr}
;;;201 CPU_INT16U minutes,
;;;202 CPU_INT16U seconds,
;;;203 CPU_INT32U milli,
;;;204 OS_OPT opt,
;;;205 OS_ERR *p_err)
;;;206 {
000004 461e MOV r6,r3
000006 e9dd3406 LDRD r3,r4,[sp,#0x18]
;;;207 #if OS_CFG_ARG_CHK_EN > 0u
;;;208 CPU_BOOLEAN opt_invalid;
;;;209 CPU_BOOLEAN opt_non_strict;
;;;210 #endif
;;;211 OS_OPT opt_time;
;;;212 OS_RATE_HZ tick_rate;
;;;213 OS_TICK ticks;
;;;214 CPU_SR_ALLOC();
;;;215
;;;216
;;;217
;;;218 #ifdef OS_SAFETY_CRITICAL
;;;219 if (p_err == (OS_ERR *)0) {
;;;220 OS_SAFETY_CRITICAL_EXCEPTION();
;;;221 return;
;;;222 }
;;;223 #endif
;;;224
;;;225 #if OS_CFG_CALLED_FROM_ISR_CHK_EN > 0u
;;;226 if (OSIntNestingCtr > (OS_NESTING_CTR)0u) { /* Not allowed to call from an ISR */
;;;227 *p_err = OS_ERR_TIME_DLY_ISR;
;;;228 return;
;;;229 }
;;;230 #endif
;;;231
;;;232 if (OSSchedLockNestingCtr > (OS_NESTING_CTR)0u) { /* Can't delay when the scheduler is locked */
00000a 4d2b LDR r5,|L2.184|
00000c 782d LDRB r5,[r5,#0] ; OSSchedLockNestingCtr
00000e 2d00 CMP r5,#0
000010 d004 BEQ |L2.28|
;;;233 *p_err = OS_ERR_SCHED_LOCKED;
000012 f6465063 MOV r0,#0x6d63
000016 8020 STRH r0,[r4,#0]
|L2.24|
;;;234 return;
;;;235 }
;;;236
;;;237 opt_time = opt & OS_OPT_TIME_MASK; /* Retrieve time options only. */
;;;238 switch (opt_time) {
;;;239 case OS_OPT_TIME_DLY:
;;;240 case OS_OPT_TIME_TIMEOUT:
;;;241 case OS_OPT_TIME_PERIODIC:
;;;242 if (milli == (CPU_INT32U)0u) { /* Make sure we didn't specify a 0 delay */
;;;243 if (seconds == (CPU_INT16U)0u) {
;;;244 if (minutes == (CPU_INT16U)0u) {
;;;245 if (hours == (CPU_INT16U)0u) {
;;;246 *p_err = OS_ERR_TIME_ZERO_DLY;
;;;247 return;
;;;248 }
;;;249 }
;;;250 }
;;;251 }
;;;252 break;
;;;253
;;;254 case OS_OPT_TIME_MATCH:
;;;255 break;
;;;256
;;;257 default:
;;;258 *p_err = OS_ERR_OPT_INVALID;
;;;259 return;
;;;260 }
;;;261
;;;262 #if OS_CFG_ARG_CHK_EN > 0u /* Validate arguments to be within range */
;;;263 opt_invalid = DEF_BIT_IS_SET_ANY(opt, ~OS_OPT_TIME_OPTS_MASK);
;;;264 if (opt_invalid == DEF_YES) {
;;;265 *p_err = OS_ERR_OPT_INVALID;
;;;266 return;
;;;267 }
;;;268
;;;269 opt_non_strict = DEF_BIT_IS_SET(opt, OS_OPT_TIME_HMSM_NON_STRICT);
;;;270 if (opt_non_strict != DEF_YES) {
;;;271 if (milli > (CPU_INT32U)999u) {
;;;272 *p_err = OS_ERR_TIME_INVALID_MILLISECONDS;
;;;273 return;
;;;274 }
;;;275 if (seconds > (CPU_INT16U)59u) {
;;;276 *p_err = OS_ERR_TIME_INVALID_SECONDS;
;;;277 return;
;;;278 }
;;;279 if (minutes > (CPU_INT16U)59u) {
;;;280 *p_err = OS_ERR_TIME_INVALID_MINUTES;
;;;281 return;
;;;282 }
;;;283 if (hours > (CPU_INT16U)99u) {
;;;284 *p_err = OS_ERR_TIME_INVALID_HOURS;
;;;285 return;
;;;286 }
;;;287 } else {
;;;288 if (minutes > (CPU_INT16U)9999u) {
;;;289 *p_err = OS_ERR_TIME_INVALID_MINUTES;
;;;290 return;
;;;291 }
;;;292 if (hours > (CPU_INT16U)999u) {
;;;293 *p_err = OS_ERR_TIME_INVALID_HOURS;
;;;294 return;
;;;295 }
;;;296 }
;;;297 #endif
;;;298
;;;299 /* Compute the total number of clock ticks required.. */
;;;300 /* .. (rounded to the nearest tick) */
;;;301 tick_rate = OSCfg_TickRate_Hz;
;;;302 ticks = ((OS_TICK)hours * (OS_TICK)3600u + (OS_TICK)minutes * (OS_TICK)60u + (OS_TICK)seconds) * tick_rate
;;;303 + (tick_rate * ((OS_TICK)milli + (OS_TICK)500u / tick_rate)) / (OS_TICK)1000u;
;;;304
;;;305 if (ticks > (OS_TICK)0u) {
;;;306 OS_CRITICAL_ENTER();
;;;307 OSTCBCurPtr->TaskState = OS_TASK_STATE_DLY;
;;;308 OS_TickListInsert(OSTCBCurPtr,
;;;309 ticks,
;;;310 opt_time,
;;;311 p_err);
;;;312 if (*p_err != OS_ERR_NONE) {
;;;313 OS_CRITICAL_EXIT_NO_SCHED();
;;;314 return;
;;;315 }
;;;316 OS_RdyListRemove(OSTCBCurPtr); /* Remove current task from ready list */
;;;317 OS_CRITICAL_EXIT_NO_SCHED();
;;;318 OSSched(); /* Find next task to run! */
;;;319 *p_err = OS_ERR_NONE;
;;;320 } else {
;;;321 *p_err = OS_ERR_TIME_ZERO_DLY;
;;;322 }
;;;323 }
000018 e8bd81f0 POP {r4-r8,pc}
|L2.28|
00001c f003050e AND r5,r3,#0xe ;237
000020 f247277e MOV r7,#0x727e ;246
000024 b14d CBZ r5,|L2.58|
000026 2d02 CMP r5,#2 ;238
000028 d007 BEQ |L2.58|
00002a 2d04 CMP r5,#4 ;238
00002c d009 BEQ |L2.66|
00002e 2d08 CMP r5,#8 ;238
000030 d003 BEQ |L2.58|
000032 f6456025 MOV r0,#0x5e25 ;258
000036 8020 STRH r0,[r4,#0] ;258
000038 e7ee B |L2.24|
|L2.58|
00003a b916 CBNZ r6,|L2.66|
00003c b90a CBNZ r2,|L2.66|
00003e b901 CBNZ r1,|L2.66|
000040 b358 CBZ r0,|L2.154|
|L2.66|
000042 4b1e LDR r3,|L2.188|
000044 681b LDR r3,[r3,#0] ;301 ; OSCfg_TickRate_Hz
000046 f44f7cfa MOV r12,#0x1f4 ;302
00004a fbbcfcf3 UDIV r12,r12,r3 ;302
00004e 4466 ADD r6,r6,r12 ;302
000050 435e MULS r6,r3,r6 ;302
000052 f44f7c7a MOV r12,#0x3e8 ;302
000056 fbb6f6fc UDIV r6,r6,r12 ;302
00005a f44f6c61 MOV r12,#0xe10 ;302
00005e fb00f00c MUL r0,r0,r12 ;302
000062 ebc11101 RSB r1,r1,r1,LSL #4 ;302
000066 eb000081 ADD r0,r0,r1,LSL #2 ;302
00006a 4410 ADD r0,r0,r2 ;302
00006c fb006603 MLA r6,r0,r3,r6 ;302
000070 b306 CBZ r6,|L2.180|
000072 f7fffffe BL CPU_SR_Save
000076 4680 MOV r8,r0 ;306
000078 4f11 LDR r7,|L2.192|
00007a 2101 MOVS r1,#1 ;307
00007c 6838 LDR r0,[r7,#0] ;307 ; OSTCBCurPtr
00007e f8801036 STRB r1,[r0,#0x36] ;307
000082 4623 MOV r3,r4 ;308
000084 462a MOV r2,r5 ;308
000086 4631 MOV r1,r6 ;308
000088 f7fffffe BL OS_TickListInsert
00008c 8820 LDRH r0,[r4,#0] ;312
00008e b130 CBZ r0,|L2.158|
000090 4640 MOV r0,r8 ;313
000092 e8bd41f0 POP {r4-r8,lr} ;313
000096 f7ffbffe B.W CPU_SR_Restore
|L2.154|
00009a 8027 STRH r7,[r4,#0] ;246
00009c e7bc B |L2.24|
|L2.158|
00009e 6838 LDR r0,[r7,#0] ;316 ; OSTCBCurPtr
0000a0 f7fffffe BL OS_RdyListRemove
0000a4 4640 MOV r0,r8 ;317
0000a6 f7fffffe BL CPU_SR_Restore
0000aa f7fffffe BL OSSched
0000ae 2000 MOVS r0,#0 ;319
0000b0 8020 STRH r0,[r4,#0] ;319
0000b2 e7b1 B |L2.24|
|L2.180|
0000b4 8027 STRH r7,[r4,#0] ;321
0000b6 e7af B |L2.24|
;;;324 #endif
ENDP
|L2.184|
DCD OSSchedLockNestingCtr
|L2.188|
DCD OSCfg_TickRate_Hz
|L2.192|
DCD OSTCBCurPtr
AREA ||i.OSTimeDlyResume||, CODE, READONLY, ALIGN=2
OSTimeDlyResume PROC
;;;348 #if OS_CFG_TIME_DLY_RESUME_EN > 0u
;;;349 void OSTimeDlyResume (OS_TCB *p_tcb,
000000 e92d41f0 PUSH {r4-r8,lr}
;;;350 OS_ERR *p_err)
;;;351 {
000004 4606 MOV r6,r0
000006 460c MOV r4,r1
;;;352 CPU_SR_ALLOC();
;;;353
;;;354
;;;355
;;;356 #ifdef OS_SAFETY_CRITICAL
;;;357 if (p_err == (OS_ERR *)0) {
;;;358 OS_SAFETY_CRITICAL_EXCEPTION();
;;;359 return;
;;;360 }
;;;361 #endif
;;;362
;;;363 #if OS_CFG_CALLED_FROM_ISR_CHK_EN > 0u
;;;364 if (OSIntNestingCtr > (OS_NESTING_CTR)0u) { /* Not allowed to call from an ISR */
;;;365 *p_err = OS_ERR_TIME_DLY_RESUME_ISR;
;;;366 return;
;;;367 }
;;;368 #endif
;;;369
;;;370 #if OS_CFG_ARG_CHK_EN > 0u
;;;371 if (p_tcb == (OS_TCB *)0) { /* Not possible for the running task to be delayed! */
;;;372 *p_err = OS_ERR_TASK_NOT_DLY;
;;;373 return;
;;;374 }
;;;375 #endif
;;;376
;;;377 CPU_CRITICAL_ENTER();
000008 f7fffffe BL CPU_SR_Save
00000c 4607 MOV r7,r0
;;;378 if (p_tcb == OSTCBCurPtr) { /* Not possible for the running task to be delayed! */
00000e 482c LDR r0,|L3.192|
;;;379 *p_err = OS_ERR_TASK_NOT_DLY;
000010 f2471551 MOV r5,#0x7151
000014 6800 LDR r0,[r0,#0] ;378 ; OSTCBCurPtr
000016 4286 CMP r6,r0 ;378
000018 d105 BNE |L3.38|
00001a 8025 STRH r5,[r4,#0]
;;;380 CPU_CRITICAL_EXIT();
00001c 4638 MOV r0,r7
00001e e8bd41f0 POP {r4-r8,lr}
000022 f7ffbffe B.W CPU_SR_Restore
|L3.38|
;;;381 return;
;;;382 }
;;;383
;;;384 switch (p_tcb->TaskState) {
000026 f8960036 LDRB r0,[r6,#0x36]
00002a 2808 CMP r0,#8
00002c d23e BCS |L3.172|
00002e e8dff000 TBB [pc,r0]
000032 0409 DCB 0x04,0x09
000034 171c2126 DCB 0x17,0x1c,0x21,0x26
000038 3338 DCB 0x33,0x38
;;;385 case OS_TASK_STATE_RDY: /* Cannot Abort delay if task is ready */
;;;386 CPU_CRITICAL_EXIT();
00003a 4638 MOV r0,r7
00003c f7fffffe BL CPU_SR_Restore
;;;387 *p_err = OS_ERR_TASK_NOT_DLY;
000040 8025 STRH r5,[r4,#0]
;;;388 break;
000042 e039 B |L3.184|
;;;389
;;;390 case OS_TASK_STATE_DLY:
;;;391 OS_CRITICAL_ENTER_CPU_EXIT();
;;;392 p_tcb->TaskState = OS_TASK_STATE_RDY;
000044 2500 MOVS r5,#0
000046 f8865036 STRB r5,[r6,#0x36]
;;;393 OS_TickListRemove(p_tcb); /* Remove task from tick list */
00004a 4630 MOV r0,r6
00004c f7fffffe BL OS_TickListRemove
;;;394 OS_RdyListInsert(p_tcb); /* Add to ready list */
000050 4630 MOV r0,r6
000052 f7fffffe BL OS_RdyListInsert
;;;395 OS_CRITICAL_EXIT_NO_SCHED();
000056 4638 MOV r0,r7
000058 f7fffffe BL CPU_SR_Restore
;;;396 *p_err = OS_ERR_NONE;
00005c 8025 STRH r5,[r4,#0]
;;;397 break;
00005e e02b B |L3.184|
;;;398
;;;399 case OS_TASK_STATE_PEND:
;;;400 CPU_CRITICAL_EXIT();
000060 4638 MOV r0,r7
000062 f7fffffe BL CPU_SR_Restore
;;;401 *p_err = OS_ERR_TASK_NOT_DLY;
000066 8025 STRH r5,[r4,#0]
;;;402 break;
000068 e026 B |L3.184|
;;;403
;;;404 case OS_TASK_STATE_PEND_TIMEOUT:
;;;405 CPU_CRITICAL_EXIT();
00006a 4638 MOV r0,r7
00006c f7fffffe BL CPU_SR_Restore
;;;406 *p_err = OS_ERR_TASK_NOT_DLY;
000070 8025 STRH r5,[r4,#0]
;;;407 break;
000072 e021 B |L3.184|
;;;408
;;;409 case OS_TASK_STATE_SUSPENDED:
;;;410 CPU_CRITICAL_EXIT();
000074 4638 MOV r0,r7
000076 f7fffffe BL CPU_SR_Restore
;;;411 *p_err = OS_ERR_TASK_NOT_DLY;
00007a 8025 STRH r5,[r4,#0]
;;;412 break;
00007c e01c B |L3.184|
;;;413
;;;414 case OS_TASK_STATE_DLY_SUSPENDED:
;;;415 OS_CRITICAL_ENTER_CPU_EXIT();
;;;416 p_tcb->TaskState = OS_TASK_STATE_SUSPENDED;
00007e 2004 MOVS r0,#4
000080 f8860036 STRB r0,[r6,#0x36]
;;;417 OS_TickListRemove(p_tcb); /* Remove task from tick list */
000084 4630 MOV r0,r6
000086 f7fffffe BL OS_TickListRemove
;;;418 OS_CRITICAL_EXIT_NO_SCHED();
00008a 4638 MOV r0,r7
00008c f7fffffe BL CPU_SR_Restore
;;;419 *p_err = OS_ERR_TASK_SUSPENDED;
000090 f247105a MOV r0,#0x715a
000094 8020 STRH r0,[r4,#0]
;;;420 break;
000096 e00f B |L3.184|
;;;421
;;;422 case OS_TASK_STATE_PEND_SUSPENDED:
;;;423 CPU_CRITICAL_EXIT();
000098 4638 MOV r0,r7
00009a f7fffffe BL CPU_SR_Restore
;;;424 *p_err = OS_ERR_TASK_NOT_DLY;
00009e 8025 STRH r5,[r4,#0]
;;;425 break;
0000a0 e00a B |L3.184|
;;;426
;;;427 case OS_TASK_STATE_PEND_TIMEOUT_SUSPENDED:
;;;428 CPU_CRITICAL_EXIT();
0000a2 4638 MOV r0,r7
0000a4 f7fffffe BL CPU_SR_Restore
;;;429 *p_err = OS_ERR_TASK_NOT_DLY;
0000a8 8025 STRH r5,[r4,#0]
;;;430 break;
0000aa e005 B |L3.184|
|L3.172|
;;;431
;;;432 default:
;;;433 CPU_CRITICAL_EXIT();
0000ac 4638 MOV r0,r7
0000ae f7fffffe BL CPU_SR_Restore
;;;434 *p_err = OS_ERR_STATE_INVALID;
0000b2 f646602d MOV r0,#0x6e2d
0000b6 8020 STRH r0,[r4,#0]
|L3.184|
;;;435 break;
;;;436 }
;;;437
;;;438 OSSched();
0000b8 e8bd41f0 POP {r4-r8,lr}
0000bc f7ffbffe B.W OSSched
;;;439 }
;;;440 #endif
ENDP
|L3.192|
DCD OSTCBCurPtr
AREA ||i.OSTimeGet||, CODE, READONLY, ALIGN=2
OSTimeGet PROC
;;;456
;;;457 OS_TICK OSTimeGet (OS_ERR *p_err)
000000 b570 PUSH {r4-r6,lr}
;;;458 {
000002 4605 MOV r5,r0
;;;459 OS_TICK ticks;
;;;460 CPU_SR_ALLOC();
;;;461
;;;462
;;;463
;;;464 #ifdef OS_SAFETY_CRITICAL
;;;465 if (p_err == (OS_ERR *)0) {
;;;466 OS_SAFETY_CRITICAL_EXCEPTION();
;;;467 return ((OS_TICK)0);
;;;468 }
;;;469 #endif
;;;470
;;;471 CPU_CRITICAL_ENTER();
000004 f7fffffe BL CPU_SR_Save
;;;472 ticks = OSTickCtr;
000008 4903 LDR r1,|L4.24|
00000a 680c LDR r4,[r1,#0] ; OSTickCtr
;;;473 CPU_CRITICAL_EXIT();
00000c f7fffffe BL CPU_SR_Restore
;;;474 *p_err = OS_ERR_NONE;
000010 2000 MOVS r0,#0
000012 8028 STRH r0,[r5,#0]
;;;475 return (ticks);
000014 4620 MOV r0,r4
;;;476 }
000016 bd70 POP {r4-r6,pc}
;;;477
ENDP
|L4.24|
DCD OSTickCtr
AREA ||i.OSTimeSet||, CODE, READONLY, ALIGN=2
OSTimeSet PROC
;;;493
;;;494 void OSTimeSet (OS_TICK ticks,
000000 b570 PUSH {r4-r6,lr}
;;;495 OS_ERR *p_err)
;;;496 {
000002 4604 MOV r4,r0
000004 460d MOV r5,r1
;;;497 CPU_SR_ALLOC();
;;;498
;;;499
;;;500
;;;501 #ifdef OS_SAFETY_CRITICAL
;;;502 if (p_err == (OS_ERR *)0) {
;;;503 OS_SAFETY_CRITICAL_EXCEPTION();
;;;504 return;
;;;505 }
;;;506 #endif
;;;507
;;;508 CPU_CRITICAL_ENTER();
000006 f7fffffe BL CPU_SR_Save
;;;509 OSTickCtr = ticks;
00000a 4a03 LDR r2,|L5.24|
00000c 6014 STR r4,[r2,#0] ; OSTickCtr
;;;510 CPU_CRITICAL_EXIT();
00000e f7fffffe BL CPU_SR_Restore
;;;511 *p_err = OS_ERR_NONE;
000012 2000 MOVS r0,#0
000014 8028 STRH r0,[r5,#0]
;;;512 }
000016 bd70 POP {r4-r6,pc}
;;;513
ENDP
|L5.24|
DCD OSTickCtr
AREA ||i.OSTimeTick||, CODE, READONLY, ALIGN=2
OSTimeTick PROC
;;;527
;;;528 void OSTimeTick (void)
000000 b508 PUSH {r3,lr}
;;;529 {
;;;530 OS_ERR err;
;;;531 #if OS_CFG_ISR_POST_DEFERRED_EN > 0u
;;;532 CPU_TS ts;
;;;533 #endif
;;;534
;;;535
;;;536 OSTimeTickHook(); /* Call user definable hook */
000002 f7fffffe BL OSTimeTickHook
;;;537
;;;538 #if OS_CFG_ISR_POST_DEFERRED_EN > 0u
;;;539
;;;540 ts = OS_TS_GET(); /* Get timestamp */
;;;541 OS_IntQPost((OS_OBJ_TYPE) OS_OBJ_TYPE_TICK, /* Post to ISR queue */
;;;542 (void *)&OSRdyList[OSPrioCur],
;;;543 (void *) 0,
;;;544 (OS_MSG_SIZE) 0u,
;;;545 (OS_FLAGS ) 0u,
;;;546 (OS_OPT ) 0u,
;;;547 (CPU_TS ) ts,
;;;548 (OS_ERR *)&err);
;;;549
;;;550 #else
;;;551
;;;552 (void)OSTaskSemPost((OS_TCB *)&OSTickTaskTCB, /* Signal tick task */
000006 466a MOV r2,sp
000008 2100 MOVS r1,#0
00000a 4802 LDR r0,|L6.20|
00000c f7fffffe BL OSTaskSemPost
;;;553 (OS_OPT ) OS_OPT_POST_NONE,
;;;554 (OS_ERR *)&err);
;;;555
;;;556
;;;557 #if OS_CFG_SCHED_ROUND_ROBIN_EN > 0u
;;;558 OS_SchedRoundRobin(&OSRdyList[OSPrioCur]);
;;;559 #endif
;;;560
;;;561 #if OS_CFG_TMR_EN > 0u
;;;562 OSTmrUpdateCtr--;
;;;563 if (OSTmrUpdateCtr == (OS_CTR)0u) {
;;;564 OSTmrUpdateCtr = OSTmrUpdateCnt;
;;;565 OSTaskSemPost((OS_TCB *)&OSTmrTaskTCB, /* Signal timer task */
;;;566 (OS_OPT ) OS_OPT_POST_NONE,
;;;567 (OS_ERR *)&err);
;;;568 }
;;;569 #endif
;;;570
;;;571 #endif
;;;572 }
000010 bd08 POP {r3,pc}
ENDP
000012 0000 DCW 0x0000
|L6.20|
DCD OSTickTaskTCB