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

📄 os_sem.lst

📁 称植到lpc2124上的UCOS2.85版 是本人初学移植和ARM的成果 可能已有人上传类似的了
💻 LST
📖 第 1 页 / 共 5 页
字号:
   1               		.file	"os_sem.c"
   2               		.arch atmega128
   3               	__SREG__ = 0x3f
   4               	__SP_H__ = 0x3e
   5               	__SP_L__ = 0x3d
   6               	__tmp_reg__ = 0
   7               	__zero_reg__ = 1
   8               		.global __do_copy_data
   9               		.global __do_clear_bss
  11               		.text
  12               	.Ltext0:
 108               	.global	OSSemAccept
 110               	OSSemAccept:
   1:../OSsrc/os_sem.c **** /*
   2:../OSsrc/os_sem.c **** ***************************************************************************************************
   3:../OSsrc/os_sem.c **** *                                                uC/OS-II
   4:../OSsrc/os_sem.c **** *                                          The Real-Time Kernel
   5:../OSsrc/os_sem.c **** *                                          SEMAPHORE MANAGEMENT
   6:../OSsrc/os_sem.c **** *
   7:../OSsrc/os_sem.c **** *                          (c) Copyright 1992-2007, Jean J. Labrosse, Weston, FL
   8:../OSsrc/os_sem.c **** *                                           All Rights Reserved
   9:../OSsrc/os_sem.c **** *
  10:../OSsrc/os_sem.c **** * File    : OS_SEM.C
  11:../OSsrc/os_sem.c **** * By      : Jean J. Labrosse
  12:../OSsrc/os_sem.c **** * Version : V2.85
  13:../OSsrc/os_sem.c **** *
  14:../OSsrc/os_sem.c **** * LICENSING TERMS:
  15:../OSsrc/os_sem.c **** * ---------------
  16:../OSsrc/os_sem.c **** *   uC/OS-II is provided in source form for FREE evaluation, for educational use or for peaceful re
  17:../OSsrc/os_sem.c **** * If you plan on using  uC/OS-II  in a commercial product you need to contact Micri祄 to properly l
  18:../OSsrc/os_sem.c **** * its use in your product. We provide ALL the source code for your convenience and to help you expe
  19:../OSsrc/os_sem.c **** * uC/OS-II.   The fact that the  source is provided does  NOT  mean that you can use it without  pa
  20:../OSsrc/os_sem.c **** * licensing fee.
  21:../OSsrc/os_sem.c **** ***************************************************************************************************
  22:../OSsrc/os_sem.c **** */
  23:../OSsrc/os_sem.c **** 
  24:../OSsrc/os_sem.c **** #ifndef  OS_MASTER_FILE
  25:../OSsrc/os_sem.c **** #include <ucos_ii.h>
  26:../OSsrc/os_sem.c **** #endif
  27:../OSsrc/os_sem.c **** 
  28:../OSsrc/os_sem.c **** #if OS_SEM_EN > 0
  29:../OSsrc/os_sem.c **** /*$PAGE*/
  30:../OSsrc/os_sem.c **** /*
  31:../OSsrc/os_sem.c **** ***************************************************************************************************
  32:../OSsrc/os_sem.c **** *                                           ACCEPT SEMAPHORE
  33:../OSsrc/os_sem.c **** *
  34:../OSsrc/os_sem.c **** * Description: This function checks the semaphore to see if a resource is available or, if an event
  35:../OSsrc/os_sem.c **** *              occurred.  Unlike OSSemPend(), OSSemAccept() does not suspend the calling task if th
  36:../OSsrc/os_sem.c **** *              resource is not available or the event did not occur.
  37:../OSsrc/os_sem.c **** *
  38:../OSsrc/os_sem.c **** * Arguments  : pevent     is a pointer to the event control block
  39:../OSsrc/os_sem.c **** *
  40:../OSsrc/os_sem.c **** * Returns    : >  0       if the resource is available or the event did not occur the semaphore is
  41:../OSsrc/os_sem.c **** *                         decremented to obtain the resource.
  42:../OSsrc/os_sem.c **** *              == 0       if the resource is not available or the event did not occur or,
  43:../OSsrc/os_sem.c **** *                         if 'pevent' is a NULL pointer or,
  44:../OSsrc/os_sem.c **** *                         if you didn't pass a pointer to a semaphore
  45:../OSsrc/os_sem.c **** ***************************************************************************************************
  46:../OSsrc/os_sem.c **** */
  47:../OSsrc/os_sem.c **** 
  48:../OSsrc/os_sem.c **** #if OS_SEM_ACCEPT_EN > 0
  49:../OSsrc/os_sem.c **** INT16U  OSSemAccept (OS_EVENT *pevent)
  50:../OSsrc/os_sem.c **** {
 112               	.LM1:
 113               	/* prologue: frame size=0 */
 114               	/* prologue end (size=0) */
 115 0000 FC01      		movw r30,r24
  51:../OSsrc/os_sem.c ****     INT16U     cnt;
  52:../OSsrc/os_sem.c **** #if OS_CRITICAL_METHOD == 3                           /* Allocate storage for CPU status register  
  53:../OSsrc/os_sem.c ****     OS_CPU_SR  cpu_sr = 0;
  54:../OSsrc/os_sem.c **** #endif
  55:../OSsrc/os_sem.c **** 
  56:../OSsrc/os_sem.c **** 
  57:../OSsrc/os_sem.c **** 
  58:../OSsrc/os_sem.c **** #if OS_ARG_CHK_EN > 0
  59:../OSsrc/os_sem.c ****     if (pevent == (OS_EVENT *)0) {                    /* Validate 'pevent'                         
 117               	.LM2:
 118 0002 0097      		sbiw r24,0
 119 0004 09F4      		brne .L2
  60:../OSsrc/os_sem.c ****         return (0);
 121               	.LM3:
 122 0006 0895      		ret
 123               	.L2:
  61:../OSsrc/os_sem.c ****     }
  62:../OSsrc/os_sem.c **** #endif
  63:../OSsrc/os_sem.c ****     if (pevent->OSEventType != OS_EVENT_TYPE_SEM) {   /* Validate event block type                 
 125               	.LM4:
 126 0008 8081      		ld r24,Z
 127 000a 8330      		cpi r24,lo8(3)
 128 000c 19F0      		breq .L3
  64:../OSsrc/os_sem.c ****         return (0);
 130               	.LM5:
 131 000e 80E0      		ldi r24,lo8(0)
 132 0010 90E0      		ldi r25,hi8(0)
 133 0012 0895      		ret
 134               	.L3:
  65:../OSsrc/os_sem.c ****     }
  66:../OSsrc/os_sem.c ****     OS_ENTER_CRITICAL();
 136               	.LM6:
 137               	/* #APP */
 138 0014 F894      		cli
  67:../OSsrc/os_sem.c ****     cnt = pevent->OSEventCnt;
 140               	.LM7:
 141               	/* #NOAPP */
 142 0016 8381      		ldd r24,Z+3
 143 0018 9481      		ldd r25,Z+4
  68:../OSsrc/os_sem.c ****     if (cnt > 0) {                                    /* See if resource is available              
 145               	.LM8:
 146 001a 0097      		sbiw r24,0
 147 001c 21F0      		breq .L4
  69:../OSsrc/os_sem.c ****         pevent->OSEventCnt--;                         /* Yes, decrement semaphore and notify caller
 149               	.LM9:
 150 001e 0197      		sbiw r24,1
 151 0020 9483      		std Z+4,r25
 152 0022 8383      		std Z+3,r24
 153 0024 0196      		adiw r24,1
 154               	.L4:
  70:../OSsrc/os_sem.c ****     }
  71:../OSsrc/os_sem.c ****     OS_EXIT_CRITICAL();
 156               	.LM10:
 157               	/* #APP */
 158 0026 7894      		sei
  72:../OSsrc/os_sem.c ****     return (cnt);                                     /* Return semaphore count                    
  73:../OSsrc/os_sem.c **** }
 160               	.LM11:
 161               	/* #NOAPP */
 162 0028 0895      		ret
 163               	/* epilogue: frame size=0 */
 164               	/* epilogue: noreturn */
 165               	/* epilogue end (size=0) */
 166               	/* function OSSemAccept size 23 (23) */
 171               	.Lscope0:
 174               	.global	OSSemCreate
 176               	OSSemCreate:
  74:../OSsrc/os_sem.c **** #endif
  75:../OSsrc/os_sem.c **** 
  76:../OSsrc/os_sem.c **** /*$PAGE*/
  77:../OSsrc/os_sem.c **** /*
  78:../OSsrc/os_sem.c **** ***************************************************************************************************
  79:../OSsrc/os_sem.c **** *                                           CREATE A SEMAPHORE
  80:../OSsrc/os_sem.c **** *
  81:../OSsrc/os_sem.c **** * Description: This function creates a semaphore.
  82:../OSsrc/os_sem.c **** *
  83:../OSsrc/os_sem.c **** * Arguments  : cnt           is the initial value for the semaphore.  If the value is 0, no resourc
  84:../OSsrc/os_sem.c **** *                            available (or no event has occurred).  You initialize the semaphore to
  85:../OSsrc/os_sem.c **** *                            non-zero value to specify how many resources are available (e.g. if yo
  86:../OSsrc/os_sem.c **** *                            10 resources, you would initialize the semaphore to 10).
  87:../OSsrc/os_sem.c **** *
  88:../OSsrc/os_sem.c **** * Returns    : != (void *)0  is a pointer to the event control block (OS_EVENT) associated with the
  89:../OSsrc/os_sem.c **** *                            created semaphore
  90:../OSsrc/os_sem.c **** *              == (void *)0  if no event control blocks were available
  91:../OSsrc/os_sem.c **** ***************************************************************************************************
  92:../OSsrc/os_sem.c **** */
  93:../OSsrc/os_sem.c **** 
  94:../OSsrc/os_sem.c **** OS_EVENT  *OSSemCreate (INT16U cnt)
  95:../OSsrc/os_sem.c **** {
 178               	.LM12:
 179               	/* prologue: frame size=0 */
 180 002a CF93      		push r28
 181 002c DF93      		push r29
 182               	/* prologue end (size=2) */
 183 002e 9C01      		movw r18,r24
  96:../OSsrc/os_sem.c ****     OS_EVENT  *pevent;
  97:../OSsrc/os_sem.c **** #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status regis
  98:../OSsrc/os_sem.c ****     OS_CPU_SR  cpu_sr = 0;
  99:../OSsrc/os_sem.c **** #endif
 100:../OSsrc/os_sem.c **** 
 101:../OSsrc/os_sem.c **** 
 102:../OSsrc/os_sem.c **** 
 103:../OSsrc/os_sem.c ****     if (OSIntNesting > 0) {                                /* See if called from ISR ...           
 185               	.LM13:
 186 0030 8091 0000 		lds r24,OSIntNesting
 187 0034 8823      		tst r24
 188 0036 19F0      		breq .L6
 104:../OSsrc/os_sem.c ****         return ((OS_EVENT *)0);                            /* ... can't CREATE from an ISR         
 190               	.LM14:
 191 0038 80E0      		ldi r24,lo8(0)
 192 003a 90E0      		ldi r25,hi8(0)
 193 003c 1DC0      		rjmp .L5
 194               	.L6:
 105:../OSsrc/os_sem.c ****     }
 106:../OSsrc/os_sem.c ****     OS_ENTER_CRITICAL();
 196               	.LM15:
 197               	/* #APP */
 198 003e F894      		cli
 107:../OSsrc/os_sem.c ****     pevent = OSEventFreeList;                              /* Get next free event control block    
 200               	.LM16:
 201               	/* #NOAPP */
 202 0040 C091 0000 		lds r28,OSEventFreeList
 203 0044 D091 0000 		lds r29,(OSEventFreeList)+1
 108:../OSsrc/os_sem.c ****     if (OSEventFreeList != (OS_EVENT *)0) {                /* See if pool of free ECB pool was empt
 205               	.LM17:
 206 0048 2097      		sbiw r28,0
 207 004a 31F0      		breq .L7
 109:../OSsrc/os_sem.c ****         OSEventFreeList = (OS_EVENT *)OSEventFreeList->OSEventPtr;
 209               	.LM18:
 210 004c 8981      		ldd r24,Y+1
 211 004e 9A81      		ldd r25,Y+2
 212 0050 9093 0000 		sts (OSEventFreeList)+1,r25
 213 0054 8093 0000 		sts OSEventFreeList,r24
 214               	.L7:
 110:../OSsrc/os_sem.c ****     }
 111:../OSsrc/os_sem.c ****     OS_EXIT_CRITICAL();
 216               	.LM19:
 217               	/* #APP */
 218 0058 7894      		sei
 112:../OSsrc/os_sem.c ****     if (pevent != (OS_EVENT *)0) {                         /* Get an event control block           
 220               	.LM20:
 221               	/* #NOAPP */
 222 005a 2097      		sbiw r28,0
 223 005c 61F0      		breq .L8
 113:../OSsrc/os_sem.c ****         pevent->OSEventType    = OS_EVENT_TYPE_SEM;
 225               	.LM21:
 226 005e 83E0      		ldi r24,lo8(3)
 227 0060 8883      		st Y,r24
 114:../OSsrc/os_sem.c ****         pevent->OSEventCnt     = cnt;                      /* Set semaphore value                  
 229               	.LM22:
 230 0062 3C83      		std Y+4,r19
 231 0064 2B83      		std Y+3,r18
 115:../OSsrc/os_sem.c ****         pevent->OSEventPtr     = (void *)0;                /* Unlink from ECB free list            
 233               	.LM23:
 234 0066 1A82      		std Y+2,__zero_reg__
 235 0068 1982      		std Y+1,__zero_reg__
 116:../OSsrc/os_sem.c **** #if OS_EVENT_NAME_SIZE > 1
 117:../OSsrc/os_sem.c ****         pevent->OSEventName[0] = '?';                      /* Unknown name                         
 237               	.LM24:
 238 006a 8FE3      		ldi r24,lo8(63)
 239 006c 8E87      		std Y+14,r24
 118:../OSsrc/os_sem.c ****         pevent->OSEventName[1] = OS_ASCII_NUL;
 241               	.LM25:
 242 006e 1F86      		std Y+15,__zero_reg__
 119:../OSsrc/os_sem.c **** #endif
 120:../OSsrc/os_sem.c ****         OS_EventWaitListInit(pevent);                      /* Initialize to 'nobody waiting' on sem
 244               	.LM26:
 245 0070 CE01      		movw r24,r28
 246 0072 0E94 0000 		call OS_EventWaitListInit
 247               	.L8:
 121:../OSsrc/os_sem.c ****     }
 122:../OSsrc/os_sem.c ****     return (pevent);
 249               	.LM27:
 250 0076 CE01      		movw r24,r28
 251               	.L5:
 252               	/* epilogue: frame size=0 */
 253 0078 DF91      		pop r29
 254 007a CF91      		pop r28
 255 007c 0895      		ret
 256               	/* epilogue end (size=3) */
 257               	/* function OSSemCreate size 44 (39) */
 262               	.Lscope1:
 267               	.global	OSSemDel
 269               	OSSemDel:
 123:../OSsrc/os_sem.c **** }
 124:../OSsrc/os_sem.c **** 
 125:../OSsrc/os_sem.c **** /*$PAGE*/
 126:../OSsrc/os_sem.c **** /*

⌨️ 快捷键说明

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