📄 ref_node.s51
字号:
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 8)
; Saved register size: 8
; Auto size: 0
// 361 BYTE bank;
// 362 BOOL res;
// 363
// 364 bank = MEMCTR;
MOV A,0xc7
MOV R6,A
// 365 res = FALSE;
MOV R7,#0x0
// 366
// 367 if(findNewestEntry()){
; Setup parameters for call to function findNewestEntry
LCALL findNewestEntry
MOV A,R1
JZ ??getCoordinates_0
// 368 // storing the coordinates
// 369 x = pFlashEntry->xyz_coordinates.x;
MOV DPTR,#pFlashEntry
MOVX A,@DPTR
MOV R0,A
INC DPTR
MOVX A,@DPTR
MOV DPH,A
MOV DPL,R0
INC DPTR
INC DPTR
INC DPTR
CLR A
MOVC A,@A+DPTR
MOV R0,A
MOV A,#0x1
MOVC A,@A+DPTR
MOV R1,A
MOV DPTR,#x
MOV A,R0
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
// 370 y = pFlashEntry->xyz_coordinates.y;
MOV DPTR,#pFlashEntry
MOVX A,@DPTR
MOV R0,A
INC DPTR
MOVX A,@DPTR
MOV DPH,A
MOV DPL,R0
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
CLR A
MOVC A,@A+DPTR
MOV R0,A
MOV A,#0x1
MOVC A,@A+DPTR
MOV R1,A
MOV DPTR,#y
MOV A,R0
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
// 371 z = pFlashEntry->xyz_coordinates.z;
MOV DPTR,#pFlashEntry
MOVX A,@DPTR
MOV R0,A
INC DPTR
MOVX A,@DPTR
MOV DPH,A
MOV DPL,R0
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
CLR A
MOVC A,@A+DPTR
MOV DPTR,#z
MOVX @DPTR,A
// 372 res = TRUE;
INC R7
// 373 }
// 374 MEMCTR = bank;
??getCoordinates_0:
MOV 0xc7,R6
// 375 return res;
MOV A,R7
MOV R1,A
CFI EndBlock cfiBlock8
REQUIRE ?Subroutine1
; // Fall through to label ?Subroutine1
// 376 }
RSEG NEAR_CODE:CODE:NOROOT(0)
?Subroutine1:
CFI Block cfiBlock9 Using cfiCommon0
CFI NoFunction
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 8)
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-4)))
MOV R7,#0x1
LJMP ?FUNC_LEAVE_XDATA
CFI EndBlock cfiBlock9
// 377
// 378
// 379 /******************************************************************************
// 380 *
// 381 * Store the corrdinates in flash
// 382 ******************************************************************************/
RSEG NEAR_CODE:CODE:NOROOT(0)
// 383 __near_func void storeCoordinates(void){
storeCoordinates:
CFI Block cfiBlock10 Using cfiCommon0
CFI Function storeCoordinates
FUNCALL storeCoordinates, findNewestEntry
LOCFRAME XSTACK, 8, STACK
ARGFRAME XSTACK, 8, STACK
FUNCALL storeCoordinates, halFlashErasePage
LOCFRAME XSTACK, 8, STACK
ARGFRAME XSTACK, 8, STACK
FUNCALL storeCoordinates, writeToFlash
LOCFRAME XSTACK, 8, STACK
ARGFRAME XSTACK, 8, STACK
MOV A,#-0x8
LCALL ?FUNC_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 8)
; Saved register size: 8
; Auto size: 0
// 384 BYTE bank;
// 385
// 386 EA = FALSE;
CLR 0xa8.7
// 387 bank = MEMCTR;
MOV A,0xc7
MOV R6,A
// 388
// 389 if( !findNewestEntry() )
; Setup parameters for call to function findNewestEntry
LCALL findNewestEntry
MOV A,R1
JNZ ??storeCoordinates_0
// 390 {
// 391 MEMCTR = bank;
MOV 0xc7,R6
// 392 halFlashErasePage(pRamBuffer, PAGE_NUMBER);
; Setup parameters for call to function halFlashErasePage
MOV R1,#0x3e
MOV R2,#(pRamBuffer & 0xff)
MOV R3,#((pRamBuffer >> 8) & 0xff)
MOV DPTR,#(halFlashErasePage & 0xffff)
MOV A,#((halFlashErasePage >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 393 bank = MEMCTR;
MOV A,0xc7
MOV R6,A
// 394 SET_MEMORY_BANK(XYZ_BANK);
ORL 0xc7,#0x30
MOV A,0xc7
// 395 pFlashEntry = (FLASH_ENTRY __code *)XYZ_FLASH_ADDRESS;
MOV DPTR,#pFlashEntry
CLR A
MOVX @DPTR,A
INC DPTR
MOV A,#-0x10
MOVX @DPTR,A
// 396 }
// 397
// 398 // Checking that the data needs to be updated
// 399 if((pFlashEntry->xyz_coordinates.x != x) ||
// 400 (pFlashEntry->xyz_coordinates.y != y) ||
// 401 (pFlashEntry->xyz_coordinates.z != z))
??storeCoordinates_0:
MOV DPTR,#pFlashEntry
MOVX A,@DPTR
MOV R0,A
INC DPTR
MOVX A,@DPTR
MOV DPH,A
MOV DPL,R0
INC DPTR
INC DPTR
INC DPTR
CLR A
MOVC A,@A+DPTR
MOV R0,A
MOV A,#0x1
MOVC A,@A+DPTR
MOV R1,A
MOV DPTR,#x
MOVX A,@DPTR
XRL A,R0
JNZ ??storeCoordinates_1
INC DPTR
MOVX A,@DPTR
XRL A,R1
??storeCoordinates_1:
JNZ ??storeCoordinates_2
MOV DPTR,#pFlashEntry
MOVX A,@DPTR
MOV R0,A
INC DPTR
MOVX A,@DPTR
MOV DPH,A
MOV DPL,R0
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
CLR A
MOVC A,@A+DPTR
MOV R0,A
MOV A,#0x1
MOVC A,@A+DPTR
MOV R1,A
MOV DPTR,#y
MOVX A,@DPTR
XRL A,R0
JNZ ??storeCoordinates_3
INC DPTR
MOVX A,@DPTR
XRL A,R1
??storeCoordinates_3:
JNZ ??storeCoordinates_2
MOV DPTR,#pFlashEntry
MOVX A,@DPTR
MOV R0,A
INC DPTR
MOVX A,@DPTR
MOV DPH,A
MOV DPL,R0
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
CLR A
MOVC A,@A+DPTR
MOV R2,A
MOV DPTR,#z
MOVX A,@DPTR
XRL A,R2
JZ ??storeCoordinates_4
// 402 {
// 403 // overwriting the old coordinates and store new ones, 16 bytes in total
// 404 flashEntries[0].status[0] = 0;
??storeCoordinates_2:
CLR A
MOV DPTR,#flashEntries
MOVX @DPTR,A
// 405 flashEntries[1].status[0] = 0xFF;
MOV A,#-0x1
MOV DPTR,#(flashEntries + 8)
MOVX @DPTR,A
// 406 flashEntries[1].xyz_coordinates.x = x;
MOV DPTR,#x
MOVX A,@DPTR
MOV R0,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#(flashEntries + 11)
MOV A,R0
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
// 407 flashEntries[1].xyz_coordinates.y = y;
MOV DPTR,#y
MOVX A,@DPTR
MOV R0,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#(flashEntries + 13)
MOV A,R0
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
// 408 flashEntries[1].xyz_coordinates.z = z;
MOV DPTR,#z
MOVX A,@DPTR
MOV DPTR,#(flashEntries + 15)
MOVX @DPTR,A
// 409
// 410 writeToFlash();
; Setup parameters for call to function writeToFlash
LCALL writeToFlash
// 411 }
// 412 MEMCTR = bank;
??storeCoordinates_4:
MOV 0xc7,R6
// 413 EA = TRUE;
SETB 0xa8.7
// 414 }
LJMP ?Subroutine1
CFI EndBlock cfiBlock10
RSEG XDATA_ID:CODE:NOROOT(0)
`?<Initializer for <Constant "RefNode Powerup">`:
DB "RefNode Powerup"
RSEG XDATA_ID:CODE:NOROOT(0)
`?<Initializer for __Constant_0>`:
DD 0
RSEG XDATA_ID:CODE:NOROOT(0)
`?<Initializer for __Constant_28488>`:
DD 165000
RSEG XDATA_ID:CODE:NOROOT(0)
`?<Initializer for __Constant_ffffff>`:
DD 16777215
RSEG XDATA_I:XDATA:NOROOT(0)
`?<Constant "RefNode Powerup">`:
DS 16
REQUIRE `?<Initializer for <Constant "RefNode Powerup">`
REQUIRE __INIT_XDATA_I
RSEG XDATA_I:XDATA:NOROOT(0)
__Constant_0:
DS 4
REQUIRE `?<Initializer for __Constant_0>`
REQUIRE __INIT_XDATA_I
RSEG XDATA_I:XDATA:NOROOT(0)
__Constant_28488:
DS 4
REQUIRE `?<Initializer for __Constant_28488>`
REQUIRE __INIT_XDATA_I
RSEG XDATA_I:XDATA:NOROOT(0)
__Constant_ffffff:
DS 4
REQUIRE `?<Initializer for __Constant_ffffff>`
REQUIRE __INIT_XDATA_I
ASEGN SFR_AN:DATA:NOROOT,090H
// union <unnamed> volatile __sfr _A_P1
_A_P1:
DS 1
ASEGN SFR_AN:DATA:NOROOT,0a8H
// union <unnamed> volatile __sfr _A_IEN0
_A_IEN0:
DS 1
ASEGN SFR_AN:DATA:NOROOT,0c0H
// union <unnamed> volatile __sfr _A_IRCON
_A_IRCON:
DS 1
END
//
// 291 bytes in segment BANKED_CODE
// 1 115 bytes in segment NEAR_CODE
// 10 bytes in segment PM0_XDATA
// 17 bytes in segment SFR_AN
// 28 bytes in segment XDATA_I
// 28 bytes in segment XDATA_ID
// 27 bytes in segment XDATA_Z
//
// 1 422 bytes of CODE memory (+ 12 bytes shared)
// 0 bytes of DATA memory (+ 17 bytes shared)
// 53 bytes of XDATA memory (+ 12 bytes shared)
//
//Errors: none
//Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -