os_mem.ls1

来自「在51单片机上移植成功的UCOS-II操作系统源代码,包括源代码及相关注释」· LS1 代码 · 共 464 行 · 第 1/2 页

LS1
464
字号
                             ****************
                     190     ; */
                     191     ; 
                     192     ; void *OSMemGet (OS_MEM *pmem, INT8U *err) reentrant
                     193     ; {
                     194     ;     void    *pblk;
                     195     ; 
                     196     ; 
                     197     ;     OS_ENTER_CRITICAL();
                     198     ;     if (pmem->OSMemNFree > 0) {                       /* See if there are any free memory
                              blocks       */
                     199     ;         pblk                = pmem->OSMemFreeList;    /* Yes, point to next free memory b
                             lock          */
                     200     ;         pmem->OSMemFreeList = *(void **)pblk;         /*      Adjust pointer to new free 
                             list          */
                     201     ;         pmem->OSMemNFree--;                           /*      One less memory block in th
                             is partition  */
                     202     ;         OS_EXIT_CRITICAL();
                     203     ;         *err = OS_NO_ERR;                             /*      No error                   
                                           */
                     204     ;         return (pblk);                                /*      Return memory block to call
                             er            */
                     205     ;     } else {
                     206     ;         OS_EXIT_CRITICAL();
                     207     ;         *err = OS_MEM_NO_FREE_BLKS;                   /* No,  Notify caller of empty memo
                             ry partition  */
                     208     ;         return ((void *)0);                           /*      Return NULL pointer to call
                             er            */
                     209     ;     }
                     210     ; }
                     211     ; /*$PAGE*/
                     212     ; /*
                     213     ; *****************************************************************************************
                             ****************
                     214     ; *                                    INITIALIZE MEMORY PARTITION MANAGER
                     215     ; *
                     216     ; * Description : This function is called by uC/OS-II to initialize the memory partition ma
                             nager.  Your
                     217     ; *               application MUST NOT call this function.
A51 MACRO ASSEMBLER  OS_MEM                                                               09/09/2007 21:12:48 PAGE     5

                     218     ; *
                     219     ; * Arguments   : none
                     220     ; *
                     221     ; * Returns     : none
                     222     ; *****************************************************************************************
                             ****************
                     223     ; */
                     224     ; 
                     225     ; void OSMemInit (void) reentrant
                     226     ; {
                     227     ;     OS_MEM  *pmem;
                     228     ;     INT16U   i;
                     229     ; 
                     230     ; 
                     231     ;     pmem = (OS_MEM *)&OSMemTbl[0];                    /* Point to memory control block (M
                             CB)           */
                     232     ;     for (i = 0; i < (OS_MAX_MEM_PART - 1); i++) {     /* Init. list of free memory partit
                             ions          */
                     233     ;         pmem->OSMemFreeList = (void *)&OSMemTbl[i+1]; /* Chain list of free partitions   
                                           */
                     234     ;         pmem->OSMemAddr     = (void *)0;              /* Store start address of memory pa
                             rtition       */
                     235     ;         pmem->OSMemNFree    = 0;                      /* No free blocks                  
                                           */
                     236     ;         pmem->OSMemNBlks    = 0;                      /* No blocks                       
                                           */
                     237     ;         pmem->OSMemBlkSize  = 0;                      /* Zero size                       
                                           */
                     238     ;         pmem++;
                     239     ;     }
                     240     ;     OSMemTbl[OS_MAX_MEM_PART - 1].OSMemFreeList = (void *)0;
                     241     ;     OSMemFreeList                               = (OS_MEM *)&OSMemTbl[0];
                     242     ; }
                     243     ; /*$PAGE*/
                     244     ; /*
                     245     ; *****************************************************************************************
                             ****************
                     246     ; *                                         RELEASE A MEMORY BLOCK
                     247     ; *
                     248     ; * Description : Returns a memory block to a partition
                     249     ; *
                     250     ; * Arguments   : pmem    is a pointer to the memory partition control block
                     251     ; *
                     252     ; *               pblk    is a pointer to the memory block being released.
                     253     ; *
                     254     ; * Returns     : OS_NO_ERR         if the memory block was inserted into the partition
                     255     ; *               OS_MEM_FULL       if you are returning a memory block to an already FULL 
                             memory partition
                     256     ; *                                 (You freed more blocks than you allocated!)
                     257     ; *****************************************************************************************
                             ****************
                     258     ; */
                     259     ; 
                     260     ; INT8U OSMemPut (OS_MEM  *pmem, void *pblk) reentrant
                     261     ; {
                     262     ;     OS_ENTER_CRITICAL();
                     263     ;     if (pmem->OSMemNFree >= pmem->OSMemNBlks) {  /* Make sure all blocks not already retu
                             rned          */
                     264     ;         OS_EXIT_CRITICAL();
                     265     ;         return (OS_MEM_FULL);       
                     266     ;     }
                     267     ;     *(void **)pblk      = pmem->OSMemFreeList;   /* Insert released block into free block
                              list         */
                     268     ;     pmem->OSMemFreeList = pblk;
                     269     ;     pmem->OSMemNFree++;                          /* One more memory block in this partiti
                             on            */
A51 MACRO ASSEMBLER  OS_MEM                                                               09/09/2007 21:12:48 PAGE     6

                     270     ;     OS_EXIT_CRITICAL();
                     271     ;     return (OS_NO_ERR);                          /* Notify caller that memory block was r
                             eleased       */
                     272     ; }
                     273     ; /*$PAGE*/
                     274     ; /*
                     275     ; *****************************************************************************************
                             ****************
                     276     ; *                                          QUERY MEMORY PARTITION
                     277     ; *
                     278     ; * Description : This function is used to determine the number of free memory blocks and t
                             he number of 
                     279     ; *               used memory blocks from a memory partition.
                     280     ; *
                     281     ; * Arguments   : pmem    is a pointer to the memory partition control block
                     282     ; *
                     283     ; *               pdata   is a pointer to a structure that will contain information about t
                             he memory
                     284     ; *                       partition.
                     285     ; *
                     286     ; * Returns     : OS_NO_ERR         Always returns no error.
                     287     ; *****************************************************************************************
                             ****************
                     288     ; */
                     289     ; 
                     290     ; INT8U OSMemQuery (OS_MEM *pmem, OS_MEM_DATA *ppdata) reentrant
                     291     ; {
                     292     ;     OS_ENTER_CRITICAL();
                     293     ;     ppdata->OSAddr     = pmem->OSMemAddr;
                     294     ;     ppdata->OSFreeList = pmem->OSMemFreeList;
                     295     ;     ppdata->OSBlkSize  = pmem->OSMemBlkSize;
                     296     ;     ppdata->OSNBlks    = pmem->OSMemNBlks;
                     297     ;     ppdata->OSNFree    = pmem->OSMemNFree;
                     298     ;     OS_EXIT_CRITICAL();
                     299     ;     ppdata->OSNUsed    = ppdata->OSNBlks - ppdata->OSNFree;
                     300     ;     return (OS_NO_ERR);                         
                     301     ; }
                     302     ; #endif
                     303     ; *** sync lost ***
                     304     ; *** sync lost ***
                     305     ; *** sync lost ***
                     306             END
