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

📄 os_core.lst

📁 一个基于MEGA16的GUI
💻 LST
📖 第 1 页 / 共 3 页
字号:
   1               		.file	"OS_CORE.c"
   2               		.arch atmega16
   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:
 124               	.global	Os_Enter_Sum
 125               	.global	Os_Enter_Sum
 126               		.section .bss
 129               	Os_Enter_Sum:
 130 0000 00        		.skip 1,0
 131               	.global	OSMapTbl
 132               		.data
 135               	OSMapTbl:
 136 0000 01        		.byte	1
 137 0001 02        		.byte	2
 138 0002 04        		.byte	4
 139 0003 08        		.byte	8
 140 0004 10        		.byte	16
 141 0005 20        		.byte	32
 142 0006 40        		.byte	64
 143 0007 80        		.byte	-128
 144 0008 00        		.byte	0
 145               	.global	OSTaskRuning
 148               	OSTaskRuning:
 149 0009 FF        		.byte	-1
 150               	.global	OSNextTaskID
 151               	.global	OSNextTaskID
 152               		.section .bss
 155               	OSNextTaskID:
 156 0001 00        		.skip 1,0
 157               	.global	OSTaskID
 158               	.global	OSTaskID
 161               	OSTaskID:
 162 0002 00        		.skip 1,0
 163               		.text
 166               	.global	OSIntSendSignal
 168               	OSIntSendSignal:
   1:OS_CORE.c     **** /**************************************************************************************************
   2:OS_CORE.c     **** **
   3:OS_CORE.c     **** **-------------------------------------------------------------------------------------------------
   4:OS_CORE.c     **** ***************************************************************************************************
   5:OS_CORE.c     **** 
   6:OS_CORE.c     **** #define  IN_OS_CORE
   7:OS_CORE.c     **** #include "config.h"
   8:OS_CORE.c     **** 
   9:OS_CORE.c     **** #if EN_OS_INT_ENTER > 0
  10:OS_CORE.c     **** uint8 OSIntNesting;
  11:OS_CORE.c     **** #endif
  12:OS_CORE.c     **** 
  13:OS_CORE.c     **** uint8  OSTaskID = 0;
  14:OS_CORE.c     **** uint8  OSNextTaskID = 0;
  15:OS_CORE.c     **** 
  16:OS_CORE.c     **** uint8 OSWaitTick[OS_MAX_TASKS];
  17:OS_CORE.c     **** #if OS_MAX_TASKS < 9
  18:OS_CORE.c     **** uint8  OSTaskRuning = 0xff;
  19:OS_CORE.c     **** #else
  20:OS_CORE.c     **** uint16  OSTaskRuning = 0xffff;
  21:OS_CORE.c     **** #endif
  22:OS_CORE.c     **** 
  23:OS_CORE.c     **** uint8 const OSMapTbl[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00};
  24:OS_CORE.c     **** uint8 Os_Enter_Sum = 0;
  25:OS_CORE.c     **** 
  26:OS_CORE.c     **** void  OSSched(void);
  27:OS_CORE.c     **** 
  28:OS_CORE.c     **** /**************************************************************************************************
  29:OS_CORE.c     **** ** 函数名称: OSIntSendSignal
  30:OS_CORE.c     **** ** 功能描述: 中断中给指定任务发送信号,既使指定任务就绪
  31:OS_CORE.c     **** ** 输 入: TaskId : 任务ID
  32:OS_CORE.c     **** ** 输 出: 无
  33:OS_CORE.c     **** ** 全局变量: OSTaskRuning
  34:OS_CORE.c     **** ** 调用模块: 无
  35:OS_CORE.c     **** **-------------------------------------------------------------------------------------------------
  36:OS_CORE.c     **** ***************************************************************************************************
  37:OS_CORE.c     ****         void OSIntSendSignal(uint8 TaskId)
  38:OS_CORE.c     **** 
  39:OS_CORE.c     **** {
 170               	.LM1:
 171               	/* prologue: frame size=0 */
 172               	/* prologue end (size=0) */
  40:OS_CORE.c     ****     if (TaskId < OS_MAX_TASKS)
 174               	.LM2:
 175 0000 8430      		cpi r24,lo8(4)
 176 0002 80F4      		brsh .L1
  41:OS_CORE.c     ****     {
  42:OS_CORE.c     ****         OS_ENTER_CRITICAL();
 178               	.LM3:
 179               	/* #APP */
 180 0004 F894      		cli
 181               	/* #NOAPP */
 182 0006 2091 0000 		lds r18,Os_Enter_Sum
  43:OS_CORE.c     **** #if OS_MAX_TASKS < 9
  44:OS_CORE.c     ****         OSTaskRuning |= OSMapTbl[TaskId];
 184               	.LM4:
 185 000a E82F      		mov r30,r24
 186 000c FF27      		clr r31
 187 000e E050      		subi r30,lo8(-(OSMapTbl))
 188 0010 F040      		sbci r31,hi8(-(OSMapTbl))
 189 0012 8091 0000 		lds r24,OSTaskRuning
 190 0016 9081      		ld r25,Z
 191 0018 892B      		or r24,r25
 192 001a 8093 0000 		sts OSTaskRuning,r24
  45:OS_CORE.c     **** #else
  46:OS_CORE.c     ****         if (TaskId < 8)
  47:OS_CORE.c     ****         {
  48:OS_CORE.c     ****             ((uint8 *)(&OSTaskRuning))[LOW_BYTE] |= OSMapTbl[TaskId];
  49:OS_CORE.c     ****         }
  50:OS_CORE.c     ****         else
  51:OS_CORE.c     ****         {
  52:OS_CORE.c     ****             ((uint8 *)(&OSTaskRuning))[HIGH_BYTE] |= OSMapTbl[TaskId & 0x07];
  53:OS_CORE.c     ****         }
  54:OS_CORE.c     **** #endif
  55:OS_CORE.c     ****         OS_EXIT_CRITICAL();
 194               	.LM5:
 195 001e 2223      		tst r18
 196 0020 09F4      		brne .L1
 197               	/* #APP */
 198 0022 7894      		sei
 199               	/* #NOAPP */
 200               	.L1:
 201 0024 0895      		ret
 202               	/* epilogue: frame size=0 */
 203               	/* epilogue: noreturn */
 204               	/* epilogue end (size=0) */
 205               	/* function OSIntSendSignal size 21 (21) */
 207               	.Lscope0:
 210               	.global	OSClearSignal
 212               	OSClearSignal:
  56:OS_CORE.c     ****     }
  57:OS_CORE.c     **** }
  58:OS_CORE.c     **** 
  59:OS_CORE.c     **** /**************************************************************************************************
  60:OS_CORE.c     **** ** 函数名称: OSSendSignal
  61:OS_CORE.c     **** ** 功能描述: 任务中给指定任务发送信号,既使指定任务就绪
  62:OS_CORE.c     **** ** 输 入: TaskId : 任务ID
  63:OS_CORE.c     **** ** 输 出: 无
  64:OS_CORE.c     **** ** 全局变量: 无
  65:OS_CORE.c     **** ** 调用模块: OSSched,OSIntSendSignal
  66:OS_CORE.c     **** ***************************************************************************************************
  67:OS_CORE.c     **** #if EN_OS_SEND_SIGNAL>0
  68:OS_CORE.c     ****         void OSSendSignal(uint8 TaskId)
  69:OS_CORE.c     **** 
  70:OS_CORE.c     **** {
  71:OS_CORE.c     ****     OSIntSendSignal(TaskId);
  72:OS_CORE.c     ****     OSSched();                                              //开始任务切换
  73:OS_CORE.c     **** }
  74:OS_CORE.c     **** #endif
  75:OS_CORE.c     **** /**************************************************************************************************
  76:OS_CORE.c     **** ** 函数名称: OSClearSignal
  77:OS_CORE.c     **** ** 功能描述: 清除指定任务信号,既使指定任务休眠
  78:OS_CORE.c     **** ** 输 入: TaskId : 任务ID
  79:OS_CORE.c     **** ** 输 出: 无
  80:OS_CORE.c     **** ** 全局变量: OSTaskRuning
  81:OS_CORE.c     **** ** 调用模块: 无
  82:OS_CORE.c     **** ***************************************************************************************************
  83:OS_CORE.c     **** 
  84:OS_CORE.c     ****         void OSClearSignal(uint8 TaskId) 
  85:OS_CORE.c     **** {
 214               	.LM6:
 215               	/* prologue: frame size=0 */
 216               	/* prologue end (size=0) */
  86:OS_CORE.c     ****     if (TaskId < OS_MAX_TASKS)
 218               	.LM7:
 219 0026 8430      		cpi r24,lo8(4)
 220 0028 88F4      		brsh .L4
  87:OS_CORE.c     ****     {
  88:OS_CORE.c     ****         OS_ENTER_CRITICAL();
 222               	.LM8:
 223               	/* #APP */
 224 002a F894      		cli
 225               	/* #NOAPP */
 226 002c 2091 0000 		lds r18,Os_Enter_Sum
  89:OS_CORE.c     **** #if OS_MAX_TASKS < 9
  90:OS_CORE.c     ****         OSTaskRuning &= ~OSMapTbl[TaskId];
 228               	.LM9:
 229 0030 E82F      		mov r30,r24
 230 0032 FF27      		clr r31
 231 0034 E050      		subi r30,lo8(-(OSMapTbl))
 232 0036 F040      		sbci r31,hi8(-(OSMapTbl))
 233 0038 9081      		ld r25,Z
 234 003a 9095      		com r25
 235 003c 8091 0000 		lds r24,OSTaskRuning
 236 0040 8923      		and r24,r25
 237 0042 8093 0000 		sts OSTaskRuning,r24
  91:OS_CORE.c     **** #else
  92:OS_CORE.c     ****         if (TaskId < 8)
  93:OS_CORE.c     ****         {
  94:OS_CORE.c     ****             ((uint8 *)(&OSTaskRuning))[LOW_BYTE] &= ~OSMapTbl[TaskId];
  95:OS_CORE.c     ****         }
  96:OS_CORE.c     ****         else
  97:OS_CORE.c     ****         {
  98:OS_CORE.c     ****             ((uint8 *)(&OSTaskRuning))[HIGH_BYTE] &= ~OSMapTbl[TaskId & 0x07];
  99:OS_CORE.c     ****         }
 100:OS_CORE.c     **** #endif
 101:OS_CORE.c     ****         OS_EXIT_CRITICAL();
 239               	.LM10:
 240 0046 2223      		tst r18
 241 0048 09F4      		brne .L4
 242               	/* #APP */
 243 004a 7894      		sei
 244               	/* #NOAPP */
 245               	.L4:
 246 004c 0895      		ret
 247               	/* epilogue: frame size=0 */
 248               	/* epilogue: noreturn */
 249               	/* epilogue end (size=0) */
 250               	/* function OSClearSignal size 22 (22) */
 252               	.Lscope1:
 254               	.global	OSIntExit
 256               	OSIntExit:
 102:OS_CORE.c     ****     }
 103:OS_CORE.c     **** }
 104:OS_CORE.c     **** 
 105:OS_CORE.c     **** /**************************************************************************************************
 106:OS_CORE.c     **** ** 函数名称: OSIntExit
 107:OS_CORE.c     **** ** 功能描述: 中断退出处理函数,在此进行中断后的任务切换
 108:OS_CORE.c     **** ** 输 入: 无
 109:OS_CORE.c     **** ** 输 出: 无
 110:OS_CORE.c     **** ** 全局变量: OSIntNesting,OSNextTaskID
 111:OS_CORE.c     **** ** 调用模块: OSIntCtxSw
 112:OS_CORE.c     **** ***************************************************************************************************
 113:OS_CORE.c     ****         void OSIntExit(void)  
 114:OS_CORE.c     **** 
 115:OS_CORE.c     **** {
 258               	.LM11:
 259               	/* prologue: frame size=0 */
 260               	/* prologue end (size=0) */
 116:OS_CORE.c     ****     uint8 temp;
 117:OS_CORE.c     **** 
 118:OS_CORE.c     ****     OS_ENTER_CRITICAL();
 262               	.LM12:
 263               	/* #APP */
 264 004e F894      		cli
 265               	/* #NOAPP */
 266 0050 8091 0000 		lds r24,Os_Enter_Sum
 267 0054 8F5F      		subi r24,lo8(-(1))
 268 0056 8093 0000 		sts Os_Enter_Sum,r24
 119:OS_CORE.c     ****                 /* 中断嵌套处理 */
 120:OS_CORE.c     **** #if EN_OS_INT_ENTER > 0
 121:OS_CORE.c     ****     if (OSIntNesting > 0)
 270               	.LM13:
 271 005a 8091 0000 		lds r24,OSIntNesting
 272 005e 8823      		tst r24
 273 0060 19F0      		breq .L8
 122:OS_CORE.c     ****     {
 123:OS_CORE.c     ****         OSIntNesting--;
 275               	.LM14:
 276 0062 8150      		subi r24,lo8(-(-1))
 277 0064 8093 0000 		sts OSIntNesting,r24
 278               	.L8:
 124:OS_CORE.c     ****     }
 125:OS_CORE.c     ****     if (OSIntNesting == 0)

⌨️ 快捷键说明

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