📄 app.lst
字号:
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 + -