⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 os_mem.txt

📁 一个电力系统谐波检测的程序
💻 TXT
📖 第 1 页 / 共 2 页
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.0 [Build 951] for uVision
; commandline ArmCC [--debug -c --asm --interleave -oos_mem.o --device=DARMP --apcs=interwork -O0 -IC:\Keil\ARM\INC\Philips uCosii\OS_MEM.C]

                          ARM

                          AREA ||.text.7||, CODE, READONLY, ALIGN=2

                  OSMemCreate PROC
;;;48     OS_MEM  *OSMemCreate (void *addr, INT32U nblks, INT32U blksize, INT8U *err)
;;;49     {
000000  e92d5ff0          PUSH     {r4-r12,lr}
000004  e1a06000          MOV      r6,r0
000008  e1a07001          MOV      r7,r1
00000c  e1a08002          MOV      r8,r2
000010  e1a09003          MOV      r9,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. */
000014  e3560000          CMP      r6,#0
000018  1a000004          BNE      |L1.48|
;;;61             *err = OS_MEM_INVALID_ADDR;
00001c  e3a00076          MOV      r0,#0x76
000020  e5c90000          STRB     r0,[r9,#0]
;;;62             return ((OS_MEM *)0);
000024  e3a00000          MOV      r0,#0
                  |L1.40|
000028  e8bd5ff0          POP      {r4-r12,lr}
;;;63         }
;;;64         if (nblks < 2) {                                  /* Must have at least 2 blocks per partition      */
;;;65             *err = OS_MEM_INVALID_BLKS;
;;;66             return ((OS_MEM *)0);
;;;67         }
;;;68         if (blksize < sizeof(void *)) {                   /* Must contain space for at least a pointer      */
;;;69             *err = OS_MEM_INVALID_SIZE;
;;;70             return ((OS_MEM *)0);
;;;71         }
;;;72     #endif
;;;73         OS_ENTER_CRITICAL();
;;;74         pmem = OSMemFreeList;                             /* Get next free memory partition                */
;;;75         if (OSMemFreeList != (OS_MEM *)0) {               /* See if pool of free partitions was empty      */
;;;76             OSMemFreeList = (OS_MEM *)OSMemFreeList->OSMemFreeList;
;;;77         }
;;;78         OS_EXIT_CRITICAL();
;;;79         if (pmem == (OS_MEM *)0) {                        /* See if we have a memory partition             */
;;;80             *err = OS_MEM_INVALID_PART;
;;;81             return ((OS_MEM *)0);
;;;82         }
;;;83         plink = (void **)addr;                            /* Create linked list of free memory blocks      */
;;;84         pblk  = (INT8U *)addr + blksize;
;;;85         for (i = 0; i < (nblks - 1); i++) {
;;;86             *plink = (void *)pblk;
;;;87             plink  = (void **)pblk;
;;;88             pblk   = pblk + blksize;
;;;89         }
;;;90         *plink              = (void *)0;                  /* Last memory block points to NULL              */
;;;91         pmem->OSMemAddr     = addr;                       /* Store start address of memory partition       */
;;;92         pmem->OSMemFreeList = addr;                       /* Initialize pointer to pool of free blocks     */
;;;93         pmem->OSMemNFree    = nblks;                      /* Store number of free blocks in MCB            */
;;;94         pmem->OSMemNBlks    = nblks;
;;;95         pmem->OSMemBlkSize  = blksize;                    /* Store block size of each memory blocks        */
;;;96         *err                = OS_NO_ERR;
;;;97         return (pmem);
;;;98     }
00002c  e12fff1e          BX       lr
                  |L1.48|
