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

📄 os_sem.lst

📁 AVR平台下的ucos版本
💻 LST
📖 第 1 页 / 共 3 页
字号:
   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:
 131               	.global	OSSemAccept
 133               	OSSemAccept:
   1:os/source/os_sem.c **** /*
   2:os/source/os_sem.c **** ***************************************************************************************************
   3:os/source/os_sem.c **** *                                                uC/OS-II
   4:os/source/os_sem.c **** *                                          The Real-Time Kernel
   5:os/source/os_sem.c **** *                                          SEMAPHORE MANAGEMENT
   6:os/source/os_sem.c **** *
   7:os/source/os_sem.c **** *                          (c) Copyright 1992-2001, Jean J. Labrosse, Weston, FL
   8:os/source/os_sem.c **** *                                           All Rights Reserved
   9:os/source/os_sem.c **** *
  10:os/source/os_sem.c **** * File : OS_SEM.C
  11:os/source/os_sem.c **** * By   : Jean J. Labrosse
  12:os/source/os_sem.c **** ***************************************************************************************************
  13:os/source/os_sem.c **** */
  14:os/source/os_sem.c **** 
  15:os/source/os_sem.c **** #ifndef  OS_MASTER_FILE
  16:os/source/os_sem.c **** #include <include.h>
  17:os/source/os_sem.c **** #endif
  18:os/source/os_sem.c **** 
  19:os/source/os_sem.c **** #if OS_SEM_EN > 0
  20:os/source/os_sem.c **** /*
  21:os/source/os_sem.c **** ***************************************************************************************************
  22:os/source/os_sem.c **** *                                           ACCEPT SEMAPHORE
  23:os/source/os_sem.c **** *
  24:os/source/os_sem.c **** * Description: This function checks the semaphore to see if a resource is available or, if an event
  25:os/source/os_sem.c **** *              occurred.  Unlike OSSemPend(), OSSemAccept() does not suspend the calling task if th
  26:os/source/os_sem.c **** *              resource is not available or the event did not occur.
  27:os/source/os_sem.c **** *
  28:os/source/os_sem.c **** * Arguments  : pevent     is a pointer to the event control block
  29:os/source/os_sem.c **** *
  30:os/source/os_sem.c **** * Returns    : >  0       if the resource is available or the event did not occur the semaphore is
  31:os/source/os_sem.c **** *                         decremented to obtain the resource.
  32:os/source/os_sem.c **** *              == 0       if the resource is not available or the event did not occur or,
  33:os/source/os_sem.c **** *                         if 'pevent' is a NULL pointer or,
  34:os/source/os_sem.c **** *                         if you didn't pass a pointer to a semaphore
  35:os/source/os_sem.c **** ***************************************************************************************************
  36:os/source/os_sem.c **** */
  37:os/source/os_sem.c **** 
  38:os/source/os_sem.c **** #if OS_SEM_ACCEPT_EN > 0
  39:os/source/os_sem.c **** INT16U  OSSemAccept (OS_EVENT *pevent)
  40:os/source/os_sem.c **** {
 135               	.LM1:
 136               	/* prologue: frame size=0 */
 137               	/* prologue end (size=0) */
 138 0000 FC01      		movw r30,r24
  41:os/source/os_sem.c **** #if OS_CRITICAL_METHOD == 3                           /* Allocate storage for CPU status register  
  42:os/source/os_sem.c ****     OS_CPU_SR  cpu_sr;
  43:os/source/os_sem.c **** #endif    
  44:os/source/os_sem.c ****     INT16U     cnt;
  45:os/source/os_sem.c **** 
  46:os/source/os_sem.c **** 
  47:os/source/os_sem.c **** #if OS_ARG_CHK_EN > 0
  48:os/source/os_sem.c ****     if (pevent == (OS_EVENT *)0) {                    /* Validate 'pevent'                         
  49:os/source/os_sem.c ****         return (0);
  50:os/source/os_sem.c ****     }
  51:os/source/os_sem.c ****     if (pevent->OSEventType != OS_EVENT_TYPE_SEM) {   /* Validate event block type                 
  52:os/source/os_sem.c ****         return (0);
  53:os/source/os_sem.c ****     }
  54:os/source/os_sem.c **** #endif
  55:os/source/os_sem.c ****     OS_ENTER_CRITICAL();
 140               	.LM2:
 141               	/* #APP */
 142 0002 F894      		cli
  56:os/source/os_sem.c ****     cnt = pevent->OSEventCnt;
 144               	.LM3:
 145               	/* #NOAPP */
 146 0004 8281      		ldd r24,Z+2
 147 0006 9381      		ldd r25,Z+3
  57:os/source/os_sem.c ****     if (cnt > 0) {                                    /* See if resource is available              
 149               	.LM4:
 150 0008 0097      		sbiw r24,0
 151 000a 21F0      		breq .L2
  58:os/source/os_sem.c ****         pevent->OSEventCnt--;                         /* Yes, decrement semaphore and notify caller
 153               	.LM5:
 154 000c 0197      		sbiw r24,1
 155 000e 9383      		std Z+3,r25
 156 0010 8283      		std Z+2,r24
 157 0012 0196      		adiw r24,1
 158               	.L2:
  59:os/source/os_sem.c ****     }
  60:os/source/os_sem.c ****     OS_EXIT_CRITICAL();
 160               	.LM6:
 161               	/* #APP */
 162 0014 7894      		sei
 163               	/* #NOAPP */
 164               	/* epilogue: frame size=0 */
 165 0016 0895      		ret
 166               	/* epilogue end (size=1) */
 167               	/* function OSSemAccept size 14 (13) */
 172               	.Lscope0:
 175               	.global	OSSemCreate
 177               	OSSemCreate:
  61:os/source/os_sem.c ****     return (cnt);                                     /* Return semaphore count                    
  62:os/source/os_sem.c **** }
  63:os/source/os_sem.c **** #endif    
  64:os/source/os_sem.c **** 
  65:os/source/os_sem.c **** /*$PAGE*/
  66:os/source/os_sem.c **** /*
  67:os/source/os_sem.c **** ***************************************************************************************************
  68:os/source/os_sem.c **** *                                           CREATE A SEMAPHORE
  69:os/source/os_sem.c **** *
  70:os/source/os_sem.c **** * Description: This function creates a semaphore.
  71:os/source/os_sem.c **** *
  72:os/source/os_sem.c **** * Arguments  : cnt           is the initial value for the semaphore.  If the value is 0, no resourc
  73:os/source/os_sem.c **** *                            available (or no event has occurred).  You initialize the semaphore to
  74:os/source/os_sem.c **** *                            non-zero value to specify how many resources are available (e.g. if yo
  75:os/source/os_sem.c **** *                            10 resources, you would initialize the semaphore to 10).
  76:os/source/os_sem.c **** *
  77:os/source/os_sem.c **** * Returns    : != (void *)0  is a pointer to the event control clock (OS_EVENT) associated with the
  78:os/source/os_sem.c **** *                            created semaphore
  79:os/source/os_sem.c **** *              == (void *)0  if no event control blocks were available
  80:os/source/os_sem.c **** ***************************************************************************************************
  81:os/source/os_sem.c **** */
  82:os/source/os_sem.c **** 
  83:os/source/os_sem.c **** OS_EVENT  *OSSemCreate (INT16U cnt)
  84:os/source/os_sem.c **** {
 179               	.LM7:
 180               	/* prologue: frame size=0 */
 181 0018 CF93      		push r28
 182 001a DF93      		push r29
 183               	/* prologue end (size=2) */
 184 001c 9C01      		movw r18,r24
  85:os/source/os_sem.c **** #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status regis
  86:os/source/os_sem.c ****     OS_CPU_SR  cpu_sr;
  87:os/source/os_sem.c **** #endif    
  88:os/source/os_sem.c ****     OS_EVENT  *pevent;
  89:os/source/os_sem.c **** 
  90:os/source/os_sem.c **** 
  91:os/source/os_sem.c ****     if (OSIntNesting > 0) {                                /* See if called from ISR ...           
 186               	.LM8:
 187 001e 8091 0000 		lds r24,OSIntNesting
 188 0022 8823      		tst r24
 189 0024 19F0      		breq .L4
  92:os/source/os_sem.c ****         return ((OS_EVENT *)0);                            /* ... can't CREATE from an ISR         
 191               	.LM9:
 192 0026 80E0      		ldi r24,lo8(0)
 193 0028 90E0      		ldi r25,hi8(0)
 194 002a 18C0      		rjmp .L3
 195               	.L4:
  93:os/source/os_sem.c ****     }
  94:os/source/os_sem.c ****     OS_ENTER_CRITICAL();
 197               	.LM10:
 198               	/* #APP */
 199 002c F894      		cli
  95:os/source/os_sem.c ****     pevent = OSEventFreeList;                              /* Get next free event control block    
 201               	.LM11:
 202               	/* #NOAPP */
 203 002e C091 0000 		lds r28,OSEventFreeList
 204 0032 D091 0000 		lds r29,(OSEventFreeList)+1
  96:os/source/os_sem.c ****     if (OSEventFreeList != (OS_EVENT *)0) {                /* See if pool of free ECB pool was empt
 206               	.LM12:
 207 0036 2097      		sbiw r28,0
 208 0038 31F0      		breq .L5
  97:os/source/os_sem.c ****         OSEventFreeList = (OS_EVENT *)OSEventFreeList->OSEventPtr;
 210               	.LM13:
 211 003a 8C81      		ldd r24,Y+4
 212 003c 9D81      		ldd r25,Y+5
 213 003e 9093 0000 		sts (OSEventFreeList)+1,r25
 214 0042 8093 0000 		sts OSEventFreeList,r24
 215               	.L5:
  98:os/source/os_sem.c ****     }
  99:os/source/os_sem.c ****     OS_EXIT_CRITICAL();
 217               	.LM14:
 218               	/* #APP */
 219 0046 7894      		sei
 100:os/source/os_sem.c ****     if (pevent != (OS_EVENT *)0) {                         /* Get an event control block           
 221               	.LM15:
 222               	/* #NOAPP */
 223 0048 2097      		sbiw r28,0
 224 004a 39F0      		breq .L6
 101:os/source/os_sem.c ****         pevent->OSEventType = OS_EVENT_TYPE_SEM;
 226               	.LM16:
 227 004c 83E0      		ldi r24,lo8(3)
 228 004e 8883      		st Y,r24
 102:os/source/os_sem.c ****         pevent->OSEventCnt  = cnt;                         /* Set semaphore value                  
 230               	.LM17:
 231 0050 3B83      		std Y+3,r19
 232 0052 2A83      		std Y+2,r18
 103:os/source/os_sem.c ****         OS_EventWaitListInit(pevent);
 234               	.LM18:
 235 0054 CE01      		movw r24,r28
 236 0056 0E94 0000 		call OS_EventWaitListInit
 237               	.L6:
 104:os/source/os_sem.c ****     }
 105:os/source/os_sem.c ****     return (pevent);
 239               	.LM19:
 240 005a CE01      		movw r24,r28
 241               	.L3:
 242               	/* epilogue: frame size=0 */
 243 005c DF91      		pop r29
 244 005e CF91      		pop r28
 245 0060 0895      		ret
 246               	/* epilogue end (size=3) */
 247               	/* function OSSemCreate size 39 (34) */
 252               	.Lscope1:
 257               	.global	OSSemPend
 259               	OSSemPend:
 106:os/source/os_sem.c **** }
 107:os/source/os_sem.c **** 
 108:os/source/os_sem.c **** /*$PAGE*/

⌨️ 快捷键说明

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