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 + -
显示快捷键?