📄 blind_node.s51
字号:
// 71 SLEEP_STATE,
// 72 BLINK_LED_STATE
RSEG XDATA_Z:XDATA:NOROOT(0)
REQUIRE __INIT_XDATA_Z
// 73 } blindNodeState;
blindNodeState:
DS 1
// 74
// 75
// 76
// 77 /******************************************************************************
// 78 *
// 79 * This function is the main loop for Blind Node
// 80 ******************************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 81 void RunBlindNode(void){
RunBlindNode:
CFI Block cfiBlock0 Using cfiCommon0
CFI Function RunBlindNode
FUNCALL RunBlindNode, lcdUpdate
LOCFRAME XSTACK, 25, STACK
ARGFRAME XSTACK, 25, STACK
FUNCALL RunBlindNode, SendText
LOCFRAME XSTACK, 25, STACK
ARGFRAME XSTACK, 25, STACK
FUNCALL RunBlindNode, SendConfiguration
LOCFRAME XSTACK, 25, STACK
ARGFRAME XSTACK, 25, STACK
FUNCALL RunBlindNode, memset
LOCFRAME XSTACK, 27, STACK
ARGFRAME XSTACK, 27, STACK
FUNCALL RunBlindNode, ReqSignals
LOCFRAME XSTACK, 25, STACK
ARGFRAME XSTACK, 25, STACK
FUNCALL RunBlindNode, AddToSleepTimer
LOCFRAME XSTACK, 25, STACK
ARGFRAME XSTACK, 25, STACK
FUNCALL RunBlindNode, HandleBCastReply
LOCFRAME XSTACK, 25, STACK
ARGFRAME XSTACK, 25, STACK
FUNCALL RunBlindNode, CalculateUpperLeft
LOCFRAME XSTACK, 31, STACK
ARGFRAME XSTACK, 31, STACK
FUNCALL RunBlindNode, ChooseNodesToUse
LOCFRAME XSTACK, 25, STACK
ARGFRAME XSTACK, 25, STACK
FUNCALL RunBlindNode, AddToSleepTimer
LOCFRAME XSTACK, 25, STACK
ARGFRAME XSTACK, 25, STACK
FUNCALL RunBlindNode, ReqSignals
LOCFRAME XSTACK, 25, STACK
ARGFRAME XSTACK, 25, STACK
FUNCALL RunBlindNode, AddToSleepTimer
LOCFRAME XSTACK, 25, STACK
ARGFRAME XSTACK, 25, STACK
FUNCALL RunBlindNode, CreateInputArrayToLocEngine
LOCFRAME XSTACK, 25, STACK
ARGFRAME XSTACK, 25, STACK
FUNCALL RunBlindNode, CalculatePosition
LOCFRAME XSTACK, 29, STACK
ARGFRAME XSTACK, 29, STACK
FUNCALL RunBlindNode, PrintXY
LOCFRAME XSTACK, 25, STACK
ARGFRAME XSTACK, 25, STACK
FUNCALL RunBlindNode, DiscardResult
LOCFRAME XSTACK, 25, STACK
ARGFRAME XSTACK, 25, STACK
FUNCALL RunBlindNode, SendText
LOCFRAME XSTACK, 25, STACK
ARGFRAME XSTACK, 25, STACK
FUNCALL RunBlindNode, SendPosition
LOCFRAME XSTACK, 25, STACK
ARGFRAME XSTACK, 25, STACK
FUNCALL RunBlindNode, SendDebugInfo
LOCFRAME XSTACK, 25, STACK
ARGFRAME XSTACK, 25, STACK
FUNCALL RunBlindNode, AddToSleepTimer
LOCFRAME XSTACK, 25, STACK
ARGFRAME XSTACK, 25, STACK
FUNCALL RunBlindNode, AddToSleepTimer
LOCFRAME XSTACK, 25, STACK
ARGFRAME XSTACK, 25, STACK
FUNCALL RunBlindNode, mpmSetAndResumeMacAndCpuPowerMode
LOCFRAME XSTACK, 25, STACK
ARGFRAME XSTACK, 25, STACK
MOV A,#-0xe
LCALL ?BANKED_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-13)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-14)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 14)
; Saved register size: 14
; Auto size: 11
MOV A,#-0xb
LCALL ?ALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 25)
// 82 BYTE packetType;
// 83 UINT8 refNodeRequested;
// 84 UINT8 nbrOfPacketsReceivedFromNode;
// 85 UINT8 nbrOfNodesToUse;
// 86 UINT8 nbrOfRefNodesReceivedForCalculation;
// 87 WORD refNodeRequestShortAddress;
// 88 UINT8_1 xLocValue, yLocValue;
// 89 UINT16_2 xUpperLeft, yUpperLeft, xStrongestNode, yStrongestNode;
// 90 UINT8 strongestRssi;
// 91
// 92 x = y = UNINITIALIZED_XY_VALUE;
MOV DPTR,#y
MOV A,#-0x1
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
MOV DPTR,#x
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
// 93
// 94 a_val = DEFAULT_A_PARAM;
MOV A,#0x4e
MOV DPTR,#a_val
MOVX @DPTR,A
// 95 n_index = DEFAULT_N_INDEX;
MOV A,#0x10
MOV DPTR,#n_index
MOVX @DPTR,A
// 96
// 97 blindNodeState = INIT_BCAST;
CLR A
MOV DPTR,#blindNodeState
MOVX @DPTR,A
// 98
// 99 SET_BUFFER_EMPTY();
MOV DPTR,#buffer
MOVX @DPTR,A
// 100
// 101 // disable sleep timer
// 102 INT_ENABLE(INUM_ST, INT_OFF);
CLR 0xa8.5
// 103
// 104 // setup for sending A and N to PC after startup
// 105 parametersReceived = TRUE;
MOV A,#0x1
MOV DPTR,#parametersReceived
MOVX @DPTR,A
// 106
// 107 #ifdef CC2430EB
// 108 lcdUpdate("CC4231","Blind node");
; Setup parameters for call to function lcdUpdate
MOV R4,#(`?<Constant "Blind node">` & 0xff)
MOV R5,#((`?<Constant "Blind node">` >> 8) & 0xff)
MOV R2,#(`?<Constant "CC4231">` & 0xff)
MOV R3,#((`?<Constant "CC4231">` >> 8) & 0xff)
MOV DPTR,#(lcdUpdate & 0xffff)
MOV A,#((lcdUpdate >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 109 #endif
// 110 SendText("Blind Node Powerup");
; Setup parameters for call to function SendText
MOV R2,#(`?<Constant "Blind Node Powerup">` & 0xff)
MOV R3,#((`?<Constant "Blind Node Powerup">` >> 8) & 0xff)
MOV DPTR,#(SendText & 0xffff)
MOV A,#((SendText >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 111
// 112 // enable watch dog timer
// 113 WDT_SET_TIMEOUT_PERIOD(SEC_1);
ANL 0xc9,#0xfc
MOV A,0xc9
MOV 0xc9,0xc9
// 114 WDT_ENABLE();
ORL 0xc9,#0x8
SJMP ??RunBlindNode_0
// 115
// 116 while(TRUE) {
// 117 WDT_RESET();
// 118
// 119 if(parametersReceived){
// 120 // ack to pc with packet contains A and N
// 121 SendConfiguration();
??RunBlindNode_1:
; Setup parameters for call to function SendConfiguration
MOV DPTR,#(SendConfiguration & 0xffff)
MOV A,#((SendConfiguration >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 122 parametersReceived = FALSE;
CLR A
MOV DPTR,#parametersReceived
MOVX @DPTR,A
// 123 // start a new calculation with new parameters
// 124 blindNodeState = INIT_BCAST;
MOV DPTR,#blindNodeState
MOVX @DPTR,A
// 125 }
// 126
// 127 switch (blindNodeState){
// 128 case INIT_BCAST:
// 129 nbrOfBCastReplys = 0;
??RunBlindNode_2:
CLR A
MOV DPTR,#nbrOfBCastReplys
MOVX @DPTR,A
// 130 nbrOfRetries = 0;
MOV DPTR,#nbrOfRetries
MOVX @DPTR,A
// 131 memset(refNodesForCalculation, 0, sizeof(refNodesForCalculation));
; Setup parameters for call to function memset
MOV ?V0 + 2,#0x40
MOV ?V0 + 3,A
MOV R0,#?V0 + 2
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 27)
MOV R4,#0x0
MOV R5,#0x0
MOV R2,#(refNodesForCalculation & 0xff)
MOV R3,#((refNodesForCalculation >> 8) & 0xff)
MOV DPTR,#(memset & 0xffff)
MOV A,#((memset >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,#0x2
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 25)
// 132 blindNodeState = BCAST_REQUEST;
MOV A,#0x1
??RunBlindNode_3:
MOV DPTR,#blindNodeState
MOVX @DPTR,A
// 133 SET_BUFFER_EMPTY();
??RunBlindNode_4:
CLR A
MOV DPTR,#buffer
??RunBlindNode_5:
MOVX @DPTR,A
??RunBlindNode_0:
MOV A,#0xf
ANL A,0xc9
ORL A,#0xa0
MOV 0xc9,A
MOV A,#0xf
ANL A,0xc9
ORL A,#0x50
MOV 0xc9,A
MOV DPTR,#parametersReceived
MOVX A,@DPTR
JNZ ??RunBlindNode_1
MOV DPTR,#blindNodeState
MOVX A,@DPTR
LCALL ?UC_SWITCH_DENSE
`?<Jumptable for RunBlindNode>_0`:
DB 0
DB 9
DW ??RunBlindNode_6
DW ??RunBlindNode_2
DW ??RunBlindNode_7
DW ??RunBlindNode_8
DW ??RunBlindNode_9
DW ??RunBlindNode_10
DW ??RunBlindNode_11
DW ??RunBlindNode_12
DW ??RunBlindNode_13
DW ??RunBlindNode_14
DW ??RunBlindNode_14
// 134 break;
// 135 case BCAST_REQUEST:
// 136 #ifdef USE_LED
// 137 LED1 = LED_ON;
??RunBlindNode_7:
CLR 0x90.0
// 138 #endif
// 139 ReqSignals(BROADCAST_ADDR);
; Setup parameters for call to function ReqSignals
MOV R2,#-0x1
MOV R3,#-0x1
MOV DPTR,#(ReqSignals & 0xffff)
MOV A,#((ReqSignals >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 140 nbrOfRetries++;
MOV DPTR,#nbrOfRetries
MOVX A,@DPTR
INC A
MOVX @DPTR,A
// 141
// 142 blindNodeState = RECEIVE_BCAST_REPLY;
MOV A,#0x2
MOV DPTR,#blindNodeState
MOVX @DPTR,A
// 143 AddToSleepTimer(BLIND_NODE_WAIT_FOR_BCAST_REPLY);
; Setup parameters for call to function AddToSleepTimer
MOV R2,#0x64
MOV R3,#0x0
MOV DPTR,#(AddToSleepTimer & 0xffff)
MOV A,#((AddToSleepTimer >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 144 INT_SETFLAG(INUM_ST, INT_CLR);
CLR 0xc0.7
// 145 INT_ENABLE(INUM_ST, INT_ON);
SETB 0xa8.5
// 146 #ifdef USE_LED
// 147 LED1 = LED_OFF;
SETB 0x90.0
SJMP ??RunBlindNode_0
// 148 #endif
// 149 break;
// 150 case RECEIVE_BCAST_REPLY:
// 151 if (msgReceived)
??RunBlindNode_8:
MOV DPTR,#msgReceived
MOVX A,@DPTR
JZ ??RunBlindNode_0
// 152 {
// 153 msgReceived = FALSE;
CLR A
MOVX @DPTR,A
// 154 packetType = buffer.b.pMsdu[PACKET_INDEX_TYPE];
// 155 if (packetType == PACKET_TYPE_REF_NODE_POSITION)
MOV DPTR,#(buffer + 27)
MOVX A,@DPTR
XRL A,#0x12
JNZ ??RunBlindNode_4
// 156 {
// 157 HandleBCastReply(buffer.b.srcAddr.Short, buffer.b.mpduLinkQuality, buffer.b.pMsdu);
; Setup parameters for call to function HandleBCastReply
MOV R4,#((buffer + 27) & 0xff)
MOV R5,#(((buffer + 27) >> 8) & 0xff)
MOV DPTR,#(buffer + 23)
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#(buffer + 4)
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R3,A
MOV DPTR,#(HandleBCastReply & 0xffff)
MOV A,#((HandleBCastReply >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 158 }
// 159 SET_BUFFER_EMPTY();
LJMP ??RunBlindNode_4 & 0xFFFF
// 160 }
// 161 // state transition handled by Sleep Timer
// 162 break;
// 163 case CHECK_REPLIES:
// 164 if(nbrOfRetries < MAX_NBR_OF_REQUESTS)
??RunBlindNode_9:
MOV DPTR,#nbrOfRetries
MOVX A,@DPTR
CLR C
SUBB A,#0x8
JNC ??RunBlindNode_15
// 165 {
// 166 // Do a new broadcast
// 167 blindNodeState = BCAST_REQUEST;
MOV A,#0x1
??RunBlindNode_16:
MOV DPTR,#blindNodeState
LJMP ??RunBlindNode_5 & 0xFFFF
// 168 }
// 169 else{
// 170 // Calculate upper left corner of 64x64 square, node with highest RSSI is
// 171 // placed in the midle of this square
// 172 CalculateUpperLeft(&xUpperLeft, &yUpperLeft, &xStrongestNode, &yStrongestNode, &strongestRssi);
??RunBlindNode_15:
; Setup parameters for call to function CalculateUpperLeft
MOV A,#0x6
LCALL ?XSTACK_DISP0_8
MOV ?V0 + 2,DPL
MOV ?V0 + 3,DPH
MOV R0,#?V0 + 2
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 27)
MOV A,#0xb
LCALL ?XSTACK_DISP0_8
MOV ?V0 + 2,DPL
MOV ?V0 + 3,DPH
MOV R0,#?V0 + 2
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 29)
MOV A,#0xb
LCALL ?XSTACK_DISP0_8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -