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

📄 app.lst

📁 一个WSN的树状路由,对于那些学WSN路由方面的朋友应该有说帮助.
💻 LST
📖 第 1 页 / 共 3 页
字号:
   1               		.file	"app.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:
  95               	.global	Init
  97               	Init:
   1:app.c         **** /*
   2:app.c         **** ****************************************************************************
   3:app.c         **** *              宁波中科集成电路设计中心  版权所有 Copyright 2005
   4:app.c         **** *						http:\\www.nbicc.com
   5:app.c         **** *文件名:  route.c
   6:app.c         **** *程序员:  黄亮	huangliang@nbicc.com
   7:app.c         **** *主要内容  路由算法
   8:app.c         **** *更新时间: 2005年11月17日
   9:app.c         **** *如有问题或BUG,请登录www.wsn.net.cn 提问或用邮件和作者联系
  10:app.c         **** ****************************************************************************
  11:app.c         **** */
  12:app.c         **** 
  13:app.c         **** 
  14:app.c         **** #include "type.h"
  15:app.c         **** #include "message.h"
  16:app.c         **** #include "global.h"
  17:app.c         **** #include "sensor.h"
  18:app.c         **** #include "timer.h"
  19:app.c         **** #include "os.h"
  20:app.c         **** #include "uartDebug.h"
  21:app.c         **** #include "app.h"
  22:app.c         **** #include "led.h"
  23:app.c         **** #include "mac.h"
  24:app.c         **** #include "route.h"
  25:app.c         **** #include "dataqueue.h"
  26:app.c         **** static result_t ROUTEGetADCDataStart(void);
  27:app.c         **** static void SendSensorData(uint16_t localsensordata);
  28:app.c         **** static void routehandlepkt(uint8_t type, OSMACMsgPtr receivemsg) ;
  29:app.c         **** static void routeReceiveSENSOR(OSMACMsgPtr receivemsg) ;
  30:app.c         **** static void sendreceivesensor(void);  //转发传感数据
  31:app.c         **** static bool CheckPassed(uint8_t src,uint16_t networkseq);
  32:app.c         **** static void InRecord(uint8_t src,uint16_t networkseq);
  33:app.c         **** enum sensortype {
  34:app.c         ****   LIGHT = 1,
  35:app.c         ****   TEMP = 2
  36:app.c         **** };
  37:app.c         **** 
  38:app.c         **** /******************全局变量声明*************************************  */
  39:app.c         **** uint16_t sensordatabuff[10];
  40:app.c         **** uint8_t  sensordataflag;
  41:app.c         **** OSMACMsg routesensor;
  42:app.c         **** OSMACMsgPtr routesensormsgptr;
  43:app.c         **** uint16_t sensorseq;   //应用层数据包号
  44:app.c         **** uint16_t networkseq;  //网络层数据包号
  45:app.c         **** uint8_t  recordflag;
  46:app.c         **** uint8_t  LifeTime;//作为保存接收到的数据包的生存时间的相当于缓存的数据变量
  47:app.c         **** SensorMsg forwardsensor;
  48:app.c         **** 
  49:app.c         **** OSMACMsg uartMsg;
  50:app.c         **** //网络层的包冗余剔除
  51:app.c         **** 
  52:app.c         **** 
  53:app.c         **** 
  54:app.c         **** /******************************************************* 
  55:app.c         ****           全局函数声明
  56:app.c         ****  ******************************************  */
  57:app.c         **** result_t Init(void) {
  99               	.LM1:
 100               	/* prologue: frame size=0 */
 101               	/* prologue end (size=0) */
  58:app.c         **** 	////下面是配置节点的一些数据,需要在节点初始化之前定义,因为
  59:app.c         **** 	//有些数据是在初始化的时候直接赋值给相关的寄存器
  60:app.c         ****     POWERLEVEL = 0X01; //射频的功率
 103               	.LM2:
 104 0000 81E0      		ldi r24,lo8(1)
 105 0002 8093 0000 		sts POWERLEVEL,r24
  61:app.c         ****     
  62:app.c         ****     OS_LOCAL_ADDRESS =1; //本地节点的地址
 107               	.LM3:
 108 0006 8093 0000 		sts OS_LOCAL_ADDRESS,r24
  63:app.c         ****     OS_BCAST_ADDR = 0xEE;  //广播地址
 110               	.LM4:
 111 000a 9EEE      		ldi r25,lo8(-18)
 112 000c 9093 0000 		sts OS_BCAST_ADDR,r25
  64:app.c         **** 
  65:app.c         ****     ACK_ON = 1;  //使用ack机制,建议不要使用,1表示开启,0表示关闭
 114               	.LM5:
 115 0010 8093 0000 		sts ACK_ON,r24
  66:app.c         ****     ACKTIME = 4;  //ack等待时间=ACKTIME*32ms
 117               	.LM6:
 118 0014 84E0      		ldi r24,lo8(4)
 119 0016 8093 0000 		sts ACKTIME,r24
  67:app.c         ****     //选择4的理由是和发送成功时的一样的,尽量假设数据包成功,ACK不成功
  68:app.c         **** 
  69:app.c         **** 	//////////
  70:app.c         ****     LedInit();
 121               	.LM7:
 122 001a 0E94 0000 		call LedInit
  71:app.c         **** 	LedRedOff();
 124               	.LM8:
 125 001e 0E94 0000 		call LedRedOff
  72:app.c         **** 	LedGreenOff();
 127               	.LM9:
 128 0022 0E94 0000 		call LedGreenOff
  73:app.c         **** 	LedYellowOff();
 130               	.LM10:
 131 0026 0E94 0000 		call LedYellowOff
  74:app.c         ****     
  75:app.c         **** 	SensorPhoOStdControlInit();
 133               	.LM11:
 134 002a 0E94 0000 		call SensorPhoOStdControlInit
  76:app.c         **** 	TimerStdControlInit();
 136               	.LM12:
 137 002e 0E94 0000 		call TimerStdControlInit
  77:app.c         **** 	// 初始化UART debugging
  78:app.c         **** 	uartDebug_init();
 139               	.LM13:
 140 0032 0E94 0000 		call uartDebug_init
  79:app.c         **** 	MACInit();
 142               	.LM14:
 143 0036 0E94 0000 		call MACInit
  80:app.c         ****     RoutInit();
 145               	.LM15:
 146 003a 0E94 0000 		call RoutInit
  81:app.c         **** 
  82:app.c         ****     for(sensordataflag = 0 ; sensordataflag < LOCALDATABUFFSIZE ; sensordataflag ++){
 148               	.LM16:
 149 003e 1092 0000 		sts sensordataflag,__zero_reg__
 150 0042 4FEF      		ldi r20,lo8(-1)
 151 0044 5FEF      		ldi r21,hi8(-1)
 152 0046 20E0      		ldi r18,lo8(0)
 153 0048 80E0      		ldi r24,lo8(0)
 154 004a 90E0      		ldi r25,hi8(0)
 155               	.L5:
  83:app.c         **** 	sensordatabuff[sensordataflag] = 0xFFFF;
 157               	.LM17:
 158 004c FC01      		movw r30,r24
 159 004e E80F      		add r30,r24
 160 0050 F91F      		adc r31,r25
 161 0052 E050      		subi r30,lo8(-(sensordatabuff))
 162 0054 F040      		sbci r31,hi8(-(sensordatabuff))
 163 0056 4083      		st Z,r20
 164 0058 5183      		std Z+1,r21
 166               	.LM18:
 167 005a 2F5F      		subi r18,lo8(-(1))
 168 005c 0196      		adiw r24,1
 169 005e 2A30      		cpi r18,lo8(10)
 170 0060 A8F3      		brlo .L5
  84:app.c         **** 	}
  85:app.c         **** 	for(recordflag = 0 ; sensordataflag < PASSED; sensordataflag ++){
  86:app.c         **** 	RecordPassed[recordflag].src = INVALID_NODE_ID;
  87:app.c         **** 	RecordPassed[recordflag].networkseq = 0;
  88:app.c         **** 	}
  89:app.c         **** 	sensordataflag = 0;
 172               	.LM19:
 173 0062 1092 0000 		sts sensordataflag,__zero_reg__
  90:app.c         **** 	recordflag = 0;
 175               	.LM20:
 176 0066 1092 0000 		sts recordflag,__zero_reg__
  91:app.c         **** 	sensorseq = 0;
 178               	.LM21:
 179 006a 1092 0000 		sts (sensorseq)+1,__zero_reg__
 180 006e 1092 0000 		sts sensorseq,__zero_reg__
  92:app.c         **** 	networkseq = 0;
 182               	.LM22:
 183 0072 1092 0000 		sts (networkseq)+1,__zero_reg__
 184 0076 1092 0000 		sts networkseq,__zero_reg__
  93:app.c         **** 
  94:app.c         **** 	routesensormsgptr = &routesensor;
 186               	.LM23:
 187 007a 80E0      		ldi r24,lo8(routesensor)
 188 007c 90E0      		ldi r25,hi8(routesensor)
 189 007e 9093 0000 		sts (routesensormsgptr)+1,r25
 190 0082 8093 0000 		sts routesensormsgptr,r24
  95:app.c         ****     
  96:app.c         ****     return SUCCESS;
  97:app.c         **** }
 192               	.LM24:
 193 0086 81E0      		ldi r24,lo8(1)
 194 0088 90E0      		ldi r25,hi8(1)
 195               	/* epilogue: frame size=0 */
 196 008a 0895      		ret
 197               	/* epilogue end (size=1) */
 198               	/* function Init size 70 (69) */
 201               	.global	Start
 203               	Start:
  98:app.c         **** 
  99:app.c         **** result_t Start(void) { 
 205               	.LM25:
 206               	/* prologue: frame size=0 */
 207               	/* prologue end (size=0) */
 100:app.c         ****     
 101:app.c         **** 	SensorPhoOStdControlStart();
 209               	.LM26:
 210 008c 0E94 0000 		call SensorPhoOStdControlStart
 211               	.LBB2:
 212               	.LBB3:
 102:app.c         **** 	ROUTEGetADCDataStart();
 103:app.c         **** 	
 104:app.c         **** 	TimerTimerStart(0, TIMER_REPEAT, 4000); //定时路由任务
 105:app.c         **** 	
 106:app.c         **** 	return SUCCESS;
 107:app.c         **** 		
 108:app.c         **** }
 109:app.c         **** 
 110:app.c         **** static result_t ROUTEGetADCDataStart(void) {
 111:app.c         ****     
 112:app.c         ****     TimerTimerStart(1, TIMER_REPEAT, 1200); //定时采集数据
 214               	.LM27:
 215 0090 20EB      		ldi r18,lo8(1200)
 216 0092 34E0      		ldi r19,hi8(1200)
 217 0094 40E0      		ldi r20,hlo8(1200)
 218 0096 50E0      		ldi r21,hhi8(1200)
 219 0098 60E0      		ldi r22,lo8(0)
 220 009a 81E0      		ldi r24,lo8(1)
 221 009c 0E94 0000 		call TimerTimerStart
 222               	.LBE3:
 223               	.LBE2:
 225               	.LM28:
 226 00a0 20EA      		ldi r18,lo8(4000)
 227 00a2 3FE0      		ldi r19,hi8(4000)
 228 00a4 40E0      		ldi r20,hlo8(4000)
 229 00a6 50E0      		ldi r21,hhi8(4000)
 230 00a8 60E0      		ldi r22,lo8(0)
 231 00aa 862F      		mov r24,r22
 232 00ac 0E94 0000 		call TimerTimerStart
 234               	.LM29:
 235 00b0 81E0      		ldi r24,lo8(1)
 236 00b2 90E0      		ldi r25,hi8(1)
 237               	/* epilogue: frame size=0 */
 238 00b4 0895      		ret
 239               	/* epilogue end (size=1) */
 240               	/* function Start size 21 (20) */
 243               	.global	Timer0_0_Fired
 245               	Timer0_0_Fired:
 113:app.c         **** 	return SUCCESS;
 114:app.c         **** }
 115:app.c         **** 
 116:app.c         **** 
 117:app.c         **** result_t Timer0_0_Fired(void) {
 247               	.LM30:
 248               	/* prologue: frame size=0 */
 249               	/* prologue end (size=0) */
 118:app.c         **** 	// 添加时间事件
 119:app.c         **** 	OSPostTask(routeTimerTask); //更新邻居表 选择父节点 发送广播包
 251               	.LM31:
 252 00b6 80E0      		ldi r24,lo8(pm(routeTimerTask))
 253 00b8 90E0      		ldi r25,hi8(pm(routeTimerTask))
 254 00ba 0E94 0000 		call OSPostTask
 120:app.c         ****     return SUCCESS;
 121:app.c         **** }
 256               	.LM32:
 257 00be 81E0      		ldi r24,lo8(1)
 258 00c0 90E0      		ldi r25,hi8(1)
 259               	/* epilogue: frame size=0 */
 260 00c2 0895      		ret
 261               	/* epilogue end (size=1) */
 262               	/* function Timer0_0_Fired size 7 (6) */
 265               	.global	Timer0_1_Fired
 267               	Timer0_1_Fired:
 122:app.c         **** 
 123:app.c         **** 
 124:app.c         **** result_t Timer0_1_Fired(void) {
 269               	.LM33:
 270               	/* prologue: frame size=0 */
 271               	/* prologue end (size=0) */
 125:app.c         ****     //采集光数据
 126:app.c         ****     SensorExternalPhotoADCGetData();
 273               	.LM34:
 274 00c4 0E94 0000 		call SensorExternalPhotoADCGetData
 127:app.c         **** 	return SUCCESS;
 128:app.c         **** }
 276               	.LM35:
 277 00c8 81E0      		ldi r24,lo8(1)
 278 00ca 90E0      		ldi r25,hi8(1)
 279               	/* epilogue: frame size=0 */
 280 00cc 0895      		ret
 281               	/* epilogue end (size=1) */
 282               	/* function Timer0_1_Fired size 5 (4) */
 286               	.global	SensordataReady
 288               	SensordataReady:
 129:app.c         **** 
 130:app.c         **** 
 131:app.c         **** result_t SensordataReady(uint16_t data) {
 290               	.LM36:
 291               	/* prologue: frame size=0 */
 292               	/* prologue end (size=0) */
 293 00ce 9C01      		movw r18,r24
 132:app.c         ****     //采集好数据以后,执行发送数据任务 
 133:app.c         ****     if( data <= 0x0180){  
 295               	.LM37:
 296 00d0 81E0      		ldi r24,hi8(385)
 297 00d2 2138      		cpi r18,lo8(385)
 298 00d4 3807      		cpc r19,r24
 299 00d6 88F4      		brsh .L22
 134:app.c         ****     sensordatabuff[sensordataflag] = data;
 301               	.LM38:
 302 00d8 8091 0000 		lds r24,sensordataflag
 303 00dc 9927      		clr r25
 304 00de FC01      		movw r30,r24
 305 00e0 E80F      		add r30,r24
 306 00e2 F91F      		adc r31,r25
 307 00e4 E050      		subi r30,lo8(-(sensordatabuff))
 308 00e6 F040      		sbci r31,hi8(-(sensordatabuff))
 309 00e8 2083      		st Z,r18
 310 00ea 3183      		std Z+1,r19
 135:app.c         **** 	sensordataflag = (sensordataflag + 1)%LOCALDATABUFFSIZE;
 312               	.LM39:
 313 00ec 0196      		adiw r24,1
 314 00ee 6AE0      		ldi r22,lo8(10)
 315 00f0 70E0      		ldi r23,hi8(10)
 316 00f2 0E94 0000 		call __divmodhi4
 317 00f6 8093 0000 		sts sensordataflag,r24
 318               	.L22:
 136:app.c         **** 	}
 137:app.c         **** 
 138:app.c         **** 	return SUCCESS;
 139:app.c         **** }
 320               	.LM40:
 321 00fa 81E0      		ldi r24,lo8(1)
 322 00fc 90E0      		ldi r25,hi8(1)
 323               	/* epilogue: frame size=0 */
 324 00fe 0895      		ret
 325               	/* epilogue end (size=1) */
 326               	/* function SensordataReady size 25 (24) */
 329               	.global	LocalDataIn
 331               	LocalDataIn:
 140:app.c         **** 
 141:app.c         **** result_t LocalDataIn(void){
 333               	.LM41:
 334               	/* prologue: frame size=0 */
 335 0100 CF93      		push r28

⌨️ 快捷键说明

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