000030  e3570002          CMP      r7,#2                 ;64
000034  2a000003          BCS      |L1.72|               ;64
000038  e3a0006f          MOV      r0,#0x6f              ;65
00003c  e5c90000          STRB     r0,[r9,#0]            ;65
000040  e3a00000          MOV      r0,#0                 ;66
000044  eafffff7          B        |L1.40|               ;66
                  |L1.72|
000048  e3580004          CMP      r8,#4                 ;68
00004c  2a000003          BCS      |L1.96|               ;68
000050  e3a00070          MOV      r0,#0x70              ;69
000054  e5c90000          STRB     r0,[r9,#0]            ;69
000058  e3a00000          MOV      r0,#0                 ;70
00005c  eafffff1          B        |L1.40|               ;70
                  |L1.96|
000060  ef000002          SVC      0x2  ; formerly SWI   ;73
000064  e59f0268          LDR      r0,|L1.724|           ;74
000068  e590a000          LDR      r10,[r0,#0]           ;74  ; OSMemFreeList
00006c  e5900000          LDR      r0,[r0,#0]            ;75  ; OSMemFreeList
000070  e3500000          CMP      r0,#0                 ;75
000074  0a000004          BEQ      |L1.140|              ;75
000078  e59f0254          LDR      r0,|L1.724|           ;76
00007c  e5900000          LDR      r0,[r0,#0]            ;76  ; OSMemFreeList
000080  e5900004          LDR      r0,[r0,#4]            ;76
000084  e59f1248          LDR      r1,|L1.724|           ;76
000088  e5810000          STR      r0,[r1,#0]            ;76  ; OSMemFreeList
                  |L1.140|
00008c  ef000003          SVC      0x3  ; formerly SWI   ;78
000090  e35a0000          CMP      r10,#0                ;79
000094  1a000003          BNE      |L1.168|              ;79
000098  e3a0006e          MOV      r0,#0x6e              ;80
00009c  e5c90000          STRB     r0,[r9,#0]            ;80
0000a0  e3a00000          MOV      r0,#0                 ;81
0000a4  eaffffdf          B        |L1.40|               ;81
                  |L1.168|
0000a8  e1a05006          MOV      r5,r6                 ;83
0000ac  e1a05006          MOV      r5,r6                 ;84
0000b0  e0864008          ADD      r4,r6,r8              ;84
0000b4  e3a0b000          MOV      r11,#0                ;85
0000b8  ea000003          B        |L1.204|              ;85
                  |L1.188|
0000bc  e5854000          STR      r4,[r5,#0]            ;86
0000c0  e1a05004          MOV      r5,r4                 ;87
0000c4  e0844008          ADD      r4,r4,r8              ;88
0000c8  e28bb001          ADD      r11,r11,#1            ;85
                  |L1.204|
0000cc  e2470001          SUB      r0,r7,#1              ;85
0000d0  e150000b          CMP      r0,r11                ;85
0000d4  8afffff8          BHI      |L1.188|              ;85
0000d8  e3a00000          MOV      r0,#0                 ;90
0000dc  e5850000          STR      r0,[r5,#0]            ;90
0000e0  e58a6000          STR      r6,[r10,#0]           ;91
0000e4  e58a6004          STR      r6,[r10,#4]           ;92
0000e8  e58a7010          STR      r7,[r10,#0x10]        ;93
0000ec  e58a700c          STR      r7,[r10,#0xc]         ;94
0000f0  e58a8008          STR      r8,[r10,#8]           ;95
0000f4  e5c90000          STRB     r0,[r9,#0]            ;96
0000f8  e1a0000a          MOV      r0,r10                ;97
0000fc  eaffffc9          B        |L1.40|               ;97
                          ENDP

                  OSMemGet PROC
;;;120    void  *OSMemGet (OS_MEM *pmem, INT8U *err)
;;;121    {
000100  e92d4070          PUSH     {r4-r6,lr}
000104  e1a04000          MOV      r4,r0
000108  e1a06001          MOV      r6,r1
;;;122    #if OS_CRITICAL_METHOD == 3                           /* Allocate storage for CPU status register      */
;;;123        OS_CPU_SR  cpu_sr;
;;;124    #endif    
;;;125        void      *pblk;
;;;126    
;;;127    
;;;128    #if OS_ARG_CHK_EN > 0
;;;129        if (pmem == (OS_MEM *)0) {                        /* Must point to a valid memory partition         */
00010c  e3540000          CMP      r4,#0
000110  1a000004          BNE      |L1.296|
;;;130            *err = OS_MEM_INVALID_PMEM;
000114  e3a00074          MOV      r0,#0x74
000118  e5c60000          STRB     r0,[r6,#0]
;;;131            return ((OS_MEM *)0);
00011c  e3a00000          MOV      r0,#0
                  |L1.288|
000120  e8bd4070          POP      {r4-r6,lr}
;;;132        }
;;;133    #endif
;;;134        OS_ENTER_CRITICAL();
;;;135        if (pmem->OSMemNFree > 0) {                       /* See if there are any free memory blocks       */
;;;136            pblk                = pmem->OSMemFreeList;    /* Yes, point to next free memory block          */
;;;137            pmem->OSMemFreeList = *(void **)pblk;         /*      Adjust pointer to new free list          */
;;;138            pmem->OSMemNFree--;                           /*      One less memory block in this partition  */
;;;139            OS_EXIT_CRITICAL();
;;;140            *err = OS_NO_ERR;                             /*      No error                                 */
;;;141            return (pblk);                                /*      Return memory block to caller            */
;;;142        }
;;;143        OS_EXIT_CRITICAL();
;;;144        *err = OS_MEM_NO_FREE_BLKS;                       /* No,  Notify caller of empty memory partition  */
;;;145        return ((void *)0);                               /*      Return NULL pointer to caller            */
;;;146    }
000124  e12fff1e          BX       lr
                  |L1.296|
000128  ef000002          SVC      0x2  ; formerly SWI   ;134
00012c  e5940010          LDR      r0,[r4,#0x10]         ;135
000130  e3500000          CMP      r0,#0                 ;135
000134  0a00000a          BEQ      |L1.356|              ;135
000138  e5945004          LDR      r5,[r4,#4]            ;136
00013c  e5950000          LDR      r0,[r5,#0]            ;137
000140  e5840004          STR      r0,[r4,#4]            ;137
000144  e5940010          LDR      r0,[r4,#0x10]         ;138
000148  e2400001          SUB      r0,r0,#1              ;138
00014c  e5840010          STR      r0,[r4,#0x10]         ;138
000150  ef000003          SVC      0x3  ; formerly SWI   ;139
000154  e3a00000          MOV      r0,#0                 ;140
000158  e5c60000          STRB     r0,[r6,#0]            ;140
00015c  e1a00005          MOV      r0,r5                 ;141
000160  eaffffee          B        |L1.288|              ;141
                  |L1.356|

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -