📄 os_mem.lst
字号:
##############################################################################
# #
# IAR MSP430 C-Compiler V1.26A/WIN #
# #
# Time limited license: 29 days left #
# #
# Compile time = 30/Sep/2002 18:04:11 #
# Target option = SP430x31x #
# Memory model = small #
# Source file = c:\software\ucos-ii\source\os_mem.c #
# List file = j:\software\ucos-ii\ti-msp430\iar\source\debug\list\os_mem.lst#
# Object file = j:\software\ucos-ii\ti-msp430\iar\source\debug\obj\os_mem.r43#
# ASM file = j:\software\ucos-ii\ti-msp430\iar\source\debug\list\os_mem.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_MEM.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
\ 0000 NAME os_mem(16)
\ 0000 RSEG CODE(1)
\ 0000 PUBLIC OSMemCreate
\ 0000 EXTERN OSMemFreeList
\ 0000 PUBLIC OSMemGet
\ 0000 PUBLIC OSMemPut
\ 0000 PUBLIC OSMemQuery
\ 0000 EXTERN OSMemTbl
\ 0000 PUBLIC OS_MemInit
\ 0000 EXTERN ?CL430_1_26_L08
\ 0000 RSEG CODE
\ 0000 OSMemCreate:
1 /*
2 *********************************************************************************************************
3 * uC/OS-II
4 * The Real-Time Kernel
5 * MEMORY MANAGEMENT
6 *
7 * (c) Copyright 1992-2002, 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 "includes.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
48 OS_MEM *OSMemCreate (void *addr, INT32U nblks, INT32U blksize, INT8U *err)
49 {
\ 0000 0A12 PUSH R10
\ 0002 0B12 PUSH R11
\ 0004 0812 PUSH R8
\ 0006 0912 PUSH R9
\ 0008 0612 PUSH R6
\ 000A 0712 PUSH R7
\ 000C 0412 PUSH R4
\ 000E 0512 PUSH R5
\ 0010 31800600 SUB #6,SP
\ 0014 0A4C MOV R12,R10
\ 0016 18411800 MOV 24(SP),R8
\ 001A 19411A00 MOV 26(SP),R9
\ 001E 1B411C00 MOV 28(SP),R11
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. */
\ 0022 0A93 CMP #0,R10
\ 0024 0520 JNE (?0059)
61 *err = OS_MEM_INVALID_ADDR;
\ 0026 FB407600 MOV.B #118,0(R11)
\ 002A 0000
62 return ((OS_MEM *)0);
\ 002C 0C43 MOV #0,R12
63 }
\ 002E 5A3C JMP (?0072)
\ 0030 ?0059:
64 if (nblks < 2) { /* Must have at least 2 blocks per partition */
\ 0030 0C4E MOV R14,R12
\ 0032 0D4F MOV R15,R13
\ 0034 2C83 SUB #2,R12
\ 0036 0D73 SUBC #0,R13
\ 0038 052C JC (?0061)
65 *err = OS_MEM_INVALID_BLKS;
\ 003A FB406F00 MOV.B #111,0(R11)
\ 003E 0000
66 return ((OS_MEM *)0);
\ 0040 0C43 MOV #0,R12
67 }
\ 0042 503C JMP (?0072)
\ 0044 ?0061:
68 if (blksize < sizeof(void *)) { /* Must contain space for at least a pointer */
\ 0044 0C48 MOV R8,R12
\ 0046 0D49 MOV R9,R13
\ 0048 2C83 SUB #2,R12
\ 004A 0D73 SUBC #0,R13
\ 004C 052C JC (?0063)
69 *err = OS_MEM_INVALID_SIZE;
\ 004E FB407000 MOV.B #112,0(R11)
\ 0052 0000
70 return ((OS_MEM *)0);
\ 0054 0C43 MOV #0,R12
71 }
\ 0056 463C JMP (?0072)
\ 0058 ?0063:
72 #endif
73 OS_ENTER_CRITICAL();
\ 0058 32C2 DINT
74 pmem = OSMemFreeList; /* Get next free memory partition */
\ 005A 14420000 MOV &OSMemFreeList,R4
75 if (OSMemFreeList != (OS_MEM *)0) { /* See if pool of free partitions was empty */
\ 005E 82930000 CMP #0,&OSMemFreeList
\ 0062 0524 JEQ (?0065)
76 OSMemFreeList = (OS_MEM *)OSMemFreeList->OSMemFreeList;
\ 0064 1C420000 MOV &OSMemFreeList,R12
\ 0068 924C0200 MOV 2(R12),&OSMemFreeList
\ 006C 0000
\ 006E ?0065:
77 }
78 OS_EXIT_CRITICAL();
\ 006E 32D2 EINT
79 if (pmem == (OS_MEM *)0) { /* See if we have a memory partition */
\ 0070 0493 CMP #0,R4
\ 0072 0520 JNE (?0067)
80 *err = OS_MEM_INVALID_PART;
\ 0074 FB406E00 MOV.B #110,0(R11)
\ 0078 0000
81 return ((OS_MEM *)0);
\ 007A 0C43 MOV #0,R12
82 }
\ 007C 333C JMP (?0072)
\ 007E ?0067:
83 plink = (void **)addr; /* Create linked list of free memory blocks */
\ 007E 814A0000 MOV R10,0(SP)
84 pblk = (INT8U *)addr + blksize;
\ 0082 054A MOV R10,R5
\ 0084 0558 ADD R8,R5
85 for (i = 0; i < (nblks - 1); i++) {
\ 0086 81430200 MOV #0,2(SP)
\ 008A 81430400 MOV #0,4(SP)
\ 008E ?0069:
\ 008E 064E MOV R14,R6
\ 0090 074F MOV R15,R7
\ 0092 3653 ADD #65535,R6
\ 0094 3763 ADDC #-1,R7
\ 0096 1C410200 MOV 2(SP),R12
\ 009A 1D410400 MOV 4(SP),R13
\ 009E 0C86 SUB R6,R12
\ 00A0 0D77 SUBC R7,R13
\ 00A2 2C41 MOV @SP,R12
\ 00A4 0A2C JC (?0068)
86 *plink = (void *)pblk;
\ 00A6 8C450000 MOV R5,0(R12)
87 plink = (void **)pblk;
\ 00AA 81450000 MOV R5,0(SP)
88 pblk = pblk + blksize;
\ 00AE 0558 ADD R8,R5
\ 00B0 91530200 ADD #1,2(SP)
\ 00B4 81630400 ADDC #0,4(SP)
\ 00B8 EA3F JMP (?0069)
\ 00BA ?0068:
89 }
90 *plink = (void *)0; /* Last memory block points to NULL */
\ 00BA 8C430000 MOV #0,0(R12)
91 pmem->OSMemAddr = addr; /* Store start address of memory partition */
\ 00BE 844A0000 MOV R10,0(R4)
92 pmem->OSMemFreeList = addr; /* Initialize pointer to pool of free blocks */
\ 00C2 844A0200 MOV R10,2(R4)
93 pmem->OSMemNFree = nblks; /* Store number of free blocks in MCB */
\ 00C6 844E0C00 MOV R14,12(R4)
\ 00CA 844F0E00 MOV R15,14(R4)
94 pmem->OSMemNBlks = nblks;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -