📄 os_task.lst
字号:
##############################################################################
# #
# IAR MSP430 C-Compiler V1.26A/WIN #
# #
# Time limited license: 29 days left #
# #
# Compile time = 30/Sep/2002 18:04:14 #
# Target option = SP430x31x #
# Memory model = small #
# Source file = c:\software\ucos-ii\source\os_task.c #
# List file = j:\software\ucos-ii\ti-msp430\iar\source\debug\list\os_task.lst#
# Object file = j:\software\ucos-ii\ti-msp430\iar\source\debug\obj\os_task.r43#
# ASM file = j:\software\ucos-ii\ti-msp430\iar\source\debug\list\os_task.s43#
# Command line = -OJ:\SOFTWARE\UCOS-II\TI-MSP430\IAR\SOURCE\Debug\Obj\ #
# -e -K -gA -s6 -RCODE -r0 #
# -LJ:\SOFTWARE\UCOS-II\TI-MSP430\IAR\SOURCE\Debug\List\ #
# -q -t8 -x #
# -AJ:\SOFTWARE\UCOS-II\TI-MSP430\IAR\SOURCE\Debug\List\ #
# -X -IC:\PROGRA~1\IARSYS~1\ew23\430\inc\ #
# -I\software\ucos-ii\ti-msp430\iar\source\ #
# -I\software\ucos-ii\source\ #
# C:\SOFTWARE\uCOS-II\SOURCE\OS_TASK.C #
# #
# Copyright 1996-2002 IAR Systems. All rights reserved. #
##############################################################################
extern INT8U const OSMapTbl[]; /* Priority->Bit Mask lookup table */
-----------------------------------^
"c:\software\ucos-ii\source\ucos_ii.h",481 Warning[27]: Size of "extern" object 'OSMapTbl' is unknown
extern INT8U const OSUnMapTbl[]; /* Priority->Index lookup table */
-------------------------------------^
"c:\software\ucos-ii\source\ucos_ii.h",482 Warning[27]: Size of "extern" object 'OSUnMapTbl' is unknown
}
^
"c:\software\ucos-ii\source\os_task.c",437 Warning[33]: Local or formal 'self' was never referenced
\ 0000 NAME os_task(16)
\ 0000 RSEG CODE(1)
\ 0000 EXTERN OSIntNesting
\ 0000 EXTERN OSLockNesting
\ 0000 EXTERN OSMapTbl
\ 0000 EXTERN OSRdyGrp
\ 0000 EXTERN OSRdyTbl
\ 0000 EXTERN OSRunning
\ 0000 EXTERN OSTCBCur
\ 0000 EXTERN OSTCBFreeList
\ 0000 EXTERN OSTCBList
\ 0000 EXTERN OSTCBPrioTbl
\ 0000 PUBLIC OSTaskChangePrio
\ 0000 PUBLIC OSTaskCreate
\ 0000 PUBLIC OSTaskCreateExt
\ 0000 EXTERN OSTaskCtr
\ 0000 PUBLIC OSTaskDel
\ 0000 EXTERN OSTaskDelHook
\ 0000 PUBLIC OSTaskDelReq
\ 0000 PUBLIC OSTaskQuery
\ 0000 PUBLIC OSTaskResume
\ 0000 PUBLIC OSTaskStkChk
\ 0000 EXTERN OSTaskStkInit
\ 0000 PUBLIC OSTaskSuspend
\ 0000 EXTERN OS_Dummy
\ 0000 EXTERN OS_FlagUnlink
\ 0000 EXTERN OS_Sched
\ 0000 EXTERN OS_TCBInit
\ 0000 EXTERN memcpy
\ 0000 EXTERN memset
\ 0000 EXTERN ?CL430_1_26_L08
\ 0000 RSEG CODE
\ 0000 OSTaskChangePrio:
1 /*
2 *********************************************************************************************************
3 * uC/OS-II
4 * The Real-Time Kernel
5 * TASK MANAGEMENT
6 *
7 * (c) Copyright 1992-2002, Jean J. Labrosse, Weston, FL
8 * All Rights Reserved
9 *
10 * File : OS_TASK.C
11 * By : Jean J. Labrosse
12 *********************************************************************************************************
13 */
14
15 #ifndef OS_MASTER_FILE
16 #include "includes.h"
17 #endif
18
19 /*
20 *********************************************************************************************************
21 * CHANGE PRIORITY OF A TASK
22 *
23 * Description: This function allows you to change the priority of a task dynamically. Note that the new
24 * priority MUST be available.
25 *
26 * Arguments : oldp is the old priority
27 *
28 * newp is the new priority
29 *
30 * Returns : OS_NO_ERR is the call was successful
31 * OS_PRIO_INVALID if the priority you specify is higher that the maximum allowed
32 * (i.e. >= OS_LOWEST_PRIO)
33 * OS_PRIO_EXIST if the new priority already exist.
34 * OS_PRIO_ERR there is no task with the specified OLD priority (i.e. the OLD task does
35 * not exist.
36 *********************************************************************************************************
37 */
38
39 #if OS_TASK_CHANGE_PRIO_EN > 0
40 INT8U OSTaskChangePrio (INT8U oldprio, INT8U newprio)
41 {
\ 0000 0A12 PUSH R10
\ 0002 0B12 PUSH R11
\ 0004 0812 PUSH R8
\ 0006 0912 PUSH R9
\ 0008 0612 PUSH R6
42 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
43 OS_CPU_SR cpu_sr;
44 #endif
45
46 #if OS_EVENT_EN > 0
47 OS_EVENT *pevent;
48 #endif
49
50 OS_TCB *ptcb;
51 INT8U x;
52 INT8U y;
53 INT8U bitx;
54 INT8U bity;
55
56
57
58 #if OS_ARG_CHK_EN > 0
59 if ((oldprio >= OS_LOWEST_PRIO && oldprio != OS_PRIO_SELF) ||
60 newprio >= OS_LOWEST_PRIO) {
\ 000A 7C900C00 CMP.B #12,R12
\ 000E 0228 JNC (?0063)
\ 0010 7C93 CMP.B #255,R12
\ 0012 0320 JNE (?0064)
\ 0014 ?0063:
\ 0014 7E900C00 CMP.B #12,R14
\ 0018 0328 JNC (?0061)
\ 001A ?0064:
61 return (OS_PRIO_INVALID);
\ 001A 7C402A00 MOV.B #42,R12
62 }
\ 001E 7D3C JMP (?0085)
\ 0020 ?0061:
63 #endif
64 OS_ENTER_CRITICAL();
\ 0020 32C2 DINT
65 if (OSTCBPrioTbl[newprio] != (OS_TCB *)0) { /* New priority must not already exist */
\ 0022 4D4E MOV.B R14,R13
\ 0024 0D5D ADD R13,R13
\ 0026 8D930000 CMP #0,OSTCBPrioTbl(R13)
\ 002A 0424 JEQ (?0067)
66 OS_EXIT_CRITICAL();
\ 002C 32D2 EINT
67 return (OS_PRIO_EXIST);
\ 002E 7C402800 MOV.B #40,R12
68 } else {
\ 0032 733C JMP (?0085)
\ 0034 ?0067:
69 OSTCBPrioTbl[newprio] = (OS_TCB *)1; /* Reserve the entry to prevent others */
\ 0034 4D4E MOV.B R14,R13
\ 0036 0D5D ADD R13,R13
\ 0038 9D430000 MOV #1,OSTCBPrioTbl(R13)
70 OS_EXIT_CRITICAL();
\ 003C 32D2 EINT
71 y = newprio >> 3; /* Precompute to reduce INT. latency */
\ 003E 4D4E MOV.B R14,R13
\ 0040 12C3 CLRC
\ 0042 4D10 RRC.B R13
\ 0044 4D11 RRA.B R13
\ 0046 4D11 RRA.B R13
72 bity = OSMapTbl[y];
\ 0048 4A4D MOV.B R13,R10
\ 004A 5F4A0000 MOV.B OSMapTbl(R10),R15
73 x = newprio & 0x07;
\ 004E 4A4E MOV.B R14,R10
\ 0050 7AF00700 AND.B #7,R10
74 bitx = OSMapTbl[x];
\ 0054 484A MOV.B R10,R8
\ 0056 5B480000 MOV.B OSMapTbl(R8),R11
75 OS_ENTER_CRITICAL();
\ 005A 32C2 DINT
76 if (oldprio == OS_PRIO_SELF) { /* See if changing self */
\ 005C 7C93 CMP.B #255,R12
\ 005E 0420 JNE (?0069)
77 oldprio = OSTCBCur->OSTCBPrio; /* Yes, get priority */
\ 0060 18420000 MOV &OSTCBCur,R8
\ 0064 5C481D00 MOV.B 29(R8),R12
\ 0068 ?0069:
78 }
79 ptcb = OSTCBPrioTbl[oldprio];
\ 0068 494C MOV.B R12,R9
\ 006A 0959 ADD R9,R9
\ 006C 18490000 MOV OSTCBPrioTbl(R9),R8
80 if (ptcb != (OS_TCB *)0) { /* Task to change must exist */
\ 0070 0893 CMP #0,R8
\ 0072 4C24 JEQ (?0071)
81 OSTCBPrioTbl[oldprio] = (OS_TCB *)0; /* Remove TCB from old priority */
\ 0074 7CF3 AND.B #-1,R12
\ 0076 0C5C ADD R12,R12
\ 0078 8C430000 MOV #0,OSTCBPrioTbl(R12)
82 if ((OSRdyTbl[ptcb->OSTCBY] & ptcb->OSTCBBitX) != 0x00) { /* If task is ready make it not */
\ 007C 5C481F00 MOV.B 31(R8),R12
\ 0080 D8BC0000 BIT.B OSRdyTbl(R12),32(R8)
\ 0084 2000
\ 0086 1524 JEQ (?0073)
83 if ((OSRdyTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0x00) {
\ 0088 5C481F00 MOV.B 31(R8),R12
\ 008C 59482000 MOV.B 32(R8),R9
\ 0090 79E3 XOR.B #-1,R9
\ 0092 CCF90000 AND.B R9,OSRdyTbl(R12)
\ 0096 CC930000 CMP.B #0,OSRdyTbl(R12)
\ 009A 0520 JNE (?0075)
84 OSRdyGrp &= ~ptcb->OSTCBBitY;
\ 009C 5C482100 MOV.B 33(R8),R12
\ 00A0 7CE3 XOR.B #-1,R12
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -