📄 rd_useserialframe_proc.lis
字号:
0244 8183 std z+1,R24
0246 .dbline 297
0246 ; }
0246 L33:
0246 .dbline 300
0246 ;
0246 ; //获取指令字
0246 ; ADT_GET_DATA_FROM_QUEUE((*pQueue),(pMsgItem->cCMD));
0246 9B01 movw R18,R22
0248 8501 movw R16,R10
024A C501 movw R24,R10
024C 0C96 adiw R24,12
024E 6C01 movw R12,R24
0250 FC01 movw R30,R24
0252 A081 ldd R26,z+0
0254 B181 ldd R27,z+1
0256 FD01 movw R30,R26
0258 00D0 rcall xicall
025A .dbline 302
025A ;
025A ; for (n = 0;n < (pMsgItem->cDataLength);n++)
025A 2224 clr R2
025C 2B82 std y+3,R2
025E 13C0 rjmp L37
0260 L34:
0260 .dbline 303
0260 ; {
0260 .dbline 305
0260 ; //依次获取所有数据
0260 ; ADT_GET_DATA_FROM_QUEUE((*pQueue),(pMsgItem->pData[n]));
0260 FB01 movw R30,R22
0262 2280 ldd R2,z+2
0264 3380 ldd R3,z+3
0266 2B81 ldd R18,y+3
0268 3327 clr R19
026A 220D add R18,R2
026C 331D adc R19,R3
026E 8501 movw R16,R10
0270 C501 movw R24,R10
0272 0C96 adiw R24,12
0274 6C01 movw R12,R24
0276 FC01 movw R30,R24
0278 A081 ldd R26,z+0
027A B181 ldd R27,z+1
027C FD01 movw R30,R26
027E 00D0 rcall xicall
0280 .dbline 306
0280 ; }
0280 L35:
0280 .dbline 302
0280 8B81 ldd R24,y+3
0282 8F5F subi R24,255 ; addi 1
0284 8B83 std y+3,R24
0286 L37:
0286 .dbline 302
0286 FB01 movw R30,R22
0288 2180 ldd R2,z+1
028A 3B80 ldd R3,y+3
028C 3214 cp R3,R2
028E 40F3 brlo L34
0290 X19:
0290 .dbline 308
0290 ;
0290 ; if (!MsgMapProcess(pSFP->pMsgMap,pMsgItem))
0290 9F01 movw R18,R30
0292 FA01 movw R30,R20
0294 0289 ldd R16,z+18
0296 1389 ldd R17,z+19
0298 00D0 rcall _MsgMapProcess
029A A02E mov R10,R16
029C 0023 tst R16
029E 59F4 brne L38
02A0 X20:
02A0 .dbline 309
02A0 ; {
02A0 .dbline 312
02A0 ; //信息未被正确处理
02A0 ; //有待添加代码
02A0 ; cTempData = SFP_ERROR_CMD_ERROR;
02A0 2224 clr R2
02A2 2C82 std y+4,R2
02A4 .dbline 313
02A4 ; SPF_Send_MSG(pSFP,SFP_CMD_ERROR,&cTempData,1);
02A4 81E0 ldi R24,1
02A6 8A83 std y+2,R24
02A8 CE01 movw R24,R28
02AA 0496 adiw R24,4
02AC 9983 std y+1,R25
02AE 8883 std y+0,R24
02B0 2DEE ldi R18,237
02B2 8A01 movw R16,R20
02B4 02D0 rcall _SPF_Send_MSG
02B6 .dbline 314
02B6 ; }
02B6 L38:
02B6 .dbline -2
02B6 L31:
02B6 .dbline 0 ; func end
02B6 2596 adiw R28,5
02B8 00C0 rjmp pop_xgsetF03C
02BA .dbsym l cTempData 4 c
02BA .dbsym r pMsgItem 22 pS[MsgItem]
02BA .dbsym r pQueue 10 pS[AbstructDataTypeQueue]
02BA .dbsym l n 3 c
02BA .dbsym r pSFP 20 pS[SerialFrameProcess]
02BA .dbend
02BA .dbfunc e SPF_Send_MSG _SPF_Send_MSG fc
02BA ; Reg2 -> R20,R21
02BA ; Reg8 -> R22,R23
02BA ; n1 -> R12
02BA ; cXORCheck0 -> R10
02BA ; Length -> R14
02BA ; pMSG -> y+14
02BA ; cCMD -> R12
02BA ; pSFP -> y+10
.even
02BA _SPF_Send_MSG::
02BA 00D0 rcall push_arg4
02BC 00D0 rcall push_xgsetF0FC
02BE C22E mov R12,R18
02C0 E888 ldd R14,y+16
02C2 .dbline -1
02C2 .dbline 325
02C2 ; }
02C2 ;
02C2 ; /***********************************************************
02C2 ; * 函数说明:消息发送函数 *
02C2 ; * 输入: 串行数据帧检测结构指针,指令,消息,消息长度 *
02C2 ; * 输出: TRUE *
02C2 ; * 调用函数:无 *
02C2 ; ***********************************************************/
02C2 ; BOOL SPF_Send_MSG(SERIAL_FRAME_PROCESS *pSFP,
02C2 ; uint8 cCMD,uint8 *pMSG,uint8 Length)
02C2 ; {
02C2 .dbline 326
02C2 ; uint8 n = 0;
02C2 .dbline 327
02C2 ; uint8 cXORCheck = 0;
02C2 AA24 clr R10
02C4 .dbline 329
02C4 ;
02C4 ; (*(pSFP->OutputDataFunc))(pSFP->cHeadByte); //发送消息头部
02C4 EA85 ldd R30,y+10
02C6 FB85 ldd R31,y+11
02C8 008D ldd R16,z+24
02CA AF01 movw R20,R30
02CC 425E subi R20,226 ; offset = 30
02CE 5F4F sbci R21,255
02D0 FA01 movw R30,R20
02D2 A081 ldd R26,z+0
02D4 B181 ldd R27,z+1
02D6 FD01 movw R30,R26
02D8 00D0 rcall xicall
02DA .dbline 331
02DA ;
02DA ; if (!(pSFP->cFixLength))
02DA EA85 ldd R30,y+10
02DC FB85 ldd R31,y+11
02DE 228C ldd R2,z+26
02E0 2220 tst R2
02E2 51F4 brne L41
02E4 X21:
02E4 .dbline 332
02E4 ; {
02E4 .dbline 333
02E4 ; (*(pSFP->OutputDataFunc))((Length+5)); //发送消息长度
02E4 0E2D mov R16,R14
02E6 0B5F subi R16,251 ; addi 5
02E8 FA01 movw R30,R20
02EA A081 ldd R26,z+0
02EC B181 ldd R27,z+1
02EE FD01 movw R30,R26
02F0 00D0 rcall xicall
02F2 .dbline 334
02F2 ; cXORCheck ^= (Length + 5);
02F2 8E2D mov R24,R14
02F4 8B5F subi R24,251 ; addi 5
02F6 A826 eor R10,R24
02F8 .dbline 335
02F8 ; }
02F8 L41:
02F8 .dbline 337
02F8 ;
02F8 ; (*(pSFP->OutputDataFunc))(cCMD); //发送指令字节
02F8 0C2D mov R16,R12
02FA FA01 movw R30,R20
02FC A081 ldd R26,z+0
02FE B181 ldd R27,z+1
0300 FD01 movw R30,R26
0302 00D0 rcall xicall
0304 .dbline 338
0304 ; cXORCheck ^= cCMD;
0304 AC24 eor R10,R12
0306 .dbline 340
0306 ;
0306 ; for (n = 0;n < Length;n++)
0306 CC24 clr R12
0308 11C0 rjmp L46
030A L43:
030A .dbline 341
030A ; {
030A .dbline 342
030A ; (*(pSFP->OutputDataFunc))(pMSG[n]); //发送消息本体
030A 6C2D mov R22,R12
030C 7727 clr R23
030E 0E84 ldd R0,y+14
0310 1F84 ldd R1,y+15
0312 600D add R22,R0
0314 711D adc R23,R1
0316 FB01 movw R30,R22
0318 0081 ldd R16,z+0
031A FA01 movw R30,R20
031C A081 ldd R26,z+0
031E B181 ldd R27,z+1
0320 FD01 movw R30,R26
0322 00D0 rcall xicall
0324 .dbline 343
0324 ; cXORCheck ^= pMSG[n];
0324 FB01 movw R30,R22
0326 2080 ldd R2,z+0
0328 A224 eor R10,R2
032A .dbline 344
032A ; }
032A L44:
032A .dbline 340
032A C394 inc R12
032C L46:
032C .dbline 340
032C CE14 cp R12,R14
032E 68F3 brlo L43
0330 X22:
0330 .dbline 346
0330 ;
0330 ; (*(pSFP->OutputDataFunc))(cXORCheck); //发送校验字节
0330 0A2D mov R16,R10
0332 FA01 movw R30,R20
0334 A081 ldd R26,z+0
0336 B181 ldd R27,z+1
0338 FD01 movw R30,R26
033A 00D0 rcall xicall
033C .dbline 347
033C ; (*(pSFP->OutputDataFunc))(pSFP->cEndByte); //发送消息头部
033C EA85 ldd R30,y+10
033E FB85 ldd R31,y+11
0340 018D ldd R16,z+25
0342 FA01 movw R30,R20
0344 A081 ldd R26,z+0
0346 B181 ldd R27,z+1
0348 FD01 movw R30,R26
034A 00D0 rcall xicall
034C .dbline 349
034C ;
034C ; return TRUE;
034C 01E0 ldi R16,1
034E .dbline -2
034E L40:
034E .dbline 0 ; func end
034E 00D0 rcall pop_xgsetF0FC
0350 2496 adiw R28,4
0352 0895 ret
0354 .dbsym r Reg2 20 pV
0354 .dbsym r Reg8 22 pV
0354 .dbsym r n1 12 c
0354 .dbsym r cXORCheck0 10 c
0354 .dbsym r Length 14 c
0354 .dbsym l pMSG 14 pc
0354 .dbsym r cCMD 12 c
0354 .dbsym l pSFP 10 pS[SerialFrameProcess]
0354 .dbend
0354 ; }
0354 ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -