69 std::uint_fast16_t
const stoSize)
noexcept
80 priv_.locFilter_AP =
nullptr;
83 priv_.end =
static_cast<QSCtr>(stoSize);
119 bool const isRemove = (filter < 0);
120 std::uint16_t
const rec = isRemove
121 ?
static_cast<std::uint16_t
>(-filter)
122 :
static_cast<std::uint16_t
>(filter);
125 std::uint8_t
const tmp = (isRemove ? 0x00U : 0xFFU);
128 for (i = 0U; i <
Q_DIM(priv_.glbFilter); i += 4U) {
129 priv_.glbFilter[i ] = tmp;
130 priv_.glbFilter[i + 1U] = tmp;
131 priv_.glbFilter[i + 2U] = tmp;
132 priv_.glbFilter[i + 3U] = tmp;
138 priv_.glbFilter[0] = 0x01U;
139 priv_.glbFilter[7] = 0xFCU;
140 priv_.glbFilter[8] = 0x7FU;
144 priv_.glbFilter[15] = 0x1FU;
150 priv_.glbFilter[0] &=
151 static_cast<std::uint8_t
>(~0xFEU & 0xFFU);
152 priv_.glbFilter[1] &=
153 static_cast<std::uint8_t
>(~0x03U & 0xFFU);
154 priv_.glbFilter[6] &=
155 static_cast<std::uint8_t
>(~0x80U & 0xFFU);
156 priv_.glbFilter[7] &=
157 static_cast<std::uint8_t
>(~0x03U & 0xFFU);
160 priv_.glbFilter[0] |= 0xFEU;
161 priv_.glbFilter[1] |= 0x03U;
162 priv_.glbFilter[6] |= 0x80U;
163 priv_.glbFilter[7] |= 0x03U;
168 priv_.glbFilter[1] &=
169 static_cast<std::uint8_t
>(~0xFCU & 0xFFU);
170 priv_.glbFilter[2] &=
171 static_cast<std::uint8_t
>(~0x07U & 0xFFU);
172 priv_.glbFilter[5] &=
173 static_cast<std::uint8_t
>(~0x20U & 0xFFU);
176 priv_.glbFilter[1] |= 0xFCU;
177 priv_.glbFilter[2] |= 0x07U;
178 priv_.glbFilter[5] |= 0x20U;
183 priv_.glbFilter[2] &=
184 static_cast<std::uint8_t
>(~0x78U & 0xFFU);
185 priv_.glbFilter[5] &=
186 static_cast<std::uint8_t
>(~0x40U & 0xFFU);
189 priv_.glbFilter[2] |= 0x78U;
190 priv_.glbFilter[5] |= 0x40U;
195 priv_.glbFilter[3] &=
196 static_cast<std::uint8_t
>(~0x03U & 0xFFU);
197 priv_.glbFilter[5] &=
198 static_cast<std::uint8_t
>(~0x80U & 0xFFU);
201 priv_.glbFilter[3] |= 0x03U;
202 priv_.glbFilter[5] |= 0x80U;
207 priv_.glbFilter[2] &=
208 static_cast<std::uint8_t
>(~0x80U & 0xFFU);
209 priv_.glbFilter[3] &=
210 static_cast<std::uint8_t
>(~0xFCU & 0xFFU);
211 priv_.glbFilter[4] &=
212 static_cast<std::uint8_t
>(~0xC0U & 0xFFU);
213 priv_.glbFilter[5] &=
214 static_cast<std::uint8_t
>(~0x1FU & 0xFFU);
217 priv_.glbFilter[2] |= 0x80U;
218 priv_.glbFilter[3] |= 0xFCU;
219 priv_.glbFilter[4] |= 0xC0U;
220 priv_.glbFilter[5] |= 0x1FU;
225 priv_.glbFilter[4] &=
226 static_cast<std::uint8_t
>(~0x3FU & 0xFFU);
229 priv_.glbFilter[4] |= 0x3FU;
234 priv_.glbFilter[6] &=
235 static_cast<std::uint8_t
>(~0x7FU & 0xFFU);
238 priv_.glbFilter[6] |= 0x7FU;
243 priv_.glbFilter[12] &=
244 static_cast<std::uint8_t
>(~0xF0U & 0xFFU);
245 priv_.glbFilter[13] &=
246 static_cast<std::uint8_t
>(~0x01U & 0xFFU);
249 priv_.glbFilter[12] |= 0xF0U;
250 priv_.glbFilter[13] |= 0x01U;
255 priv_.glbFilter[13] &=
256 static_cast<std::uint8_t
>(~0x3EU & 0xFFU);
259 priv_.glbFilter[13] |= 0x3EU;
264 priv_.glbFilter[13] &=
265 static_cast<std::uint8_t
>(~0xC0U & 0xFFU);
266 priv_.glbFilter[14] &=
267 static_cast<std::uint8_t
>(~0x07U & 0xFFU);
270 priv_.glbFilter[13] |= 0xC0U;
271 priv_.glbFilter[14] |= 0x07U;
276 priv_.glbFilter[14] &=
277 static_cast<std::uint8_t
>(~0xF8U & 0xFFU);
280 priv_.glbFilter[14] |= 0xF8U;
285 priv_.glbFilter[15] &= 0x1FU;
288 priv_.glbFilter[15] |= 0x1FU;
293 priv_.glbFilter[12] &=
294 static_cast<std::uint8_t
>(~0xF0U & 0xFFU);
295 priv_.glbFilter[13] = 0U;
296 priv_.glbFilter[14] = 0U;
297 priv_.glbFilter[15] &=
298 static_cast<std::uint8_t
>(~0x1FU & 0xFFU);
301 priv_.glbFilter[12] |= 0xF0U;
302 priv_.glbFilter[13] |= 0xFFU;
303 priv_.glbFilter[14] |= 0xFFU;
304 priv_.glbFilter[15] |= 0x1FU;
312 priv_.glbFilter[rec >> 3U]
313 &=
static_cast<std::uint8_t
>(~(1U << (rec & 7U)) & 0xFFU);
316 priv_.glbFilter[rec >> 3U]
317 |=
static_cast<std::uint8_t
>(1U << (rec & 7U));
319 priv_.glbFilter[15] &= 0x1FU;
344 bool const isRemove = (filter < 0);
345 std::uint16_t
const qs_id = isRemove
346 ?
static_cast<std::uint16_t
>(-filter)
347 :
static_cast<std::uint16_t
>(filter);
348 std::uint8_t
const tmp = (isRemove ? 0x00U : 0xFFU);
353 for (i = 0U; i <
Q_DIM(priv_.locFilter); i += 4U) {
354 priv_.locFilter[i ] = tmp;
355 priv_.locFilter[i + 1U] = tmp;
356 priv_.locFilter[i + 2U] = tmp;
357 priv_.locFilter[i + 3U] = tmp;
361 for (i = 0U; i < 8U; i += 4U) {
362 priv_.locFilter[i ] = tmp;
363 priv_.locFilter[i + 1U] = tmp;
364 priv_.locFilter[i + 2U] = tmp;
365 priv_.locFilter[i + 3U] = tmp;
370 priv_.locFilter[i ] = tmp;
371 priv_.locFilter[i + 1U] = tmp;
375 priv_.locFilter[i ] = tmp;
376 priv_.locFilter[i + 1U] = tmp;
377 priv_.locFilter[i + 2U] = tmp;
378 priv_.locFilter[i + 3U] = tmp;
383 priv_.locFilter[qs_id >> 3U] &=
384 static_cast<std::uint8_t
>(
385 ~(1U << (qs_id & 7U)) & 0xFFU);
388 priv_.locFilter[qs_id >> 3U]
389 |= (1U << (qs_id & 7U));
397 priv_.locFilter[0] |= 0x01U;
408 std::uint8_t
const b = priv_.seq + 1U;
409 std::uint8_t chksum_ = 0U;
410 std::uint8_t *
const buf_ = priv_.buf;
411 QSCtr head_ = priv_.head;
412 QSCtr const end_ = priv_.end;
415 priv_.used = (priv_.used + 2U);
419 chksum_ +=
static_cast<std::uint8_t
>(rec);
423 priv_.chksum = chksum_;
434 std::uint8_t *
const buf_ = priv_.buf;
435 QSCtr head_ = priv_.head;
436 QSCtr const end_ = priv_.end;
437 std::uint8_t b = priv_.chksum;
440 priv_.used = (priv_.used + 2U);
448 priv_.used = (priv_.used + 1U);
454 if (priv_.used > end_) {
462 static constexpr std::uint8_t ZERO =
static_cast<std::uint8_t
>(
'0');
463 static std::uint8_t
const *
const TIME =
464 reinterpret_cast<std::uint8_t
const *
>(&
BUILD_TIME[0]);
465 static std::uint8_t
const *
const DATE =
466 reinterpret_cast<std::uint8_t
const *
>(&
BUILD_DATE[0]);
475 endian_test.u16 = 0x0102U;
483 |
static_cast<std::uint8_t
>(QF_EVENT_SIZ_SIZE << 4U));
485#ifdef QF_EQUEUE_CTR_SIZE
487 |
static_cast<std::uint8_t
>(QF_TIMEEVT_CTR_SIZE << 4U));
489 QS::u8_raw_(
static_cast<std::uint8_t
>(QF_TIMEEVT_CTR_SIZE << 4U));
492#ifdef QF_MPOOL_CTR_SIZE
494 |
static_cast<std::uint8_t
>(QF_MPOOL_CTR_SIZE << 4U));
507 QS::u8_raw_((10U * (TIME[6] - ZERO)) + (TIME[7] - ZERO));
508 QS::u8_raw_((10U * (TIME[3] - ZERO)) + (TIME[4] - ZERO));
509 if (
BUILD_TIME[0] ==
static_cast<std::uint8_t
>(
' ')) {
513 QS::u8_raw_((10U * (TIME[0] - ZERO)) + (TIME[1] - ZERO));
517 if (
BUILD_DATE[4] ==
static_cast<std::uint8_t
>(
' ')) {
521 QS::u8_raw_((10U * (DATE[4] - ZERO)) + (DATE[5] - ZERO));
525 switch (DATE[0] + DATE[1] + DATE[2]) {
529 case 'F' +
'e' +
'b':
535 case 'A' +
'p' +
'r':
538 case 'M' +
'a' +
'y':
541 case 'J' +
'u' +
'n':
544 case 'J' +
'u' +
'l':
547 case 'A' +
'u' +
'g':
550 case 'S' +
'e' +
'p':
553 case 'O' +
'c' +
't':
556 case 'N' +
'o' +
'v':
559 case 'D' +
'e' +
'c':
567 QS::u8_raw_((10U * (DATE[9] - ZERO)) + (DATE[10] - ZERO));
576void QS::u8_fmt_(std::uint8_t
const format, std::uint8_t
const d)
noexcept {
577 std::uint8_t chksum_ = priv_.chksum;
578 std::uint8_t *
const buf_ = priv_.buf;
579 QSCtr head_ = priv_.head;
580 QSCtr const end_= priv_.end;
582 priv_.used = (priv_.used + 2U);
588 priv_.chksum = chksum_;
597 std::uint8_t chksum_ = priv_.chksum;
598 std::uint8_t *
const buf_ = priv_.buf;
599 QSCtr head_ = priv_.head;
600 QSCtr const end_= priv_.end;
602 priv_.used = (priv_.used + 3U);
606 format =
static_cast<std::uint8_t
>(d);
610 format =
static_cast<std::uint8_t
>(d);
614 priv_.chksum = chksum_;
622 std::uint8_t chksum_ = priv_.chksum;
623 std::uint8_t *
const buf_= priv_.buf;
624 QSCtr head_ = priv_.head;
625 QSCtr const end_= priv_.end;
627 priv_.used = (priv_.used + 5U);
630 for (std::uint_fast8_t i = 4U; i != 0U; --i) {
631 format =
static_cast<std::uint8_t
>(d);
637 priv_.chksum = chksum_;
644 char const *
const name)
noexcept
648 beginRec_(
static_cast<std::uint_fast8_t
>(
QS_USR_DICT));
660void QS::mem_fmt_(std::uint8_t
const *blk, std::uint8_t size)
noexcept {
661 std::uint8_t b =
static_cast<std::uint8_t
>(MEM_T);
662 std::uint8_t chksum_ = priv_.chksum + b;
663 std::uint8_t *
const buf_= priv_.buf;
664 QSCtr head_ = priv_.head;
665 QSCtr const end_= priv_.end;
667 priv_.used = (priv_.used + size + 2U);
673 for (; size != 0U; --size) {
680 priv_.chksum = chksum_;
688 std::uint8_t b =
static_cast<std::uint8_t
>(*s);
689 std::uint8_t chksum_ =
static_cast<std::uint8_t
>(
690 priv_.chksum +
static_cast<std::uint8_t
>(STR_T));
691 std::uint8_t *
const buf_= priv_.buf;
692 QSCtr head_ = priv_.head;
693 QSCtr const end_= priv_.end;
694 QSCtr used_ = priv_.used;
704 b =
static_cast<std::uint8_t
>(*s);
710 priv_.chksum = chksum_;
719 std::uint8_t chksum_ = priv_.chksum;
720 std::uint8_t *
const buf_ = priv_.buf;
721 QSCtr head_ = priv_.head;
722 QSCtr const end_= priv_.end;
724 priv_.used = (priv_.used + 1U);
728 priv_.chksum = chksum_;
736 std::uint8_t chksum_ = priv_.chksum;
737 std::uint8_t *
const buf_ = priv_.buf;
738 QSCtr head_ = priv_.head;
739 QSCtr const end_= priv_.end;
741 priv_.used = (priv_.used + 2U);
746 priv_.chksum = chksum_;
754 std::uint8_t b =
static_cast<std::uint8_t
>(d);
755 std::uint8_t chksum_ = priv_.chksum;
756 std::uint8_t *
const buf_ = priv_.buf;
757 QSCtr head_ = priv_.head;
758 QSCtr const end_= priv_.end;
760 priv_.used = (priv_.used + 2U);
765 b =
static_cast<std::uint8_t
>(d);
769 priv_.chksum = chksum_;
777 std::uint8_t chksum_ = priv_.chksum;
778 std::uint8_t *
const buf_ = priv_.buf;
779 QSCtr head_ = priv_.head;
780 QSCtr const end_= priv_.end;
782 priv_.used = (priv_.used + 4U);
783 for (std::uint_fast8_t i = 4U; i != 0U; --i) {
784 std::uint8_t
const b =
static_cast<std::uint8_t
>(d);
790 priv_.chksum = chksum_;
798#if (QS_OBJ_PTR_SIZE == 1U)
799 u8_raw_(
reinterpret_cast<std::uint8_t
>(obj));
800#elif (QS_OBJ_PTR_SIZE == 2U)
801 u16_raw_(
reinterpret_cast<std::uint16_t
>(obj));
802#elif (QS_OBJ_PTR_SIZE == 4U)
803 u32_raw_(
reinterpret_cast<std::uint32_t
>(obj));
804#elif (QS_OBJ_PTR_SIZE == 8U)
805 u64_raw_(
reinterpret_cast<std::uint64_t
>(obj));
807 u32_raw_(
reinterpret_cast<std::uint32_t
>(obj));
816 std::uint8_t b =
static_cast<std::uint8_t
>(*s);
817 std::uint8_t chksum_ = priv_.chksum;
818 std::uint8_t *
const buf_ = priv_.buf;
819 QSCtr head_ = priv_.head;
820 QSCtr const end_= priv_.end;
821 QSCtr used_ = priv_.used;
827 b =
static_cast<std::uint8_t
>(*s);
834 priv_.chksum = chksum_;
850 if (priv_.used == 0U) {
854 std::uint8_t
const *
const buf_ = priv_.buf;
855 QSCtr tail_ = priv_.tail;
858 ret =
static_cast<std::uint16_t
>(buf_[tail_]);
861 if (tail_ == priv_.end) {
865 priv_.used = (priv_.used - 1U);
893std::uint8_t
const *
QS::getBlock(std::uint16_t *
const pNbytes)
noexcept {
894 QSCtr const used_ = priv_.used;
903 QSCtr tail_ = priv_.tail;
904 QSCtr const end_ = priv_.end;
909 if (n >
static_cast<QSCtr>(*pNbytes)) {
910 n =
static_cast<QSCtr>(*pNbytes);
912 *pNbytes =
static_cast<std::uint16_t
>(n);
916 priv_.used = (priv_.used - n);
930 char const *
const name)
noexcept
935 beginRec_(
static_cast<std::uint_fast8_t
>(
QS_SIG_DICT));
948 char const *
const name)
noexcept
953 beginRec_(
static_cast<std::uint_fast8_t
>(
QS_OBJ_DICT));
966 std::uint_fast16_t
const idx,
967 char const *
const name)
noexcept
972 std::uint8_t idx_str[4];
973 std::uint_fast16_t tmp = idx;
976 idx_str[2] =
static_cast<std::uint8_t
>(
977 static_cast<std::uint8_t
>(
'0') + (tmp % 10U));
979 idx_str[1] =
static_cast<std::uint8_t
>(
980 static_cast<std::uint8_t
>(
'0') + (tmp % 10U));
981 if (idx_str[1] ==
static_cast<std::uint8_t
>(
'0')) {
986 idx_str[0] =
static_cast<std::uint8_t
>(
987 static_cast<std::uint8_t
>(
'0') + (tmp % 10U));
988 if (idx_str[0] ==
static_cast<std::uint8_t
>(
'0')) {
997 std::uint8_t j = ((*name ==
'&') ? 1U : 0U);
1000 beginRec_(
static_cast<std::uint_fast8_t
>(
QS_OBJ_DICT));
1002 for (; name[j] !=
'\0'; ++j) {
1004 if (name[j] ==
'[') {
1009 for (; idx_str[i] != 0U; ++i) {
1013 for (; name[j] !=
'\0'; ++j) {
1014 if (name[j] ==
']') {
1018 for (; name[j] !=
'\0'; ++j) {
1031 char const *
const name)
noexcept
1036 beginRec_(
static_cast<std::uint_fast8_t
>(
QS_FUN_DICT));
1048 std::uint32_t
const delay)
1056 for (std::uint32_t
volatile ctr = delay; ctr > 0U; ) {
1082 std::uint8_t
const prio)
1093 std::uint8_t
const prio)
static void sig_dict_pre_(enum_t const sig, void const *const obj, char const *const name) noexcept
Output signal dictionary record.
static void str_raw_(char const *s) noexcept
Output zero-terminated ASCII string element without format information.
std::uint_fast8_t volatile critNest
critical section nesting level
static void crit_entry_pre_(void)
internal function to produce the critical section entry record
static std::uint16_t getByte(void) noexcept
Byte-oriented interface to the QS data buffer.
static void obj_arr_dict_pre_(void const *const obj, std::uint_fast16_t const idx, char const *const name) noexcept
Output predefined object-array dictionary record.
static void onCleanup(void)
Callback to cleanup the QS facility.
static void assertion_pre_(char const *const module, int_t const loc, std::uint32_t const delay)
internal function to produce the assertion failure trace record
static void crit_exit_pre_(void)
internal function to produce the critical section exit record
static void u16_raw_(std::uint16_t d) noexcept
Output std::uint16_t data element without format information.
static void usr_dict_pre_(enum_t const rec, char const *const name) noexcept
Output user dictionary record.
static std::uint8_t const * getBlock(std::uint16_t *const pNbytes) noexcept
Block-oriented interface to the QS data buffer.
static void onFlush(void)
Callback to flush the QS trace data to the host.
static void u32_fmt_(std::uint8_t format, std::uint32_t d) noexcept
Output std::uint32_t data element with format information.
static void isr_exit_pre_(std::uint8_t const isrnest, std::uint8_t const prio)
internal function to produce the ISR exit record
static void glbFilter_(std::int_fast16_t const filter) noexcept
Set/clear the global Filter for a given QS record.
static void beginRec_(std::uint_fast8_t const rec) noexcept
Mark the begin of a QS record rec.
static void isr_entry_pre_(std::uint8_t const isrnest, std::uint8_t const prio)
internal function to produce the ISR entry record
static void u8_fmt_(std::uint8_t const format, std::uint8_t const d) noexcept
Output std::uint8_t data element with format information.
static void obj_dict_pre_(void const *const obj, char const *const name) noexcept
Output object dictionary record.
static void obj_raw_(void const *const obj) noexcept
Output obj pointer data element without format information.
static void endRec_(void) noexcept
Mark the end of a QS record rec.
static void u8_raw_(std::uint8_t const d) noexcept
output std::uint8_t data element without format information
static void str_fmt_(char const *s) noexcept
Output zero-terminated ASCII string element with format information.
static void fun_dict_pre_(void(*const fun)(void), char const *const name) noexcept
Output function dictionary record.
static void locFilter_(std::int_fast16_t const filter) noexcept
Set/clear the local Filter for a given object-id.
static void u8u8_raw_(std::uint8_t const d1, std::uint8_t const d2) noexcept
output two std::uint8_t data elements without format information
static void u32_raw_(std::uint32_t d) noexcept
Output std::uint32_t data element without format information.
static void mem_fmt_(std::uint8_t const *blk, std::uint8_t size) noexcept
Output memory block of up to 255-bytes with format information.
static void initBuf(std::uint8_t *const sto, std::uint_fast16_t const stoSize) noexcept
Initialize the QS data buffer.
static void u16_fmt_(std::uint8_t format, std::uint16_t d) noexcept
output std::uint16_t data element with format information
namespace associated with the QP/C++ framework
char const BUILD_DATE[12]
the calendar date of the last translation of the form: "Mmm dd yyyy"
constexpr std::uint8_t QS_ESC
Escape character of the QS output protocol.
void QS_target_info_(std::uint8_t const isReset) noexcept
send the Target info (object sizes, build time-stamp, QP version)
@ QS_ASSERT_FAIL
assertion failed in the code
@ QS_FUN_DICT
function dictionary entry
@ QS_QF_CRIT_ENTRY
critical section was entered
@ QS_QF_CRIT_EXIT
critical section was exited
@ QS_OBJ_DICT
object dictionary entry
@ QS_TARGET_INFO
reports the Target information
@ QS_QF_ISR_ENTRY
an ISR was entered
@ QS_QF_ISR_EXIT
an ISR was exited
@ QS_EMPTY
QS record for cleanly starting a session.
@ QS_SIG_DICT
signal dictionary entry
@ QS_USR_DICT
user QS record dictionary entry
constexpr std::uint16_t QS_EOD
Constant representing End-Of-Data condition returned from the QP::QS::getByte() function.
char const BUILD_TIME[9]
the time of the last translation of the form: "hh:mm:ss"
constexpr std::uint8_t QS_ESC_XOR
Escape modifier of the QS output protocol.
@ QS_EP_IDS
event-pool IDs
@ QS_AO_IDS
AO IDs (priorities)
@ QS_AP_IDS
Application-specific IDs.
std::uint_fast16_t QSCtr
QS ring buffer counter and offset type.
constexpr std::uint8_t QS_FRAME
Frame character of the QS output protocol.
@ QS_U2_RECORDS
User Group 110-114 records.
@ QS_MP_RECORDS
Memory Pools QS records.
@ QS_TE_RECORDS
Time Events QS records.
@ QS_SM_RECORDS
State Machine QS records.
@ QS_U0_RECORDS
User Group 100-104 records.
@ QS_U3_RECORDS
User Group 115-119 records.
@ QS_U4_RECORDS
User Group 120-124 records.
@ QS_AO_RECORDS
Active Object QS records.
@ QS_QF_RECORDS
QF QS records.
@ QS_SC_RECORDS
Scheduler QS records.
@ QS_U1_RECORDS
User Group 105-109 records.
@ QS_EQ_RECORDS
Event Queues QS records.
@ QS_ALL_RECORDS
all QS records
@ QS_UA_RECORDS
All User records.
Customizable and memory-efficient assertions for embedded systems.
#define Q_DEFINE_THIS_MODULE(name_)
#define Q_ASSERT_ID(id_, test_)
#define Q_REQUIRE_ID(id_, test_)
int enum_t
alias for enumerations used for event signals
#define QP_VERSION
The current QP version as a decimal constant XXYZ, where XX is a 2-digit major version number,...
int int_t
alias for line numbers in assertions and return from QF::run()
#define Q_SIGNAL_SIZE
The size (in bytes) of the signal of an event.
#define QS_CRIT_STAT_
This is an internal macro for defining the critical section status type.
#define QS_CRIT_X_()
This is an internal macro for exiting a critical section.
#define QS_CRIT_E_()
This is an internal macro for entering a critical section.
Internal (package scope) QS/C++ interface.
#define QS_U8_PRE_(data_)
Internal QS macro to output an unformatted uint8_t data element.
#define QS_BEGIN_NOCRIT_PRE_(rec_, qs_id_)
Internal QS macro to begin a predefined QS record without critical section.
#define QS_INSERT_ESC_BYTE_(b_)
Internal QS macro to insert an escaped byte into the QS buffer.
#define QS_OBJ_PRE_(obj_)
Internal QS macro to output object pointer data element.
#define QS_FUN_PRE_(fun_)
Internal QS macro to output an unformatted function pointer data element.
#define QS_REC_NUM_(enum_)
Internal QS macro to cast enumerated QS record number to uint8_t.
#define QS_END_NOCRIT_PRE_()
Internal QS macro to end a predefiend QS record without critical section.
#define QS_U16_PRE_(data_)
Internal QS macro to output an unformatted uint16_t data element.
#define QS_INSERT_BYTE_(b_)
Internal QS macro to insert an un-escaped byte into the QS buffer.
#define QS_STR_PRE_(msg_)
Internal QS macro to output a zero-terminated ASCII string data element.
Application build time-stamp interface.