📄 os_mbox.s79
字号:
//////////////////////////////////////////////////////////////////////////////
// /
// IAR ARM ANSI C/C++ Compiler V4.40A/W32 EVALUATION 21/Jul/2006 16:27:47 /
// Copyright 1999-2005 IAR Systems. All rights reserved. /
// Time limited license: 22 days left /
// /
// Cpu mode = interwork /
// Endian = little /
// Stack alignment = 4 /
// Source file = E:\Project\ucos-ii\spi\uCOS-II\os_mbox.c /
// Command line = E:\Project\ucos-ii\spi\uCOS-II\os_mbox.c -lCN /
// E:\Project\ucos-ii\spi\Debug\List\ -lA /
// E:\Project\ucos-ii\spi\Debug\List\ -o /
// E:\Project\ucos-ii\spi\Debug\Obj\ -s9 --no_cse /
// --no_unroll --no_inline --no_code_motion --no_tbaa /
// --no_clustering --no_scheduling --debug --cpu_mode /
// thumb --endian little --cpu ARM7TDMI-S /
// --stack_align 4 --interwork -e --fpu None /
// --dlib_config "e:\Program Files\IAR /
// Systems\Embedded Workbench 4.0 /
// Evaluation\ARM\LIB\dl4tptinl8n.h" -I /
// E:\Project\ucos-ii\spi\ -I /
// E:\Project\ucos-ii\spi\App\ -I /
// E:\Project\ucos-ii\spi\ARM\ -I /
// E:\Project\ucos-ii\spi\BSP\ -I /
// E:\Project\ucos-ii\spi\uCOS-II\ -I "e:\Program /
// Files\IAR Systems\Embedded Workbench 4.0 /
// Evaluation\ARM\INC\" /
// List file = E:\Project\ucos-ii\spi\Debug\List\os_mbox.s79 /
// /
// /
//////////////////////////////////////////////////////////////////////////////
NAME os_mbox
RTMODEL "StackAlign4", "USED"
RTMODEL "__cpu_mode", "__pcs__interwork"
RTMODEL "__data_model", "absolute"
RTMODEL "__endian", "little"
RTMODEL "__rt_version", "6"
RSEG CSTACK:DATA:NOROOT(2)
??DataTable0 EQU 0
??DataTable1 EQU 0
??DataTable2 EQU 0
??DataTable3 EQU 0
??DataTable4 EQU 0
??DataTable5 EQU 0
MULTWEAK ??OSMboxAccept??rA
MULTWEAK ??OSMboxCreate??rA
MULTWEAK ??OSMboxDel??rA
MULTWEAK ??OSMboxPend??rA
MULTWEAK ??OSMboxPost??rA
MULTWEAK ??OSMboxPostOpt??rA
MULTWEAK ??OSMboxQuery??rA
MULTWEAK ??OS_CPU_SR_Restore??rT
MULTWEAK ??OS_CPU_SR_Save??rT
MULTWEAK ??OS_EventTO??rT
MULTWEAK ??OS_EventTaskRdy??rT
MULTWEAK ??OS_EventTaskWait??rT
MULTWEAK ??OS_EventWaitListInit??rT
MULTWEAK ??OS_Sched??rT
PUBLIC OSMboxAccept
FUNCTION OSMboxAccept,0203H
LOCFRAME CSTACK, 12, STACK
PUBLIC OSMboxCreate
FUNCTION OSMboxCreate,0203H
LOCFRAME CSTACK, 12, STACK
PUBLIC OSMboxDel
FUNCTION OSMboxDel,0203H
LOCFRAME CSTACK, 24, STACK
PUBLIC OSMboxPend
FUNCTION OSMboxPend,0203H
LOCFRAME CSTACK, 24, STACK
PUBLIC OSMboxPost
FUNCTION OSMboxPost,0203H
LOCFRAME CSTACK, 16, STACK
PUBLIC OSMboxPostOpt
FUNCTION OSMboxPostOpt,0203H
LOCFRAME CSTACK, 20, STACK
PUBLIC OSMboxQuery
FUNCTION OSMboxQuery,0203H
LOCFRAME CSTACK, 12, STACK
CFI Names cfiNames0
CFI StackFrame CFA R13 HUGEDATA
CFI Resource R0:32, R1:32, R2:32, R3:32, R4:32, R5:32, R6:32, R7:32
CFI Resource R8:32, R9:32, R10:32, R11:32, R12:32, CPSR:32, R13:32
CFI Resource R14:32, SPSR:32
CFI VirtualResource ?RET:32
CFI EndNames cfiNames0
CFI Common cfiCommon0 Using cfiNames0
CFI CodeAlign 4
CFI DataAlign 4
CFI ReturnAddress ?RET CODE
CFI CFA R13+0
CFI R0 Undefined
CFI R1 Undefined
CFI R2 Undefined
CFI R3 Undefined
CFI R4 SameValue
CFI R5 SameValue
CFI R6 SameValue
CFI R7 SameValue
CFI R8 SameValue
CFI R9 SameValue
CFI R10 SameValue
CFI R11 SameValue
CFI R12 Undefined
CFI CPSR SameValue
CFI R14 Undefined
CFI SPSR SameValue
CFI ?RET R14
CFI EndCommon cfiCommon0
CFI Common cfiCommon1 Using cfiNames0
CFI CodeAlign 2
CFI DataAlign 4
CFI ReturnAddress ?RET CODE
CFI CFA R13+0
CFI R0 Undefined
CFI R1 Undefined
CFI R2 Undefined
CFI R3 Undefined
CFI R4 SameValue
CFI R5 SameValue
CFI R6 SameValue
CFI R7 SameValue
CFI R8 SameValue
CFI R9 SameValue
CFI R10 SameValue
CFI R11 SameValue
CFI R12 Undefined
CFI CPSR SameValue
CFI R14 Undefined
CFI SPSR SameValue
CFI ?RET R14
CFI EndCommon cfiCommon1
OS_CPU_SR_Restore SYMBOL "OS_CPU_SR_Restore"
OS_CPU_SR_Save SYMBOL "OS_CPU_SR_Save"
OS_EventTO SYMBOL "OS_EventTO"
OS_EventTaskRdy SYMBOL "OS_EventTaskRdy"
OS_EventTaskWait SYMBOL "OS_EventTaskWait"
OS_EventWaitListInit SYMBOL "OS_EventWaitListInit"
OS_Sched SYMBOL "OS_Sched"
OSMboxAccept SYMBOL "OSMboxAccept"
??OSMboxAccept??rA SYMBOL "??rA", OSMboxAccept
OSMboxCreate SYMBOL "OSMboxCreate"
??OSMboxCreate??rA SYMBOL "??rA", OSMboxCreate
OSMboxDel SYMBOL "OSMboxDel"
??OSMboxDel??rA SYMBOL "??rA", OSMboxDel
OSMboxPend SYMBOL "OSMboxPend"
??OSMboxPend??rA SYMBOL "??rA", OSMboxPend
OSMboxPost SYMBOL "OSMboxPost"
??OSMboxPost??rA SYMBOL "??rA", OSMboxPost
OSMboxPostOpt SYMBOL "OSMboxPostOpt"
??OSMboxPostOpt??rA SYMBOL "??rA", OSMboxPostOpt
OSMboxQuery SYMBOL "OSMboxQuery"
??OSMboxQuery??rA SYMBOL "??rA", OSMboxQuery
??OS_CPU_SR_Restore??rT SYMBOL "??rT", OS_CPU_SR_Restore
??OS_CPU_SR_Save??rT SYMBOL "??rT", OS_CPU_SR_Save
??OS_EventTO??rT SYMBOL "??rT", OS_EventTO
??OS_EventTaskRdy??rT SYMBOL "??rT", OS_EventTaskRdy
??OS_EventTaskWait??rT SYMBOL "??rT", OS_EventTaskWait
??OS_EventWaitListInit??rT SYMBOL "??rT", OS_EventWaitListInit
??OS_Sched??rT SYMBOL "??rT", OS_Sched
EXTERN OSEventFreeList
EXTERN OSIntNesting
EXTERN OSTCBCur
EXTERN OS_CPU_SR_Restore
FUNCTION OS_CPU_SR_Restore,0202H
EXTERN OS_CPU_SR_Save
FUNCTION OS_CPU_SR_Save,0202H
EXTERN OS_EventTO
FUNCTION OS_EventTO,0202H
EXTERN OS_EventTaskRdy
FUNCTION OS_EventTaskRdy,0202H
EXTERN OS_EventTaskWait
FUNCTION OS_EventTaskWait,0202H
EXTERN OS_EventWaitListInit
FUNCTION OS_EventWaitListInit,0202H
EXTERN OS_Sched
FUNCTION OS_Sched,0202H
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock0 Using cfiCommon0
CFI NoFunction
ARM
??OSMboxAccept??rA:
ADD R12,PC,#+1
BX R12
CFI EndBlock cfiBlock0
REQUIRE OSMboxAccept
// E:\Project\ucos-ii\spi\uCOS-II\os_mbox.c
// 1 /*
// 2 *********************************************************************************************************
// 3 * uC/OS-II
// 4 * The Real-Time Kernel
// 5 * MESSAGE MAILBOX MANAGEMENT
// 6 *
// 7 * (c) Copyright 1992-2003, Jean J. Labrosse, Weston, FL
// 8 * All Rights Reserved
// 9 *
// 10 * File : OS_MBOX.C
// 11 * By : Jean J. Labrosse
// 12 *********************************************************************************************************
// 13 */
// 14
// 15 #ifndef OS_MASTER_FILE
// 16 #include <ucos_ii.h>
// 17 #endif
// 18
// 19 #if OS_MBOX_EN > 0
// 20 /*
// 21 *********************************************************************************************************
// 22 * ACCEPT MESSAGE FROM MAILBOX
// 23 *
// 24 * Description: This function checks the mailbox to see if a message is available. Unlike OSMboxPend(),
// 25 * OSMboxAccept() does not suspend the calling task if a message is not available.
// 26 *
// 27 * Arguments : pevent is a pointer to the event control block
// 28 *
// 29 * Returns : != (void *)0 is the message in the mailbox if one is available. The mailbox is cleared
// 30 * so the next time OSMboxAccept() is called, the mailbox will be empty.
// 31 * == (void *)0 if the mailbox is empty or,
// 32 * if 'pevent' is a NULL pointer or,
// 33 * if you didn't pass the proper event pointer.
// 34 *********************************************************************************************************
// 35 */
// 36
// 37 #if OS_MBOX_ACCEPT_EN > 0
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock1 Using cfiCommon1
CFI Function OSMboxAccept
THUMB
// 38 void *OSMboxAccept (OS_EVENT *pevent)
// 39 {
OSMboxAccept:
PUSH {R4,R5,LR}
CFI ?RET Frame(CFA, -4)
CFI R5 Frame(CFA, -8)
CFI R4 Frame(CFA, -12)
CFI CFA R13+12
MOVS R4,R0
// 40 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
// 41 OS_CPU_SR cpu_sr;
// 42 #endif
// 43 void *msg;
// 44
// 45
// 46 #if OS_ARG_CHK_EN > 0
// 47 if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
BNE ??OSMboxAccept_0
// 48 return ((void *)0);
??OSMboxAccept_1:
MOVS R0,#+0
B ??OSMboxAccept_2
// 49 }
// 50 #endif
// 51 if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) { /* Validate event block type */
??OSMboxAccept_0:
LDRB R0,[R4, #+0]
CMP R0,#+1
BNE ??OSMboxAccept_1
// 52 return ((void *)0);
// 53 }
// 54 OS_ENTER_CRITICAL();
??OSMboxAccept_3:
_BLF OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
// 55 msg = pevent->OSEventPtr;
LDR R5,[R4, #+4]
// 56 pevent->OSEventPtr = (void *)0; /* Clear the mailbox */
MOVS R1,#+0
STR R1,[R4, #+4]
// 57 OS_EXIT_CRITICAL();
_BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
// 58 return (msg); /* Return the message received (or NULL) */
MOVS R0,R5
??OSMboxAccept_2:
POP {R4,R5}
POP {R1}
BX R1 ;; return
CFI EndBlock cfiBlock1
// 59 }
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock2 Using cfiCommon0
CFI NoFunction
ARM
??OSMboxCreate??rA:
ADD R12,PC,#+1
BX R12
CFI EndBlock cfiBlock2
REQUIRE OSMboxCreate
// 60 #endif
// 61
// 62 /*
// 63 *********************************************************************************************************
// 64 * CREATE A MESSAGE MAILBOX
// 65 *
// 66 * Description: This function creates a message mailbox if free event control blocks are available.
// 67 *
// 68 * Arguments : msg is a pointer to a message that you wish to deposit in the mailbox. If
// 69 * you set this value to the NULL pointer (i.e. (void *)0) then the mailbox
// 70 * will be considered empty.
// 71 *
// 72 * Returns : != (OS_EVENT *)0 is a pointer to the event control clock (OS_EVENT) associated with the
// 73 * created mailbox
// 74 * == (OS_EVENT *)0 if no event control blocks were available
// 75 *********************************************************************************************************
// 76 */
// 77
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock3 Using cfiCommon1
CFI Function OSMboxCreate
THUMB
// 78 OS_EVENT *OSMboxCreate (void *msg)
// 79 {
OSMboxCreate:
PUSH {R4,R5,LR}
CFI ?RET Frame(CFA, -4)
CFI R5 Frame(CFA, -8)
CFI R4 Frame(CFA, -12)
CFI CFA R13+12
MOVS R4,R0
// 80 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
// 81 OS_CPU_SR cpu_sr;
// 82 #endif
// 83 OS_EVENT *pevent;
// 84
// 85
// 86 if (OSIntNesting > 0) { /* See if called from ISR ... */
LDR R0,??DataTable7 ;; OSIntNesting
LDRB R0,[R0, #+0]
CMP R0,#+0
BEQ ??OSMboxCreate_0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -