📄 os_mem.s79
字号:
//////////////////////////////////////////////////////////////////////////////
// /
// IAR ARM ANSI C/C++ Compiler V4.40A/W32 EVALUATION 21/Jul/2006 17:17:37 /
// 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\counter\uCOS-II\os_mem.c /
// Command line = E:\Project\ucos-ii\counter\uCOS-II\os_mem.c -lCN /
// E:\Project\ucos-ii\counter\Debug\List\ -lA /
// E:\Project\ucos-ii\counter\Debug\List\ -o /
// E:\Project\ucos-ii\counter\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\counter\ -I /
// E:\Project\ucos-ii\counter\App\ -I /
// E:\Project\ucos-ii\counter\BSP\ -I /
// E:\Project\ucos-ii\counter\ARM\ -I /
// E:\Project\ucos-ii\counter\uCOS-II\ -I "E:\Program /
// Files\IAR Systems\Embedded Workbench 4.0 /
// Evaluation\ARM\INC\" /
// List file = E:\Project\ucos-ii\counter\Debug\List\os_mem.s79 /
// /
// /
//////////////////////////////////////////////////////////////////////////////
NAME os_mem
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
MULTWEAK ??OSMemCreate??rA
MULTWEAK ??OSMemGet??rA
MULTWEAK ??OSMemNameGet??rA
MULTWEAK ??OSMemNameSet??rA
MULTWEAK ??OSMemPut??rA
MULTWEAK ??OSMemQuery??rA
MULTWEAK ??OS_CPU_SR_Restore??rT
MULTWEAK ??OS_CPU_SR_Save??rT
MULTWEAK ??OS_MemClr??rT
MULTWEAK ??OS_MemInit??rA
MULTWEAK ??OS_StrCopy??rT
MULTWEAK ??OS_StrLen??rT
PUBLIC OSMemCreate
FUNCTION OSMemCreate,0203H
LOCFRAME CSTACK, 24, STACK
PUBLIC OSMemGet
FUNCTION OSMemGet,0203H
LOCFRAME CSTACK, 16, STACK
PUBLIC OSMemNameGet
FUNCTION OSMemNameGet,0203H
LOCFRAME CSTACK, 20, STACK
PUBLIC OSMemNameSet
FUNCTION OSMemNameSet,0203H
LOCFRAME CSTACK, 20, STACK
PUBLIC OSMemPut
FUNCTION OSMemPut,0203H
LOCFRAME CSTACK, 12, STACK
PUBLIC OSMemQuery
FUNCTION OSMemQuery,0203H
LOCFRAME CSTACK, 12, STACK
PUBLIC OS_MemInit
FUNCTION OS_MemInit,0203H
LOCFRAME CSTACK, 8, 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_MemClr SYMBOL "OS_MemClr"
OS_StrCopy SYMBOL "OS_StrCopy"
OS_StrLen SYMBOL "OS_StrLen"
OSMemCreate SYMBOL "OSMemCreate"
??OSMemCreate??rA SYMBOL "??rA", OSMemCreate
OSMemGet SYMBOL "OSMemGet"
??OSMemGet??rA SYMBOL "??rA", OSMemGet
OSMemNameGet SYMBOL "OSMemNameGet"
??OSMemNameGet??rA SYMBOL "??rA", OSMemNameGet
OSMemNameSet SYMBOL "OSMemNameSet"
??OSMemNameSet??rA SYMBOL "??rA", OSMemNameSet
OSMemPut SYMBOL "OSMemPut"
??OSMemPut??rA SYMBOL "??rA", OSMemPut
OSMemQuery SYMBOL "OSMemQuery"
??OSMemQuery??rA SYMBOL "??rA", OSMemQuery
??OS_CPU_SR_Restore??rT SYMBOL "??rT", OS_CPU_SR_Restore
??OS_CPU_SR_Save??rT SYMBOL "??rT", OS_CPU_SR_Save
??OS_MemClr??rT SYMBOL "??rT", OS_MemClr
OS_MemInit SYMBOL "OS_MemInit"
??OS_MemInit??rA SYMBOL "??rA", OS_MemInit
??OS_StrCopy??rT SYMBOL "??rT", OS_StrCopy
??OS_StrLen??rT SYMBOL "??rT", OS_StrLen
EXTERN OSMemFreeList
EXTERN OSMemTbl
EXTERN OS_CPU_SR_Restore
FUNCTION OS_CPU_SR_Restore,0202H
EXTERN OS_CPU_SR_Save
FUNCTION OS_CPU_SR_Save,0202H
EXTERN OS_MemClr
FUNCTION OS_MemClr,0202H
EXTERN OS_StrCopy
FUNCTION OS_StrCopy,0202H
EXTERN OS_StrLen
FUNCTION OS_StrLen,0202H
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock0 Using cfiCommon0
CFI NoFunction
ARM
??OSMemCreate??rA:
ADD R12,PC,#+1
BX R12
CFI EndBlock cfiBlock0
REQUIRE OSMemCreate
// E:\Project\ucos-ii\counter\uCOS-II\os_mem.c
// 1 /*
// 2 *********************************************************************************************************
// 3 * uC/OS-II
// 4 * The Real-Time Kernel
// 5 * MEMORY MANAGEMENT
// 6 *
// 7 * (c) Copyright 1992-2003, Jean J. Labrosse, Weston, FL
// 8 * All Rights Reserved
// 9 *
// 10 * File : OS_MEM.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_MEM_EN > 0) && (OS_MAX_MEM_PART > 0)
// 20 /*
// 21 *********************************************************************************************************
// 22 * CREATE A MEMORY PARTITION
// 23 *
// 24 * Description : Create a fixed-sized memory partition that will be managed by uC/OS-II.
// 25 *
// 26 * Arguments : addr is the starting address of the memory partition
// 27 *
// 28 * nblks is the number of memory blocks to create from the partition.
// 29 *
// 30 * blksize is the size (in bytes) of each block in the memory partition.
// 31 *
// 32 * err is a pointer to a variable containing an error message which will be set by
// 33 * this function to either:
// 34 *
// 35 * OS_NO_ERR if the memory partition has been created correctly.
// 36 * OS_MEM_INVALID_ADDR you are specifying an invalid address for the memory
// 37 * storage of the partition.
// 38 * OS_MEM_INVALID_PART no free partitions available
// 39 * OS_MEM_INVALID_BLKS user specified an invalid number of blocks (must be >= 2)
// 40 * OS_MEM_INVALID_SIZE user specified an invalid block size
// 41 * (must be greater than the size of a pointer)
// 42 * Returns : != (OS_MEM *)0 is the partition was created
// 43 * == (OS_MEM *)0 if the partition was not created because of invalid arguments or, no
// 44 * free partition is available.
// 45 *********************************************************************************************************
// 46 */
// 47
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock1 Using cfiCommon1
CFI Function OSMemCreate
THUMB
// 48 OS_MEM *OSMemCreate (void *addr, INT32U nblks, INT32U blksize, INT8U *err)
// 49 {
OSMemCreate:
PUSH {R0,R4-R7,LR}
CFI ?RET Frame(CFA, -4)
CFI R7 Frame(CFA, -8)
CFI R6 Frame(CFA, -12)
CFI R5 Frame(CFA, -16)
CFI R4 Frame(CFA, -20)
CFI CFA R13+24
MOVS R4,R1
MOVS R5,R2
MOVS R6,R3
// 50 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
// 51 OS_CPU_SR cpu_sr;
// 52 #endif
// 53 OS_MEM *pmem;
// 54 INT8U *pblk;
// 55 void **plink;
// 56 INT32U i;
// 57
// 58
// 59 #if OS_ARG_CHK_EN > 0
// 60 if (addr == (void *)0) { /* Must pass a valid address for the memory part. */
CMP R0,#+0
BNE ??OSMemCreate_0
// 61 *err = OS_MEM_INVALID_ADDR;
MOVS R0,#+118
??OSMemCreate_1:
STRB R0,[R6, #+0]
// 62 return ((OS_MEM *)0);
MOVS R0,#+0
B ??OSMemCreate_2
// 63 }
// 64 if (nblks < 2) { /* Must have at least 2 blocks per partition */
??OSMemCreate_0:
CMP R4,#+2
BCS ??OSMemCreate_3
// 65 *err = OS_MEM_INVALID_BLKS;
MOVS R0,#+111
B.N ??OSMemCreate_1
// 66 return ((OS_MEM *)0);
// 67 }
// 68 if (blksize < sizeof(void *)) { /* Must contain space for at least a pointer */
??OSMemCreate_3:
CMP R5,#+4
BCS ??OSMemCreate_4
// 69 *err = OS_MEM_INVALID_SIZE;
MOVS R0,#+112
STRB R0,[R6, #+0]
// 70 return ((OS_MEM *)0);
MOVS R0,#+0
B ??OSMemCreate_2
// 71 }
// 72 #endif
// 73 OS_ENTER_CRITICAL();
??OSMemCreate_4:
_BLF OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
// 74 pmem = OSMemFreeList; /* Get next free memory partition */
LDR R1,??DataTable1 ;; OSMemFreeList
LDR R7,[R1, #+0]
// 75 if (OSMemFreeList != (OS_MEM *)0) { /* See if pool of free partitions was empty */
CMP R7,#+0
BEQ ??OSMemCreate_5
// 76 OSMemFreeList = (OS_MEM *)OSMemFreeList->OSMemFreeList;
LDR R2,[R7, #+4]
STR R2,[R1, #+0]
// 77 }
// 78 OS_EXIT_CRITICAL();
??OSMemCreate_5:
_BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
// 79 if (pmem == (OS_MEM *)0) { /* See if we have a memory partition */
CMP R7,#+0
BNE ??OSMemCreate_6
// 80 *err = OS_MEM_INVALID_PART;
MOVS R0,#+110
B.N ??OSMemCreate_1
// 81 return ((OS_MEM *)0);
// 82 }
// 83 plink = (void **)addr; /* Create linked list of free memory blocks */
??OSMemCreate_6:
LDR R0,[SP, #+0]
// 84 pblk = (INT8U *)((INT32U)addr + blksize);
ADDS R1,R0,R5
// 85 for (i = 0; i < (nblks - 1); i++) {
SUBS R2,R4,#+1
BEQ ??OSMemCreate_7
// 86 *plink = (void *)pblk;
??OSMemCreate_8:
STR R1,[R0, #+0]
// 87 plink = *plink;
MOVS R0,R1
// 88 pblk = (INT8U *)((INT32U)pblk + blksize);
ADDS R1,R1,R5
// 89 }
SUBS R2,R2,#+1
BNE ??OSMemCreate_8
// 90 *plink = (void *)0; /* Last memory block points to NULL */
??OSMemCreate_7:
MOVS R1,#+0
STR R1,[R0, #+0]
// 91 pmem->OSMemAddr = addr; /* Store start address of memory partition */
LDR R0,[SP, #+0]
STR R0,[R7, #+0]
// 92 pmem->OSMemFreeList = addr; /* Initialize pointer to pool of free blocks */
LDR R0,[SP, #+0]
STR R0,[R7, #+4]
// 93 pmem->OSMemNFree = nblks; /* Store number of free blocks in MCB */
STR R4,[R7, #+16]
// 94 pmem->OSMemNBlks = nblks;
STR R4,[R7, #+12]
// 95 pmem->OSMemBlkSize = blksize; /* Store block size of each memory blocks */
STR R5,[R7, #+8]
// 96 *err = OS_NO_ERR;
STRB R1,[R6, #+0]
// 97 return (pmem);
MOVS R0,R7
??OSMemCreate_2:
ADD SP,SP,#+4
CFI CFA R13+20
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -