📄 rd_useserialframe_proc.lis
字号:
0142 8396 adiw R24,35
0144 2C80 ldd R2,y+4
0146 FC01 movw R30,R24
0148 3080 ldd R3,z+0
014A 3224 eor R3,R2
014C 3082 std z+0,R3
014E .dbline 223
014E ; ADT_ADD_DATA_TO_QUEUE((*pQueue),cTempData); //将该信息添加到缓冲区
014E 222D mov R18,R2
0150 8B01 movw R16,R22
0152 CB01 movw R24,R22
0154 0A96 adiw R24,10
0156 5C01 movw R10,R24
0158 FC01 movw R30,R24
015A A081 ldd R26,z+0
015C B181 ldd R27,z+1
015E FD01 movw R30,R26
0160 00D0 rcall xicall
0162 .dbline 225
0162 ;
0162 ; }
0162 L21:
0162 .dbline 227
0162 ;
0162 ; if ((pQueue->nCount) == ((pSFP->cFrameSize) - 1))
0162 FA01 movw R30,R20
0164 84A1 ldd R24,z+36
0166 8150 subi R24,1
0168 9927 clr R25
016A FB01 movw R30,R22
016C 2084 ldd R2,z+8
016E 3184 ldd R3,z+9
0170 2816 cp R2,R24
0172 3906 cpc R3,R25
0174 E1F4 brne L23
0176 X9:
0176 .dbline 228
0176 ; {
0176 .dbline 229
0176 ; if (pSFP->cXORCheck)
0176 FA01 movw R30,R20
0178 23A0 ldd R2,z+35
017A 2220 tst R2
017C 09F4 brne X17
017E 33C0 rjmp L4
0180 X17:
0180 X10:
0180 .dbline 230
0180 ; {
0180 .dbline 233
0180 ; //XOR校验错误
0180 ; //错误的数据帧长度
0180 ; ADT_QUEUE_LET_EMPTY((*pQueue)) //清空队列
0180 .dbline 233
0180 2224 clr R2
0182 3324 clr R3
0184 FB01 movw R30,R22
0186 3582 std z+5,R3
0188 2482 std z+4,R2
018A .dbline 233
018A 3782 std z+7,R3
018C 2682 std z+6,R2
018E .dbline 233
018E 3186 std z+9,R3
0190 2086 std z+8,R2
0192 .dbline 233
0192 .dbline 235
0192 ;
0192 ; SFP_STOP_ALL_ACTION
0192 2B82 std y+3,R2
0194 .dbline 237
0194 ;
0194 ; pSFP->cActionFlag = cTempActionFlag;
0194 FA01 movw R30,R20
0196 22A2 std z+34,R2
0198 .dbline 238
0198 ; cTempData = SFP_ERROR_XOR;
0198 81E0 ldi R24,1
019A 8C83 std y+4,R24
019C .dbline 239
019C ; SPF_Send_MSG(pSFP,SFP_CMD_ERROR,&cTempData,1);
019C 8A83 std y+2,R24
019E CE01 movw R24,R28
01A0 0496 adiw R24,4
01A2 9983 std y+1,R25
01A4 8883 std y+0,R24
01A6 2DEE ldi R18,237
01A8 8F01 movw R16,R30
01AA 87D0 rcall _SPF_Send_MSG
01AC .dbline 240
01AC ; return ;
01AC 1CC0 rjmp L4
01AE L23:
01AE .dbline 247
01AE ; }
01AE ; else
01AE ; {
01AE ; //ReceiveData = cTempData;
01AE ; }
01AE ; }
01AE ; else if ((pQueue->nCount) == (pSFP->cFrameSize))
01AE FA01 movw R30,R20
01B0 24A0 ldd R2,z+36
01B2 3324 clr R3
01B4 FB01 movw R30,R22
01B6 4084 ldd R4,z+8
01B8 5184 ldd R5,z+9
01BA 4214 cp R4,R2
01BC 5304 cpc R5,R3
01BE 99F4 brne L4
01C0 X11:
01C0 .dbline 248
01C0 ; {
01C0 .dbline 250
01C0 ; //所有的数据都添加完成
01C0 ; if (cTempData == pSFP->cEndByte)
01C0 FA01 movw R30,R20
01C2 218C ldd R2,z+25
01C4 3C80 ldd R3,y+4
01C6 3214 cp R3,R2
01C8 11F4 brne L29
01CA X12:
01CA .dbline 251
01CA ; {
01CA .dbline 253
01CA ; //获得了所有的数据,并且数据帧正确
01CA ; SFP_Check_Frames(pSFP); //进行数据帧检测
01CA 8F01 movw R16,R30
01CC 0ED0 rcall _SFP_Check_Frames
01CE .dbline 254
01CE ; }
01CE L29:
01CE .dbline 256
01CE ;
01CE ; ADT_QUEUE_LET_EMPTY((*pQueue)) //清空队列
01CE .dbline 256
01CE 2224 clr R2
01D0 3324 clr R3
01D2 FB01 movw R30,R22
01D4 3582 std z+5,R3
01D6 2482 std z+4,R2
01D8 .dbline 256
01D8 3782 std z+7,R3
01DA 2682 std z+6,R2
01DC .dbline 256
01DC 3186 std z+9,R3
01DE 2086 std z+8,R2
01E0 .dbline 256
01E0 .dbline 258
01E0 ;
01E0 ; SFP_STOP_ALL_ACTION
01E0 2B82 std y+3,R2
01E2 .dbline 259
01E2 ; pSFP->cActionFlag = cTempActionFlag;
01E2 FA01 movw R30,R20
01E4 22A2 std z+34,R2
01E6 .dbline 261
01E6 ;
01E6 ; return ;
01E6 .dbline 266
01E6 ; }
01E6 ;
01E6 ;
01E6 ;
01E6 ; return ;
01E6 L19:
01E6 .dbline -2
01E6 L4:
01E6 .dbline 0 ; func end
01E6 2596 adiw R28,5
01E8 00C0 rjmp pop_xgsetF00C
01EA .dbsym l cTempData 4 c
01EA .dbsym r pQueue 22 pS[AbstructDataTypeQueue]
01EA .dbsym l cTempActionFlag 3 c
01EA .dbsym r pSFP 20 pS[SerialFrameProcess]
01EA .dbend
01EA .dbfunc s SFP_Check_Frames _SFP_Check_Frames fV
01EA ; cTempData -> y+4
01EA ; pMsgItem -> R22,R23
01EA ; pQueue -> R10,R11
01EA ; n -> y+3
01EA ; pSFP -> R20,R21
.even
01EA _SFP_Check_Frames:
01EA 00D0 rcall push_xgsetF03C
01EC A801 movw R20,R16
01EE 2597 sbiw R28,5
01F0 .dbline -1
01F0 .dbline 278
01F0 ; }
01F0 ;
01F0 ; }
01F0 ;
01F0 ; /***********************************************************
01F0 ; * 函数说明:数据帧提取检测函数 *
01F0 ; * 输入: 串行数据帧检测结构指针 *
01F0 ; * 输出: 无 *
01F0 ; * 调用函数:无 *
01F0 ; ***********************************************************/
01F0 ; static void SFP_Check_Frames(SERIAL_FRAME_PROCESS *pSFP)
01F0 ; {
01F0 .dbline 279
01F0 ; uint8 n = 0;
01F0 2224 clr R2
01F2 2B82 std y+3,R2
01F4 .dbline 280
01F4 ; uint8 cTempData = 0;
01F4 2C82 std y+4,R2
01F6 .dbline 281
01F6 ; MSG_ITEM *pMsgItem = &(pSFP->MsgItem);
01F6 BA01 movw R22,R20
01F8 6C5E subi R22,236 ; offset = 20
01FA 7F4F sbci R23,255
01FC .dbline 282
01FC ; ADT_QUEUE *pQueue = &(pSFP->FrameBuffer);
01FC 5A01 movw R10,R20
01FE .dbline 285
01FE ;
01FE ; //将头部去除
01FE ; ADT_GET_DATA_FROM_QUEUE((*pQueue),n);
01FE 9E01 movw R18,R28
0200 2D5F subi R18,253 ; offset = 3
0202 3F4F sbci R19,255
0204 8501 movw R16,R10
0206 C501 movw R24,R10
0208 0C96 adiw R24,12
020A FC01 movw R30,R24
020C A081 ldd R26,z+0
020E B181 ldd R27,z+1
0210 FD01 movw R30,R26
0212 00D0 rcall xicall
0214 .dbline 288
0214 ;
0214 ; //获取消息长度
0214 ; if (!(pSFP->cFixLength))
0214 FA01 movw R30,R20
0216 228C ldd R2,z+26
0218 2220 tst R2
021A 81F4 brne L32
021C X18:
021C .dbline 289
021C ; {
021C .dbline 290
021C ; ADT_GET_DATA_FROM_QUEUE((*pQueue),(pMsgItem->cDataLength));
021C 9B01 movw R18,R22
021E 2F5F subi R18,255 ; offset = 1
0220 3F4F sbci R19,255
0222 8F01 movw R16,R30
0224 A485 ldd R26,z+12
0226 B585 ldd R27,z+13
0228 FD01 movw R30,R26
022A 00D0 rcall xicall
022C .dbline 292
022C ;
022C ; pMsgItem->cDataLength -= 5;
022C CB01 movw R24,R22
022E 0196 adiw R24,1
0230 6C01 movw R12,R24
0232 FC01 movw R30,R24
0234 8081 ldd R24,z+0
0236 8550 subi R24,5
0238 8083 std z+0,R24
023A .dbline 293
023A ; }
023A 05C0 rjmp L33
023C L32:
023C .dbline 295
023C ; else
023C ; {
023C .dbline 296
023C ; pMsgItem->cDataLength = pSFP->cFixLength - 4;
023C FA01 movw R30,R20
023E 828D ldd R24,z+26
0240 8450 subi R24,4
0242 FB01 movw R30,R22
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -