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

📄 os.lst

📁 无线传感器星型网络的节点的基站程序,采用802.15.4协议
💻 LST
📖 第 1 页 / 共 2 页
字号:
   1               		.file	"os.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:
  96               	.global	os_atomic_enable_interrupt
  98               	os_atomic_enable_interrupt:
   1:os.c          **** //----------------------------------------------------//
   2:os.c          **** //-------Institute Of  Computing Technology-----------//
   3:os.c          **** //------------Chinese Academic  Science---------------//
   4:os.c          **** //-----中国科学院计算技术研究所先进测试技术实验室-----//
   5:os.c          **** //----------------------------------------------------//
   6:os.c          **** 
   7:os.c          **** // **************************************************
   8:os.c          **** // * @copyright:nbicc_lpp
   9:os.c          **** // * @this is OS code head
  10:os.c          **** // * @author zhouqiang  (zhouhongren@163.com)
  11:os.c          **** // *              liulingyi      (lingyiliu@ict.ac.cn)
  12:os.c          **** // * @data:2005.11.05
  13:os.c          **** // * @version:0.0.1
  14:os.c          **** // * @updata:$
  15:os.c          **** // **************************************************
  16:os.c          **** 
  17:os.c          **** #include "os.h"
  18:os.c          **** 
  19:os.c          **** //-----------------原子操作-函数---------------------------------------
  20:os.c          **** 
  21:os.c          ****   inline void os_atomic_enable_interrupt(void)
  22:os.c          **** 
  23:os.c          **** {
 100               	.LM1:
 101               	/* prologue: frame size=0 */
 102               	/* prologue end (size=0) */
  24:os.c          ****    __asm volatile ("sei");
 104               	.LM2:
 105               	/* #APP */
 106 0000 7894      		sei
 107               	/* #NOAPP */
 108               	/* epilogue: frame size=0 */
 109 0002 0895      		ret
 110               	/* epilogue end (size=1) */
 111               	/* function os_atomic_enable_interrupt size 3 (2) */
 115               	.global	os_atomic_end
 117               	os_atomic_end:
  25:os.c          ****    
  26:os.c          ****  }
  27:os.c          **** 
  28:os.c          ****   inline void  os_atomic_end(os_atomic_t oldSreg)
  29:os.c          **** {
 119               	.LM3:
 120               	/* prologue: frame size=0 */
 121               	/* prologue end (size=0) */
  30:os.c          ****   * (volatile unsigned char *)(unsigned int )& * (volatile unsigned char *)(0x3F + 0x20) = oldSreg;
 123               	.LM4:
 124 0004 8FBF      		out 95-0x20,r24
 125               	/* epilogue: frame size=0 */
 126 0006 0895      		ret
 127               	/* epilogue end (size=1) */
 128               	/* function os_atomic_end size 2 (1) */
 131               	.global	os_atomic_start
 133               	os_atomic_start:
  31:os.c          **** }
  32:os.c          **** 
  33:os.c          **** 
  34:os.c          ****  inline os_atomic_t  os_atomic_start(void )
  35:os.c          **** {
 135               	.LM5:
 136               	/* prologue: frame size=0 */
 137               	/* prologue end (size=0) */
  36:os.c          ****   os_atomic_t  result = * (volatile unsigned char *)(unsigned int )& * (volatile unsigned char *)(0
 139               	.LM6:
 140 0008 8FB7      		in r24,95-0x20
  37:os.c          ****    __asm volatile ("cli");
 142               	.LM7:
 143               	/* #APP */
 144 000a F894      		cli
  38:os.c          ****   return result;
  39:os.c          **** }
 146               	.LM8:
 147               	/* #NOAPP */
 148 000c 9927      		clr r25
 149               	/* epilogue: frame size=0 */
 150 000e 0895      		ret
 151               	/* epilogue end (size=1) */
 152               	/* function os_atomic_start size 5 (4) */
 156               	.global	OS_wait
 158               	OS_wait:
  40:os.c          **** 
  41:os.c          **** 
  42:os.c          **** //-----------------系统休眠函数--------------------------------------
  43:os.c          ****  inline void OS_wait(void)
  44:os.c          **** {
 160               	.LM9:
 161               	/* prologue: frame size=0 */
 162               	/* prologue end (size=0) */
  45:os.c          ****    __asm volatile ("nop");
 164               	.LM10:
 165               	/* #APP */
 166 0010 0000      		nop
  46:os.c          ****    __asm volatile ("nop");}
 168               	.LM11:
 169 0012 0000      		nop
 170               	/* #NOAPP */
 171               	/* epilogue: frame size=0 */
 172 0014 0895      		ret
 173               	/* epilogue end (size=1) */
 174               	/* function OS_wait size 5 (4) */
 177               	.global	OS_sleep
 179               	OS_sleep:
  47:os.c          **** 
  48:os.c          ****  inline void OS_sleep(void)
  49:os.c          **** {
 181               	.LM12:
 182               	/* prologue: frame size=0 */
 183               	/* prologue end (size=0) */
  50:os.c          **** 
  51:os.c          ****   * (volatile unsigned char *)(unsigned int )& * (volatile unsigned char *)(0x35 + 0x20) |= 1 << 5;
 185               	.LM13:
 186 0016 85B7      		in r24,85-0x20
 187 0018 8062      		ori r24,lo8(32)
 188 001a 85BF      		out 85-0x20,r24
  52:os.c          ****   
  53:os.c          ****    __asm volatile ("sleep");}
 190               	.LM14:
 191               	/* #APP */
 192 001c 8895      		sleep
 193               	/* #NOAPP */
 194               	/* epilogue: frame size=0 */
 195 001e 0895      		ret
 196               	/* epilogue end (size=1) */
 197               	/* function OS_sleep size 6 (5) */
 200               	.global	OS_sched_init
 202               	OS_sched_init:
  54:os.c          ****    
  55:os.c          **** //-----------------任务调度初始化----------------------------------------
  56:os.c          **** 
  57:os.c          ****  inline void OS_sched_init(void )
  58:os.c          **** {
 204               	.LM15:
 205               	/* prologue: frame size=0 */
 206               	/* prologue end (size=0) */
  59:os.c          ****   OS_sched_free = 0;
 208               	.LM16:
 209 0020 1092 0000 		sts OS_sched_free,__zero_reg__
  60:os.c          ****   OS_sched_full = 0;
 211               	.LM17:
 212 0024 1092 0000 		sts OS_sched_full,__zero_reg__
 213               	/* epilogue: frame size=0 */
 214 0028 0895      		ret
 215               	/* epilogue end (size=1) */
 216               	/* function OS_sched_init size 5 (4) */
 220               	.global	OS_post
 222               	OS_post:
  61:os.c          **** }
  62:os.c          **** 
  63:os.c          **** //-----------------任务提交函数----------------------------------------
  64:os.c          **** 
  65:os.c          **** bool  OS_post(void (*tp)(void))
  66:os.c          **** {
 224               	.LM18:
 225               	/* prologue: frame size=0 */
 226               	/* prologue end (size=0) */
 227 002a BC01      		movw r22,r24
 228               	.LBB2:
 229               	.LBB3:
 231               	.LM19:
 232 002c 8FB7      		in r24,95-0x20
 234               	.LM20:
 235               	/* #APP */
 236 002e F894      		cli
 237               	/* #NOAPP */
 238 0030 482F      		mov r20,r24
 239 0032 5527      		clr r21
 240               	.LBE3:
 241               	.LBE2:
  67:os.c          ****   os_atomic_t fInterruptFlags;
  68:os.c          ****   uint8_t tmp;
  69:os.c          ****   fInterruptFlags = os_atomic_start();
  70:os.c          ****   tmp = OS_sched_free;
 243               	.LM21:
 244 0034 2091 0000 		lds r18,OS_sched_free
  71:os.c          ****   if (OS_queue[tmp].tp == (void *)0) {
 246               	.LM22:
 247 0038 E22F      		mov r30,r18
 248 003a FF27      		clr r31
 249 003c EE0F      		add r30,r30
 250 003e FF1F      		adc r31,r31
 251 0040 E050      		subi r30,lo8(-(OS_queue))
 252 0042 F040      		sbci r31,hi8(-(OS_queue))
 253 0044 8081      		ld r24,Z
 254 0046 9181      		ldd r25,Z+1
 255 0048 892B      		or r24,r25
 256 004a 51F4      		brne .L9
  72:os.c          ****       OS_sched_free = (tmp + 1) & OS_TASK_BITMASK;
 258               	.LM23:
 259 004c 2F5F      		subi r18,lo8(-(1))
 260 004e 2770      		andi r18,lo8(7)
 261 0050 2093 0000 		sts OS_sched_free,r18
  73:os.c          ****       OS_queue[tmp].tp = tp;
 263               	.LM24:
 264 0054 6083      		st Z,r22
 265 0056 7183      		std Z+1,r23
 266               	.LBB4:
 267               	.LBB5:
 269               	.LM25:
 270 0058 4FBF      		out 95-0x20,r20
 271               	.LBE5:
 272               	.LBE4:
  74:os.c          ****       
  75:os.c          ****       os_atomic_end(fInterruptFlags);
  76:os.c          **** 
  77:os.c          ****       return TRUE;
 274               	.LM26:
 275 005a 81E0      		ldi r24,lo8(1)
 276 005c 90E0      		ldi r25,hi8(1)
 277 005e 0895      		ret
 278               	.L9:
 279               	.LBB6:
 280               	.LBB7:
 282               	.LM27:
 283 0060 4FBF      		out 95-0x20,r20
 284               	.LBE7:
 285               	.LBE6:
  78:os.c          ****     }
  79:os.c          ****   else {
  80:os.c          ****       os_atomic_end(fInterruptFlags);
  81:os.c          **** 
  82:os.c          ****       return FALSE;
 287               	.LM28:
 288 0062 80E0      		ldi r24,lo8(0)
 289 0064 90E0      		ldi r25,hi8(0)
  83:os.c          ****     }
  84:os.c          **** }
 291               	.LM29:
 292 0066 0895      		ret
 293               	/* epilogue: frame size=0 */

⌨️ 快捷键说明

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