A51 MACRO ASSEMBLER  OS_MEM                                                               09/09/2007 21:12:48 PAGE     7

SYMBOL TABLE LISTING
------ ----- -------


N A M E             T Y P E  V A L U E   ATTRIBUTES

AC . . . . . . . .  B ADDR   00D0H.6 A   
ACC. . . . . . . .  D ADDR   00E0H   A   
B. . . . . . . . .  D ADDR   00F0H   A   
CY . . . . . . . .  B ADDR   00D0H.7 A   
DPH. . . . . . . .  D ADDR   0083H   A   
DPL. . . . . . . .  D ADDR   0082H   A   
EA . . . . . . . .  B ADDR   00A8H.7 A   
ES . . . . . . . .  B ADDR   00A8H.4 A   
ET0. . . . . . . .  B ADDR   00A8H.1 A   
ET1. . . . . . . .  B ADDR   00A8H.3 A   
EX0. . . . . . . .  B ADDR   00A8H.0 A   
EX1. . . . . . . .  B ADDR   00A8H.2 A   
F0 . . . . . . . .  B ADDR   00D0H.5 A   
IE . . . . . . . .  D ADDR   00A8H   A   
IE0. . . . . . . .  B ADDR   0088H.1 A   
IE1. . . . . . . .  B ADDR   0088H.3 A   
INT0 . . . . . . .  B ADDR   00B0H.2 A   
INT1 . . . . . . .  B ADDR   00B0H.3 A   
IP . . . . . . . .  D ADDR   00B8H   A   
IT0. . . . . . . .  B ADDR   0088H.0 A   
IT1. . . . . . . .  B ADDR   0088H.2 A   
OS_MEM . . . . . .  N NUMB   -----       
OV . . . . . . . .  B ADDR   00D0H.2 A   
P. . . . . . . . .  B ADDR   00D0H.0 A   
P0 . . . . . . . .  D ADDR   0080H   A   
P1 . . . . . . . .  D ADDR   0090H   A   
P2 . . . . . . . .  D ADDR   00A0H   A   
P3 . . . . . . . .  D ADDR   00B0H   A   
PCON . . . . . . .  D ADDR   0087H   A   
PS . . . . . . . .  B ADDR   00B8H.4 A   
PSW. . . . . . . .  D ADDR   00D0H   A   
PT0. . . . . . . .  B ADDR   00B8H.1 A   
PT1. . . . . . . .  B ADDR   00B8H.3 A   
PX0. . . . . . . .  B ADDR   00B8H.0 A   
PX1. . . . . . . .  B ADDR   00B8H.2 A   
RB8. . . . . . . .  B ADDR   0098H.2 A   
RD . . . . . . . .  B ADDR   00B0H.7 A   
REN. . . . . . . .  B ADDR   0098H.4 A   
RI . . . . . . . .  B ADDR   0098H.0 A   
RS0. . . . . . . .  B ADDR   00D0H.3 A   
RS1. . . . . . . .  B ADDR   00D0H.4 A   
RXD. . . . . . . .  B ADDR   00B0H.0 A   
SBUF . . . . . . .  D ADDR   0099H   A   
SCON . . . . . . .  D ADDR   0098H   A   
SM0. . . . . . . .  B ADDR   0098H.7 A   
SM1. . . . . . . .  B ADDR   0098H.6 A   
SM2. . . . . . . .  B ADDR   0098H.5 A   
SP . . . . . . . .  D ADDR   0081H   A   
T0 . . . . . . . .  B ADDR   00B0H.4 A   
T1 . . . . . . . .  B ADDR   00B0H.5 A   
TB8. . . . . . . .  B ADDR   0098H.3 A   
TCON . . . . . . .  D ADDR   0088H   A   
TF0. . . . . . . .  B ADDR   0088H.5 A   
TF1. . . . . . . .  B ADDR   0088H.7 A   
TH0. . . . . . . .  D ADDR   008CH   A   
TH1. . . . . . . .  D ADDR   008DH   A   
TI . . . . . . . .  B ADDR   0098H.1 A   
TL0. . . . . . . .  D ADDR   008AH   A   
TL1. . . . . . . .  D ADDR   008BH   A   
TMOD . . . . . . .  D ADDR   0089H   A   
A51 MACRO ASSEMBLER  OS_MEM                                                               09/09/2007 21:12:48 PAGE     8

TR0. . . . . . . .  B ADDR   0088H.4 A   
TR1. . . . . . . .  B ADDR   0088H.6 A   
TXD. . . . . . . .  B ADDR   00B0H.1 A   
WR . . . . . . . .  B ADDR   00B0H.6 A   


REGISTER BANK(S) USED: 0 

ASSEMBLY COMPLETE.  0 WARNING(S), 0 ERROR(S)

⌨️ 快捷键说明

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