📄 qspy.cpp
字号:
b); print(); if (l_matFile != (FILE *)0) { fprintf(l_matFile, "%3d %10u %10u %4u\n", m_rec, t, a, b); } } break; } case QS_QF_PUBLISH: { t = getUint(l_tstampSize); a = getUint(l_sigSize); b = getUint(1); if (OK()) { sprintf(l_line, "%010u PUBLISH: " "Evt(Sig=%s, Pool=%1u, Ref=%2u)\n", t, l_sigDict.get(a, 0), (uint32_t)(b >> 6), (uint32_t)(b & 0x3F)); print(); if (l_matFile != (FILE *)0) { fprintf(l_matFile, "%3d %10u %4u %10u\n", m_rec, t, a, (uint32_t)(b >> 6), (uint32_t)(b & 0x3F)); } } break; } case QS_QF_NEW: { t = getUint(l_tstampSize); a = getUint(l_evtSize); c = getUint(l_sigSize); if (OK()) { sprintf(l_line, "%010u NEW : Evt(Sig=%s, size=%5u)\n", t, l_sigDict.get(c, 0), a); print(); if (l_matFile != (FILE *)0) { fprintf(l_matFile, "%3d %10u %4u %4u\n", m_rec, t, a, c); } } break; } case QS_QF_GC_ATTEMPT: case QS_QF_GC: { t = getUint(l_tstampSize); a = getUint(l_sigSize); b = getUint(1); if (OK()) { sprintf(l_line, "%010u %s : Evt(Sig=%s, Pool=%1d, Ref=%2d)\n", t, (m_rec == QS_QF_GC_ATTEMPT ? "GC-ATT" : "GC "), l_sigDict.get(a, 0), (uint32_t)(b >> 6), (uint32_t)(b & 0x3F)); print(); if (l_matFile != (FILE *)0) { fprintf(l_matFile, "%3d %10u %4u %3u %3u\n", m_rec, t, a, (uint32_t)(b >> 6), (uint32_t)(b & 0x3F)); } } break; } case QS_QF_TICK: { a = getUint(l_tevtCtrSize); if (OK()) { sprintf(l_line, " TICK : Ctr=%10u\n", a); print(); if (l_matFile != (FILE *)0) { fprintf(l_matFile, "%3d %10u\n", m_rec, a); } } break; } case QS_QF_TIMEEVT_ARM: case QS_QF_TIMEEVT_DISARM: { t = getUint(l_tstampSize); a = getUint(l_objPtrSize); b = getUint(l_objPtrSize); c = getUint(l_tevtCtrSize); d = getUint(l_tevtCtrSize); if (OK()) { sprintf(l_line, "%010u TE.%s: Obj=%s Act=%s " "nTicks=%4u Interval=%4u\n", t, (m_rec == QS_QF_TIMEEVT_ARM ? "ARM " : "DARM"), l_objDict.get(a), l_objDict.get(b), c, d); print(); if (l_matFile != (FILE *)0) { fprintf(l_matFile, "%3d %10u %10u %10u %10u %10u\n", m_rec, t, a, b, c, d); } } break; } case QS_QF_TIMEEVT_AUTO_DISARM: { a = getUint(l_objPtrSize); b = getUint(l_objPtrSize); if (OK()) { sprintf(l_line, " TE.ADRM: Obj=%s Act=%s\n", l_objDict.get(a), l_objDict.get(b)); print(); if (l_matFile != (FILE *)0) { fprintf(l_matFile, "%3d %10u %10u\n", m_rec, a, b); } } break; } case QS_QF_TIMEEVT_DISARM_ATTEMPT: { t = getUint(l_tstampSize); a = getUint(l_objPtrSize); b = getUint(l_objPtrSize); if (OK()) { sprintf(l_line, "%010u TE.DATT: Obj=%s Act=%s\n", t, l_objDict.get(a), l_objDict.get(b)); print(); if (l_matFile != (FILE *)0) { fprintf(l_matFile, "%3d %10u %10u %10u\n", m_rec, t, a, b); } } break; } case QS_QF_TIMEEVT_REARM: { t = getUint(l_tstampSize); a = getUint(l_objPtrSize); b = getUint(l_objPtrSize); c = getUint(l_tevtCtrSize); d = getUint(l_tevtCtrSize); e = getUint(1); if (OK()) { sprintf(l_line, "%010u TE.RARM: Obj=%s Act=%s " "nTicks=%4u Interval=%4u WasArmed=%1u\n", t, l_objDict.get(a), l_objDict.get(b), c, d, e); print(); if (l_matFile != (FILE *)0) { fprintf(l_matFile, "%3d %10u %10u %10u %10u %10u %1u\n", m_rec, t, a, b, c, d, e); } } break; } case QS_QF_TIMEEVT_POST: { t = getUint(l_tstampSize); a = getUint(l_objPtrSize); b = getUint(l_sigSize); c = getUint(l_objPtrSize); if (OK()) { sprintf(l_line, "%010u TE.POST: Obj=%s Sig=%s Act=%s\n", t, l_objDict.get(a), l_sigDict.get(b, c), l_objDict.get(c)); print(); if (l_matFile != (FILE *)0) { fprintf(l_matFile, "%3d %10u %10u %4u %10u\n", m_rec, t, a, b, c); } } break; } case QS_QF_INT_LOCK: case QS_QF_INT_UNLOCK: { t = getUint(l_tstampSize); a = getUint(1); if (OK()) { sprintf(l_line, "%010u %s: " "IntLockNest=%2d\n", t, (m_rec == QS_QF_INT_LOCK ? "QF_intL" : "QF_intU"), a); print(); if (l_matFile != (FILE *)0) { fprintf(l_matFile, "%3d %10u %3u\n", m_rec, t, a); } } break; } case QS_QF_ISR_ENTRY: case QS_QF_ISR_EXIT: { t = getUint(l_tstampSize); a = getUint(1); b = getUint(1); if (OK()) { sprintf(l_line, "%010u %s: " "IsrNest=%2u, CurrPrio=%3u\n", t, (m_rec == QS_QF_ISR_ENTRY ? "QF_isrE" : "QF_isrX"), a, b); print(); if (l_matFile != (FILE *)0) { fprintf(l_matFile, "%3d %10u %3u %3u\n", m_rec, t, a, b); } } break; } // QK records ........................................................ case QS_QK_MUTEX_LOCK: case QS_QK_MUTEX_UNLOCK: { t = getUint(l_tstampSize); a = getUint(1); b = getUint(1); if (OK()) { sprintf(l_line, "%010u %s: " "OrgPrio=%2u, CurrPrio=%3u\n", t, (m_rec == QS_QK_MUTEX_LOCK ? "QK_muxL" : "QK_muxU"), a, b); print(); if (l_matFile != (FILE *)0) { fprintf(l_matFile, "%3d %10u %3u %3u\n", m_rec, t, a, b); } } break; } case QS_QK_SCHEDULE: { t = getUint(l_tstampSize); a = getUint(1); b = getUint(1); if (OK()) { sprintf(l_line, "%010u QK_sche: " "prio=%2u, pin=%3u\n", t, a, b); print(); if (l_matFile != (FILE *)0) { fprintf(l_matFile, "%3d %10u %3u %3u\n", m_rec, t, a, b); } } break; } // Miscallaneous QS records .......................................... case QS_SIG_DICTIONARY: { a = getUint(l_sigSize); b = getUint(l_objPtrSize); s = getStr(); if (OK()) { l_sigDict.put(a, b, s); sprintf(l_line, " Sig Dic: %08X,Obj=%08X ->%s\n", a, b, s); print(); if (l_matFile != (FILE *)0) { fprintf(l_matFile, "%3d %s=[%4u %10u];\n", m_rec, getMatDict(s), a, b); } } break; } case QS_OBJ_DICTIONARY: { a = getUint(l_objPtrSize); s = getStr(); if (OK()) { l_objDict.put(a, ((s[0] == '&') ? s + 1 : s)); sprintf(l_line, " Obj Dic: %08X->%s\n", a, s); print(); if (l_matFile != (FILE *)0) { fprintf(l_matFile, "%3d %s=%10u;\n", m_rec, getMatDict(s), a); } } break; } case QS_FUN_DICTIONARY: { a = getUint(l_funPtrSize); s = getStr(); if (OK()) { l_funDict.put(a, ((s[0] == '&') ? s + 1 : s)); sprintf(l_line, " Fun Dic: %08X->%s\n", a, s); print(); if (l_matFile != (FILE *)0) { fprintf(l_matFile, "%3d %s=%10u;\n", m_rec, getMatDict(s), a); } } break; } case QS_ASSERT: { t = getUint(l_tstampSize); a = getUint(2); s = getStr(); if (OK()) { sprintf(l_line, "%010u !ASSERT: File=%s Line=%4hu\n", t, s, a); print(); if (l_matFile != (FILE *)0) { fprintf(l_matFile, "%3d %10u %4u %s\n", m_rec, t, a, s); } } break; } // User records ...................................................... default: { if (m_rec >= QS_USER) { parseUser(); } else { sprintf(l_line, " ??? : Rec=%3u, Len=%3d\n", (unsigned)m_rec, (int)m_len); print(); } break; } }}//............................................................................#define QS_FRAME ((uint8_t)0x7E)#define QS_ESC ((uint8_t)0x7D)#define QS_GOOD_CHKSUM ((uint8_t)0xFF)#define QS_ESC_XOR 0x20#define QS_MAX_RECORD_SIZE 256void qsParse(uint8_t const *buf, size_t nBytes) { static uint8_t esc; static uint8_t seq; static uint8_t chksum; static uint8_t record[QS_MAX_RECORD_SIZE]; static uint8_t *pos = record; // position within the record while (nBytes-- != 0) { uint8_t b = *buf++; if (esc) { esc = (uint8_t)0; b ^= QS_ESC_XOR; } else { if (b == QS_FRAME) { if ((chksum == QS_GOOD_CHKSUM) && (pos >= &record[3])) { if ((uint8_t)(seq + 1) != record[0]) { sprintf(l_line, "*** Dropped %3u records\n", (unsigned)((record[0] - seq - 1) & 0xFF)); print(); } seq = record[0]; QSpyRecord qrec(record[1], &record[2], (uint32_t)(pos - record - 3)); qrec.parse(); } else { sprintf(l_line, "*** Incorrect record past seq=%3u\n", (unsigned)seq); print(); } // get ready for the next record ... chksum = (uint8_t)0; pos = record; continue; } else if (b == QS_ESC) { esc = (uint8_t)1; continue; } } chksum = (uint8_t)(chksum + b); if (pos < &record[sizeof(record)]) { *pos++ = b; } else { sprintf(l_line, "Error, record too long\n"); print(); chksum = (uint8_t)0; pos = record; esc = (uint8_t)0; } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -