os_q.lst

来自「cs5460a做功率表用 cs5460a做功率表用 cs5460a做功率表」· LST 代码 · 共 439 行 · 第 1/2 页

LST
439
字号
   1               		.file	"OS_Q.c"
   2               		.arch atmega8
   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:
 105               	.global	OSQCreat
 107               	OSQCreat:
   1:driver/OS_Q.c **** /********************************************
   2:driver/OS_Q.c **** 公司名称:
   3:driver/OS_Q.c **** 文 件 名:
   4:driver/OS_Q.c **** 版 本 号:
   5:driver/OS_Q.c **** 程序设计:
   6:driver/OS_Q.c **** 说    明:
   7:driver/OS_Q.c **** 完成日期:
   8:driver/OS_Q.c **** 修改日期:
   9:driver/OS_Q.c **** 功能摘要:
  10:driver/OS_Q.c **** **********************************************/
  11:driver/OS_Q.c **** #define _OS_Q
  12:driver/OS_Q.c **** #include "includes.h"
  13:driver/OS_Q.c **** 
  14:driver/OS_Q.c **** OS_Q  *OSQCreat(OS_Q *pEvent,uint8 *start,uint8 size);
  15:driver/OS_Q.c **** uint8 OSQPost (OS_Q *pEvent,uint8 msg);
  16:driver/OS_Q.c **** uint8 OSQAccept (OS_Q *pEvent,uint8 *const msg);
  17:driver/OS_Q.c **** uint8 OSQQuery(OS_Q *pEvent);
  18:driver/OS_Q.c **** //-----------------------------------------------
  19:driver/OS_Q.c **** 
  20:driver/OS_Q.c **** OS_Q  *OSQCreat(OS_Q *pEvent,uint8 *start,uint8 size)   //创建一个消息队列
  21:driver/OS_Q.c **** {
 109               	.LM1:
 110               	/* prologue: frame size=0 */
 111               	/* prologue end (size=0) */
 112 0000 FC01      		movw r30,r24
  22:driver/OS_Q.c **** 		
  23:driver/OS_Q.c **** 		pEvent->OSQStart 	= start;
 114               	.LM2:
 115 0002 7183      		std Z+1,r23
 116 0004 6083      		st Z,r22
  24:driver/OS_Q.c **** 		pEvent->OSQEnd 		= &start[size];
 118               	.LM3:
 119 0006 CB01      		movw r24,r22
 120 0008 840F      		add r24,r20
 121 000a 911D      		adc r25,__zero_reg__
 122 000c 9383      		std Z+3,r25
 123 000e 8283      		std Z+2,r24
  25:driver/OS_Q.c **** 		pEvent->OSQIn 		= start;
 125               	.LM4:
 126 0010 7583      		std Z+5,r23
 127 0012 6483      		std Z+4,r22
  26:driver/OS_Q.c **** 		pEvent->OSQOut      = start;
 129               	.LM5:
 130 0014 7783      		std Z+7,r23
 131 0016 6683      		std Z+6,r22
  27:driver/OS_Q.c **** 		pEvent->OSQSize		= size;
 133               	.LM6:
 134 0018 4087      		std Z+8,r20
  28:driver/OS_Q.c **** 		pEvent->OSQCnt		= 0;
 136               	.LM7:
 137 001a 1186      		std Z+9,__zero_reg__
  29:driver/OS_Q.c **** 			
  30:driver/OS_Q.c **** 		return (pEvent);
  31:driver/OS_Q.c **** }
 139               	.LM8:
 140 001c CF01      		movw r24,r30
 141               	/* epilogue: frame size=0 */
 142 001e 0895      		ret
 143               	/* epilogue end (size=1) */
 144               	/* function OSQCreat size 16 (15) */
 146               	.Lscope0:
 150               	.global	OSQPost
 152               	OSQPost:
  32:driver/OS_Q.c **** //------------------------------------------------
  33:driver/OS_Q.c **** uint8 OSQPost (OS_Q *pEvent,uint8 msg)        //向消息队列发送一则消息
  34:driver/OS_Q.c **** {
 154               	.LM9:
 155               	/* prologue: frame size=0 */
 156 0020 CF93      		push r28
 157 0022 DF93      		push r29
 158               	/* prologue end (size=2) */
 159 0024 DC01      		movw r26,r24
  35:driver/OS_Q.c **** 		
  36:driver/OS_Q.c **** 		if (pEvent == (OS_Q *)0)			  //无效事件
 161               	.LM10:
 162 0026 892B      		or r24,r25
 163 0028 19F4      		brne .L3
  37:driver/OS_Q.c **** 		   {
  38:driver/OS_Q.c **** 			   return (OS_ERR_PEVENT_NULL);
 165               	.LM11:
 166 002a 85E0      		ldi r24,lo8(5)
 167 002c 90E0      		ldi r25,hi8(5)
 168 002e 36C0      		rjmp .L2
 169               	.L3:
  39:driver/OS_Q.c **** 		    }	
  40:driver/OS_Q.c **** 		OS_CLOSE_INT();
 171               	.LM12:
 172               	/* #APP */
 173 0030 F894      		cli
 174               	/* #NOAPP */
 175 0032 8091 0000 		lds r24,Os_Enter_Sum
 176 0036 8F5F      		subi r24,lo8(-(1))
 177 0038 8093 0000 		sts Os_Enter_Sum,r24
  41:driver/OS_Q.c **** 		if (pEvent->OSQCnt >= pEvent->OSQSize) //时件长度超过所给长度,已满
 179               	.LM13:
 180 003c ED01      		movw r28,r26
 181 003e 9985      		ldd r25,Y+9
 182 0040 8885      		ldd r24,Y+8
 183 0042 9817      		cp r25,r24
 184 0044 68F0      		brlo .L4
  42:driver/OS_Q.c **** 		   {
  43:driver/OS_Q.c ****                OS_OPEN_INT();
 186               	.LM14:
 187 0046 8091 0000 		lds r24,Os_Enter_Sum
 188 004a 8150      		subi r24,lo8(-(-1))
 189 004c 8093 0000 		sts Os_Enter_Sum,r24
 190 0050 8091 0000 		lds r24,Os_Enter_Sum
 191 0054 8823      		tst r24
 192 0056 09F4      		brne .L5
 193               	/* #APP */
 194 0058 7894      		sei
 195               	/* #NOAPP */
 196               	.L5:
  44:driver/OS_Q.c ****                return (OS_Q_FULL);
 198               	.LM15:
 199 005a 82E0      		ldi r24,lo8(2)
 200 005c 90E0      		ldi r25,hi8(2)
 201 005e 1EC0      		rjmp .L2
 202               	.L4:
  45:driver/OS_Q.c **** 	    	}		
  46:driver/OS_Q.c **** 		*pEvent->OSQIn++ = msg;					//OSQIn++ = msg
 204               	.LM16:
 205 0060 ED01      		movw r28,r26
 206 0062 EC81      		ldd r30,Y+4
 207 0064 FD81      		ldd r31,Y+5
 208 0066 6193      		st Z+,r22
 209 0068 FD83      		std Y+5,r31
 210 006a EC83      		std Y+4,r30
  47:driver/OS_Q.c **** 		pEvent->OSQCnt++;
 212               	.LM17:
 213 006c 8985      		ldd r24,Y+9
 214 006e 8F5F      		subi r24,lo8(-(1))
 215 0070 8987      		std Y+9,r24
  48:driver/OS_Q.c **** 		if (pEvent->OSQIn == pEvent->OSQEnd)	//如果已满则重新开始
 217               	.LM18:
 218 0072 8A81      		ldd r24,Y+2
 219 0074 9B81      		ldd r25,Y+3
 220 0076 E817      		cp r30,r24
 221 0078 F907      		cpc r31,r25
 222 007a 21F4      		brne .L6
  49:driver/OS_Q.c **** 		   {
  50:driver/OS_Q.c ****                pEvent->OSQIn = pEvent->OSQStart;
 224               	.LM19:
 225 007c 8D91      		ld r24,X+
 226 007e 9C91      		ld r25,X
 227 0080 9D83      		std Y+5,r25
 228 0082 8C83      		std Y+4,r24
 229               	.L6:
  51:driver/OS_Q.c **** 		    }
  52:driver/OS_Q.c **** 		OS_OPEN_INT();
 231               	.LM20:
 232 0084 8091 0000 		lds r24,Os_Enter_Sum
 233 0088 8150      		subi r24,lo8(-(-1))
 234 008a 8093 0000 		sts Os_Enter_Sum,r24
 235 008e 8091 0000 		lds r24,Os_Enter_Sum
 236 0092 8823      		tst r24
 237 0094 09F4      		brne .L7
 238               	/* #APP */
 239 0096 7894      		sei
 240               	/* #NOAPP */
 241               	.L7:
  53:driver/OS_Q.c **** 		return (OS_Q_OK);									
 243               	.LM21:
 244 0098 81E0      		ldi r24,lo8(1)
 245 009a 90E0      		ldi r25,hi8(1)
 246               	.L2:
 247               	/* epilogue: frame size=0 */
 248 009c DF91      		pop r29
 249 009e CF91      		pop r28
 250 00a0 0895      		ret
 251               	/* epilogue end (size=3) */
 252               	/* function OSQPost size 68 (63) */
 254               	.Lscope1:
 258               	.global	OSQAccept
 260               	OSQAccept:
  54:driver/OS_Q.c **** }
  55:driver/OS_Q.c **** 
  56:driver/OS_Q.c **** //------------------------------------------------
  57:driver/OS_Q.c **** uint8 OSQAccept (OS_Q *pEvent,uint8 * const msg)		//从消息队列中取出消息
  58:driver/OS_Q.c **** {
 262               	.LM22:
 263               	/* prologue: frame size=0 */
 264 00a2 CF93      		push r28
 265 00a4 DF93      		push r29
 266               	/* prologue end (size=2) */
 267 00a6 DC01      		movw r26,r24
 268 00a8 EB01      		movw r28,r22
  59:driver/OS_Q.c **** 		
  60:driver/OS_Q.c **** 		if (pEvent == (OS_Q *)0) 
 270               	.LM23:
 271 00aa 892B      		or r24,r25
 272 00ac 19F4      		brne .L9
  61:driver/OS_Q.c **** 		   {
  62:driver/OS_Q.c ****               return (OS_ERR_PEVENT_NULL);
 274               	.LM24:
 275 00ae 85E0      		ldi r24,lo8(5)
 276 00b0 90E0      		ldi r25,hi8(5)
 277 00b2 3BC0      		rjmp .L8
 278               	.L9:
  63:driver/OS_Q.c **** 		   }	
  64:driver/OS_Q.c **** 		OS_CLOSE_INT();
 280               	.LM25:
 281               	/* #APP */
 282 00b4 F894      		cli
 283               	/* #NOAPP */
 284 00b6 8091 0000 		lds r24,Os_Enter_Sum
 285 00ba 8F5F      		subi r24,lo8(-(1))

⌨️ 快捷键说明

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