os_mem.lst
来自「atmega单片机用的ucos系统 占用内存适中 是atmega单片机合适的操作」· LST 代码 · 共 1,065 行 · 第 1/4 页
LST
1,065 行
213:OSsrc/os_mem.c **** * pname is a pointer to an ASCII string that contains the name of the memory parti
214:OSsrc/os_mem.c **** *
215:OSsrc/os_mem.c **** * err is a pointer to an error code that can contain one of the following values
216:OSsrc/os_mem.c **** *
217:OSsrc/os_mem.c **** * OS_NO_ERR if the name was copied to 'pname'
218:OSsrc/os_mem.c **** * OS_MEM_INVALID_PMEM if you passed a NULL pointer for 'pmem'
219:OSsrc/os_mem.c **** * OS_ERR_PNAME_NULL You passed a NULL pointer for 'pname'
220:OSsrc/os_mem.c **** * OS_MEM_NAME_TOO_LONG if the name doesn't fit in the storage area
221:OSsrc/os_mem.c **** *
222:OSsrc/os_mem.c **** * Returns : None
223:OSsrc/os_mem.c **** ***************************************************************************************************
224:OSsrc/os_mem.c **** */
225:OSsrc/os_mem.c ****
226:OSsrc/os_mem.c **** #if OS_MEM_NAME_SIZE > 1
227:OSsrc/os_mem.c **** void OSMemNameSet (OS_MEM *pmem, char *pname, INT8U *err)
228:OSsrc/os_mem.c **** {
488 .LM59:
489 /* prologue: frame size=0 */
490 018a EF92 push r14
491 018c FF92 push r15
492 018e 0F93 push r16
493 0190 1F93 push r17
494 0192 CF93 push r28
495 0194 DF93 push r29
496 /* prologue end (size=6) */
497 0196 7C01 movw r14,r24
498 0198 EB01 movw r28,r22
499 019a 8A01 movw r16,r20
229:OSsrc/os_mem.c **** INT8U len;
230:OSsrc/os_mem.c **** #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register
231:OSsrc/os_mem.c **** OS_CPU_SR cpu_sr;
232:OSsrc/os_mem.c ****
233:OSsrc/os_mem.c ****
234:OSsrc/os_mem.c ****
235:OSsrc/os_mem.c **** cpu_sr = 0; /* Prevent compiler warning
236:OSsrc/os_mem.c **** #endif
237:OSsrc/os_mem.c **** OS_ENTER_CRITICAL();
501 .LM60:
502 /* #APP */
503 019c 0FB6 in __tmp_reg__,__SREG__
504 019e F894 cli
505 01a0 0F92 push __tmp_reg__
238:OSsrc/os_mem.c **** #if OS_ARG_CHK_EN > 0
239:OSsrc/os_mem.c **** if (pmem == (OS_MEM *)0) { /* Is 'pmem' a NULL pointer?
507 .LM61:
508 /* #NOAPP */
509 01a2 892B or r24,r25
510 01a4 21F4 brne .L24
240:OSsrc/os_mem.c **** OS_EXIT_CRITICAL(); /* Yes
512 .LM62:
513 /* #APP */
514 01a6 0F90 pop __tmp_reg__
515 01a8 0FBE out __SREG__,__tmp_reg__
241:OSsrc/os_mem.c **** *err = OS_MEM_INVALID_PMEM;
517 .LM63:
518 /* #NOAPP */
519 01aa 84E7 ldi r24,lo8(116)
520 01ac 0FC0 rjmp .L27
521 .L24:
242:OSsrc/os_mem.c **** return;
243:OSsrc/os_mem.c **** }
244:OSsrc/os_mem.c **** if (pname == (char *)0) { /* Is 'pname' a NULL pointer?
523 .LM64:
524 01ae 6115 cp r22,__zero_reg__
525 01b0 7105 cpc r23,__zero_reg__
526 01b2 21F4 brne .L25
245:OSsrc/os_mem.c **** OS_EXIT_CRITICAL(); /* Yes
528 .LM65:
529 /* #APP */
530 01b4 0F90 pop __tmp_reg__
531 01b6 0FBE out __SREG__,__tmp_reg__
246:OSsrc/os_mem.c **** *err = OS_ERR_PNAME_NULL;
533 .LM66:
534 /* #NOAPP */
535 01b8 8FE0 ldi r24,lo8(15)
536 01ba 08C0 rjmp .L27
537 .L25:
247:OSsrc/os_mem.c **** return;
248:OSsrc/os_mem.c **** }
249:OSsrc/os_mem.c **** #endif
250:OSsrc/os_mem.c **** len = OS_StrLen(pname); /* Can we fit the string in the storage area?
539 .LM67:
540 01bc CB01 movw r24,r22
541 01be 0E94 0000 call OS_StrLen
251:OSsrc/os_mem.c **** if (len > (OS_MEM_NAME_SIZE - 1)) { /* No
543 .LM68:
544 01c2 8032 cpi r24,lo8(32)
545 01c4 30F0 brlo .L26
252:OSsrc/os_mem.c **** OS_EXIT_CRITICAL();
547 .LM69:
548 /* #APP */
549 01c6 0F90 pop __tmp_reg__
550 01c8 0FBE out __SREG__,__tmp_reg__
253:OSsrc/os_mem.c **** *err = OS_MEM_NAME_TOO_LONG;
552 .LM70:
553 /* #NOAPP */
554 01ca 87E7 ldi r24,lo8(119)
555 .L27:
556 01cc F801 movw r30,r16
557 01ce 8083 st Z,r24
254:OSsrc/os_mem.c **** return;
559 .LM71:
560 01d0 09C0 rjmp .L23
561 .L26:
255:OSsrc/os_mem.c **** }
256:OSsrc/os_mem.c **** (void)OS_StrCopy(pmem->OSMemName, pname); /* Yes, copy name to the memory partition header
563 .LM72:
564 01d2 BE01 movw r22,r28
565 01d4 C701 movw r24,r14
566 01d6 4096 adiw r24,16
567 01d8 0E94 0000 call OS_StrCopy
257:OSsrc/os_mem.c **** OS_EXIT_CRITICAL();
569 .LM73:
570 /* #APP */
571 01dc 0F90 pop __tmp_reg__
572 01de 0FBE out __SREG__,__tmp_reg__
258:OSsrc/os_mem.c **** *err = OS_NO_ERR;
574 .LM74:
575 /* #NOAPP */
576 01e0 F801 movw r30,r16
577 01e2 1082 st Z,__zero_reg__
578 .L23:
579 /* epilogue: frame size=0 */
580 01e4 DF91 pop r29
581 01e6 CF91 pop r28
582 01e8 1F91 pop r17
583 01ea 0F91 pop r16
584 01ec FF90 pop r15
585 01ee EF90 pop r14
586 01f0 0895 ret
587 /* epilogue end (size=7) */
588 /* function OSMemNameSet size 63 (50) */
590 .Lscope3:
594 .global OSMemPut
596 OSMemPut:
259:OSsrc/os_mem.c **** }
260:OSsrc/os_mem.c **** #endif
261:OSsrc/os_mem.c ****
262:OSsrc/os_mem.c **** /*$PAGE*/
263:OSsrc/os_mem.c **** /*
264:OSsrc/os_mem.c **** ***************************************************************************************************
265:OSsrc/os_mem.c **** * RELEASE A MEMORY BLOCK
266:OSsrc/os_mem.c **** *
267:OSsrc/os_mem.c **** * Description : Returns a memory block to a partition
268:OSsrc/os_mem.c **** *
269:OSsrc/os_mem.c **** * Arguments : pmem is a pointer to the memory partition control block
270:OSsrc/os_mem.c **** *
271:OSsrc/os_mem.c **** * pblk is a pointer to the memory block being released.
272:OSsrc/os_mem.c **** *
273:OSsrc/os_mem.c **** * Returns : OS_NO_ERR if the memory block was inserted into the partition
274:OSsrc/os_mem.c **** * OS_MEM_FULL if you are returning a memory block to an already FULL memory
275:OSsrc/os_mem.c **** * partition (You freed more blocks than you allocated!)
276:OSsrc/os_mem.c **** * OS_MEM_INVALID_PMEM if you passed a NULL pointer for 'pmem'
277:OSsrc/os_mem.c **** * OS_MEM_INVALID_PBLK if you passed a NULL pointer for the block to release.
278:OSsrc/os_mem.c **** ***************************************************************************************************
279:OSsrc/os_mem.c **** */
280:OSsrc/os_mem.c ****
281:OSsrc/os_mem.c **** INT8U OSMemPut (OS_MEM *pmem, void *pblk)
282:OSsrc/os_mem.c **** {
598 .LM75:
599 /* prologue: frame size=0 */
600 01f2 CF93 push r28
601 01f4 DF93 push r29
602 /* prologue end (size=2) */
603 01f6 FC01 movw r30,r24
604 01f8 EB01 movw r28,r22
283:OSsrc/os_mem.c **** #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register
284:OSsrc/os_mem.c **** OS_CPU_SR cpu_sr;
285:OSsrc/os_mem.c ****
286:OSsrc/os_mem.c ****
287:OSsrc/os_mem.c ****
288:OSsrc/os_mem.c **** cpu_sr = 0; /* Prevent compiler warning
289:OSsrc/os_mem.c **** #endif
290:OSsrc/os_mem.c **** #if OS_ARG_CHK_EN > 0
291:OSsrc/os_mem.c **** if (pmem == (OS_MEM *)0) { /* Must point to a valid memory partition
606 .LM76:
607 01fa 892B or r24,r25
608 01fc 19F4 brne .L29
292:OSsrc/os_mem.c **** return (OS_MEM_INVALID_PMEM);
610 .LM77:
611 01fe 84E7 ldi r24,lo8(116)
612 0200 90E0 ldi r25,hi8(116)
613 0202 2DC0 rjmp .L28
614 .L29:
293:OSsrc/os_mem.c **** }
294:OSsrc/os_mem.c **** if (pblk == (void *)0) { /* Must release a valid block
616 .LM78:
617 0204 6115 cp r22,__zero_reg__
618 0206 7105 cpc r23,__zero_reg__
619 0208 19F4 brne .L30
295:OSsrc/os_mem.c **** return (OS_MEM_INVALID_PBLK);
621 .LM79:
622 020a 83E7 ldi r24,lo8(115)
623 020c 90E0 ldi r25,hi8(115)
624 020e 27C0 rjmp .L28
625 .L30:
296:OSsrc/os_mem.c **** }
297:OSsrc/os_mem.c **** #endif
298:OSsrc/os_mem.c **** OS_ENTER_CRITICAL();
627 .LM80:
628 /* #APP */
629 0210 0FB6 in __tmp_reg__,__SREG__
630 0212 F894 cli
631 0214 0F92 push __tmp_reg__
299:OSsrc/os_mem.c **** if (pmem->OSMemNFree >= pmem->OSMemNBlks) { /* Make sure all blocks not already returned
633 .LM81:
634 /* #NOAPP */
635 0216 2485 ldd r18,Z+12
636 0218 3585 ldd r19,Z+13
637 021a 4685 ldd r20,Z+14
638 021c 5785 ldd r21,Z+15
639 021e 8085 ldd r24,Z+8
640 0220 9185 ldd r25,Z+9
641 0222 A285 ldd r26,Z+10
642 0224 B385 ldd r27,Z+11
643 0226 2817 cp r18,r24
644 0228 3907 cpc r19,r25
645 022a 4A07 cpc r20,r26
646 022c 5B07 cpc r21,r27
647 022e 28F0 brlo .L31
300:OSsrc/os_mem.c **** OS_EXIT_CRITICAL();
649 .LM82:
650 /* #APP */
651 0230 0F90 pop __tmp_reg__
652 0232 0FBE out __SREG__,__tmp_reg__
301:OSsrc/os_mem.c **** return (OS_MEM_FULL);
654 .LM83:
655 /* #NOAPP */
656 0234 82E7 ldi r24,lo8(114)
657 0236 90E0 ldi r25,hi8(114)
658 0238 12C0 rjmp .L28
659 .L31:
302:OSsrc/os_mem.c **** }
303:OSsrc/os_mem.c **** *(void **)pblk = pmem->OSMemFreeList; /* Insert released block into free block list
661 .LM84:
662 023a 8281 ldd r24,Z+2
663 023c 9381 ldd r25,Z+3
664 023e 8883 st Y,r24
665 0240 9983 std Y+1,r25
304:OSsrc/os_mem.c **** pmem->OSMemFreeList = pblk;
667 .LM85:
668 0242 6283 std Z+2,r22
669 0244 7383 std Z+3,r23
305:OSsrc/os_mem.c **** pmem->OSMemNFree++; /* One more memory block in this partition
671 .LM86:
672 0246 2F5F subi r18,lo8(-(1))
673 0248 3F4F sbci r19,hi8(-(1))
674 024a 4F4F sbci r20,hlo8(-(1))
675 024c 5F4F sbci r21,hhi8(-(1))
676 024e 2487 std Z+12,r18
677 0250 3587 std Z+13,r19
678 0252 4687 std Z+14,r20
679 0254 5787 std Z+15,r21
306:OSsrc/os_mem.c **** OS_EXIT_CRITICAL();
681 .LM87:
682 /* #APP */
683 0256 0F90 pop __tmp_reg__
684 0258 0FBE out __SREG__,__tmp_reg__
307:OSsrc/os_mem.c **** return (OS_NO_ERR); /* Notify caller that memory block was released
686 .LM88:
687 /* #NOAPP */
688 025a 80E0 ldi r24,lo8(0)
689 025c 90E0 ldi r25,hi8(0)
690 .L28:
691 /* epilogue: frame size=0 */
692 025e DF91 pop r29
693 0260 CF91 pop r28
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?