diff --git a/.clang-format b/.clang-format
index e43a3c37c..1021e5da8 100644
--- a/.clang-format
+++ b/.clang-format
@@ -177,7 +177,7 @@ PointerAlignment: Left
PPIndentWidth: -1
QualifierAlignment: Leave
ReferenceAlignment: Pointer
-ReflowComments: Always
+ReflowComments: true
RemoveBracesLLVM: false
RemoveParentheses: Leave
RemoveSemicolon: false
diff --git a/.clang-format-ignore b/.clang-format-ignore
index 7174b4609..09a702e80 100644
--- a/.clang-format-ignore
+++ b/.clang-format-ignore
@@ -54,6 +54,12 @@ examples/*_bare/**
# STM32 HAL driver code is machine-generated and should not be modified.
examples/*_inst/Drivers/**
+# 3) Ignore every vendor middleware tree below ./examples/.
+#
+# These directories contain third-party sources such as FreeRTOS and must stay
+# byte-identical to the versions supplied by their vendors.
+examples/**/Middlewares/**
+
###############################################################################
diff --git a/.github/workflows/clang-format.yml b/.github/workflows/clang-format.yml
index da7af7d59..bf5f5347d 100644
--- a/.github/workflows/clang-format.yml
+++ b/.github/workflows/clang-format.yml
@@ -4,7 +4,7 @@ name: Clang-Format Check
# are formatted according to the .clang-format rules.
#
# It uses:
-# - clang-format (installed via apt)
+# - clang-format 19.1.7 (installed in an isolated Python environment)
# - a Go-based helper (cmd/clang-filter) via `go run`
# - the shell script `./scripts/_format_c_code.sh` to orchestrate everything
#
@@ -39,15 +39,20 @@ jobs:
fetch-depth: 0
#########################################################################
- # 2) Install clang-format on the runner.
+ # 2) Install the repository's canonical clang-format release.
#
- # We rely on Ubuntu's clang-format package. If you require a specific
- # version, you can pin it here or use a prebuilt toolchain image.
+ # clang-format output changes between releases. An unversioned apt package
+ # therefore makes local formatting and CI checks disagree when the hosted
+ # runner changes its Ubuntu image. The PyPI package supplies the exact
+ # native formatter binary in an isolated environment.
#########################################################################
- name: Install clang-format
run: |
- sudo apt-get update
- sudo apt-get install -y clang-format
+ python3 -m venv "$RUNNER_TEMP/clang-format"
+ "$RUNNER_TEMP/clang-format/bin/python" -m pip install \
+ --disable-pip-version-check \
+ "clang-format==19.1.7"
+ echo "$RUNNER_TEMP/clang-format/bin" >> "$GITHUB_PATH"
- name: Show clang-format version
run: clang-format --version
diff --git a/README.md b/README.md
index 2f818d981..e7cb6d0e3 100644
--- a/README.md
+++ b/README.md
@@ -46,9 +46,17 @@ Choose one first path:
For most existing projects, the non-blocking byte writer path is the least disruptive first integration.
-## Coming soon
+## Recommended ID workflow: `trice bind`
-`trice bind ...` stores the IDs in sidecar build artifacts avoiding this way source code changes. This is complete compiler independent. Try it now in branch `wip`.
+`trice bind` is the successor to the legacy `trice insert` / `trice clean` workflow. It keeps numeric IDs out of bind-managed Trice calls by generating sidecar headers as temporary build artefacts. Existing `insert` / `clean` projects remain fully supported and continue to work unchanged. This technique does not patch the user sources anymore during the build process. See [Trice Bind in User Manual](./docs/TriceUserManual.md#trice-bind) for details.
+
+`trice bind` is currently experimental and is not yet included in an official release. To try it before the next release, build the `trice` tool from this repository and ensure the resulting executable is in your `PATH`:
+
+```sh
+./scripts/buildTriceTool.sh
+```
+
+Try the minimal [`demo`](./demo). It uses only the installed `trice` binary and the target sources in [`src`](./src) from this repository.
## Details and advanced topics
@@ -70,6 +78,8 @@ This reduces target FLASH usage, transfer bandwidth, log files and log-call exec
How ID-based decoding works
+The recommended workflow uses `trice bind` as described above. The following steps describe the legacy source-modifying workflow, which remains supported:
+
1. Write `trice(...)` calls in firmware code.
2. Run `trice insert` before compilation.
3. The compiler sees stable numeric IDs.
@@ -85,9 +95,9 @@ A typical source-level idea is:
-What about source code modification?
+Legacy source-code ID workflow (still supported)
-Trice assigns IDs by processing source files with `trice insert`.
+The legacy workflow assigns IDs by processing source files with `trice insert`. This workflow remains supported for existing and new projects.
A call such as this:
```c
@@ -166,10 +176,16 @@ You can also build your own receiver that reads Trice packages, maps IDs to form
Keep the one accumulated `til.json` to decode all previously released firmware versions.
The repository example file is [demoTIL.json](./demoTIL.json).
+Each `li.json` entry stores a normalized `File` path relative to the location-file
+directory by default. Use `-liRoot` to select a different project root when
+creating location data. Log output shows only the file name by default; use
+`-liMaxDirs` to include trailing parent directories.
-Three common ID workflows
+Legacy insert/clean ID workflows (still supported)
+
+These three source-modifying workflows remain fully supported:
**Keep IDs in source** - good for small projects and maximum robustness.
@@ -200,7 +216,7 @@ If other tools also rewrite source files, such as formatters or code generators,
-Trice cache
+Legacy insert/clean cache (still supported)
The Trice cache avoids unnecessary rebuilds when using `trice insert` and `trice clean` around the build.
It keeps cached inserted and cleaned copies of unchanged files.
@@ -225,7 +241,7 @@ See [Trice Cache for Compilation Speed](./docs/TriceUserManual.md#trice-cache-fo
-Normal workflow
+Legacy insert workflow (still supported)
1. Add the Trice target sources from [`src/`](./src) to your firmware project.
2. Add a project-specific `triceConfig.h`.
diff --git a/_test/abc_rx_host/device_abc.c b/_test/abc_rx_host/device_abc.c
index 4147414d2..6e994deba 100644
--- a/_test/abc_rx_host/device_abc.c
+++ b/_test/abc_rx_host/device_abc.c
@@ -5,13 +5,13 @@
#include "triceRx.h"
const triceAbc_t triceAbc[] = {
- /* Trice type */ /* id, bitWidth, function pointer */
- /* TRICe_C */ { 1001u, 0u, rx_no_payload },
- /* TRICE8_C */ { 1006u, 8u, rx_i8_bulk },
- /* TRICE16_C */ { 1002u, 16u, rx_i16 },
- /* TRIce32_C */ { 1003u, 32u, rx_i32 },
- /* Trice64C */ { 1004u, 64u, rx_i64 },
- /* TRiceC */ { 1005u, 0u, rx_nested },
+ /* Trice type */ /* id, bitWidth, function pointer */
+ /* TRICe_C */ {1001u, 0u, rx_no_payload},
+ /* TRICE8_C */ {1006u, 8u, rx_i8_bulk},
+ /* TRICE16_C */ {1002u, 16u, rx_i16},
+ /* TRIce32_C */ {1003u, 32u, rx_i32},
+ /* Trice64C */ {1004u, 64u, rx_i64},
+ /* TRiceC */ {1005u, 0u, rx_nested},
};
const unsigned triceAbcElements = sizeof(triceAbc) / sizeof(triceAbc[0]);
diff --git a/_test/abc_rx_host/triceAbcReceiveTest.c b/_test/abc_rx_host/triceAbcReceiveTest.c
index 709843177..7a83c2c3c 100644
--- a/_test/abc_rx_host/triceAbcReceiveTest.c
+++ b/_test/abc_rx_host/triceAbcReceiveTest.c
@@ -8,9 +8,9 @@
// triceLog is a small generated-table stand-in for testing log resolution
// without adding another generated fixture file.
const triceLog_t triceLog[] = {
- { 2001u, TRICE_DEFAULT_PARAMETER_BIT_WIDTH, 1u, "default:%d" },
- { 2002u, 0u, 0u, "cmd:no-payload" },
- { 2003u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:%d" },
+ {2001u, TRICE_DEFAULT_PARAMETER_BIT_WIDTH, 1u, "default:%d"},
+ {2002u, 0u, 0u, "cmd:no-payload"},
+ {2003u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:%d"},
};
// triceLogElements mirrors the generated element-count symbol used by runtime wrappers.
@@ -154,8 +154,8 @@ static int TriceAbcOnReceive(const uint8_t* pBuf, int len) {
}
rx.abcFnHandler(&rx);
- //e = TriceDispatchAbc(&rx);
- return used; //TRICE_RX_RESULT_OK; // (e == TRICE_RX_RESULT_OK || e == TRICE_RX_ERR_NOT_FOUND) ? used : TRICE_RX_ERR_PAYLOAD_LEN_BITWIDTH_MISMATCH;
+ // e = TriceDispatchAbc(&rx);
+ return used; // TRICE_RX_RESULT_OK; // (e == TRICE_RX_RESULT_OK || e == TRICE_RX_ERR_NOT_FOUND) ? used : TRICE_RX_ERR_PAYLOAD_LEN_BITWIDTH_MISMATCH;
}
// rx_i8_bulk verifies the long-count path and byte-granular payload handling.
@@ -263,7 +263,7 @@ static int triceValidateLogPayload(const triceRx_t* rx) {
return (rx->payloadBytes == 0u && rx->paramCount == 0u) ? TRICE_RX_RESULT_OK : TRICE_RX_ERR_PAYLOAD_LEN_BITWIDTH_MISMATCH;
}
{
- uint32_t expectedBytes = (uint32_t)rx->paramCount * (uint32_t)(rx->bitWidth>>3);
+ uint32_t expectedBytes = (uint32_t)rx->paramCount * (uint32_t)(rx->bitWidth >> 3);
return (rx->payloadBytes == expectedBytes) ? TRICE_RX_RESULT_OK : TRICE_RX_ERR_PAYLOAD_LEN_BITWIDTH_MISMATCH;
}
}
@@ -321,7 +321,7 @@ int TriceAbcRxHostCheck(int n) {
break;
}
case 2: { // Selected int16 payload ABC with 32-bit stamp dispatches one aligned payload record.
- int16_t payload[2] = { 123, -456 };
+ int16_t payload[2] = {123, -456};
uint8_t record[16];
int used = rxBuildAbcRecord(record, 1002u, 32u, 0x12345678u, payload, (uint16_t)sizeof(payload), 0);
result = TriceAbcOnReceive(record, used);
@@ -330,7 +330,7 @@ int TriceAbcRxHostCheck(int n) {
break;
}
case 3: { // Selected int32 payload ABC without stamp dispatches one no-stamp record.
- int32_t payload[1] = { 0x11223344 };
+ int32_t payload[1] = {0x11223344};
uint8_t record[8];
int used = rxBuildAbcRecord(record, 1003u, 0u, 0u, payload, (uint16_t)sizeof(payload), 0);
result = TriceAbcOnReceive(record, used);
@@ -339,7 +339,7 @@ int TriceAbcRxHostCheck(int n) {
break;
}
case 4: { // Selected int64 payload ABC with 16-bit stamp returns logical length without padding.
- int64_t payload[1] = { (int64_t)0x1122334455667788ll };
+ int64_t payload[1] = {(int64_t)0x1122334455667788ll};
uint8_t record[16];
int used = rxBuildAbcRecord(record, 1004u, 16u, 0x8877u, payload, (uint16_t)sizeof(payload), 1);
result = TriceAbcOnReceive(record, used);
@@ -365,7 +365,7 @@ int TriceAbcRxHostCheck(int n) {
break;
}
case 7: { // Misaligned int32 payload size is rejected before handler execution.
- uint8_t payload[2] = { 1u, 2u };
+ uint8_t payload[2] = {1u, 2u};
uint8_t record[8];
int used = rxBuildAbcRecord(record, 1003u, 0u, 0u, payload, (uint16_t)sizeof(payload), 0);
result = TriceAbcOnReceive(record, used);
@@ -374,7 +374,7 @@ int TriceAbcRxHostCheck(int n) {
break;
}
case 8: { // Truncated selected record is rejected before handler execution.
- int16_t payload[2] = { 123, -456 };
+ int16_t payload[2] = {123, -456};
uint8_t record[16];
int used = rxBuildAbcRecord(record, 1002u, 32u, 0x12345678u, payload, (uint16_t)sizeof(payload), 0);
result = TriceAbcOnReceive(record, used - 1);
@@ -404,7 +404,7 @@ int TriceAbcRxHostCheck(int n) {
break;
}
case 11: { // Log resolver applies the configured default bit width to no-width log names.
- int32_t payload[1] = { 0x01020304 };
+ int32_t payload[1] = {0x01020304};
uint8_t record[8];
triceRx_t rx;
int used = rxBuildAbcRecord(record, 2001u, 0u, 0u, payload, (uint16_t)sizeof(payload), 0);
@@ -433,12 +433,12 @@ int TriceAbcRxHostCheck(int n) {
rxFailUnless(rx.payload == 0);
rxFailUnless(rx.payloadBytes == 0u);
result = triceValidateLogPayload(&rx);
- //rxFailUnless(result == TRICE_RX_ERR_UNSUPPORTED_X0_FRAME);
+ // rxFailUnless(result == TRICE_RX_ERR_UNSUPPORTED_X0_FRAME);
rxFailUnless(rxCalls == 0);
break;
}
case 13: { // Explicit log bit widths still win over the no-width default for resolved metadata.
- int16_t payload[2] = { 11, 22 };
+ int16_t payload[2] = {11, 22};
uint8_t record[8];
triceRx_t rx;
int used = rxBuildAbcRecord(record, 2003u, 0u, 0u, payload, (uint16_t)sizeof(payload), 0);
@@ -451,16 +451,16 @@ int TriceAbcRxHostCheck(int n) {
rxFailUnless(rx.paramCount == TRICE_LOG_PARAM_COUNT_DYNAMIC);
rxFailUnless(rx.payloadBytes == sizeof(payload));
result = triceValidateLogPayload(&rx);
- //rxFailUnless(result == TRICE_RX_ERR_UNSUPPORTED_X0_FRAME);
+ // rxFailUnless(result == TRICE_RX_ERR_UNSUPPORTED_X0_FRAME);
rxFailUnless(rxCalls == 0);
break;
}
case 14: { // TriceLogOnReceive consumes known and unknown log IDs without dispatch side effects.
- int32_t payload[1] = { 0x55667788 };
+ int32_t payload[1] = {0x55667788};
uint8_t record[8];
int used = rxBuildAbcRecord(record, 2001u, 0u, 0u, payload, (uint16_t)sizeof(payload), 0);
result = TriceLogOnReceive(record, used);
- //rxFailUnless(result == used);
+ // rxFailUnless(result == used);
used = rxBuildAbcRecord(record, 2999u, 0u, 0u, 0, 0u, 0);
result = TriceLogOnReceive(record, used);
rxFailUnless(result == used);
@@ -473,7 +473,7 @@ int TriceAbcRxHostCheck(int n) {
break;
}
case 15: { // A caller advances through a stream because TriceAbcOnReceive consumes only one record.
- int32_t payload[1] = { 0x11223344 };
+ int32_t payload[1] = {0x11223344};
uint8_t stream[16];
int firstLen;
int secondLen;
diff --git a/_test/abc_tx_host/triceAbcTransmitTest.c b/_test/abc_tx_host/triceAbcTransmitTest.c
index 9a0f9c37d..e1dd30283 100644
--- a/_test/abc_tx_host/triceAbcTransmitTest.c
+++ b/_test/abc_tx_host/triceAbcTransmitTest.c
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: MIT
-// TRICE_INSERT_OFF - Trice parser exclusion marker
+// TRICE_INSERT_OFF - Trice parser exclusion marker
// This is a test file. It must not get the Trice IDs changed!
#include
@@ -29,35 +29,35 @@ int TriceAbcTxHostCheck(int n) {
abcTxReset();
switch (n) {
case 1: {
- static const uint8_t expected[] = { 0x34u, 0x52u, 0xc0u, 0x00u };
+ static const uint8_t expected[] = {0x34u, 0x52u, 0xc0u, 0x00u};
triceC(iD(0x1234), "cmd:stop");
return abcTxEquals(expected, sizeof(expected)) ? 0 : 1;
}
case 2: {
- static const uint8_t expected[] = { 0x23u, 0x81u, 0x23u, 0x81u, 0xcdu, 0xabu, 0xc0u, 0x00u };
+ static const uint8_t expected[] = {0x23u, 0x81u, 0x23u, 0x81u, 0xcdu, 0xabu, 0xc0u, 0x00u};
TriceC(iD(0x0123), "cmd:stop", 0xabcdu);
return abcTxEquals(expected, sizeof(expected)) ? 0 : 2;
}
case 3: {
- static const uint8_t expected[] = { 0x23u, 0xc1u, 0x44u, 0x33u, 0x22u, 0x11u, 0xc0u, 0x00u };
+ static const uint8_t expected[] = {0x23u, 0xc1u, 0x44u, 0x33u, 0x22u, 0x11u, 0xc0u, 0x00u};
TRiceC(iD(0x0123), "cmd:stop", 0x11223344u);
return abcTxEquals(expected, sizeof(expected)) ? 0 : 3;
}
case 4: {
- int8_t payload[] = { 1, 2, 3 };
- static const uint8_t expected[] = { 0x55u, 0x40u, 0xc0u, 0x03u, 0x01u, 0x02u, 0x03u, 0x00u };
+ int8_t payload[] = {1, 2, 3};
+ static const uint8_t expected[] = {0x55u, 0x40u, 0xc0u, 0x03u, 0x01u, 0x02u, 0x03u, 0x00u};
trice8C(iD(0x0055), "cmd:set_leds", payload, 3);
return abcTxEquals(expected, sizeof(expected)) ? 0 : 4;
}
case 5: {
- int16_t payload[] = { 0x1122, 0x3344 };
- static const uint8_t expected[] = { 0x23u, 0x81u, 0x23u, 0x81u, 0xcdu, 0xabu, 0xc0u, 0x04u, 0x22u, 0x11u, 0x44u, 0x33u };
+ int16_t payload[] = {0x1122, 0x3344};
+ static const uint8_t expected[] = {0x23u, 0x81u, 0x23u, 0x81u, 0xcdu, 0xabu, 0xc0u, 0x04u, 0x22u, 0x11u, 0x44u, 0x33u};
Trice16C(iD(0x0123), "cmd:set_pwm", 0xabcdu, payload, 2);
return abcTxEquals(expected, sizeof(expected)) ? 0 : 5;
}
case 6: {
- int32_t payload[] = { 0x11223344 };
- static const uint8_t expected[] = { 0x23u, 0xc1u, 0x04u, 0x03u, 0x02u, 0x01u, 0xc0u, 0x04u, 0x44u, 0x33u, 0x22u, 0x11u };
+ int32_t payload[] = {0x11223344};
+ static const uint8_t expected[] = {0x23u, 0xc1u, 0x04u, 0x03u, 0x02u, 0x01u, 0xc0u, 0x04u, 0x44u, 0x33u, 0x22u, 0x11u};
TRice32C(iD(0x0123), "cmd:set_time", 0x01020304u, payload, 1);
return abcTxEquals(expected, sizeof(expected)) ? 0 : 6;
}
diff --git a/_test/abc_tx_host/triceConfig.h b/_test/abc_tx_host/triceConfig.h
index 5e3d5c29d..f59fa5af9 100644
--- a/_test/abc_tx_host/triceConfig.h
+++ b/_test/abc_tx_host/triceConfig.h
@@ -15,8 +15,14 @@ extern "C" {
extern uint32_t abcTxWords[];
extern uint32_t abcTxLength;
-#define TRICE_ENTER do { uint32_t* TriceBufferWritePosition = abcTxWords;
-#define TRICE_LEAVE abcTxLength = (uint32_t)((uint8_t*)TriceBufferWritePosition - (uint8_t*)abcTxWords); } while (0);
+#define TRICE_ENTER \
+ do { \
+ uint32_t* TriceBufferWritePosition = abcTxWords;
+#define TRICE_LEAVE \
+ abcTxLength = (uint32_t)((uint8_t*)TriceBufferWritePosition - (uint8_t*)abcTxWords); \
+ } \
+ while (0) \
+ ;
#ifdef __cplusplus
}
diff --git a/_test/alias_dblB_de_tcobs_ua/TargetActivity.c b/_test/alias_dblB_de_tcobs_ua/TargetActivity.c
index f92ce444e..97a852986 100644
--- a/_test/alias_dblB_de_tcobs_ua/TargetActivity.c
+++ b/_test/alias_dblB_de_tcobs_ua/TargetActivity.c
@@ -4,6 +4,7 @@
//! \details Go func triceLogSpecialTest parses additionally this file to collect the expected results line by line for later test execution.
#include "trice.h"
+#include "trice_TargetActivity_c_KF1E016F27623CC56.h" // trice-bind: keep as last include before this file's Trice calls
// The strings behind "//exp:" are the expected result for each line (-color=off)
// Lines ending with a comment starting with `//exp:` are executed during the automatic Go tests.
diff --git a/_test/alias_dblB_de_tcobs_ua/triceConfig.h b/_test/alias_dblB_de_tcobs_ua/triceConfig.h
index e7beb4530..137817696 100644
--- a/_test/alias_dblB_de_tcobs_ua/triceConfig.h
+++ b/_test/alias_dblB_de_tcobs_ua/triceConfig.h
@@ -26,12 +26,16 @@ extern "C" {
//! prints is a user print example with string, float and integer values.
//! We have to perform a normal print into a buffer, which then is passed to triceS.
//! This is slow but we can integrate user code without changing it.
-#define prints(id, ...) \
- do { \
- char buf[96]; \
- npf_snprintf(buf, sizeof(buf), __VA_ARGS__); \
- triceS(id, "%s", buf); \
+// Route the registered simple alias at its invocation site so bound sources
+// obtain the ID from their sidecar and inserted sources retain their ID argument.
+#define PRINTS_WITH_ID(id, ...) \
+ do { \
+ char buf[96]; \
+ npf_snprintf(buf, sizeof(buf), __VA_ARGS__); \
+ TRICE_INSERT_triceS(id, "%s", buf); \
} while (0)
+#define prints(...) \
+ TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), PRINTS_WITH_ID, __VA_ARGS__)
//
//////////////////////////////////////////////////////////////////////////////
diff --git a/_test/aliasassert_dblB_de_tcobs_ua/TargetActivity.c b/_test/aliasassert_dblB_de_tcobs_ua/TargetActivity.c
index 45ef2e1af..d4dcc0816 100644
--- a/_test/aliasassert_dblB_de_tcobs_ua/TargetActivity.c
+++ b/_test/aliasassert_dblB_de_tcobs_ua/TargetActivity.c
@@ -4,6 +4,7 @@
//! \details Go func triceLogSpecialTest parses additionally this file to collect the expected results line by line for later test execution.
#include "trice.h"
+#include "trice_TargetActivity_c_K707A6451A08AFEBA.h" // trice-bind: keep as last include before this file's Trice calls
// The strings behind "//exp:" are the expected result for each line (-color=off)
// Lines ending with a comment starting with `//exp:` are executed during the automatic Go tests.
diff --git a/_test/aliasassert_dblB_de_tcobs_ua/triceConfig.h b/_test/aliasassert_dblB_de_tcobs_ua/triceConfig.h
index 2b291759b..f44263d4c 100644
--- a/_test/aliasassert_dblB_de_tcobs_ua/triceConfig.h
+++ b/_test/aliasassert_dblB_de_tcobs_ua/triceConfig.h
@@ -34,36 +34,36 @@ extern "C" {
#define _DISPATCH_EXPAND(name, N) _DISPATCH_IMPL(name, N)
// Build an assertion message without a user-provided format string.
-#define ASSERT_MESSAGE_HELPER(out_var, condition_str, file_path, line_number) \
- char full_msg[512]; \
- npf_snprintf(full_msg, sizeof(full_msg), "[ASSERT] %s:%d: %s\n", \
- FILENAME(file_path), line_number, condition_str); \
+#define ASSERT_MESSAGE_HELPER(out_var, condition_str, file_path, line_number) \
+ char full_msg[512]; \
+ npf_snprintf(full_msg, sizeof(full_msg), "[ASSERT] %s:%d: %s\n", \
+ FILENAME(file_path), line_number, condition_str); \
char* out_var = full_msg
// Build an assertion message from a mandatory format string and optional values.
// The format string is part of __VA_ARGS__, so the variadic list is never empty.
#define ASSERT_FORMATTED_MESSAGE_HELPER(out_var, condition_str, file_path, line_number, ...) \
- char user_msg[256]; \
- npf_snprintf(user_msg, sizeof(user_msg), __VA_ARGS__); \
- char full_msg[512]; \
- npf_snprintf(full_msg, sizeof(full_msg), "[ASSERT] %s:%d: %s -> %s\n", \
- FILENAME(file_path), line_number, condition_str, user_msg); \
+ char user_msg[256]; \
+ npf_snprintf(user_msg, sizeof(user_msg), __VA_ARGS__); \
+ char full_msg[512]; \
+ npf_snprintf(full_msg, sizeof(full_msg), "[ASSERT] %s:%d: %s -> %s\n", \
+ FILENAME(file_path), line_number, condition_str, user_msg); \
char* out_var = full_msg
-#define CUSTOM_ASSERT_IMPL(id, condition, condition_str, file, line) \
- do { \
- if (!(condition)) { \
- ASSERT_MESSAGE_HELPER(assert_msg, condition_str, file, line); \
- triceS(id, "%s", assert_msg); \
- } \
+#define CUSTOM_ASSERT_IMPL(id, condition, condition_str, file, line) \
+ do { \
+ if (!(condition)) { \
+ ASSERT_MESSAGE_HELPER(assert_msg, condition_str, file, line); \
+ TRICE_INSERT_triceS(id, "%s", assert_msg); \
+ } \
} while (0)
-#define CUSTOM_ASSERT_FORMAT_IMPL(id, condition, condition_str, file, line, ...) \
- do { \
- if (!(condition)) { \
+#define CUSTOM_ASSERT_FORMAT_IMPL(id, condition, condition_str, file, line, ...) \
+ do { \
+ if (!(condition)) { \
ASSERT_FORMATTED_MESSAGE_HELPER(assert_msg, condition_str, file, line, __VA_ARGS__); \
- triceS(id, "%s", assert_msg); \
- } \
+ TRICE_INSERT_triceS(id, "%s", assert_msg); \
+ } \
} while (0)
#define CUSTOM_PRINT(id, ...) trice(id, __VA_ARGS__)
@@ -81,8 +81,13 @@ extern "C" {
#define CUSTOM_ASSERT_4(id, condition, ...) \
CUSTOM_ASSERT_FORMAT_IMPL(id, condition, #condition, __FILE__, __LINE__, __VA_ARGS__)
-#define CUSTOM_ASSERT(...) \
+// Route the registered simple alias at its invocation site. Insert-owned calls
+// already carry an ID, while bound calls receive the same argument from the
+// generated sidecar before the existing assertion implementation is expanded.
+#define CUSTOM_ASSERT_WITH_ID(...) \
_DISPATCH_EXPAND(CUSTOM_ASSERT, COUNT_ARGS_4(__VA_ARGS__))(__VA_ARGS__)
+#define CUSTOM_ASSERT(...) \
+ TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), CUSTOM_ASSERT_WITH_ID, __VA_ARGS__)
//
//////////////////////////////////////////////////////////////////////////////
diff --git a/_test/clion-review/main.c b/_test/clion-review/main.c
index 0414aecc0..75b8f525f 100644
--- a/_test/clion-review/main.c
+++ b/_test/clion-review/main.c
@@ -6,6 +6,6 @@
void TriceCheck(int index);
int main(void) {
- TriceCheck(0);
- return 0;
+ TriceCheck(0);
+ return 0;
}
diff --git a/_test/dblB_de_protect_tcobs_ua/TargetActivity.c b/_test/dblB_de_protect_tcobs_ua/TargetActivity.c
index a6281e37d..7d93cbe27 100644
--- a/_test/dblB_de_protect_tcobs_ua/TargetActivity.c
+++ b/_test/dblB_de_protect_tcobs_ua/TargetActivity.c
@@ -2,6 +2,7 @@
//! \file TargetActivity.c
#include "trice.h"
+#include "trice_TargetActivity_c_KBCE5FAD5446C7003.h" // trice-bind: keep as last include before this file's Trice calls
// Needed safety space is TRICE_SINGLE_MAX_SIZE = 104
// TRICE_HALF_BUFFER_SIZE == 256 - TRICE_DATA_OFFSET == 64 = 192 bytes
diff --git a/_test/modify_for_debug/TargetActivity.c b/_test/modify_for_debug/TargetActivity.c
index 370baf22e..8a2307bca 100644
--- a/_test/modify_for_debug/TargetActivity.c
+++ b/_test/modify_for_debug/TargetActivity.c
@@ -2,6 +2,7 @@
//! \file TargetActivity.c
#include "trice.h"
+#include "trice_TargetActivity_c_K0FEB4E60E1DCE1D8.h" // trice-bind: keep as last include before this file's Trice calls
char* TargetActivity(void) {
uint8_t buf[3] = {0xaa, 0xbb, 0xcc};
diff --git a/_test/ringB_de_protect_tcobs_ua/TargetActivity.c b/_test/ringB_de_protect_tcobs_ua/TargetActivity.c
index 60c5f6794..538fb229e 100644
--- a/_test/ringB_de_protect_tcobs_ua/TargetActivity.c
+++ b/_test/ringB_de_protect_tcobs_ua/TargetActivity.c
@@ -2,6 +2,7 @@
//! \file TargetActivity.c
#include "trice.h"
+#include "trice_TargetActivity_c_K000ACB09960854DC.h" // trice-bind: keep as last include before this file's Trice calls
// Needed safety space is 4*((TRICE_DATA_OFFSET>>2) + (TRICE_SINGLE_MAX_SIZE>>1)-1) = 208
// Needed safety space is TRICE_DATA_OFFSET + (2*TRICE_SINGLE_MAX_SIZE)-4) = 208
diff --git a/_test/stackB_di_nopf_aux32_specific/TargetActivity.c b/_test/stackB_di_nopf_aux32_specific/TargetActivity.c
index a7235fd0f..b5b82c09f 100644
--- a/_test/stackB_di_nopf_aux32_specific/TargetActivity.c
+++ b/_test/stackB_di_nopf_aux32_specific/TargetActivity.c
@@ -2,6 +2,7 @@
//! \file TargetActivity.c
#include "trice.h"
+#include "trice_TargetActivity_c_KA864B0B35472E566.h" // trice-bind: keep as last include before this file's Trice calls
// clang-format off
diff --git a/_test/testdata/triceCheck.c b/_test/testdata/triceCheck.c
index d21f2652c..497a6fbd2 100644
--- a/_test/testdata/triceCheck.c
+++ b/_test/testdata/triceCheck.c
@@ -5,6 +5,7 @@
#if 1 // !TRICE_OFF - We do not exclude this file globally for TRICE_OFF == 1, to check if TRICE_OFF works well.
#include
#include "trice.h"
+#include "trice_triceCheck_c_KE43C28474024C67C.h" // trice-bind: keep as last include before this file's Trice calls
// The strings behind "//exp:" are the expected result for each line (-color=none)
@@ -36,6 +37,32 @@ static int Test_TRiceAssertOrReturnValue(int flag);
void TriceCheck(int index); // Avoid noise with option -Wmissing-prototypes.
+//! LOG_ERROR_EXAMPLE demonstrates a logging statement macro.
+#define LOG_ERROR_EXAMPLE(n) \
+ do { \
+ switch (n) { \
+ case 0: \
+ break; \
+ case 7: \
+ trice("err:file not found (error code 7)\n"); \
+ break; \
+ default: \
+ trice("err:unknown error code %d\n", n); \
+ } \
+ } while (0)
+
+//! LogErrorExample demonstrates the equivalent function implementation.
+static void LogErrorExample(int n) {
+ switch (n) {
+ case 0:
+ break;
+ case 7:
+ trice("err:file not found (error code 7)\n");
+ break;
+ default:
+ trice("err:unknown error code %d\n", n);
+ }
+}
//! TriceCheck performs trice code sequence n. TriceCheck writes out all types of trices with fixed values for testing
//! \details One trice has one subtrace, if param size max 2 bytes.
//! Traces with more bytes as parameter consist of several subtraces.
@@ -182,21 +209,59 @@ void TriceCheck(int index) {
break; case __LINE__: Test_triceAssertOrReturnValue(0); //exp: "time: default: ASSERT:flag not true!\n"
break; case __LINE__: Test_TriceAssertOrReturnValue(0); //exp: "time: be16default: ASSERT:flag not true!\n"
break; case __LINE__: Test_TRiceAssertOrReturnValue(0); //exp: "time:feed3322default: ASSERT:flag not true!\n"
-
+
+#include "trice_triceCheck_c_KE43C28474024C67C_R0_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R0
+ break; case __LINE__: LOG_ERROR_EXAMPLE(0); //exp: ""
+#include "trice_triceCheck_c_KE43C28474024C67C_R0_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R0
+#include "trice_triceCheck_c_KE43C28474024C67C_R1_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R1
+ break; case __LINE__: LOG_ERROR_EXAMPLE(7); //exp: "time: default: err:file not found (error code 7)\n"
+#include "trice_triceCheck_c_KE43C28474024C67C_R1_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R1
+#include "trice_triceCheck_c_KE43C28474024C67C_R2_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R2
+ break; case __LINE__: LOG_ERROR_EXAMPLE(9); //exp: "time: default: err:unknown error code 9\n"
+#include "trice_triceCheck_c_KE43C28474024C67C_R2_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R2
+
+ break; case __LINE__: LogErrorExample(0); //exp: ""
+ break; case __LINE__: LogErrorExample(7); //exp: "time: default: err:file not found (error code 7)\n"
+ break; case __LINE__: LogErrorExample(9); //exp: "time: default: err:unknown error code 9\n"
+
// The following asserts are expected to be silent, so we add some output just for the testing here.
+#include "trice_triceCheck_c_KE43C28474024C67C_R3_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R3
break; case __LINE__: triceAssertTrue("ASSERT:flag not true!\n", !0 ); TRice("ok\n"); //exp: "time:feed3322default: ok\n"
+#include "trice_triceCheck_c_KE43C28474024C67C_R3_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R3
+#include "trice_triceCheck_c_KE43C28474024C67C_R4_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R4
break; case __LINE__: TriceAssertTrue("ASSERT:flag not true!\n", !0 ); TRice("ok\n"); //exp: "time:feed3322default: ok\n"
+#include "trice_triceCheck_c_KE43C28474024C67C_R4_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R4
+#include "trice_triceCheck_c_KE43C28474024C67C_R5_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R5
break; case __LINE__: TRiceAssertTrue("ASSERT:flag not true!\n", !0 ); TRice("ok\n"); //exp: "time:feed3322default: ok\n"
+#include "trice_triceCheck_c_KE43C28474024C67C_R5_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R5
+#include "trice_triceCheck_c_KE43C28474024C67C_R6_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R6
break; case __LINE__: triceAssert("ASSERT:flag not true!\n", !0 ); TRice("ok\n"); //exp: "time:feed3322default: ok\n"
+#include "trice_triceCheck_c_KE43C28474024C67C_R6_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R6
+#include "trice_triceCheck_c_KE43C28474024C67C_R7_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R7
break; case __LINE__: TriceAssert("ASSERT:flag not true!\n", !0 ); TRice("ok\n"); //exp: "time:feed3322default: ok\n"
+#include "trice_triceCheck_c_KE43C28474024C67C_R7_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R7
+#include "trice_triceCheck_c_KE43C28474024C67C_R8_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R8
break; case __LINE__: TRiceAssert("ASSERT:flag not true!\n", !0 ); TRice("ok\n"); //exp: "time:feed3322default: ok\n"
+#include "trice_triceCheck_c_KE43C28474024C67C_R8_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R8
+#include "trice_triceCheck_c_KE43C28474024C67C_R9_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R9
break; case __LINE__: triceAssertFalse("ASSERT:flag not false!\n", 0 ); TRice("ok\n"); //exp: "time:feed3322default: ok\n"
+#include "trice_triceCheck_c_KE43C28474024C67C_R9_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R9
+#include "trice_triceCheck_c_KE43C28474024C67C_R10_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R10
break; case __LINE__: TriceAssertFalse("ASSERT:flag not false!\n", 0 ); TRice("ok\n"); //exp: "time:feed3322default: ok\n"
+#include "trice_triceCheck_c_KE43C28474024C67C_R10_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R10
+#include "trice_triceCheck_c_KE43C28474024C67C_R11_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R11
break; case __LINE__: TRiceAssertFalse("ASSERT:flag not false!\n", 0 ); TRice("ok\n"); //exp: "time:feed3322default: ok\n"
+#include "trice_triceCheck_c_KE43C28474024C67C_R11_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R11
+#include "trice_triceCheck_c_KE43C28474024C67C_R12_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R12
break; case __LINE__: triceAssertOrReturn("ASSERT:flag not true!\n", !0 ); TRice("ok\n"); //exp: "time:feed3322default: ok\n"
+#include "trice_triceCheck_c_KE43C28474024C67C_R12_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R12
+#include "trice_triceCheck_c_KE43C28474024C67C_R13_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R13
break; case __LINE__: TriceAssertOrReturn("ASSERT:flag not true!\n", !0 ); TRice("ok\n"); //exp: "time:feed3322default: ok\n"
+#include "trice_triceCheck_c_KE43C28474024C67C_R13_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R13
+#include "trice_triceCheck_c_KE43C28474024C67C_R14_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R14
break; case __LINE__: TRiceAssertOrReturn("ASSERT:flag not true!\n", !0 ); TRice("ok\n"); //exp: "time:feed3322default: ok\n"
+#include "trice_triceCheck_c_KE43C28474024C67C_R14_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R14
break; case __LINE__: if(Test_triceAssertOrReturnValue(1) == 1) { TRice("ok\n"); } //exp: "time:feed3322default: ok\n"
break; case __LINE__: if(Test_TriceAssertOrReturnValue(1) == 1) { TRice("ok\n"); } //exp: "time:feed3322default: ok\n"
@@ -2200,8 +2265,12 @@ EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
trice("e:7");
trice("m:12");
trice("m:123\n");
+#include "trice_triceCheck_c_KE43C28474024C67C_R15_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R15
trice("e:A"); trice("w:B"); trice("a:c");
+#include "trice_triceCheck_c_KE43C28474024C67C_R15_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R15
+#include "trice_triceCheck_c_KE43C28474024C67C_R16_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R16
trice("wr:d"); trice("rd:e\n"); trice("diag:f");
+#include "trice_triceCheck_c_KE43C28474024C67C_R16_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R16
}
#if TRICE_CGO == 1 || defined(TRICE_FULL_CHECK)
break; case __LINE__: trice("sig:TRICE8 with variable param count 1 to 12\n" );
@@ -2700,28 +2769,60 @@ static int64_t DoubleToInt64(double f) {
#endif
-//! SCOPY is a helper macro for struct serialization.
-#define SCOPY(element) \
- do { \
- char const* n_SCOPY = #element; \
- size_t size_SCOPY = sizeof(src->element); \
- memcpy(p, &(src->element), size_SCOPY); \
- p += size_SCOPY; \
- TRICE_S(ID(0), "rd:sizeof(%8s)", n_SCOPY); \
- TRICE(ID(0), " = %d\n", size_SCOPY); \
+//! Variant 1: SCOPY keeps copying and logging in a statement macro with data stringification and a replacement-owned semicolon.
+#define SCOPY(element) \
+ do { \
+ char const* n_SCOPY = #element; \
+ size_t size_SCOPY = sizeof(src->element); \
+ memcpy(p, &(src->element), size_SCOPY); \
+ p += size_SCOPY; \
+ triceS("rd:sizeof(%8s)", n_SCOPY); \
+ trice(" = %d\n", size_SCOPY); \
} while (0);
-//! DCOPY is a helper macro for struct deserialization.
-#define DCOPY(element) \
- do { \
- char const* n_DCOPY = #element; \
- size_t size_DCOPY = sizeof(dst->element); \
- memcpy(&(dst->element), p, size_DCOPY); \
- p += size_DCOPY; \
- TRICE_S(ID(0), "rd:sizeof(%8s)", n_DCOPY); \
- TRICE(ID(0), " = %d\n", size_DCOPY); \
+//! Variant 1: DCOPY is the equivalent deserialization statement macro.
+#define DCOPY(element) \
+ do { \
+ char const* n_DCOPY = #element; \
+ size_t size_DCOPY = sizeof(dst->element); \
+ memcpy(&(dst->element), p, size_DCOPY); \
+ p += size_DCOPY; \
+ triceS("rd:sizeof(%8s)", n_DCOPY); \
+ trice(" = %d\n", size_DCOPY); \
} while (0);
+#if !TRICE_OFF
+
+//! Variant 2: sCopyField implements serialization and logging as a normal inline function.
+static inline char* sCopyField(char* p, void const* field, size_t size, char const* name) {
+ memcpy(p, field, size);
+ triceS("rd:sizeof(%8s)", name);
+ trice(" = %d\n", size);
+ return p + size;
+}
+
+//! Variant 2: dCopyField implements deserialization and logging as a normal inline function.
+static inline char const* dCopyField(char const* p, void* field, size_t size, char const* name) {
+ memcpy(field, p, size);
+ triceS("rd:sizeof(%8s)", name);
+ trice(" = %d\n", size);
+ return p + size;
+}
+
+#endif
+
+//! Variant 3: SCOPY_VIA_FUNCTION retains token convenience while keeping Trice calls in the function.
+#define SCOPY_VIA_FUNCTION(element) \
+ do { \
+ p = sCopyField(p, &(src->element), sizeof(src->element), #element); \
+ } while (0)
+
+//! Variant 3: DCOPY_VIA_FUNCTION retains token convenience while keeping Trice calls in the function.
+#define DCOPY_VIA_FUNCTION(element) \
+ do { \
+ p = dCopyField(p, &(dst->element), sizeof(dst->element), #element); \
+ } while (0)
+
typedef struct {
float x;
float y;
@@ -2734,9 +2835,11 @@ typedef struct {
static int serializePoint(char* dst, const Point_t* src) {
char* p = dst;
- SCOPY(x)
- SCOPY(y)
- SCOPY(rgb)
+#include "trice_triceCheck_c_KE43C28474024C67C_R17_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R17
+ SCOPY(x) // Variant 1: logging statement macro.
+#include "trice_triceCheck_c_KE43C28474024C67C_R17_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R17
+ p = sCopyField(p, &src->y, sizeof(src->y), "y"); // Variant 2: direct inline-function call.
+ SCOPY_VIA_FUNCTION(rgb); // Variant 3: Trice-free convenience macro.
return (int)(p - dst);
}
@@ -2744,9 +2847,11 @@ static int serializePoint(char* dst, const Point_t* src) {
static int deserializePoint(Point_t* const dst, const char* src) {
char const* p = src;
- DCOPY(x)
- DCOPY(y)
- DCOPY(rgb)
+#include "trice_triceCheck_c_KE43C28474024C67C_R18_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R18
+ DCOPY(x) // Variant 1: logging statement macro.
+#include "trice_triceCheck_c_KE43C28474024C67C_R18_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R18
+ p = dCopyField(p, &dst->y, sizeof(dst->y), "y"); // Variant 2: direct inline-function call.
+ DCOPY_VIA_FUNCTION(rgb); // Variant 3: Trice-free convenience macro.
return (int)(p - src);
}
@@ -2770,15 +2875,31 @@ typedef struct {
static int serializeTryout(char* dst, const Tryout_t* src) {
char* p = dst;
+#include "trice_triceCheck_c_KE43C28474024C67C_R19_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R19
SCOPY(z)
+#include "trice_triceCheck_c_KE43C28474024C67C_R19_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R19
+#include "trice_triceCheck_c_KE43C28474024C67C_R20_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R20
SCOPY(u)
+#include "trice_triceCheck_c_KE43C28474024C67C_R20_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R20
+#include "trice_triceCheck_c_KE43C28474024C67C_R21_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R21
SCOPY(s)
+#include "trice_triceCheck_c_KE43C28474024C67C_R21_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R21
+#include "trice_triceCheck_c_KE43C28474024C67C_R22_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R22
SCOPY(addr)
+#include "trice_triceCheck_c_KE43C28474024C67C_R22_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R22
+#include "trice_triceCheck_c_KE43C28474024C67C_R23_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R23
SCOPY(x)
+#include "trice_triceCheck_c_KE43C28474024C67C_R23_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R23
+#include "trice_triceCheck_c_KE43C28474024C67C_R24_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R24
SCOPY(y)
+#include "trice_triceCheck_c_KE43C28474024C67C_R24_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R24
+#include "trice_triceCheck_c_KE43C28474024C67C_R25_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R25
SCOPY(names)
+#include "trice_triceCheck_c_KE43C28474024C67C_R25_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R25
p += serializePoint(p, src->point);
+#include "trice_triceCheck_c_KE43C28474024C67C_R26_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R26
SCOPY(bitmask)
+#include "trice_triceCheck_c_KE43C28474024C67C_R26_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R26
return (int)(p - dst);
}
@@ -2786,15 +2907,31 @@ static int serializeTryout(char* dst, const Tryout_t* src) {
static int deserializeTryout(Tryout_t* const dst, const char* src) {
char const* p = src;
+#include "trice_triceCheck_c_KE43C28474024C67C_R27_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R27
DCOPY(z)
+#include "trice_triceCheck_c_KE43C28474024C67C_R27_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R27
+#include "trice_triceCheck_c_KE43C28474024C67C_R28_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R28
DCOPY(u)
+#include "trice_triceCheck_c_KE43C28474024C67C_R28_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R28
+#include "trice_triceCheck_c_KE43C28474024C67C_R29_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R29
DCOPY(s)
+#include "trice_triceCheck_c_KE43C28474024C67C_R29_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R29
+#include "trice_triceCheck_c_KE43C28474024C67C_R30_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R30
DCOPY(addr)
+#include "trice_triceCheck_c_KE43C28474024C67C_R30_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R30
+#include "trice_triceCheck_c_KE43C28474024C67C_R31_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R31
DCOPY(x)
+#include "trice_triceCheck_c_KE43C28474024C67C_R31_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R31
+#include "trice_triceCheck_c_KE43C28474024C67C_R32_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R32
DCOPY(y)
+#include "trice_triceCheck_c_KE43C28474024C67C_R32_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R32
+#include "trice_triceCheck_c_KE43C28474024C67C_R33_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R33
DCOPY(names)
+#include "trice_triceCheck_c_KE43C28474024C67C_R33_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R33
p += deserializePoint(dst->point, p);
+#include "trice_triceCheck_c_KE43C28474024C67C_R34_begin.h" // trice-bind: generated rebase begin KE43C28474024C67C_R34
DCOPY(bitmask)
+#include "trice_triceCheck_c_KE43C28474024C67C_R34_end.h" // trice-bind: generated rebase end KE43C28474024C67C_R34
return (int)(p - src);
}
@@ -2857,10 +2994,10 @@ static void exampleOfManualSerialization(void) {
TRICE(Id(0), "inf:sizeOf(Trypout) = %d, buffer length = %d\n", sizeof(tx), len);
- #if TRICE_LEGACY_RPC_SUPPORT == 1
+#if TRICE_LEGACY_RPC_SUPPORT == 1
TRICE8_F(Id(0), "info:TryoutStructFunction", &tx, sizeof(tx));
TRICE8_F(Id(0), "info:TryoutBufferFunction", dst, len); // lint !e670
- #endif // #if TRICE_LEGACY_RPC_SUPPORT == 1
+#endif // #if TRICE_LEGACY_RPC_SUPPORT == 1
}
static void exampleOfManualJSONencoding(void) {
@@ -2884,21 +3021,21 @@ static void dynString(int n) {
}
static int Test_triceAssertOrReturnValue(int flag) {
- triceAssertOrReturnValue("ASSERT:flag not true!\n", flag != 0, 0);
+ triceAssertOrReturnValue("ASSERT:flag not true!\n", flag != 0, 0);
- return 1;
+ return 1;
}
static int Test_TriceAssertOrReturnValue(int flag) {
- TriceAssertOrReturnValue("ASSERT:flag not true!\n", flag != 0, 0);
+ TriceAssertOrReturnValue("ASSERT:flag not true!\n", flag != 0, 0);
- return 1;
+ return 1;
}
static int Test_TRiceAssertOrReturnValue(int flag) {
- TRiceAssertOrReturnValue("ASSERT:flag not true!\n", flag != 0, 0);
+ TRiceAssertOrReturnValue("ASSERT:flag not true!\n", flag != 0, 0);
- return 1;
+ return 1;
}
#endif // #ifndef TRICE_CHECK_MIN
diff --git a/_test/userprint_dblB_de_tcobs_ua/TargetActivity.c b/_test/userprint_dblB_de_tcobs_ua/TargetActivity.c
index 06d651a1e..9eb5822ff 100644
--- a/_test/userprint_dblB_de_tcobs_ua/TargetActivity.c
+++ b/_test/userprint_dblB_de_tcobs_ua/TargetActivity.c
@@ -4,6 +4,7 @@
//! \details Go func triceLogSpecialTest parses additionally this file to collect the expected results line by line for later test execution.
#include "trice.h"
+#include "trice_TargetActivity_c_K0E2E9EBE4CCB577F.h" // trice-bind: keep as last include before this file's Trice calls
// The strings behind "//exp:" are the expected result for each line (-color=off)
// Lines ending with a comment starting with `//exp:` are executed during the automatic Go tests.
diff --git a/_test/userprint_dblB_de_tcobs_ua/triceConfig.h b/_test/userprint_dblB_de_tcobs_ua/triceConfig.h
index 0444ead29..f0da2342a 100644
--- a/_test/userprint_dblB_de_tcobs_ua/triceConfig.h
+++ b/_test/userprint_dblB_de_tcobs_ua/triceConfig.h
@@ -26,12 +26,12 @@ extern unsigned cgoTriceBufferDepth;
//! prints is a user print example with string, float and integer values.
//! We have to perform a normal print into a buffer, which then is passed to triceS.
//! This is slow but we can integrate user code without changing it.
-#define print(...) \
- do { \
- int len = npf_snprintf((char*)cgoTriceBuffer + sizeof(uint16_t), 256, __VA_ARGS__); \
- uint16_t* plen = (uint16_t*)cgoTriceBuffer; \
- *plen = (uint16_t)len; \
- cgoTriceBufferDepth = len ? sizeof(uint16_t) + len : 0; /* no output for len==0 */ \
+#define print(...) \
+ do { \
+ int len = npf_snprintf((char*)cgoTriceBuffer + sizeof(uint16_t), 256, __VA_ARGS__); \
+ uint16_t* plen = (uint16_t*)cgoTriceBuffer; \
+ *plen = (uint16_t)len; \
+ cgoTriceBufferDepth = len ? sizeof(uint16_t) + len : 0; /* no output for len==0 */ \
} while (0)
//
diff --git a/cmd/trice/main_test.go b/cmd/trice/main_test.go
index 7a3ab4230..ebd1c358a 100644
--- a/cmd/trice/main_test.go
+++ b/cmd/trice/main_test.go
@@ -6,6 +6,8 @@ import (
"bytes"
"fmt"
"io"
+ "net"
+ "net/rpc"
"os"
"testing"
"time"
@@ -17,6 +19,50 @@ import (
"github.com/stretchr/testify/assert"
)
+// reserveLoopbackAddress selects an ephemeral IPv4 port. Using an explicit
+// address avoids platform-dependent localhost resolution between IPv4 and
+// IPv6 while the server and shutdown client start concurrently.
+func reserveLoopbackAddress(t *testing.T) (host, port, address string) {
+ t.Helper()
+ listener, err := net.Listen("tcp", "127.0.0.1:0")
+ if err != nil {
+ t.Fatalf("cannot reserve loopback address: %v", err)
+ }
+ address = listener.Addr().String()
+ if err := listener.Close(); err != nil {
+ t.Fatalf("cannot release reserved loopback address %s: %v", address, err)
+ }
+ host, port, err = net.SplitHostPort(address)
+ if err != nil {
+ t.Fatalf("cannot split loopback address %s: %v", address, err)
+ }
+ return host, port, address
+}
+
+// waitForDisplayServer waits for the listener rather than for its earlier
+// startup text. ScDisplayServer emits that text immediately before net.Listen,
+// so the text alone does not prove that an RPC client can connect yet.
+func waitForDisplayServer(t *testing.T, address string, serverDone <-chan error) {
+ t.Helper()
+ deadline := time.Now().Add(3 * time.Second)
+ for {
+ connection, err := net.DialTimeout("tcp", address, 100*time.Millisecond)
+ if err == nil {
+ _ = connection.Close()
+ return
+ }
+ select {
+ case serverErr := <-serverDone:
+ t.Fatalf("display server stopped before becoming reachable at %s: %v", address, serverErr)
+ default:
+ }
+ if time.Now().After(deadline) {
+ t.Fatalf("display server did not become reachable at %s: %v", address, err)
+ }
+ time.Sleep(10 * time.Millisecond)
+ }
+}
+
// setupTest - look for "This is the greatest answer in this thread" in https://stackoverflow.com/questions/23729790/how-can-i-do-test-setup-using-the-testing-package-in-go
func setupTest(t *testing.T, fSys *afero.Afero) func() {
//fmt.Println("Setup code for", t.Name())
@@ -37,7 +83,8 @@ func setupTest(t *testing.T, fSys *afero.Afero) func() {
id.Min = id.TriceID(1000)
id.Max = id.TriceID(7999)
id.SearchMethod = "random"
- id.LIPathKind = "base"
+ id.LIRoot = ""
+ id.LIMaxDirs = 0
//id.Srcs ArrayFlag
//id.IDData idData
id.ExtendMacrosWithParamCount = false
@@ -110,31 +157,40 @@ func _TestDisplayServerStartAndShutdownLegacy(t *testing.T) {
assert.Equal(t, "", sd.String())
}
-// TestDisplayServerStartAndShutdown fails with -race.
-// ds should be a channel to avoid that, but I do notknow how to do that here without changing the args.Handler signature.
+// TestDisplayServerStartAndShutdown0 verifies CLI-level display-server startup
+// and RPC shutdown after the listener is ready for connections. Calling the
+// shutdown CLI through args.Handler here would run the process-global argument
+// parser concurrently with the server CLI, unlike two real trice processes.
func TestDisplayServerStartAndShutdown0(t *testing.T) {
fSys := &afero.Afero{Fs: afero.NewMemMapFs()}
defer setupTest(t, fSys)()
+ host, port, address := reserveLoopbackAddress(t)
var ds bytes.Buffer
- go args.Handler(&ds, fSys, []string{"trice", "ds", "-color", "none", "-ipp", "61497"})
-
- for ds.String() != "displayServer @ localhost:61497\n" {
- time.Sleep(1 * time.Millisecond)
+ serverDone := make(chan error, 1)
+ go func() {
+ serverDone <- args.Handler(&ds, fSys, []string{"trice", "ds", "-color", "none", "-ipa", host, "-ipp", port})
+ }()
+ waitForDisplayServer(t, address, serverDone)
+
+ client, err := rpc.Dial("tcp", address)
+ if err != nil {
+ t.Fatalf("cannot connect shutdown RPC client to %s: %v", address, err)
+ }
+ var shutdownReply int64
+ shutdownErr := client.Call("DisplayServer.Shutdown", []int64{0}, &shutdownReply)
+ assert.NoError(t, shutdownErr)
+ assert.NoError(t, client.Close())
+ select {
+ case <-serverDone:
+ case <-time.After(3 * time.Second):
+ t.Fatal("display server did not stop after the shutdown RPC")
}
- expect := "displayServer @ localhost:61497\n"
- actual := ds.String()
- assert.Equal(t, expect, actual)
-
- var sd bytes.Buffer
- args.Handler(&sd, fSys, []string{"trice", "sd", "-ipp", "61497"})
-
- exp := "displayServer @ localhost:61497\n\n\ndisplayServer shutdown\n\n\n"
+ exp := "displayServer @ " + address + "\n\n\ndisplayServer shutdown\n\n\n"
act := ds.String()
assert.Equal(t, exp, act)
- assert.Equal(t, "", sd.String())
}
// TestDisplayServerStartAndShutdown1 does not come to an end for some reason!
diff --git a/demo/.gitignore b/demo/.gitignore
new file mode 100644
index 000000000..14df77431
--- /dev/null
+++ b/demo/.gitignore
@@ -0,0 +1,2 @@
+# All generated files stay in build directories.
+build/
diff --git a/demo/README.md b/demo/README.md
new file mode 100644
index 000000000..e38a8e89b
--- /dev/null
+++ b/demo/README.md
@@ -0,0 +1,77 @@
+# Minimal Trice Demos
+
+These two small PC programs demonstrate the same Trice output channel in two
+modes:
+
+- `direct`: Each Trice call writes its binary data immediately to
+ `build/log.bin`.
+- `deferred`: The Trice calls first write to a ring buffer. `TriceTransfer()`
+ subsequently transfers the data to `build/log.bin`.
+
+Both programs use the Trice sources from `../src` directly. No library is
+copied, and no build system is required.
+
+## Requirements
+
+Only the following tools are needed:
+
+- `trice` in `PATH`,
+- a C compiler available as `cc` or `gcc`,
+- Bash or a comparable POSIX shell.
+
+The concise, commented-out prerequisite checks at the beginning of `demo.sh`
+can be enabled if needed. The script does not install anything automatically.
+
+## Running the Demos
+
+Run the central script from the `demo` directory:
+
+```sh
+cd demo
+./demo.sh
+```
+
+It runs `trice bind` once for both programs, then builds and starts `deferred`
+followed by `direct`. Finally, it displays both log files in sequence.
+
+Each demo has its own `build` directory. These directories contain generated
+files only:
+
+```text
+demo/build/triceIDs/ shared generated bind headers
+demo/deferred/build/ demo_deferred and log.bin
+demo/direct/build/ demo_direct and log.bin
+```
+
+On Windows, the application name additionally has the `.exe` suffix. The script
+automatically starts it under the correct name.
+
+`trice bind` runs without options from the demo directory and therefore uses
+`til.json`, `li.json`, and `build/triceIDs` directly. `trice log` also runs from
+this directory and needs only `FILEBUFFER` and the path to the respective
+`log.bin`. These demos do not require `tlog`.
+
+On the first run, `trice bind` automatically adds the initially unfamiliar line
+`#include "trice_main_c_K...h"` to each `main.c`. The file name is generated; the
+user neither writes nor maintains it. The included header is then located under
+`build/triceIDs`.
+
+## Shared and Local Files
+
+`til.json` and `li.json` are shared in this directory. They contain the IDs and
+source locations of all executed demos and belong to the demo project.
+
+The compiler glob `../src/[a-z]*.c` selects all regular Trice sources. The unused
+vendor file `SEGGER_RTT.c` starts with an uppercase letter and is therefore
+excluded. A dummy SEGGER RTT configuration is not required.
+
+Each subdirectory contains only its own application configuration:
+
+```text
+direct/ or deferred/
+├── main.c
+├── triceConfig.h
+└── build/ generated and not versioned
+```
+
+The shared workflow is defined only in `demo.sh`.
diff --git a/demo/deferred/main.c b/demo/deferred/main.c
new file mode 100644
index 000000000..bafd732e9
--- /dev/null
+++ b/demo/deferred/main.c
@@ -0,0 +1,60 @@
+// SPDX-License-Identifier: MIT
+
+//! \file main.c
+//! \brief Minimal PC application using deferred Trice output.
+
+#include
+#include
+#include
+
+#include "trice.h"
+// trice bind adds the following generated include automatically during its
+// first run; users do not need to create or maintain the file name.
+#include "trice_main_c_K660F15320F4A797D.h" // trice-bind: keep as last include before this file's Trice calls
+
+static FILE* logFile; // logFile receives records only when TriceTransfer drains the ring buffer.
+static bool logFail; // logFail preserves callback failures because the callback returns void.
+
+//! writeLogFile writes each transferred record through the configured hook.
+static void writeLogFile(
+ const uint8_t* data,
+ size_t length) {
+ if (logFile == NULL || logFail) {
+ return;
+ }
+
+ if (fwrite(data, 1, length, logFile) != length) {
+ logFail = true;
+ }
+}
+
+//! main buffers two records and then explicitly transfers both to log.bin.
+int main(void) {
+ logFile = fopen("log.bin", "wb");
+ if (logFile == NULL) {
+ perror("log.bin");
+ return 1;
+ }
+ UserNonBlockingDeferredWrite8AuxiliaryFn = writeLogFile;
+ TriceInit();
+ trice("msg:Hello from deferred mode.\n");
+ trice("att:Deferred value=%d.\n", 42);
+
+ // Keep transferring until every buffered record reached the file writer.
+ while (TricesCountRingBuffer > 0) {
+ TriceTransfer();
+ }
+
+ if (fclose(logFile) != 0) {
+ perror("log.bin");
+ return 1;
+ }
+ logFile = NULL;
+
+ if (logFail) {
+ fputs("Could not write all Trice records to log.bin.\n", stderr);
+ return 1;
+ }
+
+ return 0;
+}
diff --git a/demo/deferred/triceConfig.h b/demo/deferred/triceConfig.h
new file mode 100644
index 000000000..039c68b24
--- /dev/null
+++ b/demo/deferred/triceConfig.h
@@ -0,0 +1,17 @@
+// SPDX-License-Identifier: MIT
+
+//! \file triceConfig.h
+//! \brief Small host configuration for deferred Trice output.
+
+#ifndef TRICE_DEMO_DEFERRED_CONFIG_H_
+#define TRICE_DEMO_DEFERRED_CONFIG_H_
+
+// Trice calls append to a ring buffer; TriceTransfer drains it later.
+#define TRICE_BUFFER TRICE_RING_BUFFER
+#define TRICE_DEFERRED_OUTPUT 1
+
+// Enable the byte-output hook. main.c assigns its file writer to the library's
+// UserNonBlockingDeferredWrite8AuxiliaryFn function pointer.
+#define TRICE_DEFERRED_AUXILIARY8 1
+
+#endif // TRICE_DEMO_DEFERRED_CONFIG_H_
diff --git a/demo/demo.sh b/demo/demo.sh
new file mode 100644
index 000000000..a3664fca1
--- /dev/null
+++ b/demo/demo.sh
@@ -0,0 +1,53 @@
+#!/bin/sh
+# SPDX-License-Identifier: MIT
+#
+# Start this script from the demo directory:
+# cd demo
+# ./demo.sh
+
+# Optional safeguards; uncomment them for explicit preflight diagnostics.
+# set -eu
+# [ -f "../src/trice.h" ] || { echo "ERROR: Start this script inside demo." >&2; exit 1; }
+# command -v trice >/dev/null 2>&1 || { echo "ERROR: Put trice in PATH." >&2; exit 1; }
+
+# Linux and macOS commonly provide cc, while Windows often provides gcc.
+compiler="cc"
+if ! command -v "$compiler" >/dev/null 2>&1; then
+ compiler="gcc"
+fi
+# command -v "$compiler" >/dev/null 2>&1 || { echo "ERROR: Install cc or gcc." >&2; exit 1; }
+
+suffix=""
+case "$(uname -s)" in
+ MINGW* | MSYS* | CYGWIN*) suffix=".exe" ;;
+esac
+
+echo "Bind the Trice IDs"
+trice bind
+
+for mode in deferred direct; do
+ echo
+ echo "Build and run $mode demo"
+ mkdir -p "$mode/build"
+
+ app="demo_${mode}${suffix}"
+ "$compiler" \
+ -I"$mode" \
+ -Ibuild/triceIDs \
+ -I../src \
+ "$mode/main.c" \
+ ../src/[a-z]*.c \
+ -o "$mode/build/$app"
+
+ # Run inside build so the application writes its log.bin there.
+ (
+ cd "$mode/build" || exit 1
+ "./$app"
+ )
+done
+
+for mode in deferred direct; do
+ echo
+ echo "Decode $mode/build/log.bin"
+ trice log -p FILEBUFFER -args "$mode/build/log.bin"
+done
diff --git a/demo/direct/main.c b/demo/direct/main.c
new file mode 100644
index 000000000..55bcadcd6
--- /dev/null
+++ b/demo/direct/main.c
@@ -0,0 +1,53 @@
+// SPDX-License-Identifier: MIT
+
+//! \file main.c
+//! \brief Minimal PC application using immediate Trice output.
+
+#include
+#include
+#include
+
+#include "trice.h"
+// trice bind adds the following generated include automatically during its
+// first run; users do not need to create or maintain the file name.
+#include "trice_main_c_K6B53773E459BC817.h" // trice-bind: keep as last include before this file's Trice calls
+
+static FILE* logFile; // logFile is open only while the synchronous demo emits its Trice records.
+static bool logFail; // logFail preserves callback failures because the callback returns void.
+
+//! writeLogFile writes each framed record immediately through the configured hook.
+static void writeLogFile(const uint8_t* data, size_t length) {
+ if (logFile == NULL || logFail) {
+ return;
+ }
+
+ if (fwrite(data, 1, length, logFile) != length) {
+ logFail = true;
+ }
+}
+
+//! main recreates log.bin and emits two records without deferred buffering.
+int main(void) {
+ logFile = fopen("log.bin", "wb");
+ if (logFile == NULL) {
+ perror("log.bin");
+ return 1;
+ }
+ UserNonBlockingDirectWrite8AuxiliaryFn = writeLogFile;
+ TriceInit();
+ trice("msg:Hello from direct mode.\n");
+ trice("att:Direct value=%d.\n", 42);
+
+ if (fclose(logFile) != 0) {
+ perror("log.bin");
+ return 1;
+ }
+ logFile = NULL;
+
+ if (logFail) {
+ fputs("Could not write all Trice records to log.bin.\n", stderr);
+ return 1;
+ }
+
+ return 0;
+}
diff --git a/demo/direct/triceConfig.h b/demo/direct/triceConfig.h
new file mode 100644
index 000000000..19d241ae3
--- /dev/null
+++ b/demo/direct/triceConfig.h
@@ -0,0 +1,20 @@
+// SPDX-License-Identifier: MIT
+
+//! \file triceConfig.h
+//! \brief Small host configuration for immediate Trice output.
+
+#ifndef TRICE_DEMO_DIRECT_CONFIG_H_
+#define TRICE_DEMO_DIRECT_CONFIG_H_
+
+// A stack buffer is sufficient because every record is written immediately.
+#define TRICE_BUFFER TRICE_STACK_BUFFER
+#define TRICE_DIRECT_OUTPUT 1
+
+// Enable the byte-output hook. main.c assigns its file writer to the library's
+// UserNonBlockingDirectWrite8AuxiliaryFn function pointer.
+#define TRICE_DIRECT_AUXILIARY8 1
+
+// TCOBS gives the file decoder an unambiguous boundary for every record.
+#define TRICE_DIRECT_OUT_FRAMING TRICE_FRAMING_TCOBS
+
+#endif // TRICE_DEMO_DIRECT_CONFIG_H_
diff --git a/demo/li.json b/demo/li.json
new file mode 100644
index 000000000..400d52bf4
--- /dev/null
+++ b/demo/li.json
@@ -0,0 +1,18 @@
+{
+ "1000": {
+ "File": "direct/main.c",
+ "Line": 38
+ },
+ "1001": {
+ "File": "direct/main.c",
+ "Line": 39
+ },
+ "1002": {
+ "File": "deferred/main.c",
+ "Line": 40
+ },
+ "1003": {
+ "File": "deferred/main.c",
+ "Line": 41
+ }
+}
\ No newline at end of file
diff --git a/demo/til.json b/demo/til.json
new file mode 100644
index 000000000..b30236134
--- /dev/null
+++ b/demo/til.json
@@ -0,0 +1,18 @@
+{
+ "1000": {
+ "Type": "trice",
+ "Strg": "msg:Hello from direct mode.\\n"
+ },
+ "1001": {
+ "Type": "trice",
+ "Strg": "att:Direct value=%d.\\n"
+ },
+ "1002": {
+ "Type": "trice",
+ "Strg": "msg:Hello from deferred mode.\\n"
+ },
+ "1003": {
+ "Type": "trice",
+ "Strg": "att:Deferred value=%d.\\n"
+ }
+}
diff --git a/demoLI.json b/demoLI.json
index 629d5f4e6..9a86c6c28 100644
--- a/demoLI.json
+++ b/demoLI.json
@@ -1,63 +1,43 @@
{
- "1000": {
- "File": "examples/DemoPlotData_Trice/src/main.c",
- "Line": 546
- },
- "1071": {
- "File": "N3_bi/main.c",
- "Line": 18
- },
- "1101": {
- "File": "N1_tx/main.c",
- "Line": 18
- },
- "1126": {
- "File": "main.c",
- "Line": 18
- },
- "1219": {
- "File": "main.c",
- "Line": 18
- },
"13000": {
"File": "examples/F030_inst/Core/Src/stm32f0xx_it.c",
- "Line": 162
+ "Line": 163
},
"13001": {
"File": "examples/F030_inst/Core/Src/stm32f0xx_it.c",
- "Line": 168
+ "Line": 169
},
"13002": {
"File": "examples/G0B1_inst/Core/Src/main.c",
- "Line": 83
+ "Line": 82
},
"13003": {
"File": "examples/G0B1_inst/Core/Src/main.c",
- "Line": 133
+ "Line": 132
},
"13004": {
"File": "examples/G0B1_inst/Core/Src/main.c",
- "Line": 136
+ "Line": 135
},
"13005": {
"File": "examples/G0B1_inst/Core/Src/main.c",
- "Line": 139
+ "Line": 140
},
"13006": {
"File": "examples/G0B1_inst/Core/Src/main.c",
- "Line": 142
+ "Line": 141
},
"13007": {
"File": "examples/G0B1_inst/Core/Src/stm32g0xx_it.c",
- "Line": 119
+ "Line": 120
},
"13008": {
"File": "examples/G0B1_inst/Core/Src/main.c",
- "Line": 348
+ "Line": 337
},
"13009": {
"File": "examples/G0B1_inst/Core/Src/main.c",
- "Line": 378
+ "Line": 365
},
"13010": {
"File": "examples/L432_inst/Core/Inc/triceConfig.h",
@@ -76,40 +56,40 @@
"Line": 82
},
"13014": {
- "File": "examples/L432_inst/Core/Src/stm32l4xx_it.c",
- "Line": 191
+ "File": "examples/L432_inst/Core/Inc/triceConfig.h",
+ "Line": 92
},
"13015": {
- "File": "examples/L432_inst/Core/Src/stm32l4xx_it.c",
- "Line": 197
+ "File": "examples/L432_inst/Core/Src/main.c",
+ "Line": 341
},
"13016": {
- "File": "examples/L432_inst/Core/Inc/triceConfig.h",
- "Line": 92
+ "File": "examples/L432_inst/Core/Src/main.c",
+ "Line": 366
},
"13017": {
- "File": "examples/L432_inst/Core/Inc/triceConfig.h",
- "Line": 102
+ "File": "examples/L432_inst/Core/Src/stm32l4xx_it.c",
+ "Line": 192
},
"13018": {
- "File": "examples/L432_inst/Core/Inc/triceConfig.h",
- "Line": 112
+ "File": "examples/L432_inst/Core/Src/stm32l4xx_it.c",
+ "Line": 198
},
"13019": {
- "File": "examples/L432_inst/Core/Src/main.c",
- "Line": 338
+ "File": "examples/L432_inst/Core/Inc/triceConfig.h",
+ "Line": 102
},
"13020": {
"File": "examples/L432_inst/Core/Inc/triceConfig.h",
- "Line": 122
+ "Line": 112
},
"13021": {
"File": "examples/L432_inst/Core/Inc/triceConfig.h",
- "Line": 132
+ "Line": 122
},
"13022": {
- "File": "examples/L432_inst/Core/Src/main.c",
- "Line": 365
+ "File": "examples/L432_inst/Core/Inc/triceConfig.h",
+ "Line": 132
},
"13023": {
"File": "examples/L432_inst/Core/Inc/triceConfig.h",
@@ -133,1312 +113,1303 @@
},
"13028": {
"File": "_test/testdata/triceCheck.c",
- "Line": 47
+ "Line": 74
},
"13029": {
"File": "_test/testdata/triceCheck.c",
- "Line": 74
+ "Line": 101
},
"13030": {
"File": "_test/testdata/triceCheck.c",
- "Line": 77
+ "Line": 104
},
"13031": {
"File": "_test/testdata/triceCheck.c",
- "Line": 79
+ "Line": 106
},
"13032": {
"File": "_test/testdata/triceCheck.c",
- "Line": 80
+ "Line": 107
},
"13033": {
"File": "_test/testdata/triceCheck.c",
- "Line": 81
+ "Line": 108
},
"13034": {
"File": "_test/testdata/triceCheck.c",
- "Line": 158
+ "Line": 185
},
"13035": {
"File": "_test/testdata/triceCheck.c",
- "Line": 159
+ "Line": 186
},
"13036": {
"File": "_test/testdata/triceCheck.c",
- "Line": 160
+ "Line": 187
},
"13037": {
"File": "_test/testdata/triceCheck.c",
- "Line": 161
+ "Line": 188
},
"13038": {
"File": "_test/testdata/triceCheck.c",
- "Line": 162
+ "Line": 189
},
"13039": {
"File": "_test/testdata/triceCheck.c",
- "Line": 163
+ "Line": 190
},
"13040": {
"File": "_test/testdata/triceCheck.c",
- "Line": 164
+ "Line": 191
},
"13041": {
"File": "_test/testdata/triceCheck.c",
- "Line": 165
+ "Line": 192
},
"13042": {
"File": "_test/testdata/triceCheck.c",
- "Line": 166
+ "Line": 193
},
"13043": {
"File": "_test/testdata/triceCheck.c",
- "Line": 167
+ "Line": 194
},
"13044": {
"File": "_test/testdata/triceCheck.c",
- "Line": 168
+ "Line": 195
},
"13045": {
"File": "_test/testdata/triceCheck.c",
- "Line": 169
+ "Line": 196
},
"13046": {
"File": "_test/testdata/triceCheck.c",
- "Line": 172
+ "Line": 199
},
"13047": {
"File": "_test/testdata/triceCheck.c",
- "Line": 173
+ "Line": 200
},
"13048": {
"File": "_test/testdata/triceCheck.c",
- "Line": 174
+ "Line": 201
},
"13049": {
"File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 175
+ "Line": 202
},
"13050": {
"File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 176
+ "Line": 203
},
"13051": {
"File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 177
+ "Line": 204
},
"13052": {
"File": "_test/testdata/triceCheck.c",
- "Line": 178
+ "Line": 205
},
"13053": {
"File": "_test/testdata/triceCheck.c",
- "Line": 179
+ "Line": 206
},
"13054": {
"File": "_test/testdata/triceCheck.c",
- "Line": 180
+ "Line": 207
},
"13055": {
"File": "_test/testdata/triceCheck.c",
- "Line": 187
+ "Line": 229
},
"13056": {
"File": "_test/testdata/triceCheck.c",
- "Line": 187
+ "Line": 229
},
"13057": {
"File": "_test/testdata/triceCheck.c",
- "Line": 188
+ "Line": 232
},
"13058": {
"File": "_test/testdata/triceCheck.c",
- "Line": 188
+ "Line": 232
},
"13059": {
"File": "_test/testdata/triceCheck.c",
- "Line": 189
+ "Line": 235
},
"13060": {
"File": "_test/testdata/triceCheck.c",
- "Line": 189
+ "Line": 235
},
"13061": {
"File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 190
+ "Line": 238
},
"13062": {
"File": "_test/testdata/triceCheck.c",
- "Line": 190
+ "Line": 238
},
"13063": {
"File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 191
+ "Line": 241
},
"13064": {
"File": "_test/testdata/triceCheck.c",
- "Line": 191
+ "Line": 241
},
"13065": {
"File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 192
+ "Line": 244
},
"13066": {
"File": "_test/testdata/triceCheck.c",
- "Line": 192
+ "Line": 244
},
"13067": {
"File": "_test/testdata/triceCheck.c",
- "Line": 193
+ "Line": 247
},
"13068": {
"File": "_test/testdata/triceCheck.c",
- "Line": 193
+ "Line": 247
},
"13069": {
"File": "_test/testdata/triceCheck.c",
- "Line": 194
+ "Line": 250
},
"13070": {
"File": "_test/testdata/triceCheck.c",
- "Line": 194
+ "Line": 250
},
"13071": {
"File": "_test/testdata/triceCheck.c",
- "Line": 195
+ "Line": 253
},
"13072": {
"File": "_test/testdata/triceCheck.c",
- "Line": 195
+ "Line": 253
},
"13073": {
"File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 197
+ "Line": 257
},
"13074": {
"File": "_test/testdata/triceCheck.c",
- "Line": 197
+ "Line": 257
},
"13075": {
"File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 198
+ "Line": 260
},
"13076": {
"File": "_test/testdata/triceCheck.c",
- "Line": 198
+ "Line": 260
},
"13077": {
"File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 199
+ "Line": 263
},
"13078": {
"File": "_test/testdata/triceCheck.c",
- "Line": 199
+ "Line": 263
},
"13079": {
"File": "_test/testdata/triceCheck.c",
- "Line": 201
+ "Line": 266
},
"13080": {
"File": "_test/testdata/triceCheck.c",
- "Line": 202
+ "Line": 267
},
"13081": {
"File": "_test/testdata/triceCheck.c",
- "Line": 203
+ "Line": 268
},
"13082": {
"File": "_test/testdata/triceCheck.c",
- "Line": 205
+ "Line": 270
},
"13083": {
"File": "_test/testdata/triceCheck.c",
- "Line": 206
+ "Line": 271
},
"13084": {
"File": "_test/testdata/triceCheck.c",
- "Line": 207
+ "Line": 272
},
"13085": {
"File": "_test/testdata/triceCheck.c",
- "Line": 208
+ "Line": 273
},
"13086": {
"File": "_test/testdata/triceCheck.c",
- "Line": 209
+ "Line": 274
},
"13087": {
"File": "_test/testdata/triceCheck.c",
- "Line": 210
+ "Line": 275
},
"13088": {
"File": "_test/testdata/triceCheck.c",
- "Line": 211
+ "Line": 276
},
"13089": {
"File": "_test/testdata/triceCheck.c",
- "Line": 212
+ "Line": 277
},
"13090": {
"File": "_test/testdata/triceCheck.c",
- "Line": 213
+ "Line": 278
},
"13091": {
"File": "_test/testdata/triceCheck.c",
- "Line": 214
+ "Line": 279
},
"13092": {
"File": "_test/testdata/triceCheck.c",
- "Line": 216
+ "Line": 281
},
"13093": {
"File": "_test/testdata/triceCheck.c",
- "Line": 217
+ "Line": 282
},
"13094": {
"File": "_test/testdata/triceCheck.c",
- "Line": 218
+ "Line": 283
},
"13095": {
"File": "_test/testdata/triceCheck.c",
- "Line": 219
+ "Line": 284
},
"13096": {
"File": "_test/testdata/triceCheck.c",
- "Line": 220
+ "Line": 285
},
"13097": {
"File": "_test/testdata/triceCheck.c",
- "Line": 221
+ "Line": 286
},
"13098": {
"File": "_test/testdata/triceCheck.c",
- "Line": 222
+ "Line": 287
},
"13099": {
"File": "_test/testdata/triceCheck.c",
- "Line": 223
+ "Line": 288
},
"13100": {
"File": "_test/testdata/triceCheck.c",
- "Line": 224
+ "Line": 289
},
"13101": {
"File": "_test/testdata/triceCheck.c",
- "Line": 225
+ "Line": 290
},
"13102": {
"File": "_test/testdata/triceCheck.c",
- "Line": 226
+ "Line": 291
},
"13103": {
"File": "_test/testdata/triceCheck.c",
- "Line": 227
+ "Line": 292
},
"13104": {
"File": "_test/testdata/triceCheck.c",
- "Line": 228
+ "Line": 293
},
"13105": {
"File": "_test/testdata/triceCheck.c",
- "Line": 229
+ "Line": 294
},
"13106": {
"File": "_test/testdata/triceCheck.c",
- "Line": 231
+ "Line": 296
},
"13107": {
"File": "_test/testdata/triceCheck.c",
- "Line": 232
+ "Line": 297
},
"13108": {
"File": "_test/testdata/triceCheck.c",
- "Line": 233
+ "Line": 298
},
"13109": {
"File": "_test/testdata/triceCheck.c",
- "Line": 234
+ "Line": 299
},
"13110": {
"File": "_test/testdata/triceCheck.c",
- "Line": 235
+ "Line": 300
},
"13111": {
"File": "_test/testdata/triceCheck.c",
- "Line": 236
+ "Line": 301
},
"13112": {
"File": "_test/testdata/triceCheck.c",
- "Line": 237
+ "Line": 302
},
"13113": {
"File": "_test/testdata/triceCheck.c",
- "Line": 238
+ "Line": 303
},
"13114": {
"File": "_test/testdata/triceCheck.c",
- "Line": 239
+ "Line": 304
},
"13115": {
"File": "_test/testdata/triceCheck.c",
- "Line": 240
+ "Line": 305
},
"13116": {
"File": "_test/testdata/triceCheck.c",
- "Line": 241
+ "Line": 306
},
"13117": {
"File": "_test/testdata/triceCheck.c",
- "Line": 242
+ "Line": 307
},
"13118": {
"File": "_test/testdata/triceCheck.c",
- "Line": 243
+ "Line": 308
},
"13119": {
"File": "_test/testdata/triceCheck.c",
- "Line": 244
+ "Line": 309
},
"13120": {
"File": "_test/testdata/triceCheck.c",
- "Line": 246
+ "Line": 311
},
"13121": {
"File": "_test/testdata/triceCheck.c",
- "Line": 247
+ "Line": 312
},
"13122": {
"File": "_test/testdata/triceCheck.c",
- "Line": 248
+ "Line": 313
},
"13123": {
"File": "_test/testdata/triceCheck.c",
- "Line": 249
+ "Line": 314
},
"13124": {
"File": "_test/testdata/triceCheck.c",
- "Line": 250
+ "Line": 315
},
"13125": {
"File": "_test/testdata/triceCheck.c",
- "Line": 251
+ "Line": 316
},
"13126": {
"File": "_test/testdata/triceCheck.c",
- "Line": 252
+ "Line": 317
},
"13127": {
"File": "_test/testdata/triceCheck.c",
- "Line": 253
+ "Line": 318
},
"13128": {
"File": "_test/testdata/triceCheck.c",
- "Line": 254
+ "Line": 319
},
"13129": {
"File": "_test/testdata/triceCheck.c",
- "Line": 255
+ "Line": 320
},
"13130": {
"File": "_test/testdata/triceCheck.c",
- "Line": 256
+ "Line": 321
},
"13131": {
"File": "_test/testdata/triceCheck.c",
- "Line": 257
+ "Line": 322
},
"13132": {
"File": "_test/testdata/triceCheck.c",
- "Line": 258
+ "Line": 323
},
"13133": {
"File": "_test/testdata/triceCheck.c",
- "Line": 259
+ "Line": 324
},
"13134": {
"File": "_test/testdata/triceCheck.c",
- "Line": 261
+ "Line": 326
},
"13135": {
"File": "_test/testdata/triceCheck.c",
- "Line": 262
+ "Line": 327
},
"13136": {
"File": "_test/testdata/triceCheck.c",
- "Line": 263
+ "Line": 328
},
"13137": {
"File": "_test/testdata/triceCheck.c",
- "Line": 264
+ "Line": 329
},
"13138": {
"File": "_test/testdata/triceCheck.c",
- "Line": 265
+ "Line": 330
},
"13139": {
"File": "_test/testdata/triceCheck.c",
- "Line": 266
+ "Line": 331
},
"13140": {
"File": "_test/testdata/triceCheck.c",
- "Line": 267
+ "Line": 332
},
"13141": {
"File": "_test/testdata/triceCheck.c",
- "Line": 268
+ "Line": 333
},
"13142": {
"File": "_test/testdata/triceCheck.c",
- "Line": 269
+ "Line": 334
},
"13143": {
"File": "_test/testdata/triceCheck.c",
- "Line": 270
+ "Line": 335
},
"13144": {
"File": "_test/testdata/triceCheck.c",
- "Line": 271
+ "Line": 336
},
"13145": {
"File": "_test/testdata/triceCheck.c",
- "Line": 272
+ "Line": 337
},
"13146": {
"File": "_test/testdata/triceCheck.c",
- "Line": 273
+ "Line": 338
},
"13147": {
"File": "_test/testdata/triceCheck.c",
- "Line": 274
+ "Line": 339
},
"13148": {
"File": "_test/testdata/triceCheck.c",
- "Line": 275
+ "Line": 340
},
"13149": {
"File": "_test/testdata/triceCheck.c",
- "Line": 277
+ "Line": 342
},
"13150": {
"File": "_test/testdata/triceCheck.c",
- "Line": 278
+ "Line": 343
},
"13151": {
"File": "_test/testdata/triceCheck.c",
- "Line": 279
+ "Line": 344
},
"13152": {
"File": "_test/testdata/triceCheck.c",
- "Line": 280
+ "Line": 345
},
"13153": {
"File": "_test/testdata/triceCheck.c",
- "Line": 281
+ "Line": 346
},
"13154": {
"File": "_test/testdata/triceCheck.c",
- "Line": 282
+ "Line": 347
},
"13155": {
"File": "_test/testdata/triceCheck.c",
- "Line": 283
+ "Line": 348
},
"13156": {
"File": "_test/testdata/triceCheck.c",
- "Line": 284
+ "Line": 349
},
"13157": {
"File": "_test/testdata/triceCheck.c",
- "Line": 285
+ "Line": 350
},
"13158": {
"File": "_test/testdata/triceCheck.c",
- "Line": 286
+ "Line": 351
},
"13159": {
"File": "_test/testdata/triceCheck.c",
- "Line": 287
+ "Line": 352
},
"13160": {
"File": "_test/testdata/triceCheck.c",
- "Line": 288
+ "Line": 353
},
"13161": {
"File": "_test/testdata/triceCheck.c",
- "Line": 289
+ "Line": 354
},
"13162": {
"File": "_test/testdata/triceCheck.c",
- "Line": 290
+ "Line": 355
},
"13163": {
"File": "_test/testdata/triceCheck.c",
- "Line": 291
+ "Line": 356
},
"13164": {
"File": "_test/testdata/triceCheck.c",
- "Line": 293
+ "Line": 358
},
"13165": {
"File": "_test/testdata/triceCheck.c",
- "Line": 297
+ "Line": 362
},
"13166": {
"File": "_test/testdata/triceCheck.c",
- "Line": 301
+ "Line": 366
},
"13167": {
"File": "_test/testdata/triceCheck.c",
- "Line": 302
+ "Line": 367
},
"13168": {
"File": "_test/testdata/triceCheck.c",
- "Line": 304
+ "Line": 369
},
"13169": {
"File": "_test/testdata/triceCheck.c",
- "Line": 305
+ "Line": 370
},
"13170": {
"File": "_test/testdata/triceCheck.c",
- "Line": 307
+ "Line": 372
},
"13171": {
"File": "_test/testdata/triceCheck.c",
- "Line": 309
+ "Line": 374
},
"13172": {
"File": "_test/testdata/triceCheck.c",
- "Line": 311
+ "Line": 376
},
"13173": {
"File": "_test/testdata/triceCheck.c",
- "Line": 313
+ "Line": 378
},
"13174": {
"File": "_test/testdata/triceCheck.c",
- "Line": 316
+ "Line": 381
},
"13175": {
"File": "_test/testdata/triceCheck.c",
- "Line": 317
+ "Line": 382
},
"13176": {
"File": "_test/testdata/triceCheck.c",
- "Line": 318
+ "Line": 383
},
"13177": {
"File": "_test/testdata/triceCheck.c",
- "Line": 319
+ "Line": 384
},
"13178": {
"File": "_test/testdata/triceCheck.c",
- "Line": 320
+ "Line": 385
},
"13179": {
"File": "_test/testdata/triceCheck.c",
- "Line": 321
+ "Line": 386
},
"13180": {
"File": "_test/testdata/triceCheck.c",
- "Line": 322
+ "Line": 387
},
"13181": {
"File": "_test/testdata/triceCheck.c",
- "Line": 323
+ "Line": 388
},
"13182": {
"File": "_test/testdata/triceCheck.c",
- "Line": 324
+ "Line": 389
},
"13183": {
"File": "_test/testdata/triceCheck.c",
- "Line": 325
+ "Line": 390
},
"13184": {
"File": "_test/testdata/triceCheck.c",
- "Line": 326
+ "Line": 391
},
"13185": {
"File": "_test/testdata/triceCheck.c",
- "Line": 327
+ "Line": 392
},
"13186": {
"File": "_test/testdata/triceCheck.c",
- "Line": 328
+ "Line": 393
},
"13187": {
"File": "_test/testdata/triceCheck.c",
- "Line": 329
+ "Line": 394
},
"13188": {
"File": "_test/testdata/triceCheck.c",
- "Line": 330
+ "Line": 395
},
"13189": {
"File": "_test/testdata/triceCheck.c",
- "Line": 331
+ "Line": 396
},
"13190": {
"File": "_test/testdata/triceCheck.c",
- "Line": 332
+ "Line": 397
},
"13191": {
"File": "_test/testdata/triceCheck.c",
- "Line": 333
+ "Line": 398
},
"13192": {
"File": "_test/testdata/triceCheck.c",
- "Line": 334
+ "Line": 399
},
"13193": {
"File": "_test/testdata/triceCheck.c",
- "Line": 335
+ "Line": 400
},
"13194": {
"File": "_test/testdata/triceCheck.c",
- "Line": 336
+ "Line": 401
},
"13195": {
"File": "_test/testdata/triceCheck.c",
- "Line": 337
+ "Line": 402
},
"13196": {
"File": "_test/testdata/triceCheck.c",
- "Line": 338
+ "Line": 403
},
"13197": {
"File": "_test/testdata/triceCheck.c",
- "Line": 339
+ "Line": 404
},
"13198": {
"File": "_test/testdata/triceCheck.c",
- "Line": 341
+ "Line": 406
},
"13199": {
"File": "_test/testdata/triceCheck.c",
- "Line": 342
+ "Line": 407
},
"13200": {
"File": "_test/testdata/triceCheck.c",
- "Line": 343
+ "Line": 408
},
"13201": {
"File": "_test/testdata/triceCheck.c",
- "Line": 344
+ "Line": 409
},
"13202": {
"File": "_test/testdata/triceCheck.c",
- "Line": 345
+ "Line": 410
},
"13203": {
"File": "_test/testdata/triceCheck.c",
- "Line": 346
+ "Line": 411
},
"13204": {
"File": "_test/testdata/triceCheck.c",
- "Line": 347
+ "Line": 412
},
"13205": {
"File": "_test/testdata/triceCheck.c",
- "Line": 348
+ "Line": 413
},
"13206": {
"File": "_test/testdata/triceCheck.c",
- "Line": 349
+ "Line": 414
},
"13207": {
"File": "_test/testdata/triceCheck.c",
- "Line": 350
+ "Line": 415
},
"13208": {
"File": "_test/testdata/triceCheck.c",
- "Line": 351
+ "Line": 416
},
"13209": {
"File": "_test/testdata/triceCheck.c",
- "Line": 352
+ "Line": 417
},
"13210": {
"File": "_test/testdata/triceCheck.c",
- "Line": 353
+ "Line": 418
},
"13211": {
"File": "_test/testdata/triceCheck.c",
- "Line": 354
+ "Line": 419
},
"13212": {
"File": "_test/testdata/triceCheck.c",
- "Line": 355
+ "Line": 420
},
"13213": {
"File": "_test/testdata/triceCheck.c",
- "Line": 356
+ "Line": 421
},
"13214": {
"File": "_test/testdata/triceCheck.c",
- "Line": 357
+ "Line": 422
},
"13215": {
"File": "_test/testdata/triceCheck.c",
- "Line": 358
+ "Line": 423
},
"13216": {
"File": "_test/testdata/triceCheck.c",
- "Line": 359
+ "Line": 424
},
"13217": {
"File": "_test/testdata/triceCheck.c",
- "Line": 360
+ "Line": 425
},
"13218": {
"File": "_test/testdata/triceCheck.c",
- "Line": 361
+ "Line": 426
},
"13219": {
"File": "_test/testdata/triceCheck.c",
- "Line": 362
+ "Line": 427
},
"13220": {
"File": "_test/testdata/triceCheck.c",
- "Line": 363
+ "Line": 428
},
"13221": {
"File": "_test/testdata/triceCheck.c",
- "Line": 364
+ "Line": 429
},
"13222": {
"File": "_test/testdata/triceCheck.c",
- "Line": 367
+ "Line": 432
},
"13223": {
"File": "_test/testdata/triceCheck.c",
- "Line": 368
+ "Line": 433
},
"13224": {
"File": "_test/testdata/triceCheck.c",
- "Line": 369
+ "Line": 434
},
"13225": {
"File": "_test/testdata/triceCheck.c",
- "Line": 371
+ "Line": 436
},
"13226": {
"File": "_test/testdata/triceCheck.c",
- "Line": 372
+ "Line": 437
},
"13227": {
"File": "_test/testdata/triceCheck.c",
- "Line": 373
+ "Line": 438
},
"13228": {
"File": "_test/testdata/triceCheck.c",
- "Line": 375
+ "Line": 440
},
"13229": {
"File": "_test/testdata/triceCheck.c",
- "Line": 376
+ "Line": 441
},
"13230": {
"File": "_test/testdata/triceCheck.c",
- "Line": 377
+ "Line": 442
},
"13231": {
"File": "_test/testdata/triceCheck.c",
- "Line": 378
+ "Line": 443
},
"13232": {
"File": "_test/testdata/triceCheck.c",
- "Line": 379
+ "Line": 444
},
"13233": {
"File": "_test/testdata/triceCheck.c",
- "Line": 380
+ "Line": 445
},
"13234": {
"File": "_test/testdata/triceCheck.c",
- "Line": 381
+ "Line": 446
},
"13235": {
"File": "_test/testdata/triceCheck.c",
- "Line": 382
+ "Line": 447
},
"13236": {
"File": "_test/testdata/triceCheck.c",
- "Line": 383
+ "Line": 448
},
"13237": {
"File": "_test/testdata/triceCheck.c",
- "Line": 385
+ "Line": 450
},
"13238": {
"File": "_test/testdata/triceCheck.c",
- "Line": 387
+ "Line": 452
},
"13239": {
"File": "_test/testdata/triceCheck.c",
- "Line": 388
+ "Line": 453
},
"13240": {
"File": "_test/testdata/triceCheck.c",
- "Line": 389
+ "Line": 454
},
"13241": {
"File": "_test/testdata/triceCheck.c",
- "Line": 392
+ "Line": 457
},
"13242": {
"File": "_test/testdata/triceCheck.c",
- "Line": 393
+ "Line": 458
},
"13243": {
"File": "_test/testdata/triceCheck.c",
- "Line": 394
+ "Line": 459
},
"13244": {
"File": "_test/testdata/triceCheck.c",
- "Line": 396
+ "Line": 461
},
"13245": {
"File": "_test/testdata/triceCheck.c",
- "Line": 397
+ "Line": 462
},
"13246": {
"File": "_test/testdata/triceCheck.c",
- "Line": 398
+ "Line": 463
},
"13247": {
"File": "_test/testdata/triceCheck.c",
- "Line": 399
+ "Line": 464
},
"13248": {
"File": "_test/testdata/triceCheck.c",
- "Line": 400
+ "Line": 465
},
"13249": {
"File": "_test/testdata/triceCheck.c",
- "Line": 401
+ "Line": 466
},
"13250": {
"File": "_test/testdata/triceCheck.c",
- "Line": 402
+ "Line": 467
},
"13251": {
"File": "_test/testdata/triceCheck.c",
- "Line": 403
+ "Line": 468
},
"13252": {
"File": "_test/testdata/triceCheck.c",
- "Line": 404
+ "Line": 469
},
"13253": {
"File": "_test/testdata/triceCheck.c",
- "Line": 405
+ "Line": 470
},
"13254": {
"File": "_test/testdata/triceCheck.c",
- "Line": 406
+ "Line": 471
},
"13255": {
"File": "_test/testdata/triceCheck.c",
- "Line": 407
+ "Line": 472
},
"13256": {
"File": "_test/testdata/triceCheck.c",
- "Line": 408
+ "Line": 473
},
"13257": {
"File": "_test/testdata/triceCheck.c",
- "Line": 409
+ "Line": 474
},
"13258": {
"File": "_test/testdata/triceCheck.c",
- "Line": 411
+ "Line": 476
},
"13259": {
"File": "_test/testdata/triceCheck.c",
- "Line": 412
+ "Line": 477
},
"13260": {
"File": "_test/testdata/triceCheck.c",
- "Line": 413
+ "Line": 478
},
"13261": {
"File": "_test/testdata/triceCheck.c",
- "Line": 414
+ "Line": 479
},
"13262": {
"File": "_test/testdata/triceCheck.c",
- "Line": 415
+ "Line": 480
},
"13263": {
"File": "_test/testdata/triceCheck.c",
- "Line": 416
+ "Line": 481
},
"13264": {
"File": "_test/testdata/triceCheck.c",
- "Line": 417
+ "Line": 482
},
"13265": {
"File": "_test/testdata/triceCheck.c",
- "Line": 418
+ "Line": 483
},
"13266": {
"File": "_test/testdata/triceCheck.c",
- "Line": 419
+ "Line": 484
},
"13267": {
"File": "_test/testdata/triceCheck.c",
- "Line": 420
+ "Line": 485
},
"13268": {
"File": "_test/testdata/triceCheck.c",
- "Line": 421
+ "Line": 486
},
"13269": {
"File": "_test/testdata/triceCheck.c",
- "Line": 422
+ "Line": 487
},
"13270": {
"File": "_test/testdata/triceCheck.c",
- "Line": 423
+ "Line": 488
},
"13271": {
"File": "_test/testdata/triceCheck.c",
- "Line": 425
+ "Line": 490
},
"13272": {
"File": "_test/testdata/triceCheck.c",
- "Line": 426
+ "Line": 491
},
"13273": {
"File": "_test/testdata/triceCheck.c",
- "Line": 427
+ "Line": 492
},
"13274": {
"File": "_test/testdata/triceCheck.c",
- "Line": 428
+ "Line": 493
},
"13275": {
"File": "_test/testdata/triceCheck.c",
- "Line": 429
+ "Line": 494
},
"13276": {
"File": "_test/testdata/triceCheck.c",
- "Line": 430
+ "Line": 495
},
"13277": {
"File": "_test/testdata/triceCheck.c",
- "Line": 431
+ "Line": 496
},
"13278": {
"File": "_test/testdata/triceCheck.c",
- "Line": 432
+ "Line": 497
},
"13279": {
"File": "_test/testdata/triceCheck.c",
- "Line": 433
+ "Line": 498
},
"13280": {
"File": "_test/testdata/triceCheck.c",
- "Line": 434
+ "Line": 499
},
"13281": {
"File": "_test/testdata/triceCheck.c",
- "Line": 435
+ "Line": 500
},
"13282": {
"File": "_test/testdata/triceCheck.c",
- "Line": 436
+ "Line": 501
},
"13283": {
"File": "_test/testdata/triceCheck.c",
- "Line": 437
+ "Line": 502
},
"13284": {
"File": "_test/testdata/triceCheck.c",
- "Line": 438
+ "Line": 503
},
"13285": {
"File": "_test/testdata/triceCheck.c",
- "Line": 439
+ "Line": 504
},
"13286": {
"File": "_test/testdata/triceCheck.c",
- "Line": 440
+ "Line": 505
},
"13287": {
"File": "_test/testdata/triceCheck.c",
- "Line": 441
+ "Line": 506
},
"13288": {
"File": "_test/testdata/triceCheck.c",
- "Line": 442
+ "Line": 507
},
"13289": {
"File": "_test/testdata/triceCheck.c",
- "Line": 443
+ "Line": 508
},
"13290": {
"File": "_test/testdata/triceCheck.c",
- "Line": 444
+ "Line": 509
},
"13291": {
"File": "_test/testdata/triceCheck.c",
- "Line": 445
+ "Line": 510
},
"13292": {
"File": "_test/testdata/triceCheck.c",
- "Line": 446
+ "Line": 511
},
"13293": {
"File": "_test/testdata/triceCheck.c",
- "Line": 447
+ "Line": 512
},
"13294": {
"File": "_test/testdata/triceCheck.c",
- "Line": 448
+ "Line": 513
},
"13295": {
"File": "_test/testdata/triceCheck.c",
- "Line": 449
+ "Line": 514
},
"13296": {
"File": "_test/testdata/triceCheck.c",
- "Line": 499
+ "Line": 516
},
"13297": {
"File": "_test/testdata/triceCheck.c",
- "Line": 500
+ "Line": 517
},
"13298": {
"File": "_test/testdata/triceCheck.c",
- "Line": 501
+ "Line": 518
},
"13299": {
"File": "_test/testdata/triceCheck.c",
- "Line": 502
+ "Line": 519
},
"13300": {
"File": "_test/testdata/triceCheck.c",
- "Line": 503
+ "Line": 520
},
"13301": {
"File": "_test/testdata/triceCheck.c",
- "Line": 504
+ "Line": 521
},
"13302": {
"File": "_test/testdata/triceCheck.c",
- "Line": 505
+ "Line": 522
},
"13303": {
"File": "_test/testdata/triceCheck.c",
- "Line": 506
+ "Line": 523
},
"13304": {
"File": "_test/testdata/triceCheck.c",
- "Line": 507
+ "Line": 524
},
"13305": {
"File": "_test/testdata/triceCheck.c",
- "Line": 508
+ "Line": 525
},
"13306": {
"File": "_test/testdata/triceCheck.c",
- "Line": 509
+ "Line": 526
},
"13307": {
"File": "_test/testdata/triceCheck.c",
- "Line": 510
+ "Line": 527
},
"13308": {
"File": "_test/testdata/triceCheck.c",
- "Line": 511
+ "Line": 528
},
"13309": {
"File": "_test/testdata/triceCheck.c",
- "Line": 512
+ "Line": 529
},
"13310": {
"File": "_test/testdata/triceCheck.c",
- "Line": 513
+ "Line": 530
},
"13311": {
"File": "_test/testdata/triceCheck.c",
- "Line": 514
+ "Line": 531
},
"13312": {
"File": "_test/testdata/triceCheck.c",
- "Line": 516
+ "Line": 532
},
"13313": {
"File": "_test/testdata/triceCheck.c",
- "Line": 517
+ "Line": 533
},
"13314": {
"File": "_test/testdata/triceCheck.c",
- "Line": 518
+ "Line": 534
},
"13315": {
"File": "_test/testdata/triceCheck.c",
- "Line": 519
+ "Line": 535
},
"13316": {
"File": "_test/testdata/triceCheck.c",
- "Line": 520
+ "Line": 536
},
"13317": {
"File": "_test/testdata/triceCheck.c",
- "Line": 521
+ "Line": 537
},
"13318": {
"File": "_test/testdata/triceCheck.c",
- "Line": 522
+ "Line": 538
},
"13319": {
"File": "_test/testdata/triceCheck.c",
- "Line": 523
+ "Line": 539
},
"13320": {
"File": "_test/testdata/triceCheck.c",
- "Line": 524
+ "Line": 540
},
"13321": {
"File": "_test/testdata/triceCheck.c",
- "Line": 525
+ "Line": 541
},
"13322": {
"File": "_test/testdata/triceCheck.c",
- "Line": 526
+ "Line": 542
},
"13323": {
"File": "_test/testdata/triceCheck.c",
- "Line": 527
+ "Line": 543
},
"13324": {
"File": "_test/testdata/triceCheck.c",
- "Line": 528
+ "Line": 544
},
"13325": {
"File": "_test/testdata/triceCheck.c",
- "Line": 529
+ "Line": 545
},
"13326": {
"File": "_test/testdata/triceCheck.c",
- "Line": 530
+ "Line": 546
},
"13327": {
"File": "_test/testdata/triceCheck.c",
- "Line": 531
+ "Line": 547
},
"13328": {
"File": "_test/testdata/triceCheck.c",
- "Line": 532
+ "Line": 548
},
"13329": {
"File": "_test/testdata/triceCheck.c",
- "Line": 533
+ "Line": 549
},
"13330": {
"File": "_test/testdata/triceCheck.c",
- "Line": 535
+ "Line": 550
},
"13331": {
"File": "_test/testdata/triceCheck.c",
- "Line": 538
+ "Line": 551
},
"13332": {
"File": "_test/testdata/triceCheck.c",
- "Line": 546
+ "Line": 552
},
"13333": {
"File": "_test/testdata/triceCheck.c",
- "Line": 550
+ "Line": 553
},
"13334": {
"File": "_test/testdata/triceCheck.c",
- "Line": 552
+ "Line": 554
},
"13335": {
"File": "_test/testdata/triceCheck.c",
- "Line": 553
+ "Line": 555
},
"13336": {
"File": "_test/testdata/triceCheck.c",
- "Line": 554
+ "Line": 556
},
"13337": {
"File": "_test/testdata/triceCheck.c",
- "Line": 555
+ "Line": 557
},
"13338": {
"File": "_test/testdata/triceCheck.c",
- "Line": 556
+ "Line": 558
},
"13339": {
"File": "_test/testdata/triceCheck.c",
- "Line": 557
+ "Line": 559
},
"13340": {
"File": "_test/testdata/triceCheck.c",
- "Line": 558
+ "Line": 560
},
"13341": {
"File": "_test/testdata/triceCheck.c",
- "Line": 559
+ "Line": 561
},
"13342": {
"File": "_test/testdata/triceCheck.c",
- "Line": 560
+ "Line": 564
},
"13343": {
"File": "_test/testdata/triceCheck.c",
- "Line": 561
+ "Line": 565
},
"13344": {
"File": "_test/testdata/triceCheck.c",
- "Line": 562
+ "Line": 566
},
"13345": {
"File": "_test/testdata/triceCheck.c",
- "Line": 564
+ "Line": 567
},
"13346": {
"File": "_test/testdata/triceCheck.c",
- "Line": 566
+ "Line": 568
},
"13347": {
"File": "_test/testdata/triceCheck.c",
- "Line": 567
+ "Line": 569
},
"13348": {
"File": "_test/testdata/triceCheck.c",
- "Line": 568
+ "Line": 570
},
"13349": {
"File": "_test/testdata/triceCheck.c",
- "Line": 569
+ "Line": 571
},
"13350": {
"File": "_test/testdata/triceCheck.c",
- "Line": 570
+ "Line": 572
},
"13351": {
"File": "_test/testdata/triceCheck.c",
- "Line": 572
+ "Line": 573
},
"13352": {
"File": "_test/testdata/triceCheck.c",
- "Line": 573
+ "Line": 574
},
"13353": {
"File": "_test/testdata/triceCheck.c",
@@ -1462,7 +1433,7 @@
},
"13358": {
"File": "_test/testdata/triceCheck.c",
- "Line": 580
+ "Line": 581
},
"13359": {
"File": "_test/testdata/triceCheck.c",
@@ -1518,19 +1489,19 @@
},
"13372": {
"File": "_test/testdata/triceCheck.c",
- "Line": 596
+ "Line": 595
},
"13373": {
"File": "_test/testdata/triceCheck.c",
- "Line": 597
+ "Line": 596
},
"13374": {
"File": "_test/testdata/triceCheck.c",
- "Line": 598
+ "Line": 597
},
"13375": {
"File": "_test/testdata/triceCheck.c",
- "Line": 599
+ "Line": 598
},
"13376": {
"File": "_test/testdata/triceCheck.c",
@@ -1538,1271 +1509,1271 @@
},
"13377": {
"File": "_test/testdata/triceCheck.c",
- "Line": 601
+ "Line": 603
},
"13378": {
"File": "_test/testdata/triceCheck.c",
- "Line": 602
+ "Line": 611
},
"13379": {
"File": "_test/testdata/triceCheck.c",
- "Line": 604
+ "Line": 615
},
"13380": {
"File": "_test/testdata/triceCheck.c",
- "Line": 608
+ "Line": 617
},
"13381": {
"File": "_test/testdata/triceCheck.c",
- "Line": 609
+ "Line": 618
},
"13382": {
"File": "_test/testdata/triceCheck.c",
- "Line": 610
+ "Line": 619
},
"13383": {
"File": "_test/testdata/triceCheck.c",
- "Line": 612
+ "Line": 620
},
"13384": {
"File": "_test/testdata/triceCheck.c",
- "Line": 613
+ "Line": 621
},
"13385": {
"File": "_test/testdata/triceCheck.c",
- "Line": 614
+ "Line": 622
},
"13386": {
"File": "_test/testdata/triceCheck.c",
- "Line": 616
+ "Line": 623
},
"13387": {
"File": "_test/testdata/triceCheck.c",
- "Line": 618
+ "Line": 624
},
"13388": {
"File": "_test/testdata/triceCheck.c",
- "Line": 624
+ "Line": 625
},
"13389": {
"File": "_test/testdata/triceCheck.c",
- "Line": 625
+ "Line": 626
},
"13390": {
"File": "_test/testdata/triceCheck.c",
- "Line": 634
+ "Line": 627
},
"13391": {
"File": "_test/testdata/triceCheck.c",
- "Line": 635
+ "Line": 629
},
"13392": {
"File": "_test/testdata/triceCheck.c",
- "Line": 648
+ "Line": 631
},
"13393": {
"File": "_test/testdata/triceCheck.c",
- "Line": 649
+ "Line": 632
},
"13394": {
"File": "_test/testdata/triceCheck.c",
- "Line": 665
+ "Line": 633
},
"13395": {
"File": "_test/testdata/triceCheck.c",
- "Line": 666
+ "Line": 582
},
"13396": {
"File": "_test/testdata/triceCheck.c",
- "Line": 690
+ "Line": 583
},
"13397": {
"File": "_test/testdata/triceCheck.c",
- "Line": 691
+ "Line": 637
},
"13398": {
"File": "_test/testdata/triceCheck.c",
- "Line": 697
+ "Line": 638
},
"13399": {
"File": "_test/testdata/triceCheck.c",
- "Line": 698
+ "Line": 640
},
"13400": {
"File": "_test/testdata/triceCheck.c",
- "Line": 699
+ "Line": 641
},
"13401": {
"File": "_test/testdata/triceCheck.c",
- "Line": 700
+ "Line": 642
},
"13402": {
"File": "_test/testdata/triceCheck.c",
- "Line": 701
+ "Line": 643
},
"13403": {
"File": "_test/testdata/triceCheck.c",
- "Line": 702
+ "Line": 644
},
"13404": {
"File": "_test/testdata/triceCheck.c",
- "Line": 704
+ "Line": 645
},
"13405": {
"File": "_test/testdata/triceCheck.c",
- "Line": 705
+ "Line": 647
},
"13406": {
"File": "_test/testdata/triceCheck.c",
- "Line": 706
+ "Line": 648
},
"13407": {
"File": "_test/testdata/triceCheck.c",
- "Line": 707
+ "Line": 649
},
"13408": {
"File": "_test/testdata/triceCheck.c",
- "Line": 708
+ "Line": 650
},
"13409": {
"File": "_test/testdata/triceCheck.c",
- "Line": 709
+ "Line": 651
},
"13410": {
"File": "_test/testdata/triceCheck.c",
- "Line": 711
+ "Line": 652
},
"13411": {
"File": "_test/testdata/triceCheck.c",
- "Line": 712
+ "Line": 653
},
"13412": {
"File": "_test/testdata/triceCheck.c",
- "Line": 713
+ "Line": 654
},
"13413": {
"File": "_test/testdata/triceCheck.c",
- "Line": 714
+ "Line": 655
},
"13414": {
"File": "_test/testdata/triceCheck.c",
- "Line": 715
+ "Line": 656
},
"13415": {
"File": "_test/testdata/triceCheck.c",
- "Line": 716
+ "Line": 657
},
"13416": {
"File": "_test/testdata/triceCheck.c",
- "Line": 717
+ "Line": 658
},
"13417": {
"File": "_test/testdata/triceCheck.c",
- "Line": 718
+ "Line": 659
},
"13418": {
"File": "_test/testdata/triceCheck.c",
- "Line": 719
+ "Line": 661
},
"13419": {
"File": "_test/testdata/triceCheck.c",
- "Line": 720
+ "Line": 662
},
"13420": {
"File": "_test/testdata/triceCheck.c",
- "Line": 721
+ "Line": 663
},
"13421": {
"File": "_test/testdata/triceCheck.c",
- "Line": 722
+ "Line": 664
},
"13422": {
"File": "_test/testdata/triceCheck.c",
- "Line": 723
+ "Line": 665
},
"13423": {
"File": "_test/testdata/triceCheck.c",
- "Line": 725
+ "Line": 666
},
"13424": {
"File": "_test/testdata/triceCheck.c",
- "Line": 726
+ "Line": 667
},
"13425": {
"File": "_test/testdata/triceCheck.c",
- "Line": 727
+ "Line": 669
},
"13426": {
"File": "_test/testdata/triceCheck.c",
- "Line": 728
+ "Line": 673
},
"13427": {
"File": "_test/testdata/triceCheck.c",
- "Line": 729
+ "Line": 674
},
"13428": {
"File": "_test/testdata/triceCheck.c",
- "Line": 730
+ "Line": 675
},
"13429": {
"File": "_test/testdata/triceCheck.c",
- "Line": 731
+ "Line": 677
},
"13430": {
"File": "_test/testdata/triceCheck.c",
- "Line": 732
+ "Line": 678
},
"13431": {
"File": "_test/testdata/triceCheck.c",
- "Line": 733
+ "Line": 679
},
"13432": {
"File": "_test/testdata/triceCheck.c",
- "Line": 734
+ "Line": 681
},
"13433": {
"File": "_test/testdata/triceCheck.c",
- "Line": 735
+ "Line": 683
},
"13434": {
"File": "_test/testdata/triceCheck.c",
- "Line": 736
+ "Line": 689
},
"13435": {
"File": "_test/testdata/triceCheck.c",
- "Line": 737
+ "Line": 690
},
"13436": {
"File": "_test/testdata/triceCheck.c",
- "Line": 738
+ "Line": 699
},
"13437": {
"File": "_test/testdata/triceCheck.c",
- "Line": 739
+ "Line": 700
},
"13438": {
"File": "_test/testdata/triceCheck.c",
- "Line": 741
+ "Line": 713
},
"13439": {
"File": "_test/testdata/triceCheck.c",
- "Line": 742
+ "Line": 714
},
"13440": {
"File": "_test/testdata/triceCheck.c",
- "Line": 743
+ "Line": 730
},
"13441": {
"File": "_test/testdata/triceCheck.c",
- "Line": 744
+ "Line": 731
},
"13442": {
"File": "_test/testdata/triceCheck.c",
- "Line": 745
+ "Line": 755
},
"13443": {
"File": "_test/testdata/triceCheck.c",
- "Line": 746
+ "Line": 756
},
"13444": {
"File": "_test/testdata/triceCheck.c",
- "Line": 747
+ "Line": 762
},
"13445": {
"File": "_test/testdata/triceCheck.c",
- "Line": 748
+ "Line": 763
},
"13446": {
"File": "_test/testdata/triceCheck.c",
- "Line": 749
+ "Line": 764
},
"13447": {
"File": "_test/testdata/triceCheck.c",
- "Line": 750
+ "Line": 765
},
"13448": {
"File": "_test/testdata/triceCheck.c",
- "Line": 751
+ "Line": 766
},
"13449": {
"File": "_test/testdata/triceCheck.c",
- "Line": 752
+ "Line": 767
},
"13450": {
"File": "_test/testdata/triceCheck.c",
- "Line": 753
+ "Line": 769
},
"13451": {
"File": "_test/testdata/triceCheck.c",
- "Line": 754
+ "Line": 770
},
"13452": {
"File": "_test/testdata/triceCheck.c",
- "Line": 755
+ "Line": 771
},
"13453": {
"File": "_test/testdata/triceCheck.c",
- "Line": 757
+ "Line": 772
},
"13454": {
"File": "_test/testdata/triceCheck.c",
- "Line": 758
+ "Line": 773
},
"13455": {
"File": "_test/testdata/triceCheck.c",
- "Line": 759
+ "Line": 774
},
"13456": {
"File": "_test/testdata/triceCheck.c",
- "Line": 760
+ "Line": 776
},
"13457": {
"File": "_test/testdata/triceCheck.c",
- "Line": 761
+ "Line": 777
},
"13458": {
"File": "_test/testdata/triceCheck.c",
- "Line": 762
+ "Line": 778
},
"13459": {
"File": "_test/testdata/triceCheck.c",
- "Line": 763
+ "Line": 779
},
"13460": {
"File": "_test/testdata/triceCheck.c",
- "Line": 764
+ "Line": 780
},
"13461": {
"File": "_test/testdata/triceCheck.c",
- "Line": 765
+ "Line": 781
},
"13462": {
"File": "_test/testdata/triceCheck.c",
- "Line": 766
+ "Line": 782
},
"13463": {
"File": "_test/testdata/triceCheck.c",
- "Line": 767
+ "Line": 783
},
"13464": {
"File": "_test/testdata/triceCheck.c",
- "Line": 768
+ "Line": 784
},
"13465": {
"File": "_test/testdata/triceCheck.c",
- "Line": 769
+ "Line": 785
},
"13466": {
"File": "_test/testdata/triceCheck.c",
- "Line": 770
+ "Line": 786
},
"13467": {
"File": "_test/testdata/triceCheck.c",
- "Line": 771
+ "Line": 787
},
"13468": {
"File": "_test/testdata/triceCheck.c",
- "Line": 772
+ "Line": 788
},
"13469": {
"File": "_test/testdata/triceCheck.c",
- "Line": 773
+ "Line": 790
},
"13470": {
"File": "_test/testdata/triceCheck.c",
- "Line": 774
+ "Line": 791
},
"13471": {
"File": "_test/testdata/triceCheck.c",
- "Line": 775
+ "Line": 792
},
"13472": {
"File": "_test/testdata/triceCheck.c",
- "Line": 776
+ "Line": 793
},
"13473": {
"File": "_test/testdata/triceCheck.c",
- "Line": 777
+ "Line": 794
},
"13474": {
"File": "_test/testdata/triceCheck.c",
- "Line": 778
+ "Line": 795
},
"13475": {
"File": "_test/testdata/triceCheck.c",
- "Line": 779
+ "Line": 796
},
"13476": {
"File": "_test/testdata/triceCheck.c",
- "Line": 780
+ "Line": 797
},
"13477": {
"File": "_test/testdata/triceCheck.c",
- "Line": 781
+ "Line": 798
},
"13478": {
"File": "_test/testdata/triceCheck.c",
- "Line": 782
+ "Line": 799
},
"13479": {
"File": "_test/testdata/triceCheck.c",
- "Line": 783
+ "Line": 800
},
"13480": {
"File": "_test/testdata/triceCheck.c",
- "Line": 784
+ "Line": 801
},
"13481": {
"File": "_test/testdata/triceCheck.c",
- "Line": 785
+ "Line": 802
},
"13482": {
"File": "_test/testdata/triceCheck.c",
- "Line": 786
+ "Line": 803
},
"13483": {
"File": "_test/testdata/triceCheck.c",
- "Line": 787
+ "Line": 804
},
"13484": {
"File": "_test/testdata/triceCheck.c",
- "Line": 788
+ "Line": 806
},
"13485": {
"File": "_test/testdata/triceCheck.c",
- "Line": 789
+ "Line": 807
},
"13486": {
"File": "_test/testdata/triceCheck.c",
- "Line": 790
+ "Line": 808
},
"13487": {
"File": "_test/testdata/triceCheck.c",
- "Line": 791
+ "Line": 809
},
"13488": {
"File": "_test/testdata/triceCheck.c",
- "Line": 792
+ "Line": 810
},
"13489": {
"File": "_test/testdata/triceCheck.c",
- "Line": 794
+ "Line": 811
},
"13490": {
"File": "_test/testdata/triceCheck.c",
- "Line": 795
+ "Line": 812
},
"13491": {
"File": "_test/testdata/triceCheck.c",
- "Line": 796
+ "Line": 813
},
"13492": {
"File": "_test/testdata/triceCheck.c",
- "Line": 797
+ "Line": 814
},
"13493": {
"File": "_test/testdata/triceCheck.c",
- "Line": 798
+ "Line": 815
},
"13494": {
"File": "_test/testdata/triceCheck.c",
- "Line": 799
+ "Line": 816
},
"13495": {
"File": "_test/testdata/triceCheck.c",
- "Line": 800
+ "Line": 817
},
"13496": {
"File": "_test/testdata/triceCheck.c",
- "Line": 801
+ "Line": 818
},
"13497": {
"File": "_test/testdata/triceCheck.c",
- "Line": 802
+ "Line": 819
},
"13498": {
"File": "_test/testdata/triceCheck.c",
- "Line": 804
+ "Line": 820
},
"13499": {
"File": "_test/testdata/triceCheck.c",
- "Line": 805
+ "Line": 822
},
"13500": {
"File": "_test/testdata/triceCheck.c",
- "Line": 806
+ "Line": 823
},
"13501": {
"File": "_test/testdata/triceCheck.c",
- "Line": 807
+ "Line": 824
},
"13502": {
"File": "_test/testdata/triceCheck.c",
- "Line": 808
+ "Line": 825
},
"13503": {
"File": "_test/testdata/triceCheck.c",
- "Line": 809
+ "Line": 826
},
"13504": {
"File": "_test/testdata/triceCheck.c",
- "Line": 811
+ "Line": 827
},
"13505": {
"File": "_test/testdata/triceCheck.c",
- "Line": 812
+ "Line": 828
},
"13506": {
"File": "_test/testdata/triceCheck.c",
- "Line": 813
+ "Line": 829
},
"13507": {
"File": "_test/testdata/triceCheck.c",
- "Line": 814
+ "Line": 830
},
"13508": {
"File": "_test/testdata/triceCheck.c",
- "Line": 815
+ "Line": 831
},
"13509": {
"File": "_test/testdata/triceCheck.c",
- "Line": 816
+ "Line": 832
},
"13510": {
"File": "_test/testdata/triceCheck.c",
- "Line": 817
+ "Line": 833
},
"13511": {
"File": "_test/testdata/triceCheck.c",
- "Line": 818
+ "Line": 834
},
"13512": {
"File": "_test/testdata/triceCheck.c",
- "Line": 819
+ "Line": 835
},
"13513": {
"File": "_test/testdata/triceCheck.c",
- "Line": 820
+ "Line": 836
},
"13514": {
"File": "_test/testdata/triceCheck.c",
- "Line": 821
+ "Line": 837
},
"13515": {
"File": "_test/testdata/triceCheck.c",
- "Line": 822
+ "Line": 838
},
"13516": {
"File": "_test/testdata/triceCheck.c",
- "Line": 824
+ "Line": 839
},
"13517": {
"File": "_test/testdata/triceCheck.c",
- "Line": 825
+ "Line": 840
},
"13518": {
"File": "_test/testdata/triceCheck.c",
- "Line": 826
+ "Line": 841
},
"13519": {
"File": "_test/testdata/triceCheck.c",
- "Line": 827
+ "Line": 842
},
"13520": {
"File": "_test/testdata/triceCheck.c",
- "Line": 828
+ "Line": 843
},
"13521": {
"File": "_test/testdata/triceCheck.c",
- "Line": 829
+ "Line": 844
},
"13522": {
"File": "_test/testdata/triceCheck.c",
- "Line": 830
+ "Line": 845
},
"13523": {
"File": "_test/testdata/triceCheck.c",
- "Line": 831
+ "Line": 846
},
"13524": {
"File": "_test/testdata/triceCheck.c",
- "Line": 832
+ "Line": 847
},
"13525": {
"File": "_test/testdata/triceCheck.c",
- "Line": 833
+ "Line": 848
},
"13526": {
"File": "_test/testdata/triceCheck.c",
- "Line": 834
+ "Line": 849
},
"13527": {
"File": "_test/testdata/triceCheck.c",
- "Line": 835
+ "Line": 850
},
"13528": {
"File": "_test/testdata/triceCheck.c",
- "Line": 837
+ "Line": 851
},
"13529": {
"File": "_test/testdata/triceCheck.c",
- "Line": 838
+ "Line": 852
},
"13530": {
"File": "_test/testdata/triceCheck.c",
- "Line": 839
+ "Line": 853
},
"13531": {
"File": "_test/testdata/triceCheck.c",
- "Line": 840
+ "Line": 854
},
"13532": {
"File": "_test/testdata/triceCheck.c",
- "Line": 841
+ "Line": 855
},
"13533": {
"File": "_test/testdata/triceCheck.c",
- "Line": 842
+ "Line": 856
},
"13534": {
"File": "_test/testdata/triceCheck.c",
- "Line": 843
+ "Line": 857
},
"13535": {
"File": "_test/testdata/triceCheck.c",
- "Line": 844
+ "Line": 859
},
"13536": {
"File": "_test/testdata/triceCheck.c",
- "Line": 845
+ "Line": 860
},
"13537": {
"File": "_test/testdata/triceCheck.c",
- "Line": 846
+ "Line": 861
},
"13538": {
"File": "_test/testdata/triceCheck.c",
- "Line": 847
+ "Line": 862
},
"13539": {
"File": "_test/testdata/triceCheck.c",
- "Line": 848
+ "Line": 863
},
"13540": {
"File": "_test/testdata/triceCheck.c",
- "Line": 850
+ "Line": 864
},
"13541": {
"File": "_test/testdata/triceCheck.c",
- "Line": 851
+ "Line": 865
},
"13542": {
"File": "_test/testdata/triceCheck.c",
- "Line": 852
+ "Line": 866
},
"13543": {
"File": "_test/testdata/triceCheck.c",
- "Line": 853
+ "Line": 867
},
"13544": {
"File": "_test/testdata/triceCheck.c",
- "Line": 854
+ "Line": 869
},
"13545": {
"File": "_test/testdata/triceCheck.c",
- "Line": 855
+ "Line": 870
},
"13546": {
"File": "_test/testdata/triceCheck.c",
- "Line": 856
+ "Line": 871
},
"13547": {
"File": "_test/testdata/triceCheck.c",
- "Line": 857
+ "Line": 872
},
"13548": {
"File": "_test/testdata/triceCheck.c",
- "Line": 858
+ "Line": 873
},
"13549": {
"File": "_test/testdata/triceCheck.c",
- "Line": 859
+ "Line": 874
},
"13550": {
"File": "_test/testdata/triceCheck.c",
- "Line": 860
+ "Line": 876
},
"13551": {
"File": "_test/testdata/triceCheck.c",
- "Line": 861
+ "Line": 877
},
"13552": {
"File": "_test/testdata/triceCheck.c",
- "Line": 865
+ "Line": 878
},
"13553": {
"File": "_test/testdata/triceCheck.c",
- "Line": 866
+ "Line": 879
},
"13554": {
"File": "_test/testdata/triceCheck.c",
- "Line": 867
+ "Line": 880
},
"13555": {
"File": "_test/testdata/triceCheck.c",
- "Line": 868
+ "Line": 881
},
"13556": {
"File": "_test/testdata/triceCheck.c",
- "Line": 869
+ "Line": 882
},
"13557": {
"File": "_test/testdata/triceCheck.c",
- "Line": 870
+ "Line": 883
},
"13558": {
"File": "_test/testdata/triceCheck.c",
- "Line": 871
+ "Line": 884
},
"13559": {
"File": "_test/testdata/triceCheck.c",
- "Line": 872
+ "Line": 885
},
"13560": {
"File": "_test/testdata/triceCheck.c",
- "Line": 873
+ "Line": 886
},
"13561": {
"File": "_test/testdata/triceCheck.c",
- "Line": 874
+ "Line": 887
},
"13562": {
"File": "_test/testdata/triceCheck.c",
- "Line": 875
+ "Line": 889
},
"13563": {
"File": "_test/testdata/triceCheck.c",
- "Line": 876
+ "Line": 890
},
"13564": {
"File": "_test/testdata/triceCheck.c",
- "Line": 878
+ "Line": 891
},
"13565": {
"File": "_test/testdata/triceCheck.c",
- "Line": 879
+ "Line": 892
},
"13566": {
"File": "_test/testdata/triceCheck.c",
- "Line": 880
+ "Line": 893
},
"13567": {
"File": "_test/testdata/triceCheck.c",
- "Line": 881
+ "Line": 894
},
"13568": {
"File": "_test/testdata/triceCheck.c",
- "Line": 882
+ "Line": 895
},
"13569": {
"File": "_test/testdata/triceCheck.c",
- "Line": 883
+ "Line": 896
},
"13570": {
"File": "_test/testdata/triceCheck.c",
- "Line": 884
+ "Line": 897
},
"13571": {
"File": "_test/testdata/triceCheck.c",
- "Line": 885
+ "Line": 898
},
"13572": {
"File": "_test/testdata/triceCheck.c",
- "Line": 886
+ "Line": 899
},
"13573": {
"File": "_test/testdata/triceCheck.c",
- "Line": 887
+ "Line": 900
},
"13574": {
"File": "_test/testdata/triceCheck.c",
- "Line": 888
+ "Line": 902
},
"13575": {
"File": "_test/testdata/triceCheck.c",
- "Line": 889
+ "Line": 903
},
"13576": {
"File": "_test/testdata/triceCheck.c",
- "Line": 891
+ "Line": 904
},
"13577": {
"File": "_test/testdata/triceCheck.c",
- "Line": 892
+ "Line": 905
},
"13578": {
"File": "_test/testdata/triceCheck.c",
- "Line": 893
+ "Line": 906
},
"13579": {
"File": "_test/testdata/triceCheck.c",
- "Line": 894
+ "Line": 907
},
"13580": {
"File": "_test/testdata/triceCheck.c",
- "Line": 895
+ "Line": 908
},
"13581": {
"File": "_test/testdata/triceCheck.c",
- "Line": 896
+ "Line": 909
},
"13582": {
"File": "_test/testdata/triceCheck.c",
- "Line": 897
+ "Line": 910
},
"13583": {
"File": "_test/testdata/triceCheck.c",
- "Line": 898
+ "Line": 911
},
"13584": {
"File": "_test/testdata/triceCheck.c",
- "Line": 899
+ "Line": 912
},
"13585": {
"File": "_test/testdata/triceCheck.c",
- "Line": 900
+ "Line": 913
},
"13586": {
"File": "_test/testdata/triceCheck.c",
- "Line": 901
+ "Line": 915
},
"13587": {
"File": "_test/testdata/triceCheck.c",
- "Line": 902
+ "Line": 916
},
"13588": {
"File": "_test/testdata/triceCheck.c",
- "Line": 904
+ "Line": 917
},
"13589": {
"File": "_test/testdata/triceCheck.c",
- "Line": 905
+ "Line": 918
},
"13590": {
"File": "_test/testdata/triceCheck.c",
- "Line": 906
+ "Line": 919
},
"13591": {
"File": "_test/testdata/triceCheck.c",
- "Line": 907
+ "Line": 920
},
"13592": {
"File": "_test/testdata/triceCheck.c",
- "Line": 908
+ "Line": 921
},
"13593": {
"File": "_test/testdata/triceCheck.c",
- "Line": 909
+ "Line": 922
},
"13594": {
"File": "_test/testdata/triceCheck.c",
- "Line": 910
+ "Line": 923
},
"13595": {
"File": "_test/testdata/triceCheck.c",
- "Line": 911
+ "Line": 924
},
"13596": {
"File": "_test/testdata/triceCheck.c",
- "Line": 912
+ "Line": 925
},
"13597": {
"File": "_test/testdata/triceCheck.c",
- "Line": 913
+ "Line": 926
},
"13598": {
"File": "_test/testdata/triceCheck.c",
- "Line": 914
+ "Line": 930
},
"13599": {
"File": "_test/testdata/triceCheck.c",
- "Line": 915
+ "Line": 931
},
"13600": {
"File": "_test/testdata/triceCheck.c",
- "Line": 917
+ "Line": 932
},
"13601": {
"File": "_test/testdata/triceCheck.c",
- "Line": 918
+ "Line": 933
},
"13602": {
"File": "_test/testdata/triceCheck.c",
- "Line": 919
+ "Line": 934
},
"13603": {
"File": "_test/testdata/triceCheck.c",
- "Line": 920
+ "Line": 935
},
"13604": {
"File": "_test/testdata/triceCheck.c",
- "Line": 921
+ "Line": 936
},
"13605": {
"File": "_test/testdata/triceCheck.c",
- "Line": 922
+ "Line": 937
},
"13606": {
"File": "_test/testdata/triceCheck.c",
- "Line": 923
+ "Line": 938
},
"13607": {
"File": "_test/testdata/triceCheck.c",
- "Line": 924
+ "Line": 939
},
"13608": {
"File": "_test/testdata/triceCheck.c",
- "Line": 925
+ "Line": 940
},
"13609": {
"File": "_test/testdata/triceCheck.c",
- "Line": 926
+ "Line": 941
},
"13610": {
"File": "_test/testdata/triceCheck.c",
- "Line": 927
+ "Line": 943
},
"13611": {
"File": "_test/testdata/triceCheck.c",
- "Line": 928
+ "Line": 944
},
"13612": {
"File": "_test/testdata/triceCheck.c",
- "Line": 930
+ "Line": 945
},
"13613": {
"File": "_test/testdata/triceCheck.c",
- "Line": 931
+ "Line": 946
},
"13614": {
"File": "_test/testdata/triceCheck.c",
- "Line": 932
+ "Line": 947
},
"13615": {
"File": "_test/testdata/triceCheck.c",
- "Line": 933
+ "Line": 948
},
"13616": {
"File": "_test/testdata/triceCheck.c",
- "Line": 934
+ "Line": 949
},
"13617": {
"File": "_test/testdata/triceCheck.c",
- "Line": 935
+ "Line": 950
},
"13618": {
"File": "_test/testdata/triceCheck.c",
- "Line": 936
+ "Line": 951
},
"13619": {
"File": "_test/testdata/triceCheck.c",
- "Line": 937
+ "Line": 952
},
"13620": {
"File": "_test/testdata/triceCheck.c",
- "Line": 938
+ "Line": 953
},
"13621": {
"File": "_test/testdata/triceCheck.c",
- "Line": 939
+ "Line": 954
},
"13622": {
"File": "_test/testdata/triceCheck.c",
- "Line": 940
+ "Line": 956
},
"13623": {
"File": "_test/testdata/triceCheck.c",
- "Line": 941
+ "Line": 957
},
"13624": {
"File": "_test/testdata/triceCheck.c",
- "Line": 943
+ "Line": 958
},
"13625": {
"File": "_test/testdata/triceCheck.c",
- "Line": 944
+ "Line": 959
},
"13626": {
"File": "_test/testdata/triceCheck.c",
- "Line": 945
+ "Line": 960
},
"13627": {
"File": "_test/testdata/triceCheck.c",
- "Line": 946
+ "Line": 961
},
"13628": {
"File": "_test/testdata/triceCheck.c",
- "Line": 947
+ "Line": 962
},
"13629": {
"File": "_test/testdata/triceCheck.c",
- "Line": 948
+ "Line": 963
},
"13630": {
"File": "_test/testdata/triceCheck.c",
- "Line": 949
+ "Line": 964
},
"13631": {
"File": "_test/testdata/triceCheck.c",
- "Line": 950
+ "Line": 965
},
"13632": {
"File": "_test/testdata/triceCheck.c",
- "Line": 951
+ "Line": 966
},
"13633": {
"File": "_test/testdata/triceCheck.c",
- "Line": 952
+ "Line": 967
},
"13634": {
"File": "_test/testdata/triceCheck.c",
- "Line": 953
+ "Line": 969
},
"13635": {
"File": "_test/testdata/triceCheck.c",
- "Line": 954
+ "Line": 970
},
"13636": {
"File": "_test/testdata/triceCheck.c",
- "Line": 956
+ "Line": 971
},
"13637": {
"File": "_test/testdata/triceCheck.c",
- "Line": 957
+ "Line": 972
},
"13638": {
"File": "_test/testdata/triceCheck.c",
- "Line": 958
+ "Line": 973
},
"13639": {
"File": "_test/testdata/triceCheck.c",
- "Line": 959
+ "Line": 974
},
"13640": {
"File": "_test/testdata/triceCheck.c",
- "Line": 960
+ "Line": 975
},
"13641": {
"File": "_test/testdata/triceCheck.c",
- "Line": 961
+ "Line": 976
},
"13642": {
"File": "_test/testdata/triceCheck.c",
- "Line": 962
+ "Line": 977
},
"13643": {
"File": "_test/testdata/triceCheck.c",
- "Line": 963
+ "Line": 978
},
"13644": {
"File": "_test/testdata/triceCheck.c",
- "Line": 964
+ "Line": 979
},
"13645": {
"File": "_test/testdata/triceCheck.c",
- "Line": 965
+ "Line": 980
},
"13646": {
"File": "_test/testdata/triceCheck.c",
- "Line": 966
+ "Line": 982
},
"13647": {
"File": "_test/testdata/triceCheck.c",
- "Line": 967
+ "Line": 983
},
"13648": {
"File": "_test/testdata/triceCheck.c",
- "Line": 970
+ "Line": 984
},
"13649": {
"File": "_test/testdata/triceCheck.c",
- "Line": 971
+ "Line": 985
},
"13650": {
"File": "_test/testdata/triceCheck.c",
- "Line": 972
+ "Line": 986
},
"13651": {
"File": "_test/testdata/triceCheck.c",
- "Line": 973
+ "Line": 987
},
"13652": {
"File": "_test/testdata/triceCheck.c",
- "Line": 974
+ "Line": 988
},
"13653": {
"File": "_test/testdata/triceCheck.c",
- "Line": 975
+ "Line": 989
},
"13654": {
"File": "_test/testdata/triceCheck.c",
- "Line": 978
+ "Line": 990
},
"13655": {
"File": "_test/testdata/triceCheck.c",
- "Line": 979
+ "Line": 991
},
"13656": {
"File": "_test/testdata/triceCheck.c",
- "Line": 980
+ "Line": 992
},
"13657": {
"File": "_test/testdata/triceCheck.c",
- "Line": 981
+ "Line": 993
},
"13658": {
"File": "_test/testdata/triceCheck.c",
- "Line": 982
+ "Line": 995
},
"13659": {
"File": "_test/testdata/triceCheck.c",
- "Line": 983
+ "Line": 996
},
"13660": {
"File": "_test/testdata/triceCheck.c",
- "Line": 986
+ "Line": 997
},
"13661": {
"File": "_test/testdata/triceCheck.c",
- "Line": 987
+ "Line": 998
},
"13662": {
"File": "_test/testdata/triceCheck.c",
- "Line": 988
+ "Line": 999
},
"13663": {
"File": "_test/testdata/triceCheck.c",
- "Line": 989
+ "Line": 1000
},
"13664": {
"File": "_test/testdata/triceCheck.c",
- "Line": 990
+ "Line": 1001
},
"13665": {
"File": "_test/testdata/triceCheck.c",
- "Line": 991
+ "Line": 1002
},
"13666": {
"File": "_test/testdata/triceCheck.c",
- "Line": 994
+ "Line": 1003
},
"13667": {
"File": "_test/testdata/triceCheck.c",
- "Line": 995
+ "Line": 1004
},
"13668": {
"File": "_test/testdata/triceCheck.c",
- "Line": 996
+ "Line": 1005
},
"13669": {
"File": "_test/testdata/triceCheck.c",
- "Line": 997
+ "Line": 1006
},
"13670": {
"File": "_test/testdata/triceCheck.c",
- "Line": 998
+ "Line": 1008
},
"13671": {
"File": "_test/testdata/triceCheck.c",
- "Line": 999
+ "Line": 1009
},
"13672": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1002
+ "Line": 1010
},
"13673": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1003
+ "Line": 1011
},
"13674": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1004
+ "Line": 1012
},
"13675": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1005
+ "Line": 1013
},
"13676": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1008
+ "Line": 1014
},
"13677": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1009
+ "Line": 1015
},
"13678": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1012
+ "Line": 1016
},
"13679": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1013
+ "Line": 1017
},
"13680": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1014
+ "Line": 1018
},
"13681": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1015
+ "Line": 1019
},
"13682": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1018
+ "Line": 1021
},
"13683": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1019
+ "Line": 1022
},
"13684": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1020
+ "Line": 1023
},
"13685": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1021
+ "Line": 1024
},
"13686": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1024
+ "Line": 1025
},
"13687": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1025
+ "Line": 1026
},
"13688": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1026
+ "Line": 1027
},
"13689": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1027
+ "Line": 1028
},
"13690": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1031
+ "Line": 1029
},
"13691": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1032
+ "Line": 1030
},
"13692": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1033
+ "Line": 1031
},
"13693": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1034
+ "Line": 1032
},
"13694": {
"File": "_test/testdata/triceCheck.c",
@@ -2830,7199 +2801,6962 @@
},
"13700": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1041
+ "Line": 1043
},
"13701": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1042
+ "Line": 1044
},
"13702": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1043
+ "Line": 1045
},
"13703": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1044
+ "Line": 1046
},
"13704": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1045
+ "Line": 1047
},
"13705": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1046
+ "Line": 1048
},
"13706": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1047
+ "Line": 1051
},
"13707": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1048
+ "Line": 1052
},
"13708": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1049
+ "Line": 1053
},
"13709": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1050
+ "Line": 1054
},
"13710": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1051
+ "Line": 1055
},
"13711": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1052
+ "Line": 1056
},
"13712": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1053
+ "Line": 1059
},
"13713": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1054
+ "Line": 1060
},
"13714": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1055
+ "Line": 1061
},
"13715": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1056
+ "Line": 1062
},
"13716": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1057
+ "Line": 1063
},
"13717": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1058
+ "Line": 1064
},
"13718": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1059
+ "Line": 1067
},
"13719": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1060
+ "Line": 1068
},
"13720": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1061
+ "Line": 1069
},
"13721": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1062
+ "Line": 1070
},
"13722": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1063
+ "Line": 1073
},
"13723": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1064
+ "Line": 1074
},
"13724": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1065
+ "Line": 1077
},
"13725": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1066
+ "Line": 1078
},
"13726": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1067
+ "Line": 1079
},
"13727": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1068
+ "Line": 1080
},
"13728": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1069
+ "Line": 1083
},
"13729": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1070
+ "Line": 1084
},
"13730": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1071
+ "Line": 1085
},
"13731": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1072
+ "Line": 1086
},
"13732": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1073
+ "Line": 1089
},
"13733": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1074
+ "Line": 1090
},
"13734": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1075
+ "Line": 1091
},
"13735": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1076
+ "Line": 1092
},
"13736": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1077
+ "Line": 1096
},
"13737": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1078
+ "Line": 1097
},
"13738": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1079
+ "Line": 1098
},
"13739": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1080
+ "Line": 1099
},
"13740": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1082
+ "Line": 1100
},
"13741": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1083
+ "Line": 1101
},
"13742": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1084
+ "Line": 1102
},
"13743": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1085
+ "Line": 1103
},
"13744": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1086
+ "Line": 1104
},
"13745": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1087
+ "Line": 1105
},
"13746": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1088
+ "Line": 1106
},
"13747": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1089
+ "Line": 1107
},
"13748": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1090
+ "Line": 1108
},
"13749": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1091
+ "Line": 1109
},
"13750": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1092
+ "Line": 1110
},
"13751": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1093
+ "Line": 1111
},
"13752": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1094
+ "Line": 1112
},
"13753": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1095
+ "Line": 1113
},
"13754": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1096
+ "Line": 1114
},
"13755": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1097
+ "Line": 1115
},
"13756": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1098
+ "Line": 1116
},
"13757": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1099
+ "Line": 1117
},
"13758": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1100
+ "Line": 1118
},
"13759": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1101
+ "Line": 1119
},
"13760": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1102
+ "Line": 1120
},
"13761": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1103
+ "Line": 1121
},
"13762": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1104
+ "Line": 1122
},
"13763": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1105
+ "Line": 1123
},
"13764": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1106
+ "Line": 1124
},
"13765": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1107
+ "Line": 1125
},
"13766": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1108
+ "Line": 1126
},
"13767": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1109
+ "Line": 1127
},
"13768": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1110
+ "Line": 1128
},
"13769": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1111
+ "Line": 1129
},
"13770": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1112
+ "Line": 1130
},
"13771": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1113
+ "Line": 1131
},
"13772": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1114
+ "Line": 1132
},
"13773": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1115
+ "Line": 1133
},
"13774": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1116
+ "Line": 1134
},
"13775": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1117
+ "Line": 1135
},
"13776": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1118
+ "Line": 1136
},
"13777": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1119
+ "Line": 1137
},
"13778": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1120
+ "Line": 1138
},
"13779": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1121
+ "Line": 1139
},
"13780": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1122
+ "Line": 1140
},
"13781": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1123
+ "Line": 1141
},
"13782": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1124
+ "Line": 1142
},
"13783": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1125
+ "Line": 1143
},
"13784": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1126
+ "Line": 1144
},
"13785": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1127
+ "Line": 1145
},
"13786": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1128
+ "Line": 1147
},
"13787": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1129
+ "Line": 1148
},
"13788": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1130
+ "Line": 1149
},
"13789": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1131
+ "Line": 1150
},
"13790": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1133
+ "Line": 1151
},
"13791": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1134
+ "Line": 1152
},
"13792": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1135
+ "Line": 1153
},
"13793": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1136
+ "Line": 1154
},
"13794": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1137
+ "Line": 1155
},
"13795": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1138
+ "Line": 1156
},
"13796": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1139
+ "Line": 1157
},
"13797": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1140
+ "Line": 1158
},
"13798": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1141
+ "Line": 1159
},
"13799": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1142
+ "Line": 1160
},
"13800": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1143
+ "Line": 1161
},
"13801": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1144
+ "Line": 1162
},
"13802": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1145
+ "Line": 1163
},
"13803": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1146
+ "Line": 1164
},
"13804": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1147
+ "Line": 1165
},
"13805": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1148
+ "Line": 1166
},
"13806": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1149
+ "Line": 1167
},
"13807": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1150
+ "Line": 1168
},
"13808": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1151
+ "Line": 1169
},
"13809": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1152
+ "Line": 1170
},
"13810": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1153
+ "Line": 1171
},
"13811": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1154
+ "Line": 1172
},
"13812": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1155
+ "Line": 1173
},
"13813": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1156
+ "Line": 1174
},
"13814": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1157
+ "Line": 1175
},
"13815": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1158
+ "Line": 1176
},
"13816": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1159
+ "Line": 1177
},
"13817": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1160
+ "Line": 1178
},
"13818": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1161
+ "Line": 1179
},
"13819": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1162
+ "Line": 1180
},
"13820": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1163
+ "Line": 1181
},
"13821": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1164
+ "Line": 1182
},
"13822": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1165
+ "Line": 1183
},
"13823": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1166
+ "Line": 1184
},
"13824": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1167
+ "Line": 1185
},
"13825": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1168
+ "Line": 1186
},
"13826": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1169
+ "Line": 1187
},
"13827": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1170
+ "Line": 1188
},
"13828": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1171
+ "Line": 1189
},
"13829": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1172
+ "Line": 1190
},
"13830": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1173
+ "Line": 1191
},
"13831": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1174
+ "Line": 1192
},
"13832": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1175
+ "Line": 1193
},
"13833": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1176
+ "Line": 1194
},
"13834": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1177
+ "Line": 1195
},
"13835": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1178
+ "Line": 1196
},
"13836": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1179
+ "Line": 1198
},
"13837": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1180
+ "Line": 1199
},
"13838": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1181
+ "Line": 1200
},
"13839": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1182
+ "Line": 1201
},
"13840": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1184
+ "Line": 1202
},
"13841": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1185
+ "Line": 1203
},
"13842": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1186
+ "Line": 1204
},
"13843": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1187
+ "Line": 1205
},
"13844": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1188
+ "Line": 1206
},
"13845": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1189
+ "Line": 1207
},
"13846": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1190
+ "Line": 1208
},
"13847": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1191
+ "Line": 1209
},
"13848": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1192
+ "Line": 1210
},
"13849": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1193
+ "Line": 1211
},
"13850": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1194
+ "Line": 1212
},
"13851": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1195
+ "Line": 1213
},
"13852": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1196
+ "Line": 1214
},
"13853": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1197
+ "Line": 1215
},
"13854": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1198
+ "Line": 1216
},
"13855": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1199
+ "Line": 1217
},
"13856": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1200
+ "Line": 1218
},
"13857": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1201
+ "Line": 1219
},
"13858": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1202
+ "Line": 1220
},
"13859": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1203
+ "Line": 1221
},
"13860": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1204
+ "Line": 1222
},
"13861": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1205
+ "Line": 1223
},
"13862": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1206
+ "Line": 1224
},
"13863": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1207
+ "Line": 1225
},
"13864": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1208
+ "Line": 1226
},
"13865": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1209
+ "Line": 1227
},
"13866": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1210
+ "Line": 1228
},
"13867": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1211
+ "Line": 1229
},
"13868": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1212
+ "Line": 1230
},
"13869": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1213
+ "Line": 1231
},
"13870": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1214
+ "Line": 1232
},
"13871": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1215
+ "Line": 1233
},
"13872": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1216
+ "Line": 1234
},
"13873": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1217
+ "Line": 1235
},
"13874": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1218
+ "Line": 1236
},
"13875": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1219
+ "Line": 1237
},
"13876": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1220
+ "Line": 1238
},
"13877": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1221
+ "Line": 1239
},
"13878": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1222
+ "Line": 1240
},
"13879": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1223
+ "Line": 1241
},
"13880": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1224
+ "Line": 1242
},
"13881": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1225
+ "Line": 1243
},
"13882": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1226
+ "Line": 1244
},
"13883": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1227
+ "Line": 1245
},
"13884": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1228
+ "Line": 1246
},
"13885": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1229
+ "Line": 1247
},
"13886": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1230
+ "Line": 1249
},
"13887": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1231
+ "Line": 1250
},
"13888": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1232
+ "Line": 1251
},
"13889": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1233
+ "Line": 1252
},
"13890": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1235
+ "Line": 1253
},
"13891": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1236
+ "Line": 1254
},
"13892": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1237
+ "Line": 1255
},
"13893": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1238
+ "Line": 1256
},
"13894": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1239
+ "Line": 1257
},
"13895": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1240
+ "Line": 1258
},
"13896": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1241
+ "Line": 1259
},
"13897": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1242
+ "Line": 1260
},
"13898": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1243
+ "Line": 1261
},
"13899": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1244
+ "Line": 1262
},
"13900": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1245
+ "Line": 1263
},
"13901": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1246
+ "Line": 1264
},
"13902": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1247
+ "Line": 1265
},
"13903": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1248
+ "Line": 1266
},
"13904": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1249
+ "Line": 1267
},
"13905": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1250
+ "Line": 1268
},
"13906": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1251
+ "Line": 1269
},
"13907": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1252
+ "Line": 1270
},
"13908": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1253
+ "Line": 1271
},
"13909": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1254
+ "Line": 1272
},
"13910": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1255
+ "Line": 1273
},
"13911": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1256
+ "Line": 1274
},
"13912": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1257
+ "Line": 1275
},
"13913": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1258
+ "Line": 1276
},
"13914": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1259
+ "Line": 1277
},
"13915": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1260
+ "Line": 1278
},
"13916": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1261
+ "Line": 1279
},
"13917": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1262
+ "Line": 1280
},
"13918": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1263
+ "Line": 1281
},
"13919": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1264
+ "Line": 1282
},
"13920": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1265
+ "Line": 1283
},
"13921": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1266
+ "Line": 1284
},
"13922": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1267
+ "Line": 1285
},
"13923": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1268
+ "Line": 1286
},
"13924": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1269
+ "Line": 1287
},
"13925": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1270
+ "Line": 1288
},
"13926": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1271
+ "Line": 1289
},
"13927": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1272
+ "Line": 1290
},
"13928": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1273
+ "Line": 1291
},
"13929": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1274
+ "Line": 1292
},
"13930": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1275
+ "Line": 1293
},
"13931": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1276
+ "Line": 1294
},
"13932": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1277
+ "Line": 1295
},
"13933": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1278
+ "Line": 1296
},
"13934": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1279
+ "Line": 1297
},
"13935": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1280
+ "Line": 1298
},
"13936": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1281
+ "Line": 1300
},
"13937": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1282
+ "Line": 1301
},
"13938": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1283
+ "Line": 1302
},
"13939": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1284
+ "Line": 1303
},
"13940": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1286
+ "Line": 1304
},
"13941": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1287
+ "Line": 1305
},
"13942": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1288
+ "Line": 1306
},
"13943": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1289
+ "Line": 1307
},
"13944": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1290
+ "Line": 1308
},
"13945": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1291
+ "Line": 1309
},
"13946": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1292
+ "Line": 1310
},
"13947": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1293
+ "Line": 1311
},
"13948": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1294
+ "Line": 1312
},
"13949": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1295
+ "Line": 1313
},
"13950": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1296
+ "Line": 1314
},
"13951": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1297
+ "Line": 1315
},
"13952": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1298
+ "Line": 1316
},
"13953": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1299
+ "Line": 1317
},
"13954": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1300
+ "Line": 1318
},
"13955": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1301
+ "Line": 1319
},
"13956": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1302
+ "Line": 1320
},
"13957": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1303
+ "Line": 1321
},
"13958": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1304
+ "Line": 1322
},
"13959": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1305
+ "Line": 1323
},
"13960": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1306
+ "Line": 1324
},
"13961": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1307
+ "Line": 1325
},
"13962": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1308
+ "Line": 1326
},
"13963": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1309
+ "Line": 1327
},
"13964": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1310
+ "Line": 1328
},
"13965": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1311
+ "Line": 1329
},
"13966": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1312
+ "Line": 1330
},
"13967": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1313
+ "Line": 1331
},
"13968": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1314
+ "Line": 1332
},
"13969": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1315
+ "Line": 1333
},
"13970": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1316
+ "Line": 1334
},
"13971": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1317
+ "Line": 1335
},
"13972": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1318
+ "Line": 1336
},
"13973": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1319
+ "Line": 1337
},
"13974": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1320
+ "Line": 1338
},
"13975": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1321
+ "Line": 1339
},
"13976": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1322
+ "Line": 1340
},
"13977": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1323
+ "Line": 1341
},
"13978": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1324
+ "Line": 1342
},
"13979": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1325
+ "Line": 1343
},
"13980": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1326
+ "Line": 1344
},
"13981": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1327
+ "Line": 1345
},
"13982": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1328
+ "Line": 1346
},
"13983": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1329
+ "Line": 1347
},
"13984": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1330
+ "Line": 1348
},
"13985": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1331
+ "Line": 1349
},
"13986": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1332
+ "Line": 1351
},
"13987": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1333
+ "Line": 1352
},
"13988": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1334
+ "Line": 1353
},
"13989": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1335
+ "Line": 1354
},
"13990": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1339
+ "Line": 1355
},
"13991": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1341
+ "Line": 1356
},
"13992": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1342
+ "Line": 1357
},
"13993": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1343
+ "Line": 1358
},
"13994": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1344
+ "Line": 1359
},
"13995": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1345
+ "Line": 1360
},
"13996": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1346
+ "Line": 1361
},
"13997": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1347
+ "Line": 1362
},
"13998": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1348
+ "Line": 1363
},
"13999": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1349
+ "Line": 1364
},
"14000": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1350
+ "Line": 1365
},
"14001": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1351
+ "Line": 1366
},
"14002": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1352
+ "Line": 1367
},
"14003": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1353
+ "Line": 1368
},
"14004": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1354
+ "Line": 1369
},
"14005": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1355
+ "Line": 1370
},
"14006": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1356
+ "Line": 1371
},
"14007": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1357
+ "Line": 1372
},
"14008": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1358
+ "Line": 1373
},
"14009": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1359
+ "Line": 1374
},
"14010": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1360
+ "Line": 1375
},
"14011": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1361
+ "Line": 1376
},
"14012": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1362
+ "Line": 1377
},
"14013": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1363
+ "Line": 1378
},
"14014": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1364
+ "Line": 1379
},
"14015": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1365
+ "Line": 1380
},
"14016": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1366
+ "Line": 1381
},
"14017": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1367
+ "Line": 1382
},
"14018": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1368
+ "Line": 1383
},
"14019": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1369
+ "Line": 1384
},
"14020": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1370
+ "Line": 1385
},
"14021": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1371
+ "Line": 1386
},
"14022": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1372
+ "Line": 1387
},
"14023": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1373
+ "Line": 1388
},
"14024": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1374
+ "Line": 1389
},
"14025": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1375
+ "Line": 1390
},
"14026": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1376
+ "Line": 1391
},
"14027": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1377
+ "Line": 1392
},
"14028": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1380
+ "Line": 1393
},
"14029": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1381
+ "Line": 1394
},
"14030": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1382
+ "Line": 1395
},
"14031": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1383
+ "Line": 1396
},
"14032": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1384
+ "Line": 1397
},
"14033": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1385
+ "Line": 1398
},
"14034": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1386
+ "Line": 1399
},
"14035": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1387
+ "Line": 1400
},
"14036": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1388
+ "Line": 1404
},
"14037": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1389
+ "Line": 1406
},
"14038": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1390
+ "Line": 1407
},
"14039": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1391
+ "Line": 1408
},
"14040": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1392
+ "Line": 1409
},
"14041": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1393
+ "Line": 1410
},
"14042": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1394
+ "Line": 1411
},
"14043": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1395
+ "Line": 1412
},
"14044": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1396
+ "Line": 1413
},
"14045": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1397
+ "Line": 1414
},
"14046": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1398
+ "Line": 1415
},
"14047": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1399
+ "Line": 1416
},
"14048": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1400
+ "Line": 1417
},
"14049": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1401
+ "Line": 1418
},
"14050": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1402
+ "Line": 1419
},
"14051": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1403
+ "Line": 1420
},
"14052": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1404
+ "Line": 1421
},
"14053": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1405
+ "Line": 1422
},
"14054": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1406
+ "Line": 1423
},
"14055": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1407
+ "Line": 1424
},
"14056": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1408
+ "Line": 1425
},
"14057": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1409
+ "Line": 1426
},
"14058": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1410
+ "Line": 1427
},
"14059": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1411
+ "Line": 1428
},
"14060": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1412
+ "Line": 1429
},
"14061": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1413
+ "Line": 1430
},
"14062": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1414
+ "Line": 1431
},
"14063": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1415
+ "Line": 1432
},
"14064": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1416
+ "Line": 1433
},
"14065": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1419
+ "Line": 1434
},
"14066": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1420
+ "Line": 1435
},
"14067": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1421
+ "Line": 1436
},
"14068": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1422
+ "Line": 1437
},
"14069": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1423
+ "Line": 1438
},
"14070": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1424
+ "Line": 1439
},
"14071": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1425
+ "Line": 1440
},
"14072": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1426
+ "Line": 1441
},
"14073": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1427
+ "Line": 1442
},
"14074": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1428
+ "Line": 1445
},
"14075": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1429
+ "Line": 1446
},
"14076": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1430
+ "Line": 1447
},
"14077": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1431
+ "Line": 1448
},
"14078": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1432
+ "Line": 1449
},
"14079": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1433
+ "Line": 1450
},
"14080": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1434
+ "Line": 1451
},
"14081": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1435
+ "Line": 1452
},
"14082": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1436
+ "Line": 1453
},
"14083": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1437
+ "Line": 1454
},
"14084": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1438
+ "Line": 1455
},
"14085": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1439
+ "Line": 1456
},
"14086": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1440
+ "Line": 1457
},
"14087": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1441
+ "Line": 1458
},
"14088": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1442
+ "Line": 1459
},
"14089": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1443
+ "Line": 1460
},
"14090": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1444
+ "Line": 1461
},
"14091": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1445
+ "Line": 1462
},
"14092": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1446
+ "Line": 1463
},
"14093": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1447
+ "Line": 1464
},
"14094": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1448
+ "Line": 1465
},
"14095": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1449
+ "Line": 1466
},
"14096": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1450
+ "Line": 1467
},
"14097": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1451
+ "Line": 1468
},
"14098": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1452
+ "Line": 1469
},
"14099": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1453
+ "Line": 1470
},
"14100": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1454
+ "Line": 1471
},
"14101": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1455
+ "Line": 1472
},
"14102": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1457
+ "Line": 1473
},
"14103": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1458
+ "Line": 1474
},
"14104": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1459
+ "Line": 1475
},
"14105": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1460
+ "Line": 1476
},
"14106": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1461
+ "Line": 1477
},
"14107": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1462
+ "Line": 1478
},
"14108": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1463
+ "Line": 1479
},
"14109": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1464
+ "Line": 1480
},
"14110": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1465
+ "Line": 1481
},
"14111": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1466
+ "Line": 1484
},
"14112": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1467
+ "Line": 1485
},
"14113": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1468
+ "Line": 1486
},
"14114": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1469
+ "Line": 1487
},
"14115": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1470
+ "Line": 1488
},
"14116": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1471
+ "Line": 1489
},
"14117": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1472
+ "Line": 1490
},
"14118": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1473
+ "Line": 1491
},
"14119": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1474
+ "Line": 1492
},
"14120": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1475
+ "Line": 1493
},
"14121": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1476
+ "Line": 1494
},
"14122": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1477
+ "Line": 1495
},
"14123": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1478
+ "Line": 1496
},
"14124": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1479
+ "Line": 1497
},
"14125": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1480
+ "Line": 1498
},
"14126": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1481
+ "Line": 1499
},
"14127": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1482
+ "Line": 1500
},
"14128": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1483
+ "Line": 1501
},
"14129": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1484
+ "Line": 1502
},
"14130": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1485
+ "Line": 1503
},
"14131": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1486
+ "Line": 1504
},
"14132": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1487
+ "Line": 1505
},
"14133": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1488
+ "Line": 1506
},
"14134": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1489
+ "Line": 1507
},
"14135": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1490
+ "Line": 1508
},
"14136": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1491
+ "Line": 1509
},
"14137": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1492
+ "Line": 1510
},
"14138": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1493
+ "Line": 1511
},
"14139": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1495
+ "Line": 1512
},
"14140": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1496
+ "Line": 1513
},
"14141": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1497
+ "Line": 1514
},
"14142": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1498
+ "Line": 1515
},
"14143": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1499
+ "Line": 1516
},
"14144": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1500
+ "Line": 1517
},
"14145": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1501
+ "Line": 1518
},
"14146": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1502
+ "Line": 1519
},
"14147": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1503
+ "Line": 1520
},
"14148": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1504
+ "Line": 1522
},
"14149": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1505
+ "Line": 1523
},
"14150": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1506
+ "Line": 1524
},
"14151": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1507
+ "Line": 1525
},
"14152": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1508
+ "Line": 1526
},
"14153": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1509
+ "Line": 1527
},
"14154": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1510
+ "Line": 1528
},
"14155": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1511
+ "Line": 1529
},
"14156": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1512
+ "Line": 1530
},
"14157": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1513
+ "Line": 1531
},
"14158": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1514
+ "Line": 1532
},
"14159": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1515
+ "Line": 1533
},
"14160": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1516
+ "Line": 1534
},
"14161": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1517
+ "Line": 1535
},
"14162": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1518
+ "Line": 1536
},
"14163": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1519
+ "Line": 1537
},
"14164": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1520
+ "Line": 1538
},
"14165": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1521
+ "Line": 1539
},
"14166": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1522
+ "Line": 1540
},
"14167": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1523
+ "Line": 1541
},
"14168": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1524
+ "Line": 1542
},
"14169": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1525
+ "Line": 1543
},
"14170": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1526
+ "Line": 1544
},
"14171": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1527
+ "Line": 1545
},
"14172": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1528
+ "Line": 1546
},
"14173": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1529
+ "Line": 1547
},
"14174": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1530
+ "Line": 1548
},
"14175": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1531
+ "Line": 1549
},
"14176": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1533
+ "Line": 1550
},
"14177": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1534
+ "Line": 1551
},
"14178": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1535
+ "Line": 1552
},
"14179": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1536
+ "Line": 1553
},
"14180": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1537
+ "Line": 1554
},
"14181": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1538
+ "Line": 1555
},
"14182": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1539
+ "Line": 1556
},
"14183": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1540
+ "Line": 1557
},
"14184": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1541
+ "Line": 1558
},
"14185": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1542
+ "Line": 1560
},
"14186": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1543
+ "Line": 1561
},
"14187": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1544
+ "Line": 1562
},
"14188": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1545
+ "Line": 1563
},
"14189": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1546
+ "Line": 1564
},
"14190": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1547
+ "Line": 1565
},
"14191": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1548
+ "Line": 1566
},
"14192": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1549
+ "Line": 1567
},
"14193": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1550
+ "Line": 1568
},
"14194": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1551
+ "Line": 1569
},
"14195": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1552
+ "Line": 1570
},
"14196": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1553
+ "Line": 1571
},
"14197": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1554
+ "Line": 1572
},
"14198": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1555
+ "Line": 1573
},
"14199": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1556
+ "Line": 1574
},
"14200": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1557
+ "Line": 1575
},
"14201": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1558
+ "Line": 1576
},
"14202": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1559
+ "Line": 1577
},
"14203": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1560
+ "Line": 1578
},
"14204": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1561
+ "Line": 1579
},
"14205": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1562
+ "Line": 1580
},
"14206": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1563
+ "Line": 1581
},
"14207": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1564
+ "Line": 1582
},
"14208": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1565
+ "Line": 1583
},
"14209": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1566
+ "Line": 1584
},
"14210": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1567
+ "Line": 1585
},
"14211": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1568
+ "Line": 1586
},
"14212": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1569
+ "Line": 1587
},
"14213": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1571
+ "Line": 1588
},
"14214": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1572
+ "Line": 1589
},
"14215": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1573
+ "Line": 1590
},
"14216": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1574
+ "Line": 1591
},
"14217": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1575
+ "Line": 1592
},
"14218": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1576
+ "Line": 1593
},
"14219": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1577
+ "Line": 1594
},
"14220": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1578
+ "Line": 1595
},
"14221": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1579
+ "Line": 1596
},
"14222": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1580
+ "Line": 1598
},
"14223": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1581
+ "Line": 1599
},
"14224": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1582
+ "Line": 1600
},
"14225": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1583
+ "Line": 1601
},
"14226": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1584
+ "Line": 1602
},
"14227": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1585
+ "Line": 1603
},
"14228": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1586
+ "Line": 1604
},
"14229": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1587
+ "Line": 1605
},
"14230": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1588
+ "Line": 1606
},
"14231": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1589
+ "Line": 1607
},
"14232": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1590
+ "Line": 1608
},
"14233": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1591
+ "Line": 1609
},
"14234": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1592
+ "Line": 1610
},
"14235": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1593
+ "Line": 1611
},
"14236": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1594
+ "Line": 1612
},
"14237": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1595
+ "Line": 1613
},
"14238": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1596
+ "Line": 1614
},
"14239": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1597
+ "Line": 1615
},
"14240": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1598
+ "Line": 1616
},
"14241": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1599
+ "Line": 1617
},
"14242": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1600
+ "Line": 1618
},
"14243": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1601
+ "Line": 1619
},
"14244": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1602
+ "Line": 1620
},
"14245": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1603
+ "Line": 1621
},
"14246": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1604
+ "Line": 1622
},
"14247": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1605
+ "Line": 1623
},
"14248": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1606
+ "Line": 1624
},
"14249": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1607
+ "Line": 1625
},
"14250": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1609
+ "Line": 1626
},
"14251": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1610
+ "Line": 1627
},
"14252": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1611
+ "Line": 1628
},
"14253": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1612
+ "Line": 1629
},
"14254": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1613
+ "Line": 1630
},
"14255": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1614
+ "Line": 1631
},
"14256": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1615
+ "Line": 1632
},
"14257": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1616
+ "Line": 1633
},
"14258": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1617
+ "Line": 1634
},
"14259": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1618
+ "Line": 1636
},
"14260": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1619
+ "Line": 1637
},
"14261": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1620
+ "Line": 1638
},
"14262": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1621
+ "Line": 1639
},
"14263": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1622
+ "Line": 1640
},
"14264": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1623
+ "Line": 1641
},
"14265": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1624
+ "Line": 1642
},
"14266": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1625
+ "Line": 1643
},
"14267": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1626
+ "Line": 1644
},
"14268": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1627
+ "Line": 1645
},
"14269": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1628
+ "Line": 1646
},
"14270": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1629
+ "Line": 1647
},
"14271": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1630
+ "Line": 1648
},
"14272": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1631
+ "Line": 1649
},
"14273": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1632
+ "Line": 1650
},
"14274": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1633
+ "Line": 1651
},
"14275": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1634
+ "Line": 1652
},
"14276": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1635
+ "Line": 1653
},
"14277": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1636
+ "Line": 1654
},
"14278": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1637
+ "Line": 1655
},
"14279": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1638
+ "Line": 1656
},
"14280": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1639
+ "Line": 1657
},
"14281": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1640
+ "Line": 1658
},
"14282": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1641
+ "Line": 1659
},
"14283": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1642
+ "Line": 1660
},
"14284": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1643
+ "Line": 1661
},
"14285": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1644
+ "Line": 1662
},
"14286": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1645
+ "Line": 1663
},
"14287": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1647
+ "Line": 1664
},
"14288": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1648
+ "Line": 1665
},
"14289": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1649
+ "Line": 1666
},
"14290": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1650
+ "Line": 1667
},
"14291": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1651
+ "Line": 1668
},
"14292": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1652
+ "Line": 1669
},
"14293": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1653
+ "Line": 1670
},
"14294": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1654
+ "Line": 1671
},
"14295": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1655
+ "Line": 1672
},
"14296": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1656
+ "Line": 1674
},
"14297": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1657
+ "Line": 1675
},
"14298": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1658
+ "Line": 1676
},
"14299": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1659
+ "Line": 1677
},
"14300": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1660
+ "Line": 1678
},
"14301": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1661
+ "Line": 1679
},
"14302": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1662
+ "Line": 1680
},
"14303": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1663
+ "Line": 1681
},
"14304": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1664
+ "Line": 1682
},
"14305": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1665
+ "Line": 1683
},
"14306": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1666
+ "Line": 1684
},
"14307": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1667
+ "Line": 1685
},
"14308": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1668
+ "Line": 1686
},
"14309": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1669
+ "Line": 1687
},
"14310": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1670
+ "Line": 1688
},
"14311": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1671
+ "Line": 1689
},
"14312": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1672
+ "Line": 1690
},
"14313": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1673
+ "Line": 1691
},
"14314": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1674
+ "Line": 1692
},
"14315": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1675
+ "Line": 1693
},
"14316": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1676
+ "Line": 1694
},
"14317": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1677
+ "Line": 1695
},
"14318": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1678
+ "Line": 1696
},
"14319": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1679
+ "Line": 1697
},
"14320": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1680
+ "Line": 1698
},
"14321": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1681
+ "Line": 1699
},
"14322": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1682
+ "Line": 1700
},
"14323": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1683
+ "Line": 1701
},
"14324": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1685
+ "Line": 1702
},
"14325": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1686
+ "Line": 1703
},
"14326": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1687
+ "Line": 1704
},
"14327": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1688
+ "Line": 1705
},
"14328": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1689
+ "Line": 1706
},
"14329": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1690
+ "Line": 1707
},
"14330": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1691
+ "Line": 1708
},
"14331": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1692
+ "Line": 1709
},
"14332": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1693
+ "Line": 1710
},
"14333": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1694
+ "Line": 1712
},
"14334": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1695
+ "Line": 1713
},
"14335": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1696
+ "Line": 1714
},
"14336": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1697
+ "Line": 1715
},
"14337": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1698
+ "Line": 1716
},
"14338": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1699
+ "Line": 1717
},
"14339": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1700
+ "Line": 1718
},
"14340": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1701
+ "Line": 1719
},
"14341": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1702
+ "Line": 1720
},
"14342": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1703
+ "Line": 1721
},
"14343": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1704
+ "Line": 1722
},
"14344": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1705
+ "Line": 1723
},
"14345": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1706
+ "Line": 1724
},
"14346": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1707
+ "Line": 1725
},
"14347": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1708
+ "Line": 1726
},
"14348": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1709
+ "Line": 1727
},
"14349": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1710
+ "Line": 1728
},
"14350": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1711
+ "Line": 1729
},
"14351": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1712
+ "Line": 1730
},
"14352": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1713
+ "Line": 1731
},
"14353": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1714
+ "Line": 1732
},
"14354": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1715
+ "Line": 1733
},
"14355": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1716
+ "Line": 1734
},
"14356": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1717
+ "Line": 1735
},
"14357": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1718
+ "Line": 1736
},
"14358": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1719
+ "Line": 1737
},
"14359": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1720
+ "Line": 1738
},
"14360": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1721
+ "Line": 1739
},
"14361": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1723
+ "Line": 1740
},
"14362": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1724
+ "Line": 1741
},
"14363": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1725
+ "Line": 1742
},
"14364": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1726
+ "Line": 1743
},
"14365": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1727
+ "Line": 1744
},
"14366": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1728
+ "Line": 1745
},
"14367": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1729
+ "Line": 1746
},
"14368": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1730
+ "Line": 1747
},
"14369": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1731
+ "Line": 1748
},
"14370": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1732
+ "Line": 1750
},
"14371": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1733
+ "Line": 1751
},
"14372": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1734
+ "Line": 1752
},
"14373": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1735
+ "Line": 1753
},
"14374": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1736
+ "Line": 1754
},
"14375": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1737
+ "Line": 1755
},
"14376": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1738
+ "Line": 1756
},
"14377": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1739
+ "Line": 1757
},
"14378": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1740
+ "Line": 1758
},
"14379": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1741
+ "Line": 1759
},
"14380": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1742
+ "Line": 1760
},
"14381": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1743
+ "Line": 1761
},
"14382": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1744
+ "Line": 1762
},
"14383": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1745
+ "Line": 1763
},
"14384": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1746
+ "Line": 1764
},
"14385": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1747
+ "Line": 1765
},
"14386": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1748
+ "Line": 1766
},
"14387": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1749
+ "Line": 1767
},
"14388": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1750
+ "Line": 1768
},
"14389": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1751
+ "Line": 1769
},
"14390": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1752
+ "Line": 1770
},
"14391": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1753
+ "Line": 1771
},
"14392": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1754
+ "Line": 1772
},
"14393": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1755
+ "Line": 1773
},
"14394": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1756
+ "Line": 1774
},
"14395": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1757
+ "Line": 1775
},
"14396": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1758
+ "Line": 1776
},
"14397": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1759
+ "Line": 1777
},
"14398": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1761
+ "Line": 1778
},
"14399": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1762
+ "Line": 1779
},
"14400": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1763
+ "Line": 1780
},
"14401": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1764
+ "Line": 1781
},
"14402": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1765
+ "Line": 1782
},
"14403": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1766
+ "Line": 1783
},
"14404": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1767
+ "Line": 1784
},
"14405": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1768
+ "Line": 1785
},
"14406": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1769
+ "Line": 1786
},
"14407": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1770
+ "Line": 1788
},
"14408": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1771
+ "Line": 1789
},
"14409": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1772
+ "Line": 1790
},
"14410": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1773
+ "Line": 1791
},
"14411": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1774
+ "Line": 1792
},
"14412": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1775
+ "Line": 1793
},
"14413": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1776
+ "Line": 1794
},
"14414": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1777
+ "Line": 1795
},
"14415": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1778
+ "Line": 1796
},
"14416": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1779
+ "Line": 1797
},
"14417": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1780
+ "Line": 1798
},
"14418": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1781
+ "Line": 1799
},
"14419": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1782
+ "Line": 1800
},
"14420": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1783
+ "Line": 1801
},
"14421": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1784
+ "Line": 1802
},
"14422": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1785
+ "Line": 1803
},
"14423": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1786
+ "Line": 1804
},
"14424": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1787
+ "Line": 1805
},
"14425": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1788
+ "Line": 1806
},
"14426": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1789
+ "Line": 1807
},
"14427": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1790
+ "Line": 1808
},
"14428": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1791
+ "Line": 1809
},
"14429": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1792
+ "Line": 1810
},
"14430": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1793
+ "Line": 1811
},
"14431": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1794
+ "Line": 1812
},
"14432": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1795
+ "Line": 1813
},
"14433": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1796
+ "Line": 1814
},
"14434": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1797
+ "Line": 1815
},
"14435": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1799
+ "Line": 1816
},
"14436": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1800
+ "Line": 1817
},
"14437": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1801
+ "Line": 1818
},
"14438": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1802
+ "Line": 1819
},
"14439": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1803
+ "Line": 1820
},
"14440": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1804
+ "Line": 1821
},
"14441": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1805
+ "Line": 1822
},
"14442": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1806
+ "Line": 1823
},
"14443": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1807
+ "Line": 1824
},
"14444": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1808
+ "Line": 1826
},
"14445": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1809
+ "Line": 1827
},
"14446": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1810
+ "Line": 1828
},
"14447": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1811
+ "Line": 1829
},
"14448": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1812
+ "Line": 1830
},
"14449": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1813
+ "Line": 1831
},
"14450": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1814
+ "Line": 1832
},
"14451": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1815
+ "Line": 1833
},
"14452": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1816
+ "Line": 1834
},
"14453": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1817
+ "Line": 1835
},
"14454": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1818
+ "Line": 1836
},
"14455": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1819
+ "Line": 1837
},
"14456": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1820
+ "Line": 1838
},
"14457": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1821
+ "Line": 1839
},
"14458": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1822
+ "Line": 1840
},
"14459": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1823
+ "Line": 1841
},
"14460": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1824
+ "Line": 1842
},
"14461": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1825
+ "Line": 1843
},
"14462": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1826
+ "Line": 1844
},
"14463": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1827
+ "Line": 1845
},
"14464": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1828
+ "Line": 1846
},
"14465": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1829
+ "Line": 1847
},
"14466": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1830
+ "Line": 1848
},
"14467": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1831
+ "Line": 1849
},
"14468": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1832
+ "Line": 1850
},
"14469": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1833
+ "Line": 1851
},
"14470": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1834
+ "Line": 1852
},
"14471": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1835
+ "Line": 1853
},
"14472": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1837
+ "Line": 1854
},
"14473": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1838
+ "Line": 1855
},
"14474": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1839
+ "Line": 1856
},
"14475": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1840
+ "Line": 1857
},
"14476": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1841
+ "Line": 1858
},
"14477": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1842
+ "Line": 1859
},
"14478": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1843
+ "Line": 1860
},
"14479": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1844
+ "Line": 1861
},
"14480": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1845
+ "Line": 1862
},
"14481": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1846
+ "Line": 1864
},
"14482": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1847
+ "Line": 1865
},
"14483": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1848
+ "Line": 1866
},
"14484": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1849
+ "Line": 1867
},
"14485": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1850
+ "Line": 1868
},
"14486": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1851
+ "Line": 1869
},
"14487": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1852
+ "Line": 1870
},
"14488": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1853
+ "Line": 1871
},
"14489": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1854
+ "Line": 1872
},
"14490": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1855
+ "Line": 1873
},
"14491": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1856
+ "Line": 1874
},
"14492": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1857
+ "Line": 1875
},
"14493": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1858
+ "Line": 1876
},
"14494": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1859
+ "Line": 1877
},
"14495": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1860
+ "Line": 1878
},
"14496": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1861
+ "Line": 1879
},
"14497": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1862
+ "Line": 1880
},
"14498": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1863
+ "Line": 1881
},
"14499": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1864
+ "Line": 1882
},
"14500": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1865
+ "Line": 1883
},
"14501": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1866
+ "Line": 1884
},
"14502": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1867
+ "Line": 1885
},
"14503": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1868
+ "Line": 1886
},
"14504": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1869
+ "Line": 1887
},
"14505": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1870
+ "Line": 1888
},
"14506": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1871
+ "Line": 1889
},
"14507": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1872
+ "Line": 1890
},
"14508": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1873
+ "Line": 1891
},
"14509": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1875
+ "Line": 1892
},
"14510": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1877
+ "Line": 1893
},
"14511": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1878
+ "Line": 1894
},
"14512": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1879
+ "Line": 1895
},
"14513": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1880
+ "Line": 1896
},
"14514": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1881
+ "Line": 1897
},
"14515": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1882
+ "Line": 1898
},
"14516": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1883
+ "Line": 1899
},
"14517": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1884
+ "Line": 1900
},
"14518": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1885
+ "Line": 1902
},
"14519": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1886
+ "Line": 1903
},
"14520": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1887
+ "Line": 1904
},
"14521": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1888
+ "Line": 1905
},
"14522": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1889
+ "Line": 1906
},
"14523": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1890
+ "Line": 1907
},
"14524": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1891
+ "Line": 1908
},
"14525": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1892
+ "Line": 1909
},
"14526": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1893
+ "Line": 1910
},
"14527": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1894
+ "Line": 1911
},
"14528": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1895
+ "Line": 1912
},
"14529": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1896
+ "Line": 1913
},
"14530": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1897
+ "Line": 1914
},
"14531": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1898
+ "Line": 1915
},
"14532": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1899
+ "Line": 1916
},
"14533": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1900
+ "Line": 1917
},
"14534": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1901
+ "Line": 1918
},
"14535": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1902
+ "Line": 1919
},
"14536": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1903
+ "Line": 1920
},
"14537": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1904
+ "Line": 1921
},
"14538": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1905
+ "Line": 1922
},
"14539": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1906
+ "Line": 1923
},
"14540": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1907
+ "Line": 1924
},
"14541": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1908
+ "Line": 1925
},
"14542": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1909
+ "Line": 1926
},
"14543": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1910
+ "Line": 1927
},
"14544": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1911
+ "Line": 1928
},
"14545": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1912
+ "Line": 1929
},
"14546": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1914
+ "Line": 1930
},
"14547": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1915
+ "Line": 1931
},
"14548": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1916
+ "Line": 1932
},
"14549": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1917
+ "Line": 1933
},
"14550": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1918
+ "Line": 1934
},
"14551": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1919
+ "Line": 1935
},
"14552": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1920
+ "Line": 1936
},
"14553": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1921
+ "Line": 1937
},
"14554": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1922
+ "Line": 1938
},
"14555": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1923
+ "Line": 1940
},
"14556": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1924
+ "Line": 1942
},
"14557": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1925
+ "Line": 1943
},
"14558": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1926
+ "Line": 1944
},
"14559": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1927
+ "Line": 1945
},
"14560": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1928
+ "Line": 1946
},
"14561": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1929
+ "Line": 1947
},
"14562": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1930
+ "Line": 1948
},
"14563": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1931
+ "Line": 1949
},
"14564": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1932
+ "Line": 1950
},
"14565": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1933
+ "Line": 1951
},
"14566": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1934
+ "Line": 1952
},
"14567": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1935
+ "Line": 1953
},
"14568": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1936
+ "Line": 1954
},
"14569": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1937
+ "Line": 1955
},
"14570": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1938
+ "Line": 1956
},
"14571": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1939
+ "Line": 1957
},
"14572": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1940
+ "Line": 1958
},
"14573": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1941
+ "Line": 1959
},
"14574": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1942
+ "Line": 1960
},
"14575": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1943
+ "Line": 1961
},
"14576": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1944
+ "Line": 1962
},
"14577": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1945
+ "Line": 1963
},
"14578": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1946
+ "Line": 1964
},
"14579": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1947
+ "Line": 1965
},
"14580": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1948
+ "Line": 1966
},
"14581": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1949
+ "Line": 1967
},
"14582": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1950
+ "Line": 1968
},
"14583": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1952
+ "Line": 1969
},
"14584": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1953
+ "Line": 1970
},
"14585": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1954
+ "Line": 1971
},
"14586": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1955
+ "Line": 1972
},
"14587": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1956
+ "Line": 1973
},
"14588": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1957
+ "Line": 1974
},
"14589": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1958
+ "Line": 1975
},
"14590": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1959
+ "Line": 1976
},
"14591": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1960
+ "Line": 1977
},
"14592": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1961
+ "Line": 1979
},
"14593": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1962
+ "Line": 1980
},
"14594": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1963
+ "Line": 1981
},
"14595": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1964
+ "Line": 1982
},
"14596": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1965
+ "Line": 1983
},
"14597": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1966
+ "Line": 1984
},
"14598": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1967
+ "Line": 1985
},
"14599": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1968
+ "Line": 1986
},
"14600": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1969
+ "Line": 1987
},
"14601": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1970
+ "Line": 1988
},
"14602": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1971
+ "Line": 1989
},
"14603": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1972
+ "Line": 1990
},
"14604": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1973
+ "Line": 1991
},
"14605": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1974
+ "Line": 1992
},
"14606": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1975
+ "Line": 1993
},
"14607": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1976
+ "Line": 1994
},
"14608": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1977
+ "Line": 1995
},
"14609": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1978
+ "Line": 1996
},
"14610": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1979
+ "Line": 1997
},
"14611": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1980
+ "Line": 1998
},
"14612": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1981
+ "Line": 1999
},
"14613": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1982
+ "Line": 2000
},
"14614": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1983
+ "Line": 2001
},
"14615": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1984
+ "Line": 2002
},
"14616": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1985
+ "Line": 2003
},
"14617": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1986
+ "Line": 2004
},
"14618": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1987
+ "Line": 2005
},
"14619": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1988
+ "Line": 2006
},
"14620": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1990
+ "Line": 2007
},
"14621": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1991
+ "Line": 2008
},
"14622": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1992
+ "Line": 2009
},
"14623": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1993
+ "Line": 2010
},
"14624": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1994
+ "Line": 2011
},
"14625": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1995
+ "Line": 2012
},
"14626": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1996
+ "Line": 2013
},
"14627": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1997
+ "Line": 2014
},
"14628": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1998
+ "Line": 2015
},
"14629": {
"File": "_test/testdata/triceCheck.c",
- "Line": 1999
+ "Line": 2017
},
"14630": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2000
+ "Line": 2018
},
"14631": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2001
+ "Line": 2019
},
"14632": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2002
+ "Line": 2020
},
"14633": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2003
+ "Line": 2021
},
"14634": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2004
+ "Line": 2022
},
"14635": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2005
+ "Line": 2023
},
"14636": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2006
+ "Line": 2024
},
"14637": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2007
+ "Line": 2025
},
"14638": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2008
+ "Line": 2026
},
"14639": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2009
+ "Line": 2027
},
"14640": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2010
+ "Line": 2028
},
"14641": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2011
+ "Line": 2029
},
"14642": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2012
+ "Line": 2030
},
"14643": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2013
+ "Line": 2031
},
"14644": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2014
+ "Line": 2032
},
"14645": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2015
+ "Line": 2033
},
"14646": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2016
+ "Line": 2034
},
"14647": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2017
+ "Line": 2035
},
"14648": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2018
+ "Line": 2036
},
"14649": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2019
+ "Line": 2037
},
"14650": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2020
+ "Line": 2038
},
"14651": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2021
+ "Line": 2039
},
"14652": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2022
+ "Line": 2040
},
"14653": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2023
+ "Line": 2041
},
"14654": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2024
+ "Line": 2042
},
"14655": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2025
+ "Line": 2043
},
"14656": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2026
+ "Line": 2044
},
"14657": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2028
+ "Line": 2045
},
"14658": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2029
+ "Line": 2046
},
"14659": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2030
+ "Line": 2047
},
"14660": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2031
+ "Line": 2048
},
"14661": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2032
+ "Line": 2049
},
"14662": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2033
+ "Line": 2050
},
"14663": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2034
+ "Line": 2051
},
"14664": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2035
+ "Line": 2052
},
"14665": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2036
+ "Line": 2053
},
"14666": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2037
+ "Line": 2055
},
"14667": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2038
+ "Line": 2056
},
"14668": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2039
+ "Line": 2057
},
"14669": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2040
+ "Line": 2058
},
"14670": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2041
+ "Line": 2059
},
"14671": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2042
+ "Line": 2060
},
"14672": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2043
+ "Line": 2061
},
"14673": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2044
+ "Line": 2062
},
"14674": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2045
+ "Line": 2063
},
"14675": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2046
+ "Line": 2064
},
"14676": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2047
+ "Line": 2065
},
"14677": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2048
+ "Line": 2066
},
"14678": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2049
+ "Line": 2067
},
"14679": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2050
+ "Line": 2068
},
"14680": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2051
+ "Line": 2069
},
"14681": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2052
+ "Line": 2070
},
"14682": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2053
+ "Line": 2071
},
"14683": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2054
+ "Line": 2072
},
"14684": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2055
+ "Line": 2073
},
"14685": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2056
+ "Line": 2074
},
"14686": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2057
+ "Line": 2075
},
"14687": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2058
+ "Line": 2076
},
"14688": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2059
+ "Line": 2077
},
"14689": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2060
+ "Line": 2078
},
"14690": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2061
+ "Line": 2079
},
"14691": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2062
+ "Line": 2080
},
"14692": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2063
+ "Line": 2081
},
"14693": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2064
+ "Line": 2082
},
"14694": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2067
+ "Line": 2083
},
"14695": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2068
+ "Line": 2084
},
"14696": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2069
+ "Line": 2085
},
"14697": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2070
+ "Line": 2086
},
"14698": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2071
+ "Line": 2087
},
"14699": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2072
+ "Line": 2088
},
"14700": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2073
+ "Line": 2089
},
"14701": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2074
+ "Line": 2090
},
"14702": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2075
+ "Line": 2091
},
"14703": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2076
+ "Line": 2093
},
"14704": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2077
+ "Line": 2094
},
"14705": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2078
+ "Line": 2095
},
"14706": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2079
+ "Line": 2096
},
"14707": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2080
+ "Line": 2097
},
"14708": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2081
+ "Line": 2098
},
"14709": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2082
+ "Line": 2099
},
"14710": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2083
+ "Line": 2100
},
"14711": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2084
+ "Line": 2101
},
"14712": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2085
+ "Line": 2102
},
"14713": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2086
+ "Line": 2103
},
"14714": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2089
+ "Line": 2104
},
"14715": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2090
+ "Line": 2105
},
"14716": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2091
+ "Line": 2106
},
"14717": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2092
+ "Line": 2107
},
"14718": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2093
+ "Line": 2108
},
"14719": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2094
+ "Line": 2109
},
"14720": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2095
+ "Line": 2110
},
"14721": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2096
+ "Line": 2111
},
"14722": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2097
+ "Line": 2112
},
"14723": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2098
+ "Line": 2113
},
"14724": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2099
+ "Line": 2114
},
"14725": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2100
+ "Line": 2115
},
"14726": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2101
+ "Line": 2116
},
"14727": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2102
+ "Line": 2117
},
"14728": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2103
+ "Line": 2118
},
"14729": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2104
+ "Line": 2119
},
"14730": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2105
+ "Line": 2120
},
"14731": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2106
+ "Line": 2121
},
"14732": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2107
+ "Line": 2122
},
"14733": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2108
+ "Line": 2123
},
"14734": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2109
+ "Line": 2124
},
"14735": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2110
+ "Line": 2125
},
"14736": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2111
+ "Line": 2126
},
"14737": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2112
+ "Line": 2127
},
"14738": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2113
+ "Line": 2128
},
"14739": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2114
+ "Line": 2129
},
"14740": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2115
+ "Line": 2132
},
"14741": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2116
+ "Line": 2133
},
"14742": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2118
+ "Line": 2134
},
"14743": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2119
+ "Line": 2135
},
"14744": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2120
+ "Line": 2136
},
"14745": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2121
+ "Line": 2137
},
"14746": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2122
+ "Line": 2138
},
"14747": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2123
+ "Line": 2139
},
"14748": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2124
+ "Line": 2140
},
"14749": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2125
+ "Line": 2141
},
"14750": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2127
+ "Line": 2142
},
"14751": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2128
+ "Line": 2143
},
"14752": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2129
+ "Line": 2144
},
"14753": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2130
+ "Line": 2145
},
"14754": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2131
+ "Line": 2146
},
"14755": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2132
+ "Line": 2147
},
"14756": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2133
+ "Line": 2148
},
"14757": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2134
+ "Line": 2149
},
"14758": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2135
+ "Line": 2150
},
"14759": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2136
+ "Line": 2151
},
"14760": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2137
+ "Line": 2154
},
"14761": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2138
+ "Line": 2155
},
"14762": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2139
+ "Line": 2156
},
"14763": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2140
+ "Line": 2157
},
"14764": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2141
+ "Line": 2158
},
"14765": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2142
+ "Line": 2159
},
"14766": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2143
+ "Line": 2160
},
"14767": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2145
+ "Line": 2161
},
"14768": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2147
+ "Line": 2162
},
"14769": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2148
+ "Line": 2163
},
"14770": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2149
+ "Line": 2164
},
"14771": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2150
+ "Line": 2165
},
"14772": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2153
+ "Line": 2166
},
"14773": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2154
+ "Line": 2167
},
"14774": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2155
+ "Line": 2168
},
"14775": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2156
+ "Line": 2169
},
"14776": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2157
+ "Line": 2170
},
"14777": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2158
+ "Line": 2171
},
"14778": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2159
+ "Line": 2172
},
"14779": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2160
+ "Line": 2173
},
"14780": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2163
+ "Line": 2174
},
"14781": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2164
+ "Line": 2175
},
"14782": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2165
+ "Line": 2176
},
"14783": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2166
+ "Line": 2177
},
"14784": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2167
+ "Line": 2178
},
"14785": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2168
+ "Line": 2179
},
"14786": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2171
+ "Line": 2180
},
"14787": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2172
+ "Line": 2181
},
"14788": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2173
+ "Line": 2183
},
"14789": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2174
+ "Line": 2184
},
"14790": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2177
+ "Line": 2185
},
"14791": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2178
+ "Line": 2186
},
"14792": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2179
+ "Line": 2187
},
"14793": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2180
+ "Line": 2188
},
"14794": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2183
+ "Line": 2189
},
"14795": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2185
+ "Line": 2190
},
"14796": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2186
+ "Line": 2192
},
"14797": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2187
+ "Line": 2193
},
"14798": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2188
+ "Line": 2194
},
"14799": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2189
+ "Line": 2195
},
"14800": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2190
+ "Line": 2196
},
"14801": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2191
+ "Line": 2197
},
"14802": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2192
+ "Line": 2198
},
"14803": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2193
+ "Line": 2199
},
"14804": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2194
+ "Line": 2200
},
"14805": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2195
+ "Line": 2201
},
"14806": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2196
+ "Line": 2202
},
"14807": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2197
+ "Line": 2203
},
"14808": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2198
+ "Line": 2204
},
"14809": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2199
+ "Line": 2205
},
"14810": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2200
+ "Line": 2206
},
"14811": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2201
+ "Line": 2207
},
"14812": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2202
+ "Line": 2208
},
"14813": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2203
+ "Line": 2210
},
"14814": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2203
+ "Line": 2212
},
"14815": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2203
+ "Line": 2213
},
"14816": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2204
+ "Line": 2214
},
"14817": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2204
+ "Line": 2215
},
"14818": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2204
+ "Line": 2218
},
"14819": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2207
+ "Line": 2219
},
"14820": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2209
+ "Line": 2220
},
"14821": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2210
+ "Line": 2221
},
"14822": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2211
+ "Line": 2222
},
"14823": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2212
+ "Line": 2223
},
"14824": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2213
+ "Line": 2224
},
"14825": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2214
+ "Line": 2225
},
"14826": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2215
+ "Line": 2228
},
"14827": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2216
+ "Line": 2229
},
"14828": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2217
+ "Line": 2230
},
"14829": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2218
+ "Line": 2231
},
"14830": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2219
+ "Line": 2232
},
"14831": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2220
+ "Line": 2233
},
"14832": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2221
+ "Line": 2236
},
"14833": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2224
+ "Line": 2237
},
"14834": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2225
+ "Line": 2238
},
"14835": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2226
+ "Line": 2239
},
"14836": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2227
+ "Line": 2242
},
"14837": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2228
+ "Line": 2243
},
"14838": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2229
+ "Line": 2244
},
"14839": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2230
+ "Line": 2245
},
"14840": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2231
+ "Line": 2248
},
"14841": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2232
+ "Line": 2250
},
"14842": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2233
+ "Line": 2251
},
"14843": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2234
+ "Line": 2252
},
"14844": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2235
+ "Line": 2253
},
"14845": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2236
+ "Line": 2254
},
"14846": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2237
+ "Line": 2255
},
"14847": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2239
+ "Line": 2256
},
"14848": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2241
+ "Line": 2257
},
"14849": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2242
+ "Line": 2258
},
"14850": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2243
+ "Line": 2259
},
"14851": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2244
+ "Line": 2260
},
"14852": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2245
+ "Line": 2261
},
"14853": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2246
+ "Line": 2262
},
"14854": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2247
+ "Line": 2263
},
"14855": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2248
+ "Line": 2264
},
"14856": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2249
+ "Line": 2265
},
"14857": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2250
+ "Line": 2266
},
"14858": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2251
+ "Line": 2267
},
"14859": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2252
+ "Line": 2269
},
"14860": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2253
+ "Line": 2269
},
"14861": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2256
+ "Line": 2269
},
"14862": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2257
+ "Line": 2272
},
"14863": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2258
+ "Line": 2272
},
"14864": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2259
+ "Line": 2272
},
"14865": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2260
+ "Line": 2276
},
"14866": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2261
+ "Line": 2278
},
"14867": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2262
+ "Line": 2279
},
"14868": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2263
+ "Line": 2280
},
"14869": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2264
+ "Line": 2281
},
"14870": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2265
+ "Line": 2282
},
"14871": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2266
+ "Line": 2283
},
"14872": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2267
+ "Line": 2284
},
"14873": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2268
+ "Line": 2285
},
"14874": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2270
+ "Line": 2286
},
"14875": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2272
+ "Line": 2287
},
"14876": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2273
+ "Line": 2288
},
"14877": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2274
+ "Line": 2289
},
"14878": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2275
+ "Line": 2290
},
"14879": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2276
+ "Line": 2293
},
"14880": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2277
+ "Line": 2294
},
"14881": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2278
+ "Line": 2295
},
"14882": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2279
+ "Line": 2296
},
"14883": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2280
+ "Line": 2297
},
"14884": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2281
+ "Line": 2298
},
"14885": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2282
+ "Line": 2299
},
"14886": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2283
+ "Line": 2300
},
"14887": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2284
+ "Line": 2301
},
"14888": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2287
+ "Line": 2302
},
"14889": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2288
+ "Line": 2303
},
"14890": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2289
+ "Line": 2304
},
"14891": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2290
+ "Line": 2305
},
"14892": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2291
+ "Line": 2306
},
"14893": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2292
+ "Line": 2308
},
"14894": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2293
+ "Line": 2310
},
"14895": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2294
+ "Line": 2311
},
"14896": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2295
+ "Line": 2312
},
"14897": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2296
+ "Line": 2313
},
"14898": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2297
+ "Line": 2314
},
"14899": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2298
- },
- "1490": {
- "File": "N3_bi/main.c",
- "Line": 96
+ "Line": 2315
},
"14900": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2299
+ "Line": 2316
},
"14901": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2300
+ "Line": 2317
},
"14902": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2302
+ "Line": 2318
},
"14903": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2303
+ "Line": 2319
},
"14904": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2304
+ "Line": 2320
},
"14905": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2305
+ "Line": 2321
},
"14906": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2306
+ "Line": 2322
},
"14907": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2307
+ "Line": 2325
},
"14908": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2308
+ "Line": 2326
},
"14909": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2309
+ "Line": 2327
},
"14910": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2310
+ "Line": 2328
},
"14911": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2311
+ "Line": 2329
},
"14912": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2312
+ "Line": 2330
},
"14913": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2313
+ "Line": 2331
},
"14914": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2314
+ "Line": 2332
},
"14915": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2315
+ "Line": 2333
},
"14916": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2316
+ "Line": 2334
},
"14917": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2317
+ "Line": 2335
},
"14918": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2318
+ "Line": 2336
},
"14919": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2319
+ "Line": 2337
},
"14920": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2320
+ "Line": 2339
},
"14921": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2321
+ "Line": 2341
},
"14922": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2322
+ "Line": 2342
},
"14923": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2323
+ "Line": 2343
},
"14924": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2324
+ "Line": 2344
},
"14925": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2325
+ "Line": 2345
},
"14926": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2326
+ "Line": 2346
},
"14927": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2327
+ "Line": 2347
},
"14928": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2328
+ "Line": 2348
},
"14929": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2330
+ "Line": 2349
},
"14930": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2332
+ "Line": 2350
},
"14931": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2333
+ "Line": 2351
},
"14932": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2334
+ "Line": 2352
},
"14933": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2335
+ "Line": 2353
},
"14934": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2336
+ "Line": 2356
},
"14935": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2337
+ "Line": 2357
},
"14936": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2338
+ "Line": 2358
},
"14937": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2339
+ "Line": 2359
},
"14938": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2340
+ "Line": 2360
},
"14939": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2341
+ "Line": 2361
},
"14940": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2342
+ "Line": 2362
},
"14941": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2343
+ "Line": 2363
},
"14942": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2344
+ "Line": 2364
},
"14943": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2345
+ "Line": 2365
},
"14944": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2346
+ "Line": 2366
},
"14945": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2347
+ "Line": 2367
},
"14946": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2348
+ "Line": 2368
},
"14947": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2349
+ "Line": 2369
},
"14948": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2350
+ "Line": 2371
},
"14949": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2351
+ "Line": 2372
},
"14950": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2352
+ "Line": 2373
},
"14951": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2353
+ "Line": 2374
},
"14952": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2354
+ "Line": 2375
},
"14953": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2355
+ "Line": 2376
},
"14954": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2356
+ "Line": 2377
},
"14955": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2357
+ "Line": 2378
},
"14956": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2358
+ "Line": 2379
},
"14957": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2359
+ "Line": 2380
},
"14958": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2360
+ "Line": 2381
},
"14959": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2361
+ "Line": 2382
},
"14960": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2364
+ "Line": 2383
},
"14961": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2365
+ "Line": 2384
},
"14962": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2366
+ "Line": 2385
},
"14963": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2367
+ "Line": 2386
},
"14964": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2368
+ "Line": 2387
},
"14965": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2369
+ "Line": 2388
},
"14966": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2370
+ "Line": 2389
},
"14967": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2371
+ "Line": 2390
},
"14968": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2372
+ "Line": 2391
},
"14969": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2373
+ "Line": 2392
},
"14970": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2374
+ "Line": 2393
},
"14971": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2375
+ "Line": 2394
},
"14972": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2376
+ "Line": 2395
},
"14973": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2377
+ "Line": 2396
},
"14974": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2378
+ "Line": 2397
},
"14975": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2379
+ "Line": 2399
},
"14976": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2380
+ "Line": 2401
},
"14977": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2381
+ "Line": 2402
},
"14978": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2382
+ "Line": 2403
},
"14979": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2383
+ "Line": 2404
},
"14980": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2384
+ "Line": 2405
},
"14981": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2385
+ "Line": 2406
},
"14982": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2386
+ "Line": 2407
},
"14983": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2387
+ "Line": 2408
},
"14984": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2388
+ "Line": 2409
},
"14985": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2389
+ "Line": 2410
},
"14986": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2390
+ "Line": 2411
},
"14987": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2391
+ "Line": 2412
},
"14988": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2392
+ "Line": 2413
},
"14989": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2393
+ "Line": 2414
},
"14990": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2394
+ "Line": 2415
},
"14991": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2395
+ "Line": 2416
},
"14992": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2396
+ "Line": 2417
},
"14993": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2397
+ "Line": 2418
},
"14994": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2398
+ "Line": 2419
},
"14995": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2399
+ "Line": 2420
},
"14996": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2400
+ "Line": 2421
},
"14997": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2401
+ "Line": 2422
},
"14998": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2402
+ "Line": 2423
},
"14999": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2403
+ "Line": 2424
},
"15000": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2404
+ "Line": 2425
},
"15001": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2405
+ "Line": 2426
},
"15002": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2406
+ "Line": 2427
},
"15003": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2407
+ "Line": 2428
},
"15004": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2409
+ "Line": 2429
},
"15005": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2411
+ "Line": 2430
},
"15006": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2412
+ "Line": 2433
},
"15007": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2413
+ "Line": 2434
},
"15008": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2414
+ "Line": 2435
},
"15009": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2415
+ "Line": 2436
},
"15010": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2416
+ "Line": 2437
},
"15011": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2418
+ "Line": 2438
},
"15012": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2420
+ "Line": 2439
},
"15013": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2421
+ "Line": 2440
},
"15014": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2422
+ "Line": 2441
},
"15015": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2423
+ "Line": 2442
},
"15016": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2424
+ "Line": 2443
},
"15017": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2425
+ "Line": 2444
},
"15018": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2427
+ "Line": 2445
},
"15019": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2429
+ "Line": 2446
},
"15020": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2430
+ "Line": 2447
},
"15021": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2431
+ "Line": 2448
},
"15022": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2432
+ "Line": 2449
},
"15023": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2433
+ "Line": 2450
},
"15024": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2434
+ "Line": 2451
},
"15025": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2435
+ "Line": 2452
},
"15026": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2436
+ "Line": 2453
},
"15027": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2437
+ "Line": 2454
},
"15028": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2440
+ "Line": 2455
},
"15029": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2441
+ "Line": 2456
},
"15030": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2442
+ "Line": 2457
},
"15031": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2443
+ "Line": 2458
},
"15032": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2444
+ "Line": 2459
},
"15033": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2445
+ "Line": 2460
},
"15034": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2446
+ "Line": 2461
},
"15035": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2447
+ "Line": 2462
},
"15036": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2448
+ "Line": 2463
},
"15037": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2449
+ "Line": 2464
},
"15038": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2450
+ "Line": 2465
},
"15039": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2451
+ "Line": 2466
},
"15040": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2452
+ "Line": 2467
},
"15041": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2453
+ "Line": 2468
},
"15042": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2455
+ "Line": 2469
},
"15043": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2456
+ "Line": 2470
},
"15044": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2457
+ "Line": 2471
},
"15045": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2458
+ "Line": 2472
},
"15046": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2459
+ "Line": 2473
},
"15047": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2460
+ "Line": 2474
},
"15048": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2461
+ "Line": 2475
},
"15049": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2462
+ "Line": 2476
},
"15050": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2463
+ "Line": 2478
},
"15051": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2464
+ "Line": 2480
},
"15052": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2465
+ "Line": 2481
},
"15053": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2466
+ "Line": 2482
},
"15054": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2467
+ "Line": 2483
},
"15055": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2468
+ "Line": 2484
},
"15056": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2469
+ "Line": 2485
},
"15057": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2470
+ "Line": 2487
},
"15058": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2471
+ "Line": 2489
},
"15059": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2472
+ "Line": 2490
},
"15060": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2473
+ "Line": 2491
},
"15061": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2474
+ "Line": 2492
},
"15062": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2475
+ "Line": 2493
},
"15063": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2476
+ "Line": 2494
},
"15064": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2477
+ "Line": 2496
},
"15065": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2478
+ "Line": 2498
},
"15066": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2479
+ "Line": 2499
},
"15067": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2480
+ "Line": 2500
},
"15068": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2481
+ "Line": 2501
},
"15069": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2482
+ "Line": 2502
},
"15070": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2483
+ "Line": 2503
},
"15071": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2484
+ "Line": 2504
},
"15072": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2486
+ "Line": 2505
},
"15073": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2487
+ "Line": 2506
},
"15074": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2488
+ "Line": 2509
},
"15075": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2489
+ "Line": 2510
},
"15076": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2490
+ "Line": 2511
},
"15077": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2491
+ "Line": 2512
},
"15078": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2492
+ "Line": 2513
},
"15079": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2493
+ "Line": 2514
},
"15080": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2494
+ "Line": 2515
},
"15081": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2495
+ "Line": 2516
},
"15082": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2496
+ "Line": 2517
},
"15083": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2497
+ "Line": 2518
},
"15084": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2498
+ "Line": 2519
},
"15085": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2499
+ "Line": 2520
},
"15086": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2500
+ "Line": 2521
},
"15087": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2501
+ "Line": 2522
},
"15088": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2502
+ "Line": 2524
},
"15089": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2503
+ "Line": 2525
},
"15090": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2504
+ "Line": 2526
},
"15091": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2505
+ "Line": 2527
},
"15092": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2506
+ "Line": 2528
},
"15093": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2507
+ "Line": 2529
},
"15094": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2508
+ "Line": 2530
},
"15095": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2509
+ "Line": 2531
},
"15096": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2510
+ "Line": 2532
},
"15097": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2511
+ "Line": 2533
},
"15098": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2512
+ "Line": 2534
},
"15099": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2513
+ "Line": 2535
},
"15100": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2514
+ "Line": 2536
},
"15101": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2515
+ "Line": 2537
},
"15102": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2517
+ "Line": 2538
},
"15103": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2518
+ "Line": 2539
},
"15104": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2519
+ "Line": 2540
},
"15105": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2520
+ "Line": 2541
},
"15106": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2521
+ "Line": 2542
},
"15107": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2522
+ "Line": 2543
},
"15108": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2523
+ "Line": 2544
},
"15109": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2524
+ "Line": 2545
},
"15110": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2525
+ "Line": 2546
},
"15111": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2526
+ "Line": 2547
},
"15112": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2527
+ "Line": 2548
},
"15113": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2528
+ "Line": 2549
},
"15114": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2529
+ "Line": 2550
},
"15115": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2531
+ "Line": 2551
},
"15116": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2532
+ "Line": 2552
},
"15117": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2533
+ "Line": 2553
},
"15118": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2534
+ "Line": 2555
},
"15119": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2535
- },
- "1512": {
- "File": "N3_bi/main.c",
- "Line": 82
+ "Line": 2556
},
"15120": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2536
+ "Line": 2557
},
"15121": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2537
+ "Line": 2558
},
"15122": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2538
+ "Line": 2559
},
"15123": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2539
+ "Line": 2560
},
"15124": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2540
+ "Line": 2561
},
"15125": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2541
+ "Line": 2562
},
"15126": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2542
+ "Line": 2563
},
"15127": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2543
+ "Line": 2564
},
"15128": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2545
+ "Line": 2565
},
"15129": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2547
+ "Line": 2566
},
"15130": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2548
+ "Line": 2567
},
"15131": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2549
+ "Line": 2568
},
"15132": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2550
+ "Line": 2569
},
"15133": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2551
+ "Line": 2570
},
"15134": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2552
+ "Line": 2571
},
"15135": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2553
+ "Line": 2572
},
"15136": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2554
+ "Line": 2573
},
"15137": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2555
+ "Line": 2574
},
"15138": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2556
+ "Line": 2575
},
"15139": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2557
+ "Line": 2576
},
"15140": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2558
+ "Line": 2577
},
"15141": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2560
+ "Line": 2578
},
"15142": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2562
+ "Line": 2579
},
"15143": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2563
+ "Line": 2580
},
"15144": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2564
+ "Line": 2581
},
"15145": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2565
+ "Line": 2582
},
"15146": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2566
+ "Line": 2583
},
"15147": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2567
+ "Line": 2584
},
"15148": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2568
+ "Line": 2586
},
"15149": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2569
+ "Line": 2587
},
"15150": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2570
+ "Line": 2588
},
"15151": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2571
+ "Line": 2589
},
"15152": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2572
+ "Line": 2590
},
"15153": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2573
+ "Line": 2591
},
"15154": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2576
+ "Line": 2592
},
"15155": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2577
+ "Line": 2593
},
"15156": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2578
+ "Line": 2594
},
"15157": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2579
+ "Line": 2595
},
"15158": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2580
+ "Line": 2596
},
"15159": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2581
+ "Line": 2597
},
"15160": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2582
+ "Line": 2598
},
"15161": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2584
+ "Line": 2600
},
"15162": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2585
+ "Line": 2601
},
"15163": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2586
+ "Line": 2602
},
"15164": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2587
+ "Line": 2603
},
"15165": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2588
+ "Line": 2604
},
"15166": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2589
+ "Line": 2605
},
"15167": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2590
+ "Line": 2606
},
"15168": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2592
+ "Line": 2607
},
"15169": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2593
+ "Line": 2608
},
"15170": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2594
+ "Line": 2609
},
"15171": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2595
+ "Line": 2610
},
"15172": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2596
+ "Line": 2611
},
"15173": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2597
+ "Line": 2612
},
"15174": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2598
+ "Line": 2614
},
"15175": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2600
+ "Line": 2616
},
"15176": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2601
+ "Line": 2617
},
"15177": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2602
+ "Line": 2618
},
"15178": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2603
+ "Line": 2619
},
"15179": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2604
+ "Line": 2620
},
"15180": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2605
+ "Line": 2621
},
"15181": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2606
+ "Line": 2622
},
"15182": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2608
+ "Line": 2623
},
"15183": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2609
+ "Line": 2624
},
"15184": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2610
+ "Line": 2625
},
"15185": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2611
+ "Line": 2626
},
"15186": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2612
+ "Line": 2627
},
"15187": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2613
+ "Line": 2629
},
"15188": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2614
+ "Line": 2631
},
"15189": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2616
+ "Line": 2632
},
"15190": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2617
+ "Line": 2633
},
"15191": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2618
+ "Line": 2634
},
"15192": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2619
+ "Line": 2635
},
"15193": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2620
+ "Line": 2636
},
"15194": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2621
+ "Line": 2637
},
"15195": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2622
+ "Line": 2638
},
"15196": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2624
+ "Line": 2639
},
"15197": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2625
+ "Line": 2640
},
"15198": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2626
+ "Line": 2641
},
"15199": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2627
+ "Line": 2642
},
"15200": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2628
+ "Line": 2645
},
"15201": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2629
+ "Line": 2646
},
"15202": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2630
+ "Line": 2647
},
"15203": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2632
+ "Line": 2648
},
"15204": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2633
+ "Line": 2649
},
"15205": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2634
+ "Line": 2650
},
"15206": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2635
+ "Line": 2651
},
"15207": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2636
+ "Line": 2653
},
"15208": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2637
+ "Line": 2654
},
"15209": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2638
+ "Line": 2655
},
"15210": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2640
+ "Line": 2656
},
"15211": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2641
+ "Line": 2657
},
"15212": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2642
+ "Line": 2658
},
"15213": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2643
+ "Line": 2659
},
"15214": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2644
+ "Line": 2661
},
"15215": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2645
+ "Line": 2662
},
"15216": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2646
+ "Line": 2663
},
"15217": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2648
+ "Line": 2664
},
"15218": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2649
+ "Line": 2665
},
"15219": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2650
+ "Line": 2666
},
"15220": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2651
+ "Line": 2667
},
"15221": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2652
+ "Line": 2669
},
"15222": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2653
+ "Line": 2670
},
"15223": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2654
+ "Line": 2671
},
"15224": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2656
+ "Line": 2672
},
"15225": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2657
+ "Line": 2673
},
"15226": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2658
+ "Line": 2674
},
"15227": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2659
+ "Line": 2675
},
"15228": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2660
+ "Line": 2677
},
"15229": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2661
+ "Line": 2678
},
"15230": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2662
+ "Line": 2679
},
"15231": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2664
+ "Line": 2680
},
"15232": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2665
+ "Line": 2681
},
"15233": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2666
+ "Line": 2682
},
"15234": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2667
+ "Line": 2683
},
"15235": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2668
+ "Line": 2685
},
"15236": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2669
+ "Line": 2686
},
"15237": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2670
+ "Line": 2687
},
"15238": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2710
+ "Line": 2688
},
"15239": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2711
+ "Line": 2689
},
"15240": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2721
+ "Line": 2690
},
"15241": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2722
+ "Line": 2691
},
"15242": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2842
+ "Line": 2693
},
"15243": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2843
+ "Line": 2694
},
"15244": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2844
+ "Line": 2695
},
"15245": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2846
+ "Line": 2696
},
"15246": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2847
+ "Line": 2697
},
"15247": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2848
+ "Line": 2698
},
"15248": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2854
+ "Line": 2699
},
"15249": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2855
+ "Line": 2701
},
"15250": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2856
+ "Line": 2702
},
"15251": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2858
+ "Line": 2703
},
"15252": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2861
+ "Line": 2704
},
"15253": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2862
+ "Line": 2705
},
"15254": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2874
+ "Line": 2706
},
"15255": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2882
+ "Line": 2707
},
"15256": {
"File": "_test/testdata/triceCheck.c",
- "Line": 2883
+ "Line": 2709
},
"15257": {
"File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 2887
+ "Line": 2710
},
"15258": {
"File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 2893
+ "Line": 2711
},
"15259": {
"File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 2899
+ "Line": 2712
},
"15260": {
- "File": "_test/aliasassert_dblB_de_tcobs_ua/TargetActivity.c",
- "Line": 23
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2713
},
"15261": {
- "File": "_test/aliasassert_dblB_de_tcobs_ua/TargetActivity.c",
- "Line": 26
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2714
},
"15262": {
- "File": "_test/alias_dblB_de_tcobs_ua/TargetActivity.c",
- "Line": 17
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2715
},
"15263": {
- "File": "_test/aliasassert_dblB_de_tcobs_ua/TargetActivity.c",
- "Line": 29
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2717
},
"15264": {
- "File": "_test/alias_dblB_de_tcobs_ua/TargetActivity.c",
- "Line": 20
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2718
},
"15265": {
- "File": "_test/alias_dblB_de_tcobs_ua/TargetActivity.c",
- "Line": 21
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2719
},
"15266": {
- "File": "_test/alias_dblB_de_tcobs_ua/TargetActivity.c",
- "Line": 22
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2720
},
"15267": {
- "File": "_test/alias_dblB_de_tcobs_ua/TargetActivity.c",
- "Line": 23
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2721
},
"15268": {
- "File": "_test/aliasassert_dblB_de_tcobs_ua/TargetActivity.c",
- "Line": 32
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2722
},
"15269": {
- "File": "_test/alias_dblB_de_tcobs_ua/TargetActivity.c",
- "Line": 24
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2723
},
"15270": {
- "File": "_test/alias_dblB_de_tcobs_ua/TargetActivity.c",
- "Line": 25
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2725
},
"15271": {
- "File": "_test/alias_dblB_de_tcobs_ua/TargetActivity.c",
- "Line": 26
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2726
},
"15272": {
- "File": "_test/aliasassert_dblB_de_tcobs_ua/TargetActivity.c",
- "Line": 35
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2727
},
"15273": {
- "File": "_test/alias_dblB_de_tcobs_ua/TargetActivity.c",
- "Line": 27
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2728
},
"15274": {
- "File": "_test/alias_dblB_de_tcobs_ua/TargetActivity.c",
- "Line": 28
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2729
},
"15275": {
- "File": "_test/alias_dblB_de_tcobs_ua/TargetActivity.c",
- "Line": 30
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2730
},
"15276": {
- "File": "_test/alias_dblB_de_tcobs_ua/TargetActivity.c",
- "Line": 31
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2731
},
"15277": {
- "File": "_test/alias_dblB_de_tcobs_ua/TargetActivity.c",
- "Line": 32
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2733
},
"15278": {
- "File": "_test/alias_dblB_de_tcobs_ua/TargetActivity.c",
- "Line": 33
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2734
},
"15279": {
- "File": "_test/alias_dblB_de_tcobs_ua/TargetActivity.c",
- "Line": 34
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2735
},
"15280": {
- "File": "_test/alias_dblB_de_tcobs_ua/TargetActivity.c",
- "Line": 35
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2736
},
"15281": {
- "File": "_test/dblB_de_protect_tcobs_ua/TargetActivity.c",
- "Line": 9
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2737
},
"15282": {
- "File": "_test/dblB_de_protect_tcobs_ua/TargetActivity.c",
- "Line": 10
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2738
},
"15283": {
- "File": "_test/dblB_de_protect_tcobs_ua/TargetActivity.c",
- "Line": 11
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2739
},
"15284": {
- "File": "_test/dblB_de_protect_tcobs_ua/TargetActivity.c",
- "Line": 13
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2753
},
"15285": {
- "File": "_test/modify_for_debug/TargetActivity.c",
- "Line": 8
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2754
},
"15286": {
- "File": "_test/modify_for_debug/TargetActivity.c",
- "Line": 9
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2747
},
"15287": {
- "File": "_test/ringB_de_protect_tcobs_ua/TargetActivity.c",
- "Line": 10
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2748
},
"15288": {
- "File": "_test/ringB_de_protect_tcobs_ua/TargetActivity.c",
- "Line": 11
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2979
},
"15289": {
- "File": "_test/ringB_de_protect_tcobs_ua/TargetActivity.c",
- "Line": 12
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2980
},
"15290": {
- "File": "_test/ringB_de_protect_tcobs_ua/TargetActivity.c",
- "Line": 14
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2981
},
"15291": {
- "File": "_test/stackB_di_nopf_aux32_specific/TargetActivity.c",
- "Line": 18
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2983
},
"15292": {
- "File": "_test/stackB_di_nopf_aux32_specific/TargetActivity.c",
- "Line": 19
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2984
},
"15293": {
- "File": "_test/stackB_di_nopf_aux32_specific/TargetActivity.c",
- "Line": 20
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2985
},
"15294": {
- "File": "_test/stackB_di_nopf_aux32_specific/TargetActivity.c",
- "Line": 21
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2991
},
"15295": {
- "File": "_test/stackB_di_nopf_aux32_specific/TargetActivity.c",
- "Line": 22
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2992
},
"15296": {
- "File": "_test/stackB_di_nopf_aux32_specific/TargetActivity.c",
- "Line": 23
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2993
},
"15297": {
- "File": "_test/stackB_di_nopf_aux32_specific/TargetActivity.c",
- "Line": 24
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2995
},
"15298": {
- "File": "_test/stackB_di_nopf_aux32_specific/TargetActivity.c",
- "Line": 25
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2998
},
"15299": {
- "File": "_test/stackB_di_nopf_aux32_specific/TargetActivity.c",
- "Line": 26
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2999
},
"15300": {
- "File": "_test/stackB_di_nopf_aux32_specific/TargetActivity.c",
- "Line": 27
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 3011
},
"15301": {
- "File": "_test/stackB_di_nopf_aux32_specific/TargetActivity.c",
- "Line": 28
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2902
},
"15302": {
- "File": "_test/stackB_di_nopf_aux32_specific/TargetActivity.c",
- "Line": 29
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 3020
},
"15303": {
- "File": "_test/stackB_di_nopf_aux32_specific/TargetActivity.c",
- "Line": 30
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 3024
},
"15304": {
- "File": "_test/stackB_di_nopf_aux32_specific/TargetActivity.c",
- "Line": 31
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 3030
},
"15305": {
- "File": "_test/stackB_di_nopf_aux32_specific/TargetActivity.c",
- "Line": 32
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 3036
},
"15306": {
- "File": "_test/stackB_di_nopf_aux32_specific/TargetActivity.c",
- "Line": 33
+ "File": "_test/alias_dblB_de_tcobs_ua/TargetActivity.c",
+ "Line": 18
},
"15307": {
- "File": "_test/stackB_di_nopf_aux32_specific/TargetActivity.c",
- "Line": 34
+ "File": "_test/alias_dblB_de_tcobs_ua/TargetActivity.c",
+ "Line": 21
},
"15308": {
- "File": "_test/userprint_dblB_de_tcobs_ua/TargetActivity.c",
- "Line": 16
+ "File": "_test/alias_dblB_de_tcobs_ua/TargetActivity.c",
+ "Line": 22
},
"15309": {
- "File": "_test/userprint_dblB_de_tcobs_ua/TargetActivity.c",
- "Line": 20
+ "File": "_test/alias_dblB_de_tcobs_ua/TargetActivity.c",
+ "Line": 23
},
"15310": {
- "File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 466
+ "File": "_test/alias_dblB_de_tcobs_ua/TargetActivity.c",
+ "Line": 24
},
"15311": {
- "File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 483
+ "File": "_test/aliasassert_dblB_de_tcobs_ua/TargetActivity.c",
+ "Line": 24
},
"15312": {
- "File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 494
+ "File": "_test/aliasassert_dblB_de_tcobs_ua/TargetActivity.c",
+ "Line": 27
},
"15313": {
- "File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 495
+ "File": "_test/aliasassert_dblB_de_tcobs_ua/TargetActivity.c",
+ "Line": 30
},
"15314": {
- "File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 496
+ "File": "_test/aliasassert_dblB_de_tcobs_ua/TargetActivity.c",
+ "Line": 33
},
- "15339": {
- "File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 471
+ "15315": {
+ "File": "_test/aliasassert_dblB_de_tcobs_ua/TargetActivity.c",
+ "Line": 36
},
- "15344": {
- "File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 460
+ "15316": {
+ "File": "_test/alias_dblB_de_tcobs_ua/TargetActivity.c",
+ "Line": 25
},
- "15352": {
- "File": "examples/DemoPlotData_Trice/src/main.c",
- "Line": 540
+ "15317": {
+ "File": "_test/alias_dblB_de_tcobs_ua/TargetActivity.c",
+ "Line": 26
},
- "15354": {
- "File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 489
+ "15318": {
+ "File": "_test/alias_dblB_de_tcobs_ua/TargetActivity.c",
+ "Line": 27
},
- "15371": {
- "File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 453
+ "15319": {
+ "File": "_test/alias_dblB_de_tcobs_ua/TargetActivity.c",
+ "Line": 28
},
- "15374": {
- "File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 481
+ "15320": {
+ "File": "_test/alias_dblB_de_tcobs_ua/TargetActivity.c",
+ "Line": 29
},
- "15383": {
- "File": "examples/DemoPlotData_Trice/src/main.c",
- "Line": 540
+ "15321": {
+ "File": "_test/alias_dblB_de_tcobs_ua/TargetActivity.c",
+ "Line": 31
},
- "15396": {
- "File": "examples/DemoPlotData_Trice/src/main.c",
- "Line": 505
+ "15322": {
+ "File": "_test/alias_dblB_de_tcobs_ua/TargetActivity.c",
+ "Line": 32
},
- "15496": {
- "File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 485
+ "15323": {
+ "File": "_test/alias_dblB_de_tcobs_ua/TargetActivity.c",
+ "Line": 33
},
- "15519": {
- "File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 480
+ "15324": {
+ "File": "_test/alias_dblB_de_tcobs_ua/TargetActivity.c",
+ "Line": 34
},
- "15547": {
- "File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 468
+ "15325": {
+ "File": "_test/alias_dblB_de_tcobs_ua/TargetActivity.c",
+ "Line": 35
},
- "15559": {
- "File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 490
+ "15326": {
+ "File": "_test/alias_dblB_de_tcobs_ua/TargetActivity.c",
+ "Line": 36
},
- "15578": {
- "File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 478
+ "15327": {
+ "File": "_test/dblB_de_protect_tcobs_ua/TargetActivity.c",
+ "Line": 10
},
- "15606": {
- "File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 477
+ "15328": {
+ "File": "_test/dblB_de_protect_tcobs_ua/TargetActivity.c",
+ "Line": 11
},
- "15607": {
- "File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 487
+ "15329": {
+ "File": "_test/dblB_de_protect_tcobs_ua/TargetActivity.c",
+ "Line": 12
},
- "15618": {
- "File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 476
+ "15330": {
+ "File": "_test/dblB_de_protect_tcobs_ua/TargetActivity.c",
+ "Line": 14
},
- "15644": {
- "File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 484
+ "15331": {
+ "File": "_test/modify_for_debug/TargetActivity.c",
+ "Line": 9
},
- "15647": {
- "File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 465
+ "15332": {
+ "File": "_test/modify_for_debug/TargetActivity.c",
+ "Line": 10
},
- "15650": {
- "File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 472
+ "15333": {
+ "File": "_test/ringB_de_protect_tcobs_ua/TargetActivity.c",
+ "Line": 11
},
- "15657": {
- "File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 488
+ "15334": {
+ "File": "_test/ringB_de_protect_tcobs_ua/TargetActivity.c",
+ "Line": 12
},
- "15671": {
- "File": "examples/DemoData_Trice/src/main.c",
- "Line": 540
+ "15335": {
+ "File": "_test/ringB_de_protect_tcobs_ua/TargetActivity.c",
+ "Line": 13
},
- "15689": {
- "File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 458
+ "15336": {
+ "File": "_test/ringB_de_protect_tcobs_ua/TargetActivity.c",
+ "Line": 15
},
- "15698": {
- "File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 479
+ "15337": {
+ "File": "_test/stackB_di_nopf_aux32_specific/TargetActivity.c",
+ "Line": 19
},
- "15711": {
- "File": "examples/DemoPlotData_Trice/src/main.c",
- "Line": 540
+ "15338": {
+ "File": "_test/stackB_di_nopf_aux32_specific/TargetActivity.c",
+ "Line": 20
},
- "15739": {
- "File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 461
+ "15339": {
+ "File": "_test/stackB_di_nopf_aux32_specific/TargetActivity.c",
+ "Line": 21
},
- "15754": {
- "File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 467
+ "15340": {
+ "File": "_test/stackB_di_nopf_aux32_specific/TargetActivity.c",
+ "Line": 22
},
- "15779": {
- "File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 491
+ "15341": {
+ "File": "_test/stackB_di_nopf_aux32_specific/TargetActivity.c",
+ "Line": 23
},
- "1578": {
- "File": "N2_tx/main.c",
- "Line": 22
+ "15342": {
+ "File": "_test/stackB_di_nopf_aux32_specific/TargetActivity.c",
+ "Line": 24
},
- "15815": {
- "File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 462
+ "15343": {
+ "File": "_test/stackB_di_nopf_aux32_specific/TargetActivity.c",
+ "Line": 25
},
- "15827": {
- "File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 464
+ "15344": {
+ "File": "_test/stackB_di_nopf_aux32_specific/TargetActivity.c",
+ "Line": 26
},
- "15837": {
- "File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 486
+ "15345": {
+ "File": "_test/stackB_di_nopf_aux32_specific/TargetActivity.c",
+ "Line": 27
},
- "15849": {
- "File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 452
+ "15346": {
+ "File": "_test/stackB_di_nopf_aux32_specific/TargetActivity.c",
+ "Line": 28
+ },
+ "15347": {
+ "File": "_test/stackB_di_nopf_aux32_specific/TargetActivity.c",
+ "Line": 29
+ },
+ "15348": {
+ "File": "_test/stackB_di_nopf_aux32_specific/TargetActivity.c",
+ "Line": 30
+ },
+ "15349": {
+ "File": "_test/stackB_di_nopf_aux32_specific/TargetActivity.c",
+ "Line": 31
+ },
+ "15350": {
+ "File": "_test/stackB_di_nopf_aux32_specific/TargetActivity.c",
+ "Line": 32
+ },
+ "15351": {
+ "File": "_test/stackB_di_nopf_aux32_specific/TargetActivity.c",
+ "Line": 33
+ },
+ "15352": {
+ "File": "_test/stackB_di_nopf_aux32_specific/TargetActivity.c",
+ "Line": 34
+ },
+ "15353": {
+ "File": "_test/stackB_di_nopf_aux32_specific/TargetActivity.c",
+ "Line": 35
+ },
+ "15354": {
+ "File": "_test/userprint_dblB_de_tcobs_ua/TargetActivity.c",
+ "Line": 17
+ },
+ "15355": {
+ "File": "_test/userprint_dblB_de_tcobs_ua/TargetActivity.c",
+ "Line": 21
+ },
+ "15356": {
+ "File": "examples/L432_inst/Core/Src/main.c",
+ "Line": 82
+ },
+ "15357": {
+ "File": "examples/L432_inst/Core/Src/main.c",
+ "Line": 84
+ },
+ "15358": {
+ "File": "examples/L432_inst/Core/Src/main.c",
+ "Line": 86
},
- "15893": {
+ "15359": {
+ "File": "examples/L432_inst/Core/Src/main.c",
+ "Line": 88
+ },
+ "15360": {
+ "File": "examples/L432_inst/Core/Src/main.c",
+ "Line": 90
+ },
+ "15401": {
"File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 475
+ "Line": 203
},
- "15910": {
- "File": "examples/DemoData_Trice/src/main.c",
- "Line": 546
+ "15621": {
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 47
},
- "15917": {
+ "15651": {
"File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 451
+ "Line": 206
},
- "15959": {
- "File": "examples/DemoPlotData_Trice/src/main.c",
- "Line": 505
+ "15679": {
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 2808
},
- "15963": {
- "File": "examples/DemoPlotData_Trice/src/main.c",
- "Line": 514
+ "15827": {
+ "File": "_test/testdata/triceCheck.c",
+ "Line": 60
},
- "15976": {
+ "15849": {
"File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 470
+ "Line": 2807
},
- "15996": {
+ "15881": {
"File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 469
+ "Line": 2800
},
- "16005": {
+ "15882": {
"File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 456
+ "Line": 203
},
- "16011": {
+ "15918": {
"File": "examples/DemoData_Trice/src/main.c",
- "Line": 514
+ "Line": 526
},
- "16014": {
+ "15932": {
"File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 455
+ "Line": 2779
},
- "16089": {
+ "15982": {
"File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 463
+ "Line": 2799
},
- "16098": {
+ "15992": {
"File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 474
+ "Line": 206
},
- "16110": {
+ "16041": {
"File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 493
+ "Line": 2790
+ },
+ "16100": {
+ "File": "examples/DemoData_Trice/src/main.c",
+ "Line": 494
},
- "16111": {
+ "16138": {
"File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 459
+ "Line": 203
},
- "16155": {
+ "16216": {
"File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 492
+ "Line": 2780
},
- "16176": {
+ "16223": {
"File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 457
+ "Line": 50
},
- "16241": {
+ "16224": {
"File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 454
+ "Line": 206
},
- "16246": {
+ "16249": {
"File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 482
+ "Line": 63
},
- "16268": {
+ "16257": {
"File": "_test/testdata/triceCheck.c",
- "Path": "_test/testdata/triceCheck.c",
- "Line": 473
+ "Line": 2791
+ },
+ "16289": {
+ "File": "examples/DemoData_Trice/src/main.c",
+ "Line": 520
},
"16326": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 77
+ "Line": 78
},
"16327": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 76
+ "Line": 77
},
"16328": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 74
+ "Line": 75
},
"16329": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 72
+ "Line": 73
},
"16330": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 69
+ "Line": 70
},
"16331": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 67
+ "Line": 68
},
"16332": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 65
+ "Line": 66
},
"16333": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 63
+ "Line": 64
},
"16334": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 61
+ "Line": 62
},
"16335": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 52
+ "Line": 53
},
"16336": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 50
+ "Line": 51
},
"16337": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 49
+ "Line": 50
},
"16338": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 48
+ "Line": 49
},
"16339": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 47
+ "Line": 48
},
"16340": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 46
+ "Line": 47
},
"16341": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 45
+ "Line": 46
},
"16342": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 44
+ "Line": 45
},
"16343": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 43
+ "Line": 44
},
"16344": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 42
+ "Line": 43
},
"16345": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 40
+ "Line": 41
},
"16346": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 39
+ "Line": 40
},
"16347": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 38
+ "Line": 39
},
"16348": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 37
+ "Line": 38
},
"16349": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 36
+ "Line": 37
},
"16350": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 35
+ "Line": 36
},
"16351": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 34
+ "Line": 35
},
"16352": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 33
+ "Line": 34
},
"16353": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 32
+ "Line": 33
},
"16354": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 31
+ "Line": 32
},
"16355": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 30
+ "Line": 31
},
"16356": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 29
+ "Line": 30
},
"16357": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 28
+ "Line": 29
},
"16358": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 27
+ "Line": 28
},
"16359": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 26
+ "Line": 27
},
"16360": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 25
+ "Line": 26
},
"16361": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 24
+ "Line": 25
},
"16362": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 23
+ "Line": 24
},
"16363": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 22
+ "Line": 23
},
"16364": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 21
+ "Line": 22
},
"16365": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 20
+ "Line": 21
},
"16366": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 19
+ "Line": 20
},
"16367": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 18
+ "Line": 19
},
"16368": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 17
+ "Line": 18
},
"16369": {
"File": "examples/exampleData/triceExamples.c",
- "Line": 12
+ "Line": 13
},
"16370": {
"File": "examples/exampleData/triceLogDiagData.c",
- "Line": 77
+ "Line": 78
},
"16371": {
"File": "examples/exampleData/triceLogDiagData.c",
- "Line": 75
+ "Line": 76
},
"16372": {
"File": "examples/exampleData/triceLogDiagData.c",
- "Line": 69
+ "Line": 70
},
"16373": {
"File": "examples/exampleData/triceLogDiagData.c",
- "Line": 67
+ "Line": 68
},
"16374": {
"File": "examples/exampleData/triceLogDiagData.c",
- "Line": 56
+ "Line": 57
},
"16375": {
"File": "examples/exampleData/triceLogDiagData.c",
- "Line": 52
+ "Line": 53
},
"16376": {
"File": "examples/exampleData/triceLogDiagData.c",
- "Line": 50
+ "Line": 51
},
"16377": {
"File": "examples/exampleData/triceLogDiagData.c",
- "Line": 46
+ "Line": 47
},
"16378": {
"File": "examples/exampleData/triceLogDiagData.c",
- "Line": 44
+ "Line": 45
},
"16379": {
"File": "examples/exampleData/triceLogDiagData.c",
- "Line": 37
+ "Line": 38
},
"16380": {
"File": "examples/exampleData/triceLogDiagData.c",
- "Line": 32
+ "Line": 33
},
"16381": {
"File": "examples/exampleData/triceLogDiagData.c",
- "Line": 26
+ "Line": 27
},
"16382": {
"File": "examples/exampleData/triceLogDiagData.c",
- "Line": 21
+ "Line": 22
},
"16383": {
"File": "examples/exampleData/triceLogDiagData.c",
- "Line": 19
- },
- "1716": {
- "File": "main.c",
- "Line": 68
- },
- "1737": {
- "File": "N3_bi/main.c",
- "Line": 88
- },
- "1861": {
- "File": "main.c",
- "Line": 22
- },
- "2001": {
- "File": "N3_bi/main.c",
- "Line": 14
- },
- "2034": {
- "File": "main.c",
- "Line": 14
- },
- "2100": {
- "File": "main.c",
- "Line": 18
- },
- "2261": {
- "File": "N2_tx/main.c",
- "Line": 50
- },
- "2859": {
- "File": "N1_tx/main.c",
- "Line": 44
- },
- "2945": {
- "File": "NodeLib/node.c",
- "Line": 658
- },
- "2968": {
- "File": "N2_tx/main.c",
- "Line": 62
- },
- "3204": {
- "File": "NodeLib/node.c",
- "Line": 676
- },
- "3310": {
- "File": "main.c",
- "Line": 18
- },
- "3448": {
- "File": "NodeLib/node.c",
- "Line": 680
- },
- "3578": {
- "File": "main.c",
- "Line": 56
- },
- "3792": {
- "File": "main.c",
- "Line": 56
- },
- "3925": {
- "File": "main.c",
- "Line": 62
- },
- "3945": {
- "File": "N3_bi/main.c",
- "Line": 102
- },
- "4017": {
- "File": "main.c",
- "Line": 14
- },
- "4208": {
- "File": "main.c",
- "Line": 50
- },
- "4364": {
- "File": "main.c",
- "Line": 14
- },
- "4381": {
- "File": "NodeLib/node.c",
- "Line": 656
- },
- "4470": {
- "File": "main.c",
- "Line": 22
- },
- "4499": {
- "File": "main.c",
- "Line": 76
- },
- "4502": {
- "File": "NodeLib/node.c",
- "Line": 678
- },
- "4557": {
- "File": "NodeLib/node.c",
- "Line": 389
- },
- "4650": {
- "File": "N3_bi/main.c",
- "Line": 50
- },
- "4818": {
- "File": "main.c",
- "Line": 62
- },
- "4972": {
- "File": "main.c",
- "Line": 22
- },
- "5017": {
- "File": "main.c",
- "Line": 22
- },
- "5054": {
- "File": "N1_tx/main.c",
- "Line": 14
- },
- "5074": {
- "File": "main.c",
- "Line": 14
- },
- "5150": {
- "File": "main.c",
- "Line": 44
- },
- "5155": {
- "File": "N1_tx/main.c",
- "Line": 62
- },
- "5460": {
- "File": "main.c",
- "Line": 18
- },
- "5517": {
- "File": "N2_tx/main.c",
- "Line": 56
- },
- "5642": {
- "File": "main.c",
- "Line": 96
- },
- "5749": {
- "File": "NodeLib/node.c",
- "Line": 654
- },
- "5768": {
- "File": "N3_bi/main.c",
- "Line": 56
- },
- "5937": {
- "File": "N2_tx/main.c",
- "Line": 14
- },
- "6059": {
- "File": "N3_bi/main.c",
- "Line": 76
- },
- "6227": {
- "File": "N1_tx/main.c",
- "Line": 50
- },
- "6278": {
- "File": "main.c",
- "Line": 44
- },
- "6365": {
- "File": "main.c",
- "Line": 18
- },
- "6394": {
- "File": "N3_bi/main.c",
- "Line": 22
- },
- "6603": {
- "File": "N2_tx/main.c",
- "Line": 44
- },
- "6779": {
- "File": "main.c",
- "Line": 18
- },
- "6812": {
- "File": "N1_tx/main.c",
- "Line": 22
- },
- "6890": {
- "File": "main.c",
- "Line": 62
- },
- "6949": {
- "File": "main.c",
- "Line": 14
- },
- "6962": {
- "File": "main.c",
- "Line": 14
- },
- "7084": {
- "File": "N1_tx/main.c",
- "Line": 56
- },
- "7145": {
- "File": "NodeLib/node.c",
- "Line": 374
- },
- "7171": {
- "File": "main.c",
- "Line": 50
- },
- "7313": {
- "File": "main.c",
- "Line": 50
- },
- "7383": {
- "File": "N3_bi/main.c",
- "Line": 62
- },
- "7431": {
- "File": "main.c",
- "Line": 56
- },
- "7522": {
- "File": "N3_bi/main.c",
- "Line": 68
- },
- "7615": {
- "File": "main.c",
- "Line": 22
- },
- "7672": {
- "File": "N2_tx/main.c",
- "Line": 18
- },
- "7709": {
- "File": "main.c",
- "Line": 22
- },
- "7794": {
- "File": "main.c",
- "Line": 14
+ "Line": 20
}
}
\ No newline at end of file
diff --git a/demoTIL.json b/demoTIL.json
index f74a77c5e..49e12d467 100644
--- a/demoTIL.json
+++ b/demoTIL.json
@@ -1,24 +1,4 @@
{
- "1000": {
- "Type": "TRice",
- "Strg": "vis_demo:%f,%f,%f\\n"
- },
- "1071": {
- "Type": "trice",
- "Strg": "log:(from node=N3_bi) from=%u phase=%u\\n"
- },
- "1101": {
- "Type": "trice",
- "Strg": "log:(from node=N1_tx) from=%u phase=%u\\n"
- },
- "1126": {
- "Type": "trice",
- "Strg": "log:from=%u phase=%u\\n"
- },
- "1219": {
- "Type": "trice",
- "Strg": "log:from=%u phase=%u\\n"
- },
"13000": {
"Type": "TRice",
"Strg": "WARNING:USARTq OverRun Error Flag is set!\\n"
@@ -76,28 +56,28 @@
"Strg": "dbg:CONFIGURATION == %d - An example configuration\\n"
},
"13014": {
- "Type": "TRice",
- "Strg": "WARNING:USARTq OverRun Error Flag is set!\\n"
+ "Type": "trice8",
+ "Strg": "dbg:CONFIGURATION == %d - An example configuration\\n"
},
"13015": {
- "Type": "TRICE_S",
- "Strg": "rx:received command:%s\\n"
+ "Type": "TRice",
+ "Strg": "msg:StartDefaultTask\\n"
},
"13016": {
- "Type": "trice8",
- "Strg": "dbg:CONFIGURATION == %d - An example configuration\\n"
+ "Type": "TRice",
+ "Strg": "msg:StartTask02:Diagnostics and TriceTransfer\\n"
},
"13017": {
- "Type": "trice8",
- "Strg": "dbg:CONFIGURATION == %d - An example configuration\\n"
+ "Type": "TRice",
+ "Strg": "WARNING:USARTq OverRun Error Flag is set!\\n"
},
"13018": {
- "Type": "trice8",
- "Strg": "dbg:CONFIGURATION == %d - An example configuration\\n"
+ "Type": "TRICE_S",
+ "Strg": "rx:received command:%s\\n"
},
"13019": {
- "Type": "TRice",
- "Strg": "msg:StartDefaultTask\\n"
+ "Type": "trice8",
+ "Strg": "dbg:CONFIGURATION == %d - An example configuration\\n"
},
"13020": {
"Type": "trice8",
@@ -108,8 +88,8 @@
"Strg": "dbg:CONFIGURATION == %d - An example configuration\\n"
},
"13022": {
- "Type": "TRice",
- "Strg": "msg:StartTask02:Diagnostics and TriceTransfer\\n"
+ "Type": "trice8",
+ "Strg": "dbg:CONFIGURATION == %d - An example configuration\\n"
},
"13023": {
"Type": "trice8",
@@ -1204,8292 +1184,8348 @@
"Strg": "SIG: %016x\\n"
},
"13296": {
- "Type": "TRICE8_F",
- "Strg": "info:FunctionNameWa"
+ "Type": "TRICE_C",
+ "Strg": "abc:all:GetState"
},
"13297": {
- "Type": "TRice8F",
- "Strg": "call:FunctionNameWb"
+ "Type": "TRICe_C",
+ "Strg": "abc:all:GetState"
},
"13298": {
- "Type": "Trice8F",
- "Strg": "call:FunctionNameWc"
+ "Type": "TRIce_C",
+ "Strg": "abc:all:GetState"
},
"13299": {
- "Type": "trice8F",
- "Strg": "call:FunctionNameWd"
+ "Type": "TRiceC",
+ "Strg": "abc:all:GetState"
},
"13300": {
- "Type": "TRICE16_F",
- "Strg": "info:FunctionNameXa"
+ "Type": "TriceC",
+ "Strg": "abc:all:GetState"
},
"13301": {
- "Type": "TRice16F",
- "Strg": "call:FunctionNameXb"
+ "Type": "triceC",
+ "Strg": "abc:all:GetState"
},
"13302": {
- "Type": "Trice16F",
- "Strg": "call:FunctionNameXc"
+ "Type": "TRICE8_C",
+ "Strg": "info:FunctionNameWa"
},
"13303": {
- "Type": "trice16F",
- "Strg": "call:FunctionNameXd"
+ "Type": "TRICe8_C",
+ "Strg": "info:FunctionNameWa"
},
"13304": {
- "Type": "TRICE32_F",
- "Strg": "info:FunctionNameYa"
+ "Type": "TRIce8_C",
+ "Strg": "info:FunctionNameWa"
},
"13305": {
- "Type": "TRice32F",
- "Strg": "rpc:FunctionNameYb"
+ "Type": "TRice8C",
+ "Strg": "call:FunctionNameWb"
},
"13306": {
- "Type": "Trice32F",
- "Strg": "rpc:FunctionNameYc"
+ "Type": "Trice8C",
+ "Strg": "call:FunctionNameWc"
},
"13307": {
- "Type": "trice32F",
- "Strg": "call:FunctionNameYd"
+ "Type": "trice8C",
+ "Strg": "call:FunctionNameWd"
},
"13308": {
- "Type": "TRICE64_F",
- "Strg": "info:FunctionNameZa"
+ "Type": "trice8C",
+ "Strg": "call:FunctionNameWd"
},
"13309": {
- "Type": "TRice64F",
- "Strg": "call:FunctionNameZb"
+ "Type": "trice8C",
+ "Strg": "call:FunctionNameWd"
},
"13310": {
- "Type": "Trice64F",
- "Strg": "RPC:FunctionNameZc"
+ "Type": "trice8C",
+ "Strg": "call:FunctionNameWd"
},
"13311": {
- "Type": "trice64F",
- "Strg": "RPC:FunctionNameZd"
+ "Type": "trice8C",
+ "Strg": "call:FunctionNameWd"
},
"13312": {
- "Type": "TRiceS",
- "Strg": "msg:Hi %s!\\n"
+ "Type": "TRICE16_C",
+ "Strg": "info:FunctionNameXa"
},
"13313": {
- "Type": "TriceS",
- "Strg": "msg:Hi %s!\\n"
+ "Type": "TRICe16_C",
+ "Strg": "info:FunctionNameXa"
},
"13314": {
- "Type": "triceS",
- "Strg": "msg:Hi %s!\\n"
+ "Type": "TRIce16_C",
+ "Strg": "info:FunctionNameXa"
},
"13315": {
- "Type": "TRiceN",
- "Strg": "msg:Hi %s!\\n"
+ "Type": "TRice16C",
+ "Strg": "call:FunctionNameXb"
},
"13316": {
- "Type": "TriceN",
- "Strg": "msg:Hi %s!\\n"
+ "Type": "Trice16C",
+ "Strg": "call:FunctionNameXc"
},
"13317": {
- "Type": "triceN",
- "Strg": "msg:Hi %s!\\n"
+ "Type": "trice16C",
+ "Strg": "call:FunctionNameXd"
},
"13318": {
- "Type": "TRICE_S",
- "Strg": "sig:TRICE_S=%s\\n"
+ "Type": "trice16C",
+ "Strg": "call:FunctionNameXd"
},
"13319": {
- "Type": "TRICE_N",
- "Strg": "sig:TRICE_N=%s\\n"
+ "Type": "trice16C",
+ "Strg": "call:FunctionNameXd"
},
"13320": {
- "Type": "TRICE_S",
- "Strg": "sig:TRICE_S=%s\\n"
+ "Type": "trice16C",
+ "Strg": "call:FunctionNameXd"
},
"13321": {
- "Type": "TRICE_N",
- "Strg": "sig:TRICE_N=%s\\n"
+ "Type": "trice16C",
+ "Strg": "call:FunctionNameXd"
},
"13322": {
- "Type": "TRICE_S",
- "Strg": "sig:TRICE_S=%s\\n"
+ "Type": "TRICE32_C",
+ "Strg": "info:FunctionNameYa"
},
"13323": {
- "Type": "TRICE_N",
- "Strg": "sig:TRICE_N=%s\\n"
+ "Type": "TRICe32_C",
+ "Strg": "info:FunctionNameYa"
},
"13324": {
- "Type": "triceS",
- "Strg": "sig:triceS=%s\\n"
+ "Type": "TRIce32_C",
+ "Strg": "info:FunctionNameYa"
},
"13325": {
- "Type": "triceN",
- "Strg": "sig:triceN=%s\\n"
+ "Type": "TRIce32_C",
+ "Strg": "info:FunctionNameYa"
},
"13326": {
- "Type": "TriceS",
- "Strg": "sig:TriceS=%s\\n"
+ "Type": "TRIce32_C",
+ "Strg": "info:FunctionNameYa"
},
"13327": {
- "Type": "TriceN",
- "Strg": "sig:TriceN=%s\\n"
+ "Type": "TRIce32_C",
+ "Strg": "info:FunctionNameYa"
},
"13328": {
- "Type": "TRiceS",
- "Strg": "sig:TRiceS=%s\\n"
+ "Type": "TRIce32_C",
+ "Strg": "info:FunctionNameYa"
},
"13329": {
- "Type": "TRiceN",
- "Strg": "sig:TRiceN=%s\\n"
+ "Type": "TRice32C",
+ "Strg": "rpc:FunctionNameYb"
},
"13330": {
- "Type": "trice16",
- "Strg": "att: line %u\\n"
+ "Type": "Trice32C",
+ "Strg": "rpc:FunctionNameYc"
},
"13331": {
- "Type": "TRICE",
- "Strg": "MSG:1/11 = %g\\n"
+ "Type": "trice32C",
+ "Strg": "call:FunctionNameYd"
},
"13332": {
- "Type": "TRice",
- "Strg": "msg:x = %g = %d.%03d, %d.%03d\\n"
+ "Type": "TRICE64_C",
+ "Strg": "info:FunctionNameZa"
},
"13333": {
- "Type": "trice16",
- "Strg": "att: line %u\\n"
+ "Type": "TRICe64_C",
+ "Strg": "info:FunctionNameZa"
},
"13334": {
- "Type": "TRice",
- "Strg": "sig:Integer (indent, base, sign) - see https://yourbasic.org/golang/fmt-printf-reference-cheat-sheet/\\n"
+ "Type": "TRIce64_C",
+ "Strg": "info:FunctionNameZa"
},
"13335": {
- "Type": "TRice",
- "Strg": "rd: 15 \t%d \tBase 10\\n"
+ "Type": "TRice64C",
+ "Strg": "call:FunctionNameZb"
},
"13336": {
- "Type": "TRice",
- "Strg": "rd: +15 \t%+d \tAlways show sign\\n"
+ "Type": "Trice64C",
+ "Strg": "RPC:FunctionNameZc"
},
"13337": {
- "Type": "TRice",
- "Strg": "rd: 15\t%4d \tPad with spaces (width 4, right justified)\\n"
+ "Type": "trice64C",
+ "Strg": "RPC:FunctionNameZd"
},
"13338": {
- "Type": "TRice",
- "Strg": "rd: 15\t%-4d\tPad with spaces (width 4, left justified)\\n"
+ "Type": "trice64C",
+ "Strg": "RPC:FunctionNameZd"
},
"13339": {
- "Type": "TRice",
- "Strg": "rd: 0015\t%04d\tPad with zeroes (width 4)\\n"
+ "Type": "trice64C",
+ "Strg": "RPC:FunctionNameZd"
},
"13340": {
- "Type": "TRice",
- "Strg": "rd: 1111 \t%b \tBase 2\\n"
+ "Type": "trice64C",
+ "Strg": "RPC:FunctionNameZd"
},
"13341": {
- "Type": "TRice",
- "Strg": "rd: 17 \t%o \tBase 8\\n"
+ "Type": "trice64C",
+ "Strg": "RPC:FunctionNameZd"
},
"13342": {
- "Type": "TRice",
- "Strg": "rd: f \t%x \tBase 16, lowercase\\n"
+ "Type": "TRICE8_F",
+ "Strg": "info:FunctionNameWa"
},
"13343": {
- "Type": "TRice",
- "Strg": "rd: F \t%X \tBase 16, uppercase\\n"
+ "Type": "TRice8F",
+ "Strg": "call:FunctionNameWb"
},
"13344": {
- "Type": "TRice",
- "Strg": "rd: 0xf \t%#x \tBase 16, with leading 0x\\n"
+ "Type": "Trice8F",
+ "Strg": "call:FunctionNameWc"
},
"13345": {
- "Type": "trice16",
- "Strg": "att: line %u\\n"
+ "Type": "trice8F",
+ "Strg": "call:FunctionNameWd"
},
"13346": {
- "Type": "trice",
- "Strg": "sig:Character (quoted, Unicode)\\n"
+ "Type": "TRICE16_F",
+ "Strg": "info:FunctionNameXa"
},
"13347": {
- "Type": "trice",
- "Strg": "rd: A \t%c \tCharacter\\n"
+ "Type": "TRice16F",
+ "Strg": "call:FunctionNameXb"
},
"13348": {
- "Type": "trice",
- "Strg": "rd: 'A' \t%q \tQuoted character\\n"
+ "Type": "Trice16F",
+ "Strg": "call:FunctionNameXc"
},
"13349": {
- "Type": "trice",
- "Strg": "rd: U+0041 \t%U \tUnicode\\n"
+ "Type": "trice16F",
+ "Strg": "call:FunctionNameXd"
},
"13350": {
- "Type": "trice",
- "Strg": "rd: U+0041 'A' \t%#U \tUnicode with character\\n"
+ "Type": "TRICE32_F",
+ "Strg": "info:FunctionNameYa"
},
"13351": {
+ "Type": "TRice32F",
+ "Strg": "rpc:FunctionNameYb"
+ },
+ "13352": {
+ "Type": "Trice32F",
+ "Strg": "rpc:FunctionNameYc"
+ },
+ "13353": {
+ "Type": "trice32F",
+ "Strg": "call:FunctionNameYd"
+ },
+ "13354": {
+ "Type": "TRICE64_F",
+ "Strg": "info:FunctionNameZa"
+ },
+ "13355": {
+ "Type": "TRice64F",
+ "Strg": "call:FunctionNameZb"
+ },
+ "13356": {
+ "Type": "Trice64F",
+ "Strg": "RPC:FunctionNameZc"
+ },
+ "13357": {
+ "Type": "trice64F",
+ "Strg": "RPC:FunctionNameZd"
+ },
+ "13358": {
+ "Type": "TRiceS",
+ "Strg": "msg:Hi %s!\\n"
+ },
+ "13359": {
+ "Type": "TriceS",
+ "Strg": "msg:Hi %s!\\n"
+ },
+ "13360": {
+ "Type": "triceS",
+ "Strg": "msg:Hi %s!\\n"
+ },
+ "13361": {
+ "Type": "TRiceN",
+ "Strg": "msg:Hi %s!\\n"
+ },
+ "13362": {
+ "Type": "TriceN",
+ "Strg": "msg:Hi %s!\\n"
+ },
+ "13363": {
+ "Type": "triceN",
+ "Strg": "msg:Hi %s!\\n"
+ },
+ "13364": {
+ "Type": "TRICE_S",
+ "Strg": "sig:TRICE_S=%s\\n"
+ },
+ "13365": {
+ "Type": "TRICE_N",
+ "Strg": "sig:TRICE_N=%s\\n"
+ },
+ "13366": {
+ "Type": "TRICE_S",
+ "Strg": "sig:TRICE_S=%s\\n"
+ },
+ "13367": {
+ "Type": "TRICE_N",
+ "Strg": "sig:TRICE_N=%s\\n"
+ },
+ "13368": {
+ "Type": "TRICE_S",
+ "Strg": "sig:TRICE_S=%s\\n"
+ },
+ "13369": {
+ "Type": "TRICE_N",
+ "Strg": "sig:TRICE_N=%s\\n"
+ },
+ "13370": {
+ "Type": "triceS",
+ "Strg": "sig:triceS=%s\\n"
+ },
+ "13371": {
+ "Type": "triceN",
+ "Strg": "sig:triceN=%s\\n"
+ },
+ "13372": {
+ "Type": "TriceS",
+ "Strg": "sig:TriceS=%s\\n"
+ },
+ "13373": {
+ "Type": "TriceN",
+ "Strg": "sig:TriceN=%s\\n"
+ },
+ "13374": {
+ "Type": "TRiceS",
+ "Strg": "sig:TRiceS=%s\\n"
+ },
+ "13375": {
+ "Type": "TRiceN",
+ "Strg": "sig:TRiceN=%s\\n"
+ },
+ "13376": {
+ "Type": "trice16",
+ "Strg": "att: line %u\\n"
+ },
+ "13377": {
+ "Type": "TRICE",
+ "Strg": "MSG:1/11 = %g\\n"
+ },
+ "13378": {
+ "Type": "TRice",
+ "Strg": "msg:x = %g = %d.%03d, %d.%03d\\n"
+ },
+ "13379": {
+ "Type": "trice16",
+ "Strg": "att: line %u\\n"
+ },
+ "13380": {
+ "Type": "TRice",
+ "Strg": "sig:Integer (indent, base, sign) - see https://yourbasic.org/golang/fmt-printf-reference-cheat-sheet/\\n"
+ },
+ "13381": {
+ "Type": "TRice",
+ "Strg": "rd: 15 \t%d \tBase 10\\n"
+ },
+ "13382": {
+ "Type": "TRice",
+ "Strg": "rd: +15 \t%+d \tAlways show sign\\n"
+ },
+ "13383": {
+ "Type": "TRice",
+ "Strg": "rd: 15\t%4d \tPad with spaces (width 4, right justified)\\n"
+ },
+ "13384": {
+ "Type": "TRice",
+ "Strg": "rd: 15\t%-4d\tPad with spaces (width 4, left justified)\\n"
+ },
+ "13385": {
+ "Type": "TRice",
+ "Strg": "rd: 0015\t%04d\tPad with zeroes (width 4)\\n"
+ },
+ "13386": {
+ "Type": "TRice",
+ "Strg": "rd: 1111 \t%b \tBase 2\\n"
+ },
+ "13387": {
+ "Type": "TRice",
+ "Strg": "rd: 17 \t%o \tBase 8\\n"
+ },
+ "13388": {
+ "Type": "TRice",
+ "Strg": "rd: f \t%x \tBase 16, lowercase\\n"
+ },
+ "13389": {
+ "Type": "TRice",
+ "Strg": "rd: F \t%X \tBase 16, uppercase\\n"
+ },
+ "13390": {
+ "Type": "TRice",
+ "Strg": "rd: 0xf \t%#x \tBase 16, with leading 0x\\n"
+ },
+ "13391": {
+ "Type": "trice16",
+ "Strg": "att: line %u\\n"
+ },
+ "13392": {
+ "Type": "trice",
+ "Strg": "sig:Character (quoted, Unicode)\\n"
+ },
+ "13393": {
+ "Type": "trice",
+ "Strg": "rd: A \t%c \tCharacter\\n"
+ },
+ "13394": {
+ "Type": "trice",
+ "Strg": "rd: 'A' \t%q \tQuoted character\\n"
+ },
+ "13395": {
+ "Type": "trice",
+ "Strg": "rd: U+0041 \t%U \tUnicode\\n"
+ },
+ "13396": {
+ "Type": "trice",
+ "Strg": "rd: U+0041 'A' \t%#U \tUnicode with character\\n"
+ },
+ "13397": {
"Type": "trice",
"Strg": "sig:Boolean (true/false)\\n"
},
- "13352": {
+ "13398": {
"Type": "trice",
"Strg": "rd:Use %%t to format a boolean as true (%t) or false (%t).\\n"
},
- "13353": {
+ "13399": {
"Type": "trice",
"Strg": "sig:Pointer (hex)\\n"
},
- "13354": {
+ "13400": {
"Type": "trice8",
"Strg": "rd:Use %%p to format a pointer in base 16 notation with leading 0x. (%p)\\n"
},
- "13355": {
+ "13401": {
"Type": "trice16",
"Strg": "rd:Use %%p to format a pointer in base 16 notation with leading 0x. (%p)\\n"
},
- "13356": {
+ "13402": {
"Type": "trice32",
"Strg": "rd:Use %%p to format a pointer in base 16 notation with leading 0x. (%p)\\n"
},
- "13357": {
+ "13403": {
"Type": "trice64",
"Strg": "rd:Use %%p to format a pointer in base 16 notation with leading 0x. (%p)\\n"
},
- "13358": {
+ "13404": {
"Type": "trice",
"Strg": "rd:Use %%p to format a pointer in base 16 notation with leading 0x. (%p)\\n"
},
- "13359": {
+ "13405": {
"Type": "trice16",
"Strg": "att: line %u\\n"
},
- "13360": {
+ "13406": {
"Type": "trice",
"Strg": "sig:Float (indent, precision, scientific notation)\\n"
},
- "13361": {
+ "13407": {
"Type": "trice",
"Strg": "rd: 1.234560e+02\t\t%e \t%%e Scientific notation\\n"
},
- "13362": {
+ "13408": {
"Type": "trice",
"Strg": "rd: 123.456000\t\t%f \t%%f Decimal point, no exponent\\n"
},
- "13363": {
+ "13409": {
"Type": "trice",
"Strg": "rd: 123.46\t\t\t%.2f\t\t%%.2f Default width, precision 2\\n"
},
- "13364": {
+ "13410": {
"Type": "trice",
"Strg": "rd: ␣␣123.46\t\t%8.2f\t%%8.2f Width 8, precision 2\\n"
},
- "13365": {
+ "13411": {
"Type": "trice",
"Strg": "rd: 123.456\t\t%g\t\t%%g Exponent as needed, necessary digits only\\n"
},
- "13366": {
+ "13412": {
"Type": "trice",
"Strg": "sig:Double (indent, precision, scientific notation)\\n"
},
- "13367": {
+ "13413": {
"Type": "trice64",
"Strg": "rd: 1.234560e+02\t\t%e \t%%e Scientific notation\\n"
},
- "13368": {
+ "13414": {
"Type": "trice64",
"Strg": "rd: 123.456000\t\t%f \t%%f Decimal point, no exponent\\n"
},
- "13369": {
+ "13415": {
"Type": "trice64",
"Strg": "rd: 123.46\t\t\t%.2f \t%%.2f Default width, precision 2\\n"
},
- "13370": {
+ "13416": {
"Type": "trice64",
"Strg": "rd: ␣␣123.46\t\t%8.2f \t%%8.2f Width 8, precision 2\\n"
},
- "13371": {
+ "13417": {
"Type": "trice64",
"Strg": "rd: 123.456\t\t%g\t\t%%g Exponent as needed, necessary digits only\\n"
},
- "13372": {
+ "13418": {
"Type": "trice",
"Strg": "sig:String or byte slice (quote, indent, hex)\\n"
},
- "13373": {
+ "13419": {
"Type": "triceS",
"Strg": "rd: café \t\t\t%s\t\tPlain string\\n"
},
- "13374": {
+ "13420": {
"Type": "triceS",
"Strg": "rd: ␣␣café \t\t%6s \t\tWidth 6, right justify\\n"
},
- "13375": {
+ "13421": {
"Type": "triceS",
"Strg": "rd: café␣␣ \t\t%-6s \t\tWidth 6, left justify\\n"
},
- "13376": {
+ "13422": {
"Type": "triceS",
"Strg": "rd: \\\"café\\\" \t\t%q\t\tQuoted string\\n"
},
- "13377": {
+ "13423": {
"Type": "triceS",
"Strg": "rd: 636166c3a9 \t\t%x\tHex dump of byte values\\n"
},
- "13378": {
+ "13424": {
"Type": "triceS",
"Strg": "rd: 63 61 66 c3 a9 \t% x\tHex dump with spaces\\n"
},
- "13379": {
+ "13425": {
"Type": "trice16",
"Strg": "att: line %u\\n"
},
- "13380": {
+ "13426": {
"Type": "TRice",
"Strg": "info:12 default bit width values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 32-bit stamp.\\n"
},
- "13381": {
+ "13427": {
"Type": "Trice",
"Strg": "info:12 default bit width values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 16-bit stamp.\\n"
},
- "13382": {
+ "13428": {
"Type": "trice",
"Strg": "info:12 default bit width values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and without stamp.\\n"
},
- "13383": {
+ "13429": {
"Type": "TRice",
"Strg": "info:12 default bit width values %d, %zu, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 32-bit stamp.\\n"
},
- "13384": {
+ "13430": {
"Type": "Trice",
"Strg": "info:12 default bit width values %d, %lu, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 16-bit stamp.\\n"
},
- "13385": {
+ "13431": {
"Type": "trice",
"Strg": "info:12 default bit width values %d, %llu, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and without stamp.\\n"
},
- "13386": {
+ "13432": {
"Type": "trice16",
"Strg": "att: line %u\\n"
},
- "13387": {
+ "13433": {
"Type": "trice",
"Strg": "sig:Runtime generated strings\\n"
},
- "13388": {
+ "13434": {
"Type": "TRICE32",
"Strg": "dbg:len=%u:"
},
- "13389": {
+ "13435": {
"Type": "TRICE_S",
"Strg": "sig:%s\\n"
},
- "13390": {
+ "13436": {
"Type": "TRICE32",
"Strg": "dbg:len=%u:"
},
- "13391": {
+ "13437": {
"Type": "TRICE_S",
"Strg": "sig:%s\\n"
},
- "13392": {
+ "13438": {
"Type": "TRICE32",
"Strg": "dbg:len=%u: "
},
- "13393": {
+ "13439": {
"Type": "TRICE_S",
"Strg": "sig:%s\\n"
},
- "13394": {
+ "13440": {
"Type": "TRICE32",
"Strg": "dbg:len=%u: "
},
- "13395": {
+ "13441": {
"Type": "TRICE_S",
"Strg": "sig:%s\\n"
},
- "13396": {
+ "13442": {
"Type": "TRICE32",
"Strg": "dbg:len=%u: "
},
- "13397": {
+ "13443": {
"Type": "TRICE_S",
"Strg": "sig:%s\\n"
},
- "13398": {
+ "13444": {
"Type": "trice",
"Strg": "rd:%E (%%E)\\n"
},
- "13399": {
+ "13445": {
"Type": "trice",
"Strg": "rd:%F (%%F)\\n"
},
- "13400": {
+ "13446": {
"Type": "trice",
"Strg": "rd:%G (%%G)\\n"
},
- "13401": {
+ "13447": {
"Type": "trice64",
"Strg": "rd:%E (%%E)\\n"
},
- "13402": {
+ "13448": {
"Type": "trice64",
"Strg": "rd:%F (%%F)\\n"
},
- "13403": {
+ "13449": {
"Type": "trice64",
"Strg": "rd:%G (%%G)\\n"
},
- "13404": {
+ "13450": {
"Type": "trice",
"Strg": "rd:%e (%%e)\\n"
},
- "13405": {
+ "13451": {
"Type": "trice",
"Strg": "rd:%f (%%f)\\n"
},
- "13406": {
+ "13452": {
"Type": "trice",
"Strg": "rd:%g (%%g)\\n"
},
- "13407": {
+ "13453": {
"Type": "trice64",
"Strg": "rd:%e (%%e)\\n"
},
- "13408": {
+ "13454": {
"Type": "trice64",
"Strg": "rd:%f (%%f)\\n"
},
- "13409": {
+ "13455": {
"Type": "trice64",
"Strg": "rd:%g (%%g)\\n"
},
- "13410": {
+ "13456": {
"Type": "trice32",
"Strg": "msg:%u (%%u)\\n"
},
- "13411": {
+ "13457": {
"Type": "trice32",
"Strg": "msg:%b (%%b)\\n"
},
- "13412": {
+ "13458": {
"Type": "trice32",
"Strg": "msg:%o (%%o)\\n"
},
- "13413": {
+ "13459": {
"Type": "trice32",
"Strg": "msg:%O (%%O)\\n"
},
- "13414": {
+ "13460": {
"Type": "trice32",
"Strg": "msg:%X (%%X)\\n"
},
- "13415": {
+ "13461": {
"Type": "trice32",
"Strg": "msg:%x (%%x)\\n"
},
- "13416": {
+ "13462": {
"Type": "trice32",
"Strg": "msg:%d (%%d)\\n"
},
- "13417": {
+ "13463": {
"Type": "trice64",
"Strg": "msg:%u (%%u)\\n"
},
- "13418": {
+ "13464": {
"Type": "trice64",
"Strg": "msg:%b (%%b)\\n"
},
- "13419": {
+ "13465": {
"Type": "trice64",
"Strg": "msg:%o (%%o)\\n"
},
- "13420": {
+ "13466": {
"Type": "trice64",
"Strg": "msg:%O (%%O)\\n"
},
- "13421": {
+ "13467": {
"Type": "trice64",
"Strg": "msg:%X (%%X)\\n"
},
- "13422": {
+ "13468": {
"Type": "trice64",
"Strg": "msg:%x (%%x)\\n"
},
- "13423": {
+ "13469": {
"Type": "TRice",
"Strg": "value=%d\\n"
},
- "13424": {
+ "13470": {
"Type": "Trice",
"Strg": "value=%d\\n"
},
- "13425": {
+ "13471": {
"Type": "trice",
"Strg": "value=%d\\n"
},
- "13426": {
+ "13472": {
"Type": "TRice8",
"Strg": "value=%d\\n"
},
- "13427": {
+ "13473": {
"Type": "Trice8",
"Strg": "value=%d\\n"
},
- "13428": {
+ "13474": {
"Type": "trice8",
"Strg": "value=%d\\n"
},
- "13429": {
+ "13475": {
"Type": "TRice16",
"Strg": "value=%d\\n"
},
- "13430": {
+ "13476": {
"Type": "Trice16",
"Strg": "value=%d\\n"
},
- "13431": {
+ "13477": {
"Type": "trice16",
"Strg": "value=%d\\n"
},
- "13432": {
+ "13478": {
"Type": "TRice32",
"Strg": "value=%d\\n"
},
- "13433": {
+ "13479": {
"Type": "Trice32",
"Strg": "value=%d\\n"
},
- "13434": {
+ "13480": {
"Type": "trice32",
"Strg": "value=%d\\n"
},
- "13435": {
+ "13481": {
"Type": "TRice64",
"Strg": "value=%d\\n"
},
- "13436": {
+ "13482": {
"Type": "Trice64",
"Strg": "value=%d\\n"
},
- "13437": {
+ "13483": {
"Type": "trice64",
"Strg": "value=%d\\n"
},
- "13438": {
+ "13484": {
"Type": "TRice_1",
"Strg": "value=%d\\n"
},
- "13439": {
+ "13485": {
"Type": "Trice_1",
"Strg": "value=%d\\n"
},
- "13440": {
+ "13486": {
"Type": "trice_1",
"Strg": "value=%d\\n"
},
- "13441": {
+ "13487": {
"Type": "TRice8_1",
"Strg": "value=%d\\n"
},
- "13442": {
+ "13488": {
"Type": "Trice8_1",
"Strg": "value=%d\\n"
},
- "13443": {
+ "13489": {
"Type": "trice8_1",
"Strg": "value=%d\\n"
},
- "13444": {
+ "13490": {
"Type": "TRice16_1",
"Strg": "value=%d\\n"
},
- "13445": {
+ "13491": {
"Type": "Trice16_1",
"Strg": "value=%d\\n"
},
- "13446": {
+ "13492": {
"Type": "trice16_1",
"Strg": "value=%d\\n"
},
- "13447": {
+ "13493": {
"Type": "TRice32_1",
"Strg": "value=%d\\n"
},
- "13448": {
+ "13494": {
"Type": "Trice32_1",
"Strg": "value=%d\\n"
},
- "13449": {
+ "13495": {
"Type": "trice32_1",
"Strg": "value=%d\\n"
},
- "13450": {
+ "13496": {
"Type": "TRice64_1",
"Strg": "value=%d\\n"
},
- "13451": {
+ "13497": {
"Type": "Trice64_1",
"Strg": "value=%d\\n"
},
- "13452": {
+ "13498": {
"Type": "trice64_1",
"Strg": "value=%d\\n"
},
- "13453": {
+ "13499": {
"Type": "TRice",
"Strg": "no value\\n"
},
- "13454": {
+ "13500": {
"Type": "Trice",
"Strg": "no value\\n"
},
- "13455": {
+ "13501": {
"Type": "trice",
"Strg": "no value\\n"
},
- "13456": {
+ "13502": {
"Type": "TRice8",
"Strg": "no value\\n"
},
- "13457": {
+ "13503": {
"Type": "Trice8",
"Strg": "no value\\n"
},
- "13458": {
+ "13504": {
"Type": "trice8",
"Strg": "no value\\n"
},
- "13459": {
+ "13505": {
"Type": "TRice16",
"Strg": "no value\\n"
},
- "13460": {
+ "13506": {
"Type": "Trice16",
"Strg": "no value\\n"
},
- "13461": {
+ "13507": {
"Type": "trice16",
"Strg": "no value\\n"
},
- "13462": {
+ "13508": {
"Type": "TRice32",
"Strg": "no value\\n"
},
- "13463": {
+ "13509": {
"Type": "Trice32",
"Strg": "no value\\n"
},
- "13464": {
+ "13510": {
"Type": "trice32",
"Strg": "no value\\n"
},
- "13465": {
+ "13511": {
"Type": "TRice64",
"Strg": "no value\\n"
},
- "13466": {
+ "13512": {
"Type": "Trice64",
"Strg": "no value\\n"
},
- "13467": {
+ "13513": {
"Type": "trice64",
"Strg": "no value\\n"
},
- "13468": {
+ "13514": {
"Type": "TRice_0",
"Strg": "no value\\n"
},
- "13469": {
+ "13515": {
"Type": "Trice_0",
"Strg": "no value\\n"
},
- "13470": {
+ "13516": {
"Type": "trice_0",
"Strg": "no value\\n"
},
- "13471": {
+ "13517": {
"Type": "TRice8_0",
"Strg": "no value\\n"
},
- "13472": {
+ "13518": {
"Type": "Trice8_0",
"Strg": "no value\\n"
},
- "13473": {
+ "13519": {
"Type": "trice8_0",
"Strg": "no value\\n"
},
- "13474": {
+ "13520": {
"Type": "TRice16_0",
"Strg": "no value\\n"
},
- "13475": {
+ "13521": {
"Type": "Trice16_0",
"Strg": "no value\\n"
},
- "13476": {
+ "13522": {
"Type": "trice16_0",
"Strg": "no value\\n"
},
- "13477": {
+ "13523": {
"Type": "TRice32_0",
"Strg": "no value\\n"
},
- "13478": {
+ "13524": {
"Type": "Trice32_0",
"Strg": "no value\\n"
},
- "13479": {
+ "13525": {
"Type": "trice32_0",
"Strg": "no value\\n"
},
- "13480": {
+ "13526": {
"Type": "TRice64_0",
"Strg": "no value\\n"
},
- "13481": {
+ "13527": {
"Type": "Trice64_0",
"Strg": "no value\\n"
},
- "13482": {
+ "13528": {
"Type": "trice64_0",
"Strg": "no value\\n"
},
- "13483": {
+ "13529": {
"Type": "TRice0",
"Strg": "no value\\n"
},
- "13484": {
+ "13530": {
"Type": "Trice0",
"Strg": "no value\\n"
},
- "13485": {
+ "13531": {
"Type": "trice0",
"Strg": "no value\\n"
},
- "13486": {
+ "13532": {
"Type": "TRice",
"Strg": "no value\\n"
},
- "13487": {
+ "13533": {
"Type": "Trice",
"Strg": "no value\\n"
},
- "13488": {
+ "13534": {
"Type": "trice",
"Strg": "no value\\n"
},
- "13489": {
+ "13535": {
"Type": "TRice",
"Strg": "info:This is a message with one value %d and a 32-bit stamp.\\n"
},
- "13490": {
+ "13536": {
"Type": "Trice",
"Strg": "info:This is a message with one value %d and a 16-bit stamp.\\n"
},
- "13491": {
+ "13537": {
"Type": "trice",
"Strg": "info:This is a message with one value %d and without stamp.\\n"
},
- "13492": {
+ "13538": {
"Type": "TRICE",
"Strg": "info:This is a message without values and a 32-bit stamp.\\n"
},
- "13493": {
+ "13539": {
"Type": "TRICE",
"Strg": "info:This is a message without values and a 16-bit stamp.\\n"
},
- "13494": {
+ "13540": {
"Type": "TRICE",
"Strg": "info:This is a message without values and without stamp.\\n"
},
- "13495": {
+ "13541": {
"Type": "TRICE",
"Strg": "info:This is a message with one value %d and a 32-bit stamp.\\n"
},
- "13496": {
+ "13542": {
"Type": "TRICE",
"Strg": "info:This is a message with one value %d and a 16-bit stamp.\\n"
},
- "13497": {
+ "13543": {
"Type": "TRICE",
"Strg": "info:This is a message with one value %d and without stamp.\\n"
},
- "13498": {
+ "13544": {
"Type": "TRICE",
"Strg": "info:12 values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 32-bit stamp.\\n"
},
- "13499": {
+ "13545": {
"Type": "TRICE",
"Strg": "info:12 values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 16-bit stamp.\\n"
},
- "13500": {
+ "13546": {
"Type": "TRICE",
"Strg": "info:12 values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and without stamp.\\n"
},
- "13501": {
+ "13547": {
"Type": "TRICE32",
"Strg": "info:12 values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 32-bit stamp.\\n"
},
- "13502": {
+ "13548": {
"Type": "TRICE32",
"Strg": "info:12 values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 16-bit stamp.\\n"
},
- "13503": {
+ "13549": {
"Type": "TRICE32",
"Strg": "info:12 values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and without stamp.\\n"
},
- "13504": {
+ "13550": {
"Type": "TRICE8",
"Strg": "msg:value=%u\\n"
},
- "13505": {
+ "13551": {
"Type": "TRICE8_1",
"Strg": "msg:value=%u\\n"
},
- "13506": {
+ "13552": {
"Type": "TRICE8",
"Strg": "msg:value=%u\\n"
},
- "13507": {
+ "13553": {
"Type": "TRICE8_1",
"Strg": "msg:value=%u\\n"
},
- "13508": {
+ "13554": {
"Type": "TRICE8",
"Strg": "msg:value=%u\\n"
},
- "13509": {
+ "13555": {
"Type": "TRICE8_1",
"Strg": "msg:value=%u\\n"
},
- "13510": {
+ "13556": {
"Type": "trice8",
"Strg": "msg:value=%u\\n"
},
- "13511": {
+ "13557": {
"Type": "trice8_1",
"Strg": "msg:value=%u\\n"
},
- "13512": {
+ "13558": {
"Type": "Trice8",
"Strg": "msg:value=%u\\n"
},
- "13513": {
+ "13559": {
"Type": "Trice8_1",
"Strg": "msg:value=%u\\n"
},
- "13514": {
+ "13560": {
"Type": "TRice8",
"Strg": "msg:value=%u\\n"
},
- "13515": {
+ "13561": {
"Type": "TRice8_1",
"Strg": "msg:value=%u\\n"
},
- "13516": {
+ "13562": {
"Type": "TRICE16",
"Strg": "msg:value=%u\\n"
},
- "13517": {
+ "13563": {
"Type": "TRICE16_1",
"Strg": "msg:value=%u\\n"
},
- "13518": {
+ "13564": {
"Type": "TRICE16",
"Strg": "msg:value=%u\\n"
},
- "13519": {
+ "13565": {
"Type": "TRICE16_1",
"Strg": "msg:value=%u\\n"
},
- "13520": {
+ "13566": {
"Type": "TRICE16",
"Strg": "msg:value=%u\\n"
},
- "13521": {
+ "13567": {
"Type": "TRICE16_1",
"Strg": "msg:value=%u\\n"
},
- "13522": {
+ "13568": {
"Type": "trice16",
"Strg": "msg:value=%u\\n"
},
- "13523": {
+ "13569": {
"Type": "trice16_1",
"Strg": "msg:value=%u\\n"
},
- "13524": {
+ "13570": {
"Type": "Trice16",
"Strg": "msg:value=%u\\n"
},
- "13525": {
+ "13571": {
"Type": "Trice16_1",
"Strg": "msg:value=%u\\n"
},
- "13526": {
+ "13572": {
"Type": "TRice16",
"Strg": "msg:value=%u\\n"
},
- "13527": {
+ "13573": {
"Type": "TRice16_1",
"Strg": "msg:value=%u\\n"
},
- "13528": {
+ "13574": {
"Type": "TRICE32",
"Strg": "msg:value=%u\\n"
},
- "13529": {
+ "13575": {
"Type": "TRICE32_1",
"Strg": "msg:value=%u\\n"
},
- "13530": {
+ "13576": {
"Type": "TRICE32",
"Strg": "msg:value=%u\\n"
},
- "13531": {
+ "13577": {
"Type": "TRICE32_1",
"Strg": "msg:value=%u\\n"
},
- "13532": {
+ "13578": {
"Type": "TRICE32",
"Strg": "msg:value=%u\\n"
},
- "13533": {
+ "13579": {
"Type": "TRICE32_1",
"Strg": "msg:value=%u\\n"
},
- "13534": {
+ "13580": {
"Type": "trice32",
"Strg": "msg:value=%u\\n"
},
- "13535": {
+ "13581": {
"Type": "trice32_1",
"Strg": "msg:value=%u\\n"
},
- "13536": {
+ "13582": {
"Type": "Trice32",
"Strg": "msg:value=%u\\n"
},
- "13537": {
+ "13583": {
"Type": "Trice32_1",
"Strg": "msg:value=%u\\n"
},
- "13538": {
+ "13584": {
"Type": "TRice32",
"Strg": "msg:value=%u\\n"
},
- "13539": {
+ "13585": {
"Type": "TRice32_1",
"Strg": "msg:value=%u\\n"
},
- "13540": {
+ "13586": {
"Type": "TRICE64",
"Strg": "msg:value=%u\\n"
},
- "13541": {
+ "13587": {
"Type": "TRICE64_1",
"Strg": "msg:value=%u\\n"
},
- "13542": {
+ "13588": {
"Type": "TRICE64",
"Strg": "msg:value=%u\\n"
},
- "13543": {
+ "13589": {
"Type": "TRICE64_1",
"Strg": "msg:value=%u\\n"
},
- "13544": {
+ "13590": {
"Type": "TRICE64",
"Strg": "msg:value=%u\\n"
},
- "13545": {
+ "13591": {
"Type": "TRICE64_1",
"Strg": "msg:value=%u\\n"
},
- "13546": {
+ "13592": {
"Type": "trice64",
"Strg": "msg:value=%u\\n"
},
- "13547": {
+ "13593": {
"Type": "trice64_1",
"Strg": "msg:value=%u\\n"
},
- "13548": {
+ "13594": {
"Type": "Trice64",
"Strg": "msg:value=%u\\n"
},
- "13549": {
+ "13595": {
"Type": "Trice64_1",
"Strg": "msg:value=%u\\n"
},
- "13550": {
+ "13596": {
"Type": "TRice64",
"Strg": "msg:value=%u\\n"
},
- "13551": {
+ "13597": {
"Type": "TRice64_1",
"Strg": "msg:value=%u\\n"
},
- "13552": {
+ "13598": {
"Type": "TRice8",
"Strg": "msg:value=%d\\n"
},
- "13553": {
+ "13599": {
"Type": "Trice8",
"Strg": "msg:value=%d, %d\\n"
},
- "13554": {
+ "13600": {
"Type": "trice8",
"Strg": "msg:value=%d, %d, %d\\n"
},
- "13555": {
+ "13601": {
"Type": "TRice8",
"Strg": "msg:value=%d, %d, %d, %d\\n"
},
- "13556": {
+ "13602": {
"Type": "Trice8",
"Strg": "msg:value=%d, %d, %d, %d, %d\\n"
},
- "13557": {
+ "13603": {
"Type": "trice8",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d\\n"
},
- "13558": {
+ "13604": {
"Type": "TRice8",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d\\n"
},
- "13559": {
+ "13605": {
"Type": "Trice8",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13560": {
+ "13606": {
"Type": "trice8",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13561": {
+ "13607": {
"Type": "TRice8",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13562": {
+ "13608": {
"Type": "Trice8",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13563": {
+ "13609": {
"Type": "trice8",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13564": {
+ "13610": {
"Type": "TRice16",
"Strg": "msg:value=%d\\n"
},
- "13565": {
+ "13611": {
"Type": "Trice16",
"Strg": "msg:value=%d, %d\\n"
},
- "13566": {
+ "13612": {
"Type": "trice16",
"Strg": "msg:value=%d, %d, %d\\n"
},
- "13567": {
+ "13613": {
"Type": "TRice16",
"Strg": "msg:value=%d, %d, %d, %d\\n"
},
- "13568": {
+ "13614": {
"Type": "Trice16",
"Strg": "msg:value=%d, %d, %d, %d, %d\\n"
},
- "13569": {
+ "13615": {
"Type": "trice16",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d\\n"
},
- "13570": {
+ "13616": {
"Type": "TRice16",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d\\n"
},
- "13571": {
+ "13617": {
"Type": "Trice16",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13572": {
+ "13618": {
"Type": "trice16",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13573": {
+ "13619": {
"Type": "TRice16",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13574": {
+ "13620": {
"Type": "Trice16",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13575": {
+ "13621": {
"Type": "trice16",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13576": {
+ "13622": {
"Type": "TRice32",
"Strg": "msg:value=%d\\n"
},
- "13577": {
+ "13623": {
"Type": "Trice32",
"Strg": "msg:value=%d, %d\\n"
},
- "13578": {
+ "13624": {
"Type": "trice32",
"Strg": "msg:value=%d, %d, %d\\n"
},
- "13579": {
+ "13625": {
"Type": "TRice32",
"Strg": "msg:value=%d, %d, %d, %d\\n"
},
- "13580": {
+ "13626": {
"Type": "Trice32",
"Strg": "msg:value=%d, %d, %d, %d, %d\\n"
},
- "13581": {
+ "13627": {
"Type": "trice32",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d\\n"
},
- "13582": {
+ "13628": {
"Type": "TRice32",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d\\n"
},
- "13583": {
+ "13629": {
"Type": "Trice32",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13584": {
+ "13630": {
"Type": "trice32",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13585": {
+ "13631": {
"Type": "TRice32",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13586": {
+ "13632": {
"Type": "Trice32",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13587": {
+ "13633": {
"Type": "trice32",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13588": {
+ "13634": {
"Type": "TRice64",
"Strg": "msg:value=%d\\n"
},
- "13589": {
+ "13635": {
"Type": "Trice64",
"Strg": "msg:value=%d, %d\\n"
},
- "13590": {
+ "13636": {
"Type": "trice64",
"Strg": "msg:value=%d, %d, %d\\n"
},
- "13591": {
+ "13637": {
"Type": "TRice64",
"Strg": "msg:value=%d, %d, %d, %d\\n"
},
- "13592": {
+ "13638": {
"Type": "Trice64",
"Strg": "msg:value=%d, %d, %d, %d, %d\\n"
},
- "13593": {
+ "13639": {
"Type": "trice64",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d\\n"
},
- "13594": {
+ "13640": {
"Type": "TRice64",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d\\n"
},
- "13595": {
+ "13641": {
"Type": "Trice64",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13596": {
+ "13642": {
"Type": "trice64",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13597": {
+ "13643": {
"Type": "TRice64",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13598": {
+ "13644": {
"Type": "Trice64",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13599": {
+ "13645": {
"Type": "trice64",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13600": {
+ "13646": {
"Type": "TRice8_1",
"Strg": "msg:value=%d\\n"
},
- "13601": {
+ "13647": {
"Type": "Trice8_2",
"Strg": "msg:value=%d, %d\\n"
},
- "13602": {
+ "13648": {
"Type": "trice8_3",
"Strg": "msg:value=%d, %d, %d\\n"
},
- "13603": {
+ "13649": {
"Type": "TRice8_4",
"Strg": "msg:value=%d, %d, %d, %d\\n"
},
- "13604": {
+ "13650": {
"Type": "Trice8_5",
"Strg": "msg:value=%d, %d, %d, %d, %d\\n"
},
- "13605": {
+ "13651": {
"Type": "trice8_6",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d\\n"
},
- "13606": {
+ "13652": {
"Type": "TRice8_7",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d\\n"
},
- "13607": {
+ "13653": {
"Type": "Trice8_8",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13608": {
+ "13654": {
"Type": "trice8_9",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13609": {
+ "13655": {
"Type": "TRice8_10",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13610": {
+ "13656": {
"Type": "Trice8_11",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13611": {
+ "13657": {
"Type": "trice8_12",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13612": {
+ "13658": {
"Type": "TRice16_1",
"Strg": "msg:value=%d\\n"
},
- "13613": {
+ "13659": {
"Type": "Trice16_2",
"Strg": "msg:value=%d, %d\\n"
},
- "13614": {
+ "13660": {
"Type": "trice16_3",
"Strg": "msg:value=%d, %d, %d\\n"
},
- "13615": {
+ "13661": {
"Type": "TRice16_4",
"Strg": "msg:value=%d, %d, %d, %d\\n"
},
- "13616": {
+ "13662": {
"Type": "Trice16_5",
"Strg": "msg:value=%d, %d, %d, %d, %d\\n"
},
- "13617": {
+ "13663": {
"Type": "trice16_6",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d\\n"
},
- "13618": {
+ "13664": {
"Type": "TRice16_7",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d\\n"
},
- "13619": {
+ "13665": {
"Type": "Trice16_8",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13620": {
+ "13666": {
"Type": "trice16_9",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13621": {
+ "13667": {
"Type": "TRice16_10",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13622": {
+ "13668": {
"Type": "Trice16_11",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13623": {
+ "13669": {
"Type": "trice16_12",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13624": {
+ "13670": {
"Type": "TRice32_1",
"Strg": "msg:value=%d\\n"
},
- "13625": {
+ "13671": {
"Type": "Trice32_2",
"Strg": "msg:value=%d, %d\\n"
},
- "13626": {
+ "13672": {
"Type": "trice32_3",
"Strg": "msg:value=%d, %d, %d\\n"
},
- "13627": {
+ "13673": {
"Type": "TRice32_4",
"Strg": "msg:value=%d, %d, %d, %d\\n"
},
- "13628": {
+ "13674": {
"Type": "Trice32_5",
"Strg": "msg:value=%d, %d, %d, %d, %d\\n"
},
- "13629": {
+ "13675": {
"Type": "trice32_6",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d\\n"
},
- "13630": {
+ "13676": {
"Type": "TRice32_7",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d\\n"
},
- "13631": {
+ "13677": {
"Type": "Trice32_8",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13632": {
+ "13678": {
"Type": "trice32_9",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13633": {
+ "13679": {
"Type": "TRice32_10",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13634": {
+ "13680": {
"Type": "Trice32_11",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13635": {
+ "13681": {
"Type": "trice32_12",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13636": {
+ "13682": {
"Type": "TRice64_1",
"Strg": "msg:value=%d\\n"
},
- "13637": {
+ "13683": {
"Type": "Trice64_2",
"Strg": "msg:value=%d, %d\\n"
},
- "13638": {
+ "13684": {
"Type": "trice64_3",
"Strg": "msg:value=%d, %d, %d\\n"
},
- "13639": {
+ "13685": {
"Type": "TRice64_4",
"Strg": "msg:value=%d, %d, %d, %d\\n"
},
- "13640": {
+ "13686": {
"Type": "Trice64_5",
"Strg": "msg:value=%d, %d, %d, %d, %d\\n"
},
- "13641": {
+ "13687": {
"Type": "trice64_6",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d\\n"
},
- "13642": {
+ "13688": {
"Type": "TRice64_7",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d\\n"
},
- "13643": {
+ "13689": {
"Type": "Trice64_8",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13644": {
+ "13690": {
"Type": "trice64_9",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13645": {
+ "13691": {
"Type": "TRice64_10",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13646": {
+ "13692": {
"Type": "Trice64_11",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13647": {
+ "13693": {
"Type": "trice64_12",
"Strg": "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13648": {
+ "13694": {
"Type": "trice8",
"Strg": "value=%d\\n"
},
- "13649": {
+ "13695": {
"Type": "Trice8",
"Strg": "value=%d\\n"
},
- "13650": {
+ "13696": {
"Type": "TRice8",
"Strg": "value=%d\\n"
},
- "13651": {
+ "13697": {
"Type": "trice8_1",
"Strg": "value=%d\\n"
},
- "13652": {
+ "13698": {
"Type": "Trice8_1",
"Strg": "value=%d\\n"
},
- "13653": {
+ "13699": {
"Type": "TRice8_1",
"Strg": "value=%d\\n"
},
- "13654": {
+ "13700": {
"Type": "trice16",
"Strg": "value=%d\\n"
},
- "13655": {
+ "13701": {
"Type": "Trice16",
"Strg": "value=%d\\n"
},
- "13656": {
+ "13702": {
"Type": "TRice16",
"Strg": "value=%d\\n"
},
- "13657": {
+ "13703": {
"Type": "trice16_1",
"Strg": "value=%d\\n"
},
- "13658": {
+ "13704": {
"Type": "Trice16_1",
"Strg": "value=%d\\n"
},
- "13659": {
+ "13705": {
"Type": "TRice16_1",
"Strg": "value=%d\\n"
},
- "13660": {
+ "13706": {
"Type": "trice32",
"Strg": "value=%d\\n"
},
- "13661": {
+ "13707": {
"Type": "Trice32",
"Strg": "value=%d\\n"
},
- "13662": {
+ "13708": {
"Type": "TRice32",
"Strg": "value=%d\\n"
},
- "13663": {
+ "13709": {
"Type": "trice32_1",
"Strg": "value=%d\\n"
},
- "13664": {
+ "13710": {
"Type": "Trice32_1",
"Strg": "value=%d\\n"
},
- "13665": {
+ "13711": {
"Type": "TRice32_1",
"Strg": "value=%d\\n"
},
- "13666": {
+ "13712": {
"Type": "trice64",
"Strg": "value=%d\\n"
},
- "13667": {
+ "13713": {
"Type": "Trice64",
"Strg": "value=%d\\n"
},
- "13668": {
+ "13714": {
"Type": "TRice64",
"Strg": "value=%d\\n"
},
- "13669": {
+ "13715": {
"Type": "trice64_1",
"Strg": "value=%d\\n"
},
- "13670": {
+ "13716": {
"Type": "Trice64_1",
"Strg": "value=%d\\n"
},
- "13671": {
+ "13717": {
"Type": "TRice64_1",
"Strg": "value=%d\\n"
},
- "13672": {
+ "13718": {
"Type": "TRICE",
"Strg": "value=%d\\n"
},
- "13673": {
+ "13719": {
"Type": "TRICE",
"Strg": "value=%d\\n"
},
- "13674": {
+ "13720": {
"Type": "TRICE",
"Strg": "value=%d\\n"
},
- "13675": {
+ "13721": {
"Type": "TRICE",
"Strg": "value=%d\\n"
},
- "13676": {
+ "13722": {
"Type": "TRICE8",
"Strg": "value=%d\\n"
},
- "13677": {
+ "13723": {
"Type": "TRICE8_1",
"Strg": "value=%d\\n"
},
- "13678": {
+ "13724": {
"Type": "trice8",
"Strg": "value=%d\\n"
},
- "13679": {
+ "13725": {
"Type": "trice8_1",
"Strg": "value=%d\\n"
},
- "13680": {
+ "13726": {
"Type": "TRICE8",
"Strg": "value=%d\\n"
},
- "13681": {
+ "13727": {
"Type": "TRICE8_1",
"Strg": "value=%d\\n"
},
- "13682": {
+ "13728": {
"Type": "Trice8",
"Strg": "value=%d\\n"
},
- "13683": {
+ "13729": {
"Type": "Trice8_1",
"Strg": "value=%d\\n"
},
- "13684": {
+ "13730": {
"Type": "TRICE8",
"Strg": "value=%d\\n"
},
- "13685": {
+ "13731": {
"Type": "TRICE8_1",
"Strg": "value=%d\\n"
},
- "13686": {
+ "13732": {
"Type": "TRice8",
"Strg": "value=%d\\n"
},
- "13687": {
+ "13733": {
"Type": "TRice8_1",
"Strg": "value=%d\\n"
},
- "13688": {
+ "13734": {
"Type": "TRICE8",
"Strg": "value=%d\\n"
},
- "13689": {
+ "13735": {
"Type": "TRICE8_1",
"Strg": "value=%d\\n"
},
- "13690": {
+ "13736": {
"Type": "TRICE",
"Strg": "FATAL:magenta+b:red\\n"
},
- "13691": {
+ "13737": {
"Type": "TRICE",
"Strg": "CRITICAL:red+i:default+h\\n"
},
- "13692": {
+ "13738": {
"Type": "TRICE",
"Strg": "EMERGENCY:red+i:blue\\n"
},
- "13693": {
+ "13739": {
"Type": "TRICE",
"Strg": "ERROR:11:red\\n"
},
- "13694": {
+ "13740": {
"Type": "TRICE",
"Strg": "WARNING:11+i:red\\n"
},
- "13695": {
+ "13741": {
"Type": "TRICE",
"Strg": "ATTENTION:11:green\\n"
},
- "13696": {
+ "13742": {
"Type": "TRICE",
"Strg": "INFO:cyan+b:default+h\\n"
},
- "13697": {
+ "13743": {
"Type": "TRICE",
"Strg": "DEBUG:130+i\\n"
},
- "13698": {
+ "13744": {
"Type": "TRICE",
"Strg": "TRACE:default+i:default+h\\n"
},
- "13699": {
+ "13745": {
"Type": "TRICE",
"Strg": "TIME:blue+i:blue+h\\n"
},
- "13700": {
+ "13746": {
"Type": "TRICE",
"Strg": "MESSAGE:green+h:black\\n"
},
- "13701": {
+ "13747": {
"Type": "TRICE",
"Strg": "READ:black+i:yellow+h\\n"
},
- "13702": {
+ "13748": {
"Type": "TRICE",
"Strg": "WRITE:black+u:yellow+h\\n"
},
- "13703": {
+ "13749": {
"Type": "TRICE",
"Strg": "RECEIVE:black+h:black\\n"
},
- "13704": {
+ "13750": {
"Type": "TRICE",
"Strg": "TRANSMIT:black:black+h\\n"
},
- "13705": {
+ "13751": {
"Type": "TRICE",
"Strg": "DIAG:yellow+i:default+h\\n"
},
- "13706": {
+ "13752": {
"Type": "TRICE",
"Strg": "INTERRUPT:magenta+i:default+h\\n"
},
- "13707": {
+ "13753": {
"Type": "TRICE",
"Strg": "SIGNAL:118+i\\n"
},
- "13708": {
+ "13754": {
"Type": "TRICE",
"Strg": "TEST:yellow+h:black\\n"
},
- "13709": {
+ "13755": {
"Type": "TRICE",
"Strg": "DEFAULT:off\\n"
},
- "13710": {
+ "13756": {
"Type": "TRICE",
"Strg": "NOTICE:blue:white+h\\n"
},
- "13711": {
+ "13757": {
"Type": "TRICE",
"Strg": "ALERT:magenta:magenta+h\\n"
},
- "13712": {
+ "13758": {
"Type": "TRICE",
"Strg": "ASSERT:yellow+i:blue\\n"
},
- "13713": {
+ "13759": {
"Type": "TRICE",
"Strg": "ALARM:red+i:white+h\\n"
},
- "13714": {
+ "13760": {
"Type": "TRICE",
"Strg": "VERBOSE:blue:default\\n"
},
- "13715": {
+ "13761": {
"Type": "TRICE",
"Strg": "fatal:magenta+b:red\\n"
},
- "13716": {
+ "13762": {
"Type": "TRICE",
"Strg": "critical:red+i:default+h\\n"
},
- "13717": {
+ "13763": {
"Type": "TRICE",
"Strg": "emergency:red+i:blue\\n"
},
- "13718": {
+ "13764": {
"Type": "TRICE",
"Strg": "error:11:red\\n"
},
- "13719": {
+ "13765": {
"Type": "TRICE",
"Strg": "warning:11+i:red\\n"
},
- "13720": {
+ "13766": {
"Type": "TRICE",
"Strg": "attention:11:green\\n"
},
- "13721": {
+ "13767": {
"Type": "TRICE",
"Strg": "info:cyan+b:default+h\\n"
},
- "13722": {
+ "13768": {
"Type": "TRICE",
"Strg": "debug:130+i\\n"
},
- "13723": {
+ "13769": {
"Type": "TRICE",
"Strg": "trace:default+i:default+h\\n"
},
- "13724": {
+ "13770": {
"Type": "TRICE",
"Strg": "time:blue+i:blue+h\\n"
},
- "13725": {
+ "13771": {
"Type": "TRICE",
"Strg": "message:green+h:black\\n"
},
- "13726": {
+ "13772": {
"Type": "TRICE",
"Strg": "read:black+i:yellow+h\\n"
},
- "13727": {
+ "13773": {
"Type": "TRICE",
"Strg": "write:black+u:yellow+h\\n"
},
- "13728": {
+ "13774": {
"Type": "TRICE",
"Strg": "receive:black+h:black\\n"
},
- "13729": {
+ "13775": {
"Type": "TRICE",
"Strg": "transmit:black:black+h\\n"
},
- "13730": {
+ "13776": {
"Type": "TRICE",
"Strg": "diag:yellow+i:default+h\\n"
},
- "13731": {
+ "13777": {
"Type": "TRICE",
"Strg": "interrupt:magenta+i:default+h\\n"
},
- "13732": {
+ "13778": {
"Type": "TRICE",
"Strg": "signal:118+i\\n"
},
- "13733": {
+ "13779": {
"Type": "TRICE",
"Strg": "test:yellow+h:black\\n"
},
- "13734": {
+ "13780": {
"Type": "TRICE",
"Strg": "default:off\\n"
},
- "13735": {
+ "13781": {
"Type": "TRICE",
"Strg": "notice:blue:white+h\\n"
},
- "13736": {
+ "13782": {
"Type": "TRICE",
"Strg": "alert:magenta:magenta+h\\n"
},
- "13737": {
+ "13783": {
"Type": "TRICE",
"Strg": "assert:yellow+i:blue\\n"
},
- "13738": {
+ "13784": {
"Type": "TRICE",
"Strg": "alarm:red+i:white+h\\n"
},
- "13739": {
+ "13785": {
"Type": "TRICE",
"Strg": "verbose:blue:default\\n"
},
- "13740": {
+ "13786": {
"Type": "trice",
"Strg": "FATAL:magenta+b:red\\n"
},
- "13741": {
+ "13787": {
"Type": "trice",
"Strg": "CRITICAL:red+i:default+h\\n"
},
- "13742": {
+ "13788": {
"Type": "trice",
"Strg": "EMERGENCY:red+i:blue\\n"
},
- "13743": {
+ "13789": {
"Type": "trice",
"Strg": "ERROR:11:red\\n"
},
- "13744": {
+ "13790": {
"Type": "trice",
"Strg": "WARNING:11+i:red\\n"
},
- "13745": {
+ "13791": {
"Type": "trice",
"Strg": "ATTENTION:11:green\\n"
},
- "13746": {
+ "13792": {
"Type": "trice",
"Strg": "INFO:cyan+b:default+h\\n"
},
- "13747": {
+ "13793": {
"Type": "trice",
"Strg": "DEBUG:130+i\\n"
},
- "13748": {
+ "13794": {
"Type": "trice",
"Strg": "TRACE:default+i:default+h\\n"
},
- "13749": {
+ "13795": {
"Type": "trice",
"Strg": "TIME:blue+i:blue+h\\n"
},
- "13750": {
+ "13796": {
"Type": "trice",
"Strg": "MESSAGE:green+h:black\\n"
},
- "13751": {
+ "13797": {
"Type": "trice",
"Strg": "READ:black+i:yellow+h\\n"
},
- "13752": {
+ "13798": {
"Type": "trice",
"Strg": "WRITE:black+u:yellow+h\\n"
},
- "13753": {
+ "13799": {
"Type": "trice",
"Strg": "RECEIVE:black+h:black\\n"
},
- "13754": {
+ "13800": {
"Type": "trice",
"Strg": "TRANSMIT:black:black+h\\n"
},
- "13755": {
+ "13801": {
"Type": "trice",
"Strg": "DIAG:yellow+i:default+h\\n"
},
- "13756": {
+ "13802": {
"Type": "trice",
"Strg": "INTERRUPT:magenta+i:default+h\\n"
},
- "13757": {
+ "13803": {
"Type": "trice",
"Strg": "SIGNAL:118+i\\n"
},
- "13758": {
+ "13804": {
"Type": "trice",
"Strg": "TEST:yellow+h:black\\n"
},
- "13759": {
+ "13805": {
"Type": "trice",
"Strg": "DEFAULT:off\\n"
},
- "13760": {
+ "13806": {
"Type": "trice",
"Strg": "NOTICE:blue:white+h\\n"
},
- "13761": {
+ "13807": {
"Type": "trice",
"Strg": "ALERT:magenta:magenta+h\\n"
},
- "13762": {
+ "13808": {
"Type": "trice",
"Strg": "ASSERT:yellow+i:blue\\n"
},
- "13763": {
+ "13809": {
"Type": "trice",
"Strg": "ALARM:red+i:white+h\\n"
},
- "13764": {
+ "13810": {
"Type": "trice",
"Strg": "VERBOSE:blue:default\\n"
},
- "13765": {
+ "13811": {
"Type": "trice",
"Strg": "fatal:magenta+b:red\\n"
},
- "13766": {
+ "13812": {
"Type": "trice",
"Strg": "critical:red+i:default+h\\n"
},
- "13767": {
+ "13813": {
"Type": "trice",
"Strg": "emergency:red+i:blue\\n"
},
- "13768": {
+ "13814": {
"Type": "trice",
"Strg": "error:11:red\\n"
},
- "13769": {
+ "13815": {
"Type": "trice",
"Strg": "warning:11+i:red\\n"
},
- "13770": {
+ "13816": {
"Type": "trice",
"Strg": "attention:11:green\\n"
},
- "13771": {
+ "13817": {
"Type": "trice",
"Strg": "info:cyan+b:default+h\\n"
},
- "13772": {
+ "13818": {
"Type": "trice",
"Strg": "debug:130+i\\n"
},
- "13773": {
+ "13819": {
"Type": "trice",
"Strg": "trace:default+i:default+h\\n"
},
- "13774": {
+ "13820": {
"Type": "trice",
"Strg": "time:blue+i:blue+h\\n"
},
- "13775": {
+ "13821": {
"Type": "trice",
"Strg": "message:green+h:black\\n"
},
- "13776": {
+ "13822": {
"Type": "trice",
"Strg": "read:black+i:yellow+h\\n"
},
- "13777": {
+ "13823": {
"Type": "trice",
"Strg": "write:black+u:yellow+h\\n"
},
- "13778": {
+ "13824": {
"Type": "trice",
"Strg": "receive:black+h:black\\n"
},
- "13779": {
+ "13825": {
"Type": "trice",
"Strg": "transmit:black:black+h\\n"
},
- "13780": {
+ "13826": {
"Type": "trice",
"Strg": "diag:yellow+i:default+h\\n"
},
- "13781": {
+ "13827": {
"Type": "trice",
"Strg": "interrupt:magenta+i:default+h\\n"
},
- "13782": {
+ "13828": {
"Type": "trice",
"Strg": "signal:118+i\\n"
},
- "13783": {
+ "13829": {
"Type": "trice",
"Strg": "test:yellow+h:black\\n"
},
- "13784": {
+ "13830": {
"Type": "trice",
"Strg": "default:off\\n"
},
- "13785": {
+ "13831": {
"Type": "trice",
"Strg": "notice:blue:white+h\\n"
},
- "13786": {
+ "13832": {
"Type": "trice",
"Strg": "alert:magenta:magenta+h\\n"
},
- "13787": {
+ "13833": {
"Type": "trice",
"Strg": "assert:yellow+i:blue\\n"
},
- "13788": {
+ "13834": {
"Type": "trice",
"Strg": "alarm:red+i:white+h\\n"
},
- "13789": {
+ "13835": {
"Type": "trice",
"Strg": "verbose:blue:default\\n"
},
- "13790": {
+ "13836": {
"Type": "TRICE",
"Strg": "FATAL:magenta+b:red\\n"
},
- "13791": {
+ "13837": {
"Type": "TRICE",
"Strg": "CRITICAL:red+i:default+h\\n"
},
- "13792": {
+ "13838": {
"Type": "TRICE",
"Strg": "EMERGENCY:red+i:blue\\n"
},
- "13793": {
+ "13839": {
"Type": "TRICE",
"Strg": "ERROR:11:red\\n"
},
- "13794": {
+ "13840": {
"Type": "TRICE",
"Strg": "WARNING:11+i:red\\n"
},
- "13795": {
+ "13841": {
"Type": "TRICE",
"Strg": "ATTENTION:11:green\\n"
},
- "13796": {
+ "13842": {
"Type": "TRICE",
"Strg": "INFO:cyan+b:default+h\\n"
},
- "13797": {
+ "13843": {
"Type": "TRICE",
"Strg": "DEBUG:130+i\\n"
},
- "13798": {
+ "13844": {
"Type": "TRICE",
"Strg": "TRACE:default+i:default+h\\n"
},
- "13799": {
+ "13845": {
"Type": "TRICE",
"Strg": "TIME:blue+i:blue+h\\n"
},
- "13800": {
+ "13846": {
"Type": "TRICE",
"Strg": "MESSAGE:green+h:black\\n"
},
- "13801": {
+ "13847": {
"Type": "TRICE",
"Strg": "READ:black+i:yellow+h\\n"
},
- "13802": {
+ "13848": {
"Type": "TRICE",
"Strg": "WRITE:black+u:yellow+h\\n"
},
- "13803": {
+ "13849": {
"Type": "TRICE",
"Strg": "RECEIVE:black+h:black\\n"
},
- "13804": {
+ "13850": {
"Type": "TRICE",
"Strg": "TRANSMIT:black:black+h\\n"
},
- "13805": {
+ "13851": {
"Type": "TRICE",
"Strg": "DIAG:yellow+i:default+h\\n"
},
- "13806": {
+ "13852": {
"Type": "TRICE",
"Strg": "INTERRUPT:magenta+i:default+h\\n"
},
- "13807": {
+ "13853": {
"Type": "TRICE",
"Strg": "SIGNAL:118+i\\n"
},
- "13808": {
+ "13854": {
"Type": "TRICE",
"Strg": "TEST:yellow+h:black\\n"
},
- "13809": {
+ "13855": {
"Type": "TRICE",
"Strg": "DEFAULT:off\\n"
},
- "13810": {
+ "13856": {
"Type": "TRICE",
"Strg": "NOTICE:blue:white+h\\n"
},
- "13811": {
+ "13857": {
"Type": "TRICE",
"Strg": "ALERT:magenta:magenta+h\\n"
},
- "13812": {
+ "13858": {
"Type": "TRICE",
"Strg": "ASSERT:yellow+i:blue\\n"
},
- "13813": {
+ "13859": {
"Type": "TRICE",
"Strg": "ALARM:red+i:white+h\\n"
},
- "13814": {
+ "13860": {
"Type": "TRICE",
"Strg": "VERBOSE:blue:default\\n"
},
- "13815": {
+ "13861": {
"Type": "TRICE",
"Strg": "fatal:magenta+b:red\\n"
},
- "13816": {
+ "13862": {
"Type": "TRICE",
"Strg": "critical:red+i:default+h\\n"
},
- "13817": {
+ "13863": {
"Type": "TRICE",
"Strg": "emergency:red+i:blue\\n"
},
- "13818": {
+ "13864": {
"Type": "TRICE",
"Strg": "error:11:red\\n"
},
- "13819": {
+ "13865": {
"Type": "TRICE",
"Strg": "warning:11+i:red\\n"
},
- "13820": {
+ "13866": {
"Type": "TRICE",
"Strg": "attention:11:green\\n"
},
- "13821": {
+ "13867": {
"Type": "TRICE",
"Strg": "info:cyan+b:default+h\\n"
},
- "13822": {
+ "13868": {
"Type": "TRICE",
"Strg": "debug:130+i\\n"
},
- "13823": {
+ "13869": {
"Type": "TRICE",
"Strg": "trace:default+i:default+h\\n"
},
- "13824": {
+ "13870": {
"Type": "TRICE",
"Strg": "time:blue+i:blue+h\\n"
},
- "13825": {
+ "13871": {
"Type": "TRICE",
"Strg": "message:green+h:black\\n"
},
- "13826": {
+ "13872": {
"Type": "TRICE",
"Strg": "read:black+i:yellow+h\\n"
},
- "13827": {
+ "13873": {
"Type": "TRICE",
"Strg": "write:black+u:yellow+h\\n"
},
- "13828": {
+ "13874": {
"Type": "TRICE",
"Strg": "receive:black+h:black\\n"
},
- "13829": {
+ "13875": {
"Type": "TRICE",
"Strg": "transmit:black:black+h\\n"
},
- "13830": {
+ "13876": {
"Type": "TRICE",
"Strg": "diag:yellow+i:default+h\\n"
},
- "13831": {
+ "13877": {
"Type": "TRICE",
"Strg": "interrupt:magenta+i:default+h\\n"
},
- "13832": {
+ "13878": {
"Type": "TRICE",
"Strg": "signal:118+i\\n"
},
- "13833": {
+ "13879": {
"Type": "TRICE",
"Strg": "test:yellow+h:black\\n"
},
- "13834": {
+ "13880": {
"Type": "TRICE",
"Strg": "default:off\\n"
},
- "13835": {
+ "13881": {
"Type": "TRICE",
"Strg": "notice:blue:white+h\\n"
},
- "13836": {
+ "13882": {
"Type": "TRICE",
"Strg": "alert:magenta:magenta+h\\n"
},
- "13837": {
+ "13883": {
"Type": "TRICE",
"Strg": "assert:yellow+i:blue\\n"
},
- "13838": {
+ "13884": {
"Type": "TRICE",
"Strg": "alarm:red+i:white+h\\n"
},
- "13839": {
+ "13885": {
"Type": "TRICE",
"Strg": "verbose:blue:default\\n"
},
- "13840": {
+ "13886": {
"Type": "Trice",
"Strg": "FATAL:magenta+b:red\\n"
},
- "13841": {
+ "13887": {
"Type": "Trice",
"Strg": "CRITICAL:red+i:default+h\\n"
},
- "13842": {
+ "13888": {
"Type": "Trice",
"Strg": "EMERGENCY:red+i:blue\\n"
},
- "13843": {
+ "13889": {
"Type": "Trice",
"Strg": "ERROR:11:red\\n"
},
- "13844": {
+ "13890": {
"Type": "Trice",
"Strg": "WARNING:11+i:red\\n"
},
- "13845": {
+ "13891": {
"Type": "Trice",
"Strg": "ATTENTION:11:green\\n"
},
- "13846": {
+ "13892": {
"Type": "Trice",
"Strg": "INFO:cyan+b:default+h\\n"
},
- "13847": {
+ "13893": {
"Type": "Trice",
"Strg": "DEBUG:130+i\\n"
},
- "13848": {
+ "13894": {
"Type": "Trice",
"Strg": "TRACE:default+i:default+h\\n"
},
- "13849": {
+ "13895": {
"Type": "Trice",
"Strg": "TIME:blue+i:blue+h\\n"
},
- "13850": {
+ "13896": {
"Type": "Trice",
"Strg": "MESSAGE:green+h:black\\n"
},
- "13851": {
+ "13897": {
"Type": "Trice",
"Strg": "READ:black+i:yellow+h\\n"
},
- "13852": {
+ "13898": {
"Type": "Trice",
"Strg": "WRITE:black+u:yellow+h\\n"
},
- "13853": {
+ "13899": {
"Type": "Trice",
"Strg": "RECEIVE:black+h:black\\n"
},
- "13854": {
+ "13900": {
"Type": "Trice",
"Strg": "TRANSMIT:black:black+h\\n"
},
- "13855": {
+ "13901": {
"Type": "Trice",
"Strg": "DIAG:yellow+i:default+h\\n"
},
- "13856": {
+ "13902": {
"Type": "Trice",
"Strg": "INTERRUPT:magenta+i:default+h\\n"
},
- "13857": {
+ "13903": {
"Type": "Trice",
"Strg": "SIGNAL:118+i\\n"
},
- "13858": {
+ "13904": {
"Type": "Trice",
"Strg": "TEST:yellow+h:black\\n"
},
- "13859": {
+ "13905": {
"Type": "Trice",
"Strg": "DEFAULT:off\\n"
},
- "13860": {
+ "13906": {
"Type": "Trice",
"Strg": "NOTICE:blue:white+h\\n"
},
- "13861": {
+ "13907": {
"Type": "Trice",
"Strg": "ALERT:magenta:magenta+h\\n"
},
- "13862": {
+ "13908": {
"Type": "Trice",
"Strg": "ASSERT:yellow+i:blue\\n"
},
- "13863": {
+ "13909": {
"Type": "Trice",
"Strg": "ALARM:red+i:white+h\\n"
},
- "13864": {
+ "13910": {
"Type": "Trice",
"Strg": "VERBOSE:blue:default\\n"
},
- "13865": {
+ "13911": {
"Type": "Trice",
"Strg": "fatal:magenta+b:red\\n"
},
- "13866": {
+ "13912": {
"Type": "Trice",
"Strg": "critical:red+i:default+h\\n"
},
- "13867": {
+ "13913": {
"Type": "Trice",
"Strg": "emergency:red+i:blue\\n"
},
- "13868": {
+ "13914": {
"Type": "Trice",
"Strg": "error:11:red\\n"
},
- "13869": {
+ "13915": {
"Type": "Trice",
"Strg": "warning:11+i:red\\n"
},
- "13870": {
+ "13916": {
"Type": "Trice",
"Strg": "attention:11:green\\n"
},
- "13871": {
+ "13917": {
"Type": "Trice",
"Strg": "info:cyan+b:default+h\\n"
},
- "13872": {
+ "13918": {
"Type": "Trice",
"Strg": "debug:130+i\\n"
},
- "13873": {
+ "13919": {
"Type": "Trice",
"Strg": "trace:default+i:default+h\\n"
},
- "13874": {
+ "13920": {
"Type": "Trice",
"Strg": "time:blue+i:blue+h\\n"
},
- "13875": {
+ "13921": {
"Type": "Trice",
"Strg": "message:green+h:black\\n"
},
- "13876": {
+ "13922": {
"Type": "Trice",
"Strg": "read:black+i:yellow+h\\n"
},
- "13877": {
+ "13923": {
"Type": "Trice",
"Strg": "write:black+u:yellow+h\\n"
},
- "13878": {
+ "13924": {
"Type": "Trice",
"Strg": "receive:black+h:black\\n"
},
- "13879": {
+ "13925": {
"Type": "Trice",
"Strg": "transmit:black:black+h\\n"
},
- "13880": {
+ "13926": {
"Type": "Trice",
"Strg": "diag:yellow+i:default+h\\n"
},
- "13881": {
+ "13927": {
"Type": "Trice",
"Strg": "interrupt:magenta+i:default+h\\n"
},
- "13882": {
+ "13928": {
"Type": "Trice",
"Strg": "signal:118+i\\n"
},
- "13883": {
+ "13929": {
"Type": "Trice",
"Strg": "test:yellow+h:black\\n"
},
- "13884": {
+ "13930": {
"Type": "Trice",
"Strg": "default:off\\n"
},
- "13885": {
+ "13931": {
"Type": "Trice",
"Strg": "notice:blue:white+h\\n"
},
- "13886": {
+ "13932": {
"Type": "Trice",
"Strg": "alert:magenta:magenta+h\\n"
},
- "13887": {
+ "13933": {
"Type": "Trice",
"Strg": "assert:yellow+i:blue\\n"
},
- "13888": {
+ "13934": {
"Type": "Trice",
"Strg": "alarm:red+i:white+h\\n"
},
- "13889": {
+ "13935": {
"Type": "Trice",
"Strg": "verbose:blue:default\\n"
},
- "13890": {
+ "13936": {
"Type": "TRICE",
"Strg": "FATAL:magenta+b:red\\n"
},
- "13891": {
+ "13937": {
"Type": "TRICE",
"Strg": "CRITICAL:red+i:default+h\\n"
},
- "13892": {
+ "13938": {
"Type": "TRICE",
"Strg": "EMERGENCY:red+i:blue\\n"
},
- "13893": {
+ "13939": {
"Type": "TRICE",
"Strg": "ERROR:11:red\\n"
},
- "13894": {
+ "13940": {
"Type": "TRICE",
"Strg": "WARNING:11+i:red\\n"
},
- "13895": {
+ "13941": {
"Type": "TRICE",
"Strg": "ATTENTION:11:green\\n"
},
- "13896": {
+ "13942": {
"Type": "TRICE",
"Strg": "INFO:cyan+b:default+h\\n"
},
- "13897": {
+ "13943": {
"Type": "TRICE",
"Strg": "DEBUG:130+i\\n"
},
- "13898": {
+ "13944": {
"Type": "TRICE",
"Strg": "TRACE:default+i:default+h\\n"
},
- "13899": {
+ "13945": {
"Type": "TRICE",
"Strg": "TIME:blue+i:blue+h\\n"
},
- "13900": {
+ "13946": {
"Type": "TRICE",
"Strg": "MESSAGE:green+h:black\\n"
},
- "13901": {
+ "13947": {
"Type": "TRICE",
"Strg": "READ:black+i:yellow+h\\n"
},
- "13902": {
+ "13948": {
"Type": "TRICE",
"Strg": "WRITE:black+u:yellow+h\\n"
},
- "13903": {
+ "13949": {
"Type": "TRICE",
"Strg": "RECEIVE:black+h:black\\n"
},
- "13904": {
+ "13950": {
"Type": "TRICE",
"Strg": "TRANSMIT:black:black+h\\n"
},
- "13905": {
+ "13951": {
"Type": "TRICE",
"Strg": "DIAG:yellow+i:default+h\\n"
},
- "13906": {
+ "13952": {
"Type": "TRICE",
"Strg": "INTERRUPT:magenta+i:default+h\\n"
},
- "13907": {
+ "13953": {
"Type": "TRICE",
"Strg": "SIGNAL:118+i\\n"
},
- "13908": {
+ "13954": {
"Type": "TRICE",
"Strg": "TEST:yellow+h:black\\n"
},
- "13909": {
+ "13955": {
"Type": "TRICE",
"Strg": "DEFAULT:off\\n"
},
- "13910": {
+ "13956": {
"Type": "TRICE",
"Strg": "NOTICE:blue:white+h\\n"
},
- "13911": {
+ "13957": {
"Type": "TRICE",
"Strg": "ALERT:magenta:magenta+h\\n"
},
- "13912": {
+ "13958": {
"Type": "TRICE",
"Strg": "ASSERT:yellow+i:blue\\n"
},
- "13913": {
+ "13959": {
"Type": "TRICE",
"Strg": "ALARM:red+i:white+h\\n"
},
- "13914": {
+ "13960": {
"Type": "TRICE",
"Strg": "VERBOSE:blue:default\\n"
},
- "13915": {
+ "13961": {
"Type": "TRICE",
"Strg": "fatal:magenta+b:red\\n"
},
- "13916": {
+ "13962": {
"Type": "TRICE",
"Strg": "critical:red+i:default+h\\n"
},
- "13917": {
+ "13963": {
"Type": "TRICE",
"Strg": "emergency:red+i:blue\\n"
},
- "13918": {
+ "13964": {
"Type": "TRICE",
"Strg": "error:11:red\\n"
},
- "13919": {
+ "13965": {
"Type": "TRICE",
"Strg": "warning:11+i:red\\n"
},
- "13920": {
+ "13966": {
"Type": "TRICE",
"Strg": "attention:11:green\\n"
},
- "13921": {
+ "13967": {
"Type": "TRICE",
"Strg": "info:cyan+b:default+h\\n"
},
- "13922": {
+ "13968": {
"Type": "TRICE",
"Strg": "debug:130+i\\n"
},
- "13923": {
+ "13969": {
"Type": "TRICE",
"Strg": "trace:default+i:default+h\\n"
},
- "13924": {
+ "13970": {
"Type": "TRICE",
"Strg": "time:blue+i:blue+h\\n"
},
- "13925": {
+ "13971": {
"Type": "TRICE",
"Strg": "message:green+h:black\\n"
},
- "13926": {
+ "13972": {
"Type": "TRICE",
"Strg": "read:black+i:yellow+h\\n"
},
- "13927": {
+ "13973": {
"Type": "TRICE",
"Strg": "write:black+u:yellow+h\\n"
},
- "13928": {
+ "13974": {
"Type": "TRICE",
"Strg": "receive:black+h:black\\n"
},
- "13929": {
+ "13975": {
"Type": "TRICE",
"Strg": "transmit:black:black+h\\n"
},
- "13930": {
+ "13976": {
"Type": "TRICE",
"Strg": "diag:yellow+i:default+h\\n"
},
- "13931": {
+ "13977": {
"Type": "TRICE",
"Strg": "interrupt:magenta+i:default+h\\n"
},
- "13932": {
+ "13978": {
"Type": "TRICE",
"Strg": "signal:118+i\\n"
},
- "13933": {
+ "13979": {
"Type": "TRICE",
"Strg": "test:yellow+h:black\\n"
},
- "13934": {
+ "13980": {
"Type": "TRICE",
"Strg": "default:off\\n"
},
- "13935": {
+ "13981": {
"Type": "TRICE",
"Strg": "notice:blue:white+h\\n"
},
- "13936": {
+ "13982": {
"Type": "TRICE",
"Strg": "alert:magenta:magenta+h\\n"
},
- "13937": {
+ "13983": {
"Type": "TRICE",
"Strg": "assert:yellow+i:blue\\n"
},
- "13938": {
+ "13984": {
"Type": "TRICE",
"Strg": "alarm:red+i:white+h\\n"
},
- "13939": {
+ "13985": {
"Type": "TRICE",
"Strg": "verbose:blue:default\\n"
},
- "13940": {
+ "13986": {
"Type": "TRice",
"Strg": "FATAL:magenta+b:red\\n"
},
- "13941": {
+ "13987": {
"Type": "TRice",
"Strg": "CRITICAL:red+i:default+h\\n"
},
- "13942": {
+ "13988": {
"Type": "TRice",
"Strg": "EMERGENCY:red+i:blue\\n"
},
- "13943": {
+ "13989": {
"Type": "TRice",
"Strg": "ERROR:11:red\\n"
},
- "13944": {
+ "13990": {
"Type": "TRice",
"Strg": "WARNING:11+i:red\\n"
},
- "13945": {
+ "13991": {
"Type": "TRice",
"Strg": "ATTENTION:11:green\\n"
},
- "13946": {
+ "13992": {
"Type": "TRice",
"Strg": "INFO:cyan+b:default+h\\n"
},
- "13947": {
+ "13993": {
"Type": "TRice",
"Strg": "DEBUG:130+i\\n"
},
- "13948": {
+ "13994": {
"Type": "TRice",
"Strg": "TRACE:default+i:default+h\\n"
},
- "13949": {
+ "13995": {
"Type": "TRice",
"Strg": "TIME:blue+i:blue+h\\n"
},
- "13950": {
+ "13996": {
"Type": "TRice",
"Strg": "MESSAGE:green+h:black\\n"
},
- "13951": {
+ "13997": {
"Type": "TRice",
"Strg": "READ:black+i:yellow+h\\n"
},
- "13952": {
+ "13998": {
"Type": "TRice",
"Strg": "WRITE:black+u:yellow+h\\n"
},
- "13953": {
+ "13999": {
"Type": "TRice",
"Strg": "RECEIVE:black+h:black\\n"
},
- "13954": {
+ "14000": {
"Type": "TRice",
"Strg": "TRANSMIT:black:black+h\\n"
},
- "13955": {
+ "14001": {
"Type": "TRice",
"Strg": "DIAG:yellow+i:default+h\\n"
},
- "13956": {
+ "14002": {
"Type": "TRice",
"Strg": "INTERRUPT:magenta+i:default+h\\n"
},
- "13957": {
+ "14003": {
"Type": "TRice",
"Strg": "SIGNAL:118+i\\n"
},
- "13958": {
+ "14004": {
"Type": "TRice",
"Strg": "TEST:yellow+h:black\\n"
},
- "13959": {
+ "14005": {
"Type": "TRice",
"Strg": "DEFAULT:off\\n"
},
- "13960": {
+ "14006": {
"Type": "TRice",
"Strg": "NOTICE:blue:white+h\\n"
},
- "13961": {
+ "14007": {
"Type": "TRice",
"Strg": "ALERT:magenta:magenta+h\\n"
},
- "13962": {
+ "14008": {
"Type": "TRice",
"Strg": "ASSERT:yellow+i:blue\\n"
},
- "13963": {
+ "14009": {
"Type": "TRice",
"Strg": "ALARM:red+i:white+h\\n"
},
- "13964": {
+ "14010": {
"Type": "TRice",
"Strg": "VERBOSE:blue:default\\n"
},
- "13965": {
+ "14011": {
"Type": "TRice",
"Strg": "fatal:magenta+b:red\\n"
},
- "13966": {
+ "14012": {
"Type": "TRice",
"Strg": "critical:red+i:default+h\\n"
},
- "13967": {
+ "14013": {
"Type": "TRice",
"Strg": "emergency:red+i:blue\\n"
},
- "13968": {
+ "14014": {
"Type": "TRice",
"Strg": "error:11:red\\n"
},
- "13969": {
+ "14015": {
"Type": "TRice",
"Strg": "warning:11+i:red\\n"
},
- "13970": {
+ "14016": {
"Type": "TRice",
"Strg": "attention:11:green\\n"
},
- "13971": {
+ "14017": {
"Type": "TRice",
"Strg": "info:cyan+b:default+h\\n"
},
- "13972": {
+ "14018": {
"Type": "TRice",
"Strg": "debug:130+i\\n"
},
- "13973": {
+ "14019": {
"Type": "TRice",
"Strg": "trace:default+i:default+h\\n"
},
- "13974": {
+ "14020": {
"Type": "TRice",
"Strg": "time:blue+i:blue+h\\n"
},
- "13975": {
+ "14021": {
"Type": "TRice",
"Strg": "message:green+h:black\\n"
},
- "13976": {
+ "14022": {
"Type": "TRice",
"Strg": "read:black+i:yellow+h\\n"
},
- "13977": {
+ "14023": {
"Type": "TRice",
"Strg": "write:black+u:yellow+h\\n"
},
- "13978": {
+ "14024": {
"Type": "TRice",
"Strg": "receive:black+h:black\\n"
},
- "13979": {
+ "14025": {
"Type": "TRice",
"Strg": "transmit:black:black+h\\n"
},
- "13980": {
+ "14026": {
"Type": "TRice",
"Strg": "diag:yellow+i:default+h\\n"
},
- "13981": {
+ "14027": {
"Type": "TRice",
"Strg": "interrupt:magenta+i:default+h\\n"
},
- "13982": {
+ "14028": {
"Type": "TRice",
"Strg": "signal:118+i\\n"
},
- "13983": {
+ "14029": {
"Type": "TRice",
"Strg": "test:yellow+h:black\\n"
},
- "13984": {
+ "14030": {
"Type": "TRice",
"Strg": "default:off\\n"
},
- "13985": {
+ "14031": {
"Type": "TRice",
"Strg": "notice:blue:white+h\\n"
},
- "13986": {
+ "14032": {
"Type": "TRice",
"Strg": "alert:magenta:magenta+h\\n"
},
- "13987": {
+ "14033": {
"Type": "TRice",
"Strg": "assert:yellow+i:blue\\n"
},
- "13988": {
+ "14034": {
"Type": "TRice",
"Strg": "alarm:red+i:white+h\\n"
},
- "13989": {
+ "14035": {
"Type": "TRice",
"Strg": "verbose:blue:default\\n"
},
- "13990": {
+ "14036": {
"Type": "TRICE64",
"Strg": "msg:%d (%%d)\\n"
},
- "13991": {
+ "14037": {
"Type": "trice",
"Strg": "sig:TRICE8 with 1 to 12 values\\n"
},
- "13992": {
+ "14038": {
"Type": "trice",
"Strg": "rd:TRICE %d\\n"
},
- "13993": {
+ "14039": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d\\n"
},
- "13994": {
+ "14040": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d\\n"
},
- "13995": {
+ "14041": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d\\n"
},
- "13996": {
+ "14042": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d, %d\\n"
},
- "13997": {
+ "14043": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d, %d, %d\\n"
},
- "13998": {
+ "14044": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d, %d, %d, %d\\n"
},
- "13999": {
+ "14045": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14000": {
+ "14046": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14001": {
+ "14047": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14002": {
+ "14048": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14003": {
+ "14049": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14004": {
+ "14050": {
"Type": "trice",
"Strg": "rd:TRICE %d\\n"
},
- "14005": {
+ "14051": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d\\n"
},
- "14006": {
+ "14052": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d\\n"
},
- "14007": {
+ "14053": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d\\n"
},
- "14008": {
+ "14054": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d, %d\\n"
},
- "14009": {
+ "14055": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d, %d, %d\\n"
},
- "14010": {
+ "14056": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14011": {
+ "14057": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14012": {
+ "14058": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14013": {
+ "14059": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14014": {
+ "14060": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14015": {
+ "14061": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14016": {
+ "14062": {
"Type": "trice",
"Strg": "rd:TRICE %d\\n"
},
- "14017": {
+ "14063": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d\\n"
},
- "14018": {
+ "14064": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d\\n"
},
- "14019": {
+ "14065": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d\\n"
},
- "14020": {
+ "14066": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d, %d\\n"
},
- "14021": {
+ "14067": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d, %d, %d\\n"
},
- "14022": {
+ "14068": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14023": {
+ "14069": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14024": {
+ "14070": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14025": {
+ "14071": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14026": {
+ "14072": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14027": {
+ "14073": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14028": {
+ "14074": {
"Type": "trice",
"Strg": "sig:TRICE_n with 1 to 12 values\\n"
},
- "14029": {
+ "14075": {
"Type": "TRICE_1",
"Strg": "rd:TRICE_1 %d\\n"
},
- "14030": {
+ "14076": {
"Type": "TRICE_2",
"Strg": "rd:TRICE_2 %d, %d\\n"
},
- "14031": {
+ "14077": {
"Type": "TRICE_3",
"Strg": "rd:TRICE_3 %d, %d, %d\\n"
},
- "14032": {
+ "14078": {
"Type": "TRICE_4",
"Strg": "rd:TRICE_4 %d, %d, %d, %d\\n"
},
- "14033": {
+ "14079": {
"Type": "TRICE_5",
"Strg": "rd:TRICE_5 %d, %d, %d, %d, %d\\n"
},
- "14034": {
+ "14080": {
"Type": "TRICE_6",
"Strg": "rd:TRICE_6 %d, %d, %d, %d, %d, %d\\n"
},
- "14035": {
+ "14081": {
"Type": "TRICE_7",
"Strg": "rd:TRICE_7 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14036": {
+ "14082": {
"Type": "TRICE_8",
"Strg": "rd:TRICE_8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14037": {
+ "14083": {
"Type": "TRICE_9",
"Strg": "rd:TRICE_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14038": {
+ "14084": {
"Type": "TRICE_10",
"Strg": "rd:TRICE_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14039": {
+ "14085": {
"Type": "TRICE_11",
"Strg": "rd:TRICE_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14040": {
+ "14086": {
"Type": "TRICE_12",
"Strg": "rd:TRICE_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14041": {
+ "14087": {
"Type": "TRICE_1",
"Strg": "rd:TRICE_1 %d\\n"
},
- "14042": {
+ "14088": {
"Type": "TRICE_2",
"Strg": "rd:TRICE_2 %d, %d\\n"
},
- "14043": {
+ "14089": {
"Type": "TRICE_3",
"Strg": "rd:TRICE_3 %d, %d, %d\\n"
},
- "14044": {
+ "14090": {
"Type": "TRICE_4",
"Strg": "rd:TRICE_4 %d, %d, %d, %d\\n"
},
- "14045": {
+ "14091": {
"Type": "TRICE_5",
"Strg": "rd:TRICE_5 %d, %d, %d, %d, %d\\n"
},
- "14046": {
+ "14092": {
"Type": "TRICE_6",
"Strg": "rd:TRICE_6 %d, %d, %d, %d, %d, %d\\n"
},
- "14047": {
+ "14093": {
"Type": "TRICE_7",
"Strg": "rd:TRICE_7 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14048": {
+ "14094": {
"Type": "TRICE_8",
"Strg": "rd:TRICE_8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14049": {
+ "14095": {
"Type": "TRICE_9",
"Strg": "rd:TRICE_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14050": {
+ "14096": {
"Type": "TRICE_10",
"Strg": "rd:TRICE_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14051": {
+ "14097": {
"Type": "TRICE_11",
"Strg": "rd:TRICE_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14052": {
+ "14098": {
"Type": "TRICE_12",
"Strg": "rd:TRICE_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14053": {
+ "14099": {
"Type": "TRICE_1",
"Strg": "rd:TRICE_1 %d\\n"
},
- "14054": {
+ "14100": {
"Type": "TRICE_2",
"Strg": "rd:TRICE_2 %d, %d\\n"
},
- "14055": {
+ "14101": {
"Type": "TRICE_3",
"Strg": "rd:TRICE_3 %d, %d, %d\\n"
},
- "14056": {
+ "14102": {
"Type": "TRICE_4",
"Strg": "rd:TRICE_4 %d, %d, %d, %d\\n"
},
- "14057": {
+ "14103": {
"Type": "TRICE_5",
"Strg": "rd:TRICE_5 %d, %d, %d, %d, %d\\n"
},
- "14058": {
+ "14104": {
"Type": "TRICE_6",
"Strg": "rd:TRICE_6 %d, %d, %d, %d, %d, %d\\n"
},
- "14059": {
+ "14105": {
"Type": "TRICE_7",
"Strg": "rd:TRICE_7 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14060": {
+ "14106": {
"Type": "TRICE_8",
"Strg": "rd:TRICE_8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14061": {
+ "14107": {
"Type": "TRICE_9",
"Strg": "rd:TRICE_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14062": {
+ "14108": {
"Type": "TRICE_10",
"Strg": "rd:TRICE_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14063": {
+ "14109": {
"Type": "TRICE_11",
"Strg": "rd:TRICE_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14064": {
+ "14110": {
"Type": "TRICE_12",
"Strg": "rd:TRICE_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14065": {
+ "14111": {
"Type": "TRICE",
"Strg": "sig:trice_n with 1 to 12 values\\n"
},
- "14066": {
+ "14112": {
"Type": "trice_1",
"Strg": "rd:trice_1 %d\\n"
},
- "14067": {
+ "14113": {
"Type": "trice_2",
"Strg": "rd:trice_2 %d, %d\\n"
},
- "14068": {
+ "14114": {
"Type": "trice_3",
"Strg": "rd:trice_3 %d, %d, %d\\n"
},
- "14069": {
+ "14115": {
"Type": "trice_4",
"Strg": "rd:trice_4 %d, %d, %d, %d\\n"
},
- "14070": {
+ "14116": {
"Type": "trice_5",
"Strg": "rd:trice_5 %d, %d, %d, %d, %d\\n"
},
- "14071": {
+ "14117": {
"Type": "trice_6",
"Strg": "rd:trice_6 %d, %d, %d, %d, %d, %d\\n"
},
- "14072": {
+ "14118": {
"Type": "trice_7",
"Strg": "rd:trice_7 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14073": {
+ "14119": {
"Type": "trice_8",
"Strg": "rd:trice_8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14074": {
+ "14120": {
"Type": "trice_9",
"Strg": "rd:trice_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14075": {
+ "14121": {
"Type": "trice_10",
"Strg": "rd:trice_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14076": {
+ "14122": {
"Type": "trice_11",
"Strg": "rd:trice_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14077": {
+ "14123": {
"Type": "trice_12",
"Strg": "rd:trice_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14078": {
+ "14124": {
"Type": "Trice_1",
"Strg": "rd:Trice_1 %d\\n"
},
- "14079": {
+ "14125": {
"Type": "Trice_2",
"Strg": "rd:Trice_2 %d, %d\\n"
},
- "14080": {
+ "14126": {
"Type": "Trice_3",
"Strg": "rd:Trice_3 %d, %d, %d\\n"
},
- "14081": {
+ "14127": {
"Type": "Trice_4",
"Strg": "rd:Trice_4 %d, %d, %d, %d\\n"
},
- "14082": {
+ "14128": {
"Type": "Trice_5",
"Strg": "rd:Trice_5 %d, %d, %d, %d, %d\\n"
},
- "14083": {
+ "14129": {
"Type": "Trice_6",
"Strg": "rd:Trice_6 %d, %d, %d, %d, %d, %d\\n"
},
- "14084": {
+ "14130": {
"Type": "Trice_7",
"Strg": "rd:Trice_7 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14085": {
+ "14131": {
"Type": "Trice_8",
"Strg": "rd:Trice_8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14086": {
+ "14132": {
"Type": "Trice_9",
"Strg": "rd:Trice_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14087": {
+ "14133": {
"Type": "Trice_10",
"Strg": "rd:Trice_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14088": {
+ "14134": {
"Type": "Trice_11",
"Strg": "rd:Trice_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14089": {
+ "14135": {
"Type": "Trice_12",
"Strg": "rd:Trice_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14090": {
+ "14136": {
"Type": "TRice_1",
"Strg": "rd:TRice_1 %d\\n"
},
- "14091": {
+ "14137": {
"Type": "TRice_2",
"Strg": "rd:TRice_2 %d, %d\\n"
},
- "14092": {
+ "14138": {
"Type": "TRice_3",
"Strg": "rd:TRice_3 %d, %d, %d\\n"
},
- "14093": {
+ "14139": {
"Type": "TRice_4",
"Strg": "rd:TRice_4 %d, %d, %d, %d\\n"
},
- "14094": {
+ "14140": {
"Type": "TRice_5",
"Strg": "rd:TRice_5 %d, %d, %d, %d, %d\\n"
},
- "14095": {
+ "14141": {
"Type": "TRice_6",
"Strg": "rd:TRice_6 %d, %d, %d, %d, %d, %d\\n"
},
- "14096": {
+ "14142": {
"Type": "TRice_7",
"Strg": "rd:TRice_7 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14097": {
+ "14143": {
"Type": "TRice_8",
"Strg": "rd:TRice_8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14098": {
+ "14144": {
"Type": "TRice_9",
"Strg": "rd:TRice_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14099": {
+ "14145": {
"Type": "TRice_10",
"Strg": "rd:TRice_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14100": {
+ "14146": {
"Type": "TRice_11",
"Strg": "rd:TRice_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14101": {
+ "14147": {
"Type": "TRice_12",
"Strg": "rd:TRice_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14102": {
+ "14148": {
"Type": "trice",
"Strg": "sig:TRICE8 with 1 to 12 values\\n"
},
- "14103": {
+ "14149": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d\\n"
},
- "14104": {
+ "14150": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d, %d\\n"
},
- "14105": {
+ "14151": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d, %d, %d\\n"
},
- "14106": {
+ "14152": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d, %d, %d, %d\\n"
},
- "14107": {
+ "14153": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d, %d, %d, %d, %d\\n"
},
- "14108": {
+ "14154": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d, %d, %d, %d, %d, %d\\n"
},
- "14109": {
+ "14155": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14110": {
+ "14156": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14111": {
+ "14157": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14112": {
+ "14158": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14113": {
+ "14159": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14114": {
+ "14160": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14115": {
+ "14161": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d\\n"
},
- "14116": {
+ "14162": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d, %d\\n"
},
- "14117": {
+ "14163": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d, %d, %d\\n"
},
- "14118": {
+ "14164": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d, %d, %d, %d\\n"
},
- "14119": {
+ "14165": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d, %d, %d, %d, %d\\n"
},
- "14120": {
+ "14166": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d, %d, %d, %d, %d, %d\\n"
},
- "14121": {
+ "14167": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14122": {
+ "14168": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14123": {
+ "14169": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14124": {
+ "14170": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14125": {
+ "14171": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14126": {
+ "14172": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14127": {
+ "14173": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d\\n"
},
- "14128": {
+ "14174": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d, %d\\n"
},
- "14129": {
+ "14175": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d, %d, %d\\n"
},
- "14130": {
+ "14176": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d, %d, %d, %d\\n"
},
- "14131": {
+ "14177": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d, %d, %d, %d, %d\\n"
},
- "14132": {
+ "14178": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d, %d, %d, %d, %d, %d\\n"
},
- "14133": {
+ "14179": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14134": {
+ "14180": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14135": {
+ "14181": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14136": {
+ "14182": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14137": {
+ "14183": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14138": {
+ "14184": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14139": {
+ "14185": {
"Type": "trice",
"Strg": "sig:TRICE8_n with 1 to 12 values\\n"
},
- "14140": {
+ "14186": {
"Type": "TRICE8_1",
"Strg": "rd:TRICE8_1 %d\\n"
},
- "14141": {
+ "14187": {
"Type": "TRICE8_2",
"Strg": "rd:TRICE8_2 %d, %d\\n"
},
- "14142": {
+ "14188": {
"Type": "TRICE8_3",
"Strg": "rd:TRICE8_3 %d, %d, %d\\n"
},
- "14143": {
+ "14189": {
"Type": "TRICE8_4",
"Strg": "rd:TRICE8_4 %d, %d, %d, %d\\n"
},
- "14144": {
+ "14190": {
"Type": "TRICE8_5",
"Strg": "rd:TRICE8_5 %d, %d, %d, %d, %d\\n"
},
- "14145": {
+ "14191": {
"Type": "TRICE8_6",
"Strg": "rd:TRICE8_6 %d, %d, %d, %d, %d, %d\\n"
},
- "14146": {
+ "14192": {
"Type": "TRICE8_7",
"Strg": "rd:TRICE8_7 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14147": {
+ "14193": {
"Type": "TRICE8_8",
"Strg": "rd:TRICE8_8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14148": {
+ "14194": {
"Type": "TRICE8_9",
"Strg": "rd:TRICE8_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14149": {
+ "14195": {
"Type": "TRICE8_10",
"Strg": "rd:TRICE8_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14150": {
+ "14196": {
"Type": "TRICE8_11",
"Strg": "rd:TRICE8_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14151": {
+ "14197": {
"Type": "TRICE8_12",
"Strg": "rd:TRICE8_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14152": {
+ "14198": {
"Type": "TRICE8_1",
"Strg": "rd:TRICE8_1 %d\\n"
},
- "14153": {
+ "14199": {
"Type": "TRICE8_2",
"Strg": "rd:TRICE8_2 %d, %d\\n"
},
- "14154": {
+ "14200": {
"Type": "TRICE8_3",
"Strg": "rd:TRICE8_3 %d, %d, %d\\n"
},
- "14155": {
+ "14201": {
"Type": "TRICE8_4",
"Strg": "rd:TRICE8_4 %d, %d, %d, %d\\n"
},
- "14156": {
+ "14202": {
"Type": "TRICE8_5",
"Strg": "rd:TRICE8_5 %d, %d, %d, %d, %d\\n"
},
- "14157": {
+ "14203": {
"Type": "TRICE8_6",
"Strg": "rd:TRICE8_6 %d, %d, %d, %d, %d, %d\\n"
},
- "14158": {
+ "14204": {
"Type": "TRICE8_7",
"Strg": "rd:TRICE8_7 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14159": {
+ "14205": {
"Type": "TRICE8_8",
"Strg": "rd:TRICE8_8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14160": {
+ "14206": {
"Type": "TRICE8_9",
"Strg": "rd:TRICE8_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14161": {
+ "14207": {
"Type": "TRICE8_10",
"Strg": "rd:TRICE8_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14162": {
+ "14208": {
"Type": "TRICE8_11",
"Strg": "rd:TRICE8_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14163": {
+ "14209": {
"Type": "TRICE8_12",
"Strg": "rd:TRICE8_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14164": {
+ "14210": {
"Type": "TRICE8_1",
"Strg": "rd:TRICE8_1 %d\\n"
},
- "14165": {
+ "14211": {
"Type": "TRICE8_2",
"Strg": "rd:TRICE8_2 %d, %d\\n"
},
- "14166": {
+ "14212": {
"Type": "TRICE8_3",
"Strg": "rd:TRICE8_3 %d, %d, %d\\n"
},
- "14167": {
+ "14213": {
"Type": "TRICE8_4",
"Strg": "rd:TRICE8_4 %d, %d, %d, %d\\n"
},
- "14168": {
+ "14214": {
"Type": "TRICE8_5",
"Strg": "rd:TRICE8_5 %d, %d, %d, %d, %d\\n"
},
- "14169": {
+ "14215": {
"Type": "TRICE8_6",
"Strg": "rd:TRICE8_6 %d, %d, %d, %d, %d, %d\\n"
},
- "14170": {
+ "14216": {
"Type": "TRICE8_7",
"Strg": "rd:TRICE8_7 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14171": {
+ "14217": {
"Type": "TRICE8_8",
"Strg": "rd:TRICE8_8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14172": {
+ "14218": {
"Type": "TRICE8_9",
"Strg": "rd:TRICE8_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14173": {
+ "14219": {
"Type": "TRICE8_10",
"Strg": "rd:TRICE8_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14174": {
+ "14220": {
"Type": "TRICE8_11",
"Strg": "rd:TRICE8_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14175": {
+ "14221": {
"Type": "TRICE8_12",
"Strg": "rd:TRICE8_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14176": {
+ "14222": {
"Type": "trice",
"Strg": "sig:trice8 with 1 to 12 values\\n"
},
- "14177": {
+ "14223": {
"Type": "trice8",
"Strg": "rd:trice8 %d\\n"
},
- "14178": {
+ "14224": {
"Type": "trice8",
"Strg": "rd:trice8 %d, %d\\n"
},
- "14179": {
+ "14225": {
"Type": "trice8",
"Strg": "rd:trice8 %d, %d, %d\\n"
},
- "14180": {
+ "14226": {
"Type": "trice8",
"Strg": "rd:trice8 %d, %d, %d, %d\\n"
},
- "14181": {
+ "14227": {
"Type": "trice8",
"Strg": "rd:trice8 %d, %d, %d, %d, %d\\n"
},
- "14182": {
+ "14228": {
"Type": "trice8",
"Strg": "rd:trice8 %d, %d, %d, %d, %d, %d\\n"
},
- "14183": {
+ "14229": {
"Type": "trice8",
"Strg": "rd:trice8 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14184": {
+ "14230": {
"Type": "trice8",
"Strg": "rd:trice8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14185": {
+ "14231": {
"Type": "trice8",
"Strg": "rd:trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14186": {
+ "14232": {
"Type": "trice8",
"Strg": "rd:trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14187": {
+ "14233": {
"Type": "trice8",
"Strg": "rd:trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14188": {
+ "14234": {
"Type": "trice8",
"Strg": "rd:trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14189": {
+ "14235": {
"Type": "Trice8",
"Strg": "rd:Trice8 %d\\n"
},
- "14190": {
+ "14236": {
"Type": "Trice8",
"Strg": "rd:Trice8 %d, %d\\n"
},
- "14191": {
+ "14237": {
"Type": "Trice8",
"Strg": "rd:Trice8 %d, %d, %d\\n"
},
- "14192": {
+ "14238": {
"Type": "Trice8",
"Strg": "rd:Trice8 %d, %d, %d, %d\\n"
},
- "14193": {
+ "14239": {
"Type": "Trice8",
"Strg": "rd:Trice8 %d, %d, %d, %d, %d\\n"
},
- "14194": {
+ "14240": {
"Type": "Trice8",
"Strg": "rd:Trice8 %d, %d, %d, %d, %d, %d\\n"
},
- "14195": {
+ "14241": {
"Type": "Trice8",
"Strg": "rd:Trice8 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14196": {
+ "14242": {
"Type": "Trice8",
"Strg": "rd:Trice8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14197": {
+ "14243": {
"Type": "Trice8",
"Strg": "rd:Trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14198": {
+ "14244": {
"Type": "Trice8",
"Strg": "rd:Trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14199": {
+ "14245": {
"Type": "Trice8",
"Strg": "rd:Trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14200": {
+ "14246": {
"Type": "Trice8",
"Strg": "rd:Trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14201": {
+ "14247": {
"Type": "TRice8",
"Strg": "rd:TRice8 %d\\n"
},
- "14202": {
+ "14248": {
"Type": "TRice8",
"Strg": "rd:TRice8 %d, %d\\n"
},
- "14203": {
+ "14249": {
"Type": "TRice8",
"Strg": "rd:TRice8 %d, %d, %d\\n"
},
- "14204": {
+ "14250": {
"Type": "TRice8",
"Strg": "rd:TRice8 %d, %d, %d, %d\\n"
},
- "14205": {
+ "14251": {
"Type": "TRice8",
"Strg": "rd:TRice8 %d, %d, %d, %d, %d\\n"
},
- "14206": {
+ "14252": {
"Type": "TRice8",
"Strg": "rd:TRice8 %d, %d, %d, %d, %d, %d\\n"
},
- "14207": {
+ "14253": {
"Type": "TRice8",
"Strg": "rd:TRice8 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14208": {
+ "14254": {
"Type": "TRice8",
"Strg": "rd:TRice8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14209": {
+ "14255": {
"Type": "TRice8",
"Strg": "rd:TRice8 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14210": {
+ "14256": {
"Type": "TRice8",
"Strg": "rd:TRice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14211": {
+ "14257": {
"Type": "TRice8",
"Strg": "rd:TRice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14212": {
+ "14258": {
"Type": "TRice8",
"Strg": "rd:TRice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14213": {
+ "14259": {
"Type": "TRICE",
"Strg": "sig:trice8_n with 1 to 12 values\\n"
},
- "14214": {
+ "14260": {
"Type": "trice8_1",
"Strg": "rd:trice8_1 %d\\n"
},
- "14215": {
+ "14261": {
"Type": "trice8_2",
"Strg": "rd:trice8_2 %d, %d\\n"
},
- "14216": {
+ "14262": {
"Type": "trice8_3",
"Strg": "rd:trice8_3 %d, %d, %d\\n"
},
- "14217": {
+ "14263": {
"Type": "trice8_4",
"Strg": "rd:trice8_4 %d, %d, %d, %d\\n"
},
- "14218": {
+ "14264": {
"Type": "trice8_5",
"Strg": "rd:trice8_5 %d, %d, %d, %d, %d\\n"
},
- "14219": {
+ "14265": {
"Type": "trice8_6",
"Strg": "rd:trice8_6 %d, %d, %d, %d, %d, %d\\n"
},
- "14220": {
+ "14266": {
"Type": "trice8_7",
"Strg": "rd:trice8_7 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14221": {
+ "14267": {
"Type": "trice8_8",
"Strg": "rd:trice8_8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14222": {
+ "14268": {
"Type": "trice8_9",
"Strg": "rd:trice8_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14223": {
+ "14269": {
"Type": "trice8_10",
"Strg": "rd:trice8_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14224": {
+ "14270": {
"Type": "trice8_11",
"Strg": "rd:trice8_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14225": {
+ "14271": {
"Type": "trice8_12",
"Strg": "rd:trice8_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14226": {
+ "14272": {
"Type": "Trice8_1",
"Strg": "rd:Trice8_1 %d\\n"
},
- "14227": {
+ "14273": {
"Type": "Trice8_2",
"Strg": "rd:Trice8_2 %d, %d\\n"
},
- "14228": {
+ "14274": {
"Type": "Trice8_3",
"Strg": "rd:Trice8_3 %d, %d, %d\\n"
},
- "14229": {
+ "14275": {
"Type": "Trice8_4",
"Strg": "rd:Trice8_4 %d, %d, %d, %d\\n"
},
- "14230": {
+ "14276": {
"Type": "Trice8_5",
"Strg": "rd:Trice8_5 %d, %d, %d, %d, %d\\n"
},
- "14231": {
+ "14277": {
"Type": "Trice8_6",
"Strg": "rd:Trice8_6 %d, %d, %d, %d, %d, %d\\n"
},
- "14232": {
+ "14278": {
"Type": "Trice8_7",
"Strg": "rd:Trice8_7 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14233": {
+ "14279": {
"Type": "Trice8_8",
"Strg": "rd:Trice8_8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14234": {
+ "14280": {
"Type": "Trice8_9",
"Strg": "rd:Trice8_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14235": {
+ "14281": {
"Type": "Trice8_10",
"Strg": "rd:Trice8_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14236": {
+ "14282": {
"Type": "Trice8_11",
"Strg": "rd:Trice8_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14237": {
+ "14283": {
"Type": "Trice8_12",
"Strg": "rd:Trice8_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14238": {
+ "14284": {
"Type": "TRice8_1",
"Strg": "rd:TRice8_1 %d\\n"
},
- "14239": {
+ "14285": {
"Type": "TRice8_2",
"Strg": "rd:TRice8_2 %d, %d\\n"
},
- "14240": {
+ "14286": {
"Type": "TRice8_3",
"Strg": "rd:TRice8_3 %d, %d, %d\\n"
},
- "14241": {
+ "14287": {
"Type": "TRice8_4",
"Strg": "rd:TRice8_4 %d, %d, %d, %d\\n"
},
- "14242": {
+ "14288": {
"Type": "TRice8_5",
"Strg": "rd:TRice8_5 %d, %d, %d, %d, %d\\n"
},
- "14243": {
+ "14289": {
"Type": "TRice8_6",
"Strg": "rd:TRice8_6 %d, %d, %d, %d, %d, %d\\n"
},
- "14244": {
+ "14290": {
"Type": "TRice8_7",
"Strg": "rd:TRice8_7 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14245": {
+ "14291": {
"Type": "TRice8_8",
"Strg": "rd:TRice8_8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14246": {
+ "14292": {
"Type": "TRice8_9",
"Strg": "rd:TRice8_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14247": {
+ "14293": {
"Type": "TRice8_10",
"Strg": "rd:TRice8_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14248": {
+ "14294": {
"Type": "TRice8_11",
"Strg": "rd:TRice8_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14249": {
+ "14295": {
"Type": "TRice8_12",
"Strg": "rd:TRice8_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14250": {
+ "14296": {
"Type": "trice",
"Strg": "sig:TRICE16 with 1 to 12 values (line %d)\\n"
},
- "14251": {
+ "14297": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d\\n"
},
- "14252": {
+ "14298": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d, %d\\n"
},
- "14253": {
+ "14299": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d, %d, %d\\n"
},
- "14254": {
+ "14300": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d, %d, %d, %d\\n"
},
- "14255": {
+ "14301": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d, %d, %d, %d, %d\\n"
},
- "14256": {
+ "14302": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d, %d, %d, %d, %d, %d\\n"
},
- "14257": {
+ "14303": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14258": {
+ "14304": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14259": {
+ "14305": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14260": {
+ "14306": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14261": {
+ "14307": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14262": {
+ "14308": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14263": {
+ "14309": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d\\n"
},
- "14264": {
+ "14310": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d, %d\\n"
},
- "14265": {
+ "14311": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d, %d, %d\\n"
},
- "14266": {
+ "14312": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d, %d, %d, %d\\n"
},
- "14267": {
+ "14313": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d, %d, %d, %d, %d\\n"
},
- "14268": {
+ "14314": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d, %d, %d, %d, %d, %d\\n"
},
- "14269": {
+ "14315": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14270": {
+ "14316": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14271": {
+ "14317": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14272": {
+ "14318": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14273": {
+ "14319": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14274": {
+ "14320": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14275": {
+ "14321": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d\\n"
},
- "14276": {
+ "14322": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d, %d\\n"
},
- "14277": {
+ "14323": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d, %d, %d\\n"
},
- "14278": {
+ "14324": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d, %d, %d, %d\\n"
},
- "14279": {
+ "14325": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d, %d, %d, %d, %d\\n"
},
- "14280": {
+ "14326": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d, %d, %d, %d, %d, %d\\n"
},
- "14281": {
+ "14327": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14282": {
+ "14328": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14283": {
+ "14329": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14284": {
+ "14330": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14285": {
+ "14331": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14286": {
+ "14332": {
"Type": "trice16",
"Strg": "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14287": {
+ "14333": {
"Type": "trice",
"Strg": "sig:TRICE16_n with 1 to 12 values (line %d)\\n"
},
- "14288": {
+ "14334": {
"Type": "TRICE16_1",
"Strg": "rd:TRICE16_1 %d\\n"
},
- "14289": {
+ "14335": {
"Type": "TRICE16_2",
"Strg": "rd:TRICE16_2 %d, %d\\n"
},
- "14290": {
+ "14336": {
"Type": "TRICE16_3",
"Strg": "rd:TRICE16_3 %d, %d, %d\\n"
},
- "14291": {
+ "14337": {
"Type": "TRICE16_4",
"Strg": "rd:TRICE16_4 %d, %d, %d, %d\\n"
},
- "14292": {
+ "14338": {
"Type": "TRICE16_5",
"Strg": "rd:TRICE16_5 %d, %d, %d, %d, %d\\n"
},
- "14293": {
+ "14339": {
"Type": "TRICE16_6",
"Strg": "rd:TRICE16_6 %d, %d, %d, %d, %d, %d\\n"
},
- "14294": {
+ "14340": {
"Type": "TRICE16_7",
"Strg": "rd:TRICE16_7 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14295": {
+ "14341": {
"Type": "TRICE16_8",
"Strg": "rd:TRICE16_8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14296": {
+ "14342": {
"Type": "TRICE16_9",
"Strg": "rd:TRICE16_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14297": {
+ "14343": {
"Type": "TRICE16_10",
"Strg": "rd:TRICE16_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14298": {
+ "14344": {
"Type": "TRICE16_11",
"Strg": "rd:TRICE16_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14299": {
+ "14345": {
"Type": "TRICE16_12",
"Strg": "rd:TRICE16_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14300": {
+ "14346": {
"Type": "TRICE16_1",
"Strg": "rd:TRICE16_1 %d\\n"
},
- "14301": {
+ "14347": {
"Type": "TRICE16_2",
"Strg": "rd:TRICE16_2 %d, %d\\n"
},
- "14302": {
+ "14348": {
"Type": "TRICE16_3",
"Strg": "rd:TRICE16_3 %d, %d, %d\\n"
},
- "14303": {
+ "14349": {
"Type": "TRICE16_4",
"Strg": "rd:TRICE16_4 %d, %d, %d, %d\\n"
},
- "14304": {
+ "14350": {
"Type": "TRICE16_5",
"Strg": "rd:TRICE16_5 %d, %d, %d, %d, %d\\n"
},
- "14305": {
+ "14351": {
"Type": "TRICE16_6",
"Strg": "rd:TRICE16_6 %d, %d, %d, %d, %d, %d\\n"
},
- "14306": {
+ "14352": {
"Type": "TRICE16_7",
"Strg": "rd:TRICE16_7 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14307": {
+ "14353": {
"Type": "TRICE16_8",
"Strg": "rd:TRICE16_8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14308": {
+ "14354": {
"Type": "TRICE16_9",
"Strg": "rd:TRICE16_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14309": {
+ "14355": {
"Type": "TRICE16_10",
"Strg": "rd:TRICE16_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14310": {
+ "14356": {
"Type": "TRICE16_11",
"Strg": "rd:TRICE16_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14311": {
+ "14357": {
"Type": "TRICE16_12",
"Strg": "rd:TRICE16_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14312": {
+ "14358": {
"Type": "TRICE16_1",
"Strg": "rd:TRICE16_1 %d\\n"
},
- "14313": {
+ "14359": {
"Type": "TRICE16_2",
"Strg": "rd:TRICE16_2 %d, %d\\n"
},
- "14314": {
+ "14360": {
"Type": "TRICE16_3",
"Strg": "rd:TRICE16_3 %d, %d, %d\\n"
},
- "14315": {
+ "14361": {
"Type": "TRICE16_4",
"Strg": "rd:TRICE16_4 %d, %d, %d, %d\\n"
},
- "14316": {
+ "14362": {
"Type": "TRICE16_5",
"Strg": "rd:TRICE16_5 %d, %d, %d, %d, %d\\n"
},
- "14317": {
+ "14363": {
"Type": "TRICE16_6",
"Strg": "rd:TRICE16_6 %d, %d, %d, %d, %d, %d\\n"
},
- "14318": {
+ "14364": {
"Type": "TRICE16_7",
"Strg": "rd:TRICE16_7 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14319": {
+ "14365": {
"Type": "TRICE16_8",
"Strg": "rd:TRICE16_8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14320": {
+ "14366": {
"Type": "TRICE16_9",
"Strg": "rd:TRICE16_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14321": {
+ "14367": {
"Type": "TRICE16_10",
"Strg": "rd:TRICE16_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14322": {
+ "14368": {
"Type": "TRICE16_11",
"Strg": "rd:TRICE16_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14323": {
+ "14369": {
"Type": "TRICE16_12",
"Strg": "rd:TRICE16_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14324": {
+ "14370": {
"Type": "trice",
"Strg": "sig:trice16 with 1 to 12 values (line %d)\\n"
},
- "14325": {
+ "14371": {
"Type": "trice16",
"Strg": "rd:trice16 %d\\n"
},
- "14326": {
+ "14372": {
"Type": "trice16",
"Strg": "rd:trice16 %d, %d\\n"
},
- "14327": {
+ "14373": {
"Type": "trice16",
"Strg": "rd:trice16 %d, %d, %d\\n"
},
- "14328": {
+ "14374": {
"Type": "trice16",
"Strg": "rd:trice16 %d, %d, %d, %d\\n"
},
- "14329": {
+ "14375": {
"Type": "trice16",
"Strg": "rd:trice16 %d, %d, %d, %d, %d\\n"
},
- "14330": {
+ "14376": {
"Type": "trice16",
"Strg": "rd:trice16 %d, %d, %d, %d, %d, %d\\n"
},
- "14331": {
+ "14377": {
"Type": "trice16",
"Strg": "rd:trice16 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14332": {
+ "14378": {
"Type": "trice16",
"Strg": "rd:trice16 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14333": {
+ "14379": {
"Type": "trice16",
"Strg": "rd:trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14334": {
+ "14380": {
"Type": "trice16",
"Strg": "rd:trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14335": {
+ "14381": {
"Type": "trice16",
"Strg": "rd:trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14336": {
+ "14382": {
"Type": "trice16",
"Strg": "rd:trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14337": {
+ "14383": {
"Type": "Trice16",
"Strg": "rd:Trice16 %d\\n"
},
- "14338": {
+ "14384": {
"Type": "Trice16",
"Strg": "rd:Trice16 %d, %d\\n"
},
- "14339": {
+ "14385": {
"Type": "Trice16",
"Strg": "rd:Trice16 %d, %d, %d\\n"
},
- "14340": {
+ "14386": {
"Type": "Trice16",
"Strg": "rd:Trice16 %d, %d, %d, %d\\n"
},
- "14341": {
+ "14387": {
"Type": "Trice16",
"Strg": "rd:Trice16 %d, %d, %d, %d, %d\\n"
},
- "14342": {
+ "14388": {
"Type": "Trice16",
"Strg": "rd:Trice16 %d, %d, %d, %d, %d, %d\\n"
},
- "14343": {
+ "14389": {
"Type": "Trice16",
"Strg": "rd:Trice16 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14344": {
+ "14390": {
"Type": "Trice16",
"Strg": "rd:Trice16 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14345": {
+ "14391": {
"Type": "Trice16",
"Strg": "rd:Trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14346": {
+ "14392": {
"Type": "Trice16",
"Strg": "rd:Trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14347": {
+ "14393": {
"Type": "Trice16",
"Strg": "rd:Trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14348": {
+ "14394": {
"Type": "Trice16",
"Strg": "rd:Trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14349": {
+ "14395": {
"Type": "TRice16",
"Strg": "rd:TRice16 %d\\n"
},
- "14350": {
+ "14396": {
"Type": "TRice16",
"Strg": "rd:TRice16 %d, %d\\n"
},
- "14351": {
+ "14397": {
"Type": "TRice16",
"Strg": "rd:TRice16 %d, %d, %d\\n"
},
- "14352": {
+ "14398": {
"Type": "TRice16",
"Strg": "rd:TRice16 %d, %d, %d, %d\\n"
},
- "14353": {
+ "14399": {
"Type": "TRice16",
"Strg": "rd:TRice16 %d, %d, %d, %d, %d\\n"
},
- "14354": {
+ "14400": {
"Type": "TRice16",
"Strg": "rd:TRice16 %d, %d, %d, %d, %d, %d\\n"
},
- "14355": {
+ "14401": {
"Type": "TRice16",
"Strg": "rd:TRice16 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14356": {
+ "14402": {
"Type": "TRice16",
"Strg": "rd:TRice16 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14357": {
+ "14403": {
"Type": "TRice16",
"Strg": "rd:TRice16 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14358": {
+ "14404": {
"Type": "TRice16",
"Strg": "rd:TRice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14359": {
+ "14405": {
"Type": "TRice16",
"Strg": "rd:TRice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14360": {
+ "14406": {
"Type": "TRice16",
"Strg": "rd:TRice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14361": {
+ "14407": {
"Type": "trice",
"Strg": "sig:trice16_n with 1 to 12 values (line %d)\\n"
},
- "14362": {
+ "14408": {
"Type": "trice16_1",
"Strg": "rd:trice16_1 %d\\n"
},
- "14363": {
+ "14409": {
"Type": "trice16_2",
"Strg": "rd:trice16_2 %d, %d\\n"
},
- "14364": {
+ "14410": {
"Type": "trice16_3",
"Strg": "rd:trice16_3 %d, %d, %d\\n"
},
- "14365": {
+ "14411": {
"Type": "trice16_4",
"Strg": "rd:trice16_4 %d, %d, %d, %d\\n"
},
- "14366": {
+ "14412": {
"Type": "trice16_5",
"Strg": "rd:trice16_5 %d, %d, %d, %d, %d\\n"
},
- "14367": {
+ "14413": {
"Type": "trice16_6",
"Strg": "rd:trice16_6 %d, %d, %d, %d, %d, %d\\n"
},
- "14368": {
+ "14414": {
"Type": "trice16_7",
"Strg": "rd:trice16_7 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14369": {
+ "14415": {
"Type": "trice16_8",
"Strg": "rd:trice16_8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14370": {
+ "14416": {
"Type": "trice16_9",
"Strg": "rd:trice16_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14371": {
+ "14417": {
"Type": "trice16_10",
"Strg": "rd:trice16_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14372": {
+ "14418": {
"Type": "trice16_11",
"Strg": "rd:trice16_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14373": {
+ "14419": {
"Type": "trice16_12",
"Strg": "rd:trice16_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14374": {
+ "14420": {
"Type": "Trice16_1",
"Strg": "rd:Trice16_1 %d\\n"
},
- "14375": {
+ "14421": {
"Type": "Trice16_2",
"Strg": "rd:Trice16_2 %d, %d\\n"
},
- "14376": {
+ "14422": {
"Type": "Trice16_3",
"Strg": "rd:Trice16_3 %d, %d, %d\\n"
},
- "14377": {
+ "14423": {
"Type": "Trice16_4",
"Strg": "rd:Trice16_4 %d, %d, %d, %d\\n"
},
- "14378": {
+ "14424": {
"Type": "Trice16_5",
"Strg": "rd:Trice16_5 %d, %d, %d, %d, %d\\n"
},
- "14379": {
+ "14425": {
"Type": "Trice16_6",
"Strg": "rd:Trice16_6 %d, %d, %d, %d, %d, %d\\n"
},
- "14380": {
+ "14426": {
"Type": "Trice16_7",
"Strg": "rd:Trice16_7 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14381": {
+ "14427": {
"Type": "Trice16_8",
"Strg": "rd:Trice16_8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14382": {
+ "14428": {
"Type": "Trice16_9",
"Strg": "rd:Trice16_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14383": {
+ "14429": {
"Type": "Trice16_10",
"Strg": "rd:Trice16_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14384": {
+ "14430": {
"Type": "Trice16_11",
"Strg": "rd:Trice16_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14385": {
+ "14431": {
"Type": "Trice16_12",
"Strg": "rd:Trice16_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14386": {
+ "14432": {
"Type": "TRice16_1",
"Strg": "rd:TRice16_1 %d\\n"
},
- "14387": {
+ "14433": {
"Type": "TRice16_2",
"Strg": "rd:TRice16_2 %d, %d\\n"
},
- "14388": {
+ "14434": {
"Type": "TRice16_3",
"Strg": "rd:TRice16_3 %d, %d, %d\\n"
},
- "14389": {
+ "14435": {
"Type": "TRice16_4",
"Strg": "rd:TRice16_4 %d, %d, %d, %d\\n"
},
- "14390": {
+ "14436": {
"Type": "TRice16_5",
"Strg": "rd:TRice16_5 %d, %d, %d, %d, %d\\n"
},
- "14391": {
+ "14437": {
"Type": "TRice16_6",
"Strg": "rd:TRice16_6 %d, %d, %d, %d, %d, %d\\n"
},
- "14392": {
+ "14438": {
"Type": "TRice16_7",
"Strg": "rd:TRice16_7 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14393": {
+ "14439": {
"Type": "TRice16_8",
"Strg": "rd:TRice16_8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14394": {
+ "14440": {
"Type": "TRice16_9",
"Strg": "rd:TRice16_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14395": {
+ "14441": {
"Type": "TRice16_10",
"Strg": "rd:TRice16_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14396": {
+ "14442": {
"Type": "TRice16_11",
"Strg": "rd:TRice16_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14397": {
+ "14443": {
"Type": "TRice16_12",
"Strg": "rd:TRice16_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14398": {
+ "14444": {
"Type": "trice",
"Strg": "sig:TRICE32 with 1 to 12 values (line %d)\\n"
},
- "14399": {
+ "14445": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d\\n"
},
- "14400": {
+ "14446": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d, %d\\n"
},
- "14401": {
+ "14447": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d, %d, %d\\n"
},
- "14402": {
+ "14448": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d, %d, %d, %d\\n"
},
- "14403": {
+ "14449": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d, %d, %d, %d, %d\\n"
},
- "14404": {
+ "14450": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d, %d, %d, %d, %d, %d\\n"
},
- "14405": {
+ "14451": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14406": {
+ "14452": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14407": {
+ "14453": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14408": {
+ "14454": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14409": {
+ "14455": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14410": {
+ "14456": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14411": {
+ "14457": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d\\n"
},
- "14412": {
+ "14458": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d, %d\\n"
},
- "14413": {
+ "14459": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d, %d, %d\\n"
},
- "14414": {
+ "14460": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d, %d, %d, %d\\n"
},
- "14415": {
+ "14461": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d, %d, %d, %d, %d\\n"
},
- "14416": {
+ "14462": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d, %d, %d, %d, %d, %d\\n"
},
- "14417": {
+ "14463": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14418": {
+ "14464": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14419": {
+ "14465": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14420": {
+ "14466": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14421": {
+ "14467": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14422": {
+ "14468": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14423": {
+ "14469": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d\\n"
},
- "14424": {
+ "14470": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d, %d\\n"
},
- "14425": {
+ "14471": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d, %d, %d\\n"
},
- "14426": {
+ "14472": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d, %d, %d, %d\\n"
},
- "14427": {
+ "14473": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d, %d, %d, %d, %d\\n"
},
- "14428": {
+ "14474": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d, %d, %d, %d, %d, %d\\n"
},
- "14429": {
+ "14475": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14430": {
+ "14476": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14431": {
+ "14477": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14432": {
+ "14478": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14433": {
+ "14479": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14434": {
+ "14480": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14435": {
+ "14481": {
"Type": "trice",
"Strg": "signal:TRICE32_n with 1 to 12 values (line %d)\\n"
},
- "14436": {
+ "14482": {
"Type": "TRICE32_1",
"Strg": "rd:TRICE32_1 %d\\n"
},
- "14437": {
+ "14483": {
"Type": "TRICE32_2",
"Strg": "rd:TRICE32_2 %d, %d\\n"
},
- "14438": {
+ "14484": {
"Type": "TRICE32_3",
"Strg": "rd:TRICE32_3 %d, %d, %d\\n"
},
- "14439": {
+ "14485": {
"Type": "TRICE32_4",
"Strg": "rd:TRICE32_4 %d, %d, %d, %d\\n"
},
- "14440": {
+ "14486": {
"Type": "TRICE32_5",
"Strg": "rd:TRICE32_5 %d, %d, %d, %d, %d\\n"
},
- "14441": {
+ "14487": {
"Type": "TRICE32_6",
"Strg": "rd:TRICE32_6 %d, %d, %d, %d, %d, %d\\n"
},
- "14442": {
+ "14488": {
"Type": "TRICE32_7",
"Strg": "rd:TRICE32_7 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14443": {
+ "14489": {
"Type": "TRICE32_8",
"Strg": "rd:TRICE32_8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14444": {
+ "14490": {
"Type": "TRICE32_9",
"Strg": "rd:TRICE32_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14445": {
+ "14491": {
"Type": "TRICE32_10",
"Strg": "rd:TRICE32_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14446": {
+ "14492": {
"Type": "TRICE32_11",
"Strg": "rd:TRICE32_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14447": {
+ "14493": {
"Type": "TRICE32_12",
"Strg": "rd:TRICE32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14448": {
+ "14494": {
"Type": "TRICE32_1",
"Strg": "rd:TRICE32_1 %d\\n"
},
- "14449": {
+ "14495": {
"Type": "TRICE32_2",
"Strg": "rd:TRICE32_2 %d, %d\\n"
},
- "14450": {
+ "14496": {
"Type": "TRICE32_3",
"Strg": "rd:TRICE32_3 %d, %d, %d\\n"
},
- "14451": {
+ "14497": {
"Type": "TRICE32_4",
"Strg": "rd:TRICE32_4 %d, %d, %d, %d\\n"
},
- "14452": {
+ "14498": {
"Type": "TRICE32_5",
"Strg": "rd:TRICE32_5 %d, %d, %d, %d, %d\\n"
},
- "14453": {
+ "14499": {
"Type": "TRICE32_6",
"Strg": "rd:TRICE32_6 %d, %d, %d, %d, %d, %d\\n"
},
- "14454": {
+ "14500": {
"Type": "TRICE32_7",
"Strg": "rd:TRICE32_7 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14455": {
+ "14501": {
"Type": "TRICE32_8",
"Strg": "rd:TRICE32_8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14456": {
+ "14502": {
"Type": "TRICE32_9",
"Strg": "rd:TRICE32_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14457": {
+ "14503": {
"Type": "TRICE32_10",
"Strg": "rd:TRICE32_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14458": {
+ "14504": {
"Type": "TRICE32_11",
"Strg": "rd:TRICE32_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14459": {
+ "14505": {
"Type": "TRICE32_12",
"Strg": "rd:TRICE32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14460": {
+ "14506": {
"Type": "TRICE32_1",
"Strg": "rd:TRICE32_1 %d\\n"
},
- "14461": {
+ "14507": {
"Type": "TRICE32_2",
"Strg": "rd:TRICE32_2 %d, %d\\n"
},
- "14462": {
+ "14508": {
"Type": "TRICE32_3",
"Strg": "rd:TRICE32_3 %d, %d, %d\\n"
},
- "14463": {
+ "14509": {
"Type": "TRICE32_4",
"Strg": "rd:TRICE32_4 %d, %d, %d, %d\\n"
},
- "14464": {
+ "14510": {
"Type": "TRICE32_5",
"Strg": "rd:TRICE32_5 %d, %d, %d, %d, %d\\n"
},
- "14465": {
+ "14511": {
"Type": "TRICE32_6",
"Strg": "rd:TRICE32_6 %d, %d, %d, %d, %d, %d\\n"
},
- "14466": {
+ "14512": {
"Type": "TRICE32_7",
"Strg": "rd:TRICE32_7 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14467": {
+ "14513": {
"Type": "TRICE32_8",
"Strg": "rd:TRICE32_8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14468": {
+ "14514": {
"Type": "TRICE32_9",
"Strg": "rd:TRICE32_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14469": {
+ "14515": {
"Type": "TRICE32_10",
"Strg": "rd:TRICE32_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14470": {
+ "14516": {
"Type": "TRICE32_11",
"Strg": "rd:TRICE32_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14471": {
+ "14517": {
"Type": "TRICE32_12",
"Strg": "rd:TRICE32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14472": {
+ "14518": {
"Type": "trice",
"Strg": "sig:trice32 with 1 to 12 values (line %d)\\n"
},
- "14473": {
+ "14519": {
"Type": "trice32",
"Strg": "rd:trice32 %d\\n"
},
- "14474": {
+ "14520": {
"Type": "trice32",
"Strg": "rd:trice32 %d, %d\\n"
},
- "14475": {
+ "14521": {
"Type": "trice32",
"Strg": "rd:trice32 %d, %d, %d\\n"
},
- "14476": {
+ "14522": {
"Type": "trice32",
"Strg": "rd:trice32 %d, %d, %d, %d\\n"
},
- "14477": {
+ "14523": {
"Type": "trice32",
"Strg": "rd:trice32 %d, %d, %d, %d, %d\\n"
},
- "14478": {
+ "14524": {
"Type": "trice32",
"Strg": "rd:trice32 %d, %d, %d, %d, %d, %d\\n"
},
- "14479": {
+ "14525": {
"Type": "trice32",
"Strg": "rd:trice32 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14480": {
+ "14526": {
"Type": "trice32",
"Strg": "rd:trice32 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14481": {
+ "14527": {
"Type": "trice32",
"Strg": "rd:trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14482": {
+ "14528": {
"Type": "trice32",
"Strg": "rd:trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14483": {
+ "14529": {
"Type": "trice32",
"Strg": "rd:trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14484": {
+ "14530": {
"Type": "trice32",
"Strg": "rd:trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14485": {
+ "14531": {
"Type": "Trice32",
"Strg": "rd:Trice32 %d\\n"
},
- "14486": {
+ "14532": {
"Type": "Trice32",
"Strg": "rd:Trice32 %d, %d\\n"
},
- "14487": {
+ "14533": {
"Type": "Trice32",
"Strg": "rd:Trice32 %d, %d, %d\\n"
},
- "14488": {
+ "14534": {
"Type": "Trice32",
"Strg": "rd:Trice32 %d, %d, %d, %d\\n"
},
- "14489": {
+ "14535": {
"Type": "Trice32",
"Strg": "rd:Trice32 %d, %d, %d, %d, %d\\n"
},
- "14490": {
+ "14536": {
"Type": "Trice32",
"Strg": "rd:Trice32 %d, %d, %d, %d, %d, %d\\n"
},
- "14491": {
+ "14537": {
"Type": "Trice32",
"Strg": "rd:Trice32 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14492": {
+ "14538": {
"Type": "Trice32",
"Strg": "rd:Trice32 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14493": {
+ "14539": {
"Type": "Trice32",
"Strg": "rd:Trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14494": {
+ "14540": {
"Type": "Trice32",
"Strg": "rd:Trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14495": {
+ "14541": {
"Type": "Trice32",
"Strg": "rd:Trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14496": {
+ "14542": {
"Type": "Trice32",
"Strg": "rd:Trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14497": {
+ "14543": {
"Type": "TRice32",
"Strg": "rd:TRice32 %d\\n"
},
- "14498": {
+ "14544": {
"Type": "TRice32",
"Strg": "rd:TRice32 %d, %d\\n"
},
- "14499": {
+ "14545": {
"Type": "TRice32",
"Strg": "rd:TRice32 %d, %d, %d\\n"
},
- "14500": {
+ "14546": {
"Type": "TRice32",
"Strg": "rd:TRice32 %d, %d, %d, %d\\n"
},
- "14501": {
+ "14547": {
"Type": "TRice32",
"Strg": "rd:TRice32 %d, %d, %d, %d, %d\\n"
},
- "14502": {
+ "14548": {
"Type": "TRice32",
"Strg": "rd:TRice32 %d, %d, %d, %d, %d, %d\\n"
},
- "14503": {
+ "14549": {
"Type": "TRice32",
"Strg": "rd:TRice32 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14504": {
+ "14550": {
"Type": "TRice32",
"Strg": "rd:TRice32 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14505": {
+ "14551": {
"Type": "TRice32",
"Strg": "rd:TRice32 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14506": {
+ "14552": {
"Type": "TRice32",
"Strg": "rd:TRice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14507": {
+ "14553": {
"Type": "TRice32",
"Strg": "rd:TRice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14508": {
+ "14554": {
"Type": "TRice32",
"Strg": "rd:TRice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14509": {
+ "14555": {
"Type": "trice",
"Strg": "signal:trice32_n with 1 to 12 values (line %d)\\n"
},
- "14510": {
+ "14556": {
"Type": "trice32_1",
"Strg": "rd:trice32_1 %d\\n"
},
- "14511": {
+ "14557": {
"Type": "trice32_2",
"Strg": "rd:trice32_2 %d, %d\\n"
},
- "14512": {
+ "14558": {
"Type": "trice32_3",
"Strg": "rd:trice32_3 %d, %d, %d\\n"
},
- "14513": {
+ "14559": {
"Type": "trice32_4",
"Strg": "rd:trice32_4 %d, %d, %d, %d\\n"
},
- "14514": {
+ "14560": {
"Type": "trice32_5",
"Strg": "rd:trice32_5 %d, %d, %d, %d, %d\\n"
},
- "14515": {
+ "14561": {
"Type": "trice32_6",
"Strg": "rd:trice32_6 %d, %d, %d, %d, %d, %d\\n"
},
- "14516": {
+ "14562": {
"Type": "trice32_7",
"Strg": "rd:trice32_7 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14517": {
+ "14563": {
"Type": "trice32_8",
"Strg": "rd:trice32_8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14518": {
+ "14564": {
"Type": "trice32_9",
"Strg": "rd:trice32_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14519": {
+ "14565": {
"Type": "trice32_10",
"Strg": "rd:trice32_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14520": {
+ "14566": {
"Type": "trice32_11",
"Strg": "rd:trice32_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14521": {
+ "14567": {
"Type": "trice32_12",
"Strg": "rd:trice32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14522": {
+ "14568": {
"Type": "Trice32_1",
"Strg": "rd:Trice32_1 %d\\n"
},
- "14523": {
+ "14569": {
"Type": "Trice32_2",
"Strg": "rd:Trice32_2 %d, %d\\n"
},
- "14524": {
+ "14570": {
"Type": "Trice32_3",
"Strg": "rd:Trice32_3 %d, %d, %d\\n"
},
- "14525": {
+ "14571": {
"Type": "Trice32_4",
"Strg": "rd:Trice32_4 %d, %d, %d, %d\\n"
},
- "14526": {
+ "14572": {
"Type": "Trice32_5",
"Strg": "rd:Trice32_5 %d, %d, %d, %d, %d\\n"
},
- "14527": {
+ "14573": {
"Type": "Trice32_6",
"Strg": "rd:Trice32_6 %d, %d, %d, %d, %d, %d\\n"
},
- "14528": {
+ "14574": {
"Type": "Trice32_7",
"Strg": "rd:Trice32_7 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14529": {
+ "14575": {
"Type": "Trice32_8",
"Strg": "rd:Trice32_8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14530": {
+ "14576": {
"Type": "Trice32_9",
"Strg": "rd:Trice32_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14531": {
+ "14577": {
"Type": "Trice32_10",
"Strg": "rd:Trice32_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14532": {
+ "14578": {
"Type": "Trice32_11",
"Strg": "rd:Trice32_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14533": {
+ "14579": {
"Type": "Trice32_12",
"Strg": "rd:Trice32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14534": {
+ "14580": {
"Type": "TRice32_1",
"Strg": "rd:TRice32_1 %d\\n"
},
- "14535": {
+ "14581": {
"Type": "TRice32_2",
"Strg": "rd:TRice32_2 %d, %d\\n"
},
- "14536": {
+ "14582": {
"Type": "TRice32_3",
"Strg": "rd:TRice32_3 %d, %d, %d\\n"
},
- "14537": {
+ "14583": {
"Type": "TRice32_4",
"Strg": "rd:TRice32_4 %d, %d, %d, %d\\n"
},
- "14538": {
+ "14584": {
"Type": "TRice32_5",
"Strg": "rd:TRice32_5 %d, %d, %d, %d, %d\\n"
},
- "14539": {
+ "14585": {
"Type": "TRice32_6",
"Strg": "rd:TRice32_6 %d, %d, %d, %d, %d, %d\\n"
},
- "14540": {
+ "14586": {
"Type": "TRice32_7",
"Strg": "rd:TRice32_7 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14541": {
+ "14587": {
"Type": "TRice32_8",
"Strg": "rd:TRice32_8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14542": {
+ "14588": {
"Type": "TRice32_9",
"Strg": "rd:TRice32_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14543": {
+ "14589": {
"Type": "TRice32_10",
"Strg": "rd:TRice32_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14544": {
+ "14590": {
"Type": "TRice32_11",
"Strg": "rd:TRice32_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14545": {
+ "14591": {
"Type": "TRice32_12",
"Strg": "rd:TRice32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14546": {
+ "14592": {
"Type": "trice",
"Strg": "sig:TRICE64 with 1 to 12 values (line %d)\\n"
},
- "14547": {
+ "14593": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d\\n"
},
- "14548": {
+ "14594": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d, %d\\n"
},
- "14549": {
+ "14595": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d, %d, %d\\n"
},
- "14550": {
+ "14596": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d, %d, %d, %d\\n"
},
- "14551": {
+ "14597": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d, %d, %d, %d, %d\\n"
},
- "14552": {
+ "14598": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d, %d, %d, %d, %d, %d\\n"
},
- "14553": {
+ "14599": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14554": {
+ "14600": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14555": {
+ "14601": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14556": {
+ "14602": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14557": {
+ "14603": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14558": {
+ "14604": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14559": {
+ "14605": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d\\n"
},
- "14560": {
+ "14606": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d, %d\\n"
},
- "14561": {
+ "14607": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d, %d, %d\\n"
},
- "14562": {
+ "14608": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d, %d, %d, %d\\n"
},
- "14563": {
+ "14609": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d, %d, %d, %d, %d\\n"
},
- "14564": {
+ "14610": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d, %d, %d, %d, %d, %d\\n"
},
- "14565": {
+ "14611": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14566": {
+ "14612": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14567": {
+ "14613": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14568": {
+ "14614": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14569": {
+ "14615": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14570": {
+ "14616": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14571": {
+ "14617": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d\\n"
},
- "14572": {
+ "14618": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d, %d\\n"
},
- "14573": {
+ "14619": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d, %d, %d\\n"
},
- "14574": {
+ "14620": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d, %d, %d, %d\\n"
},
- "14575": {
+ "14621": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d, %d, %d, %d, %d\\n"
},
- "14576": {
+ "14622": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d, %d, %d, %d, %d, %d\\n"
},
- "14577": {
+ "14623": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14578": {
+ "14624": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14579": {
+ "14625": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14580": {
+ "14626": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14581": {
+ "14627": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14582": {
+ "14628": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14583": {
+ "14629": {
"Type": "trice",
"Strg": "signal:TRICE64_n with 1 to 12 values (line %d)\\n"
},
- "14584": {
+ "14630": {
"Type": "TRICE64_1",
"Strg": "rd:TRICE64_1 %d\\n"
},
- "14585": {
+ "14631": {
"Type": "TRICE64_2",
"Strg": "rd:TRICE64_2 %d, %d\\n"
},
- "14586": {
+ "14632": {
"Type": "TRICE64_3",
"Strg": "rd:TRICE64_3 %d, %d, %d\\n"
},
- "14587": {
+ "14633": {
"Type": "TRICE64_4",
"Strg": "rd:TRICE64_4 %d, %d, %d, %d\\n"
},
- "14588": {
+ "14634": {
"Type": "TRICE64_5",
"Strg": "rd:TRICE64_5 %d, %d, %d, %d, %d\\n"
},
- "14589": {
+ "14635": {
"Type": "TRICE64_6",
"Strg": "rd:TRICE64_6 %d, %d, %d, %d, %d, %d\\n"
},
- "14590": {
+ "14636": {
"Type": "TRICE64_7",
"Strg": "rd:TRICE64_7 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14591": {
+ "14637": {
"Type": "TRICE64_8",
"Strg": "rd:TRICE64_8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14592": {
+ "14638": {
"Type": "TRICE64_9",
"Strg": "rd:TRICE64_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14593": {
+ "14639": {
"Type": "TRICE64_10",
"Strg": "rd:TRICE64_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14594": {
+ "14640": {
"Type": "TRICE64_11",
"Strg": "rd:TRICE64_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14595": {
+ "14641": {
"Type": "TRICE64_12",
"Strg": "rd:TRICE64_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14596": {
+ "14642": {
"Type": "TRICE64_1",
"Strg": "rd:TRICE64_1 %d\\n"
},
- "14597": {
+ "14643": {
"Type": "TRICE64_2",
"Strg": "rd:TRICE64_2 %d, %d\\n"
},
- "14598": {
+ "14644": {
"Type": "TRICE64_3",
"Strg": "rd:TRICE64_3 %d, %d, %d\\n"
},
- "14599": {
+ "14645": {
"Type": "TRICE64_4",
"Strg": "rd:TRICE64_4 %d, %d, %d, %d\\n"
},
- "14600": {
+ "14646": {
"Type": "TRICE64_5",
"Strg": "rd:TRICE64_5 %d, %d, %d, %d, %d\\n"
},
- "14601": {
+ "14647": {
"Type": "TRICE64_6",
"Strg": "rd:TRICE64_6 %d, %d, %d, %d, %d, %d\\n"
},
- "14602": {
+ "14648": {
"Type": "TRICE64_7",
"Strg": "rd:TRICE64_7 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14603": {
+ "14649": {
"Type": "TRICE64_8",
"Strg": "rd:TRICE64_8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14604": {
+ "14650": {
"Type": "TRICE64_9",
"Strg": "rd:TRICE64_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14605": {
+ "14651": {
"Type": "TRICE64_10",
"Strg": "rd:TRICE64_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14606": {
+ "14652": {
"Type": "TRICE64_11",
"Strg": "rd:TRICE64_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14607": {
+ "14653": {
"Type": "TRICE64_12",
"Strg": "rd:TRICE64_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14608": {
+ "14654": {
"Type": "TRICE64_1",
"Strg": "rd:TRICE64_1 %d\\n"
},
- "14609": {
+ "14655": {
"Type": "TRICE64_2",
"Strg": "rd:TRICE64_2 %d, %d\\n"
},
- "14610": {
+ "14656": {
"Type": "TRICE64_3",
"Strg": "rd:TRICE64_3 %d, %d, %d\\n"
},
- "14611": {
+ "14657": {
"Type": "TRICE64_4",
"Strg": "rd:TRICE64_4 %d, %d, %d, %d\\n"
},
- "14612": {
+ "14658": {
"Type": "TRICE64_5",
"Strg": "rd:TRICE64_5 %d, %d, %d, %d, %d\\n"
},
- "14613": {
+ "14659": {
"Type": "TRICE64_6",
"Strg": "rd:TRICE64_6 %d, %d, %d, %d, %d, %d\\n"
},
- "14614": {
+ "14660": {
"Type": "TRICE64_7",
"Strg": "rd:TRICE64_7 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14615": {
+ "14661": {
"Type": "TRICE64_8",
"Strg": "rd:TRICE64_8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14616": {
+ "14662": {
"Type": "TRICE64_9",
"Strg": "rd:TRICE64_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14617": {
+ "14663": {
"Type": "TRICE64_10",
"Strg": "rd:TRICE64_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14618": {
+ "14664": {
"Type": "TRICE64_11",
"Strg": "rd:TRICE64_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14619": {
+ "14665": {
"Type": "TRICE64_12",
"Strg": "rd:TRICE64_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14620": {
+ "14666": {
"Type": "trice",
"Strg": "sig:trice64 with 1 to 12 values (line %d)\\n"
},
- "14621": {
+ "14667": {
"Type": "trice64",
"Strg": "rd:trice64 %d\\n"
},
- "14622": {
+ "14668": {
"Type": "trice64",
"Strg": "rd:trice64 %d, %d\\n"
},
- "14623": {
+ "14669": {
"Type": "trice64",
"Strg": "rd:trice64 %d, %d, %d\\n"
},
- "14624": {
+ "14670": {
"Type": "trice64",
"Strg": "rd:trice64 %d, %d, %d, %d\\n"
},
- "14625": {
+ "14671": {
"Type": "trice64",
"Strg": "rd:trice64 %d, %d, %d, %d, %d\\n"
},
- "14626": {
+ "14672": {
"Type": "trice64",
"Strg": "rd:trice64 %d, %d, %d, %d, %d, %d\\n"
},
- "14627": {
+ "14673": {
"Type": "trice64",
"Strg": "rd:trice64 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14628": {
+ "14674": {
"Type": "trice64",
"Strg": "rd:trice64 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14629": {
+ "14675": {
"Type": "trice64",
"Strg": "rd:trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14630": {
+ "14676": {
"Type": "trice64",
"Strg": "rd:trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14631": {
+ "14677": {
"Type": "trice64",
"Strg": "rd:trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14632": {
+ "14678": {
"Type": "trice64",
"Strg": "rd:trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14633": {
+ "14679": {
"Type": "Trice64",
"Strg": "rd:Trice64 %d\\n"
},
- "14634": {
+ "14680": {
"Type": "Trice64",
"Strg": "rd:Trice64 %d, %d\\n"
},
- "14635": {
+ "14681": {
"Type": "Trice64",
"Strg": "rd:Trice64 %d, %d, %d\\n"
},
- "14636": {
+ "14682": {
"Type": "Trice64",
"Strg": "rd:Trice64 %d, %d, %d, %d\\n"
},
- "14637": {
+ "14683": {
"Type": "Trice64",
"Strg": "rd:Trice64 %d, %d, %d, %d, %d\\n"
},
- "14638": {
+ "14684": {
"Type": "Trice64",
"Strg": "rd:Trice64 %d, %d, %d, %d, %d, %d\\n"
},
- "14639": {
+ "14685": {
"Type": "Trice64",
"Strg": "rd:Trice64 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14640": {
+ "14686": {
"Type": "Trice64",
"Strg": "rd:Trice64 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14641": {
+ "14687": {
"Type": "Trice64",
"Strg": "rd:Trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14642": {
+ "14688": {
"Type": "Trice64",
"Strg": "rd:Trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14643": {
+ "14689": {
"Type": "Trice64",
"Strg": "rd:Trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14644": {
+ "14690": {
"Type": "Trice64",
"Strg": "rd:Trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14645": {
+ "14691": {
"Type": "TRice64",
"Strg": "rd:TRice64 %d\\n"
},
- "14646": {
+ "14692": {
"Type": "TRice64",
"Strg": "rd:TRice64 %d, %d\\n"
},
- "14647": {
+ "14693": {
"Type": "TRice64",
"Strg": "rd:TRice64 %d, %d, %d\\n"
},
- "14648": {
+ "14694": {
"Type": "TRice64",
"Strg": "rd:TRice64 %d, %d, %d, %d\\n"
},
- "14649": {
+ "14695": {
"Type": "TRice64",
"Strg": "rd:TRice64 %d, %d, %d, %d, %d\\n"
},
- "14650": {
+ "14696": {
"Type": "TRice64",
"Strg": "rd:TRice64 %d, %d, %d, %d, %d, %d\\n"
},
- "14651": {
+ "14697": {
"Type": "TRice64",
"Strg": "rd:TRice64 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14652": {
+ "14698": {
"Type": "TRice64",
"Strg": "rd:TRice64 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14653": {
+ "14699": {
"Type": "TRice64",
"Strg": "rd:TRice64 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14654": {
+ "14700": {
"Type": "TRice64",
"Strg": "rd:TRice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14655": {
+ "14701": {
"Type": "TRice64",
"Strg": "rd:TRice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14656": {
+ "14702": {
"Type": "TRice64",
"Strg": "rd:TRice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14657": {
+ "14703": {
"Type": "trice",
"Strg": "signal:trice64_n with 1 to 12 values (line %d)\\n"
},
- "14658": {
+ "14704": {
"Type": "trice64_1",
"Strg": "rd:trice64_1 %d\\n"
},
- "14659": {
+ "14705": {
"Type": "trice64_2",
"Strg": "rd:trice64_2 %d, %d\\n"
},
- "14660": {
+ "14706": {
"Type": "trice64_3",
"Strg": "rd:trice64_3 %d, %d, %d\\n"
},
- "14661": {
+ "14707": {
"Type": "trice64_4",
"Strg": "rd:trice64_4 %d, %d, %d, %d\\n"
},
- "14662": {
+ "14708": {
"Type": "trice64_5",
"Strg": "rd:trice64_5 %d, %d, %d, %d, %d\\n"
},
- "14663": {
+ "14709": {
"Type": "trice64_6",
"Strg": "rd:trice64_6 %d, %d, %d, %d, %d, %d\\n"
},
- "14664": {
+ "14710": {
"Type": "trice64_7",
"Strg": "rd:trice64_7 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14665": {
+ "14711": {
"Type": "trice64_8",
"Strg": "rd:trice64_8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14666": {
+ "14712": {
"Type": "trice64_9",
"Strg": "rd:trice64_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14667": {
+ "14713": {
"Type": "trice64_10",
"Strg": "rd:trice64_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14668": {
+ "14714": {
"Type": "trice64_11",
"Strg": "rd:trice64_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14669": {
+ "14715": {
"Type": "trice64_12",
"Strg": "rd:trice64_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14670": {
+ "14716": {
"Type": "Trice64_1",
"Strg": "rd:Trice64_1 %d\\n"
},
- "14671": {
+ "14717": {
"Type": "Trice64_2",
"Strg": "rd:Trice64_2 %d, %d\\n"
},
- "14672": {
+ "14718": {
"Type": "Trice64_3",
"Strg": "rd:Trice64_3 %d, %d, %d\\n"
},
- "14673": {
+ "14719": {
"Type": "Trice64_4",
"Strg": "rd:Trice64_4 %d, %d, %d, %d\\n"
},
- "14674": {
+ "14720": {
"Type": "Trice64_5",
"Strg": "rd:Trice64_5 %d, %d, %d, %d, %d\\n"
},
- "14675": {
+ "14721": {
"Type": "Trice64_6",
"Strg": "rd:Trice64_6 %d, %d, %d, %d, %d, %d\\n"
},
- "14676": {
+ "14722": {
"Type": "Trice64_7",
"Strg": "rd:Trice64_7 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14677": {
+ "14723": {
"Type": "Trice64_8",
"Strg": "rd:Trice64_8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14678": {
+ "14724": {
"Type": "Trice64_9",
"Strg": "rd:Trice64_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14679": {
+ "14725": {
"Type": "Trice64_10",
"Strg": "rd:Trice64_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14680": {
+ "14726": {
"Type": "Trice64_11",
"Strg": "rd:Trice64_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14681": {
+ "14727": {
"Type": "Trice64_12",
"Strg": "rd:Trice64_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14682": {
+ "14728": {
"Type": "TRice64_1",
"Strg": "rd:TRice64_1 %d\\n"
},
- "14683": {
+ "14729": {
"Type": "TRice64_2",
"Strg": "rd:TRice64_2 %d, %d\\n"
},
- "14684": {
+ "14730": {
"Type": "TRice64_3",
"Strg": "rd:TRice64_3 %d, %d, %d\\n"
},
- "14685": {
+ "14731": {
"Type": "TRice64_4",
"Strg": "rd:TRice64_4 %d, %d, %d, %d\\n"
},
- "14686": {
+ "14732": {
"Type": "TRice64_5",
"Strg": "rd:TRice64_5 %d, %d, %d, %d, %d\\n"
},
- "14687": {
+ "14733": {
"Type": "TRice64_6",
"Strg": "rd:TRice64_6 %d, %d, %d, %d, %d, %d\\n"
},
- "14688": {
+ "14734": {
"Type": "TRice64_7",
"Strg": "rd:TRice64_7 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14689": {
+ "14735": {
"Type": "TRice64_8",
"Strg": "rd:TRice64_8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14690": {
+ "14736": {
"Type": "TRice64_9",
"Strg": "rd:TRice64_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14691": {
+ "14737": {
"Type": "TRice64_10",
"Strg": "rd:TRice64_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14692": {
+ "14738": {
"Type": "TRice64_11",
"Strg": "rd:TRice64_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14693": {
+ "14739": {
"Type": "TRice32_12",
"Strg": "rd:TRice32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "14694": {
+ "14740": {
"Type": "TRICE",
"Strg": "sig:Colors and ticks\\n"
},
- "14695": {
+ "14741": {
"Type": "TRICE",
"Strg": "--------------------------------------------------\\n"
},
- "14696": {
+ "14742": {
"Type": "TRICE",
"Strg": "--------------------------------------------------\\n"
},
- "14697": {
+ "14743": {
"Type": "TRICE",
"Strg": "dbg:12345 as 16bit is %016b\\n"
},
- "14698": {
+ "14744": {
"Type": "TRICE",
"Strg": "--------------------------------------------------\\n"
},
- "14699": {
+ "14745": {
"Type": "TRICE",
"Strg": "sig:This ASSERT error is just a demo and no real error:\\n"
},
- "14700": {
+ "14746": {
"Type": "TRICE",
"Strg": "--------------------------------------------------\\n"
},
- "14701": {
+ "14747": {
"Type": "TRICE",
"Strg": "ERR:error message, SysTick is %6u\\n"
},
- "14702": {
+ "14748": {
"Type": "TRICE",
"Strg": "WRN:warning message, SysTick is %6u\\n"
},
- "14703": {
+ "14749": {
"Type": "TRICE",
"Strg": "ATT:attention message, SysTick is %6u\\n"
},
- "14704": {
+ "14750": {
"Type": "TRICE",
"Strg": "DIA:diagnostics message, SysTick is %6u\\n"
},
- "14705": {
+ "14751": {
"Type": "TRICE",
"Strg": "TIM:timing message, SysTick is %6u\\n"
},
- "14706": {
+ "14752": {
"Type": "TRICE",
"Strg": "DBG:debug message, SysTick is %6u\\n"
},
- "14707": {
+ "14753": {
"Type": "TRICE",
"Strg": "SIG:signal message, SysTick is %6u\\n"
},
- "14708": {
+ "14754": {
"Type": "TRICE",
"Strg": "RD:read message, SysTick is %6u\\n"
},
- "14709": {
+ "14755": {
"Type": "TRICE",
"Strg": "WR:write message, SysTick is %6u\\n"
},
- "14710": {
+ "14756": {
"Type": "TRICE",
"Strg": "ISR:interrupt message, SysTick is %6u\\n"
},
- "14711": {
+ "14757": {
"Type": "TRICE",
"Strg": "MSG:normal message, SysTick is %6u\\n"
},
- "14712": {
+ "14758": {
"Type": "TRICE",
"Strg": "INFO:informal message, SysTick is %6u\\n"
},
- "14713": {
+ "14759": {
"Type": "TRICE",
"Strg": "time:TRICE32_1 message, SysTick is %6u\\n"
},
- "14714": {
+ "14760": {
"Type": "TRICE",
"Strg": "sig:Various ranges and formats\\n"
},
- "14715": {
+ "14761": {
"Type": "TRICE8",
"Strg": "tst:TRICE8 %%03x -\u003e %03x %03x %03x %03x\\n"
},
- "14716": {
+ "14762": {
"Type": "TRICE8",
"Strg": "tst:TRICE8 %%4d -\u003e %4d %4d %4d %4d\\n"
},
- "14717": {
+ "14763": {
"Type": "TRICE8",
"Strg": "tst:TRICE8 %%4u -\u003e %4u %4u %4u %4u\\n"
},
- "14718": {
+ "14764": {
"Type": "TRICE8",
"Strg": "tst:TRICE8 %%4o -\u003e %4o %4o %4o %4o\\n"
},
- "14719": {
+ "14765": {
"Type": "TRICE8",
"Strg": "tst:TRICE8 %%4O -\u003e %4O %4O %4O %4O\\n"
},
- "14720": {
+ "14766": {
"Type": "TRICE8",
"Strg": "tst:TRICE8 %%4X -\u003e %4X %4X %4X %4X\\n"
},
- "14721": {
+ "14767": {
"Type": "TRICE8",
"Strg": "tst:TRICE8 %%4x -\u003e %4x %4x %4x %4x\\n"
},
- "14722": {
+ "14768": {
"Type": "TRICE8",
"Strg": "tst:TRICE8 %%8b -\u003e %8b %8b %8b %8b\\n"
},
- "14723": {
+ "14769": {
"Type": "TRICE8",
"Strg": "tst:TRICE8 %%08b -\u003e %08b %08b %08b %08b\\n"
},
- "14724": {
+ "14770": {
"Type": "TRICE16",
"Strg": "tst:TRICE16 %%05x -\u003e %05x %05x %05x %05x\\n"
},
- "14725": {
+ "14771": {
"Type": "TRICE16",
"Strg": "tst:TRICE16 %%6d -\u003e %6d %6d %6d %6d\\n"
},
- "14726": {
+ "14772": {
"Type": "TRICE16",
"Strg": "tst:TRICE16 %%7o -\u003e %7o %7o %7o %7o\\n"
},
- "14727": {
+ "14773": {
"Type": "TRICE32",
"Strg": "tst:TRICE32 %%09x -\u003e %09x %09x %09x %09x\\n"
},
- "14728": {
+ "14774": {
"Type": "TRICE32",
"Strg": "tst:TRICE32 %%10d -\u003e %10d %10d %10d %10x\\n"
},
- "14729": {
+ "14775": {
"Type": "TRICE32",
"Strg": "att:TRICE32 %40b\\n"
},
- "14730": {
+ "14776": {
"Type": "TRICE64",
"Strg": "tst:TRICE64 %%09x -\u003e %09x %09x %09x %09x\\n"
},
- "14731": {
+ "14777": {
"Type": "TRICE64",
"Strg": "tst:TRICE64 %%10d -\u003e %10d %10d %10d %10x\\n"
},
- "14732": {
+ "14778": {
"Type": "TRICE64",
"Strg": "att:TRICE64 %70b\\n"
},
- "14733": {
+ "14779": {
"Type": "TRICE",
"Strg": "sig:Legacy TRICE8\\n"
},
- "14734": {
+ "14780": {
"Type": "TRICE8_1",
"Strg": "tst:TRICE8_1 %02x\\n"
},
- "14735": {
+ "14781": {
"Type": "TRICE8_2",
"Strg": "tst:TRICE8_2 %02x %02x\\n"
},
- "14736": {
+ "14782": {
"Type": "TRICE8_3",
"Strg": "tst:TRICE8_3 %02x %02x %02x\\n"
},
- "14737": {
+ "14783": {
"Type": "TRICE8_4",
"Strg": "tst:TRICE8_4 %02x %02x %02x %02x\\n"
},
- "14738": {
+ "14784": {
"Type": "TRICE8_5",
"Strg": "tst:TRICE8_5 %02x %02x %02x %02x %02x\\n"
},
- "14739": {
+ "14785": {
"Type": "TRICE8_6",
"Strg": "tst:TRICE8_6 %02x %02x %02x %02x %02x %02x\\n"
},
- "14740": {
+ "14786": {
"Type": "TRICE8_7",
"Strg": "tst:TRICE8_7 %02x %02x %02x %02x %02x %02x %02x\\n"
},
- "14741": {
+ "14787": {
"Type": "TRICE8_8",
"Strg": "tst:TRICE8_8 %02X %02X %02X %02X %02x %02x %02x %02x\\n"
},
- "14742": {
+ "14788": {
"Type": "TRICE8_1",
"Strg": "tst:TRICE8_1 %d\\n"
},
- "14743": {
+ "14789": {
"Type": "TRICE8_2",
"Strg": "tst:TRICE8_2 %d %d\\n"
},
- "14744": {
+ "14790": {
"Type": "TRICE8_3",
"Strg": "tst:TRICE8_3 %d %d %d\\n"
},
- "14745": {
+ "14791": {
"Type": "TRICE8_4",
"Strg": "tst:TRICE8_4 %d %d %d %d\\n"
},
- "14746": {
+ "14792": {
"Type": "TRICE8_5",
"Strg": "tst:TRICE8_5 %d %d %d %d %d\\n"
},
- "14747": {
+ "14793": {
"Type": "TRICE8_6",
"Strg": "tst:TRICE8_6 %d %d %d %d %d %d\\n"
},
- "14748": {
+ "14794": {
"Type": "TRICE8_7",
"Strg": "tst:TRICE8_7 %d %d %d %d %d %d %d\\n"
},
- "14749": {
+ "14795": {
"Type": "TRICE8_8",
"Strg": "tst:TRICE8_8 %d %d %d %d %d %d %d %d\\n"
},
- "14750": {
+ "14796": {
"Type": "TRICE8_1",
"Strg": "tst:TRICE8_1 %d\\n"
},
- "14751": {
+ "14797": {
"Type": "TRICE8_2",
"Strg": "tst:TRICE8_2 %d %d\\n"
},
- "14752": {
+ "14798": {
"Type": "TRICE8_3",
"Strg": "tst:TRICE8_3 %d %d %d\\n"
},
- "14753": {
+ "14799": {
"Type": "TRICE8_4",
"Strg": "tst:TRICE8_4 %d %d %d %d\\n"
},
- "14754": {
+ "14800": {
"Type": "TRICE8_5",
"Strg": "tst:TRICE8_5 %d %d %d %d %d\\n"
},
- "14755": {
+ "14801": {
"Type": "TRICE8_6",
"Strg": "tst:TRICE8_6 %d %d %d %d %d %d\\n"
},
- "14756": {
+ "14802": {
"Type": "TRICE8_7",
"Strg": "tst:TRICE8_7 %d %d %d %d %d %d %d\\n"
},
- "14757": {
+ "14803": {
"Type": "TRICE8_8",
"Strg": "tst:TRICE8_8 %d %d %d %d %d %d %d %d\\n"
},
- "14758": {
+ "14804": {
"Type": "TRICE8_1",
"Strg": "tst:TRICE8_1 %u\\n"
},
- "14759": {
+ "14805": {
"Type": "TRICE8_2",
"Strg": "tst:TRICE8_2 %u %u\\n"
},
- "14760": {
+ "14806": {
"Type": "TRICE8_3",
"Strg": "tst:TRICE8_3 %u %u %u\\n"
},
- "14761": {
+ "14807": {
"Type": "TRICE8_4",
"Strg": "tst:TRICE8_4 %u %u %u %u\\n"
},
- "14762": {
+ "14808": {
"Type": "TRICE8_5",
"Strg": "tst:TRICE8_5 %u %u %u %u %u\\n"
},
- "14763": {
+ "14809": {
"Type": "TRICE8_6",
"Strg": "tst:TRICE8_6 %u %u %u %u %u %u\\n"
},
- "14764": {
+ "14810": {
"Type": "TRICE8_7",
"Strg": "tst:TRICE8_7 %u %u %u %u %u %u %u\\n"
},
- "14765": {
+ "14811": {
"Type": "TRICE8_8",
"Strg": "tst:TRICE8_8 %u %u %u %u %u %u %u %u\\n"
},
- "14766": {
+ "14812": {
"Type": "TRICE8_8",
"Strg": "tst:TRICE8_1 %%d=%d, %%u=%u, 0x%%x=0x%x, 0x%%2x=0x%2x, 0x%%02x=0x%02x, 0x%%3x=0x%3x, 0x%%03x=0x%03x, %%b=%b\\n"
},
- "14767": {
+ "14813": {
"Type": "TRICE",
"Strg": "sig:Legacy TRICE16-64\\n"
},
- "14768": {
+ "14814": {
"Type": "TRICE16_1",
"Strg": "tst:TRICE16_1 %d\\n"
},
- "14769": {
+ "14815": {
"Type": "TRICE16_2",
"Strg": "tst:TRICE16_2 %d %d\\n"
},
- "14770": {
+ "14816": {
"Type": "TRICE16_3",
"Strg": "tst:TRICE16_3 %d %d %d\\n"
},
- "14771": {
+ "14817": {
"Type": "TRICE16_4",
"Strg": "tst:TRICE16_4 %d %d %d %d\\n"
},
- "14772": {
+ "14818": {
"Type": "TRICE32_1",
"Strg": "tst:TRICE32_1 %08x\\n"
},
- "14773": {
+ "14819": {
"Type": "TRICE32_1",
"Strg": "tst:TRICE32_1 %d\\n"
},
- "14774": {
+ "14820": {
"Type": "TRICE32_2",
"Strg": "tst:TRICE32_2 %x %x\\n"
},
- "14775": {
+ "14821": {
"Type": "TRICE32_2",
"Strg": "tst:TRICE32_2 %d %d\\n"
},
- "14776": {
+ "14822": {
"Type": "TRICE32_3",
"Strg": "tst:TRICE32_3 %x %x %x\\n"
},
- "14777": {
+ "14823": {
"Type": "TRICE32_3",
"Strg": "tst:TRICE32_3 %d %d %d\\n"
},
- "14778": {
+ "14824": {
"Type": "TRICE32_4",
"Strg": "tst:TRICE32_4 %x %x %x %x\\n"
},
- "14779": {
+ "14825": {
"Type": "TRICE32_4",
"Strg": "tst:TRICE32_4 %d %d %d %d\\n"
},
- "14780": {
+ "14826": {
"Type": "TRICE64_1",
"Strg": "tst:TRICE64_1 %d\\n"
},
- "14781": {
+ "14827": {
"Type": "TRICE64_2",
"Strg": "tst:TRICE64_2 %d %d\\n"
},
- "14782": {
+ "14828": {
"Type": "TRICE16_1",
"Strg": "tst:TRICE16_1 %u\\n"
},
- "14783": {
+ "14829": {
"Type": "TRICE16_2",
"Strg": "tst:TRICE16_2 %u %u\\n"
},
- "14784": {
+ "14830": {
"Type": "TRICE16_3",
"Strg": "tst:TRICE16_3 %u %u %u\\n"
},
- "14785": {
+ "14831": {
"Type": "TRICE16_4",
"Strg": "tst:TRICE16_4 %u %u %u %u\\n"
},
- "14786": {
+ "14832": {
"Type": "TRICE32_1",
"Strg": "tst:TRICE32_1 %u\\n"
},
- "14787": {
+ "14833": {
"Type": "TRICE32_2",
"Strg": "tst:TRICE32_2 %u %u\\n"
},
- "14788": {
+ "14834": {
"Type": "TRICE32_3",
"Strg": "tst:TRICE32_3 %u %u %u\\n"
},
- "14789": {
+ "14835": {
"Type": "TRICE32_4",
"Strg": "tst:TRICE32_4 %u %u %u %u\\n"
},
- "14790": {
+ "14836": {
"Type": "TRICE64_1",
"Strg": "tst:TRICE64_1 %x\\n"
},
- "14791": {
+ "14837": {
"Type": "TRICE64_2",
"Strg": "tst:TRICE64_2 %x %x\\n"
},
- "14792": {
+ "14838": {
"Type": "TRICE64_1",
"Strg": "tst:TRICE64_1 %u\\n"
},
- "14793": {
+ "14839": {
"Type": "TRICE64_2",
"Strg": "tst:TRICE64_2 %u %u\\n"
},
- "14794": {
+ "14840": {
"Type": "trice",
"Strg": "sig:colored single letters and several TRICE macros in one line\\n"
},
- "14795": {
+ "14841": {
"Type": "trice",
"Strg": "e:A"
},
- "14796": {
+ "14842": {
"Type": "trice",
"Strg": "w:B"
},
- "14797": {
+ "14843": {
"Type": "trice",
"Strg": "a:c"
},
- "14798": {
+ "14844": {
"Type": "trice",
"Strg": "wr:d"
},
- "14799": {
+ "14845": {
"Type": "trice",
"Strg": "rd:e\\n"
},
- "14800": {
+ "14846": {
"Type": "trice",
"Strg": "diag:f"
},
- "14801": {
+ "14847": {
"Type": "trice",
"Strg": "d:G"
},
- "14802": {
+ "14848": {
"Type": "trice",
"Strg": "t:H"
},
- "14803": {
+ "14849": {
"Type": "trice",
"Strg": "time:i"
},
- "14804": {
+ "14850": {
"Type": "trice",
"Strg": "message:J"
},
- "14805": {
+ "14851": {
"Type": "trice",
"Strg": "dbg:k\\n"
},
- "14806": {
+ "14852": {
"Type": "trice",
"Strg": "1"
},
- "14807": {
+ "14853": {
"Type": "trice",
"Strg": "2"
},
- "14808": {
+ "14854": {
"Type": "trice",
"Strg": "3"
},
- "14809": {
+ "14855": {
"Type": "trice",
"Strg": "4"
},
- "14810": {
+ "14856": {
"Type": "trice",
"Strg": "e:7"
},
- "14811": {
+ "14857": {
"Type": "trice",
"Strg": "m:12"
},
- "14812": {
+ "14858": {
"Type": "trice",
"Strg": "m:123\\n"
},
- "14813": {
+ "14859": {
"Type": "trice",
"Strg": "e:A"
},
- "14814": {
+ "14860": {
"Type": "trice",
"Strg": "w:B"
},
- "14815": {
+ "14861": {
"Type": "trice",
"Strg": "a:c"
},
- "14816": {
+ "14862": {
"Type": "trice",
"Strg": "wr:d"
},
- "14817": {
+ "14863": {
"Type": "trice",
"Strg": "rd:e\\n"
},
- "14818": {
+ "14864": {
"Type": "trice",
"Strg": "diag:f"
},
- "14819": {
+ "14865": {
"Type": "trice",
"Strg": "sig:TRICE8 with variable param count 1 to 12\\n"
},
- "14820": {
+ "14866": {
"Type": "TRICE8",
"Strg": "tst:TRICE8 %d\\n"
},
- "14821": {
+ "14867": {
"Type": "TRICE8",
"Strg": "tst:TRICE8 %d %d\\n"
},
- "14822": {
+ "14868": {
"Type": "TRICE8",
"Strg": "tst:TRICE8 %d %d %d\\n"
},
- "14823": {
+ "14869": {
"Type": "TRICE8",
"Strg": "tst:TRICE8 %d %d %d %d\\n"
},
- "14824": {
+ "14870": {
"Type": "TRICE8",
"Strg": "tst:TRICE8 %d %d %d %d %d\\n"
},
- "14825": {
+ "14871": {
"Type": "TRICE8",
"Strg": "tst:TRICE8 %d %d %d %d %d %d\\n"
},
- "14826": {
+ "14872": {
"Type": "TRICE8",
"Strg": "tst:TRICE8 %d %d %d %d %d %d %d\\n"
},
- "14827": {
+ "14873": {
"Type": "TRICE8",
"Strg": "tst:TRICE8 %d %d %d %d %d %d %d %d\\n"
},
- "14828": {
+ "14874": {
"Type": "TRICE8",
"Strg": "tst:TRICE8 %d %d %d %d %d %d %d %d %d\\n"
},
- "14829": {
+ "14875": {
"Type": "TRICE8",
"Strg": "tst:TRICE8 %d %d %d %d %d %d %d %d %d %d\\n"
},
- "14830": {
+ "14876": {
"Type": "TRICE8",
"Strg": "tst:TRICE8 %d %d %d %d %d %d %d %d %d %d %d\\n"
},
- "14831": {
+ "14877": {
"Type": "TRICE8",
"Strg": "tst:TRICE8 %d %d %d %d %d %d %d %d %d %d %d %d\\n"
},
- "14832": {
+ "14878": {
"Type": "TRICE8",
"Strg": "tst:TRICE8 %t %b %x %X %d %u %o %O %p\\n"
},
- "14833": {
+ "14879": {
"Type": "TRICE8_1",
"Strg": "tst:TRICE8_1 %d\\n"
},
- "14834": {
+ "14880": {
"Type": "TRICE8_2",
"Strg": "tst:TRICE8_2 %d %d\\n"
},
- "14835": {
+ "14881": {
"Type": "TRICE8_3",
"Strg": "tst:TRICE8_3 %d %d %d\\n"
},
- "14836": {
+ "14882": {
"Type": "TRICE8_4",
"Strg": "tst:TRICE8_4 %d %d %d %d\\n"
},
- "14837": {
+ "14883": {
"Type": "TRICE8_5",
"Strg": "tst:TRICE8_5 %d %d %d %d %d\\n"
},
- "14838": {
+ "14884": {
"Type": "TRICE8_6",
"Strg": "tst:TRICE8_6 %d %d %d %d %d %d\\n"
},
- "14839": {
+ "14885": {
"Type": "TRICE8_7",
"Strg": "tst:TRICE8_7 %d %d %d %d %d %d %d\\n"
},
- "14840": {
+ "14886": {
"Type": "TRICE8_8",
"Strg": "tst:TRICE8_8 %d %d %d %d %d %d %d %d\\n"
},
- "14841": {
+ "14887": {
"Type": "TRICE8_9",
"Strg": "tst:TRICE8_9 %d %d %d %d %d %d %d %d %d\\n"
},
- "14842": {
+ "14888": {
"Type": "TRICE8_10",
"Strg": "tst:TRICE8_10 %d %d %d %d %d %d %d %d %d %d\\n"
},
- "14843": {
+ "14889": {
"Type": "TRICE8_11",
"Strg": "tst:TRICE8_11 %d %d %d %d %d %d %d %d %d %d %d\\n"
},
- "14844": {
+ "14890": {
"Type": "TRICE8_12",
"Strg": "tst:TRICE8_12 %d %d %d %d %d %d %d %d %d %d %d %d\\n"
},
- "14845": {
+ "14891": {
"Type": "TRICE8",
"Strg": "tst:TRICE8 %t %b %x %X %d %u %o %O %p\\n"
},
- "14846": {
+ "14892": {
"Type": "TRICE8_9",
"Strg": "tst:TRICE8_9 %t %b %x %X %d %u %o %O %p\\n"
},
- "14847": {
+ "14893": {
"Type": "trice",
"Strg": "sig:TRICE16 with variable param count 1 to 12\\n"
},
- "14848": {
+ "14894": {
"Type": "TRICE16",
"Strg": "tst:TRICE16 %d\\n"
},
- "14849": {
+ "14895": {
"Type": "TRICE16",
"Strg": "tst:TRICE16 %d %d\\n"
},
- "14850": {
+ "14896": {
"Type": "TRICE16",
"Strg": "tst:TRICE16 %d %d %d\\n"
},
- "14851": {
+ "14897": {
"Type": "TRICE16",
"Strg": "tst:TRICE16 %d %d %d %d\\n"
},
- "14852": {
+ "14898": {
"Type": "TRICE16",
"Strg": "tst:TRICE16 %d %d %d %d %d\\n"
},
- "14853": {
+ "14899": {
"Type": "TRICE16",
"Strg": "tst:TRICE16 %d %d %d %d %d %d\\n"
},
- "14854": {
+ "14900": {
"Type": "TRICE16",
"Strg": "tst:TRICE16 %d %d %d %d %d %d %d\\n"
},
- "14855": {
+ "14901": {
"Type": "TRICE16",
"Strg": "tst:TRICE16 %d %d %d %d %d %d %d %d\\n"
},
- "14856": {
+ "14902": {
"Type": "TRICE16",
"Strg": "tst:TRICE16 %d %d %d %d %d %d %d %d %d\\n"
},
- "14857": {
+ "14903": {
"Type": "TRICE16",
"Strg": "tst:TRICE16 %d %d %d %d %d %d %d %d %d %d\\n"
},
- "14858": {
+ "14904": {
"Type": "TRICE16",
"Strg": "tst:TRICE16 %d %d %d %d %d %d %d %d %d %d %d\\n"
},
- "14859": {
+ "14905": {
"Type": "TRICE16",
"Strg": "tst:TRICE16 %d %d %d %d %d %d %d %d %d %d %d %d\\n"
},
- "14860": {
+ "14906": {
"Type": "TRICE16",
"Strg": "tst:TRICE16 %t %b %x %X %d %u %o %O %p\\n"
},
- "14861": {
+ "14907": {
"Type": "TRICE16_1",
"Strg": "tst:TRICE16_1 %d\\n"
},
- "14862": {
+ "14908": {
"Type": "TRICE16_2",
"Strg": "tst:TRICE16_2 %d %d\\n"
},
- "14863": {
+ "14909": {
"Type": "TRICE16_3",
"Strg": "tst:TRICE16_3 %d %d %d\\n"
},
- "14864": {
+ "14910": {
"Type": "TRICE16_4",
"Strg": "tst:TRICE16_4 %d %d %d %d\\n"
},
- "14865": {
+ "14911": {
"Type": "TRICE16_5",
"Strg": "tst:TRICE16_5 %d %d %d %d %d\\n"
},
- "14866": {
+ "14912": {
"Type": "TRICE16_6",
"Strg": "tst:TRICE16_6 %d %d %d %d %d %d\\n"
},
- "14867": {
+ "14913": {
"Type": "TRICE16_7",
"Strg": "tst:TRICE16_7 %d %d %d %d %d %d %d\\n"
},
- "14868": {
+ "14914": {
"Type": "TRICE16_8",
"Strg": "tst:TRICE16_8 %d %d %d %d %d %d %d %d\\n"
},
- "14869": {
+ "14915": {
"Type": "TRICE16_9",
"Strg": "tst:TRICE16_9 %d %d %d %d %d %d %d %d %d\\n"
},
- "14870": {
+ "14916": {
"Type": "TRICE16_10",
"Strg": "tst:TRICE16_10 %d %d %d %d %d %d %d %d %d %d\\n"
},
- "14871": {
+ "14917": {
"Type": "TRICE16_11",
"Strg": "tst:TRICE16_11 %d %d %d %d %d %d %d %d %d %d %d\\n"
},
- "14872": {
+ "14918": {
"Type": "TRICE16_12",
"Strg": "tst:TRICE16_12 %d %d %d %d %d %d %d %d %d %d %d %d\\n"
},
- "14873": {
+ "14919": {
"Type": "TRICE16_9",
"Strg": "tst:TRICE16 %t %b %x %X %d %u %o %O %p\\n"
},
- "14874": {
+ "14920": {
"Type": "trice",
"Strg": "sig:TRICE32 with variable param count 1 to 12\\n"
},
- "14875": {
+ "14921": {
"Type": "TRICE32",
"Strg": "tst:TRICE32 %d\\n"
},
- "14876": {
+ "14922": {
"Type": "TRICE32",
"Strg": "tst:TRICE32 %d %d\\n"
},
- "14877": {
+ "14923": {
"Type": "TRICE32",
"Strg": "tst:TRICE32 %d %d %d\\n"
},
- "14878": {
+ "14924": {
"Type": "TRICE32",
"Strg": "tst:TRICE32 %d %d %d %d\\n"
},
- "14879": {
+ "14925": {
"Type": "TRICE32",
"Strg": "tst:TRICE32 %d %d %d %d %d\\n"
},
- "14880": {
+ "14926": {
"Type": "TRICE32",
"Strg": "tst:TRICE32 %d %d %d %d %d %d\\n"
},
- "14881": {
+ "14927": {
"Type": "TRICE32",
"Strg": "tst:TRICE32 %d %d %d %d %d %d %d\\n"
},
- "14882": {
+ "14928": {
"Type": "TRICE32",
"Strg": "tst:TRICE32 %d %d %d %d %d %d %d %d\\n"
},
- "14883": {
+ "14929": {
"Type": "TRICE32",
"Strg": "tst:TRICE32 %d %d %d %d %d %d %d %d %d\\n"
},
- "14884": {
+ "14930": {
"Type": "TRICE32",
"Strg": "tst:TRICE32 %d %d %d %d %d %d %d %d %d %d\\n"
},
- "14885": {
+ "14931": {
"Type": "TRICE32",
"Strg": "tst:TRICE32 %d %d %d %d %d %d %d %d %d %d %d\\n"
},
- "14886": {
+ "14932": {
"Type": "TRICE32",
"Strg": "tst:TRICE32 %d %d %d %d %d %d %d %d %d %d %d %d\\n"
},
- "14887": {
+ "14933": {
"Type": "TRICE32",
"Strg": "tst:TRICE32 %t %b %x %X %d %u %o %O %p %e %f %g\\n"
},
- "14888": {
+ "14934": {
"Type": "TRICE32_1",
"Strg": "tst:TRICE32_1 %d\\n"
},
- "14889": {
+ "14935": {
"Type": "TRICE32_2",
"Strg": "tst:TRICE32_2 %d %d\\n"
},
- "14890": {
+ "14936": {
"Type": "TRICE32_3",
"Strg": "tst:TRICE32_3 %d %d %d\\n"
},
- "14891": {
+ "14937": {
"Type": "TRICE32_4",
"Strg": "tst:TRICE32_4 %d %d %d %d\\n"
},
- "14892": {
+ "14938": {
"Type": "TRICE32_5",
"Strg": "tst:TRICE32_5 %d %d %d %d %d\\n"
},
- "14893": {
+ "14939": {
"Type": "TRICE32_6",
"Strg": "tst:TRICE32_6 %d %d %d %d %d %d\\n"
},
- "14894": {
+ "14940": {
"Type": "TRICE32_7",
"Strg": "tst:TRICE32_7 %d %d %d %d %d %d %d\\n"
},
- "14895": {
+ "14941": {
"Type": "TRICE32_8",
"Strg": "tst:TRICE32_8 %d %d %d %d %d %d %d %d\\n"
},
- "14896": {
+ "14942": {
"Type": "TRICE32_9",
"Strg": "tst:TRICE32_9 %d %d %d %d %d %d %d %d %d\\n"
},
- "14897": {
+ "14943": {
"Type": "TRICE32_10",
"Strg": "tst:TRICE32_10 %d %d %d %d %d %d %d %d %d %d\\n"
},
- "14898": {
+ "14944": {
"Type": "TRICE32_11",
"Strg": "tst:TRICE32_11 %d %d %d %d %d %d %d %d %d %d %d\\n"
},
- "14899": {
+ "14945": {
"Type": "TRICE32_12",
"Strg": "tst:TRICE32_12 %d %d %d %d %d %d %d %d %d %d %d %d\\n"
},
- "1490": {
- "Type": "Trice32C",
- "Strg": "cmd:divide"
- },
- "14900": {
+ "14946": {
"Type": "TRICE32",
"Strg": "tst:TRICE32 %t %b %x %X %d %u %o %O %p %e %f %g\\n"
},
- "14901": {
+ "14947": {
"Type": "TRICE32_12",
"Strg": "tst:TRICE32_12 %t %b %x %X %d %u %o %O %p %e %f %g\\n"
},
- "14902": {
+ "14948": {
"Type": "trice",
"Strg": "sig:TRICE64 with variable param count 1 to 12\\n"
},
- "14903": {
+ "14949": {
"Type": "TRICE64",
"Strg": "tst:TRICE64 %d\\n"
},
- "14904": {
+ "14950": {
"Type": "TRICE64",
"Strg": "tst:TRICE64 %d %d\\n"
},
- "14905": {
+ "14951": {
"Type": "TRICE64",
"Strg": "tst:TRICE64 %d %d %d\\n"
},
- "14906": {
+ "14952": {
"Type": "TRICE64",
"Strg": "tst:TRICE64 %d %d %d %d\\n"
},
- "14907": {
+ "14953": {
"Type": "TRICE64",
"Strg": "tst:TRICE64 %d %d %d %d %d\\n"
},
- "14908": {
+ "14954": {
"Type": "TRICE64",
"Strg": "tst:TRICE64 %d %d %d %d %d %d\\n"
},
- "14909": {
+ "14955": {
"Type": "TRICE64",
"Strg": "tst:TRICE64 %d %d %d %d %d %d %d\\n"
},
- "14910": {
+ "14956": {
"Type": "TRICE64",
"Strg": "tst:TRICE64 %d %d %d %d %d %d %d %d\\n"
},
- "14911": {
+ "14957": {
"Type": "TRICE64",
"Strg": "tst:TRICE64 %d %d %d %d %d %d %d %d %d\\n"
},
- "14912": {
+ "14958": {
"Type": "TRICE64",
"Strg": "tst:TRICE64 %d %d %d %d %d %d %d %d %d %d\\n"
},
- "14913": {
+ "14959": {
"Type": "TRICE64",
"Strg": "tst:TRICE64 %d %d %d %d %d %d %d %d %d %d %d\\n"
},
- "14914": {
+ "14960": {
"Type": "TRICE64",
"Strg": "tst:TRICE64 %d %d %d %d %d %d %d %d %d %d %d %d\\n"
},
- "14915": {
+ "14961": {
"Type": "TRICE64",
"Strg": "tst:TRICE64 %t %b %x %X %d %u %o %O %p %e %f %g\\n"
},
- "14916": {
+ "14962": {
"Type": "TRICE64_1",
"Strg": "tst:TRICE64_1 %d\\n"
},
- "14917": {
+ "14963": {
"Type": "TRICE64_2",
"Strg": "tst:TRICE64_2 %d %d\\n"
},
- "14918": {
+ "14964": {
"Type": "TRICE64_3",
"Strg": "tst:TRICE64_3 %d %d %d\\n"
},
- "14919": {
+ "14965": {
"Type": "TRICE64_4",
"Strg": "tst:TRICE64_4 %d %d %d %d\\n"
},
- "14920": {
+ "14966": {
"Type": "TRICE64_5",
"Strg": "tst:TRICE64_5 %d %d %d %d %d\\n"
},
- "14921": {
+ "14967": {
"Type": "TRICE64_6",
"Strg": "tst:TRICE64_6 %d %d %d %d %d %d\\n"
},
- "14922": {
+ "14968": {
"Type": "TRICE64_7",
"Strg": "tst:TRICE64_7 %d %d %d %d %d %d %d\\n"
},
- "14923": {
+ "14969": {
"Type": "TRICE64_8",
"Strg": "tst:TRICE64_8 %d %d %d %d %d %d %d %d\\n"
},
- "14924": {
+ "14970": {
"Type": "TRICE64_9",
"Strg": "tst:TRICE64_9 %d %d %d %d %d %d %d %d %d\\n"
},
- "14925": {
+ "14971": {
"Type": "TRICE64_10",
"Strg": "tst:TRICE64_10 %d %d %d %d %d %d %d %d %d %d\\n"
},
- "14926": {
+ "14972": {
"Type": "TRICE64_11",
"Strg": "tst:TRICE64_11 %d %d %d %d %d %d %d %d %d %d %d\\n"
},
- "14927": {
+ "14973": {
"Type": "TRICE64_12",
"Strg": "tst:TRICE64_12 %d %d %d %d %d %d %d %d %d %d %d %d\\n"
},
- "14928": {
+ "14974": {
"Type": "TRICE64_12",
"Strg": "tst:TRICE64_12 %t %b %x %X %d %u %o %O %p %e %f %g\\n"
},
- "14929": {
+ "14975": {
"Type": "trice",
"Strg": "att:positive and negative float in format variants\\n"
},
- "14930": {
+ "14976": {
"Type": "trice",
"Strg": "rd:TRICE float %f (%%f)\\n"
},
- "14931": {
+ "14977": {
"Type": "trice",
"Strg": "rd:TRICE float %9f (%%9f)\\n"
},
- "14932": {
+ "14978": {
"Type": "trice",
"Strg": "rd:TRICE float %.9f (%%.9f)\\n"
},
- "14933": {
+ "14979": {
"Type": "trice",
"Strg": "rd:TRICE float %9.f (%%9.f)\\n"
},
- "14934": {
+ "14980": {
"Type": "trice",
"Strg": "rd:TRICE float %9.6f (%%9.6f)\\n"
},
- "14935": {
+ "14981": {
"Type": "trice",
"Strg": "rd:TRICE float %f (%%f)\\n"
},
- "14936": {
+ "14982": {
"Type": "trice",
"Strg": "rd:TRICE float %9f (%%9f)\\n"
},
- "14937": {
+ "14983": {
"Type": "trice",
"Strg": "rd:TRICE float %.9f (%%.9f)\\n"
},
- "14938": {
+ "14984": {
"Type": "trice",
"Strg": "rd:TRICE float %9.f (%%9.f)\\n"
},
- "14939": {
+ "14985": {
"Type": "trice",
"Strg": "rd:TRICE float %9.6f (%%9.6f)\\n"
},
- "14940": {
+ "14986": {
"Type": "trice",
"Strg": "rd:TRICE float %+f (%%f)\\n"
},
- "14941": {
+ "14987": {
"Type": "trice",
"Strg": "rd:TRICE float %+9f (%%9f)\\n"
},
- "14942": {
+ "14988": {
"Type": "trice",
"Strg": "rd:TRICE float %+.9f (%%.9f)\\n"
},
- "14943": {
+ "14989": {
"Type": "trice",
"Strg": "rd:TRICE float %+9.f (%%9.f)\\n"
},
- "14944": {
+ "14990": {
"Type": "trice",
"Strg": "rd:TRICE float %+9.6f (%%9.6f)\\n"
},
- "14945": {
+ "14991": {
"Type": "trice",
"Strg": "rd:TRICE float %+f (%%f)\\n"
},
- "14946": {
+ "14992": {
"Type": "trice",
"Strg": "rd:TRICE float %+9f (%%9f)\\n"
},
- "14947": {
+ "14993": {
"Type": "trice",
"Strg": "rd:TRICE float %+.9f (%%.9f)\\n"
},
- "14948": {
+ "14994": {
"Type": "trice",
"Strg": "rd:TRICE float %+9.f (%%9.f)\\n"
},
- "14949": {
+ "14995": {
"Type": "trice",
"Strg": "rd:TRICE float %+9.6f (%%9.6f)\\n"
},
- "14950": {
+ "14996": {
"Type": "trice",
"Strg": "rd:TRICE float %-f (%%f)\\n"
},
- "14951": {
+ "14997": {
"Type": "trice",
"Strg": "rd:TRICE float %-9f (%%9f)\\n"
},
- "14952": {
+ "14998": {
"Type": "trice",
"Strg": "rd:TRICE float %-.9f (%%.9f)\\n"
},
- "14953": {
+ "14999": {
"Type": "trice",
"Strg": "rd:TRICE float %-9.f (%%9.f)\\n"
},
- "14954": {
+ "15000": {
"Type": "trice",
"Strg": "rd:TRICE float %-9.6f (%%9.6f)\\n"
},
- "14955": {
+ "15001": {
"Type": "trice",
"Strg": "rd:TRICE float %-f (%%f)\\n"
},
- "14956": {
+ "15002": {
"Type": "trice",
"Strg": "rd:TRICE float %-9f (%%9f)\\n"
},
- "14957": {
+ "15003": {
"Type": "trice",
"Strg": "rd:TRICE float %-.9f (%%.9f)\\n"
},
- "14958": {
+ "15004": {
"Type": "trice",
"Strg": "rd:TRICE float %-9.f (%%9.f)\\n"
},
- "14959": {
+ "15005": {
"Type": "trice",
"Strg": "rd:TRICE float %-9.6f (%%9.6f)\\n"
},
- "14960": {
+ "15006": {
"Type": "trice",
"Strg": "att:positive float \u0026 double in variants\\n"
},
- "14961": {
+ "15007": {
"Type": "TRICE32_1",
"Strg": "rd:TRICE32_1 float %e (%%e)\\n"
},
- "14962": {
+ "15008": {
"Type": "TRICE32_1",
"Strg": "rd:TRICE32_1 float %f (%%f)\\n"
},
- "14963": {
+ "15009": {
"Type": "TRICE32_1",
"Strg": "rd:TRICE32_1 float %g (%%g)\\n"
},
- "14964": {
+ "15010": {
"Type": "TRICE32_1",
"Strg": "rd:TRICE32_1 float %E (%%E)\\n"
},
- "14965": {
+ "15011": {
"Type": "TRICE32_1",
"Strg": "rd:TRICE32_1 float %F (%%F)\\n"
},
- "14966": {
+ "15012": {
"Type": "TRICE32_1",
"Strg": "rd:TRICE32_1 float %G (%%G)\\n"
},
- "14967": {
+ "15013": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 float %e (%%e)\\n"
},
- "14968": {
+ "15014": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 float %f (%%f)\\n"
},
- "14969": {
+ "15015": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 float %g (%%g)\\n"
},
- "14970": {
+ "15016": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 float %E (%%E)\\n"
},
- "14971": {
+ "15017": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 float %F (%%F)\\n"
},
- "14972": {
+ "15018": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 float %G (%%G)\\n"
},
- "14973": {
+ "15019": {
"Type": "TRICE",
"Strg": "rd:TRICE float %e (%%e)\\n"
},
- "14974": {
+ "15020": {
"Type": "TRICE",
"Strg": "rd:TRICE float %f (%%f)\\n"
},
- "14975": {
+ "15021": {
"Type": "TRICE",
"Strg": "rd:TRICE float %g (%%g)\\n"
},
- "14976": {
+ "15022": {
"Type": "TRICE",
"Strg": "rd:TRICE float %E (%%E)\\n"
},
- "14977": {
+ "15023": {
"Type": "TRICE",
"Strg": "rd:TRICE float %F (%%F)\\n"
},
- "14978": {
+ "15024": {
"Type": "TRICE",
"Strg": "rd:TRICE float %G (%%G)\\n"
},
- "14979": {
+ "15025": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 double %e (%%e), aDouble(y)\\n"
},
- "14980": {
+ "15026": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 double %f (%%f), aDouble(y)\\n"
},
- "14981": {
+ "15027": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 double %g (%%g), aDouble(y)\\n"
},
- "14982": {
+ "15028": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 double %E (%%E), aDouble(y)\\n"
},
- "14983": {
+ "15029": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 double %F (%%F), aDouble(y)\\n"
},
- "14984": {
+ "15030": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 double %G (%%G), aDouble(y)\\n"
},
- "14985": {
+ "15031": {
"Type": "TRICE64_1",
"Strg": "rd:TRICE64_1 double %e (%%e), aDouble(y)\\n"
},
- "14986": {
+ "15032": {
"Type": "TRICE64_1",
"Strg": "rd:TRICE64_1 double %f (%%f), aDouble(y)\\n"
},
- "14987": {
+ "15033": {
"Type": "TRICE64_1",
"Strg": "rd:TRICE64_1 double %g (%%g), aDouble(y)\\n"
},
- "14988": {
+ "15034": {
"Type": "TRICE64_1",
"Strg": "rd:TRICE64_1 double %E (%%E), aDouble(y)\\n"
},
- "14989": {
+ "15035": {
"Type": "TRICE64_1",
"Strg": "rd:TRICE64_1 double %F (%%F), aDouble(y)\\n"
},
- "14990": {
+ "15036": {
"Type": "TRICE64_1",
"Strg": "rd:TRICE64_1 double %G (%%G), aDouble(y)\\n"
},
- "14991": {
+ "15037": {
"Type": "trice",
"Strg": "att:negative float \u0026 double\\n"
},
- "14992": {
+ "15038": {
"Type": "trice",
"Strg": "rd:TRICE float %e (%%e)\\n"
},
- "14993": {
+ "15039": {
"Type": "trice",
"Strg": "rd:TRICE float %f (%%f)\\n"
},
- "14994": {
+ "15040": {
"Type": "trice",
"Strg": "rd:TRICE float %g (%%g)\\n"
},
- "14995": {
+ "15041": {
"Type": "trice",
"Strg": "rd:TRICE float %E (%%E)\\n"
},
- "14996": {
+ "15042": {
"Type": "trice",
"Strg": "rd:TRICE float %F (%%F)\\n"
},
- "14997": {
+ "15043": {
"Type": "trice",
"Strg": "rd:TRICE float %G (%%G)\\n"
},
- "14998": {
+ "15044": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 double %e (%%e), aDouble(y)\\n"
},
- "14999": {
+ "15045": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 double %f (%%f), aDouble(y)\\n"
},
- "15000": {
+ "15046": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 double %g (%%g), aDouble(y)\\n"
},
- "15001": {
+ "15047": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 double %E (%%E), aDouble(y)\\n"
},
- "15002": {
+ "15048": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 double %F (%%F), aDouble(y)\\n"
},
- "15003": {
+ "15049": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 double %G (%%G), aDouble(y)\\n"
},
- "15004": {
+ "15050": {
"Type": "TRICE",
"Strg": "att:formatted float\\n"
},
- "15005": {
+ "15051": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 float %12.6e (%%12.6e)\\n"
},
- "15006": {
+ "15052": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 float %12.6f (%%12.6f)\\n"
},
- "15007": {
+ "15053": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 float %12.6g (%%12.6g)\\n"
},
- "15008": {
+ "15054": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 float %12.6E (%%12.6E)\\n"
},
- "15009": {
+ "15055": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 float %12.6F (%%12.6F)\\n"
},
- "15010": {
+ "15056": {
"Type": "TRICE32",
"Strg": "rd:TRICE32 float %12.6G (%%12.6G)\\n"
},
- "15011": {
+ "15057": {
"Type": "TRICE",
"Strg": "att:formatted double\\n"
},
- "15012": {
+ "15058": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 double %12.6e (%%12.6e), aDouble(y)\\n"
},
- "15013": {
+ "15059": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 double %12.6f (%%12.6f), aDouble(y)\\n"
},
- "15014": {
+ "15060": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 double %12.6g (%%12.6g), aDouble(y)\\n"
},
- "15015": {
+ "15061": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 double %12.6E (%%12.6E), aDouble(y)\\n"
},
- "15016": {
+ "15062": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 double %12.6F (%%12.6F), aDouble(y)\\n"
},
- "15017": {
+ "15063": {
"Type": "TRICE64",
"Strg": "rd:TRICE64 double %12.6G (%%12.6G), aDouble(y)\\n"
},
- "15018": {
+ "15064": {
"Type": "TRICE",
"Strg": "att:Various single arguments\\n"
},
- "15019": {
+ "15065": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 line %t (%%t ,0)\\n"
},
- "15020": {
+ "15066": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 line %t (%%t ,2)\\n"
},
- "15021": {
+ "15067": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 line %u (%%u ,-1)\\n"
},
- "15022": {
+ "15068": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 line %b (%%b ,-1)\\n"
},
- "15023": {
+ "15069": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 line %o (%%o ,-1)\\n"
},
- "15024": {
+ "15070": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 line %O (%%O ,-1)\\n"
},
- "15025": {
+ "15071": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 line %X (%%X ,-1)\\n"
},
- "15026": {
+ "15072": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 line %x (%%x ,-1)\\n"
},
- "15027": {
+ "15073": {
"Type": "TRICE8",
"Strg": "rd:TRICE8 line %d (%%d ,-1)\\n"
},
- "15028": {
+ "15074": {
"Type": "TRICE16_1",
"Strg": "rd:TRICE16_1 line %t (%%t ,0)\\n"
},
- "15029": {
+ "15075": {
"Type": "TRICE16_1",
"Strg": "rd:TRICE16_1 line %t (%%t ,2)\\n"
},
- "15030": {
+ "15076": {
"Type": "TRICE16_1",
"Strg": "rd:TRICE16_1 line %u (%%u -1)\\n"
},
- "15031": {
+ "15077": {
"Type": "TRICE16_1",
"Strg": "rd:TRICE16_1 line %b (%%b -1)\\n"
},
- "15032": {
+ "15078": {
"Type": "TRICE16_1",
"Strg": "rd:TRICE16_1 line %o (%%o -1)\\n"
},
- "15033": {
+ "15079": {
"Type": "TRICE16_1",
"Strg": "rd:TRICE16_1 line %x (%%x -1)\\n"
},
- "15034": {
+ "15080": {
"Type": "TRICE16_1",
"Strg": "rd:TRICE16_1 line %d (%%d -1)\\n"
},
- "15035": {
+ "15081": {
"Type": "Trice",
"Strg": "rd:Trice line %t (%%t -1)\\n"
},
- "15036": {
+ "15082": {
"Type": "Trice",
"Strg": "rd:Trice line %t (%%t -1)\\n"
},
- "15037": {
+ "15083": {
"Type": "Trice",
"Strg": "rd:Trice line %u (%%u)\\n"
},
- "15038": {
+ "15084": {
"Type": "Trice",
"Strg": "rd:Trice line %b (%%b)\\n"
},
- "15039": {
+ "15085": {
"Type": "Trice",
"Strg": "rd:Trice line %o (%%o)\\n"
},
- "15040": {
+ "15086": {
"Type": "Trice",
"Strg": "rd:Trice line %x (%%x)\\n"
},
- "15041": {
+ "15087": {
"Type": "Trice",
"Strg": "rd:Trice line %d (%%d)\\n"
},
- "15042": {
+ "15088": {
"Type": "TRICE_N",
"Strg": "msg:%s\\n"
},
- "15043": {
+ "15089": {
"Type": "TRICE_N",
"Strg": "msg:%s\\n"
},
- "15044": {
+ "15090": {
"Type": "TRICE_N",
"Strg": "msg:%s\\n"
},
- "15045": {
+ "15091": {
"Type": "TRICE_N",
"Strg": "msg:%s\\n"
},
- "15046": {
+ "15092": {
"Type": "TRICE_N",
"Strg": "msg:%s\\n"
},
- "15047": {
+ "15093": {
"Type": "TRICE_N",
"Strg": "msg:%s\\n"
},
- "15048": {
+ "15094": {
"Type": "TRICE_N",
"Strg": "msg:%s\\n"
},
- "15049": {
+ "15095": {
"Type": "TRICE_N",
"Strg": "msg:%s\\n"
},
- "15050": {
+ "15096": {
"Type": "TRICE_N",
"Strg": "msg:%s\\n"
},
- "15051": {
+ "15097": {
"Type": "TRICE_N",
"Strg": "msg:%s\\n"
},
- "15052": {
+ "15098": {
"Type": "TRICE_N",
"Strg": "msg:%s\\n"
},
- "15053": {
+ "15099": {
"Type": "TRICE_N",
"Strg": "msg:%s\\n"
},
- "15054": {
+ "15100": {
"Type": "TRICE_N",
"Strg": "msg:%s\\n"
},
- "15055": {
+ "15101": {
"Type": "TRICE_N",
"Strg": "msg:%s\\n"
},
- "15056": {
+ "15102": {
"Type": "TRICE_N",
"Strg": "msg:%s\\n"
},
- "15057": {
+ "15103": {
"Type": "TRICE_N",
"Strg": "msg:%s\\n"
},
- "15058": {
+ "15104": {
"Type": "TRICE_N",
"Strg": "msg:%s\\n"
},
- "15059": {
+ "15105": {
"Type": "TRICE_N",
"Strg": "msg:%s\\n"
},
- "15060": {
+ "15106": {
"Type": "TRICE_N",
"Strg": "msg:%s\\n"
},
- "15061": {
+ "15107": {
"Type": "TRICE_N",
"Strg": "msg:%s\\n"
},
- "15062": {
+ "15108": {
"Type": "TRICE_N",
"Strg": "msg:%s\\n"
},
- "15063": {
+ "15109": {
"Type": "TRICE_N",
"Strg": "msg:%s\\n"
},
- "15064": {
+ "15110": {
"Type": "TRICE_N",
"Strg": "msg:%s\\n"
},
- "15065": {
+ "15111": {
"Type": "TRICE_N",
"Strg": "msg:%s\\n"
},
- "15066": {
+ "15112": {
"Type": "TRICE_N",
"Strg": "msg:%s\\n"
},
- "15067": {
+ "15113": {
"Type": "TRICE_N",
"Strg": "msg:%s\\n"
},
- "15068": {
+ "15114": {
"Type": "TRICE_N",
"Strg": "msg:%s\\n"
},
- "15069": {
+ "15115": {
"Type": "TRICE_N",
"Strg": "msg:%s\\n"
},
- "15070": {
+ "15116": {
"Type": "TRICE_N",
"Strg": "msg:%s\\n"
},
- "15071": {
+ "15117": {
"Type": "TRICE_N",
"Strg": "msg:%s\\n"
},
- "15072": {
+ "15118": {
"Type": "triceN",
"Strg": "msg:%s\\n"
},
- "15073": {
+ "15119": {
"Type": "triceN",
"Strg": "msg:%s\\n"
},
- "15074": {
+ "15120": {
"Type": "triceN",
"Strg": "msg:%s\\n"
},
- "15075": {
+ "15121": {
"Type": "triceN",
"Strg": "msg:%s\\n"
},
- "15076": {
+ "15122": {
"Type": "triceN",
"Strg": "msg:%s\\n"
},
- "15077": {
+ "15123": {
"Type": "triceN",
"Strg": "msg:%s\\n"
},
- "15078": {
+ "15124": {
"Type": "triceN",
"Strg": "msg:%s\\n"
},
- "15079": {
+ "15125": {
"Type": "triceN",
"Strg": "msg:%s\\n"
},
- "15080": {
+ "15126": {
"Type": "triceN",
"Strg": "msg:%s\\n"
},
- "15081": {
+ "15127": {
"Type": "triceN",
"Strg": "msg:%s\\n"
},
- "15082": {
+ "15128": {
"Type": "triceN",
"Strg": "msg:%s\\n"
},
- "15083": {
+ "15129": {
"Type": "triceN",
"Strg": "msg:%s\\n"
},
- "15084": {
+ "15130": {
"Type": "triceN",
"Strg": "msg:%s\\n"
},
- "15085": {
+ "15131": {
"Type": "triceN",
"Strg": "msg:%s\\n"
},
- "15086": {
+ "15132": {
"Type": "triceN",
"Strg": "msg:%s\\n"
},
- "15087": {
+ "15133": {
"Type": "triceN",
"Strg": "msg:%s\\n"
},
- "15088": {
+ "15134": {
"Type": "triceN",
"Strg": "msg:%s\\n"
},
- "15089": {
+ "15135": {
"Type": "triceN",
"Strg": "msg:%s\\n"
},
- "15090": {
+ "15136": {
"Type": "triceN",
"Strg": "msg:%s\\n"
},
- "15091": {
+ "15137": {
"Type": "triceN",
"Strg": "msg:%s\\n"
},
- "15092": {
+ "15138": {
"Type": "triceN",
"Strg": "msg:%s\\n"
},
- "15093": {
+ "15139": {
"Type": "triceN",
"Strg": "msg:%s\\n"
},
- "15094": {
+ "15140": {
"Type": "triceN",
"Strg": "msg:%s\\n"
},
- "15095": {
+ "15141": {
"Type": "triceN",
"Strg": "msg:%s\\n"
},
- "15096": {
+ "15142": {
"Type": "triceN",
"Strg": "msg:%s\\n"
},
- "15097": {
+ "15143": {
"Type": "triceN",
"Strg": "msg:%s\\n"
},
- "15098": {
+ "15144": {
"Type": "triceN",
"Strg": "msg:%s\\n"
},
- "15099": {
+ "15145": {
"Type": "triceN",
"Strg": "msg:%s\\n"
},
- "15100": {
+ "15146": {
"Type": "triceN",
"Strg": "msg:%s\\n"
},
- "15101": {
+ "15147": {
"Type": "triceN",
"Strg": "msg:%s\\n"
},
- "15102": {
+ "15148": {
"Type": "trice",
"Strg": "sig:TRICE with 1 to 12 values\\n"
},
- "15103": {
+ "15149": {
"Type": "trice",
"Strg": "rd:TRICE %d\\n"
},
- "15104": {
+ "15150": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d\\n"
},
- "15105": {
+ "15151": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d\\n"
},
- "15106": {
+ "15152": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d\\n"
},
- "15107": {
+ "15153": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d, %d\\n"
},
- "15108": {
+ "15154": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d, %d, %d\\n"
},
- "15109": {
+ "15155": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d, %d, %d, %d\\n"
},
- "15110": {
+ "15156": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "15111": {
+ "15157": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "15112": {
+ "15158": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "15113": {
+ "15159": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "15114": {
+ "15160": {
"Type": "trice",
"Strg": "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "15115": {
+ "15161": {
"Type": "trice",
"Strg": "sig:TRICE_n with 1 to 12 values\\n"
},
- "15116": {
+ "15162": {
"Type": "trice",
"Strg": "rd:TRICE_1 %d\\n"
},
- "15117": {
+ "15163": {
"Type": "trice",
"Strg": "rd:TRICE_2 %d, %d\\n"
},
- "15118": {
+ "15164": {
"Type": "trice",
"Strg": "rd:TRICE_3 %d, %d, %d\\n"
},
- "15119": {
+ "15165": {
"Type": "trice",
"Strg": "rd:TRICE_4 %d, %d, %d, %d\\n"
},
- "1512": {
- "Type": "TRiceC",
- "Strg": "cmd:getLeds"
- },
- "15120": {
+ "15166": {
"Type": "trice",
"Strg": "rd:TRICE_5 %d, %d, %d, %d, %d\\n"
},
- "15121": {
+ "15167": {
"Type": "trice",
"Strg": "rd:TRICE_6 %d, %d, %d, %d, %d, %d\\n"
},
- "15122": {
+ "15168": {
"Type": "trice",
"Strg": "rd:TRICE_7 %d, %d, %d, %d, %d, %d, %d\\n"
},
- "15123": {
+ "15169": {
"Type": "trice",
"Strg": "rd:TRICE_8 %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "15124": {
+ "15170": {
"Type": "trice",
"Strg": "rd:TRICE_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "15125": {
+ "15171": {
"Type": "trice",
"Strg": "rd:TRICE_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "15126": {
+ "15172": {
"Type": "trice",
"Strg": "rd:TRICE_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "15127": {
+ "15173": {
"Type": "trice",
"Strg": "rd:TRICE_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\\n"
},
- "15128": {
+ "15174": {
"Type": "TRice",
"Strg": "sig:Trice16 with 1 to 12 pointer\\n"
},
- "15129": {
+ "15175": {
"Type": "Trice16",
"Strg": "rd:Trice16 %p\\n"
},
- "15130": {
+ "15176": {
"Type": "Trice16",
"Strg": "rd:Trice16 %p, %p\\n"
},
- "15131": {
+ "15177": {
"Type": "Trice16",
"Strg": "rd:Trice16 %p, %p, %p\\n"
},
- "15132": {
+ "15178": {
"Type": "Trice16",
"Strg": "rd:Trice16 %p, %p, %p, %p\\n"
},
- "15133": {
+ "15179": {
"Type": "Trice16",
"Strg": "rd:Trice16 %p, %p, %p, %p, %p\\n"
},
- "15134": {
+ "15180": {
"Type": "Trice16",
"Strg": "rd:Trice16 %p, %p, %p, %p, %p, %p\\n"
},
- "15135": {
+ "15181": {
"Type": "Trice16",
"Strg": "rd:Trice16 %p, %p, %p, %p, %p, %p, %p\\n"
},
- "15136": {
+ "15182": {
"Type": "Trice16",
"Strg": "rd:Trice16 %p, %p, %p, %p, %p, %p, %p, %p\\n"
},
- "15137": {
+ "15183": {
"Type": "Trice16",
"Strg": "rd:Trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p\\n"
},
- "15138": {
+ "15184": {
"Type": "Trice16",
"Strg": "rd:Trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\\n"
},
- "15139": {
+ "15185": {
"Type": "Trice16",
"Strg": "rd:Trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\\n"
},
- "15140": {
+ "15186": {
"Type": "Trice16",
"Strg": "rd:Trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\\n"
},
- "15141": {
+ "15187": {
"Type": "TRice",
"Strg": "sig:TRICE16 with 1 to 12 hex\\n"
},
- "15142": {
+ "15188": {
"Type": "Trice16",
"Strg": "rd:Trice16 %X\\n"
},
- "15143": {
+ "15189": {
"Type": "Trice16",
"Strg": "rd:Trice16 %X, %X\\n"
},
- "15144": {
+ "15190": {
"Type": "Trice16",
"Strg": "rd:Trice16 %X, %X, %X\\n"
},
- "15145": {
+ "15191": {
"Type": "Trice16",
"Strg": "rd:Trice16 %X, %X, %X, %X\\n"
},
- "15146": {
+ "15192": {
"Type": "Trice16",
"Strg": "rd:Trice16 %X, %X, %X, %X, %X\\n"
},
- "15147": {
+ "15193": {
"Type": "Trice16",
"Strg": "rd:Trice16 %X, %X, %X, %X, %X, %X\\n"
},
- "15148": {
+ "15194": {
"Type": "Trice16",
"Strg": "rd:Trice16 %X, %X, %X, %X, %X, %X, %X\\n"
},
- "15149": {
+ "15195": {
"Type": "Trice16",
"Strg": "rd:Trice16 %X, %X, %X, %X, %X, %X, %X, %X\\n"
},
- "15150": {
+ "15196": {
"Type": "Trice16",
"Strg": "rd:Trice16 %X, %X, %X, %X, %X, %X, %X, %X, %X\\n"
},
- "15151": {
+ "15197": {
"Type": "Trice16",
"Strg": "rd:Trice16 %X, %X, %X, %X, %X, %X, %X, %X, %X, %X\\n"
},
- "15152": {
+ "15198": {
"Type": "Trice16",
"Strg": "rd:Trice16 %X, %X, %X, %X, %X, %X, %X, %X, %X, %X, %X\\n"
},
- "15153": {
+ "15199": {
"Type": "Trice16",
"Strg": "rd:Trice16 %X, %X, %X, %X, %X, %X, %X, %X, %X, %X, %X, %X\\n"
},
- "15154": {
+ "15200": {
"Type": "TRICE",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15155": {
+ "15201": {
"Type": "TRICE",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15156": {
+ "15202": {
"Type": "TRICE",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15157": {
+ "15203": {
"Type": "TRICE",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15158": {
+ "15204": {
"Type": "trice",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15159": {
+ "15205": {
"Type": "Trice",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15160": {
+ "15206": {
"Type": "TRice",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15161": {
+ "15207": {
"Type": "TRICE_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15162": {
+ "15208": {
"Type": "TRICE_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15163": {
+ "15209": {
"Type": "TRICE_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15164": {
+ "15210": {
"Type": "TRICE_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15165": {
+ "15211": {
"Type": "trice_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15166": {
+ "15212": {
"Type": "Trice_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15167": {
+ "15213": {
"Type": "TRice_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15168": {
+ "15214": {
"Type": "TRICE0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15169": {
+ "15215": {
"Type": "TRICE0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15170": {
+ "15216": {
"Type": "TRICE0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15171": {
+ "15217": {
"Type": "TRICE0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15172": {
+ "15218": {
"Type": "trice0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15173": {
+ "15219": {
"Type": "Trice0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15174": {
+ "15220": {
"Type": "TRice0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15175": {
+ "15221": {
"Type": "TRICE_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15176": {
+ "15222": {
"Type": "TRICE_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15177": {
+ "15223": {
"Type": "TRICE_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15178": {
+ "15224": {
"Type": "TRICE_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15179": {
+ "15225": {
"Type": "trice_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15180": {
+ "15226": {
"Type": "Trice_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15181": {
+ "15227": {
"Type": "TRice_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15182": {
+ "15228": {
"Type": "TRICE8",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15183": {
+ "15229": {
"Type": "TRICE8",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15184": {
+ "15230": {
"Type": "TRICE8",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15185": {
+ "15231": {
"Type": "TRICE8",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15186": {
+ "15232": {
"Type": "trice8",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15187": {
+ "15233": {
"Type": "Trice8",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15188": {
+ "15234": {
"Type": "TRice8",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15189": {
+ "15235": {
"Type": "TRICE8_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15190": {
+ "15236": {
"Type": "TRICE8_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15191": {
+ "15237": {
"Type": "TRICE8_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15192": {
+ "15238": {
"Type": "TRICE8_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15193": {
+ "15239": {
"Type": "trice8_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15194": {
+ "15240": {
"Type": "Trice8_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15195": {
+ "15241": {
"Type": "TRice8_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15196": {
+ "15242": {
"Type": "trice16",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15197": {
+ "15243": {
"Type": "trice16",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15198": {
+ "15244": {
"Type": "trice16",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15199": {
+ "15245": {
"Type": "trice16",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15200": {
+ "15246": {
"Type": "trice16",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15201": {
+ "15247": {
"Type": "Trice16",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15202": {
+ "15248": {
"Type": "TRice16",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15203": {
+ "15249": {
"Type": "TRICE16_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15204": {
+ "15250": {
"Type": "TRICE16_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15205": {
+ "15251": {
"Type": "TRICE16_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15206": {
+ "15252": {
"Type": "TRICE16_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15207": {
+ "15253": {
"Type": "trice16_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15208": {
+ "15254": {
"Type": "Trice16_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15209": {
+ "15255": {
"Type": "TRice16_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15210": {
+ "15256": {
"Type": "TRICE32",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15211": {
+ "15257": {
"Type": "TRICE32",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15212": {
+ "15258": {
"Type": "TRICE32",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15213": {
+ "15259": {
"Type": "TRICE32",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15214": {
+ "15260": {
"Type": "trice32",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15215": {
+ "15261": {
"Type": "Trice32",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15216": {
+ "15262": {
"Type": "TRice32",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15217": {
+ "15263": {
"Type": "TRICE32_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15218": {
+ "15264": {
"Type": "TRICE32_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15219": {
+ "15265": {
"Type": "TRICE32_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15220": {
+ "15266": {
"Type": "TRICE32_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15221": {
+ "15267": {
"Type": "trice32_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15222": {
+ "15268": {
"Type": "Trice32_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15223": {
+ "15269": {
"Type": "TRice32_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15224": {
+ "15270": {
"Type": "TRICE64",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15225": {
+ "15271": {
"Type": "TRICE64",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15226": {
+ "15272": {
"Type": "TRICE64",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15227": {
+ "15273": {
"Type": "TRICE64",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15228": {
+ "15274": {
"Type": "trice64",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15229": {
+ "15275": {
"Type": "Trice64",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15230": {
+ "15276": {
"Type": "TRice64",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15231": {
+ "15277": {
"Type": "TRICE64_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15232": {
+ "15278": {
"Type": "TRICE64_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15233": {
+ "15279": {
"Type": "TRICE64_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15234": {
+ "15280": {
"Type": "TRICE64_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15235": {
+ "15281": {
"Type": "trice64_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15236": {
+ "15282": {
"Type": "Trice64_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15237": {
+ "15283": {
"Type": "TRice64_0",
"Strg": "w: Hello! 👋🙂 \\a\\n"
},
- "15238": {
+ "15284": {
"Type": "TRICE_S",
"Strg": "rd:sizeof(%8s)"
},
- "15239": {
+ "15285": {
"Type": "TRICE",
"Strg": " = %d\\n"
},
- "15240": {
+ "15286": {
"Type": "TRICE_S",
"Strg": "rd:sizeof(%8s)"
},
- "15241": {
+ "15287": {
"Type": "TRICE",
"Strg": " = %d\\n"
},
- "15242": {
+ "15288": {
"Type": "TRICE",
"Strg": "inf: Tryout tx struct:"
},
- "15243": {
+ "15289": {
"Type": "TRICE8_B",
"Strg": " %02x "
},
- "15244": {
+ "15290": {
"Type": "TRICE",
"Strg": "\\n"
},
- "15245": {
+ "15291": {
"Type": "TRICE",
"Strg": "inf: Tryout buffer:"
},
- "15246": {
+ "15292": {
"Type": "TRICE8_B",
"Strg": " %02x "
},
- "15247": {
+ "15293": {
"Type": "TRICE",
"Strg": "\\n"
},
- "15248": {
+ "15294": {
"Type": "TRICE",
"Strg": "inf: Tryout rx struct:"
},
- "15249": {
+ "15295": {
"Type": "TRICE8_B",
"Strg": " %02x "
},
- "15250": {
+ "15296": {
"Type": "TRICE",
"Strg": "\\n"
},
- "15251": {
+ "15297": {
"Type": "TRICE",
"Strg": "inf:sizeOf(Trypout) = %d, buffer length = %d\\n"
},
- "15252": {
+ "15298": {
"Type": "TRICE8_F",
"Strg": "info:TryoutStructFunction"
},
- "15253": {
+ "15299": {
"Type": "TRICE8_F",
"Strg": "info:TryoutBufferFunction"
},
- "15254": {
+ "15300": {
"Type": "Trice",
"Strg": "att:MyStructEvaluationFunction(json:ExA{Apple:%d, Birn:%u, Fisch:%f})\\n"
},
- "15255": {
+ "15301": {
"Type": "trice",
"Strg": "sig:%3d:"
},
- "15256": {
+ "15302": {
"Type": "TRICE_N",
"Strg": "wr:%s\\n"
},
- "15257": {
+ "15303": {
"Type": "triceAssertOrReturnValue",
"Strg": "ASSERT:flag not true!\\n"
},
- "15258": {
+ "15304": {
"Type": "TriceAssertOrReturnValue",
"Strg": "ASSERT:flag not true!\\n"
},
- "15259": {
+ "15305": {
"Type": "TRiceAssertOrReturnValue",
"Strg": "ASSERT:flag not true!\\n"
},
- "15260": {
- "Type": "TRice",
- "Strg": "Hello World!\\n"
- },
- "15261": {
- "Type": "trice",
- "Strg": "CUSTOM_PRINT example: the right answer is: %d\\n"
- },
- "15262": {
+ "15306": {
"Type": "TRice",
"Strg": "Hello World!\\n"
},
- "15263": {
+ "15307": {
"Type": "triceS",
- "Strg": "SAlias_Strg('theFastFoundAnswer == theRightAnswer')SAlias_Strg"
+ "Strg": "SAlias_Strg('\"att:%s.\\n\"')SAlias_Strg"
},
- "15264": {
+ "15308": {
"Type": "triceS",
"Strg": "SAlias_Strg('\"att:%s.\\n\"')SAlias_Strg"
},
- "15265": {
+ "15309": {
"Type": "triceS",
"Strg": "SAlias_Strg('\"att:%s.\\n\"')SAlias_Strg"
},
- "15266": {
+ "15310": {
"Type": "triceS",
"Strg": "SAlias_Strg('\"att:%s.\\n\"')SAlias_Strg"
},
- "15267": {
+ "15311": {
+ "Type": "TRice",
+ "Strg": "Hello World!\\n"
+ },
+ "15312": {
+ "Type": "trice",
+ "Strg": "CUSTOM_PRINT example: the right answer is: %d\\n"
+ },
+ "15313": {
"Type": "triceS",
- "Strg": "SAlias_Strg('\"att:%s.\\n\"')SAlias_Strg"
+ "Strg": "SAlias_Strg('theFastFoundAnswer == theRightAnswer')SAlias_Strg"
},
- "15268": {
+ "15314": {
"Type": "triceS",
"Strg": "SAlias_Strg('theFastFoundAnswer == theRightAnswer, (char*)theQuestion ')SAlias_Strg"
},
- "15269": {
+ "15315": {
"Type": "triceS",
- "Strg": "SAlias_Strg('\"att:%s.\\n\"')SAlias_Strg"
+ "Strg": "SAlias_Strg('theFastFoundAnswer == theRightAnswer, (char*)\"'%s' Am, it is %d\"')SAlias_Strg"
},
- "15270": {
+ "15316": {
"Type": "triceS",
"Strg": "SAlias_Strg('\"att:%s.\\n\"')SAlias_Strg"
},
- "15271": {
+ "15317": {
"Type": "triceS",
- "Strg": "SAlias_Strg('\"att:%s..\\n\"')SAlias_Strg"
+ "Strg": "SAlias_Strg('\"att:%s.\\n\"')SAlias_Strg"
},
- "15272": {
+ "15318": {
"Type": "triceS",
- "Strg": "SAlias_Strg('theFastFoundAnswer == theRightAnswer, (char*)\"'%s' Am, it is %d\"')SAlias_Strg"
+ "Strg": "SAlias_Strg('\"att:%s..\\n\"')SAlias_Strg"
},
- "15273": {
+ "15319": {
"Type": "triceS",
"Strg": "SAlias_Strg('\"att:%s...\\n\"')SAlias_Strg"
},
- "15274": {
+ "15320": {
"Type": "triceS",
"Strg": "SAlias_Strg('\"att:%s....\\n\"')SAlias_Strg"
},
- "15275": {
+ "15321": {
"Type": "triceS",
"Strg": "SAlias_Strg('\"att:'-alias' \u0026 '-salias' contributor is %s.\\n\"')SAlias_Strg"
},
- "15276": {
+ "15322": {
"Type": "trice",
"Strg": "A user printi call without values.\\n"
},
- "15277": {
+ "15323": {
"Type": "triceS",
"Strg": "SAlias_Strg('\"A user prints call without values.\\n\"')SAlias_Strg"
},
- "15278": {
+ "15324": {
"Type": "trice",
"Strg": "A user printi call with integer and float values: %u, %d, %x, %2.1f\\n"
},
- "15279": {
+ "15325": {
"Type": "triceS",
"Strg": "SAlias_Strg('\"A user prints call with integer and float values: %u, %d, %x, %2.1f\\n\"')SAlias_Strg"
},
- "15280": {
+ "15326": {
"Type": "triceS",
"Strg": "SAlias_Strg('\"A user ... with string, integer and float values: %u, %d, %x, %2.1f, %s and %s\\n\"')SAlias_Strg"
},
- "15281": {
+ "15327": {
"Type": "TRice",
"Strg": "Hello "
},
- "15282": {
+ "15328": {
"Type": "TRice",
"Strg": "World!\\n"
},
- "15283": {
+ "15329": {
"Type": "TRice64",
"Strg": "msg:Twelve 64-bit values: %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\\n"
},
- "15284": {
+ "15330": {
"Type": "trice",
"Strg": "Hello again\\n"
},
- "15285": {
+ "15331": {
"Type": "TRice8B",
"Strg": "%3x\\n"
},
- "15286": {
+ "15332": {
"Type": "TRice8B",
"Strg": "%3x\\n"
},
- "15287": {
+ "15333": {
"Type": "TRice",
"Strg": "Hello "
},
- "15288": {
+ "15334": {
"Type": "TRice",
"Strg": "World!\\n"
},
- "15289": {
+ "15335": {
"Type": "TRice64",
"Strg": "msg:Twelve 64-bit values: %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\\n"
},
- "15290": {
+ "15336": {
"Type": "trice",
"Strg": "Hello again\\n"
},
- "15291": {
+ "15337": {
"Type": "TRice",
"Strg": "Hello World!\\n"
},
- "15292": {
+ "15338": {
"Type": "TRICE8_F",
"Strg": "info:FunctionNameWa"
},
- "15293": {
+ "15339": {
"Type": "TRice8F",
"Strg": "info:FunctionNameWb"
},
- "15294": {
+ "15340": {
"Type": "Trice8F",
"Strg": "info:FunctionNameWc"
},
- "15295": {
+ "15341": {
"Type": "trice8F",
"Strg": "info:FunctionNameWd"
},
- "15296": {
+ "15342": {
"Type": "TRICE16_F",
"Strg": "info:FunctionNameXa"
},
- "15297": {
+ "15343": {
"Type": "TRice16F",
"Strg": "info:FunctionNameXb"
},
- "15298": {
+ "15344": {
"Type": "Trice16F",
"Strg": "info:FunctionNameXc"
},
- "15299": {
- "Type": "trice16F",
- "Strg": "info:FunctionNameXd"
- },
- "15300": {
- "Type": "TRICE32_F",
- "Strg": "info:FunctionNameYa"
- },
- "15301": {
- "Type": "TRice32F",
- "Strg": "rpc:FunctionNameYb"
- },
- "15302": {
- "Type": "Trice32F",
- "Strg": "rpc:FunctionNameYc"
- },
- "15303": {
- "Type": "trice32F",
- "Strg": "call:FunctionNameYd"
- },
- "15304": {
- "Type": "TRICE64_F",
- "Strg": "info:FunctionNameZa"
- },
- "15305": {
- "Type": "TRice64F",
- "Strg": "call:FunctionNameZb"
- },
- "15306": {
- "Type": "Trice64F",
- "Strg": "RPC:FunctionNameZc"
- },
- "15307": {
- "Type": "trice64F",
- "Strg": "Rpc:FunctionNameZd"
- },
- "15308": {
- "Type": "TRice",
- "Strg": "Hello World!\\n"
- },
- "15309": {
- "Type": "Trice",
- "Strg": "ok!\\n"
- },
- "15310": {
- "Type": "trice8C",
- "Strg": "call:FunctionNameWd"
- },
- "15311": {
- "Type": "TRIce32_C",
- "Strg": "info:FunctionNameYa"
- },
- "15312": {
- "Type": "trice64C",
- "Strg": "RPC:FunctionNameZd"
- },
- "15313": {
- "Type": "trice64C",
- "Strg": "RPC:FunctionNameZd"
- },
- "15314": {
- "Type": "trice64C",
- "Strg": "RPC:FunctionNameZd"
- },
- "15339": {
- "Type": "Trice16C",
- "Strg": "call:FunctionNameXc"
- },
- "15344": {
- "Type": "TRice8C",
- "Strg": "call:FunctionNameWb"
- },
- "15352": {
- "Type": "TRice",
- "Strg": "time:%.1f s\\n"
- },
- "15354": {
- "Type": "TRIce64_C",
- "Strg": "info:FunctionNameZa"
- },
- "15371": {
- "Type": "TRIce_C",
- "Strg": "abc:all:GetState"
- },
- "15374": {
- "Type": "TRIce32_C",
- "Strg": "info:FunctionNameYa"
- },
- "15383": {
- "Type": "TRice",
- "Strg": "sig:%.1f s\\n"
- },
- "15396": {
- "Type": "trice",
- "Strg": "msg:time_s,x,y,z\\n"
- },
- "15496": {
- "Type": "Trice32C",
- "Strg": "rpc:FunctionNameYc"
- },
- "15519": {
- "Type": "TRIce32_C",
- "Strg": "info:FunctionNameYa"
- },
- "15547": {
- "Type": "TRICe16_C",
- "Strg": "info:FunctionNameXa"
- },
- "15559": {
- "Type": "TRice64C",
- "Strg": "call:FunctionNameZb"
- },
- "15578": {
- "Type": "TRICe32_C",
- "Strg": "info:FunctionNameYa"
- },
- "15606": {
- "Type": "TRICE32_C",
- "Strg": "info:FunctionNameYa"
- },
- "15607": {
- "Type": "TRICE64_C",
- "Strg": "info:FunctionNameZa"
+ "15345": {
+ "Type": "trice16F",
+ "Strg": "info:FunctionNameXd"
},
- "15618": {
- "Type": "trice16C",
- "Strg": "call:FunctionNameXd"
+ "15346": {
+ "Type": "TRICE32_F",
+ "Strg": "info:FunctionNameYa"
},
- "15644": {
- "Type": "TRice32C",
+ "15347": {
+ "Type": "TRice32F",
"Strg": "rpc:FunctionNameYb"
},
- "15647": {
- "Type": "trice8C",
- "Strg": "call:FunctionNameWd"
+ "15348": {
+ "Type": "Trice32F",
+ "Strg": "rpc:FunctionNameYc"
},
- "15650": {
- "Type": "trice16C",
- "Strg": "call:FunctionNameXd"
+ "15349": {
+ "Type": "trice32F",
+ "Strg": "call:FunctionNameYd"
},
- "15657": {
- "Type": "TRICe64_C",
+ "15350": {
+ "Type": "TRICE64_F",
"Strg": "info:FunctionNameZa"
},
- "15671": {
- "Type": "TRice64",
- "Strg": "sig:%.1f s\\n"
+ "15351": {
+ "Type": "TRice64F",
+ "Strg": "call:FunctionNameZb"
},
- "15689": {
- "Type": "TRICe8_C",
- "Strg": "info:FunctionNameWa"
+ "15352": {
+ "Type": "Trice64F",
+ "Strg": "RPC:FunctionNameZc"
},
- "15698": {
- "Type": "TRIce32_C",
- "Strg": "info:FunctionNameYa"
+ "15353": {
+ "Type": "trice64F",
+ "Strg": "Rpc:FunctionNameZd"
},
- "15711": {
- "Type": "TRice64",
- "Strg": "sig:%.1f s\\n"
+ "15354": {
+ "Type": "TRice",
+ "Strg": "Hello World!\\n"
},
- "15739": {
- "Type": "Trice8C",
- "Strg": "call:FunctionNameWc"
+ "15355": {
+ "Type": "Trice",
+ "Strg": "ok!\\n"
},
- "15754": {
- "Type": "TRICE16_C",
- "Strg": "info:FunctionNameXa"
+ "15356": {
+ "Type": "trice8",
+ "Strg": "dbg:CONFIGURATION == %d - An example configuration with direct RTT output only and optimized for speed\\n"
},
- "15779": {
- "Type": "Trice64C",
- "Strg": "RPC:FunctionNameZc"
+ "15357": {
+ "Type": "trice8",
+ "Strg": "dbg:CONFIGURATION == %d - UART, no cycle counter, no critical sections.\\n"
},
- "1578": {
- "Type": "triceS",
- "Strg": "log:(from node=N2_tx) text=%s\\n"
+ "15358": {
+ "Type": "trice8",
+ "Strg": "dbg:CONFIGURATION == %d - An minimum configuration example.\\n"
},
- "15815": {
- "Type": "trice8C",
- "Strg": "call:FunctionNameWd"
+ "15359": {
+ "Type": "trice8",
+ "Strg": "dbg:CONFIGURATION == %d - An example configuration with direct RTT output and parallel deferred UART output.\\n"
},
- "15827": {
- "Type": "trice8C",
- "Strg": "call:FunctionNameWd"
+ "15360": {
+ "Type": "trice8",
+ "Strg": "dbg:CONFIGURATION == %d - An example configuration\\n"
},
- "15837": {
- "Type": "trice32C",
- "Strg": "call:FunctionNameYd"
+ "15401": {
+ "Type": "trice",
+ "Strg": "ras, "
},
- "15849": {
- "Type": "TRICe_C",
- "Strg": "abc:all:GetState"
+ "15621": {
+ "Type": "trice",
+ "Strg": "err:file not found (error code 7)\\n"
},
- "15893": {
- "Type": "trice16C",
- "Strg": "call:FunctionNameXd"
+ "15651": {
+ "Type": "trice",
+ "Strg": "ras, "
},
- "15910": {
- "Type": "TRice",
- "Strg": "vis_demo:%f,%f,%f\\n"
+ "15679": {
+ "Type": "trice",
+ "Strg": " = %d\\n"
},
- "15917": {
- "Type": "TRICE_C",
- "Strg": "abc:all:GetState"
+ "15827": {
+ "Type": "trice",
+ "Strg": "err:file not found (error code 7)\\n"
},
- "15959": {
+ "15849": {
+ "Type": "triceS",
+ "Strg": "rd:sizeof(%8s)"
+ },
+ "15881": {
"Type": "trice",
- "Strg": "vis_demo:time_s,x,y,z\\n"
+ "Strg": " = %d\\n"
},
- "15963": {
+ "15882": {
"Type": "trice",
- "Strg": "msg:Hello LabPlot!\\n"
+ "Strg": "dwa, "
},
- "15976": {
- "Type": "TRice16C",
- "Strg": "call:FunctionNameXb"
+ "15918": {
+ "Type": "TRice",
+ "Strg": "vis_demo:%f,%f,%f\\n"
},
- "15996": {
- "Type": "TRIce16_C",
- "Strg": "info:FunctionNameXa"
+ "15932": {
+ "Type": "triceS",
+ "Strg": "rd:sizeof(%8s)"
},
- "16005": {
- "Type": "triceC",
- "Strg": "abc:all:GetState"
+ "15982": {
+ "Type": "triceS",
+ "Strg": "rd:sizeof(%8s)"
},
- "16011": {
+ "15992": {
"Type": "trice",
- "Strg": "msg:Hello LabPlot!\\n"
- },
- "16014": {
- "Type": "TriceC",
- "Strg": "abc:all:GetState"
+ "Strg": "dwa, "
},
- "16089": {
- "Type": "trice8C",
- "Strg": "call:FunctionNameWd"
+ "16041": {
+ "Type": "triceS",
+ "Strg": "rd:sizeof(%8s)"
},
- "16098": {
- "Type": "trice16C",
- "Strg": "call:FunctionNameXd"
+ "16100": {
+ "Type": "trice",
+ "Strg": "msg:Hello LabPlot!\\n"
},
- "16110": {
- "Type": "trice64C",
- "Strg": "RPC:FunctionNameZd"
+ "16138": {
+ "Type": "trice",
+ "Strg": "tri\\n"
},
- "16111": {
- "Type": "TRIce8_C",
- "Strg": "info:FunctionNameWa"
+ "16216": {
+ "Type": "trice",
+ "Strg": " = %d\\n"
},
- "16155": {
- "Type": "trice64C",
- "Strg": "RPC:FunctionNameZd"
+ "16223": {
+ "Type": "trice",
+ "Strg": "err:unknown error code %d\\n"
},
- "16176": {
- "Type": "TRICE8_C",
- "Strg": "info:FunctionNameWa"
+ "16224": {
+ "Type": "trice",
+ "Strg": "tri\\n"
},
- "16241": {
- "Type": "TRiceC",
- "Strg": "abc:all:GetState"
+ "16249": {
+ "Type": "trice",
+ "Strg": "err:unknown error code %d\\n"
},
- "16246": {
- "Type": "TRIce32_C",
- "Strg": "info:FunctionNameYa"
+ "16257": {
+ "Type": "trice",
+ "Strg": " = %d\\n"
},
- "16268": {
- "Type": "trice16C",
- "Strg": "call:FunctionNameXd"
+ "16289": {
+ "Type": "TRice64",
+ "Strg": "sig:%.1f s\\n"
},
"16326": {
"Type": "trice",
@@ -9722,249 +9758,5 @@
"16383": {
"Type": "trice16",
"Strg": "WARNING:RTT0_writeDepthMax=%u (BUFFER_SIZE_UP=%u)\\n"
- },
- "1716": {
- "Type": "triceC",
- "Strg": "cmd:logState"
- },
- "1737": {
- "Type": "TRiceC",
- "Strg": "cmd:getLeds"
- },
- "1861": {
- "Type": "triceS",
- "Strg": "log:text=%s\\n"
- },
- "2001": {
- "Type": "trice",
- "Strg": "log:(from node=N3_bi) tick=%u\\n"
- },
- "2034": {
- "Type": "trice",
- "Strg": "log:tick=%u\\n"
- },
- "2100": {
- "Type": "trice",
- "Strg": "log:node=N1_tx, from=%u phase=%u\\n"
- },
- "2261": {
- "Type": "TriceC",
- "Strg": "cmd:logState"
- },
- "2859": {
- "Type": "Trice8C",
- "Strg": "cmd:setLeds"
- },
- "2945": {
- "Type": "trice8C",
- "Strg": "abc:LedsState"
- },
- "2968": {
- "Type": "TriceC",
- "Strg": "cmd:getLeds"
- },
- "3204": {
- "Type": "Trice32C",
- "Strg": "abc:DivideResult"
- },
- "3310": {
- "Type": "trice",
- "Strg": "log:from=%u phase=%u\\n"
- },
- "3448": {
- "Type": "trice32C",
- "Strg": "abc:DivideResult"
- },
- "3578": {
- "Type": "triceC",
- "Strg": "cmd:logState"
- },
- "3792": {
- "Type": "trice8C",
- "Strg": "cmd:setKey"
- },
- "3925": {
- "Type": "trice8C",
- "Strg": "cmd:setKey"
- },
- "3945": {
- "Type": "TRiceC",
- "Strg": "cmd:getLeds"
- },
- "4017": {
- "Type": "trice",
- "Strg": "log:node=N3_bi, tick=%u\\n"
- },
- "4208": {
- "Type": "triceC",
- "Strg": "cmd:logState"
- },
- "4364": {
- "Type": "trice",
- "Strg": "log:tick=%u\\n"
- },
- "4381": {
- "Type": "TRice8C",
- "Strg": "abc:LedsState"
- },
- "4470": {
- "Type": "triceS",
- "Strg": "log:text=%s\\n"
- },
- "4499": {
- "Type": "trice32C",
- "Strg": "cmd:divide"
- },
- "4502": {
- "Type": "TRice32C",
- "Strg": "abc:DivideResult"
- },
- "4557": {
- "Type": "trice32C",
- "Strg": "abc:DivideResult"
- },
- "4650": {
- "Type": "TriceC",
- "Strg": "cmd:getLeds"
- },
- "4818": {
- "Type": "triceC",
- "Strg": "cmd:getLeds"
- },
- "4972": {
- "Type": "triceS",
- "Strg": "log:node=N2_tx, text=%s\\n"
- },
- "5017": {
- "Type": "triceS",
- "Strg": "log:text=%s\\n"
- },
- "5054": {
- "Type": "trice",
- "Strg": "log:(from node=N1_tx) tick=%u\\n"
- },
- "5074": {
- "Type": "trice",
- "Strg": "log:tick=%u\\n"
- },
- "5150": {
- "Type": "trice8C",
- "Strg": "cmd:setLeds"
- },
- "5155": {
- "Type": "Trice8C",
- "Strg": "cmd:setKey"
- },
- "5460": {
- "Type": "trice",
- "Strg": "log:from=%u phase=%u\\n"
- },
- "5517": {
- "Type": "Trice8C",
- "Strg": "cmd:setKey"
- },
- "5642": {
- "Type": "TRice32C",
- "Strg": "cmd:divide"
- },
- "5749": {
- "Type": "Trice8C",
- "Strg": "abc:LedsState"
- },
- "5768": {
- "Type": "Trice8C",
- "Strg": "cmd:setLeds"
- },
- "5937": {
- "Type": "trice",
- "Strg": "log:(from node=N2_tx) tick=%u\\n"
- },
- "6059": {
- "Type": "Trice32C",
- "Strg": "cmd:divide"
- },
- "6227": {
- "Type": "TriceC",
- "Strg": "cmd:getLeds"
- },
- "6278": {
- "Type": "trice8C",
- "Strg": "cmd:setLeds"
- },
- "6365": {
- "Type": "trice",
- "Strg": "log:node=N2_tx, from=%u phase=%u\\n"
- },
- "6394": {
- "Type": "triceS",
- "Strg": "log:(from node=N3_bi) text=%s\\n"
- },
- "6603": {
- "Type": "Trice8C",
- "Strg": "cmd:setLeds"
- },
- "6779": {
- "Type": "trice",
- "Strg": "log:node=N3_bi, from=%u phase=%u\\n"
- },
- "6812": {
- "Type": "triceS",
- "Strg": "log:(from node=N1_tx) text=%s\\n"
- },
- "6890": {
- "Type": "trice8C",
- "Strg": "cmd:setKey"
- },
- "6949": {
- "Type": "trice",
- "Strg": "log:tick=%u\\n"
- },
- "6962": {
- "Type": "trice",
- "Strg": "log:node=N2_tx, tick=%u\\n"
- },
- "7084": {
- "Type": "TriceC",
- "Strg": "cmd:logState"
- },
- "7145": {
- "Type": "trice8C",
- "Strg": "abc:LedsState"
- },
- "7171": {
- "Type": "triceC",
- "Strg": "cmd:getLeds"
- },
- "7313": {
- "Type": "triceC",
- "Strg": "cmd:getLeds"
- },
- "7383": {
- "Type": "Trice8C",
- "Strg": "cmd:setKey"
- },
- "7431": {
- "Type": "trice8C",
- "Strg": "cmd:setLeds"
- },
- "7522": {
- "Type": "TriceC",
- "Strg": "cmd:logState"
- },
- "7615": {
- "Type": "triceS",
- "Strg": "log:text=%s\\n"
- },
- "7672": {
- "Type": "trice",
- "Strg": "log:(from node=N2_tx) from=%u phase=%u\\n"
- },
- "7709": {
- "Type": "triceS",
- "Strg": "log:node=N3_bi, text=%s\\n"
- },
- "7794": {
- "Type": "trice",
- "Strg": "log:node=N1_tx, tick=%u\\n"
}
}
\ No newline at end of file
diff --git a/docs/TriceBind/README.md b/docs/TriceBind/README.md
new file mode 100644
index 000000000..06735e2ad
--- /dev/null
+++ b/docs/TriceBind/README.md
@@ -0,0 +1,34 @@
+# Trice Bind
+
+Dieser Ordner enthält die Spezifikationen, Implementierungsaufträge,
+Testdokumente und Anwenderdokumentation zu `trice bind`. Die Nummern bilden die
+Entwicklungsreihenfolge ab; freie Nummernbereiche lassen Platz für spätere
+Ergänzungen.
+
+## Dokumente
+
+| Nr. | Dokument | Zweck |
+| ---: | --- | --- |
+| 10 | [MVP-Spezifikation](./Trice_bind_10_MVP_Spezifikation.md) | Verbindliche technische Grundlage des MVP |
+| 20 | [MVP-Implementierungs-Prompt](./Trice_bind_20_MVP_Implementation_Prompt.md) | Auftrag zur Implementierung des MVP |
+| 30 | [MVP-Testspezifikation](./Trice_bind_30_MVP_Test_Spezifikation.md) | Anforderungen an Testaufbau und Regression |
+| 40 | [MVP-Test-Prompt](./Trice_bind_40_MVP_Test_Prompt.md) | Auftrag zur Umsetzung des Testsystems |
+| 50 | [MVP-Testbericht](./Trice_bind_50_MVP_Test_Report.md) | Bericht zur ausgeführten Testimplementierung |
+| 60 | [MVP2-Implementierungsstrategien](./Trice_bind_60_MVP2_Implementation_Strategies.md) | Technische Entscheidungsgrundlage für die MVP2-Präprozessormechanik |
+| 70 | [MVP2-Implementierungs-Prompt](./Trice_bind_70_MVP2_Implementation_Prompt.md) | Auftrag für den lokalen `__COUNTER__`-Rebase |
+| 90 | [MVP User Manual](./Trice_bind_90_MVP_User_Manual.md) | Anwendersicht und technische Hintergründe |
+
+## Experimente
+
+Die ausführbaren Referenz- und Entwicklungs-PoCs liegen zentral unter
+[`experiments/TriceBind`](../../experiments/TriceBind). Ihre Nummerierung folgt
+der tatsächlichen Entstehungs- und Evolutionsreihenfolge.
+
+| Nr. | Experiment | Nachweis |
+| ---: | --- | --- |
+| 10 | [Minimal Line Binding](../../experiments/TriceBind/10_Minimal_Line_Binding/README.md) | Minimale Bindung einer bekannten ID über Sourcezeile und Sidecar |
+| 20 | [Target Library Integration](../../experiments/TriceBind/20_Target_Library_Integration/README.md) | Kompilierung ID-freier Aufrufe gegen die echte Target-Library |
+| 30 | [Preprocessor Verification](../../experiments/TriceBind/30_Preprocessor_Verification/README.md) | Lokaler Dispatch und einzeiliger Site-Deskriptor |
+| 40 | [MVP Generator](../../experiments/TriceBind/40_MVP_Generator/README.md) | End-to-End-Nachweis mit dem echten `trice bind`-Generator |
+| 50 | [MVP2 Counter and Macro Definitions](../../experiments/TriceBind/50_MVP2_Counter_and_Macro_Definitions/README.md) | Mehrere Trice-Stellen pro Zeile und Trices in Makrodefinitionen |
+| 60 | [MVP2 Local Counter Rebase](../../experiments/TriceBind/60_MVP2_Local_Counter_Rebase/README.md) | Lokaler `__COUNTER__`-Rebase mit Compile-Time-Prüfungen |
diff --git a/docs/TriceBind/Trice_bind_10_MVP_Spezifikation.md b/docs/TriceBind/Trice_bind_10_MVP_Spezifikation.md
new file mode 100644
index 000000000..11622221f
--- /dev/null
+++ b/docs/TriceBind/Trice_bind_10_MVP_Spezifikation.md
@@ -0,0 +1,1120 @@
+# Spezifikation: `trice bind`
+
+**Version:** 4
+**Status:** Spezifikationsentwurf für das MVP
+**Repository-Bezug:** Branch `wip`, insbesondere `internal/id`, `src`, `_test/testdata/triceCheck.c`, `experiments/TriceBind/20_Target_Library_Integration` sowie `experiments/TriceBind/30_Preprocessor_Verification`
+**Zielgruppe:** Implementierung, Review, Tests und spätere Übernahme in die Trice-Dokumentation
+
+## 1. Ziel
+
+`trice bind` ist ein neues Subkommando zur stabilen ID-Vergabe ohne numerische IDs in bind-verwalteten User-Trice-Aufrufen.
+
+Der Usercode bleibt beispielsweise:
+
+```c
+trice("msg:Hello trice bind world\n");
+```
+
+`trice bind` verwendet dieselbe ID-Datenbasis und dieselbe fachliche Zuordnungslogik wie `trice insert`, schreibt die ermittelte ID jedoch in einen temporären, dateilokalen Sidecar-Header. Die Originalquelle wird anschließend direkt kompiliert.
+
+Dauerhaft und versionsverwaltet sind:
+
+- die Userquellen,
+- `til.json`,
+- `li.json`,
+- die einmalig eingefügte Sidecar-Include-Zeile mit stabilem File Key.
+
+Die Sidecars sind reproduzierbare Buildartefakte und werden normalerweise nicht versioniert.
+
+Der normale Workflow lautet:
+
+```text
+trice bind
+Build
+```
+
+`trice bind` MUSS nach jeder Änderung einer gescannten Source- oder Headerdatei vor dem Build ausgeführt werden. Ein veralteter Sidecar kann trotz erfolgreicher Compilation eine falsche ID-Zuordnung enthalten; ein Compilerfehler ist deshalb kein ausreichender Aktualitätsnachweis.
+
+## 2. Normative Begriffe
+
+- **MUSS:** verbindliche Anforderung des MVP.
+- **SOLL:** erwartetes Verhalten; Abweichungen benötigen einen dokumentierten Grund.
+- **KANN:** optionale Eigenschaft.
+
+## 3. Kompatibilität
+
+Das MVP ist als additive Erweiterung spezifiziert.
+
+- `trice insert` und `trice clean` bleiben verfügbar.
+- Dieselbe Trice-Library unter `./src` unterstützt Insert-, Bind- und Clean-Projekte.
+- Bestehende CLI-Aufrufe behalten ihre Bedeutung.
+- Das Schema von `til.json` und `li.json` bleibt unverändert.
+- Das Trice-Drahtformat bleibt unverändert.
+- Es wird weder eine separate Bind-Library noch ein öffentliches `TRICE_MODE` eingeführt.
+- Ist `TRICE_CLEAN` in `triceConfig.h` vorhanden, hält `trice bind` den Wert auf `0`; `trice bind` fügt die Definition nicht neu ein.
+
+Abweichungen davon gelten als Breaking Change und MÜSSEN vor einem Merge ausdrücklich dokumentiert und mit einer Migrationsanleitung versehen werden. Nach aktuellem Stand ist kein Breaking Change erforderlich.
+
+Die vollständige Wirkung von `TRICE_CLEAN`, einschließlich Migration, Re-Migration und `trice clean` nach einem Bind-Lauf, ist in [Anhang B](#anhang-b-trice_clean-migration-und-re-migration) beschrieben.
+
+## 4. Dateiklassifikation
+
+`trice bind` klassifiziert jede physische Source- oder Headerdatei anhand ihrer vom ID-Parser verwalteten Trice-Stellen.
+
+### 4.1 Insert-owned
+
+Alle verwalteten Trice-Stellen besitzen explizite IDs größer null:
+
+```c
+trice(iD(123), "msg:legacy\n");
+```
+
+Für eine Insert-owned Datei gilt:
+
+- `trice bind` validiert IDs, Typen, Formatstrings sowie `til.json` und `li.json` mit der bestehenden Insert-Semantik.
+- Die Datei wird nicht verändert.
+- Es wird kein eigener Sidecar erzeugt.
+- Im normalen Lauf ist keine Warnung erforderlich.
+
+### 4.2 Bind-owned
+
+Die Datei enthält ausschließlich ID-freie Aufrufe und/oder Null-Platzhalter:
+
+```c
+trice("msg:bound\n");
+TRICE(ID(0), "msg:bound with explicit stamp\n");
+```
+
+Für eine Bind-owned Datei erzeugt und verwaltet `trice bind` File Key, Sidecar-Include und Sidecar.
+
+### 4.3 Gemischt
+
+Eine Datei enthält sowohl explizite IDs größer null als auch bindbare ID-freie beziehungsweise Null-Platzhalter-Aufrufe:
+
+```c
+trice(iD(123), "msg:legacy\n");
+trice("msg:new\n");
+```
+
+Dieser Zustand ist im MVP ein Fehler. Der User entscheidet sich dateiweise vollständig für `insert` oder `bind`; zur Migration einer solchen Datei ist zuvor `trice clean` auszuführen.
+
+Bereiche zwischen `TRICE_INSERT_OFF` und `TRICE_INSERT_ON` werden wie bei `trice insert` nicht verwaltet und beeinflussen die Klassifikation nicht.
+
+### 4.4 Koexistenz im Projekt
+
+Insert-owned und Bind-owned Dateien dürfen im selben Projekt vorkommen.
+
+Bind-owned Header können in Insert-owned Dateien eingebunden werden. Bevor die Insert-owned Datei eigene Trice-Aufrufe mit expliziten IDs verwendet, MUSS sie nach ihren Includes den Bind-Kontext entfernen:
+
+```c
+#include "bound_header.h"
+
+#undef TRICE_BIND_FILE_KEY
+
+trice(iD(123), "msg:insert-owned source\n");
+```
+
+Die alternative Idee, expliziten IDs im Bind-Dispatch automatisch Vorrang zu geben, wird im MVP nicht verfolgt; siehe [Anhang G.3](#g3-automatischer-vorrang-expliziter-ids).
+
+## 5. Unterstützte Trice-Stellen
+
+### 5.1 Gemeinsame Parser- und ID-Logik
+
+`trice bind` MUSS denselben Parser und dieselbe Makroerkennung wie `trice insert` verwenden. Eine unabhängig nachimplementierte, nur ähnliche Erkennung ist nicht ausreichend.
+
+Wiederzuverwenden sind insbesondere:
+
+- User-Level-Makroerkennung,
+- Alias- und Simple-Alias-Behandlung,
+- ID-Wrapper-Erkennung,
+- Typ- und Formatstring-Ermittlung,
+- bestehende Syntax- und Konsistenzprüfungen,
+- ID-Wiederverwendung und ID-Vergabe,
+- ID-Bereich und Vergabemethode,
+- Aktualisierung von `til.json` und `li.json`,
+- `-defaultStampSize`,
+- `TRICE_INSERT_OFF` und `TRICE_INSERT_ON`.
+
+Das MVP MUSS alle User-Level-Trice-Makros unterstützen, die von `trice insert` und der Target-Library als öffentliche User-Schnittstelle unterstützt werden. Dazu gehören auch Spezialformen wie Assertions und `triceAssertOrReturnValue`, sofern sie Teil dieser Schnittstelle sind.
+
+Registrierte `-alias`- und `-salias`-Namen werden mit derselben Semantik wie bei `trice insert` behandelt. Neue Unterstützung für beliebige Wrappermakros mit eigener Semantik ist nicht Bestandteil des MVP.
+
+### 5.2 ID-Zustände in Bind-owned Dateien
+
+#### ID-freier Aufruf
+
+```c
+trice("msg:hello\n");
+TRICE8_3("msg:%d %d %d\n", a, b, c);
+```
+
+Der Sidecar liefert den vollständigen TID-Ausdruck. Für Makrofamilien mit mindestens einem Kleinbuchstaben wird `iD(...)` verwendet. Für ausschließlich großgeschriebene User-Level-Makros bestimmt `-defaultStampSize` die Form:
+
+- `0` → `id(...)`,
+- `16` → `Id(...)`,
+- `32` → `ID(...)`.
+
+#### Null-Platzhalter
+
+```c
+TRICE8_3(id(0), "msg:%d %d %d\n", a, b, c);
+TRICE8_3(Id(0), "msg:%d %d %d\n", a, b, c);
+TRICE8_3(ID(0), "msg:%d %d %d\n", a, b, c);
+```
+
+Die Form `id`, `Id` beziehungsweise `ID` MUSS erhalten bleiben. Nur die Null wird semantisch durch die stabile ID ersetzt. Ein expliziter Null-Platzhalter hat Vorrang vor `-defaultStampSize`.
+
+### 5.3 Unterstützte Sourcekontexte
+
+Das MVP unterstützt direkte User-Level-Trice-Aufrufe in:
+
+- C- und C++-Sourcedateien,
+- Headerdateien,
+- normalen Funktionen,
+- `inline`- und `static inline`-Funktionen.
+
+Die Identität ist die textuelle Stelle in der physischen Datei, nicht eine spätere Compilerinstanz oder Inlining-Entscheidung.
+
+### 5.4 Nicht unterstützte Konstruktionen
+
+Das MVP unterstützt nicht:
+
+- mehrere bindbare Trice-Stellen in derselben physischen Sourcezeile,
+- Trice-Aufrufe innerhalb gewöhnlicher Präprozessormakrodefinitionen,
+- vom bestehenden Insert-Parser nicht unterstützte zusammengesetzte Formatstrings,
+- nicht transparente Custom-Wrapper außerhalb der vorhandenen Alias-Semantik.
+
+`trice bind` meldet diese Fälle gesammelt als Fehler und führt keinen stillen Teil-`insert`-Fallback aus. Beispiele und Begründungen stehen in [Anhang E](#anhang-e-nicht-unterstützte-konstruktionen-im-mvp). Mögliche spätere Erweiterungen sind ausschließlich in [Anhang F](#anhang-f-mvp2-optionen-und-unabhängige-spätere-erweiterungen) beschrieben.
+
+## 6. File Key und Sidecar
+
+### 6.1 File Key
+
+Jede Bind-owned Datei erhält einen einmalig erzeugten zufälligen 64-Bit-Key:
+
+```text
+K73A915E9C4021B8
+```
+
+Eigenschaften:
+
+- Präfix `K`,
+- 16 großgeschriebene Hexadezimalziffern,
+- Erzeugung mit Go `crypto/rand`,
+- Speicherung im Sidecar-Include-Namen der Userdatei,
+- Wiederverwendung bei späteren Läufen,
+- keine Neuberechnung bei Dateiinhalt-, Pfad- oder Namensänderungen,
+- keine Übertragung zum Target,
+- keine Änderung des JSON-Schemas.
+
+`trice bind` MUSS prüfen, dass ein Key nicht unterschiedlichen Besitzerdateien zugeordnet ist. Eine Kopie einer Datei einschließlich Sidecar-Include erzeugt deshalb einen Fehler, bis eine der Dateien einen neuen Key erhält.
+
+Dass ein Header und sein Sidecar in mehreren Translation Units verarbeitet werden, ist dagegen vorgesehen und kein Key-Konflikt.
+
+### 6.2 Sidecar-Name und Ausgabeordner
+
+Namensschema:
+
+```text
+trice__.h
+```
+
+Beispiel:
+
+```text
+module.c
+→ trice_module_c_K73A915E9C4021B8.h
+```
+
+Der Basisname einschließlich Source-Extension dient der Lesbarkeit. Zeichen außerhalb `[A-Za-z0-9_]` werden durch `_` ersetzt. Die Eindeutigkeit liefert der File Key.
+
+Alle Sidecars liegen standardmäßig flach unter dem vom User gewählten `-bindDir` mit Default:
+
+```text
+./build/triceIDs
+```
+
+Der Ordner wird bei Bedarf erzeugt und MUSS unabhängig von den User-Ausschlüssen automatisch vom Source-Scan ausgeschlossen werden. Der Build benötigt diesen Ordner als Include-Pfad.
+
+### 6.3 Sidecar-Inhalt
+
+Das MVP verwendet einen einzeiligen Site-Deskriptor pro bindbarer Trice-Stelle:
+
+```c
+/// \file trice_module_c_K73A915E9C4021B8.h
+/// \brief Generated by trice bind. Do not edit.
+
+// TRICE_INSERT_OFF - Trice parser exclusion marker
+
+#undef TRICE_BIND_FILE_KEY
+#define TRICE_BIND_FILE_KEY K73A915E9C4021B8
+#define TRICE_BIND_ROUTE_K73A915E9C4021B8 BIND
+
+// -defaultStampSize 16
+#define TRICE_BIND_SITE_K73A915E9C4021B8_L9 TRICE_BIND_AUTO, Id(12345u) // TRICE("Hello");
+#define TRICE_BIND_SITE_K73A915E9C4021B8_L10 TRICE_BIND_REPLACE, id(12346u) // TRICE(id(0), "world");
+#define TRICE_BIND_SITE_K73A915E9C4021B8_L11 TRICE_BIND_AUTO, iD(12347u) // trice("!\n");
+```
+
+Zur besseren Lesbarkeit SOLLEN die einzelnen `TRICE_BIND_...`, `iD(...)` und `// trice(...);` ausgerichtet sein. `TRICE_INSERT_OFF` ist im Sidecar formal nicht erforderlich, aber als zusätzliche Sicherung vorgesehen, falls der User den Sidecar kopiert hat.
+
+`TRICE_BIND_AUTO` bedeutet: Der TID-Ausdruck wird als fehlendes erstes Argument eingefügt.
+
+`TRICE_BIND_REPLACE` bedeutet: Ein vorhandener Null-Platzhalter wird verworfen und durch den im Sidecar gespeicherten TID-Ausdruck ersetzt.
+
+Normativ gilt:
+
+- Jede Site-Definition steht vollständig in einer physischen Zeile.
+- Der Sidecar enthält keinen klassischen Include-Guard.
+- Die Definitionen sind nach Sourcezeile sortiert.
+- Der vollständige TID-Ausdruck ist direkt lesbar.
+- Der Kommentar enthält den normalisierten Trice-Aufruf oder mindestens den Formatstring.
+- Bei mehrzeiligem Source wird nur die erste logische Zeile gezeigt und mit `...` abgeschlossen.
+- Der Kommentar darf keine unbeabsichtigte Präprozessor-Zeilenfortsetzung erzeugen.
+- Der Sidecar wird nur ersetzt, wenn sich sein Inhalt tatsächlich ändert.
+
+Die verifizierte Präprozessormechanik ist in [Anhang A](#anhang-a-verifizierte-target-makromechanik) dokumentiert.
+
+### 6.4 Datei ohne aktuelle Trice-Stelle
+
+Besitzt eine Datei bereits einen Sidecar-Include, aktuell aber keine verwaltete Trice-Stelle, bleiben Include, File Key und ein leerer Sidecar erhalten. Dadurch bleiben Dateiidentität und Include-Position stabil.
+
+## 7. Sidecar-Includes
+
+### 7.1 Form und Erkennung
+
+Eine Bind-owned Datei enthält mindestens einmal:
+
+```c
+#include "trice_module_c_K73A915E9C4021B8.h" // trice-bind: keep as last include before this file's Trice calls
+```
+
+Der Kommentar ist für Menschen und nicht Teil der technischen Identität. Wird er entfernt, MUSS `trice bind` den Include weiterhin anhand der Präprozessordirektive und des Sidecar-Namens erkennen.
+
+Zulässig sind übliche Whitespace-Varianten wie:
+
+```c
+# include "trice_module_c_K73A915E9C4021B8.h"
+```
+
+### 7.2 Warum der Include dateilokal sein muss
+
+Der Sidecar stellt nicht nur Definitionen bereit, sondern wählt vor den folgenden Trice-Stellen den File Key und den Bind-Dispatch der physischen Datei. Eine zentrale Einbindung aller Sidecars kann diese lokale Auswahl nicht ersetzen.
+
+Die Begründung und die genaue Expansion stehen in [Anhang A.1](#a1-warum-ein-einfaches-ifdef-nicht-genügt).
+
+### 7.3 Automatisches Einfügen
+
+Fehlt der Include, fügt `trice bind` ihn standardmäßig automatisch ein.
+
+Die MVP-Heuristik ist bewusst konservativ:
+
+1. Der letzte textuell erkannte `#include` vor der ersten bindbaren Trice-Stelle wird bestimmt.
+2. Gibt es vor diesem Include keine bindbare Trice-Stelle, wird der Sidecar unmittelbar danach eingefügt.
+3. Gibt es keine vorherige Include-Direktive, wird der Sidecar vor der ersten bindbaren Trice-Stelle eingefügt.
+4. Liegt bereits eine bindbare Trice-Stelle vor einem späteren Include, wird nicht automatisch eingefügt; der Lauf meldet einen Fehler mit der erforderlichen Include-Zeile.
+
+Die Heuristik wertet keine vollständige C/C++-Präprozessorkonfiguration aus. Kann sie keine konservativ sichere Position bestimmen, MUSS der User den Include manuell platzieren.
+
+### 7.4 Mehrfache Einbindung
+
+Derselbe Sidecar darf in seiner Besitzerdatei mehrfach eingebunden werden, um nach einem späteren Header-Include den eigenen File Key erneut zu aktivieren:
+
+```c
+#include "trice_module_c_K73A915E9C4021B8.h"
+trice("msg:first\n");
+
+#include "late_header.h"
+#include "trice_module_c_K73A915E9C4021B8.h"
+trice("msg:second\n");
+```
+
+Mehrfache identische Einbindungen sind im normalen Bind-Lauf keine Warnung. Widersprüchliche Keys oder ein fremder Besitzer-Sidecar sind Fehler.
+
+## 8. Kommandozeile
+
+### 8.1 Subkommando
+
+```sh
+trice bind [Optionen]
+```
+
+Das Subkommando verwendet die bestehende CLI- und Flag-Infrastruktur und erscheint in der regulären Hilfe.
+
+### 8.2 Gemeinsame Optionen mit `trice insert`
+
+`trice bind` übernimmt grundsätzlich alle für Source-Suche, Parserverhalten, ID-Vergabe und Listenverwaltung relevanten Optionen von `trice insert` mit identischen Defaults und identischer Semantik.
+
+In der `bind`-Hilfe dürfen diese Optionen vollständig angezeigt werden. Die Implementierung SOLL gemeinsame Registrierung und Validierung wiederverwenden, statt parallele Definitionen zu pflegen.
+
+Nicht übernommen werden nur Optionen, die ausschließlich die textuelle Darstellung dauerhaft instrumentierter Userquellen steuern und im Bind-Ablauf keine definierte Wirkung besitzen.
+
+### 8.3 Bind-spezifische Option
+
+```text
+-bindDir string
+ Ausgabeordner der Sidecar-Header.
+ Default: ./build/triceIDs
+```
+
+Der endgültige Optionsname darf an bestehende Projektkonventionen angepasst werden; die Semantik ist verbindlich.
+
+### 8.4 Dry Run
+
+Das bereits vorhandene `-dry-run` dient als Vorschau. Es berechnet File Keys, Include-Änderungen, IDs, Listenänderungen und Sidecars, schreibt jedoch keine User-, JSON- oder Sidecar-Datei.
+
+Eine separate MVP-Option zum Unterdrücken der automatischen Include-Einfügung ist nicht vorgesehen.
+
+### 8.5 Verbose-Ausgabe
+
+Bei entsprechender Verbosity SOLL `trice bind` mindestens anzeigen:
+
+- klassifizierte Datei (`insert-owned`, `bind-owned`, `mixed`),
+- eingefügten oder erkannten Sidecar-Include,
+- erzeugten oder aktualisierten Sidecar,
+- Anzahl wiederverwendeter und neuer IDs,
+- übersprungene Insert-owned Dateien.
+
+## 9. Konsistenzanforderungen
+
+- Parser-, Alias-, ID- und Listenlogik werden mit `trice insert` geteilt.
+- Die Dateiverarbeitung verwendet dieselbe Parallelitätsstrategie wie `trice insert`.
+- Ergebnisse sind bei identischer Eingabe deterministisch. Ausnahme: Neue IDs die mit random-Policy vergeben werden.
+- Alle analysierbaren Fehler werden vor dem Schreiben regulärer Ausgaben gesammelt.
+- Unveränderte Dateien werden nicht ersetzt.
+- `bindDir` wird automatisch vom Source-Scan ausgeschlossen.
+
+Der nicht normative Implementierungsumriss steht in [Anhang C](#anhang-c-implementierungsumriss).
+
+## 10. Validierung und Diagnosen
+
+Das MVP MUSS mindestens folgende Fehler erkennen:
+
+- derselbe File Key gehört zu unterschiedlichen Besitzerdateien,
+- eine Datei ist `mixed`,
+- ein Sidecar-Name oder Key widerspricht der Besitzerdatei,
+- eine bindbare Site kann nicht eindeutig aufgelöst werden,
+- mehrere bindbare Trice-Stellen liegen auf derselben physischen Zeile,
+- ein Trice-Aufruf liegt in einer nicht unterstützten Makrodefinition,
+- Alias- oder Formatstringkonstruktion wird vom gemeinsamen Parser nicht unterstützt,
+- ID, Typ, Formatstring, `til.json` oder `li.json` widersprechen sich,
+- `-defaultStampSize` ist ungültig,
+- ein Sidecar-Include kann nicht konservativ sicher automatisch platziert werden,
+- der für eine bindbare Stelle aktive File Key ist nicht eindeutig,
+- ein erzeugter Site-Name ist für den Build nicht definiert.
+
+Die von `trice insert` bereits ausgeführten syntaktischen und semantischen Prüfungen werden unverändert übernommen, einschließlich vorhandener Sonderbehandlungen für spezielle Makrofamilien.
+
+Alle erkennbaren Diagnosen werden gesammelt. Exitstatus:
+
+- keine Fehler: `0`,
+- nur Hinweise beziehungsweise Warnungen: `0`,
+- mindestens ein Fehler: ungleich `0`.
+
+Ein umfassender Hygiene- und Berichtslauf ist nicht Teil des MVP; siehe [Anhang F.1](#f1-mvp2-option-check-modus).
+
+## 11. Zusammenspiel mit `insert` und `clean`
+
+### 11.1 `trice insert`
+
+`trice insert` MUSS Dateien mit einem erkannten eigenen Sidecar-Include im MVP überspringen. Dadurch werden bind-verwaltete Dateien nicht versehentlich wieder instrumentiert.
+
+Insert-owned Dateien ohne eigenen Sidecar werden unverändert wie bisher verarbeitet.
+
+### 11.2 `trice clean`
+
+`trice clean` entfernt weiterhin IDs aus Insert-owned Dateien. Bind-owned Dateien enthalten bereits keine IDs größer null; ihre Sidecar-Includes und Sidecars bleiben bestehen.
+
+Das genaue Verhalten mit und ohne `TRICE_CLEAN` ist in [Anhang B](#anhang-b-trice_clean-migration-und-re-migration) normativ erläutert.
+
+### 11.3 Migration zu `bind`
+
+Für ein bisher vollständig mit `insert` verwaltetes Projekt:
+
+```text
+1. trice clean
+2. trice bind
+3. Build
+```
+
+`trice bind` erzeugt die File Keys, fügt Sidecar-Includes ein, erzeugt Sidecars und hält ein vorhandenes `TRICE_CLEAN` auf `0`.
+
+### 11.4 Re-Migration zu `insert`
+
+Der Rückweg ist bewusst manuell:
+
+1. Eigene Sidecar-Includes aus den betreffenden Dateien entfernen.
+2. Gegebenenfalls manuelle `#undef TRICE_BIND_FILE_KEY`-Zeilen bereinigen.
+3. `trice insert` ausführen.
+4. Nicht mehr benötigte Sidecars löschen.
+
+Ein automatisches Re-Migrationskommando ist nicht Bestandteil des MVP.
+
+
+---
+
+## Anhang A: Verifizierte Target-Makromechanik
+
+Die beiden vor V4 erforderlichen Präprozessormechanismen wurden in zwei unabhängigen PoCs unter folgendem Repositorypfad verifiziert:
+
+```text
+experiments/TriceBind/30_Preprocessor_Verification/
+├── 10_Local_Dispatch/
+└── 20_Site_Descriptor/
+```
+
+Die PoCs sind Referenznachweise für die Mechanik, noch keine vollständige Integration in die Trice-Makromatrix.
+
+### A.1 Warum ein einfaches `#ifdef` nicht genügt
+
+Folgendes funktioniert nicht:
+
+```c
+/* in trice.h */
+#ifdef TRICE_BIND_FILE_KEY
+#define trice(...) TRICE_BIND_IMPL(__VA_ARGS__)
+#else
+#define trice(...) TRICE_INSERT_IMPL(__VA_ARGS__)
+#endif
+```
+
+Userdatei:
+
+```c
+#include "trice.h"
+#include "trice_module_c_K73A915E9C4021B8.h"
+
+trice("msg:hello\n");
+```
+
+Beim Einlesen von `trice.h` ist `TRICE_BIND_FILE_KEY` noch nicht definiert. Der Präprozessor legt deshalb bereits den Insert-Pfad fest. Der spätere Sidecar-Include wertet das frühere `#ifdef` nicht erneut aus.
+
+Präprozessordirektiven können auch nicht verzögert in eine Makro-Replacement-Liste eingebettet werden.
+
+### A.2 Expansion-Time-Dispatch
+
+Stattdessen wird die Route bei jeder Makroexpansion aus dem aktuell sichtbaren Key gebildet.
+
+Vereinfachte Referenzmechanik aus `10_Local_Dispatch`:
+
+```c
+#define TRICE_BIND_ROUTE_TRICE_BIND_FILE_KEY INSERT
+#define TRICE_BIND_ROUTE_I(key) TRICE_BIND_ROUTE_##key
+#define TRICE_BIND_ROUTE(key) TRICE_BIND_ROUTE_I(key)
+
+#define TRICE_DISPATCH_I(route, ...) TRICE_ROUTE_##route(__VA_ARGS__)
+#define TRICE_DISPATCH(route, ...) TRICE_DISPATCH_I(route, __VA_ARGS__)
+
+#define trice(...) TRICE_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), __VA_ARGS__)
+```
+
+Sidecar:
+
+```c
+#undef TRICE_BIND_FILE_KEY
+#define TRICE_BIND_FILE_KEY K73A915E9C4021B8
+#define TRICE_BIND_ROUTE_K73A915E9C4021B8 BIND
+```
+
+#### Ohne aktiven Sidecar
+
+`TRICE_BIND_FILE_KEY` ist nicht definiert und bleibt bei der Expansion als Token stehen:
+
+```text
+TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY)
+→ TRICE_BIND_ROUTE_TRICE_BIND_FILE_KEY
+→ INSERT
+```
+
+Der bestehende Inserted-Pfad wird gewählt:
+
+```c
+trice(iD(1001u), "msg:inserted\n");
+```
+
+#### Mit aktivem Sidecar
+
+```text
+TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY)
+→ TRICE_BIND_ROUTE(K73A915E9C4021B8)
+→ TRICE_BIND_ROUTE_K73A915E9C4021B8
+→ BIND
+```
+
+Der Bind-Pfad wird gewählt:
+
+```c
+trice("msg:bound\n");
+```
+
+#### Rückkehr zum Inserted-Pfad
+
+```c
+#undef TRICE_BIND_FILE_KEY
+```
+
+Danach bleibt der Key wieder als ungelöstes Fallback-Token stehen und die Route wird `INSERT`.
+
+Damit dient `TRICE_BIND_FILE_KEY` gleichzeitig als:
+
+- Dateiidentität,
+- lokaler Bind-Indikator,
+- Umschaltpunkt zurück zum Inserted-Pfad.
+
+Ein zusätzlicher öffentlicher Modus oder ein `TRICE_SOURCE_KIND` ist nicht erforderlich.
+
+### A.3 Einzeiliger Site-Deskriptor
+
+Die zweite Verifikation zeigt, dass pro Site genau eine Definition genügt:
+
+```c
+#define TRICE_BIND_SITE_K73A915E9C4021B8_L101 TRICE_BIND_REPLACE, id(12346u) // TRICE(id(0), "world");
+```
+
+Der Deskriptor enthält:
+
+1. `TRICE_BIND_AUTO` oder `TRICE_BIND_REPLACE`,
+2. den vollständigen TID-Ausdruck.
+
+Vereinfachte Referenzmechanik aus `20_Site_Descriptor`:
+
+```c
+#define TRICE_BIND_SITE_I(key, line) TRICE_BIND_SITE_##key##_L##line
+#define TRICE_BIND_SITE(key, line) TRICE_BIND_SITE_I(key, line)
+#define TRICE_BIND_SITE_HERE() TRICE_BIND_SITE(TRICE_BIND_FILE_KEY, __LINE__)
+
+#define TRICE_BIND_APPLY(...) TRICE_BIND_APPLY_I(__VA_ARGS__)
+#define TRICE_BIND_APPLY_I(mode, tid, ...) mode(tid, __VA_ARGS__)
+
+#define TRICE_BIND_AUTO(tid, ...) TRICE_INTERNAL(tid, __VA_ARGS__)
+#define TRICE_BIND_REPLACE(tid, ignoredTid, ...) TRICE_INTERNAL(tid, __VA_ARGS__)
+
+#define TRICE(...) TRICE_BIND_APPLY(TRICE_BIND_SITE_HERE(), __VA_ARGS__)
+```
+
+In der vollständigen Library wird dieser Site-Mechanismus in den unter A.2 beschriebenen lokalen Route-Dispatch eingebettet. Der bestehende Inserted-Pfad bleibt unverändert.
+
+### A.4 Vollständiges Beispiel
+
+Userdatei:
+
+```c
+#include "trice.h"
+#include "trice_module_c_K73A915E9C4021B8.h" // trice-bind: keep as last include before this file's Trice calls
+
+void f(void)
+{
+ TRICE("Hello");
+ TRICE(id(0), "world");
+ trice("!\n");
+}
+```
+
+Angenommene Sourcezeilen 6, 7 und 8 sowie `-defaultStampSize 16`:
+
+```c
+/// \file trice_module_c_K73A915E9C4021B8.h
+/// \brief Generated by trice bind. Do not edit.
+
+#undef TRICE_BIND_FILE_KEY
+#define TRICE_BIND_FILE_KEY K73A915E9C4021B8
+#define TRICE_BIND_ROUTE_K73A915E9C4021B8 BIND
+
+// -defaultStampSize 16
+#define TRICE_BIND_SITE_K73A915E9C4021B8_L6 TRICE_BIND_AUTO, Id(12345u) // TRICE("Hello");
+#define TRICE_BIND_SITE_K73A915E9C4021B8_L7 TRICE_BIND_REPLACE, id(12346u) // TRICE(id(0), "world");
+#define TRICE_BIND_SITE_K73A915E9C4021B8_L8 TRICE_BIND_AUTO, iD(12347u) // trice("!\n");
+```
+
+Expansion der zweiten Stelle:
+
+```text
+TRICE_BIND_SITE_HERE()
+→ TRICE_BIND_SITE_K73A915E9C4021B8_L7
+→ TRICE_BIND_REPLACE, id(12346u)
+```
+
+Zusammen mit den Userargumenten:
+
+```text
+TRICE_BIND_APPLY(
+ TRICE_BIND_REPLACE, id(12346u),
+ id(0), "world"
+)
+```
+
+wird daraus:
+
+```text
+TRICE_BIND_REPLACE(id(12346u), id(0), "world")
+→ TRICE_INTERNAL(id(12346u), "world")
+```
+
+Die Legacy-Stamp-Form `id` bleibt erhalten. Der Null-Platzhalter wird nicht im Usercode verändert.
+
+### A.5 Verifikationsstatus
+
+Die PoCs wurden mit GCC und Clang als C11- sowie C++17-Frontend und mit strengen Warnoptionen ausgeführt. Sie verifizieren:
+
+- lokales Umschalten nach einem Sidecar-Include,
+- Fallback auf den Inserted-Pfad ohne Key,
+- Rückkehr per `#undef`,
+- `TRICE_BIND_AUTO`,
+- `TRICE_BIND_REPLACE`,
+- `id`, `Id`, `ID` und `iD`,
+- Aufrufe mit und ohne Datenargumente.
+
+Die Integration in alle echten Trice-Makrofamilien bleibt eine Implementierungs- und Testaufgabe.
+
+## Anhang B: `TRICE_CLEAN`, Migration und Re-Migration
+
+### B.1 Rolle von `TRICE_CLEAN`
+
+`TRICE_CLEAN` bleibt ein optionaler Legacy-Status beziehungsweise Compile-Time-Schalter. Bei Wert `1` verwendet `trice.h` den bestehenden Clean-/Off-Pfad. Bei Wert `0` oder fehlender Definition wird die lokale Insert-/Bind-Auswahl aus Anhang A verwendet.
+
+`TRICE_CLEAN` ersetzt keine fehlende Sidecar-Datei. Ein physisch nicht vorhandener, aber inkludierter Sidecar kann weiterhin eine Editor- oder Compilerdiagnose erzeugen.
+
+### B.2 Wirkung der Werkzeuge
+
+| Werkzeug | User-Trice-Aufrufe | Sidecar-Includes | Sidecars | vorhandenes `TRICE_CLEAN` |
+|---|---|---|---|---|
+| `trice insert` | setzt IDs in Insert-owned Dateien; überspringt Bind-owned Dateien | unverändert | unverändert | setzt auf `0` |
+| `trice bind` | schreibt keine IDs in Bind-owned Aufrufe | erzeugt/erhält | erzeugt/aktualisiert | setzt auf `0` |
+| `trice clean` | entfernt IDs aus Insert-owned Dateien | unverändert | unverändert | setzt auf `1` |
+
+Fehlt `TRICE_CLEAN`, fügt `trice bind` keine Definition hinzu.
+
+### B.3 `trice clean` nach `trice bind`
+
+#### Mit `TRICE_CLEAN` in `triceConfig.h`
+
+Ausgangszustand:
+
+```c
+#define TRICE_CLEAN 0
+```
+
+Nach:
+
+```sh
+trice clean
+```
+
+steht:
+
+```c
+#define TRICE_CLEAN 1
+```
+
+Die ID-freien Bind-Aufrufe, Sidecar-Includes und Sidecars bleiben unverändert. Der Clean-/Off-Pfad verhindert jedoch normale Trice-Codegenerierung.
+
+Ein anschließendes:
+
+```sh
+trice bind
+```
+
+setzt die vorhandene Definition wieder auf `0` und aktualisiert die Sidecars.
+
+#### Ohne `TRICE_CLEAN`
+
+`trice clean` findet in Bind-owned Dateien keine IDs größer null. Es entfernt weder Sidecar-Includes noch Sidecars und ändert keinen Modus. Der Bind-Zustand bleibt daher praktisch unverändert.
+
+Folgerung:
+
+> In einem stabilen Bind-Projekt wird `trice clean` nicht verwendet.
+
+### B.4 Migration von `insert` zu `bind`
+
+1. Projektzustand sichern beziehungsweise committen.
+2. `trice clean` ausführen, damit die zu migrierenden Dateien keine IDs größer null mehr enthalten.
+3. `trice bind` ausführen.
+4. Eingefügte Sidecar-Includes, `til.json` und `li.json` reviewen und versionieren.
+5. `build/triceIDs` als generierten Ordner behandeln.
+6. `trice bind` als verpflichtenden Pre-Build-Schritt integrieren.
+
+Ist `TRICE_CLEAN` vorhanden, setzt `clean` den Wert zunächst auf `1`; `bind` setzt ihn anschließend auf `0`.
+
+### B.5 Re-Migration von `bind` zu `insert`
+
+Der Rückweg erfolgt manuell und dateiweise:
+
+1. Eigene Sidecar-Includes aus den betroffenen Dateien entfernen.
+2. Manuelle `#undef TRICE_BIND_FILE_KEY`-Zeilen entfernen, soweit sie nicht mehr benötigt werden.
+3. Nicht mehr benötigte Sidecars löschen.
+4. `trice insert` ausführen.
+5. Das Ergebnis und die Listen prüfen.
+
+Durch die manuelle Entfernung des Sidecar-Includes wird die Datei wieder vom Inserted-Pfad übernommen.
+
+### B.6 Hybridprojekte
+
+Ein Projekt darf Insert-owned und Bind-owned Dateien enthalten. Der Workflow ist dateibezogen:
+
+- `trice bind` validiert Insert-owned Dateien und bindet Bind-owned Dateien.
+- `trice insert` verarbeitet Insert-owned Dateien und überspringt Dateien mit eigenem Sidecar-Include.
+- `trice clean` kann Insert-owned Dateien ID-frei machen; sie werden dadurch bei einem folgenden Bind-Lauf zu Bind-Kandidaten.
+
+Ein globales `trice clean` in einem Hybridprojekt sollte deshalb nur bei beabsichtigter Migration ausgeführt werden.
+
+## Anhang C: Implementierungsumriss
+
+### C.1 CLI-Integration
+
+`bind` wird wie die bestehenden Subkommandos in die vorhandene CLI- und Flag-Infrastruktur eingebunden. Gemeinsame Insert-/Bind-Optionen werden aus denselben Definitionen registriert und validiert.
+
+Nur tatsächlich bind-spezifische Werte erhalten neue Felder, insbesondere der Sidecar-Ausgabeordner.
+
+### C.2 Vorgeschlagene Verantwortlichkeiten
+
+Die konkrete Dateiaufteilung darf der Repositorystruktur folgen. Sinngemäß werden benötigt:
+
+```text
+internal/id/bindIDs.go Orchestrierung
+internal/id/bindParse.go Klassifikation, Site- und Include-Analyse
+internal/id/bindRender.go Sidecar-Erzeugung
+internal/id/bindTypes.go Pläne, Sites und Diagnosen
+src/trice*.h lokaler Dispatch und Site-Anwendung
+```
+
+Gemeinsame Insert-/Bind-Funktionalität wird extrahiert oder parametrisiert, nicht dupliziert.
+
+### C.3 Verarbeitungsphasen
+
+1. Optionen und Pfade validieren.
+2. `til.json` und `li.json` mit der bestehenden Logik laden.
+3. Kandidatendateien mit derselben Walk- und Ausschlusslogik wie `trice insert` bestimmen; `bindDir` zusätzlich ausschließen.
+4. Dateien parallel einlesen und `TRICE_INSERT_OFF`-/`ON`-Bereiche maskieren.
+5. Vorhandene Sidecar-Includes und File Keys erfassen.
+6. Dateien als Insert-owned, Bind-owned oder mixed klassifizieren.
+7. Fehlende Keys und Include-Änderungen planen.
+8. Den finalen In-Memory-Sourcezustand einschließlich geplanter Includes herstellen.
+9. Für Bind-owned Dateien die bestehende Insert-ID-Zuordnung in-memory ausführen.
+10. Sidecar-Deskriptoren, Diagnosen und globale Konflikte bestimmen.
+11. Nach fehlerfreier Analyse JSON-Dateien, Source-Includes und Sidecars konsistent schreiben.
+
+### C.4 In-Memory-Insert-Pass
+
+Für Bind-owned Dateien wird der finale In-Memory-Sourcezustand an die bestehende Insert-Logik übergeben. Diese liefert beziehungsweise bestimmt:
+
+- numerische ID,
+- `iD`-, `id`-, `Id`- oder `ID`-Form,
+- Typ,
+- Formatstring,
+- Location,
+- bisherige Listenprüfungen.
+
+Aus der Änderung pro Site wird gerendert:
+
+- `TRICE_BIND_AUTO`, wenn `insert` ein fehlendes TID-Argument ergänzt hätte,
+- `TRICE_BIND_REPLACE`, wenn `insert` einen Null-Platzhalter ersetzt hätte.
+
+Der virtuell instrumentierte Sourceinhalt wird nicht in die Userdatei geschrieben.
+
+### C.5 Dateiplan
+
+Eine interne Dateiplan-Struktur enthält mindestens:
+
+- Pfad und Klassifikation,
+- Originalinhalt,
+- finalen Inhalt mit geplanter Include-Änderung,
+- vorhandenen oder neuen File Key,
+- Sidecar-Namen und Sidecar-Inhalt,
+- Bind-Sites,
+- Diagnosen.
+
+Ein Bind-Site enthält mindestens:
+
+- File Key,
+- finale Zeile und Spalte,
+- User-Level-Makroname beziehungsweise Alias,
+- Typ und Formatstring,
+- numerische ID,
+- Stamp-Form,
+- Modus `AUTO` oder `REPLACE`,
+- normalisierten Sourcetext für den Kommentar.
+
+### C.6 Transaktion und Parallelität
+
+Analyse und Sidecar-Aufbereitung laufen parallel entsprechend dem vorhandenen Insert-Modell. Globale ID- und Key-Konflikte werden mit den bestehenden Synchronisationsmechanismen beziehungsweise klar abgegrenzten Registries geschützt.
+
+Nach der Analyse folgt eine deterministische Commit-Phase. Ein echtes virtuelles Dateisystem ist nicht vorgeschrieben; Tests können reale temporäre Verzeichnisse verwenden.
+
+## Anhang D: Implementierung und Tests
+
+### D.1 Essenzielle Target-Nachweise
+
+Die beiden vorhandenen PoCs sind vor und während der Integration als Regressionstests beizubehalten:
+
+- `10_Local_Dispatch`: lokaler Expansion-Time-Dispatch,
+- `20_Site_Descriptor`: einzeiliger Site-Deskriptor.
+
+Die echte Trice-Library MUSS dieselben Eigenschaften für repräsentative Makrofamilien nachweisen:
+
+1. generisches Lower-/Mixed-Case-Makro,
+2. ausschließlich großgeschriebenes Makro einschließlich `-defaultStampSize`,
+3. Spezialfamilie wie String oder Buffer,
+4. Assertion beziehungsweise `triceAssertOrReturnValue`.
+
+### D.2 Unit-Tests
+
+Mindestens:
+
+- File-Key-Erzeugung, Wiederverwendung und Konflikte,
+- Sidecar-Namensbildung,
+- Include-Erkennung unabhängig vom Kommentar,
+- konservative automatische Include-Einfügung,
+- mehrfache Sidecar-Reaktivierung,
+- Dateiklassifikation,
+- ID-freie und Null-Platzhalter-Sites,
+- Stamp-Semantik,
+- Aliasbehandlung,
+- `TRICE_INSERT_OFF`/`ON`,
+- deterministisches Rendering ohne Zeilenumbruch,
+- Kommentar-Normalisierung,
+- gesammelte und sortierte Diagnosen,
+- atomisches beziehungsweise inhaltsabhängiges Schreiben.
+
+### D.3 Makroabdeckung
+
+`_test/testdata/triceCheck.c` ist in einem temporären Testbaum zu verwenden. `trice bind` fügt dort die benötigten Sidecar-Includes selbst ein. Die kanonische Testquelle soll keine Bind-spezifischen `#if`-Blöcke erhalten.
+
+Für jedes vom Projekt angebotene User-Level-Makro muss ein positiver Bind-Test oder ein dokumentierter Negativtest existieren.
+
+### D.4 Testskripte
+
+Während der Inbetriebnahme ist der kurze Pflichtlauf:
+
+```sh
+./_testAll_10_PcTargetTests.sh
+```
+
+Zusätzlich ist ein Bind-Testskript analog zu den bestehenden Insert-Tests vorzusehen. Gemeinsame Shell-Hilfen und temporäre Kopien vermeiden Codeduplizierung.
+
+Vor Merge läuft mindestens:
+
+```sh
+./scripts/testAll.sh quick
+```
+
+Der vollständige Lauf bleibt Bestandteil der abschließenden Repository- beziehungsweise Release-Regression, ist aber nicht der innere Entwicklungszyklus:
+
+```sh
+./scripts/testAll.sh full
+```
+
+### D.5 Generator-PoC
+
+`experiments/TriceBind/20_Target_Library_Integration` sowie die beiden Verifikations-PoCs bleiben unverändert erhalten. Für den echten Generator wird unter `experiments/TriceBind/40_MVP_Generator` ein zusätzlicher unabhängiger PoC angelegt.
+
+
+### D.6 Abnahmekriterien
+
+Das MVP gilt als implementiert, wenn:
+
+1. `trice bind` als dokumentiertes Subkommando verfügbar ist.
+2. Die fachliche Parser-, ID- und Listenlogik von `trice insert` wiederverwendet wird.
+3. Bind-owned User-Trice-Aufrufe keine numerischen IDs enthalten.
+4. Insert-owned und Bind-owned Dateien projektweit koexistieren können; gemischte Dateien werden abgelehnt.
+5. File Keys, Includes und Sidecars stabil und deterministisch erzeugt werden.
+6. Die Target-Library den lokalen Insert-/Bind-Dispatch sowie `TRICE_BIND_AUTO` und `TRICE_BIND_REPLACE` für die vollständige unterstützte Makromatrix bereitstellt.
+7. ID-freie Uppercase-Makros, `id(0)`, `Id(0)`, `ID(0)` und Lower-/Mixed-Case-Makros die bestehende Stamp-Semantik bewahren.
+8. Direkte Trice-Aufrufe in Source-, Header- und `static inline`-Code funktionieren.
+9. `TRICE_INSERT_OFF` und `TRICE_INSERT_ON` identisch zu `insert` wirken.
+10. `til.json`, `li.json` und der Datenstrom kompatibel bleiben.
+11. `experiments/TriceBind/20_Target_Library_Integration` unverändert erhalten bleibt und unter `experiments/TriceBind/40_MVP_Generator` ein zusätzlicher unabhängiger Generator-PoC hinzukommt.
+12. Die beiden Verifikations-PoCs aus `experiments/TriceBind/30_Preprocessor_Verification` weiterhin erfolgreich laufen.
+13. `_test/testdata/triceCheck.c` über einen temporären Bind-Testbaum bind-fähig geprüft wird.
+14. Die bestehenden Insert-, Clean-, Update- und Logtests grün bleiben.
+15. Die in [Anhang D](#anhang-d-implementierung-und-tests) festgelegten Entwicklungs- und Regressionstests erfolgreich sind.
+
+## Anhang E: Nicht unterstützte Konstruktionen im MVP
+
+### E.1 Mehrere direkte Trice-Stellen pro Zeile
+
+```c
+trice("msg:first\n"); trice("msg:second\n");
+```
+
+Beide Stellen besitzen denselben File Key und denselben `__LINE__`-Wert. Im MVP sind getrennte Sourcezeilen zu verwenden.
+
+### E.2 Trice-Aufruf in einer Makrodefinition
+
+```c
+#define LOG_ERROR(n) trice("msg:error=%d\n", n)
+```
+
+Der Trice-Aufruf wird erst bei der Expansion von `LOG_ERROR` verarbeitet. File Key und `__LINE__` beschreiben dann die Aufrufstelle. Eine kompatible Definitionsstellen-Semantik ist im einfachen MVP nicht allgemein verfügbar.
+
+Eine `static inline`-Funktion ist im MVP unterstützt:
+
+```c
+static inline void logError(int n)
+{
+ trice("msg:error=%d\n", n);
+}
+```
+
+### E.3 Zusammengesetzter Formatstring
+
+```c
+#define PREFIX "msg:"
+trice(PREFIX "value=%d\n", value);
+```
+
+Diese Form folgt den bereits bestehenden Grenzen des Insert-Parsers und des Trice-Formatstringmodells. Variable Texte sollen über geeignete Parameter- beziehungsweise Stringformen übertragen werden.
+
+### E.4 Nicht transparenter Custom-Wrapper
+
+```c
+#define MY_TRACE(x) trice("msg:value=%d\n", transform(x))
+```
+
+Dies ist kein bloßer Aliasname, sondern eine Makrodefinition mit eigener Semantik und fällt unter E.2.
+
+## Anhang F: MVP2-Optionen und unabhängige spätere Erweiterungen
+
+Alle Inhalte dieses Anhangs liegen ausdrücklich außerhalb des MVP. Sie dürfen erst nach separater Spezifikation und Verifikation implementiert werden.
+
+### F.1 MVP2-Option: Check-Modus
+
+Ein späteres:
+
+```sh
+trice bind -check
+```
+
+kann zusätzliche Hygiene- und Berichtsfunktionen enthalten:
+
+- leere Sidecars,
+- verwaiste Sidecars,
+- Sidecars ohne Besitzerdatei,
+- ungewöhnliche mehrfache Einbindungen,
+- Dateien ohne aktuelle Trice-Stelle,
+- möglicherweise nicht mehr benötigtes `trice.h`,
+- alte Site-Definitionen,
+- Abweichungen zwischen Source, Sidecar, `til.json` und `li.json`,
+- optionaler Hinweis auf eine nicht mehr benötigte `TRICE_CLEAN`-Definition.
+
+Der normale MVP-Lauf bleibt auf bindungsrelevante Fehler konzentriert.
+
+### F.2 MVP2-Option: Begrenzte Wrappermakros
+
+Ein späteres MVP2 kann einfache Wrapper unterstützen:
+
+```c
+// module.h
+#define LOG_ERROR(n) trice("msg:error=%d\n", n)
+```
+
+Aufrufstellen:
+
+```c
+LOG_ERROR(0); // Zeile 7
+LOG_ERROR(1); // Zeile 8
+```
+
+Möglicher Sidecar:
+
+```c
+#define TRICE_BIND_SITE_K73A915E9C4021B8_L7 TRICE_BIND_AUTO, iD(12345u) // LOG_ERROR(0) -> trice("msg:error=%d\n", n)
+#define TRICE_BIND_SITE_K73A915E9C4021B8_L8 TRICE_BIND_AUTO, iD(12345u) // LOG_ERROR(1) -> trice("msg:error=%d\n", n)
+```
+
+Beide Aufrufstellen verwenden dieselbe stabile ID der Makrodefinition. Die Location Information soll deterministisch auf die Definitionsstelle verweisen.
+
+Eine portable sourcebasierte Unterstützung ist für folgende begrenzte Klasse denkbar:
+
+- genau ein direkter Trice-Aufruf in der Replacement-Liste,
+- statischer Formatstring,
+- kein Token-Pasting,
+- keine Formatstringerzeugung per Stringification,
+- keine verschachtelten Wrapper,
+- höchstens ein Wrapperaufruf pro physischer Sourcezeile.
+
+Ein GCC-/Clang-Präprozessorlauf kann optional Aufrufstellen liefern, ist aber wegen abweichender Targetcompiler, vordefinierter Makros und inaktiver Zweige nicht die bevorzugte normative Grundlage.
+
+### F.3 MVP2-Option: Mehrere Trice-Stellen pro Zeile
+
+Ein gesonderter `__COUNTER__`-PoC kann prüfen, ob mehrere direkte Trice-Stellen derselben Sourcezeile zuverlässig unterscheidbar sind. Generator- und Compilerexpansion müssen dabei nachweislich denselben Counterverlauf besitzen.
+
+Diese Option ist unabhängig von F.2. `__COUNTER__` stellt nicht automatisch die bisherige Definitionsstellen-Semantik eines Wrappermakros her.
+
+### F.4 MVP2-Option: Maximale Sidecar-Zeilenlänge
+
+Das MVP bricht Site-Definitionen nicht um. Falls praktische Compiler- oder Werkzeuggrenzen auftreten, kann später eine Option wie:
+
+```text
+-maxLineLength
+```
+
+spezifiziert werden.
+
+### F.5 MVP2-Option: Aktive Präprozessorkonfiguration
+
+Ein optionaler Lauf des tatsächlichen Targetpräprozessors kann berichten, welche sourcebasiert erfassten Logstellen in einer konkreten Buildkonfiguration aktiv sind. Das Binding und die stabile ID-Vergabe bleiben sourcebasiert.
+
+### F.6 MVP2-Option: Post-Link-Inventur
+
+Eine optionale ELF- oder Link-Map-Auswertung kann berichten, welche aktiven Logstellen nach Optimierung, LTO, Archivselektion und Section-Garbage-Collection im finalen Image verbleiben. Sie verändert das Binding nicht.
+
+### F.7 MVP2-Option: Vorbereitete statische Libraries
+
+Vorbereitete `.a`-Libraries können Metadaten und bindbare ID-Platzhalter enthalten. Ein späterer Bind-Schritt kann sie in den ID-Raum des Endprodukts einordnen. Beliebige unvorbereitete Libraries sind damit nicht nachträglich bindbar.
+
+### F.8 MVP2-Option: Tiefere `insert`-Prüfung von Bind-Dateien
+
+Das MVP lässt `trice insert` Dateien mit eigenem Sidecar-Include aus. Eine spätere Erweiterung kann zusätzlich Sidecar, `til.json` und `li.json` auf Konsistenz prüfen.
+
+### F.9 Unabhängige spätere Option: Referenzliste der User-Level-Makros
+
+Unabhängig von `trice bind` kann `trice generate` eine maschinenlesbare und dokumentierbare Referenz der User-Level-Makros erzeugen, beispielsweise unter `docs/ref`. Parser, Tests und Dokumentation sollten dafür möglichst eine gemeinsame Registry verwenden.
+
+Mögliche Ausgaben:
+
+```text
+docs/ref/TriceUserMacros.md
+docs/ref/TriceUserMacros.json
+```
+
+Diese Option ist keine Voraussetzung des Bind-MVP.
+
+### F.10 Unabhängige spätere Option: Allgemeinere Parser-Marker
+
+Die vorhandenen Marker `TRICE_INSERT_OFF` und `TRICE_INSERT_ON` bleiben im MVP unverändert. Später können zusätzliche neutrale Synonyme wie `TRICE_ID_OFF` und `TRICE_ID_ON` geprüft werden.
+
+## Anhang G: Nicht verfolgte Alternativen
+
+### G.1 Globales `TRICE_MODE`
+
+Ein zusätzlicher globaler Modus ist nicht erforderlich. `TRICE_CLEAN` wählt weiterhin den Off-Pfad; der lokale File Key wählt bei der Makroexpansion Insert oder Bind.
+
+### G.2 Einfaches `#ifdef TRICE_BIND_FILE_KEY`
+
+Ein beim Einlesen von `trice.h` ausgewertetes `#ifdef` sieht den später inkludierten Sidecar nicht. Der verifizierte Expansion-Time-Dispatch aus Anhang A wird verwendet.
+
+### G.3 Automatischer Vorrang expliziter IDs
+
+Ein Bind-Dispatch, der ein vorhandenes explizites ID-Argument automatisch erkennt und bevorzugt, würde die Target-Makrokomplexität erhöhen. Im MVP erfolgt die Trennung dateiweise; im seltenen Hybridfall wird `TRICE_BIND_FILE_KEY` explizit undefiniert.
+
+### G.4 Separate `HAS_TID`-Definitionen
+
+Zwei Sidecar-Definitionen pro Site sind nicht erforderlich. Der einzeilige Deskriptor enthält Verarbeitungsmodus und vollständigen TID-Ausdruck.
+
+### G.5 Generierte Schattenquellen
+
+Das MVP kompiliert die Userquellen direkt. Ein virtueller Insert-Inhalt darf intern zur Ermittlung der Site-Daten entstehen, wird aber nicht als Buildquelle verwendet.
+
+### G.6 Allgemeines ELF-Patching
+
+Eine allgemeine ELF-Patch-Lösung wird für normale Userquellen nicht verfolgt. Spezielle ELF-basierte Analysen oder vorbereitete Libraries können additive Erweiterungen sein; siehe die in [`Trice_bind_90_MVP_User_Manual.md`](./Trice_bind_90_MVP_User_Manual.md#anhang-d-unverändert-übernommene-architekturentscheidung-gegen-elf-patching) übernommene Architekturentscheidung.
+
+## Anhang H: Repositoryreferenzen
+
+- [`internal/id`](../../internal/id): gemeinsame Parser-, Alias- und ID-Verwaltung
+- [`internal/id/insertIDs.go`](../../internal/id/insertIDs.go): bestehende Insert-Zuordnung und Parallelverarbeitung
+- [`src/trice.h`](../../src/trice.h), [`src/triceOn.h`](../../src/triceOn.h) und [`src/triceOff.h`](../../src/triceOff.h): Target-Makroschicht
+- [`_test/testdata/triceCheck.c`](../../_test/testdata/triceCheck.c): breite Makroabdeckung
+- [`scripts/testAll.sh`](../../scripts/testAll.sh): Repositoryregression
+- [`experiments/TriceBind/20_Target_Library_Integration`](../../experiments/TriceBind/20_Target_Library_Integration): bisheriger Target-Bind-PoC
+- [`experiments/TriceBind/30_Preprocessor_Verification`](../../experiments/TriceBind/30_Preprocessor_Verification): verifizierter lokaler Dispatch und einzeiliger Site-Deskriptor
diff --git a/docs/TriceBind/Trice_bind_20_MVP_Implementation_Prompt.md b/docs/TriceBind/Trice_bind_20_MVP_Implementation_Prompt.md
new file mode 100644
index 000000000..4c9ca5b12
--- /dev/null
+++ b/docs/TriceBind/Trice_bind_20_MVP_Implementation_Prompt.md
@@ -0,0 +1,122 @@
+# Codex-Prompt: Implementierung von `trice bind` MVP
+
+Arbeite im Repository `trice` auf dem Branch `wip`.
+
+## Verbindliche Grundlage
+
+Lies zuerst vollständig:
+
+```text
+docs/TriceBind/Trice_bind_10_MVP_Spezifikation.md
+```
+
+Diese Datei ist die einzige fachlich verbindliche Spezifikation. Wiederhole oder interpretiere ihre Anforderungen nicht eigenmächtig neu. Bei Widersprüchen zwischen diesem Prompt und der Spezifikation gilt die Spezifikation.
+
+Lies anschließend die beiden verifizierten PoCs unter:
+
+```text
+experiments/TriceBind/30_Preprocessor_Verification/
+```
+
+Sie sind die technische Referenz für die dort geprüften Präprozessormechanismen.
+
+## Auftrag
+
+Implementiere ausschließlich das in der Spezifikation definierte **MVP** von:
+
+```text
+trice bind
+```
+
+Alle ausdrücklich als **MVP2**, spätere Erweiterung, Option oder verworfene Alternative gekennzeichneten Punkte bleiben unimplementiert.
+
+## Randbedingungen
+
+- Keine beabsichtigten Breaking Changes.
+- Bestehendes Verhalten von `trice insert`, `trice clean`, Decoder, `til.json`, `li.json`, Drahtformat und vorhandenen Projekten erhalten.
+- Keine zweite unabhängige Trice-Parser- oder ID-Logik implementieren.
+- Bestehende Insert-Funktionalität möglichst extrahieren, parametrisieren oder direkt wiederverwenden.
+- Keine fachliche Änderung an der Spezifikation vornehmen.
+- Wenn eine Anforderung nicht kompatibel oder nicht eindeutig umsetzbar ist, dokumentiere die konkrete Konfliktstelle mit Datei, Symbol und Minimalbeispiel. Nimm in diesem Teilbereich keine eigenmächtige API-, Format- oder Semantikänderung vor.
+- Normale Implementierungsdetails darfst du selbstständig entscheiden.
+
+## Vorgehen
+
+1. Analysiere Repository, aktuelle Insert-/Clean-Implementierung, Target-Makros, CLI-Infrastruktur, Parallelisierung und Tests.
+2. Führe vor Änderungen den kurzen Baseline-Test aus:
+
+ ```sh
+ ./_testAll_10_PcTargetTests.sh quick
+ ```
+
+3. Erstelle einen kompakten Implementierungsplan mit:
+ - betroffenen Dateien,
+ - wiederverwendeter beziehungsweise zu extrahierender Insert-Logik,
+ - Target-Makrointegration,
+ - Generatorablauf,
+ - Teststrategie.
+4. Implementiere das MVP schrittweise.
+5. Ergänze Unit-, Präprozessor-, Integrations-, Parallelitäts- und Regressionstests gemäß Spezifikation.
+6. Verwende während der Entwicklung regelmäßig den u.U. einige Minuten dauernden Test (also Geduld!):
+
+ ```sh
+ ./_testAll_10_PcTargetTests.sh quick
+ ```
+
+7. Führe vor Abschluss mindestens aus:
+
+ ```sh
+ ./scripts/testAll.sh quick
+ ```
+
+8. Verändere oder entferne die vorhandenen PoCs nicht. Erstelle für den echten Generator bei Bedarf einen zusätzlichen unabhängigen PoC mit eigenem Namen.
+
+## Qualitätsanforderungen
+
+- Gemeinsame Logik für `insert` und `bind` statt Codeduplizierung.
+- Deterministisches Verhalten trotz paralleler Verarbeitung.
+- Keine teilweise gültigen regulären Ausgaben nach fatalen Fehlern.
+- Unveränderte Dateien nicht unnötig neu schreiben.
+- Alle erkennbaren Diagnosen sammeln und geordnet ausgeben.
+- Neue öffentliche Optionen und Hilfeausgaben in die bestehende CLI-Struktur integrieren.
+- Keine unnötigen Refactorings außerhalb des für das MVP benötigten Umfangs.
+
+## Abschlussbericht
+
+Liefere nach der Umsetzung:
+
+1. kurze Architekturzusammenfassung,
+2. Liste der geänderten Dateien,
+3. Beschreibung der wiederverwendeten oder extrahierten Insert-Logik,
+4. Beschreibung der Target-Makrointegration,
+5. neue beziehungsweise geänderte CLI-Optionen,
+6. neue und geänderte Tests,
+7. ausgeführte Testkommandos mit Ergebnis,
+8. verbleibende MVP-Lücken,
+9. ausdrücklich nicht implementierte MVP2-Punkte,
+10. Abweichungen von der Spezifikation oder mögliche Breaking Changes.
+
+## Genehmigungen / Generalvollmacht
+
+Frage nicht um Erlaubnis
+
+- um in Github oder im lokalen Repo etwas zu lesen
+- um die Go Quellen zu verändern
+- um im ./src Folder etwas zu ändern
+- um mehr als 5 Dateien zu ändern
+- um Tools auszuführen
+- um zu compilieren (Go oder C)
+- um Tests auszuführen
+
+## Verbote
+
+- Du darfst nicht selbstständig etwas ins Repo comitten oder pushen.
+- Du darfst die Spezifikation nicht ändern. Wenn es sinnvoll erscheint, dafst Du einen begründeten Vorschlag machen und mich fragen.
+
+## Wichtig
+
+Ich möchte, dass Du durchgehend diese Aufgabe bearbeitest ohne zwischendurch Freigaben anzufordern. Wenn Du noch Erlaubnisse brauchst, frage jetzt danach.
+
+## Startkommando
+
+Beginne jetzt mit Repositoryanalyse, Baseline-Test und Implementierungsplan. Fahre danach selbstständig mit der MVP-Implementierung fort.
diff --git a/docs/TriceBind/Trice_bind_30_MVP_Test_Spezifikation.md b/docs/TriceBind/Trice_bind_30_MVP_Test_Spezifikation.md
new file mode 100644
index 000000000..f46159843
--- /dev/null
+++ b/docs/TriceBind/Trice_bind_30_MVP_Test_Spezifikation.md
@@ -0,0 +1,542 @@
+# Spezifikation: `trice bind` MVP-Tests
+
+**Version:** 1
+**Status:** Spezifikationsentwurf für das MVP-Testsystem
+**Repository-Bezug:** Branch `wip`, insbesondere `scripts`, `_test`, `examples`, `experiments/TriceBind`, `internal/id` und `docs/TriceBind`
+**Zielgruppe:** Implementierung, Review, CI und Release-Absicherung
+
+## 1. Ziel
+
+Diese Spezifikation legt fest, wie der neue `trice bind`-Workflow neben dem bestehenden `trice insert`/`trice clean`-Workflow getestet wird.
+
+Die Tests MÜSSEN nachweisen, dass:
+
+- die Host-ID-Verwaltung für `bind` und `insert` fachlich konsistent ist,
+- dieselben PC-Target-Tests in beiden ID-Workflows erfolgreich laufen,
+- die relevanten Projekte unter `./examples` sowohl mit eingesetzten IDs als auch mit Sidecar-Binding gebaut werden können,
+- bestehende `insert`- und `clean`-Abläufe nicht regressieren,
+- Migration und Re-Migration reproduzierbar funktionieren,
+- Testabbrüche den Arbeitsbaum nicht in einem unklaren Zwischenzustand hinterlassen.
+
+Die Generatorfunktion ist in [`Trice_bind_10_MVP_Spezifikation.md`](./Trice_bind_10_MVP_Spezifikation.md) definiert. Dieses Dokument spezifiziert ausschließlich Testaufbau, Testzustände und Orchestrierung.
+
+## 2. Normative Begriffe
+
+- **MUSS:** verbindliche Anforderung des MVP-Testsystems.
+- **SOLL:** erwartetes Verhalten; Abweichungen benötigen einen dokumentierten Grund.
+- **KANN:** optionale Eigenschaft.
+
+## 3. Grundprinzip
+
+Der fachliche Testinhalt darf nicht für jeden ID-Workflow separat nachimplementiert werden.
+
+Für einen gegebenen Testfall gilt:
+
+```text
+gemeinsame Testquellen und Erwartungen
+ |
+ +--------+--------+
+ | |
+ Insert-Vorbereitung Bind-Vorbereitung
+ | |
+ +--------+--------+
+ |
+ derselbe Build/Testlauf
+```
+
+Die Unterschiede zwischen den Varianten liegen ausschließlich in:
+
+- der Herstellung des Sourcezustands,
+- den zusätzlichen Include-Pfaden für Sidecars,
+- der abschließenden Zustandsbereinigung beziehungsweise Wiederherstellung.
+
+Buildkommandos, Compileroptionen, Testdaten und Erfolgskriterien MÜSSEN soweit technisch möglich gemeinsam verwendet werden.
+
+Bind-spezifische `#if`-Blöcke in kanonischen User-Testquellen SOLLEN vermieden werden. Der Generator soll seine Includes wie im realen Projekt selbst einfügen.
+
+## 4. Testzustände
+
+### 4.1 Clean
+
+Die verwalteten Trice-Aufrufe enthalten keine IDs größer null. Eigene Bind-Sidecar-Includes und Sidecars sind entfernt, sofern der Test ausdrücklich einen reinen Clean-Zustand verlangt.
+
+Dieser Zustand ist die gemeinsame Ausgangsbasis für eine vollständige Migration.
+
+### 4.2 Inserted
+
+Die verwalteten Trice-Aufrufe enthalten die durch `trice insert` eingesetzten IDs. Bind-Sidecar-Includes sind für diese Dateien nicht aktiv.
+
+### 4.3 Bound
+
+Die Bind-owned Dateien enthalten ID-freie Trice-Aufrufe beziehungsweise Null-Platzhalter und ihre dateilokalen Sidecar-Includes. Die Sidecars liegen standardmäßig unter:
+
+```text
+./build/triceIDs
+```
+
+`til.json` und `li.json` entsprechen demselben fachlichen ID-Bestand wie im Inserted-Zustand.
+
+### 4.4 Ungültige Zwischenzustände
+
+Folgende Zustände dürfen nicht stillschweigend als erfolgreiche Testvorbereitung gelten:
+
+- eine Datei ist nach der Generator-Spezifikation `mixed`,
+- ein benötigter Sidecar fehlt,
+- eine Insert-owned Datei bleibt unbeabsichtigt in einem aktiven Bind-Kontext,
+- eine Bind-owned Datei wird zusätzlich durch `trice insert` instrumentiert,
+- nur ein Teil der gemeinsam getesteten Quellen wurde umgestellt.
+
+## 5. Öffentliche Workflow-Skripte
+
+Die vorhandenen Skripte bleiben erhalten:
+
+```text
+trice_insertIDs_in_examples_and_test_folder.sh
+trice_cleanIDs_in_examples_and_test_folder.sh
+```
+
+Zusätzlich MÜSSEN bereitgestellt werden:
+
+```text
+trice_bindIDs_in_examples_and_test_folder.sh
+trice_remigrateBindToClean_in_examples_and_test_folder.sh
+```
+
+Die endgültige Benennung darf an die bestehenden Repositorykonventionen angepasst werden. Die Semantik ist verbindlich.
+
+### 5.1 Gemeinsame Konfiguration
+
+Alle vier Skripte MÜSSEN dieselbe Projekt- und Listen-Konfiguration verwenden, insbesondere die Werte aus:
+
+```text
+scripts/_setup_trice_environment.sh
+```
+
+Dazu gehören:
+
+- `TRICE_DEFAULTS`,
+- `TRICE_ALIASES`,
+- `TRICE_PRJ_FILES`,
+- `TRICE_TIL_JSON`,
+- `TRICE_LI_JSON`,
+- `TRICE_LI_ROOT`,
+- identische ID-Grenzen.
+
+Die Listen der bearbeiteten `_test`- und `examples`-Quellen dürfen nicht unabhängig in mehreren Skripten gepflegt werden.
+
+### 5.2 Bind-Skript
+
+`trice_bindIDs_in_examples_and_test_folder.sh` MUSS:
+
+1. `trice bind` mit denselben Source-, Alias-, Listen- und ID-Optionen wie das Insert-Skript aufrufen,
+2. `./build/triceIDs` bei Bedarf durch `trice bind` erzeugen lassen,
+3. fehlende Sidecar-Includes erzeugen lassen,
+4. bei wiederholtem Aufruf idempotent sein,
+5. bei Fehlern mit einem Fehlerstatus enden.
+
+### 5.3 Re-Migrationsskript
+
+`trice_remigrateBindToClean_in_examples_and_test_folder.sh` MUSS einen Bind-Zustand in einen insert-bereiten Clean-Zustand überführen.
+
+Es MUSS:
+
+- eindeutig zuordenbare eigene Sidecar-Includes entfernen,
+- generierte Sidecars des verwalteten Testumfangs entfernen,
+- die ID-freien beziehungsweise Null-Platzhalter-Trice-Aufrufe unverändert lassen,
+- keine beliebigen Include-Zeilen anhand unspezifischer Textsuche löschen,
+- bei mehrdeutigen oder nicht sicher zuordenbaren Stellen fehlschlagen und die Datei nennen,
+- bei wiederholtem Aufruf idempotent sein.
+
+Es führt nicht zwingend selbst `trice insert` aus. Der anschließende Insert-Schritt bleibt als eigener, sichtbarer Workflow-Schritt erhalten:
+
+```text
+remigrate Bind → Clean
+trice insert
+```
+
+Ein optionaler Wrapper darf beide Schritte atomar kombinieren, muss jedoch intern dieselben Funktionen verwenden.
+
+## 6. CLI-Tests
+
+Mindestens folgende Aufrufe MÜSSEN mit Exitstatus `0` enden:
+
+```sh
+trice bind -h
+trice bind --help
+trice b -h
+trice b --help
+```
+
+Die Hilfe darf nicht mit einer Fehlerzeile wie folgender enden:
+
+```text
+flag: help requested
+```
+
+und keine durch `log.Fatal` erzeugte Zeitstempel-Fehlerausgabe enthalten.
+
+Die bestehenden Kurzformen, insbesondere:
+
+```sh
+trice i -h
+```
+
+dürfen nicht regressieren.
+
+Die Hilfe für `bind` MUSS die für `bind` gültigen gemeinsamen Insert-Optionen sowie die bind-spezifischen Optionen anzeigen.
+
+## 7. Testorchestrierung ohne Codeduplizierung
+
+### 7.1 Gemeinsamer Test-Worker
+
+PC-Target- und Example-Build-Tests SOLLEN jeweils aus zwei Ebenen bestehen:
+
+1. **Workflow-Wrapper**
+ - stellt Inserted oder Bound her,
+ - setzt notwendige Umgebungsvariablen und Include-Pfade,
+ - ruft den gemeinsamen Worker auf,
+ - stellt den vorherigen Zustand wieder her.
+
+2. **Gemeinsamer Worker**
+ - führt die eigentlichen Builds oder Tests aus,
+ - enthält keine ID-Workflow-spezifische Sourceinstrumentierung,
+ - erhält den Workflow über einen klaren Parameter oder eine Umgebungsvariable.
+
+Beispielhafte interne Schnittstelle:
+
+```text
+TRICE_ID_WORKFLOW=insert
+TRICE_ID_WORKFLOW=bind
+```
+
+Die genaue Bezeichnung ist nicht normativ.
+
+### 7.2 Keine doppelten kanonischen Testquellen
+
+Es SOLL nur eine kanonische Fassung von `triceCheck.c` und den jeweiligen Example-Quellen geben.
+
+Für Tests dürfen temporäre Kopien verwendet werden. Dauerhafte, manuell auseinanderlaufende Insert- und Bind-Kopien derselben C-Datei sind zu vermeiden.
+
+### 7.3 Getrennte Logs
+
+Insert- und Bind-Varianten MÜSSEN getrennte Logs und getrennte Ergebniszeilen in `testAll_summary.log` erhalten. Ein Fehler muss eindeutig einem Workflow zuordenbar sein.
+
+## 8. PC-Target-Tests
+
+Der derzeitige Schritt:
+
+```text
+scripts/_testAll_10_PcTargetTests.sh
+```
+
+verwendet einen Ablauf nach dem Muster:
+
+```text
+insert → PC-Target-Tests → clean
+```
+
+Der gleiche Testumfang MUSS zusätzlich im Bound-Zustand ausgeführt werden.
+
+### 8.1 Gleicher Testumfang
+
+Für beide Varianten MÜSSEN identisch sein:
+
+- die ausgewählten Go-Pakete,
+- `quick`- beziehungsweise `full`-Auswahl,
+- `demoTIL.json` und `demoLI.json`,
+- Cache-Bereinigung,
+- Umgebungsbehandlung wie `C_INCLUDE_PATH`,
+- erwartete Testausgaben,
+- Logauswertung und Fehlerkriterien.
+
+Im Quick-Modus betrifft dies mindestens denselben aktuellen Paketsatz wie die Insert-Variante. Im Full-Modus betrifft es denselben vollständigen `_test`-Umfang.
+
+### 8.2 Mögliche Skriptstruktur
+
+Eine zulässige Struktur ist beispielsweise:
+
+```text
+scripts/_testAll_10_PcTargetTests_common.sh
+scripts/_testAll_10a_PcTargetTests_insert.sh
+scripts/_testAll_10b_PcTargetTests_bind.sh
+```
+
+Alternativ darf `_testAll_10_PcTargetTests.sh` beide Varianten orchestrieren, sofern:
+
+- die gemeinsame Testlogik nur einmal implementiert ist,
+- getrennte Logs beziehungsweise klar getrennte Logabschnitte entstehen,
+- die Varianten einzeln aufrufbar bleiben.
+
+### 8.3 Bind-Vorbereitung
+
+Die Bind-Variante MUSS vor dem Test:
+
+- die relevanten `_test`- und Example-Datenquellen in einen konsistenten Bound-Zustand versetzen,
+- `./build/triceIDs` in den C/CGO-Include-Pfad aufnehmen,
+- danach denselben Go-Testworker wie die Insert-Variante aufrufen.
+
+## 9. Example-Builds
+
+Alle relevanten Projekte unter:
+
+```text
+./examples
+```
+
+MÜSSEN sowohl im Inserted- als auch im Bound-Zustand gebaut werden können.
+
+Dies gilt nicht nur für den separaten Bind-PoC, sondern für den bestehenden Example-Buildumfang.
+
+### 9.1 Bestehender Umfang
+
+Die bestehende Testorchestrierung umfasst insbesondere:
+
+- `examples/buildAllTargets_TRICE_ON.sh`,
+- `examples/buildAllTargets_TRICE_OFF.sh`,
+- die G0B1-X0-Matrix,
+- die Clang-Übersetzung für `examples/G0B1_inst`,
+- die in `scripts/_setup_trice_environment.sh` genannten instrumentierten Example-Quellen.
+
+Dieser Umfang darf durch die Bind-Erweiterung nicht reduziert werden.
+
+### 9.2 TRICE_ON-Matrix
+
+Jeder Example-Build, der im bestehenden `TRICE_ON`-Ablauf mit eingesetzten IDs gebaut wird, MUSS zusätzlich mit Sidecar-Binding gebaut werden.
+
+Für beide Varianten müssen identisch sein:
+
+- Targetkonfiguration,
+- Compiler und Compileroptionen,
+- Linkeroptionen,
+- Trice-Transport- und Puffereinstellungen,
+- Warnungs- und Fehlerkriterien,
+- erwartete Buildartefakte.
+
+Der einzige fachliche Unterschied ist der ID-Workflow.
+
+### 9.3 TRICE_OFF
+
+`TRICE_OFF` ist nicht vom ID-Bindemechanismus abhängig und muss nicht künstlich doppelt ausgeführt werden. Der bestehende `TRICE_OFF`-Build bleibt jedoch Teil von `testAll.sh` und darf nicht regressieren.
+
+### 9.4 Clang- und GCC-Builds
+
+Soweit ein Example heute sowohl mit GCC als auch in einem gesonderten Clang-Schritt gebaut wird, SOLL der `TRICE_ON`-Build in beiden ID-Workflows geprüft werden.
+
+Ist ein benötigter externer Compiler nicht installiert, gilt weiterhin die bestehende SKIP-/WARN-Semantik.
+
+### 9.5 Include-Pfad
+
+Im Bound-Zustand MUSS jeder betroffene Example-Build den konfigurierten `bindDir`, standardmäßig:
+
+```text
+./build/triceIDs
+```
+
+als Include-Pfad erhalten.
+
+Diese Ergänzung SOLL zentral über die bestehende Buildumgebung oder eine gemeinsame Workflowvariable erfolgen. Sie darf nicht unabhängig und unterschiedlich in jedem Example-Projekt gepflegt werden.
+
+### 9.6 Example-Skriptintegration
+
+Die individuellen Example-Buildskripte dürfen ihre bisherige Insert-/Clean-Logik nicht parallel zu einer äußeren Bind-Orchestrierung ausführen.
+
+Es MUSS genau einen Eigentümer für den ID-Workflow geben.
+
+Eine mögliche Struktur ist:
+
+```text
+äußerer Testschritt
+ → setzt TRICE_ID_WORKFLOW
+ → gemeinsamer Workflow-Helper bereitet Sources vor
+ → bestehender Example-Build
+ → gemeinsamer Workflow-Helper räumt auf
+```
+
+Die einzelnen Example-Buildkommandos bleiben dabei möglichst unverändert.
+
+## 10. Bind-spezifische Generator- und Targettests
+
+Der vorhandene Bind-Testschritt unter:
+
+```text
+scripts/_testAll_09b_BindTests.sh
+```
+
+bleibt bestehen und SOLL mindestens prüfen:
+
+- Generator-Unit- und Integrationstests,
+- C- und C++-Targetkompilation,
+- die beiden verifizierten Präprozessor-PoCs,
+- den unabhängigen Generator-PoC,
+- Decodierung des erzeugten Datenstroms,
+- kanonische `triceCheck.c`-Abdeckung.
+
+Diese Tests ersetzen nicht die doppelte Ausführung der allgemeinen PC-Target- und Example-Buildtests.
+
+## 11. Migration und Re-Migration
+
+### 11.1 Migrationstest
+
+Ein vollständiger Migrationstest MUSS mindestens abdecken:
+
+```text
+Inserted
+→ trice clean
+→ trice bind
+→ Bound-Build und Tests
+```
+
+Zu prüfen sind:
+
+- numerische IDs bleiben fachlich stabil,
+- `til.json` und `li.json` bleiben konsistent,
+- Sidecar-Includes und Sidecars werden erzeugt,
+- die Originalquellen enthalten danach keine IDs größer null,
+- die Targets erzeugen decodierbare Trice-Daten.
+
+### 11.2 Re-Migrationstest
+
+Ein vollständiger Rückweg MUSS mindestens abdecken:
+
+```text
+Bound
+→ Sidecar-Includes und Sidecars entfernen
+→ trice insert
+→ Inserted-Build und Tests
+```
+
+Zu prüfen sind:
+
+- keine verwaisten aktiven Bind-Kontexte,
+- IDs werden wieder korrekt in die User-Trice-Aufrufe eingesetzt,
+- `til.json` und `li.json` bleiben konsistent,
+- der Build entspricht dem bestehenden Insert-Workflow.
+
+### 11.3 Sichtbare manuelle Abnahmesequenz
+
+Für eine manuelle Gesamtprüfung ist folgende Sequenz geeignet:
+
+```sh
+./trice_bindIDs_in_examples_and_test_folder.sh
+./scripts/testAll.sh quick
+
+./trice_remigrateBindToClean_in_examples_and_test_folder.sh
+./trice_insertIDs_in_examples_and_test_folder.sh
+./scripts/testAll.sh quick
+
+./trice_cleanIDs_in_examples_and_test_folder.sh
+./trice_bindIDs_in_examples_and_test_folder.sh
+```
+
+Nach vollständiger Integration testet bereits ein einzelner `testAll.sh`-Lauf beide Workflows intern. Die Sequenz bleibt als sichtbarer Wartungs- und Abnahmeworkflow nützlich.
+
+## 12. Zustandswiederherstellung und Abbruchverhalten
+
+Automatisierte Tests MÜSSEN ihren Ausgangszustand bei folgenden Ausgängen wiederherstellen:
+
+- Erfolg,
+- Build- oder Testfehler,
+- `SIGINT`,
+- `SIGTERM`.
+
+Die Wiederherstellung muss einen zentralen Eigentümer besitzen. Verschachtelte Wrapper dürfen nicht unabhängig dieselben Dateien bereinigen.
+
+Zulässige Strategien sind:
+
+- Sicherung und exakte Wiederherstellung aller betroffenen Dateien und Listen,
+- Ausführung in einem temporären Projektbaum,
+- ein anderer nachweislich transaktionaler Mechanismus.
+
+Ein pauschales abschließendes `trice clean` reicht nicht, wenn der Ausgangszustand Bound oder Inserted war.
+
+Die Tests SOLLEN prüfen, dass sich der Status der versionierten Dateien vor und nach `testAll.sh` nicht ändert. Ignorierte Buildartefakte dürfen erzeugt und kontrolliert bereinigt werden.
+
+## 13. `testAll.sh`-Integration
+
+### 13.1 Quick
+
+`./scripts/testAll.sh quick` MUSS mindestens ausführen:
+
+- bestehende Host- und Generator-Tests,
+- Bind-Unit-/PoC-Tests,
+- PC-Target-Quicktests im Inserted-Zustand,
+- dieselben PC-Target-Quicktests im Bound-Zustand,
+- den vorhandenen Quick-Example-Buildumfang im Inserted-Zustand,
+- denselben `TRICE_ON`-Example-Buildumfang im Bound-Zustand,
+- bestehenden `TRICE_OFF`-Umfang.
+
+### 13.2 Full
+
+`./scripts/testAll.sh full` MUSS zusätzlich den bisherigen Full-Umfang ausführen. Die Bind-Variante erhält denselben Full-PC-Target- und Example-Umfang, soweit der Build nicht workflowunabhängig ist.
+
+### 13.3 Entwicklungszyklus
+
+Während der Inbetriebnahme darf als kurzer Zyklus weiterhin verwendet werden:
+
+```sh
+./scripts/_testAll_10_PcTargetTests.sh
+```
+
+beziehungsweise dessen neue workflowbezogenen Teilschritte.
+
+Vor Merge MUSS mindestens:
+
+```sh
+./scripts/testAll.sh quick
+```
+
+erfolgreich laufen. Der bestehende Full-Lauf bleibt die abschließende Regression, ist aber nicht für jede lokale Iteration erforderlich.
+
+## 14. Logs und Ergebnisdarstellung
+
+Jeder Workflowtest MUSS im Log erkennen lassen:
+
+- vorbereiteter ID-Zustand,
+- bearbeitete Quellen,
+- verwendetes `til.json` und `li.json`,
+- verwendeter `bindDir`,
+- Build- beziehungsweise Testkommando,
+- Wiederherstellungsaktion,
+- Endstatus.
+
+Die Zusammenfassung soll beispielsweise getrennte Einträge enthalten:
+
+```text
+PcTargetTests insert: PASS
+PcTargetTests bind: PASS
+GccExampleBuilds insert: PASS
+GccExampleBuilds bind: PASS
+ClangExampleBuild insert: PASS
+ClangExampleBuild bind: PASS
+```
+
+## 15. Fehlerkriterien
+
+Ein Test MUSS fehlschlagen, wenn mindestens einer der folgenden Fälle eintritt:
+
+- ein CLI-Hilfeaufruf liefert einen Fehlerstatus oder `flag: help requested`,
+- Insert- und Bind-Varianten verwenden nicht denselben fachlichen Testumfang,
+- ein `TRICE_ON`-Example baut nur im Inserted-, aber nicht im Bound-Zustand,
+- ein Bound-Build findet einen Sidecar nicht,
+- ein Target erzeugt nicht decodierbare Daten,
+- ID-, Typ-, Formatstring- oder Location-Ergebnisse unterscheiden sich unerwartet,
+- der Arbeitsbaum bleibt nach dem Test in einem anderen versionierten Zustand,
+- ein Cleanup- oder Restore-Schritt schlägt fehl,
+- der Test überspringt eine Variante ohne eine explizite Werkzeug- oder Plattformbegründung.
+
+## 16. Abnahmekriterien
+
+Das MVP-Testsystem gilt als vollständig, wenn:
+
+1. `trice b -h` und `trice bind -h` sauber funktionieren.
+2. Das Bind-Hilfsskript vorhanden und idempotent ist.
+3. Die Re-Migration in einen insert-bereiten Clean-Zustand reproduzierbar ist.
+4. Die allgemeinen PC-Target-Tests mit identischem Umfang unter Insert und Bind laufen.
+5. Alle bestehenden relevanten `TRICE_ON`-Example-Builds unter Insert und Bind laufen.
+6. Die bestehende `TRICE_OFF`-Abdeckung erhalten bleibt.
+7. GCC- und vorhandene Clang-Example-Prüfungen den Bind-Zustand berücksichtigen.
+8. Gemeinsame Test- und Buildlogik nicht für beide Workflows dupliziert ist.
+9. Migration und Re-Migration automatisiert getestet werden.
+10. Abbruch und Fehler den Ausgangszustand wiederherstellen.
+11. `./scripts/testAll.sh quick` beide Workflows vollständig abdeckt.
+12. Die bestehenden Insert-, Clean-, Decoder- und Drahtformat-Tests unverändert grün bleiben.
diff --git a/docs/TriceBind/Trice_bind_40_MVP_Test_Prompt.md b/docs/TriceBind/Trice_bind_40_MVP_Test_Prompt.md
new file mode 100644
index 000000000..06751f33b
--- /dev/null
+++ b/docs/TriceBind/Trice_bind_40_MVP_Test_Prompt.md
@@ -0,0 +1,153 @@
+# Codex-Prompt: Umsetzung der `trice bind` MVP-Tests
+
+Arbeite im Repository `trice` auf dem Branch `wip`.
+
+## Verbindliche Grundlage
+
+Lies zuerst vollständig:
+
+```text
+docs/TriceBind/Trice_bind_30_MVP_Test_Spezifikation.md
+```
+
+Diese Datei ist die einzige fachlich verbindliche Spezifikation für Testaufbau, Testzustände, Workflow-Skripte und Testorchestrierung. Wiederhole oder interpretiere ihre Anforderungen nicht eigenmächtig neu. Bei Widersprüchen zwischen diesem Prompt und der Testspezifikation gilt die Testspezifikation.
+
+Lies außerdem die dort referenzierten Dokumente und vorhandenen Skripte, soweit sie zum Verständnis oder zur Umsetzung benötigt werden, insbesondere:
+
+```text
+docs/TriceBind/Trice_bind_10_MVP_Spezifikation.md
+scripts/
+examples/
+_test/
+```
+
+Die Generator-Spezifikation definiert das Verhalten von `trice bind`; sie darf durch diese Aufgabe nicht fachlich geändert werden.
+
+## Auftrag
+
+Implementiere vollständig das in der Testspezifikation definierte **MVP-Testsystem** für `trice bind` neben dem bestehenden `trice insert`-/`trice clean`-Workflow.
+
+Alle ausdrücklich als spätere Erweiterung, Option oder nicht zum MVP gehörig gekennzeichneten Punkte bleiben unimplementiert.
+
+Der Schwerpunkt dieser Aufgabe liegt auf:
+
+- Testorchestrierung,
+- Workflow- und Re-Migrationsskripten,
+- gemeinsamer Nutzung vorhandener Testlogik,
+- PC-Target-Tests,
+- Builds und Tests der relevanten Projekte unter `./examples`,
+- CLI-Hilfetests,
+- reproduzierbarer Zustandsherstellung und Wiederherstellung.
+
+Die Testspezifikation enthält die vollständigen fachlichen Anforderungen; dupliziere sie nicht in neuen Dokumenten oder Kommentaren.
+
+## Randbedingungen
+
+- Keine beabsichtigten Breaking Changes.
+- Bestehendes Verhalten und bestehende Tests von `trice insert`, `trice clean`, `trice bind`, Decoder, `til.json`, `li.json`, Drahtformat und vorhandenen Projekten erhalten.
+- Bestehende Testlogik möglichst extrahieren, parametrisieren oder direkt wiederverwenden; keine unnötige Verdopplung von PC-Target- oder Example-Build-Kommandos.
+- Keine dauerhaft auseinanderlaufenden Insert- und Bind-Kopien kanonischer C-/C++-Testquellen anlegen.
+- Keine Bind-spezifischen `#if`-Blöcke in kanonische User-Testquellen einführen, sofern die Testspezifikation dies nicht ausdrücklich verlangt.
+- Keine fachliche Änderung an der Test- oder Generator-Spezifikation vornehmen.
+- Wenn eine Anforderung nicht kompatibel oder nicht eindeutig umsetzbar ist, dokumentiere die konkrete Konfliktstelle mit Datei, Symbol, Skriptablauf und Minimalbeispiel. Nimm in diesem Teilbereich keine eigenmächtige API-, Format- oder Semantikänderung vor.
+- Kleine Fehler in der bestehenden `bind`-Implementierung, die eine ausdrücklich spezifizierte Prüfung blockieren, darfst du beheben. Halte solche Änderungen eng begrenzt und dokumentiere sie im Abschlussbericht.
+- Normale Implementierungsdetails darfst du selbstständig entscheiden.
+
+## Vorgehen
+
+1. Analysiere vollständig:
+ - die Testspezifikation,
+ - die aktuelle `testAll`-Orchestrierung,
+ - PC-Target-Tests,
+ - Example-Build-Skripte,
+ - bestehende Insert-/Clean-Hilfsskripte,
+ - aktuelle Bind-Hilfsskripte und CLI-Hilfe,
+ - Zustandssicherung, Cleanup und Trap-Behandlung.
+
+2. Führe vor Änderungen geeignete Baseline-Tests aus. Mindestens:
+
+```sh
+./scripts/_testAll_10_PcTargetTests.sh
+```
+
+Verwende die im Repository tatsächlich vorhandene Aufrufsyntax. Dokumentiere bestehende Fehler getrennt von neu verursachten Fehlern.
+
+3. Erstelle vor der ersten größeren Änderung einen kompakten Implementierungsplan mit:
+ - betroffenen Dateien,
+ - gemeinsamer Worker-/Wrapper-Struktur,
+ - Zustandsübergängen und Cleanup,
+ - Einbindung in `testAll.sh`,
+ - PC-Target- und Example-Testmatrix,
+ - vorgesehenen Testkommandos.
+
+4. Implementiere die Testspezifikation schrittweise.
+
+5. Führe während der Entwicklung regelmäßig die betroffenen Teiltests aus. Bevorzuge gezielte kurze Läufe; wiederhole nicht unnötig die gesamte Testsuite.
+
+6. Führe vor Abschluss mindestens die in der Testspezifikation geforderten MVP-Tests sowie aus:
+
+```sh
+./scripts/testAll.sh quick
+```
+
+Falls ein Test wegen einer dokumentierten lokalen Toolchain- oder Plattformvoraussetzung nicht ausführbar ist, weise dies präzise nach. Ersetze einen nicht ausgeführten Test nicht stillschweigend durch eine schwächere Prüfung.
+
+7. Verändere keine Spezifikationsdokumente. Ergänze nur Implementierung, Skripte, Tests und bei Bedarf knappe nutzungsbezogene Hinweise an den dafür vorgesehenen Stellen.
+
+## Qualitätsanforderungen
+
+- Gemeinsame Test-Worker statt kopierter Build- und Testabläufe.
+- Insert- und Bind-Varianten müssen denselben fachlichen Testumfang verwenden, soweit die Testspezifikation dies fordert.
+- Die relevanten Projekte unter `./examples` müssen in beiden ID-Workflows geprüft werden.
+- Testzustände und Übergänge müssen reproduzierbar und idempotent sein.
+- Abbruch, Fehler und Signale dürfen den Arbeitsbaum nicht in einem unklaren Zwischenzustand hinterlassen.
+- Logs und Zusammenfassungen müssen den jeweiligen ID-Workflow eindeutig erkennen lassen.
+- Keine unnötigen Refactorings außerhalb des für die Testspezifikation benötigten Umfangs.
+- Shell-Skripte müssen zu den bestehenden Repositorykonventionen passen und Fehler zuverlässig weiterreichen.
+- Veränderte Dateien dürfen nicht unnötig neu geschrieben werden.
+
+## Abschlussbericht
+
+Liefere nach der Umsetzung:
+
+1. kurze Zusammenfassung der Testarchitektur,
+2. Liste der geänderten Dateien,
+3. Beschreibung der gemeinsam genutzten Worker- und Wrapper-Logik,
+4. Beschreibung der implementierten Zustandsübergänge und Cleanup-Mechanismen,
+5. Beschreibung der PC-Target- und Example-Testabdeckung für Insert/Clean und Bind,
+6. neue oder geänderte öffentliche Hilfsskripte,
+7. kleine notwendige Korrekturen an der bestehenden Bind-Implementierung,
+8. ausgeführte Testkommandos mit Ergebnis,
+9. nicht ausgeführte Tests mit genauer Begründung,
+10. verbleibende MVP-Lücken,
+11. ausdrücklich nicht implementierte spätere Optionen,
+12. Abweichungen von der Testspezifikation oder mögliche Breaking Changes.
+
+## Genehmigungen / Generalvollmacht
+
+Frage nicht um Erlaubnis:
+
+- um in GitHub oder im lokalen Repository etwas zu lesen,
+- um Go-, C-, C++-, Shell- oder Testquellen zu verändern,
+- um Dateien unter `./scripts`, `./examples`, `./_test`, `./internal` oder `./src` zu ändern,
+- um mehr als fünf Dateien zu ändern,
+- um Tools auszuführen,
+- um Go-, C- oder C++-Code zu kompilieren,
+- um Tests auszuführen,
+- um temporäre Dateien oder Testarbeitsbäume anzulegen,
+- um kleine, von der Testspezifikation verlangte CLI- oder Workflowfehler zu beheben.
+
+## Verbote
+
+- Du darfst nicht selbstständig committen oder pushen.
+- Du darfst die Test- oder Generator-Spezifikation nicht ändern. Wenn eine Änderung sinnvoll erscheint, darfst du einen begründeten Vorschlag machen und mich fragen.
+- Du darfst Testanforderungen nicht durch schwächere Ersatzprüfungen umgehen.
+- Du darfst bestehende Insert-/Clean-Tests nicht entfernen oder reduzieren, um Bind-Tests grün zu bekommen.
+
+## Wichtig
+
+Bearbeite diese Aufgabe durchgehend, ohne zwischendurch Freigaben anzufordern. Wenn du für die Durchführung noch eine unverzichtbare Erlaubnis benötigst, frage jetzt danach.
+
+## Startkommando
+
+Beginne jetzt mit Repositoryanalyse, Baseline-Tests und Implementierungsplan. Fahre danach selbstständig mit der vollständigen Umsetzung der MVP-Testspezifikation fort.
diff --git a/docs/TriceBind/Trice_bind_50_MVP_Test_Report.md b/docs/TriceBind/Trice_bind_50_MVP_Test_Report.md
new file mode 100644
index 000000000..587a403ae
--- /dev/null
+++ b/docs/TriceBind/Trice_bind_50_MVP_Test_Report.md
@@ -0,0 +1,118 @@
+# Codex Report
+
+• Geschafft: Alle fachlich relevanten trice bind-Tests und Compiler-Matrizen sind grün. Es wurde nichts committed oder gepusht.
+
+## 1. Architektur
+
+ - Zentrale ID-Konfiguration in _setup_trice_environment.sh.
+ - Gemeinsamer Insert-/Bind-Dispatcher in _trice_id_workflow.sh.
+ - Bytegenaue Zustandsverwaltung mit Restore bei Erfolg, Fehler, SIGINT und SIGTERM.
+ - Gemeinsame Worker für PC-, Clang- und GCC-Tests; getrennte Insert-, Bind- und OFF-Wrapper sowie Logs.
+ - Transaktionale Re-Migration inklusive Rollback bei Fehlern.
+ - Deterministische Sidecar-Verarbeitung und geordnete Diagnosen.
+
+## 2. Geänderte Dateien
+
+ Insgesamt 50 fokussierte Dateien:
+
+ - CLI: internal/args/{handler.go,handler_additional_test.go,helpinfo.go,tricehelpall_test.go}
+ - Bind/Remigration: internal/id/{bindIDs.go,bindIDs_test.go,bindParse.go,bindTypes.go,bindRemigrate.go,bindRemigrate_test.go,remigratecmd/main.go}
+ - Target/Testquellen: src/trice.c, _test/testdata/triceCheck.c und zwei Alias-triceConfig.h
+ - Beispiele: DemoData, F030, G0B1 und L432 Build-/Konfigurationsdateien
+ - Testinfrastruktur: neue gemeinsame Worker und Wrapper für Schritte 09b/09c, 10, 11 und 12
+ - Workflow: _trice_id_workflow.sh, _trice_test_state.sh sowie vier Root-Workflow-Skripte
+ - Generierte Hilfe: docs/ref/trice-help-all.txt
+
+ Spezifikationen und Verification-PoCs wurden nicht verändert.
+
+## 3. Wiederverwendete Insert-Logik
+
+ Insert und Bind verwenden dieselben:
+
+ - Source-, Alias-, TIL-, LI- und ID-Einstellungen,
+ - Source-Suche und Parsergrundlage,
+ - ID-Vergabe und Listenverwaltung,
+ - PC-/Compiler-Testworker,
+ - Zustands- und Fehlerbehandlung.
+
+ Es wurde keine zweite unabhängige Trice-Parser- oder ID-Logik eingeführt.
+
+## 4. Target-Makrointegration
+
+ - Expansion-Time-Dispatch in src/trice.c funktioniert nun auch bei textueller Einbindung.
+ - Alias-/salias-Makros verwenden den bestehenden Insert-/Bind-Routingpfad.
+ - L432-Logging wurde aus Präprozessormakros in normale direkte Trice-Aufrufstellen verschoben.
+ - DemoData unterstützt TRICE_OFF=0/1 und den Bind-Include-Pfad auch unter CMake/MSVC.
+ - GCC, Clang, G++, Clang++, ARM-GCC und MSVC wurden erfolgreich durchlaufen.
+
+## 5. CLI
+
+ - trice b und trice bind sind in der normalen CLI registriert.
+ - -h und --help funktionieren für beide Schreibweisen.
+ - Gemeinsame Insert-Optionen bleiben verfügbar.
+ - Bind-spezifisch: -bindDir, Default ./build/triceIDs.
+ - Kein öffentliches trice remigrate-Subkommando: Das von der Testspezifikation geforderte Re-Migrationsskript verwendet einen internen, nicht öffentlichen Helper.
+
+## 6. Neue Tests
+
+ Ergänzt wurden insbesondere:
+
+ - vier Bind-Hilfevarianten,
+ - kommentierte Fake-Trice-Aufrufe,
+ - Migration, Re-Migration und wiederholte Re-Migration,
+ - TIL-/LI-Identität,
+ - Bind-Idempotenz,
+ - parallele Verarbeitung,
+ - fehlende, beschädigte oder mehrdeutig besessene Sidecars,
+ - Rollback bei Schreib-/Löschfehlern,
+ - Restore bei Erfolg, Fehler, SIGINT und SIGTERM,
+ - unveränderte Verification-PoCs unter Windows, GCC, Clang und C++,
+ - echter Generator-PoC inklusive Binary und Log-Decodierung,
+ - identische PC-, Clang- und GCC-Matrizen für Insert und Bind,
+ - einmalige TRICE_OFF-Kontrollmatrix.
+
+## 7. Testergebnisse
+
+ - Baseline PC quick: PASS
+ - rtk go test ./internal/id/... ./internal/args: 331 Tests in 3 Paketen, PASS
+ - Bind-Schritt 09b: PASS
+ - Workflow-/Migrationstest 09c: PASS
+ - PC Insert und Bind: PASS
+ - Clang Insert und Bind: PASS
+ - GCC/CMake Insert, TRICE_OFF und Bind: PASS
+ - Zustandswiederherstellung: überall exakt
+ - git diff --check: PASS
+ - scripts/testAll.sh quick: alle fachlich relevanten Schritte PASS
+
+ Der Gesamtrückgabecode von testAll.sh quick war ausschließlich wegen der auf deinen Hinweis auszuklammernden Markdown-, Link-, ShellCheck- und GoReleaser-Prüfungen ungleich null. Laufzeit: 2850 Sekunden.
+
+ full wurde wegen des Zeitlimits nicht zusätzlich ausgeführt.
+
+## 8. Verbleibende MVP-Lücken
+
+ Keine erkannte Implementierungslücke gegenüber der Test-MVP-Spezifikation. Nicht ausgeführt wurde lediglich der zeitintensive full-Testumfang.
+
+## 9. Nicht implementierte MVP2-Punkte
+
+ Nicht implementiert wurden:
+
+ - trice bind -check,
+ - allgemeine Wrappermakros,
+ - mehrere Trice-Stellen pro physischer Zeile,
+ - maximale Sidecar-Zeilenlänge,
+ - aktive Präprozessorkonfiguration,
+ - ELF-/Link-Map-Post-Link-Inventur,
+ - vorbereitete statische Libraries,
+ - tiefere Insert-Konsistenzprüfung gebundener Dateien,
+ - generierte Referenzliste der User-Level-Makros,
+ - zusätzliche neutrale Parser-Marker.
+
+## 10. Abweichungen und Breaking Changes
+
+ - Keine beabsichtigten Breaking Changes.
+ - Keine fachliche Änderung an den Spezifikationen.
+ - Verification-PoCs blieben byteweise unangetastet.
+ - Der Windows-Testwrapper normalisiert ausschließlich beim Vergleich CRLF-Ausgaben.
+ - Durch Tests veränderte demoTIL.json und demoLI.json wurden auf ihren vorherigen Stand zurückgesetzt.
+ - build/triceIDs ist nach dem Test nicht vorhanden.
+ - Kein Commit und kein Push.
diff --git a/docs/TriceBind/Trice_bind_60_MVP2_Implementation_Strategies.md b/docs/TriceBind/Trice_bind_60_MVP2_Implementation_Strategies.md
new file mode 100644
index 000000000..8421ce9f6
--- /dev/null
+++ b/docs/TriceBind/Trice_bind_60_MVP2_Implementation_Strategies.md
@@ -0,0 +1,993 @@
+# Entscheidungsgrundlage: Implementierungsstrategien für zentrale `trice bind`-MVP2-Fähigkeiten
+
+**Status:** Technisches Entscheidungspapier, nicht normativ
+**Stand:** 8. August 2026
+**Gegenstand:** Mehrere Trice-Stellen pro physischer Sourcezeile und Trice-Stellen in Präprozessormakros
+**Nicht behandelt:** `trice bind -check`, Post-Link-Inventur und allgemeine Analyse-/Berichtsoptionen
+
+## 1. Kurzantwort
+
+Ja. Die beiden zentralen sourcebezogenen MVP2-Fähigkeiten erscheinen unter
+klar begrenzten Regeln implementierbar:
+
+1. mehrere direkte Trice-Aufrufe auf derselben physischen Sourcezeile;
+2. Trice-Aufrufe in gewöhnlichen Makrodefinitionen, einschließlich eines
+ Makros mit mehreren Trice-Stellen wie einem `switch`-Logger.
+
+Das vorhandene PoC unter
+[`../../experiments/TriceBind/50_MVP2_Counter_and_Macro_Definitions`](../../experiments/TriceBind/50_MVP2_Counter_and_Macro_Definitions/README.md)
+belegt die grundsätzliche Target-Machbarkeit. Es zeigt außerdem zwei wichtige
+Grenzen:
+
+- Eine reine Zuordnung über Datei und Zeilennummer kann mehrere Stellen auf
+ derselben Zeile nicht unterscheiden.
+- `__COUNTER__` kann die Stellen unterscheiden, aber seine Zahlenfolge hängt
+ vom vollständigen Präprozessorlauf ab. Eine fremde `__COUNTER__`-Expansion
+ verschiebt alle nachfolgenden Werte.
+
+Die Entscheidung lautet deshalb nicht nur »`__COUNTER__` verwenden oder
+nicht«, sondern vor allem:
+
+> Wie wird eine lokale Trice-Stelle unabhängig von irrelevanten
+> Präprozessoraktivitäten reproduzierbar derselben stabilen ID zugeordnet?
+
+Dieses Papier beschreibt drei Varianten:
+
+1. **Zeilenlokaler Counter-Rebase:** Der Counter wird unmittelbar vor einer
+ erweiterten Stelle lokal neu referenziert.
+2. **Exakter Target-Präprozessorlauf:** `trice bind` beobachtet die Werte mit
+ derselben Toolchain und Konfiguration wie der spätere Build.
+3. **Generierter Compiler-Input mit expliziten Ordinalen:** Eine erzeugte
+ Shadow-Source enthält eindeutige Stellennummern und benötigt keinen Counter.
+
+Für das gewünschte einfache Bedienmodell ist Variante 1 die interessanteste
+Default-Kandidatin. Sie benötigt jedoch einen weiteren produktionsnahen PoC.
+Variante 2 eignet sich als optionale Absicherung in vollständig beschriebenen
+Buildumgebungen. Variante 3 ist die deterministischste Counter-unabhängige
+Fallback-Technik, verlangt aber eine Integration in das Buildsystem.
+
+## 2. Geltungsbereich und Abgrenzung
+
+Die bestehende
+[`Trice_bind_10_MVP_Spezifikation.md`](./Trice_bind_10_MVP_Spezifikation.md)
+führt die folgenden Punkte getrennt als MVP2-Ideen:
+
+- begrenzte Wrappermakros;
+- mehrere Trice-Stellen auf einer Zeile;
+- aktive Präprozessorkonfiguration;
+- Post-Link-Inventur;
+- vorbereitete statische Libraries;
+- zusätzliche Hygiene- und Konsistenzprüfungen.
+
+Die drei hier untersuchten Varianten lösen primär die ersten beiden Punkte.
+Sie lösen nicht automatisch alle übrigen MVP2-Themen. Insbesondere sind
+vorbereitete statische Libraries und Post-Link-Inventuren eigenständige
+Architekturaufgaben.
+
+Mit »Makrodefinition« ist in diesem Papier beispielsweise gemeint:
+
+```c
+#define LOG_ERROR(value) \
+ do { \
+ switch (value) { \
+ case 7: \
+ trice("error=%d", 7); \
+ break; \
+ case 8: \
+ trice("error=%d", 8); \
+ break; \
+ default: \
+ break; \
+ } \
+ } while (0)
+```
+
+Nicht gemeint ist zunächst die uneingeschränkte Unterstützung beliebiger
+Präprozessorkonstruktionen. Token-Pasting, Stringification, dynamisch erzeugte
+Formatstrings, rekursive oder verschachtelte Wrapper und indirekt umdefinierte
+Loggingmakros bleiben gesondert zu bewerten.
+
+## 3. Begriffe ohne Compiler-Vorkenntnisse
+
+### 3.1 Präprozessor
+
+Vor der eigentlichen C- oder C++-Compilation läuft der Präprozessor. Er führt
+unter anderem `#include`, `#define`, `#if` und Makroexpansionen aus. Der Compiler
+sieht anschließend nicht mehr exakt den geschriebenen Usercode, sondern das
+Ergebnis dieser Vorverarbeitung.
+
+### 3.2 Physische Zeile und `__LINE__`
+
+`__LINE__` wird vom Präprozessor durch die aktuelle Zeilennummer ersetzt. Zwei
+Trice-Aufrufe auf derselben Zeile erhalten dieselbe Nummer:
+
+```c
+trice("first"); trice("second");
+```
+
+Eine Sidecar-Zuordnung nur über Datei und Zeile sieht daher zweimal denselben
+Schlüssel. Sie kann nicht entscheiden, welche ID zum ersten und welche zum
+zweiten Aufruf gehört.
+
+### 3.3 `__COUNTER__`
+
+`__COUNTER__` ist ein vom Präprozessor bereitgestellter Zähler. Bei jeder
+Expansion liefert er die nächste Ganzzahl:
+
+```c
+enum { a = __COUNTER__ }; // commonly 0
+enum { b = __COUNTER__ }; // commonly 1
+```
+
+Damit können zwei Makroexpansionen auf derselben Zeile unterschieden werden.
+Der Zähler gehört jedoch der gesamten Translation Unit. Dazu zählen die
+Hauptdatei und alle eingebundenen Header. Auch fremde Makros können ihn
+verbrauchen.
+
+### 3.4 Translation Unit
+
+Eine Translation Unit ist vereinfacht die C- oder C++-Datei einschließlich
+aller durch `#include` eingefügten Header nach der Präprozessorverarbeitung.
+Jeder Compile-Aufruf verarbeitet eine eigene Translation Unit und besitzt
+seinen eigenen Counterverlauf.
+
+### 3.5 Sidecar
+
+Ein Bind-Sidecar ist eine von `trice bind` erzeugte Hilfsdatei. Sie ordnet einer
+Sourceposition eine stabile Trice-ID zu. Der User schreibt weiterhin keine
+numerische ID in den Trice-Aufruf.
+
+### 3.6 Stabile Definitions-ID und Aufrufstellendeskriptor
+
+Bei einem Wrappermakro müssen zwei Identitäten unterschieden werden:
+
+- Die **Definitionsstelle** ist die Trice-Stelle im `#define`. Sie besitzt die
+ stabile fachliche ID und soll in `til.json` und `li.json` deterministisch
+ repräsentiert werden.
+- Die **Aufrufstelle** ist jede Expansion des Wrappermakros. Für sie benötigt
+ der Target-Präprozessor einen Deskriptor, damit er die stabile Definitions-ID
+ in die konkrete Expansion einsetzen kann.
+
+Ein Wrapper mit zwei inneren Trices besitzt zwei Definitions-IDs. Jeder
+Wrapperaufruf erzeugt zwei Aufrufstellendeskriptoren, die diese beiden IDs
+wiederverwenden.
+
+## 4. Welche Konstruktionen benötigen tatsächlich einen Counter?
+
+Nicht jede Trice-Stelle in einem Makro benötigt zwingend `__COUNTER__`.
+
+| Sourcekonstruktion | Zusätzlicher Auftretensschlüssel nötig? |
+|---|---:|
+| Normale Trice-Stelle auf eigener Zeile | Nein |
+| Mehrere direkte Trices auf einer Zeile | Ja |
+| Wrapper mit genau einem Trice, maximal ein Wrapperaufruf pro Zeile | Nicht zwingend |
+| Wrapper mit mehreren inneren Trices | Ja |
+| Mehrere Wrapperaufrufe auf derselben Zeile | Ja |
+| Verschachtelte Wrapper | Nicht Gegenstand der ersten Ausbaustufe |
+
+Für den User sollte diese Unterscheidung unsichtbar bleiben. `trice bind`
+klassifiziert die Stellen intern und verwendet nur dort einen erweiterten
+Mechanismus, wo Datei und Zeile nicht eindeutig sind.
+
+## 5. Verfügbarkeit von `__COUNTER__`
+
+### 5.1 Aktueller Stand der großen Compilerfamilien
+
+Die Annahme einer breiten Verfügbarkeit ist für die dominierenden
+Compilerfamilien plausibel:
+
+- Die [GCC-Präprozessordokumentation](https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html)
+ dokumentiert `__COUNTER__` als GNU-Erweiterung mit fortlaufenden Werten ab
+ null. Sie warnt ausdrücklich vor Wechselwirkungen mit vorkompilierten
+ Headern.
+- Die [Clang-Dokumentation](https://clang.llvm.org/docs/LanguageExtensions.html)
+ dokumentiert ebenfalls den bei null beginnenden, bei jeder Expansion
+ inkrementierten Zähler. Sie führt `__COUNTER__` inzwischen als C2y-Feature
+ und in älteren C-Modi sowie C++ als Erweiterung.
+- Die [MSVC-Dokumentation](https://learn.microsoft.com/en-us/cpp/preprocessor/predefined-macros?view=msvc-170)
+ bezeichnet `__COUNTER__` als immer definiert und beschreibt, dass auch
+ Expansionen in eingebundenen Headern den Zustand verändern.
+- Das WG14-Papier
+ [N3457](https://open-std.org/jtc1/sc22/wg14/www/docs/n3457.htm)
+ beschreibt die Standardisierung der bereits verbreiteten Erweiterung für
+ eine kommende C-Sprachversion.
+
+Viele Embedded-Toolchains basieren auf GCC oder Clang und dürften deren
+Verhalten übernehmen. Das ist jedoch eine begründete Erwartung, keine Garantie
+für jede konkrete Hersteller- und Versionskombination. Proprietäre Compiler,
+alte Long-Term-Support-Versionen und besondere Strict-Mode-Optionen müssen mit
+dem tatsächlich verwendeten Tool geprüft werden.
+
+### 5.2 Warum keine feste Compilerliste verwendet werden sollte
+
+Eine Liste wie »GCC ab Version X« ist weniger zuverlässig als ein direkter
+Featuretest. Projekte verwenden Cross-Compiler, Hersteller-Forks und
+unterschiedliche Sprachmodi. Außerdem kann ein Compiler eine Erweiterung zwar
+kennen, sie unter den wirklichen Warnungsoptionen des Projekts aber ablehnen.
+
+Die technische Prüfung ist klein:
+
+```c
+#if !defined(__COUNTER__)
+#error "Target preprocessor does not provide __COUNTER__."
+#endif
+
+enum { triceCounterProbe0 = __COUNTER__ };
+enum { triceCounterProbe1 = __COUNTER__ };
+```
+
+Ein vollständiger Probe-Compile sollte zusätzlich sicherstellen, dass der
+zweite Wert genau um eins größer ist und die im Projekt üblichen
+Warnings-as-Errors-Optionen akzeptiert werden.
+
+### 5.3 Automatische Prüfung ohne zusätzliche Useroption
+
+Das gewünschte Bedienmodell kann erhalten bleiben:
+
+```sh
+trice bind
+Build
+```
+
+Der Ablauf sollte sein:
+
+1. `trice bind` scannt zuerst die Quellen.
+2. Gibt es keine Counter-pflichtige Stelle, erfolgt keinerlei Compilerprobe.
+3. Ist die Target-Toolchain eindeutig aus einer vorhandenen Buildbeschreibung
+ bekannt, kann `trice bind` den Featuretest sofort ausführen.
+4. Ist die Target-Toolchain nicht zuverlässig bekannt, darf nicht ersatzweise
+ irgendein Host-`cc` als Beweis verwendet werden.
+5. Der erzeugte Sidecar enthält dann ausschließlich für betroffene Dateien
+ eine Target-seitige Schutzprüfung.
+
+Beispiel für einen Sidecar-Guard:
+
+```c
+#if !defined(__COUNTER__)
+#error "trice bind: advanced source sites require __COUNTER__; use trice insert/clean or rewrite the source"
+#endif
+```
+
+Damit wird eine nicht unterstützte Toolchain spätestens beim Target-Build klar
+abgewiesen. Normale Bind-Projekte ohne die erweiterten Konstruktionen bleiben
+vollständig unbeeinflusst.
+
+### 5.4 Verfügbarkeit und Reproduzierbarkeit sind verschiedene Prüfungen
+
+Die obige Abfrage beantwortet nur:
+
+> Kennt der Präprozessor `__COUNTER__`?
+
+Sie beantwortet nicht:
+
+> Erzeugt er beim Generatorlauf und beim späteren Build dieselbe Zahlenfolge an
+> denselben Trice-Stellen?
+
+Eine produktive Implementierung muss beide Fragen lösen. Andernfalls kann ein
+Build erfolgreich sein und trotzdem eine falsche ID verwenden. Das wäre
+gefährlicher als ein sichtbarer Compilerfehler.
+
+## 6. Gemeinsame fachliche Anforderungen an alle Varianten
+
+Unabhängig von der gewählten Technik gelten folgende Anforderungen:
+
+1. Die stabile ID wird weiterhin mit der bestehenden Insert-/Bind-ID-Logik
+ vergeben. Der Counter selbst ist niemals die Trice-ID.
+2. Mehrere Stellen derselben Zeile werden nach ihrer textuellen Reihenfolge
+ unterschieden.
+3. Bei Wrappern gehört die stabile ID zur Trice-Definitionsstelle, nicht zur
+ zufälligen Counterzahl und nicht zu einer einzelnen Wrapperexpansion.
+4. Alle Aufrufstellendeskriptoren eines Wrappers verweisen reproduzierbar auf
+ dieselbe Definitions-ID.
+5. `til.json`, `li.json` und das Drahtformat bleiben unverändert.
+6. Ein fehlender oder widersprüchlicher Deskriptor muss einen Compiler- oder
+ Bind-Fehler auslösen und darf nicht still auf eine andere ID fallen.
+7. Bei einem fatalen Bind-Fehler werden weder teilweise Sidecars noch teilweise
+ aktualisierte Listen hinterlassen.
+8. `trice insert` und `trice clean` bleiben der universelle Fallback.
+9. Der User muss keine Counterwerte sehen, pflegen oder versionieren.
+10. Die erweiterten Regeln werden zunächst auf klar analysierbare Makros
+ begrenzt.
+
+## 7. Variante 1: Zeilenlokaler Counter-Rebase
+
+### 7.1 Idee für Compiler-Laien
+
+Der globale Counter ist mit einem Kilometerzähler vergleichbar. Sein absoluter
+Stand ist schwer vorherzusagen, weil auch fremder Code Kilometer hinzufügen
+kann. Unmittelbar vor der interessanten Sourcezeile wird deshalb ein lokaler
+Startwert notiert. Die Trice-Stellen verwenden nur noch die Differenz zu diesem
+Startwert.
+
+Wenn der Startwert 87 ist, liefern die drei unmittelbar folgenden Trice-
+Expansionen beispielsweise 88, 89 und 90. Lokal entsprechen sie damit den
+Ordinalen 0, 1 und 2, unabhängig davon, wie der Counter vor dieser Stelle auf
+87 gekommen ist.
+
+### 7.2 Möglicher Source- und Helperablauf
+
+`trice bind` könnte um eine erweiterte Zeile zwei generierte
+Reaktivierungs-Includes platzieren:
+
+```c
+#include "trice_counter_begin_KABC_L100.h"
+trice("first"); trice("second"); trice("third");
+#include "trice_counter_end_KABC_L100.h"
+```
+
+Der Begin-Helper könnte konzeptionell enthalten:
+
+```c
+#if !defined(__COUNTER__)
+#error "trice bind: this source line requires __COUNTER__"
+#endif
+
+enum { TRICE_BIND_COUNTER_BASE_KABC_L100 = __COUNTER__ };
+static const unsigned triceBindIDsKABCL100[] = { 4101u, 4102u, 4103u };
+
+#define TRICE_BIND_ADVANCED_ID_KABC_L100() \
+ triceBindIDsKABCL100[__COUNTER__ - TRICE_BIND_COUNTER_BASE_KABC_L100 - 1]
+```
+
+Das ist ein Designentwurf, noch keine fertige Target-API. Insbesondere muss die
+Einbindung in `TRICE_BIND_AUTO`, die Trice-Makrofamilien und den anschließenden
+Reset des Bind-Routings sauber verifiziert werden.
+
+### 7.3 Implementierung in `trice bind`
+
+Der Generator müsste:
+
+1. alle direkten Trice-Stellen weiterhin mit dem gemeinsamen Parser erfassen;
+2. pro physischer Zeile die Spaltenpositionen und daraus lokale Ordinale
+ bestimmen;
+3. begrenzte Wrapperdefinitionen analysieren und deren innere Trice-Stellen als
+ stabile Definitionen registrieren;
+4. Wrapperaufrufe erkennen und pro Aufruf eine geordnete ID-Tabelle erzeugen;
+5. unmittelbar vor der erweiterten Zeile einen lokalen Counter-Start etablieren;
+6. nach der Zeile wieder auf den normalen `(FileKey, Line)`-Dispatch
+ zurückschalten;
+7. die hinzugefügten Includes bei Re-Migration eindeutig erkennen und entfernen;
+8. Source-, Sidecar- und Listenänderungen weiterhin transaktional schreiben.
+
+Der Counter wählt dabei nur einen Tabelleneintrag aus. Die ID-Tabelle stammt
+aus der bestehenden stabilen ID-Vergabe.
+
+### 7.4 Anwendungssicht
+
+Für den Anwender bleibt der Ablauf idealerweise unverändert:
+
+```sh
+trice bind
+cmake --build build
+```
+
+Die Originalquelle bleibt ID-frei. Sie erhält jedoch gegebenenfalls zusätzliche
+generierte Include-Zeilen um erweiterte Stellen. Diese Includes dürfen nicht
+manuell verschoben werden.
+
+Fehlt `__COUNTER__`, entsteht entweder schon beim Bind-Lauf oder spätestens beim
+Target-Build eine konkrete Meldung mit folgenden Alternativen:
+
+- `trice insert`/`trice clean` verwenden;
+- direkte Trice-Aufrufe auf getrennte Zeilen verteilen;
+- einen komplexen Wrapper in eine `static inline`-Funktion umwandeln;
+- einen Wrapper auf genau eine innere Trice-Stelle reduzieren.
+
+### 7.5 Vorteile
+
+- Sehr einfacher Userworkflow ohne neue Pflichtoption.
+- Der normale Build kompiliert weiterhin die Originalquelle.
+- Keine vollständige Target-Präprozessoranalyse durch das Go-Tool nötig.
+- Fremde Counterverbräuche vor dem lokalen Rebase sind bedeutungslos.
+- Sourcebasierte stabile IDs und bestehende Listenformate bleiben erhalten.
+- Der Mechanismus kann nur für tatsächlich erweiterte Stellen aktiviert werden.
+- Ein fehlender Counter lässt sich lokal und verständlich diagnostizieren.
+
+### 7.6 Nachteile und Risiken
+
+- Zusätzliche Begin-/End-Includes verändern den sichtbaren Sourcekontext.
+- Ein fremder Counterverbrauch zwischen lokalem Start und Trice-Expansion kann
+ die lokale Zuordnung weiterhin verschieben.
+- Bei Wrappern muss deshalb ausgeschlossen oder verstanden werden, dass andere
+ Makros in der Replacement-Liste ebenfalls `__COUNTER__` verwenden.
+- Ein Include unmittelbar vor einer Anweisung ist nicht in jedem C-Kontext
+ problemlos. Beispiele sind `case`-Labels, Initializer und ungewöhnliche
+ Makro-/Statementkombinationen.
+- Die ID-Tabelle führt eine C-Ausdrucksebene in die bisher tokenbasierte
+ Deskriptorwahl ein. Der Compiler soll sie wegoptimieren, dies muss aber für
+ Embedded-Builds bezüglich Flash, RAM und Laufzeit nachgewiesen werden.
+- `TRICE_BIND_REPLACE` für explizite Null-Platzhalter ist schwieriger als der
+ reine ID-freie `TRICE_BIND_AUTO`-Fall, weil der Verarbeitungsmodus bisher
+ bereits im Präprozessor ausgewählt wird.
+- Debugzeilen und `li.json` müssen die durch zusätzliche Includes verschobenen
+ physischen Zeilen korrekt behandeln.
+
+### 7.7 Sinnvolle erste Begrenzung
+
+Eine risikoarme erste Ausbaustufe sollte nur zulassen:
+
+- ID-freie Trice-Aufrufe;
+- mehrere direkte Trices in einer normalen Statementzeile;
+- begrenzte Wrapper mit statischen Formatstrings;
+- keine verschachtelten Wrapper;
+- kein Token-Pasting und keine Stringification;
+- keine weitere `__COUNTER__`-Expansion im erweiterten Segment;
+- keine Null-Platzhalter im erweiterten Segment, bis der Replace-Pfad separat
+ verifiziert ist.
+
+### 7.8 Bewertung
+
+Diese Variante bietet das beste Verhältnis aus einfacher Anwendung und
+begrenzter Buildkopplung. Sie ist die bevorzugte Default-Kandidatin, aber der
+zeilenlokale Rebase ist durch das vorhandene PoC noch nicht bewiesen. Vor einer
+Integration ist ein zusätzlicher PoC mit realen Includes, `case`-Kontexten,
+Headern, C, C++ und Optimierungsprüfung erforderlich.
+
+## 8. Variante 2: Exakter Lauf des Target-Präprozessors
+
+### 8.1 Idee für Compiler-Laien
+
+Diese Variante ist mit einer Generalprobe vergleichbar. `trice bind` lässt
+zuerst genau den Präprozessor arbeiten, den anschließend auch der Build nutzt.
+Es beobachtet dabei die tatsächlich entstehenden Trice-Aufrufstellen und
+Counterwerte. Danach schreibt es Sidecars für genau diese beobachtete
+Konfiguration.
+
+Die Generalprobe ist nur dann aussagekräftig, wenn Bühne, Darsteller und
+Reihenfolge beim eigentlichen Auftritt identisch bleiben. Übersetzt bedeutet
+das: Compiler, Optionen, Defines, Includepfade, Forced Includes, PCH und
+Headerinhalte müssen übereinstimmen.
+
+### 8.2 Ermittlung des Target-Compile-Kommandos
+
+Mögliche Quellen sind:
+
+- `compile_commands.json`;
+- eine bestehende CMake-File-API-Antwort;
+- explizite, bereits projektweit verwendete `CC`, `CXX` und Flags;
+- ein Buildsystemadapter für Make, Ninja oder eine IDE;
+- ein Compiler-Launcher, der den realen Aufruf an `trice bind` meldet.
+
+Das zufällige Auffinden eines Host-`cc` darf bei einem Cross-Compile-Projekt
+nicht als Targetnachweis gelten. Ein Host-Clang sagt nichts darüber aus, ob der
+spätere Embedded-Compiler dieselben Makros und Includes sieht.
+
+### 8.3 Implementierungsablauf
+
+Ein möglicher Ablauf ist:
+
+1. Die normale Sourceanalyse identifiziert direkte und begrenzte
+ makrodefinierte Trice-Stellen.
+2. `trice bind` ermittelt das exakte Compile-Kommando jeder betroffenen
+ Translation Unit.
+3. Ein instrumentierter Präprozessorlauf ersetzt die Trice-Makros temporär
+ durch auswertbare Markertokens.
+4. Die Marker enthalten mindestens File Key, Aufrufzeile, beobachteten Counter
+ und eine generatorseitig bekannte Definitionsidentität.
+5. `trice bind` ordnet die Marker den stabilen IDs zu und schreibt Sidecars mit
+ den beobachteten Counterwerten.
+6. Sidecar und Buildbeschreibung erhalten einen Fingerprint der verwendeten
+ Konfiguration.
+7. Der normale Compile-Aufruf wiederholt denselben Präprozessorverlauf und
+ verwendet die erzeugten Deskriptoren.
+
+### 8.4 Wrappermakros
+
+Der Präprozessor zeigt zuverlässig, welche Wrapperexpansionen in der aktiven
+Konfiguration entstehen. Er liefert aber nicht automatisch die gewünschte
+fachliche Identität der ursprünglichen Trice-Definition im `#define`.
+
+Deshalb bleibt zusätzlich eine begrenzte Sourceanalyse notwendig:
+
+- Makrodefinition erfassen;
+- innere Trice-Stellen nach Definitionsreihenfolge nummerieren;
+- jeder inneren Stelle eine stabile ID geben;
+- Präprozessormarker einer Definition und einer konkreten Expansion zuordnen.
+
+Eine vollständig allgemeine Rekonstruktion beliebiger Makroherkunft aus
+normalem `-E`-Text ist nicht portabel. Compiler-spezifische APIs wie detaillierte
+Clang-Preprocessing-Records wären leistungsfähiger, würden `trice bind` aber an
+eine Compilerfamilie koppeln.
+
+### 8.5 Mehrere Buildkonfigurationen
+
+Ein Projekt kann dieselbe Datei mit unterschiedlichen Defines mehrfach
+kompilieren. Dann können aktive Zweige und Counterfolgen verschieden sein:
+
+```c
+#if FEATURE_A
+trice("A");
+#endif
+```
+
+Die Implementierung benötigt hierfür entweder:
+
+- einen Sidecar pro eindeutiger Compile-Konfiguration;
+- einen gemeinsamen Sidecar mit konfliktfrei vereinigten Deskriptoren;
+- oder die verbindliche Festlegung einer kanonischen Bind-Konfiguration.
+
+Konfigurationsspezifische Sidecars erhöhen die Komplexität von Outputpfaden,
+Buildabhängigkeiten und Listenkonsistenz erheblich.
+
+### 8.6 Anwendungssicht
+
+In einem sauber vorbereiteten CMake-/Ninja-Projekt kann der Userworkflow
+weiterhin einfach aussehen:
+
+```sh
+cmake -S . -B build -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
+trice bind
+cmake --build build
+```
+
+Ohne brauchbare Buildbeschreibung müsste `trice bind` erklären, welche
+Information fehlt. Eine stillschweigende Host-Compilerannahme wäre nicht
+zulässig.
+
+Fehlt `__COUNTER__`, erkennt der Probe-Compile dies vor regulären Ausgaben und
+`trice bind` kann transaktional abbrechen.
+
+### 8.7 Vorteile
+
+- Verwendet die reale Target-Toolchain statt Annahmen über Compilerfamilien.
+- Berücksichtigt fremde Counterexpansionen in Includes und Makros.
+- Erkennt aktive und inaktive Präprozessorzweige der konkreten Konfiguration.
+- Liefert bei fehlendem `__COUNTER__` eine frühe Bind-Diagnose.
+- Kann komplexere reale Makroexpansionen beobachten als ein reiner Sourceparser.
+- Passt gut in vollständig beschriebene, reproduzierbare CI-Builds.
+
+### 8.8 Nachteile und Risiken
+
+- Starke Kopplung von `trice bind` an Compiler, Flags und Buildsystem.
+- Cross-Compiler müssen beim Bind-Lauf installiert und ausführbar sein.
+- `compile_commands.json` existiert häufig erst nach einer Konfiguration und
+ kann veraltet sein.
+- Jede relevante Buildvariante kann einen eigenen Präprozessorlauf benötigen.
+- Änderungen in eingebundenen Headern zwischen Bind und Build können die
+ Counterfolge verschieben.
+- Ein einfacher Fingerprint des Kommandos erkennt keine nachträglich geänderten
+ Headerinhalte. Vollständige Dependency-Hashes wären aufwendig.
+- Eine verschobene Counterfolge muss sicher zu einem Fehler führen. Sie darf
+ nicht zufällig einen formal vorhandenen, aber fachlich falschen Deskriptor
+ treffen.
+- Normale Präprozessorausgabe enthält nicht portabel alle Informationen über
+ die Herkunft verschachtelter Makroexpansionen.
+- Der Ansatz nähert sich der in der Spezifikation separat genannten aktiven
+ Präprozessorkonfigurationsanalyse und erweitert damit den fachlichen Umfang.
+
+### 8.9 Bewertung
+
+Variante 2 ist besonders attraktiv als optionale Verifikationsstufe in CI oder
+in Projekten mit zuverlässiger Compilation Database. Als einziges normatives
+Standardverfahren würde sie den heutigen einfachen, sourcebasierten Bind-
+Workflow zu stark an individuelle Buildsysteme koppeln.
+
+## 9. Variante 3: Generierter Compiler-Input mit expliziten Ordinalen
+
+### 9.1 Idee für Compiler-Laien
+
+`trice bind` erstellt eine nummerierte Arbeitskopie der Source. Die vom User
+geschriebene Datei bleibt unverändert, aber der Compiler kompiliert die
+Arbeitskopie. Darin wird jede Trice-Stelle explizit nummeriert:
+
+Userquelle:
+
+```c
+trice("first"); trice("second");
+```
+
+Generierter Compiler-Input, konzeptionell:
+
+```c
+TRICE_BIND_AT(0, "first"); TRICE_BIND_AT(1, "second");
+```
+
+Da die Nummern bereits im Tokenstrom stehen, sind weder `__LINE__` noch
+`__COUNTER__` zur Unterscheidung erforderlich.
+
+### 9.2 Verzeichnis- und Buildmodell
+
+Ein möglicher Output ist:
+
+```text
+build/triceBindSource/
+ app/main.c
+ module/logging.h
+ triceBindSources.json
+```
+
+Das Manifest ordnet Originaldatei, generierte Datei, Hash und Sidecar einander
+zu. Das Buildsystem kompiliert die generierten `.c`-/`.cpp`-Dateien und nimmt
+den Shadow-Tree in die Includepfade auf.
+
+### 9.3 Transformation direkter Stellen
+
+Der Generator verwendet denselben Sourceparser und dieselbe ID-Logik wie
+`trice insert`, schreibt aber nicht in die Userquelle. Stattdessen erzeugt er
+eine Kopie mit internen Bind-Markern. Die Marker können einen File Key und ein
+lokales Ordinal tragen:
+
+```c
+TRICE_BIND_AT(K73A915E9C4021B8, 0, trice, "first");
+TRICE_BIND_AT(K73A915E9C4021B8, 1, trice, "second");
+```
+
+Der Target-Header setzt daraus die stabile ID ein. Es gibt keinen globalen
+veränderlichen Präprozessorzustand.
+
+### 9.4 Transformation von Makrodefinitionen
+
+Auch innere Trice-Stellen einer begrenzten Makrodefinition erhalten explizite
+Definitionsordinale:
+
+```c
+#define LOG_ERROR(value) \
+ do { \
+ switch (value) { \
+ case 0: \
+ break; \
+ case 7: \
+ trice("cannot open file\n"); \
+ break; \
+ default: \
+ trice("error=%d", 8); \
+ break; \
+ } \
+ } while (0)
+```
+
+Die IDs gehören direkt zu den Definitionen 0 und 1. Jede Makroexpansion trägt
+diese expliziten Tokens weiter. Ein invocation-spezifischer Counter ist nicht
+nötig.
+
+### 9.5 Diagnose- und Debugabbildung
+
+Damit Compilerfehler weiterhin auf Userdateien zeigen, kann der Shadow-Source
+`#line`-Direktiven verwenden:
+
+```c
+#line 73 "app/main.c"
+TRICE_BIND_AT(0, "first"); TRICE_BIND_AT(1, "second");
+```
+
+Dies verbessert Diagnose und Debugmapping, löst aber nicht automatisch alle
+Unterschiede:
+
+- `__BASE_FILE__` kann weiterhin den Shadow-Pfad nennen.
+- Relative Quote-Includes werden zunächst relativ zur generierten Datei
+ gesucht.
+- Coverage- und Debugwerkzeuge können generierte Pfade anzeigen.
+- Compilerdepfiles und IDE-Indizes müssen den Shadow-Tree kennen.
+
+Der Generator müsste daher die originale Verzeichnisstruktur spiegeln und die
+Includeauflösung sorgfältig erhalten.
+
+### 9.6 Anwendungssicht
+
+Ohne Buildintegration ist der Ablauf nicht vollständig transparent. Ein
+CMake-Projekt könnte ihn jedoch kapseln:
+
+```sh
+trice bind
+cmake --build build
+```
+
+Intern verwendet CMake dann die im Bind-Manifest genannten Shadow-Sourcen.
+Andere Buildsysteme benötigen eigene Adapter oder einen Compiler-Launcher.
+
+Ein Projekt ohne `__COUNTER__` könnte diese Variante automatisch oder nach
+einer klaren Projektkonfiguration nutzen. Für das vom User gewünschte erste
+MVP2 ist aber ebenso zulässig, stattdessen verständlich auf
+`trice insert`/`trice clean` zu verweisen.
+
+### 9.7 Vorteile
+
+- Vollständig deterministische Stellenidentität ohne globalen Counterzustand.
+- Funktioniert prinzipiell auch auf Compilern ohne `__COUNTER__`.
+- Fremde Makros und Header können keine Ordinale verschieben.
+- Mehrere direkte Stellen und mehrere innere Wrapperstellen sind eindeutig.
+- Explizite Null-Platzhalter und unterschiedliche Verarbeitungsmodi lassen sich
+ leichter bereits in der generierten Source normalisieren.
+- Keine zweite Target-Präprozessor-Generalprobe nötig.
+- Fehlerhafte oder fehlende Ordinale können generatorseitig vollständig
+ validiert werden.
+
+### 9.8 Nachteile und Risiken
+
+- Der Compiler verarbeitet nicht mehr die originale Source, sondern ein
+ Buildartefakt.
+- Jedes unterstützte Buildsystem benötigt Integration.
+- Includeauflösung, Debugpfade, Coverage und IDE-Navigation werden komplexer.
+- Shadow-Sourcen müssen atomar erzeugt, bereinigt und gegen veraltete Inputs
+ abgesichert werden.
+- C und C++ besitzen viele syntaktische Sonderfälle; eine Transformation muss
+ Token, Kommentare, Zeilenfortsetzungen und Encoding exakt erhalten.
+- Die Lösung nähert sich stärker einer Source-to-Source-Instrumentierung und
+ damit konzeptionell `trice insert`, obwohl die Userquelle unverändert bleibt.
+- Buildzeiten und erzeugtes Datenvolumen steigen.
+- Der Anspruch »bestehendes Buildsystem unverändert« ist nicht haltbar.
+
+### 9.9 Bewertung
+
+Variante 3 ist technisch am deterministischsten und der überzeugendste
+Counter-unabhängige Fallback. Sie widerspricht aber am stärksten dem Ziel, eine
+beliebige vorhandene Anwendung allein durch `trice bind` und einen Includepfad
+umzustellen. Sie sollte deshalb nicht die erste Default-Implementierung sein.
+
+## 10. Vergleichsmatrix
+
+| Kriterium | 1: lokaler Rebase | 2: Target-Präprozessor | 3: Shadow-Source |
+|---|---|---|---|
+| Normaler Useraufruf bleibt `trice bind` | Sehr gut | Gut bei vorhandener Buildbeschreibung | Nur mit Buildadapter |
+| Originalsource wird kompiliert | Ja | Ja | Nein |
+| Benötigt `__COUNTER__` | Ja | Ja | Nein |
+| Früher Fehler bei fehlendem Counter | Wenn Target bekannt, sonst beim Build | Ja | Nicht erforderlich |
+| Robust gegen Counterverbrauch vor der Stelle | Ja | Ja, sofern Konfiguration identisch | Vollständig |
+| Robust gegen Counterverbrauch innerhalb der Stelle | Nur bei strikten Regeln | Ja, sofern Build identisch | Vollständig |
+| Benötigt Target-Compiler beim Bind-Lauf | Nein | Ja | Nein |
+| Benötigt Buildsystemintegration | Gering | Mittel bis hoch | Hoch |
+| Mehrkonfigurationsaufwand | Gering bis mittel | Hoch | Mittel |
+| Unterstützung komplexerer Wrapper | Begrenzt | Mittel, Herkunft bleibt schwierig | Am besten kontrollierbar |
+| Embedded-Codegrößenrisiko | ID-Tabelle nachweisen | Gering | Gering |
+| Implementierungsaufwand | Hoch | Sehr hoch | Hoch bis sehr hoch |
+| Portabilität | Gut bei Counter-Support | Abhängig von Toolchainintegration | Sprachseitig gut, buildseitig schwächer |
+| Hauptrisiko | Lokaler Counter wird unerwartet verbraucht | Bind und Build laufen auseinander | Shadow- und Originalbuild unterscheiden sich |
+
+## 11. Empfohlene Produktentscheidung
+
+### 11.1 Empfehlung
+
+Für die nächste `trice bind`-Ausbaustufe wird folgende Kombination empfohlen:
+
+1. **Variante 1 als vorgesehener Default**, sobald ein zusätzlicher
+ produktionsnaher Rebase-PoC erfolgreich ist.
+2. **Automatische `__COUNTER__`-Prüfung nur bei Counter-pflichtigen Stellen.**
+3. **Frühe Compilerprobe**, wenn die tatsächliche Target-Toolchain bereits
+ eindeutig bekannt ist.
+4. **Target-seitiger Sidecar-Guard als universeller Rückfall**, wenn sie beim
+ Bind-Lauf nicht bekannt ist.
+5. **Variante 2 optional als Verifikation**, wenn eine zuverlässige
+ `compile_commands.json` oder ein Buildadapter vorhanden ist.
+6. **Variante 3 zunächst dokumentierter Fallback**, nicht Default. Sie kann
+ später für Toolchains ohne Counter oder besonders komplexe Wrapper
+ implementiert werden.
+
+Der User muss damit weiterhin keine neue Option lernen. Er verwendet:
+
+```sh
+trice bind
+```
+
+Nur bei einer tatsächlich Counter-pflichtigen Konstruktion und einer nicht
+geeigneten Target-Toolchain erhält er eine Fehlermeldung.
+
+### 11.2 Vorgeschlagener erster Funktionsumfang
+
+Die erste Umsetzung sollte unterstützen:
+
+- mehrere ID-freie direkte Trice-Aufrufe auf einer normalen Sourcezeile;
+- begrenzte Wrappermakros mit statischen Formatstrings;
+- ein oder mehrere direkte Trices innerhalb eines solchen Wrappers;
+- stabile ID pro innerer Makrodefinitionsstelle;
+- Wiederverwendung dieser ID an allen Wrapperaufrufstellen;
+- C und C++;
+- Source- und Headerdateien;
+- automatische Capability-Diagnose;
+- unveränderte `til.json`-, `li.json`- und Drahtformate.
+
+Zunächst zurückgewiesen werden sollten:
+
+- Token-Pasting im Wrapper;
+- Stringification zur Formatstringerzeugung;
+- dynamisch zusammengesetzte Formatstrings;
+- rekursive oder verschachtelte Wrapper;
+- indirekte Umdefinitionen des Trice-Makros;
+- unbekannte zusätzliche `__COUNTER__`-Verbräuche im lokalen Segment;
+- explizite Null-Platzhalter in Counter-selektierten Stellen, bis der
+ Replace-Pfad separat bewiesen ist;
+- mehrere Buildkonfigurationen mit widersprüchlicher Wrapperexpansion, solange
+ keine klare Sidecar-Semantik spezifiziert ist.
+
+### 11.3 Kein stiller Fallback
+
+Wenn eine erweiterte Stelle nicht sicher gebunden werden kann, darf
+`trice bind` sie nicht still wie `trice insert` instrumentieren und nicht eine
+beliebige vorhandene ID verwenden. Die Verarbeitung muss mit geordneten
+Diagnosen abbrechen.
+
+Beispiel:
+
+```text
+module.c:73: error: trice bind found 3 Trice sites on one physical line,
+but the target preprocessor does not provide __COUNTER__.
+Use trice insert/clean or place one Trice call per line.
+```
+
+Für einen Wrapper:
+
+```text
+logging.h:41: error: macro LOG_ERROR contains 2 Trice sites and requires
+__COUNTER__ for trice bind.
+Use trice insert/clean, reduce the macro to one Trice site, or replace it
+with a static inline function.
+```
+
+### 11.4 Warum `static inline` ein guter Ausweg bleibt
+
+Ein komplexes Loggingmakro lässt sich häufig als `static inline`-Funktion
+formulieren. Diese besitzt normale Trice-Stellen in einer physischen Datei und
+wird bereits vom heutigen Bind-Modell unterstützt. Der Compiler kann sie in der
+Regel genauso inline optimieren wie ein Makro, während Typprüfung, Debugging und
+Parserbehandlung einfacher werden.
+
+## 12. Notwendige Generatoränderungen
+
+Die Implementierung sollte keine zweite unabhängige Trice-Parser- oder
+ID-Logik einführen. Stattdessen wird die bestehende Bind-Analyse erweitert.
+
+### 12.1 Datenmodell
+
+Eine Bind-Stelle benötigt zusätzlich mindestens:
+
+- physische Zeile und Spalte;
+- lokales Ordinal auf der Zeile;
+- direkte Stelle oder Makrodefinitionsstelle;
+- Makroname und Definitionsordinal, falls vorhanden;
+- stabile Definitionsidentität;
+- Liste der erkannten Aufrufstellen;
+- Kennzeichen `requiresCounter`;
+- gewählte Strategie und gegebenenfalls Konfigurationsfingerprint.
+
+### 12.2 Makroanalyse
+
+Eine begrenzte erste Analyse kann folgende Regeln verwenden:
+
+1. Funktionsähnliches `#define` mit vollständiger Replacement-Liste erfassen.
+2. Direkte User-Level-Trice-Aufrufe darin mit dem gemeinsamen Parser erkennen.
+3. Statische Formatstrings und Argumentanzahl wie bei `insert` validieren.
+4. Jede innere Trice-Stelle anhand Definitionsdatei, Definitionsposition und
+ Definitionsordinal stabil identifizieren.
+5. Aufrufe des Wrappernamens außerhalb der Definition erfassen.
+6. Verschachtelte oder nicht transparent analysierbare Wrapper gesammelt
+ ablehnen.
+
+Die Makroanalyse muss Zeilenfortsetzungen und Kommentare korrekt behandeln.
+Eine reine zeilenweise Suche nach `#define` reicht nicht.
+
+### 12.3 Sidecar-Rendering
+
+Der Sidecar muss klar zwischen fachlicher ID und technischem
+Aufrufstellendeskriptor unterscheiden. Beispielhaft:
+
+```c
+#define TRICE_BIND_DEFINITION_KABC_D0 iD(5101u)
+#define TRICE_BIND_DEFINITION_KABC_D1 iD(5102u)
+
+#define TRICE_BIND_INVOCATION_KABC_L300_O0 TRICE_BIND_DEFINITION_KABC_D0
+#define TRICE_BIND_INVOCATION_KABC_L300_O1 TRICE_BIND_DEFINITION_KABC_D1
+```
+
+Die endgültige Syntax hängt von der gewählten Variante ab. Die Trennung im
+Datenmodell verhindert jedoch, dass eine zufällige Aufrufposition zur
+fachlichen Identität wird.
+
+### 12.4 Listeninformation
+
+Für Wrapper wird empfohlen:
+
+- `til.json`: Typ und Formatstring der inneren Definitionsstelle;
+- `li.json`: Definitionsdatei und Definitionszeile, nicht die erste zufällige
+ Aufrufstelle;
+- Sidecar: technische Aufrufstellendeskriptoren, die dieselbe ID
+ wiederverwenden.
+
+Bei mehreren inneren Trices besitzt jede Definitionsstelle einen eigenen
+Eintrag.
+
+### 12.5 Transaktion und Diagnosen
+
+Alle Dateien werden zuerst analysiert. Erst wenn keine fatale Diagnose
+vorliegt, werden Sidecars, Includes, `til.json` und `li.json` gemeinsam
+committed. Fehldiagnosen sollten Datei, Zeile, Makroname und Grund enthalten.
+
+## 13. Erforderliche Verifikation vor der Produktintegration
+
+### 13.1 Counter-Capability
+
+- Compiler mit `__COUNTER__`;
+- simulierter Compiler ohne `__COUNTER__`;
+- C und C++;
+- Strict-/Pedantic-Modi und Warnings-as-Errors;
+- vorkompilierte Header;
+- Forced Includes;
+- Cross-Compiler.
+
+### 13.2 Mehrere direkte Stellen
+
+- zwei und drei Trices auf einer Zeile;
+- verschiedene Trice-Makrofamilien;
+- identische und unterschiedliche Formatstrings;
+- andere Makroaufrufe zwischen den Trice-Stellen;
+- Header und Source;
+- statische und Inline-Funktionen;
+- bedingte Compilation.
+
+### 13.3 Wrapper
+
+- genau ein inneres Trice;
+- mehrere innere Trices in `switch`-/`if`-Zweigen;
+- mehrere Wrapperaufrufe;
+- wiederverwendete Definitions-IDs;
+- Wrapper in Headern mit mehreren Translation Units;
+- absichtlich nicht unterstützte verschachtelte Wrapper;
+- Zeilenfortsetzungen mit LF und CRLF;
+- Kommentare und auskommentierte Fake-Aufrufe.
+
+### 13.4 Stabilität
+
+- zweiter Bind-Lauf erzeugt byteidentische Ausgaben;
+- Einfügen einer fremden `__COUNTER__`-Expansion vor der lokalen Stelle;
+- Einfügen einer fremden Expansion innerhalb des lokalen Segments;
+- Quellzeilen werden verschoben;
+- Build ohne vorherigen neuen Bind-Lauf muss erkennbar scheitern;
+- parallele Analyse bleibt deterministisch;
+- fataler Fehler hinterlässt keine Teilresultate.
+
+### 13.5 Embedded-Eigenschaften
+
+- kein zusätzlicher RAM-Verbrauch;
+- kein unerwarteter Flashverbrauch durch ID-Tabellen;
+- keine zusätzlichen Laufzeitloads nach Optimierung;
+- unverändertes Drahtformat;
+- identisches Loggingverhalten zu Insert;
+- GCC-/Clang-/MSVC- und relevante Embedded-Compiler-Matrizen.
+
+## 14. Offene Entscheidungsfragen
+
+Vor der Implementierung müssen insbesondere folgende Punkte entschieden oder
+durch PoCs beantwortet werden:
+
+1. Kann ein lokaler Counter-Rebase in allen unterstützten Sourcekontexten
+ syntaktisch sicher platziert werden?
+2. Erzeugt eine lokale ID-Tabelle nach Optimierung garantiert keinen messbaren
+ Code- oder RAM-Overhead?
+3. Werden Counter-pflichtige Null-Platzhalter zunächst abgelehnt oder sofort
+ unterstützt?
+4. Wie wird ein zusätzlicher Counterverbrauch innerhalb eines Wrappermakros
+ sicher erkannt?
+5. Welche Makroverschachtelung gilt noch als »begrenzt und transparent«?
+6. Genügt eine Build-time-Diagnose bei unbekannter Toolchain oder soll jedes
+ Projekt eine Target-Capability-Datei bereitstellen?
+7. Wie wird bei mehreren Compile-Konfigurationen derselben Datei verfahren?
+8. Soll Variante 2 nur Test-/CI-Verifikation oder ein öffentlich unterstützter
+ Generatorpfad sein?
+9. Welche Buildsysteme würden für einen späteren Shadow-Source-Fallback
+ offiziell unterstützt?
+
+## 15. Schlussfolgerung
+
+Die wesentlichen sourcebezogenen MVP2-Fähigkeiten sind technisch realistisch,
+wenn der Umfang bewusst begrenzt bleibt. Die breite Verfügbarkeit von
+`__COUNTER__` in GCC, Clang und MSVC spricht dafür, Counter-Unterstützung direkt
+in die nächste Ausbaustufe aufzunehmen. Die konkrete Toolchain muss dennoch
+automatisch geprüft werden; eine angenommene Compilerliste reicht nicht.
+
+Für ein möglichst glattes Nutzererlebnis ist der zeilenlokale Counter-Rebase
+die bevorzugte Richtung. Er hält den Aufruf bei `trice bind`, kompiliert die
+Originalsource und aktiviert die zusätzliche Komplexität nur für betroffene
+Stellen. Sein verbleibendes Risiko ist die zuverlässige lokale Countersequenz.
+Dieses Risiko muss vor der Produktintegration durch einen gezielten Rebase-PoC
+und Embedded-Codegrößenprüfung geschlossen werden.
+
+Der exakte Target-Präprozessorlauf ist eine wertvolle optionale Absicherung,
+aber als alleinige Lösung zu buildabhängig. Die Shadow-Source mit expliziten
+Ordinalen ist der robuste Counter-unabhängige Rückfall, verlangt jedoch die
+größte Änderung an Build und Debugworkflow.
+
+Die empfohlene Reihenfolge lautet daher:
+
+1. zeilenlokalen Rebase als PoC verifizieren;
+2. begrenzte direkte Mehrfachstellen und Wrapper implementieren;
+3. automatische Target-Capability-Diagnose integrieren;
+4. exakten Präprozessorlauf optional zur Verifikation ergänzen;
+5. Shadow-Source nur bei realem Bedarf als separaten Fallback entwickeln.
diff --git a/docs/TriceBind/Trice_bind_70_MVP2_Implementation_Prompt.md b/docs/TriceBind/Trice_bind_70_MVP2_Implementation_Prompt.md
new file mode 100644
index 000000000..685b5ae1d
--- /dev/null
+++ b/docs/TriceBind/Trice_bind_70_MVP2_Implementation_Prompt.md
@@ -0,0 +1,535 @@
+# Codex-Prompt: Umsetzung von `trice bind` MVP2 mit lokalem `__COUNTER__`-Rebase
+
+Arbeite im Repository `trice` ausgehend vom aktuellen Branch `wip`.
+
+## Branch und Arbeitsbaum
+
+1. Prüfe zuerst den aktuellen Branch und den Arbeitsbaum mit Git.
+2. Verwirf, überschreibe oder stash keine vorhandenen Useränderungen eigenmächtig.
+3. Wechsle auf den aktuellen lokalen Branch `wip`, sofern dies ohne Verlust vorhandener Änderungen möglich ist.
+4. Lege davon den neuen Branch an und checke ihn aus:
+
+```text
+feature/trice-bind-mvp2-rebase
+```
+
+5. Falls der Branch bereits existiert oder der Arbeitsbaum einen sicheren Branchwechsel verhindert, dokumentiere den konkreten Zustand. Verändere keine fremden Arbeiten.
+6. Committe und pushe nicht selbstständig.
+
+## Verbindliche Grundlagen
+
+Lies vor Änderungen vollständig:
+
+```text
+docs/TriceBind/Trice_bind_10_MVP_Spezifikation.md
+docs/TriceBind/Trice_bind_60_MVP2_Implementation_Strategies.md
+docs/TriceBind/Trice_bind_90_MVP_User_Manual.md
+experiments/TriceBind/60_MVP2_Local_Counter_Rebase/README.md
+```
+
+Analysiere außerdem den vollständigen ausführbaren PoC unter:
+
+```text
+experiments/TriceBind/60_MVP2_Local_Counter_Rebase/
+```
+
+und die aktuelle produktive Bind-Implementierung, insbesondere:
+
+```text
+internal/id/
+src/triceBind.h
+src/trice.h
+src/triceOn.h
+src/triceOff.h
+scripts/
+_test/
+examples/
+```
+
+Die bestehende MVP-Spezifikation bleibt für das bisherige `trice bind`-Verhalten verbindlich. Das Strategiepapier ist eine technische Entscheidungsgrundlage. Für diese Aufgabe ist **Variante 1: zeilenlokaler Counter-Rebase** ausgewählt. Das erfolgreiche Experiment `60_MVP2_Local_Counter_Rebase` ist die technische Referenz für den lokalen Rebase, die Compile-Time-Prüfungen und die Fehlerfälle.
+
+Ändere die Generator-Spezifikation und das Strategiepapier nicht. Erweitere das User Manual wie weiter unten verlangt.
+
+## Auftrag
+
+Erweitere die bestehende produktive `trice bind`-Implementierung um die hier definierte MVP2-Ausbaustufe.
+
+Die Erweiterung muss unterstützen:
+
+1. mehrere direkte ID-freie Trice-Aufrufe auf derselben physischen Sourcezeile;
+2. gewöhnliche Statement-Makros mit statischen Formatstrings und einem oder mehreren direkten Trice-Aufrufen in ihrer Replacement-Liste;
+3. mehrere Aufrufe eines solchen Wrappermakros auf derselben physischen Sourcezeile;
+4. Source- und Headerdateien;
+5. C und C++;
+6. stabile Trice-ID und Location Information an jeder inneren Trice-Definitionsstelle eines Wrappermakros;
+7. Wiederverwendung dieser stabilen Definitions-ID an allen Wrapperaufrufstellen;
+8. lokal begrenzte, sichere Nutzung von `__COUNTER__` nur dort, wo Datei und Zeile allein eine konkrete Expansion nicht eindeutig unterscheiden können.
+
+Der normale Userworkflow bleibt:
+
+```text
+trice bind
+Build
+```
+
+Der User darf weder Counterwerte noch lokale Ordinale pflegen oder als Trice-IDs verwenden.
+
+## Keine projektweite `__COUNTER__`-Anforderung
+
+Die Counter-Abhängigkeit darf nicht projektweit aktiviert werden.
+
+### Normale Dateien und Bereiche
+
+Enthält eine physische Source- oder Headerdatei ausschließlich Stellen, die mit dem vorhandenen `File Key + __LINE__`-Mechanismus eindeutig gebunden werden können, dann gilt:
+
+- keine `__COUNTER__`-Verwendung;
+- kein Counter-Feature-Guard;
+- kein Rebase-Helper;
+- keine neue Warnung;
+- unverändertes bisheriges Bind-Verhalten.
+
+Dazu gehören insbesondere:
+
+- direkte Trice-Aufrufe auf jeweils eigener physischer Zeile;
+- normale Funktionen;
+- `inline`- und `static inline`-Funktionen;
+- ein einfacher Wrapper mit genau einer inneren Trice-Stelle, sofern jede Wrapperaufrufstelle durch Datei und Zeile eindeutig ist und daher ohne Counter auf die Definitions-ID abgebildet werden kann.
+
+### Counter-pflichtige Bereiche
+
+Counter-Rebase und Capability-Guard werden ausschließlich für erkannte Bereiche erzeugt, in denen Datei und Zeile nicht ausreichen. Dazu gehören mindestens:
+
+- mehrere direkte Trice-Aufrufe auf derselben physischen Zeile;
+- ein Wrappermakro mit mehreren inneren Trice-Stellen;
+- mehrere Wrapperaufrufe auf derselben physischen Zeile;
+- Kombinationen daraus.
+
+Die Entscheidung wird pro physischer Datei und möglichst pro kleinster sicher umschließbarer Aufrufregion getroffen.
+
+## Headerdateien und Translation Units
+
+Behandle Headerfälle ausdrücklich und teste sie.
+
+### Wrapperdefinition in einem Header, Aufruf in einer Source-Datei
+
+Beispiel:
+
+```c
+// logging.h
+#define LOG_ERROR(value) \
+ do { \
+ trice("first"); \
+ trice("second=%d", value); \
+ } while (0)
+```
+
+```c
+// module.c
+#include "logging.h"
+
+void f(void)
+{
+ LOG_ERROR(7);
+}
+```
+
+Anforderungen:
+
+- Die beiden inneren Trice-Stellen besitzen stabile IDs und Location Information an ihren Definitionsstellen in `logging.h`.
+- Der lokale Rebase gehört zur Aufrufregion in `module.c`.
+- Die Aufrufstellendeskriptoren in `module.c` verweisen in Definitionsreihenfolge auf die beiden stabilen IDs aus `logging.h`.
+- Weitere Aufrufe in anderen Source-Dateien verwenden dieselben Definitions-IDs.
+
+### Wrapperaufruf oder mehrere direkte Trices in einem Header
+
+Liegt eine counter-pflichtige Aufrufregion in einem Header, wird der Rebase in beziehungsweise für diesen Header erzeugt.
+
+Dann gilt:
+
+- jede Translation Unit, die diesen Header verarbeitet, benötigt `__COUNTER__`;
+- der lokale Rebase muss unabhängig davon funktionieren, wie viele Counterwerte vor dem Header oder in früheren Includes verbraucht wurden;
+- die generierten Compile-Time-Prüfungen müssen in jeder Translation Unit wirksam sein;
+- ein gewöhnlicher Header ohne counter-pflichtige Stellen darf keine Counter-Abhängigkeit erhalten.
+
+### Lokale statt globale Wirkung
+
+Ein counter-pflichtiger Header macht nur die Translation Units counter-abhängig, die diesen Header tatsächlich verarbeiten. Er macht nicht das gesamte Projekt und keine unbeteiligten Dateien counter-abhängig.
+
+## Fachliche Identität bei Wrappermakros
+
+Unterscheide strikt:
+
+- **Definitionsstelle:** die Trice-Stelle innerhalb der Makrodefinition;
+- **Aufrufstelle:** eine konkrete Expansion des Wrappermakros.
+
+Normatives Verhalten:
+
+1. Jede innere Trice-Stelle einer Wrapperdefinition erhält genau eine stabile ID.
+2. Ihre Location Information zeigt deterministisch auf die Definitionsstelle.
+3. Mehrere Aufrufstellen erzeugen keine neuen fachlichen IDs.
+4. Aufrufstellendeskriptoren wählen lediglich die zur Definitionsreihenfolge passende stabile ID aus.
+5. Ein Wrapper mit zwei inneren Trices besitzt zwei stabile IDs, unabhängig von der Anzahl seiner Aufrufe.
+6. Runtime-Zweige innerhalb des Wrappers ändern nicht die Anzahl der Präprozessor-Expansionen und nicht die ID-Zuordnung.
+
+`til.json`, `li.json` und das Trice-Drahtformat bleiben unverändert.
+
+## Lokaler Counter-Rebase
+
+Implementiere den in `experiments/TriceBind/60_MVP2_Local_Counter_Rebase` verifizierten Ansatz produktionsnah in der vorhandenen Bind-Architektur.
+
+Für jede counter-pflichtige Aufrufregion gilt:
+
+1. unmittelbar vor der Region wird ein lokaler Counter-Basiswert erfasst;
+2. jede Trice-Expansion verwendet nur die Differenz zwischen aktuellem Counter und lokalem Basiswert;
+3. die lokalen Ordinale werden in textueller beziehungsweise expansionsbezogener Reihenfolge auf stabile IDs abgebildet;
+4. Counterverbrauch vor der Region ist irrelevant;
+5. nach der Region wird wieder auf den normalen file-key- und zeilenbasierten Bind-Dispatch zurückgeschaltet;
+6. es entsteht kein veränderlicher globaler Laufzeitzustand;
+7. es entsteht keine dynamische Speicherbelegung;
+8. der Counter selbst ist niemals die Trice-ID.
+
+Halte dich möglichst an den verifizierten Begin-/End- und Routing-Mechanismus des PoCs. Weiche nur ab, wenn die Integration in die bestehende produktive Makroschicht dies nachweislich erfordert. Dokumentiere jede relevante Abweichung und belege sie durch gleichwertige oder stärkere Tests.
+
+## Schutz vor stiller Fehlzuordnung
+
+Ein falscher Counterverlauf darf niemals erfolgreich kompilieren und dabei eine formal vorhandene, aber fachlich falsche ID auswählen.
+
+Erzeuge deshalb für jede Rebase-Region Compile-Time-Prüfungen mindestens für folgende Invarianten:
+
+1. Jede einzelne Trice-Expansion liegt innerhalb des erwarteten lokalen Ordinalbereichs.
+2. Am Ende der Region wurde exakt die erwartete Anzahl Counterwerte verbraucht.
+3. Ein zusätzlicher fremder `__COUNTER__`-Verbrauch innerhalb der Region führt sicher zu einem Compile-Time-Fehler.
+4. Ein fehlender oder widersprüchlicher Aufrufstellendeskriptor führt zu einem Bind- oder Compilerfehler.
+5. Nach dem Ende der Region ist der normale Bind-Dispatch wieder aktiv.
+
+Nutze eine Compile-Time-Assert-Abstraktion, die zur bereits unterstützten C- und C++-Sprachbaseline des Projekts passt. Erhöhe nicht stillschweigend die minimale C- oder C++-Version. Falls die aktuelle Baseline eine andere Technik als `_Static_assert` beziehungsweise `static_assert` verlangt, implementiere eine kompatible Abstraktion oder dokumentiere den konkreten Konflikt, bevor du die Sprachbaseline änderst.
+
+## Compiler- und Buildsystemunabhängigkeit
+
+`trice bind` kennt normalerweise den Targetcompiler nicht. Daraus folgt:
+
+- keine neue Pflichtoption für Compilername oder Compilerfamilie;
+- keine GCC-, Clang-, MSVC- oder Herstellererkennung als Grundlage der ID-Zuordnung;
+- kein zufällig gefundener Hostcompiler als angeblicher Nachweis der Targetfähigkeit;
+- kein verpflichtender externer Präprozessorlauf;
+- keine `compile_commands.json`-Pflicht;
+- keine Shadow-Source als Buildinput.
+
+Verwende ausschließlich den lokal generierten Target-Guard für counter-pflichtige Regionen:
+
+```c
+#if !defined(__COUNTER__)
+#error "trice bind: this source construct requires __COUNTER__; use trice insert/clean, split the Trice calls, or replace the logging macro with a function"
+#endif
+```
+
+Die konkrete Meldung darf an Repositorykonventionen angepasst werden, muss aber mindestens enthalten:
+
+- dass nur diese erweiterte Sourcekonstruktion `__COUNTER__` benötigt;
+- dass normale Bind-Stellen davon nicht betroffen sind;
+- die Alternativen `trice insert/clean`, Trennung der Aufrufe auf einzelne Zeilen oder Umstellung eines Wrappers auf eine normale beziehungsweise `static inline`-Funktion.
+
+Wenn keine counter-pflichtige Stelle existiert, darf diese Prüfung nirgends im generierten Compilerinput erscheinen.
+
+## Begrenzter Funktionsumfang dieser Ausbaustufe
+
+Unterstütze zunächst ausschließlich klar analysierbare Konstruktionen:
+
+- ID-freie Trice-Aufrufe;
+- statische, direkt erkennbare Formatstrings;
+- gewöhnliche Statement-Makros;
+- ein oder mehrere direkte Trice-Aufrufe pro unterstütztem Wrapper;
+- mehrere Aufrufe unterstützter Wrapper;
+- Source- und Headerdateien;
+- normale Statement-Kontexte, für die der Rebase sicher eingefügt werden kann.
+
+Zunächst nicht unterstützt und mit präziser Diagnose zurückzuweisen sind:
+
+- `id(0)`, `Id(0)` oder `ID(0)` innerhalb einer counter-selektierten Rebase-Region, solange der Replace-Pfad nicht separat produktionsnah verifiziert wurde;
+- explizite IDs größer null innerhalb counter-selektierter Bind-Stellen;
+- verschachtelte oder rekursive Logging-Wrapper;
+- Token-Pasting im Wrapper;
+- Stringification zur Erzeugung oder Veränderung des Trice-Formatstrings;
+- dynamisch zusammengesetzte Formatstrings;
+- indirekte Umdefinitionen von Trice-Makros;
+- unbekannter oder nicht sicher begrenzbarer zusätzlicher `__COUNTER__`-Verbrauch innerhalb der Rebase-Region;
+- Sourcekontexte, in denen der benötigte Begin-/End-Mechanismus syntaktisch nicht sicher eingefügt werden kann;
+- widersprüchliche Expansion derselben Stelle über mehrere Buildkonfigurationen, wenn keine eindeutige gemeinsame Semantik herstellbar ist.
+
+Kein stiller Fallback auf Source-Instrumentierung ist zulässig. `trice insert` und `trice clean` bleiben der explizite universelle Fallback.
+
+## Generatorverhalten
+
+Erweitere die bestehende Bind-Analyse; implementiere keine zweite unabhängige Trice-Parser- oder ID-Logik.
+
+Die Generatorerweiterung muss mindestens:
+
+1. physische Zeile und Spalte jeder relevanten Trice-Stelle erfassen;
+2. mehrere direkte Stellen derselben Zeile in Source-Reihenfolge ordnen;
+3. unterstützte Wrapperdefinitionen und ihre inneren Trice-Stellen in Definitionsreihenfolge erfassen;
+4. jeder inneren Definitionsstelle eine stabile bestehende oder neue Trice-ID zuordnen;
+5. Wrapperaufrufe erkennen und Aufrufstellendeskriptoren erzeugen;
+6. intern klassifizieren, ob eine Stelle den normalen Zeilenpfad oder den Counter-Rebase benötigt;
+7. Begin-/End- beziehungsweise gleichwertige Rebase-Artefakte nur für counter-pflichtige Regionen erzeugen;
+8. normale Sidecars und normale Bind-Stellen unverändert weiterverwenden;
+9. wiederholte Bind-Läufe idempotent behandeln;
+10. vorhandene generierte Rebase-Marker erkennen, aktualisieren und nicht duplizieren;
+11. Re-Migration beziehungsweise vorhandene Cleanup-Mechanismen so erweitern, dass generierte Rebase-Includes oder Marker eindeutig entfernbar sind;
+12. bei fatalen Fehlern weder teilweise Sidecars noch teilweise aktualisierte `til.json`-/`li.json`-Dateien hinterlassen;
+13. vorhandene Parallelität und deterministische ID-Vergabe erhalten.
+
+Generierte Sourceergänzungen müssen eindeutig als `trice bind`-Artefakte markiert sein und dürfen nicht manuell gepflegte Userkonstruktionen fälschlich entfernen.
+
+## Target-Makroschicht
+
+Erweitere die bestehende zentrale Bind-Makroschicht. Vermeide pro Trice-Familie kopierte Sonderimplementierungen.
+
+Anforderungen:
+
+- Der bestehende normale `BIND`-Pfad bleibt unverändert für gewöhnliche Stellen.
+- Ein lokaler `REBASE`-Pfad wird nur innerhalb einer generierten Rebase-Region ausgewählt.
+- Alle unterstützten User-Level-Trice-Familien verwenden dieselbe zentrale Ordinal- und ID-Auswahl, soweit ihre Signatur dies erlaubt.
+- Nach Ende der Region ist wieder der normale `BIND`-Pfad aktiv.
+- Insert-, Clean-, Off- und normaler Bind-Betrieb dürfen nicht regressieren.
+- Interne Transport-, Pack-, Buffer-, Decoder- und Drahtformatverträge bleiben unverändert.
+
+## Sourcepositionen und Location Information
+
+Zusätzliche generierte Includes oder Marker können physische Zeilen verschieben. Stelle sicher:
+
+- stabile IDs bleiben an den fachlichen Definitionsstellen erhalten;
+- `li.json` zeigt bei Wrappern auf die innere Trice-Definitionsstelle;
+- direkte mehrere Trice-Stellen derselben Zeile erhalten getrennte IDs, aber dieselbe physische Zeile und unterschiedliche Source- beziehungsweise Definitionsordinale;
+- wiederholte Bind-Läufe verändern IDs nicht;
+- ein Sourceedit mit anschließendem `trice bind` aktualisiert alle generierten Aufrufstellendeskriptoren korrekt;
+- die Kommentare und Diagnosen nennen verständlich Definitions- und Aufrufstelle, wenn beide relevant sind.
+
+## Tests
+
+Die neu hinzukommenden fachlichen Tests dürfen sich auf `trice bind` beschränken. Du musst keine parallele neue Insert-/Clean-Testmatrix für jede MVP2-Konstruktion erstellen.
+
+Bestehende Regressionstests für Insert, Clean und den bisherigen Bind-MVP müssen dennoch grün bleiben.
+
+### Vorhandener PoC
+
+Führe vor Änderungen aus:
+
+```sh
+cd experiments/TriceBind/60_MVP2_Local_Counter_Rebase
+./run.sh
+```
+
+Verändere oder entferne den PoC nicht. Er bleibt unabhängiger technischer Nachweis.
+
+### Erforderliche neue positive Bind-Tests
+
+Implementiere mindestens:
+
+1. zwei direkte Trice-Aufrufe auf derselben Sourcezeile;
+2. drei oder mehr direkte Trice-Aufrufe auf derselben Sourcezeile;
+3. Wrapper mit genau einer inneren Trice-Stelle und eindeutigem Aufruf pro Zeile ohne unnötige Counter-Abhängigkeit;
+4. Wrapper mit mehreren inneren Trice-Stellen;
+5. mehrere Wrapperaufrufe auf unterschiedlichen Zeilen;
+6. mehrere Wrapperaufrufe auf derselben Zeile;
+7. Wrapperdefinition in einem Header und Aufruf in zwei unterschiedlichen `.c`-Dateien;
+8. Wrapperaufruf in einem Header, der von mindestens zwei Translation Units eingebunden wird;
+9. mehrere direkte Trice-Stellen auf einer Zeile in einem Header;
+10. fremden `__COUNTER__`-Verbrauch vor einer Rebase-Region ohne Einfluss auf die IDs;
+11. stabile Definitions-IDs und identische `til.json`-/`li.json`-Zuordnung über mehrere Aufrufstellen;
+12. wiederholten `trice bind`-Lauf ohne unnötige Dateiänderungen;
+13. erneuten Bind-Lauf nach Sourceverschiebungen;
+14. unverändertes normales Binding in Dateien und Headern ohne counter-pflichtige Stellen.
+
+### Erforderliche negative Bind- und Compiler-Tests
+
+Implementiere mindestens:
+
+1. simuliert fehlendes `__COUNTER__` in einer betroffenen Datei führt zu der vorgesehenen verständlichen Fehlermeldung;
+2. simuliert fehlendes `__COUNTER__` beeinträchtigt eine ausschließlich normale Bind-Datei nicht;
+3. zusätzlicher fremder Counterverbrauch innerhalb einer Rebase-Region führt sicher zu einem Compile-Time-Fehler;
+4. zu wenig oder zu viele beobachtete Expansionen führen zu einem Compile-Time-Fehler;
+5. Null-Platzhalter in einer counter-pflichtigen Region werden mit präziser Bind-Diagnose abgelehnt;
+6. verschachtelte beziehungsweise rekursive Wrapper werden abgelehnt;
+7. Token-Pasting, Stringification zur Formatstringerzeugung und dynamische Formatstrings werden abgelehnt;
+8. syntaktisch ungeeignete Sourcekontexte werden abgelehnt, ohne teilweise Source- oder Listenänderungen zu hinterlassen;
+9. fehlende oder widersprüchliche Aufrufstellendeskriptoren fallen nicht still auf eine andere ID zurück.
+
+### Compiler- und Optimierungstests
+
+Soweit lokal vorhanden, teste mindestens:
+
+- C mit GCC und Clang;
+- C++ mit G++ und Clang++;
+- `-O0` und `-O2`;
+- die im Repository tatsächlich unterstützte minimale C-/C++-Baseline;
+- Warnungen als Fehler gemäß vorhandenen Projektkonventionen.
+
+Prüfe zusätzlich, dass die Rebase-Implementierung:
+
+- keinen veränderlichen RAM-Zustand einführt;
+- keine dynamische Allokation benötigt;
+- bei Optimierung keine unnötige Laufzeit-ID-Tabelle oder zusätzlichen dynamischen Lookup hinterlässt;
+- dieselben Trice-IDs im erzeugten Datenstrom liefert wie erwartet.
+
+### Repositorytests
+
+Führe während der Entwicklung regelmäßig gezielte Bind-Tests aus.
+
+Verwende für den kurzen Integrationszyklus mindestens:
+
+```sh
+./scripts/_testAll_10_PcTargetTests.sh
+```
+
+beziehungsweise die im Repository tatsächlich vorhandene äquivalente Aufrufsyntax ohne den langen `full`-Modus.
+
+Vor Abschluss mindestens:
+
+```sh
+./scripts/testAll.sh quick
+```
+
+`./scripts/testAll.sh full` ist für diese Implementierungsrunde kein notwendiger innerer Entwicklungszyklus. Führe es nur aus, wenn Laufzeit und Umgebung dies sinnvoll erlauben; andernfalls dokumentiere ausdrücklich, dass es nicht ausgeführt wurde.
+
+## Dokumentation
+
+Erweitere:
+
+```text
+docs/TriceBind/Trice_bind_90_MVP_User_Manual.md
+```
+
+Dokumentiere dort alle für Anwender relevanten Nuancen, ohne das Strategiepapier vollständig zu duplizieren.
+
+Mindestens zu dokumentieren sind:
+
+- der unveränderte Userworkflow `trice bind` plus normaler Build;
+- welche Konstruktionen automatisch den lokalen Counter-Rebase benötigen;
+- dass normale Dateien und normale Header keinerlei Counter-Abhängigkeit erhalten;
+- die datei- und bereichslokale Wirkung;
+- Headerdefinition versus Aufrufstelle;
+- die Wirkung eines counter-pflichtigen Headers auf alle Translation Units, die ihn einbinden;
+- stabile ID und Location an der inneren Makrodefinitionsstelle;
+- dass der User keine Counterwerte sieht oder pflegt;
+- die generierten Begin-/End- beziehungsweise Rebase-Artefakte und dass sie nicht manuell verschoben werden dürfen;
+- die zielgerichtete Fehlermeldung bei fehlendem `__COUNTER__`;
+- die empfohlenen Auswege `trice insert/clean`, Aufteilung auf einzelne Zeilen oder `static inline`;
+- die unterstützten Wrappergrenzen;
+- die weiterhin nicht unterstützten Konstruktionen;
+- dass die Erweiterung keine Änderung an `til.json`, `li.json` oder dem Drahtformat verursacht;
+- dass nach relevanten Sourceänderungen erneut `trice bind` ausgeführt werden muss.
+
+Verweise für technische Hintergründe auf:
+
+```text
+docs/TriceBind/Trice_bind_60_MVP2_Implementation_Strategies.md
+experiments/TriceBind/60_MVP2_Local_Counter_Rebase/README.md
+```
+
+## Nicht Gegenstand dieser Aufgabe
+
+Implementiere in dieser Runde nicht:
+
+- einen allgemeinen externen Target-Präprozessorlauf;
+- eine Pflichtintegration mit `compile_commands.json`;
+- Shadow-Sources;
+- ELF-/Link-Map-Inventur;
+- vorbereitete `.a`-Library-Bindung;
+- allgemeine Unterstützung beliebiger Präprozessormakros;
+- automatische Compilerfamilienerkennung;
+- neue öffentliche Counter- oder Ordinaloptionen;
+- eine Änderung des JSON-Schemas oder Drahtformats;
+- einen stillen partiellen `trice insert`-Fallback.
+
+## Randbedingungen und Qualitätsanforderungen
+
+- Keine beabsichtigten Breaking Changes.
+- Bestehendes Verhalten von `trice insert`, `trice clean`, normalem `trice bind`, Decoder, `til.json`, `li.json`, Drahtformat und vorhandenen Projekten erhalten.
+- Keine zweite unabhängige Trice-Parser- oder ID-Logik.
+- Gemeinsame Generator- und Targetlogik statt Codeduplizierung.
+- Deterministische Ergebnisse trotz paralleler Verarbeitung.
+- Transaktionales Schreiben bei fatalen Fehlern.
+- Unveränderte Dateien nicht unnötig neu schreiben.
+- Alle erkennbaren Diagnosen sammeln und geordnet ausgeben.
+- Keine unnötigen Refactorings außerhalb des für diese Ausbaustufe notwendigen Umfangs.
+- Keine allgemeine neue Compilerkonfiguration für normale Bind-Projekte.
+- Fehlende Targetfähigkeit muss sichtbar scheitern, niemals still falsch binden.
+
+Wenn eine Anforderung mit der bestehenden Architektur nachweislich nicht kompatibel oder nicht eindeutig sicher umsetzbar ist:
+
+1. dokumentiere Datei, Symbol, Sourcekonstruktion und Minimalbeispiel;
+2. nimm keine eigenmächtige API-, Format- oder Semantikänderung vor;
+3. implementiere die übrigen unabhängigen Teile weiter;
+4. beschreibe eine möglichst kleine kompatible Lösung im Abschlussbericht.
+
+## Vorgehen
+
+1. Analysiere Repository, aktuelle Bind-Implementierung, Parser, Target-Makros, Sidecarerzeugung, Re-Migration und Tests.
+2. Führe Baseline-Tests einschließlich des vorhandenen Rebase-PoCs aus.
+3. Erstelle vor der ersten größeren Änderung einen kompakten Implementierungsplan mit:
+ - betroffenen Dateien,
+ - Datenmodell für Definitions- und Aufrufstellen,
+ - Klassifikation normal versus counter-pflichtig,
+ - Generatorartefakten,
+ - Target-Dispatch,
+ - Headerbehandlung,
+ - Fehlerfällen,
+ - Teststrategie,
+ - Dokumentationsänderung.
+4. Implementiere schrittweise und teste gezielt nach jedem Teil.
+5. Erweitere das User Manual.
+6. Führe die abschließenden Tests aus.
+7. Liefere den Abschlussbericht.
+
+## Abschlussbericht
+
+Liefere nach der Umsetzung:
+
+1. kurze Architekturzusammenfassung;
+2. Name und Ausgangspunkt des angelegten Branches;
+3. Liste der geänderten Dateien;
+4. Beschreibung der Generatorerweiterung;
+5. Beschreibung der Target-Makrointegration;
+6. Erklärung der lokalen Counter-Abgrenzung für Source- und Headerdateien;
+7. Beschreibung der Definitions-ID- und Aufrufstellensemantik;
+8. neue positive und negative Bind-Tests;
+9. ausgeführte Testkommandos mit Ergebnis;
+10. nicht ausgeführte Tests mit genauer Begründung;
+11. Änderungen am User Manual;
+12. verbleibende Einschränkungen;
+13. ausdrücklich nicht implementierte Themen;
+14. Abweichungen vom ausgewählten Rebase-PoC oder vom Auftrag;
+15. mögliche Breaking Changes oder sonstige Risiken.
+
+## Genehmigungen / Generalvollmacht
+
+Frage nicht um Erlaubnis:
+
+- um in GitHub oder im lokalen Repository etwas zu lesen;
+- um den neuen Branch aus `wip` anzulegen und auszuchecken;
+- um Go-, C-, C++-, Shell-, Test- oder Markdown-Dateien zu verändern;
+- um Dateien unter `internal`, `src`, `scripts`, `_test`, `examples`, `experiments` oder `docs/TriceBind` zu ändern;
+- um mehr als fünf Dateien zu ändern;
+- um Tools auszuführen;
+- um Go-, C- oder C++-Code zu kompilieren;
+- um Tests auszuführen;
+- um temporäre Dateien oder Testarbeitsbäume anzulegen;
+- um eng begrenzte Fehler in der bestehenden Bind-Implementierung zu beheben, wenn sie die hier verlangte Ausbaustufe blockieren.
+
+## Verbote
+
+- Du darfst nicht selbstständig committen oder pushen.
+- Du darfst keine uncommitteten Useränderungen verwerfen, überschreiben oder ohne Erlaubnis stashen.
+- Du darfst die Generator-Spezifikation oder das Strategiepapier nicht fachlich ändern.
+- Du darfst die neue Funktion nicht durch einen Shadow-Source-, externen Präprozessor- oder ELF-Ansatz ersetzen.
+- Du darfst bestehende Tests nicht entfernen oder abschwächen, um neue Tests grün zu bekommen.
+- Du darfst fehlende `__COUNTER__`-Unterstützung nicht durch stillen Fallback oder falsche ID-Zuordnung kaschieren.
+- Du darfst keine projektweite Counter-Anforderung erzeugen, wenn nur einzelne Dateien oder Bereiche counter-pflichtig sind.
+
+## Wichtig
+
+Bearbeite diese Aufgabe durchgehend, ohne zwischendurch Freigaben anzufordern. Wenn du für die Durchführung noch eine unverzichtbare Erlaubnis benötigst, frage jetzt danach.
+
+## Startkommando
+
+Beginne jetzt mit Git-Status, Branchanlage aus `wip`, vollständiger Repositoryanalyse, Baseline-Tests und Implementierungsplan. Fahre danach selbstständig mit der Umsetzung, den Bind-spezifischen Tests und der Aktualisierung des User Manuals fort.
diff --git a/docs/TriceBind/Trice_bind_90_MVP_User_Manual.md b/docs/TriceBind/Trice_bind_90_MVP_User_Manual.md
new file mode 100644
index 000000000..c4c032932
--- /dev/null
+++ b/docs/TriceBind/Trice_bind_90_MVP_User_Manual.md
@@ -0,0 +1,1124 @@
+# Trice Bind
+
+**Status:** User Manual für MVP und MVP2 mit lokalem Counter-Rebase
+**Verbindliche technische Spezifikation:** [`Trice_bind_10_MVP_Spezifikation.md`](./Trice_bind_10_MVP_Spezifikation.md)
+**MVP-Testanforderungen:** [`Trice_bind_30_MVP_Test_Spezifikation.md`](./Trice_bind_30_MVP_Test_Spezifikation.md)
+**Technischer Hintergrund zu MVP2:** [`Trice_bind_60_MVP2_Implementation_Strategies.md`](./Trice_bind_60_MVP2_Implementation_Strategies.md) und [`60_MVP2_Local_Counter_Rebase`](../../experiments/TriceBind/60_MVP2_Local_Counter_Rebase/README.md)
+
+## 1. Überblick
+
+`trice bind` vergibt und verwaltet stabile Trice-IDs, ohne numerische IDs in bind-verwaltete User-Trice-Aufrufe zu schreiben.
+
+Der Usercode bleibt beispielsweise:
+
+```c
+trice("msg:module initialized\n");
+```
+
+`trice bind` scannt die Projektquellen, verwendet die bestehende ID-Verwaltung mit `til.json` und `li.json` und erzeugt pro bind-verwalteter Source- oder Headerdatei einen temporären Sidecar-Header. Der Compiler übersetzt weiterhin unmittelbar die Originalquellen.
+
+Der normale Workflow lautet:
+
+```text
+trice bind
+Build
+```
+
+Ein nachfolgendes `trice clean` ist in einem stabilen Bind-Projekt nicht erforderlich.
+
+`trice bind` muss nach jeder Änderung einer gescannten Source- oder Headerdatei vor dem Build ausgeführt werden. Ein veralteter Sidecar kann in bestimmten Fällen noch kompilieren, aber eine nicht mehr passende ID enthalten.
+
+## 2. Voraussetzungen
+
+Ein Bind-Projekt benötigt:
+
+- die normale Trice-Library unter `./src`,
+- `til.json`,
+- `li.json`,
+- das PC-Werkzeug mit dem Subkommando `trice bind`,
+- einen Buildschritt vor der C/C++-Compilation,
+- den Sidecar-Ordner als Include-Pfad.
+
+Der Standardordner ist:
+
+```text
+./build/triceIDs
+```
+
+Der Ordner wird von `trice bind` bei Bedarf erzeugt und normalerweise nicht versioniert.
+
+## 3. Schnellstart
+
+### 3.1 Neues ID-freies Projekt
+
+1. Trice-Aufrufe ohne numerische ID schreiben:
+
+ ```c
+ trice("msg:start\n");
+ ```
+
+2. `trice bind` ausführen:
+
+ ```sh
+ trice bind [gemeinsame Insert-Optionen]
+ ```
+
+3. Den Sidecar-Ordner zum Compiler-Include-Pfad hinzufügen:
+
+ ```text
+ -I./build/triceIDs
+ ```
+
+4. Projekt bauen.
+
+`trice bind` fügt in bind-verwaltete Dateien einen dateilokalen Include ein, beispielsweise:
+
+```c
+#include "trice_module_c_K73A915E9C4021B8.h" // trice-bind: keep as last include before this file's Trice calls
+```
+
+### 3.2 Migration von `trice insert`
+
+Für ein bisher vollständig mit `insert` verwaltetes Projekt:
+
+```text
+trice clean
+trice bind
+Build
+```
+
+`trice clean` entfernt die eingesetzten IDs. `trice bind` erzeugt anschließend File Keys, Sidecar-Includes und Sidecars.
+
+## 4. Dauerhafte und generierte Dateien
+
+Dauerhaft und normalerweise versioniert sind:
+
+- Userquellen,
+- `til.json`,
+- `li.json`,
+- die von `trice bind` eingefügten Sidecar-Include-Zeilen,
+- bei counter-pflichtigen Konstruktionen je eine eindeutig markierte Begin- und End-Include-Zeile in der Source- oder Headerdatei.
+
+Generiert und normalerweise nicht versioniert sind:
+
+- die Besitzer-Sidecars unter `./build/triceIDs`,
+- die dort liegenden Rebase-Hilfsheader mit den Suffixen `_begin.h` und `_end.h`,
+- sonstige normale Buildartefakte.
+
+Die Besitzer-Include-Zeile speichert den stabilen File Key. Der Sidecar und die Rebase-Hilfsheader können jederzeit durch `trice bind` neu erzeugt werden. Rebase-Include-Paare werden bei jedem Bind-Lauf validiert, entfernt und aus der aktuellen Sourceanalyse neu erzeugt; sie dürfen nicht manuell verschoben, umbenannt oder teilweise editiert werden.
+
+## 5. File Key und Sidecar-Name
+
+Jede bind-verwaltete Datei erhält einen einmalig erzeugten zufälligen 64-Bit-Key:
+
+```text
+K73A915E9C4021B8
+```
+
+Beispiel:
+
+```text
+module.c
+→ trice_module_c_K73A915E9C4021B8.h
+```
+
+Der Basisname verbessert die Lesbarkeit. Der Key unterscheidet auch gleichnamige Dateien in verschiedenen Verzeichnissen.
+
+Wird eine Source einschließlich ihrer Sidecar-Include-Zeile kopiert, besitzen zunächst beide Dateien denselben Key. `trice bind` erkennt dies als Konflikt; eine der Dateien muss einen neuen Key erhalten.
+
+Das normale Einbinden desselben Headers in mehrere Translation Units ist dagegen vorgesehen.
+
+## 6. Inhalt eines Sidecars
+
+Ein Sidecar kann beispielsweise so aussehen:
+
+```c
+/// \file trice_module_c_K73A915E9C4021B8.h
+/// \brief Generated by trice bind. Do not edit.
+
+#undef TRICE_BIND_FILE_KEY
+#define TRICE_BIND_FILE_KEY K73A915E9C4021B8
+#define TRICE_BIND_ROUTE_K73A915E9C4021B8 BIND
+
+// -defaultStampSize 16
+#define TRICE_BIND_SITE_K73A915E9C4021B8_L9 TRICE_BIND_AUTO, Id(12345u) // TRICE("Hello");
+#define TRICE_BIND_SITE_K73A915E9C4021B8_L10 TRICE_BIND_REPLACE, id(12346u) // TRICE(id(0), "world");
+#define TRICE_BIND_SITE_K73A915E9C4021B8_L11 TRICE_BIND_AUTO, iD(12347u) // trice("!\n");
+```
+
+Bedeutung:
+
+- `TRICE_BIND_AUTO`: Der TID-Ausdruck wird als fehlendes erstes Argument eingesetzt.
+- `TRICE_BIND_REPLACE`: Ein vorhandener Null-Platzhalter wird durch die stabile ID ersetzt.
+- `iD`, `id`, `Id` und `ID` behalten die bestehende Trice-Stamp-Semantik.
+- Die Kommentare dienen der Diagnose.
+- Jede Site-Definition steht in einer physischen Zeile.
+
+Die ID wird beim Präprozessieren zu einer normalen Compile-Time-Konstante. Im Target entsteht weder ein String-Lookup noch eine zusätzliche Runtime-Mapping-Tabelle.
+
+## 7. Warum der Sidecar-Include dateilokal ist
+
+Der Include stellt nicht nur ID-Definitionen bereit. Er aktiviert für die folgenden Trice-Aufrufe den Bind-Kontext der physischen Datei.
+
+In einer Translation Unit können nacheinander Sidecars mehrerer Header und der `.c`-Datei aktiv sein. Deshalb muss jede Datei vor ihren eigenen Trice-Aufrufen ihren eigenen File Key aktivieren.
+
+Typische `.c`-Datei:
+
+```c
+#include "trice.h"
+#include "module.h"
+#include "driver.h"
+#include "trice_module_c_K73A915E9C4021B8.h" // trice-bind: keep as last include before this file's Trice calls
+
+void moduleInit(void)
+{
+ trice("msg:module initialized\n");
+}
+```
+
+Ein zentraler Include aller Sidecars in `triceConfig.h` kann diese lokale Auswahl nicht ersetzen.
+
+## 8. Header und `static inline`
+
+Header mit direkten Trice-Aufrufen erhalten einen eigenen Sidecar:
+
+```c
+#ifndef MODULE_H
+#define MODULE_H
+
+#include "trice.h"
+#include "dependency.h"
+#include "trice_module_h_K1111111111111111.h" // trice-bind: keep as last include before this file's Trice calls
+
+static inline void moduleCheck(int value)
+{
+ trice("msg:value=%d\n", value);
+}
+
+#endif
+```
+
+Alle Translation Units verwenden für diese textuelle Headerstelle dieselbe stabile ID.
+
+Für wiederverwendbare Logging-Helfer mit mehreren Trice-Stellen ist eine `static inline`-Funktion normalerweise günstiger als ein Präprozessormakro. Ihre Trice-Stellen können den normalen Datei-und-Zeile-Pfad verwenden und benötigen deshalb keine Rebase-Includes pro Aufrufstelle. Abschnitt 17.4 zeigt die empfohlene Umsetzung und die semantischen Unterschiede.
+
+Nach dem Header-Include aktiviert die `.c`-Datei mit ihrem eigenen Sidecar wieder ihren eigenen File Key.
+
+Derselbe Besitzer-Sidecar darf innerhalb einer Datei mehrfach eingebunden werden, wenn ein späterer Header den aktiven File Key umschaltet.
+
+## 9. Automatische Include-Position
+
+Fehlt der Sidecar-Include, verwendet `trice bind` eine konservative Heuristik:
+
+1. Es sucht den letzten Include vor der ersten bindbaren Trice-Stelle.
+2. Es fügt den Sidecar unmittelbar danach ein.
+3. Gibt es keinen vorherigen Include, wird er direkt vor der ersten bindbaren Trice-Stelle eingefügt.
+4. Liegt bereits eine bindbare Trice-Stelle vor einem späteren Include, erfolgt keine unsichere automatische Änderung; der User erhält eine Diagnose.
+
+Ein vorhandener gültiger Include wird nicht unnötig verschoben.
+
+Der Kommentar `// trice-bind: ...` ist eine Hilfe für Entwickler. Die technische Erkennung basiert auf Include-Direktive, Sidecar-Name und File Key; das Entfernen nur des Kommentars ist zulässig.
+
+## 10. Dateiklassifikation und Mischprojekte
+
+`trice bind` klassifiziert jede physische Datei.
+
+### 10.1 Insert-owned
+
+Alle verwalteten Trice-Aufrufe besitzen explizite IDs größer null:
+
+```c
+trice(iD(123), "msg:legacy\n");
+```
+
+`trice bind` validiert die Datei, verändert sie aber nicht und erzeugt keinen Sidecar.
+
+### 10.2 Bind-owned
+
+Die Datei enthält ausschließlich ID-freie Aufrufe und/oder Null-Platzhalter:
+
+```c
+trice("msg:bound\n");
+TRICE(ID(0), "msg:bound with stamp\n");
+```
+
+`trice bind` verwaltet File Key, Include und Sidecar.
+
+### 10.3 Mixed
+
+Eine Datei enthält beide Formen:
+
+```c
+trice(iD(123), "msg:legacy\n");
+trice("msg:new\n");
+```
+
+Dieser Zustand ist im MVP nicht zulässig. Die Datei muss vollständig für `insert` oder vollständig für `bind` verwaltet werden.
+
+### 10.4 Insert-owned Datei nach Bind-Header
+
+Ein Bind-owned Header kann in eine Insert-owned Datei eingebunden werden. Vor den eigenen explizit instrumentierten Trice-Aufrufen muss die Datei den Bind-Kontext entfernen:
+
+```c
+#include "bound_header.h"
+
+#undef TRICE_BIND_FILE_KEY
+
+trice(iD(123), "msg:insert-owned source\n");
+```
+
+Dieser Hybridfall ist möglich, aber kein bevorzugter Normalworkflow.
+
+## 11. Unterstützte Trice-Aufrufe
+
+MVP und MVP2 verwenden denselben Parser und dieselbe User-Level-Makroerkennung wie `trice insert`.
+
+Unterstützt werden insbesondere:
+
+- die öffentlichen Lower-, Mixed- und Uppercase-Familien,
+- 8-, 16-, 32- und vorhandene 64-Bit-Formen,
+- aritätscodierte Formen,
+- String-, Count-, Buffer-, Float-, RPC-/ABC- und Assertion-Familien,
+- Sondermakros wie `triceAssertOrReturnValue`, soweit sie Teil der öffentlichen Schnittstelle sind,
+- die von `insert` unterstützten `-alias`- und `-salias`-Namen,
+- direkte Aufrufe in C-, C++- und Headerdateien,
+- normale, `inline`- und `static inline`-Funktionen,
+- mehrere ID-freie Aufrufe auf derselben physischen Zeile,
+- die in Abschnitt 17 beschriebenen gewöhnlichen Statement-Wrapper.
+
+`TRICE_INSERT_OFF` und `TRICE_INSERT_ON` wirken wie bei `trice insert`.
+
+## 12. ID- und Stamp-Formen
+
+### 12.1 ID-frei
+
+```c
+trice("msg:hello\n");
+TRICE8_3("msg:%d %d %d\n", a, b, c);
+```
+
+Für Makronamen mit mindestens einem Kleinbuchstaben verwendet der Sidecar `iD(...)`.
+
+Für ausschließlich großgeschriebene User-Level-Makros bestimmt `-defaultStampSize` die Form:
+
+- `0` → `id(...)`,
+- `16` → `Id(...)`,
+- `32` → `ID(...)`.
+
+### 12.2 Null-Platzhalter
+
+```c
+TRICE8_3(id(0), "msg:%d %d %d\n", a, b, c);
+TRICE8_3(Id(0), "msg:%d %d %d\n", a, b, c);
+TRICE8_3(ID(0), "msg:%d %d %d\n", a, b, c);
+```
+
+Die Wrapperform bleibt erhalten; der Sidecar ersetzt semantisch nur die Null durch die stabile ID.
+
+## 13. Kommandozeile
+
+Grundform:
+
+```sh
+trice bind [Optionen]
+```
+
+Kurzform:
+
+```sh
+trice b [Optionen]
+```
+
+`bind` übernimmt grundsätzlich die für Source-Suche, Parser, ID-Vergabe, Aliasbehandlung sowie `til.json` und `li.json` relevanten Optionen von `insert`.
+
+Bind-spezifisch ist insbesondere:
+
+```text
+-bindDir string
+ Ausgabeordner der Sidecar-Header.
+ Default: ./build/triceIDs
+```
+
+Mit:
+
+```sh
+trice bind -dry-run
+```
+
+werden geplante Änderungen berechnet und angezeigt, aber keine User-, JSON- oder Sidecar-Dateien geschrieben.
+
+## 14. Buildintegration
+
+`trice bind` ist ein erforderlicher Generator-Schritt vor der Compilation:
+
+```text
+Sourceänderung
+→ trice bind
+→ C/C++-Build
+```
+
+Das Buildsystem sollte:
+
+- `trice bind` vor abhängigen Compiles ausführen,
+- `./build/triceIDs` als Include-Pfad eintragen,
+- die Sidecars als normale Headerabhängigkeiten erfassen,
+- den Generator nicht durch einen bloßen Compilerfehler ersetzen.
+
+Der Generator ersetzt eine Sidecar-Datei nur bei Inhaltsänderung. Dadurch bleiben inkrementelle Builds auf die tatsächlich betroffenen Translation Units begrenzt.
+
+## 15. `TRICE_CLEAN`
+
+`TRICE_CLEAN` bleibt optional. `trice bind` führt keinen neuen globalen `TRICE_MODE` ein.
+
+Ist `TRICE_CLEAN` in `triceConfig.h` vorhanden:
+
+- `trice bind` hält den Wert auf `0`,
+- `trice bind` fügt die Definition nicht neu ein,
+- `trice bind` entfernt sie nicht automatisch.
+
+### 15.1 `trice clean` nach `trice bind`
+
+Bind-owned Trice-Aufrufe enthalten bereits keine IDs größer null. Deshalb entfernt `trice clean` dort keine IDs und löscht weder Sidecar-Includes noch Sidecars.
+
+Mit vorhandener Definition:
+
+```c
+#define TRICE_CLEAN 0
+```
+
+setzt `trice clean` sie wie bisher auf:
+
+```c
+#define TRICE_CLEAN 1
+```
+
+Die Library verwendet dann den Clean-/Off-Pfad; die vorhandenen Sidecars bleiben als Artefakte bestehen, erzeugen aber keinen normalen Logging-Code.
+
+Ohne `TRICE_CLEAN` ist `trice clean` nach einem Bind-Lauf praktisch wirkungslos:
+
+- User-Trice-Aufrufe bleiben ID-frei,
+- Sidecar-Includes bleiben,
+- Sidecars bleiben,
+- der Bind-Kontext bleibt für den nächsten Build verfügbar.
+
+Ein erneutes `trice bind` setzt eine vorhandene Definition wieder auf `0` und aktualisiert die Sidecars.
+
+## 16. Re-Migration zu `trice insert`
+
+Ein öffentliches Re-Migrationssubkommando gehört weiterhin nicht zum normalen Userworkflow. Das Repository-Hilfsskript für den Wechsel zurück zum Clean-Zustand verwendet jedoch dieselbe validierte Bind-Remigration wie die Tests. Sie entfernt vollständige Rebase-Include-Paare, ihre Hilfsheader, Sidecar-Includes und Besitzer-Sidecars gemeinsam und korrigiert die betroffenen Zeilen in `li.json`.
+
+Wer den Rückweg manuell ausführt, muss alle zusammengehörigen Artefakte entfernen und darf keine einzelne Begin- oder End-Include-Zeile stehen lassen. Anschließend folgt der bisherige Ablauf:
+
+```text
+trice insert
+Build
+```
+
+## 17. Automatischer lokaler Counter-Rebase
+
+MVP2 erweitert den normalen Workflow nicht um einen zusätzlichen Befehl:
+
+```text
+trice bind
+Build
+```
+
+Der User sieht und pflegt weder Counterwerte noch lokale Ordinale. `__COUNTER__` wird nur als lokaler Compile-Time-Selektor verwendet; sein Wert ist niemals eine Trice-ID.
+
+### 17.1 Wann der normale Zeilenpfad genügt
+
+Eindeutige Stellen verwenden weiterhin ausschließlich File Key und `__LINE__`. Dazu gehören:
+
+- ein direkter Trice-Aufruf pro physischer Zeile,
+- Trice-Aufrufe in normalen, `inline`- und `static inline`-Funktionen,
+- ein Statement-Wrapper mit genau einer inneren Trice-Stelle, wenn seine Aufrufe zeilenweise eindeutig sind.
+
+Solche Source- und Headerdateien erhalten keinen Counter-Guard, keine Rebase-Grenzen und keine Rebase-Hilfsheader. Ein Compiler ohne `__COUNTER__` kann sie wie bisher bauen.
+
+### 17.2 Wann `trice bind` lokal rebased
+
+Ein lokaler Rebase wird automatisch nur dort erzeugt, wo Datei und Zeile eine Expansion nicht eindeutig unterscheiden:
+
+```c
+trice("msg:first\n"); trice("msg:second\n"); trice("msg:third\n");
+```
+
+Das gilt außerdem für Wrapper mit mehreren inneren Trice-Stellen, für mehrere Wrapperaufrufe auf derselben physischen Zeile und für einen über mehrere Zeilen geschriebenen Wrapperaufruf. Vor dem kleinsten sicher umschließbaren Bereich erfasst der generierte Code einen lokalen Counter-Basiswert. Unmittelbar danach wird der normale Bind-Pfad wiederhergestellt. Früherer Counterverbrauch in derselben Translation Unit ist dadurch bedeutungslos.
+
+Der kleinste Bereich ist normalerweise genau eine physische Quellzeile. Zwei unabhängige benachbarte Zeilen werden bewusst nicht zu einem gemeinsamen Rebase zusammengefasst. Ein größerer Bereich würde zwar Include-Zeilen einsparen, könnte aber auch fremde Makroexpansionen, bedingte Übersetzung oder eine zusätzliche indirekte `__COUNTER__`-Verwendung einschließen. Damit würde eine lokale Änderung unnötig mehrere Logstellen beeinflussen.
+
+Eine notwendige Ausnahme ist ein einzelner, syntaktisch zusammengehöriger Wrapperaufruf, dessen Argumentliste über mehrere physische Zeilen reicht:
+
+```c
+LOG_ERROR(
+ determineErrorCode(
+ fileHandle,
+ operation
+ )
+);
+```
+
+Eine Präprozessordirektive wie `#include` muss auf einer eigenen physischen Zeile stehen und darf nicht mitten in die noch offene Argumentliste eingefügt werden. Deshalb umfasst der minimale Rebase in diesem Fall den vollständigen Aufruf vom Makronamen bis zum abschließenden Semikolon. Das ist kein Zusammenfassen unabhängiger Anweisungen, sondern die kleinste syntaktisch mögliche Klammerung eines einzigen Aufrufs.
+
+### 17.3 Konkretes Wrapperbeispiel
+
+Ein gewöhnliches Statement-Makro kann beispielsweise so definiert und verwendet werden:
+
+```c
+#define LOG_ERROR(value) \
+ do { \
+ switch (value) { \
+ case 0: \
+ break; \
+ case 7: \
+ trice("cannot open file\n"); \
+ break; \
+ default: \
+ trice("error=%d", 8); \
+ break; \
+ } \
+ } while (0)
+
+void report(int status)
+{
+ LOG_ERROR(status);
+ LOG_ERROR(7); LOG_ERROR(8);
+}
+```
+
+Die beiden Trice-Stellen in `LOG_ERROR` erhalten insgesamt zwei stabile IDs. Die erste ID gehört dauerhaft zu `cannot open file`, die zweite zu `error=%d`. Jeder Wrapperaufruf verwendet diese beiden Definitions-IDs in Definitionsreihenfolge; er erzeugt keine weiteren IDs. Dass zur Laufzeit jeweils nur ein `switch`-Zweig ausgeführt wird, ändert die Präprozessorreihenfolge nicht.
+
+`li.json` zeigt für beide IDs auf die jeweilige innere Definitionsstelle des Makros. Die Aufrufstellen besitzen nur generierte Auswahlbeschreibungen.
+
+### 17.4 Bevorzugte Form: normale oder `static inline`-Funktion
+
+Wenn ein Logging-Helfer keine echte Präprozessorfunktion benötigt, sollte er vorzugsweise als normale oder `static inline`-Funktion geschrieben werden. Für das vorherige Beispiel lautet die empfohlene Form:
+
+```c
+static inline void logError(int value)
+{
+ switch (value) {
+ case 0:
+ break;
+ case 7:
+ trice("cannot open file\n");
+ break;
+ default:
+ trice("error=%d", 8);
+ break;
+ }
+}
+
+void report(int status)
+{
+ logError(status);
+ logError(7);
+ logError(8);
+}
+```
+
+Die beiden Trice-Aufrufe stehen hier auf zwei eindeutigen physischen Zeilen innerhalb der Funktion. Sie verwenden den normalen File-Key-plus-`__LINE__`-Pfad. Die drei Aufrufstellen von `logError` benötigen weder lokale Counter-Scopes noch zusätzliche Begin-/End-Includes. Damit werden die von `trice bind` vorgenommenen Source-Insertionen und die Anzahl generierter Rebase-Hilfsheader minimiert. Auch ein Targetcompiler ohne `__COUNTER__` kann diese Konstruktion übersetzen.
+
+`static inline` bedeutet nicht, dass zwingend ein Funktionsaufruf zur Laufzeit entsteht. Übliche C- und C++-Compiler können die Funktion abhängig von Optimierung, Größe und Zielarchitektur direkt an der Aufrufstelle einfügen. Ob sie tatsächlich inlinen, bleibt eine Compilerentscheidung; die stabile Trice-ID hängt davon nicht ab.
+
+Bei einer Definition in einer Headerdatei gehört der Sidecar zum Header. Alle Translation Units verwenden dieselben beiden textuellen Trice-Stellen und damit dieselben stabilen IDs. Bei einer Definition in einer `.c`-Datei bleiben die Stellen entsprechend Eigentum dieser `.c`-Datei.
+
+Beim Umstellen eines Makros auf eine Funktion sind die normalen C/C++-Unterschiede zu beachten:
+
+- Funktionsargumente werden genau einmal ausgewertet und typgeprüft.
+- Ein Makro kann bewusst Tokens, Typnamen oder Compile-Time-Konfiguration verarbeiten; eine Funktion kann das nicht in jedem Fall ersetzen.
+- `return`, `break` oder lokale Deklarationen mit beabsichtigter Wirkung im aufrufenden Kontext dürfen nicht unbesehen aus einem Makro in eine Funktion übertragen werden.
+- Wenn die Aufrufstelle selbst als Log-Metadatum benötigt wird, verschiebt eine Funktion die Trice-Stelle definitionsgemäß in ihren eigenen Funktionskörper.
+
+Für gewöhnliche Helfer wie `LOG_ERROR(value)`, die lediglich anhand eines Wertes mehrere feste Trice-Meldungen auswählen, ist `static inline` die robusteste und einfachste Form. Ein Logging-Makro mit mehreren inneren Trices sollte nur verwendet werden, wenn seine Präprozessorsemantik tatsächlich erforderlich ist.
+
+### 17.5 Header und Translation Units
+
+Ist `LOG_ERROR` in `logging.h` definiert und wird aus mehreren `.c`-Dateien aufgerufen, bleiben seine Definitions-IDs in allen Translation Units identisch. Der Rebase für den Aufruf liegt in der jeweils aufrufenden Datei.
+
+Liegt dagegen der Wrapperaufruf oder eine Zeile mit mehreren direkten Trices selbst in einem Header, liegt auch der Rebase im Header. Dann benötigt jede Translation Unit, die genau diesen Headerbereich verarbeitet, `__COUNTER__`. Unbeteiligte Dateien und gewöhnliche Header werden dadurch nicht counter-abhängig. Der lokale Basiswert macht es unerheblich, wie viele Counterwerte vor dem Header verbraucht wurden.
+
+### 17.6 Kompakte Sourcegrenzen und generierte Hilfsheader
+
+Eine betroffene einzeilige Anweisung wird durch genau zwei eindeutig markierte Include-Zeilen umschlossen:
+
+```c
+#include "trice_module_c_K73A915E9C4021B8_R0_begin.h" // trice-bind: generated rebase begin K73A915E9C4021B8_R0
+trice("first"); trice("second");
+#include "trice_module_c_K73A915E9C4021B8_R0_end.h" // trice-bind: generated rebase end K73A915E9C4021B8_R0
+```
+
+Aus einer betroffenen Userzeile werden damit drei Sourcezeilen. Die früher direkt in der Source sichtbaren Scope-Definitionen, Phasenmakros und Aufräumanweisungen liegen vollständig in den beiden generierten Hilfsheadern unter `./build/triceIDs`. Die Begin-Datei erfasst die lokale Counterbasis und aktiviert die passende Auswahlbeschreibung. Die End-Datei prüft die verbrauchte Counteranzahl und stellt den normalen Bind-Pfad wieder her.
+
+Zwei unabhängige Zeilen bleiben zwei unabhängige Bereiche:
+
+```c
+#include "trice_module_c_K73A915E9C4021B8_R0_begin.h" // trice-bind: generated rebase begin K73A915E9C4021B8_R0
+trice("first"); trice("second");
+#include "trice_module_c_K73A915E9C4021B8_R0_end.h" // trice-bind: generated rebase end K73A915E9C4021B8_R0
+#include "trice_module_c_K73A915E9C4021B8_R1_begin.h" // trice-bind: generated rebase begin K73A915E9C4021B8_R1
+trice("third"); trice("fourth");
+#include "trice_module_c_K73A915E9C4021B8_R1_end.h" // trice-bind: generated rebase end K73A915E9C4021B8_R1
+```
+
+`trice bind` fasst diese Zeilen auch dann nicht zusammen, wenn sie unmittelbar aufeinanderfolgen. Der Gewinn von zwei eingesparten Include-Zeilen rechtfertigt nicht den vergrößerten Counter-Einflussbereich. Insbesondere soll ein fremdes Makro zwischen zwei Logzeilen niemals die Zuordnung beider Zeilen gemeinsam gefährden.
+
+Ein einzelner mehrzeiliger Wrapperaufruf wird dagegen als eine syntaktische Einheit umfasst:
+
+```c
+#include "trice_module_c_K73A915E9C4021B8_R2_begin.h" // trice-bind: generated rebase begin K73A915E9C4021B8_R2
+LOG_ERROR(
+ determineErrorCode(
+ fileHandle,
+ operation
+ )
+);
+#include "trice_module_c_K73A915E9C4021B8_R2_end.h" // trice-bind: generated rebase end K73A915E9C4021B8_R2
+```
+
+Die Grenze steht vor der ersten Zeile des Aufrufs und nach der Zeile mit seinem Semikolon. Innerhalb der offenen Argumentliste wird keine Direktive eingefügt. Enthält dieser minimale Bereich selbst eine Präprozessordirektive, eine zusätzliche nicht zuordenbare Trice-Stelle auf einer Grenzzeile oder eine nicht sicher begrenzbare `__COUNTER__`-Expansion, lehnt `trice bind` die Stelle ab und verändert keine regulären Ausgabedateien.
+
+Ein Rebase über eine ganze Funktion, mehrere unabhängige Statements oder die gesamte Datei wird bewusst nicht erzeugt. Technisch könnte ein solcher Bereich funktionieren, solange exakt die erwarteten Trice-Makros und keine andere Expansion `__COUNTER__` verbrauchen. Praktisch wächst mit jeder eingeschlossenen Zeile die Abhängigkeit von fremden Makros, Buildkonfigurationen und bedingter Übersetzung. Die minimale Klammerung begrenzt einen möglichen Fehler auf genau eine Quellstelle, und die Abschlussprüfung macht eine Abweichung zu einem Compilerfehler statt zu einer still falschen ID.
+
+Die Include-Zeilen und Hilfsheader sind zusammengehörige Generatorartefakte. Sie dürfen nicht verschoben, umbenannt, geteilt oder einzeln gelöscht werden. Nach relevanten Sourceänderungen muss erneut `trice bind` laufen; der Generator validiert vorhandene Artefakte und aktualisiert Sourcegrenzen, Hilfsheader, Deskriptoren, IDs und Location Information transaktional. Fehlende Hilfsheader kann ein erneuter Bind-Lauf wiederherstellen. Veränderte Hilfsheader werden nicht still überschrieben, sondern mit einer Diagnose zurückgewiesen. Nicht mehr benötigte Hilfsheader werden entfernt.
+
+Ältere, mehrzeilige Rebase-Blöcke aus einer vorherigen Generatorversion werden weiterhin erkannt. Ein erfolgreicher neuer Bind-Lauf ersetzt sie durch die kompakten Include-Grenzen.
+
+### 17.7 Fehlendes `__COUNTER__`
+
+Nur der betroffene Rebase-Bereich enthält einen Capability-Guard. Fehlt `__COUNTER__`, stoppt der Targetcompiler mit einer Meldung, die ausdrücklich darauf hinweist, dass normale Bind-Stellen nicht betroffen sind.
+
+Die vorgesehenen Auswege sind:
+
+- einen gewöhnlichen Logging-Helfer bevorzugt als normale oder `static inline`-Funktion formulieren,
+- mehrere direkte Trice-Aufrufe auf getrennte physische Zeilen verteilen,
+- falls die Makroform unverzichtbar ist, einen Targetcompiler mit `__COUNTER__` oder den Workflow `trice insert`/`trice clean` verwenden.
+
+Für häufig aufgerufene `LOG_ERROR`-ähnliche Helfer ist die `static inline`-Form besonders empfehlenswert: Eine einzige Funktionsdefinition ersetzt Rebase-Includes und Hilfsheader an jeder einzelnen Aufrufstelle.
+
+Compile-Time-Prüfungen erkennen außerdem zusätzlichen Counterverbrauch innerhalb der Region, eine falsche Expansionsanzahl und fehlende generierte Deskriptoren. Solche Abweichungen brechen den Build ab, statt still eine andere ID auszuwählen.
+
+### 17.8 Unveränderte Schnittstellen
+
+Der Rebase erzeugt keinen veränderlichen Laufzeitzustand, keine dynamische Allokation und keine Runtime-ID-Tabelle. `til.json`, `li.json`, das Trice-Drahtformat, Decoder und öffentliche CLI-Optionen bleiben unverändert.
+
+`TRICE_CLEAN=1` und `TRICE_OFF=1` deaktivieren die Trice-Makros weiterhin vollständig. Generierte Rebase-Hilfsheader werden in diesen Buildmodi ohne Counterprüfung verarbeitet, sodass ein deaktivierter Build auch für eine ansonsten counter-pflichtige Datei kein `__COUNTER__` benötigt.
+
+## 18. Unterstützte Grenzen und verbleibende Einschränkungen
+
+Unterstützt werden ID-freie Trice-Aufrufe mit statisch direkt erkennbarem Formatstring sowie gewöhnliche funktionsartige Statement-Makros mit einem oder mehreren direkten Trice-Aufrufen. Ein einzelner Wrapperaufruf darf über mehrere physische Zeilen geschrieben sein, wenn sein vollständiger Bereich bis zum Semikolon eindeutig und sicher umschließbar ist.
+
+In einem counter-selektierten Bereich werden weiterhin mit präziser Diagnose abgelehnt:
+
+- `id(0)`, `Id(0)` oder `ID(0)` und explizite IDs größer null,
+- verschachtelte oder rekursive Logging-Wrapper,
+- Token-Pasting im Wrapper,
+- Stringification zur Erzeugung oder Veränderung des Formatstrings,
+- dynamisch zusammengesetzte Formatstrings,
+- indirekte Umdefinitionen von Trice-Makros,
+- expliziter oder nicht sicher begrenzbarer zusätzlicher `__COUNTER__`-Verbrauch,
+- Präprozessordirektiven innerhalb eines mehrzeiligen Wrapperaufrufs,
+- weitere Trice- oder Wrapperstellen auf einer physischen Grenzzeile eines mehrzeiligen Aufrufs,
+- syntaktisch nicht sicher umschließbare Ausdruckskontexte und Kontrollflussfortsetzungen über physische Zeilengrenzen,
+- widersprüchliche Wrapperdefinitionen, für die keine eindeutige gemeinsame Semantik ermittelt werden kann.
+
+Null-Platzhalter auf gewöhnlichen, zeilenweise eindeutigen Bind-Stellen bleiben wie im MVP unterstützt. Formatstrings müssen weiterhin im Umfang des gemeinsamen Insert-/Bind-Parsers statisch erkennbar sein.
+
+`trice bind` führt bei einer nicht unterstützten Stelle keinen stillen Insert-Fallback aus und schreibt keine numerische ID in den User-Trice-Aufruf.
+
+## 19. Diagnosen und Fehlerbehebung
+
+### Sidecar nicht gefunden
+
+Prüfen:
+
+- wurde `trice bind` nach der letzten Sourceänderung ausgeführt,
+- existiert `./build/triceIDs`,
+- ist der Ordner im Compiler-Include-Pfad,
+- stimmt der Sidecar-Name in der Include-Zeile.
+
+### File-Key-Konflikt
+
+Typische Ursache: Eine Source wurde einschließlich ihrer Sidecar-Include-Zeile kopiert.
+
+Lösung: Bei einer Kopie den eigenen Sidecar-Include entfernen und `trice bind` erneut ausführen, damit ein neuer Key erzeugt wird.
+
+### Datei ist `mixed`
+
+Entweder:
+
+- `trice clean` für diese Datei beziehungsweise den verwalteten Umfang ausführen und anschließend binden,
+- oder alle Trice-Aufrufe dieser Datei im Inserted-Workflow belassen.
+
+### Bind-Include steht falsch
+
+Der Sidecar muss aktiv sein, wenn die direkten Trice-Aufrufe der physischen Datei expandiert werden. Insbesondere können später inkludierte Header einen anderen File Key aktivieren.
+
+### Nach Sourceänderung unerwartete Meldung
+
+`trice bind` erneut ausführen. Die Zeilennummer ist Teil des buildlokalen Site-Namens.
+
+### Erweiterte Konstruktion benötigt `__COUNTER__`
+
+Der Compiler verarbeitet einen generierten Rebase-Bereich, stellt aber kein `__COUNTER__` bereit. Nur diese Sourcekonstruktion ist betroffen. Verwende einen der in Abschnitt 17.7 beschriebenen Auswege oder einen Targetcompiler mit lokaler Counter-Unterstützung.
+
+### Counter-Anzahl oder Rebase-Deskriptor stimmt nicht
+
+Der Build verwendet veraltete oder manuell veränderte Generatorartefakte, oder innerhalb der Region expandiert zusätzlicher Counterverbrauch. Generierte Include-Grenzen und Hilfsheader nicht manuell reparieren, sondern die Sourcekonstruktion prüfen und `trice bind` erneut ausführen.
+
+## 20. Ergebnis
+
+Mit `trice bind` bleiben bind-verwaltete User-Trice-Aufrufe frei von numerischen IDs. Die stabile ID-Wahrheit bleibt in `til.json` und `li.json`; ein reproduzierbarer Sidecar übergibt die ID als Compile-Time-Konstante an den bestehenden Trice-Transportpfad. Eindeutige Stellen nutzen weiterhin den bisherigen Zeilenpfad, während nur mehrdeutige Bereiche lokal und compile-time-geprüft rebased werden.
+
+---
+
+## Anhang A: Präprozessor-Grundmechanik
+
+### A.1 Lokaler Insert-/Bind-Dispatch
+
+Ein einfaches `#ifdef TRICE_BIND_FILE_KEY` beim Einlesen von `trice.h` genügt nicht, weil der Sidecar typischerweise erst später inkludiert wird.
+
+Stattdessen wird die Auswahl an der tatsächlichen Aufrufstelle expandiert:
+
+```c
+#define TRICE_BIND_ROUTE_TRICE_BIND_FILE_KEY INSERT
+#define TRICE_BIND_ROUTE_I(key) TRICE_BIND_ROUTE_##key
+#define TRICE_BIND_ROUTE(key) TRICE_BIND_ROUTE_I(key)
+
+#define TRICE_DISPATCH_I(route, ...) TRICE_ROUTE_##route(__VA_ARGS__)
+#define TRICE_DISPATCH(route, ...) TRICE_DISPATCH_I(route, __VA_ARGS__)
+
+#define trice(...) TRICE_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), __VA_ARGS__)
+```
+
+Ohne aktiven Sidecar bleibt `TRICE_BIND_FILE_KEY` als Token stehen:
+
+```text
+TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY)
+→ TRICE_BIND_ROUTE_TRICE_BIND_FILE_KEY
+→ INSERT
+```
+
+Mit aktivem Sidecar:
+
+```c
+#define TRICE_BIND_FILE_KEY K73A915E9C4021B8
+#define TRICE_BIND_ROUTE_K73A915E9C4021B8 BIND
+```
+
+expandiert:
+
+```text
+TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY)
+→ TRICE_BIND_ROUTE(K73A915E9C4021B8)
+→ TRICE_BIND_ROUTE_K73A915E9C4021B8
+→ BIND
+```
+
+### A.2 Site-Deskriptor
+
+Der Site-Name entsteht aus File Key und `__LINE__`:
+
+```c
+#define TRICE_BIND_SITE_I(key, line) TRICE_BIND_SITE_##key##_L##line
+#define TRICE_BIND_SITE(key, line) TRICE_BIND_SITE_I(key, line)
+#define TRICE_BIND_SITE_HERE() TRICE_BIND_SITE(TRICE_BIND_FILE_KEY, __LINE__)
+```
+
+Ein Deskriptor:
+
+```c
+#define TRICE_BIND_SITE_K73A915E9C4021B8_L10 TRICE_BIND_REPLACE, id(12346u)
+```
+
+liefert sowohl die Operation als auch den vollständigen TID-Ausdruck.
+
+`TRICE_BIND_AUTO` fügt den TID ein. `TRICE_BIND_REPLACE` verwirft ein vorhandenes `id(0)`, `Id(0)` oder `ID(0)` und verwendet den gebundenen TID.
+
+Die Mechanismen wurden in unabhängigen PoCs unter folgendem Repositorypfad verifiziert:
+
+```text
+experiments/TriceBind/30_Preprocessor_Verification
+```
+
+---
+
+## Anhang B: Hintergrund – stabile ID-Vergabe und Bindung
+
+Die Entwicklung von `trice bind` beruht auf der Trennung zweier Aufgaben.
+
+### B.1 Stabile ID-Zuordnung
+
+Die erste Aufgabe lautet:
+
+```text
+logische Trice-Stelle → stabile numerische ID
+```
+
+Sie umfasst:
+
+- Wiedererkennung bekannter Stellen,
+- Vergabe neuer IDs,
+- ID-Bereiche und Policy,
+- Pflege von `til.json` und `li.json`,
+- langfristige Decodierbarkeit.
+
+Diese persistente Zuordnung muss nicht im Sourcecode stehen.
+
+### B.2 Übertragung in den Targetcode
+
+Die zweite Aufgabe lautet:
+
+```text
+stabile numerische ID → Targetcode
+```
+
+`trice insert` löst sie durch eine numerische ID im User-Trice-Aufruf. `trice bind` löst sie durch einen generierten Sidecar und standardisierte Präprozessormittel.
+
+Nach der Präprozessorauflösung sieht der Compiler ebenfalls eine normale Konstante. Dadurch entstehen:
+
+- kein Runtime-Lookup,
+- keine Target-Stringsuche,
+- keine zusätzliche Mappingtabelle,
+- keine Änderung des Drahtformats.
+
+### B.3 Warum der Source-Scan maßgeblich bleibt
+
+`trice bind` scannt die nicht präprozessierten Projektquellen. Dadurch können auch Stellen in aktuell inaktiven `#if`-Zweigen eine stabile ID behalten.
+
+Das ist für ID-Stabilität vorteilhaft: Ein Wechsel der Buildkonfiguration entfernt nicht die persistente Identität der Logstelle.
+
+Eine spätere Analyse der aktiven Konfiguration oder des finalen Images wäre eine zusätzliche Berichtsfunktion. Sie ist nicht für das Binding erforderlich.
+
+### B.4 Anforderungen, die der Sidecar-Ansatz erfüllt
+
+Der gewählte Ansatz verbindet:
+
+- ID-freie bind-verwaltete Userquellen,
+- stabile IDs und bestehende ID-Policy,
+- kumulative `til.json` und `li.json`,
+- unmittelbare Compile-Time-Konstanten,
+- portable C/C++-Präprozessormechanik,
+- direkte Compilation der Originalquellen,
+- keine buildspezifische ELF-Pflicht zur späteren Decodierung.
+
+Der frühere eigenständige Architekturtext „Trice-IDs ohne Sourcecode-Patching“ ist durch die Generator-Spezifikation und dieses User Manual ersetzt. Seine weiterhin gültigen Kernaussagen sind in diesem Anhang zusammengefasst.
+
+---
+
+## Anhang C: `TRICE_CLEAN`-Zustände im Überblick
+
+| Zustand | `TRICE_CLEAN` | Eigener Sidecar aktiv | Wirkung |
+|---|---:|---:|---|
+| Inserted | nicht definiert oder `0` | nein | Explizite TIDs aus dem Source |
+| Bound | nicht definiert oder `0` | ja | TIDs aus dem Sidecar |
+| Clean/Off | `1` | unerheblich | Bisheriger Clean-/Off-Pfad |
+
+Werkzeugwirkung bei vorhandener Definition:
+
+| Werkzeug | Wirkung auf `TRICE_CLEAN` |
+|---|---:|
+| `trice insert` | setzt auf `0` |
+| `trice clean` | setzt auf `1` |
+| `trice bind` | setzt auf `0` |
+
+Fehlt die Definition, fügt `trice bind` sie nicht neu ein.
+
+---
+
+## Anhang D: Unverändert übernommene Architekturentscheidung gegen ELF-Patching
+
+Der folgende Text ist unverändert aus `Trice_bind_vs_ELF_Patch.md` übernommen. Er dokumentiert die Architekturentscheidung. Einzelne Beispielnamen spiegeln den damaligen Entwurfsstand wider; für das aktuelle normative Verhalten sind der Hauptteil dieses User Manuals und [`Trice_bind_10_MVP_Spezifikation.md`](./Trice_bind_10_MVP_Spezifikation.md) maßgeblich.
+
+
+
+## Architekturentscheidung: `trice bind` statt einer ELF-Patch-Lösung
+
+### 1. Zweck dieses Dokuments
+
+Dieses Dokument begründet die Entscheidung, stabile Trice-IDs mit `trice bind` und generierten Sidecar-Headern in den Targetcode einzubringen. Als Alternative wurde eine ELF-basierte Patch- beziehungsweise Link-Lösung untersucht.
+
+Die Entscheidung betrifft ausschließlich den Mechanismus, mit dem eine bereits bestimmte Trice-ID den Compiler beziehungsweise den finalen Targetcode erreicht. Die bestehende dauerhafte ID-Verwaltung mit `til.json` und `li.json` bleibt unverändert.
+
+### 2. Anforderungen
+
+Der Bindungsmechanismus soll:
+
+- stabile IDs aus `til.json` und `li.json` verwenden,
+- keine numerischen IDs in Trice-Aufrufen des Users erfordern,
+- die Originalquellen direkt kompilieren,
+- keinen zusätzlichen Runtime-Lookup im Target benötigen,
+- das bestehende Trice-Drahtformat unverändert lassen,
+- historische Logs ohne das zum Build gehörende ELF decodierbar halten,
+- mit unterschiedlichen C- und C++-Toolchains verwendbar sein,
+- inkrementelle Builds nicht unnötig vergrößern,
+- verständliche und reproduzierbare Buildartefakte erzeugen.
+
+### 3. MVP von `trice bind`
+
+#### 3.1 Grundprinzip
+
+Der User schreibt eine ID-lose Trice-Logstelle:
+
+```c
+trice("msg:module initialized\n");
+```
+
+`trice bind` scannt die nicht präprozessierten Quelldateien, ordnet jeder unterstützten Logstelle eine stabile ID aus `til.json` und `li.json` zu und erzeugt pro Datei einen Sidecar-Header.
+
+Für eine Quelldatei `module.c` kann die dauerhaft im Usercode gespeicherte Include-Zeile beispielsweise lauten:
+
+```c
+#include "trice_module_c_F73A915E9C4021B8.h" // trice-bind
+```
+
+`F73A915E9C4021B8` ist ein einmalig erzeugter zufälliger 64-Bit-Dateischlüssel, dargestellt als mit `F` beginnendes Präprozessortoken. Er identifiziert die Datei unabhängig von ihrem Pfad und unterscheidet auch gleichnamige Dateien sicher voneinander. Der Dateischlüssel ist keine Trice-ID, wird nicht zum Target übertragen und belegt dort keinen Speicher.
+
+Der generierte Header enthält beispielsweise:
+
+```c
+#undef TRICE_FILE_KEY
+#define TRICE_FILE_KEY F73A915E9C4021B8
+
+#define TRICE_ID_F73A915E9C4021B8_L9 12345u // trice("msg:module initialized\n")
+```
+
+Die Trice-Makros kombinieren den aktuellen `TRICE_FILE_KEY` mit dem standardisierten Präprozessormakro `__LINE__`. Der Compiler sieht dadurch letztlich eine gewöhnliche ganzzahlige Konstante.
+
+#### 3.2 Warum ein dateilokales Include erforderlich ist
+
+Alle in einer Translation Unit verarbeiteten Sidecars teilen denselben Makronamensraum. Der 64-Bit-Dateischlüssel verhindert Kollisionen zwischen ihren ID-Definitionen. Zusätzlich muss für jeden direkten Trice-Aufruf bekannt sein, zu welcher Datei dessen Zeilennummer gehört.
+
+Eine zentrale Einbindung aller Sidecars, beispielsweise in `triceConfig.h`, stellt zwar alle ID-Makros bereit, wählt aber nicht den zu einer konkreten Logstelle gehörenden Dateischlüssel aus. Der C-Präprozessor kann aus dem Stringliteral `__FILE__` keinen passenden Makronamen ableiten.
+
+Deshalb setzt der Sidecar jeder Datei unmittelbar vor deren eigenen Trice-Logstellen den aktuellen `TRICE_FILE_KEY`. Das dateilokale Include ist nicht nur ein Ablageort für Definitionen, sondern Teil der eindeutigen Auswahl von `Datei + Zeile`.
+
+#### 3.3 Sidecar-Verzeichnis und Dateinamen
+
+Alle Sidecars können in einem einzigen Buildverzeichnis liegen, beispielsweise:
+
+```text
+build/triceIDs/
+```
+
+Der Build benötigt dafür nur einen zusätzlichen Include-Pfad. Der Basisname im Sidecar-Namen verbessert die Lesbarkeit; die Eindeutigkeit liefert der Dateischlüssel:
+
+```text
+trice_module_c_F73A915E9C4021B8.h
+trice_module_c_F88217D4AC101E62.h
+trice_module_h_F1111111111111111.h
+```
+
+Eine Abbildung der vollständigen Source-Verzeichnisstruktur unterhalb von `build/` ist nicht erforderlich.
+
+#### 3.4 Persistenz und Prüfung des Dateischlüssels
+
+Der Dateischlüssel wird in der versionsverwalteten Include-Zeile der Userdatei gespeichert. Dadurch bleibt er erhalten, wenn das Buildverzeichnis gelöscht oder die Datei verschoben wird.
+
+64 Bit sind hierfür ausreichend. Zusätzlich prüft `trice bind`, dass innerhalb eines Projekts kein Schlüssel mehreren unterschiedlichen Dateien zugeordnet ist. Dadurch werden sowohl eine extrem unwahrscheinliche Zufallskollision als auch ein durch Kopieren einer Quelldatei duplizierter Schlüssel eindeutig erkannt.
+
+#### 3.5 Einmaliges Einfügen des Includes
+
+Fehlt der Sidecar-Include, fügt `trice bind` ihn einmalig anhand einer Heuristik an einer wahrscheinlich geeigneten Stelle ein. Bevorzugt wird eine Position:
+
+- nach den für die Datei wirksamen normalen Includes,
+- vor der ersten direkten Trice-Logstelle der Datei,
+- innerhalb eines vorhandenen Include-Guards bei Headerdateien.
+
+Die Position lässt sich ohne vollständige Auswertung aller Präprozessorbedingungen nicht in jedem C- oder C++-Programm sicher bestimmen. Bedingte Includes können eine eindeutige automatische Platzierung verhindern. Daher gilt:
+
+- Ein bereits vorhandener korrekter Include wird nicht verschoben.
+- Eine automatisch eingefügte Zeile ist klar mit `// trice-bind` markiert.
+- `trice bind` prüft die strukturelle Plausibilität.
+- Bei unsicherer oder widersprüchlicher Struktur erhält der User eine konkrete Diagnose und verschiebt die markierte Zeile bei Bedarf.
+
+Die einmalige Include-Ergänzung ist keine wiederkehrende Instrumentierung. Im normalen Build werden Userquellen nicht verändert.
+
+#### 3.6 Headerdateien und `static inline`
+
+Headerdateien mit direkten Trice-Aufrufen erhalten einen eigenen Dateischlüssel und Sidecar. Das gilt auch für Trice-Aufrufe innerhalb von `static inline`-Funktionen.
+
+Beispiel:
+
+```c
+#ifndef MODULE_H
+#define MODULE_H
+
+#include "dependency.h"
+#include "trice_module_h_F1111111111111111.h" // trice-bind
+
+static inline void moduleCheck(int value)
+{
+ trice("msg:value=%d\n", value);
+}
+
+#endif
+```
+
+Nach der Verarbeitung dieses Headers setzt der Sidecar der einbindenden `.c`-Datei deren eigenen `TRICE_FILE_KEY`. Dadurch bleiben Logstellen aus Header und Quelldatei kollisionsfrei.
+
+#### 3.7 MVP-Einschränkungen
+
+Das MVP unterstützt direkte Trice-Aufrufe in `.c`-, `.cc`-, `.cpp`- und Headerdateien sowie in normalen und `static inline`-Funktionen.
+
+Nicht unterstützt werden zunächst:
+
+- mehrere Trice-Aufrufe in derselben physischen Sourcezeile,
+- Trice-Aufrufe innerhalb einer Präprozessormakrodefinition, beispielsweise:
+
+```c
+#define LOG_ERROR(x) trice("error=%d\n", x)
+```
+
+Bei einem Trice-Aufruf in einer Makrodefinition werden `__LINE__` und der aktuelle Dateischlüssel erst bei der späteren Makroexpansion ausgewertet. Damit beschreiben sie die Aufrufstelle und nicht zuverlässig die Definitionsstelle. Eine einfache Bindung über `Datei + Zeile` ist dafür nicht ausreichend.
+
+`trice bind` meldet solche Konstruktionen im MVP als Fehler. Bestehende Projekte, die darauf angewiesen sind, verwenden weiterhin `trice insert`.
+
+### 4. Untersuchte ELF-Patch-Lösung
+
+Bei einer ELF-basierten Lösung würden Trice-Makros während der Compilation zusätzliche Metadaten und bindbare ID-Platzhalter in Objektdateien erzeugen. Ein späteres Werkzeug müsste diese Informationen auswerten und die endgültigen IDs durch Relocations, zusätzliche Linkobjekte oder direktes Patchen des Objekt- beziehungsweise Imagecodes einsetzen.
+
+Eine solche Lösung benötigt mindestens:
+
+- ein definiertes Metadatenformat in Objektsektionen,
+- pro Logstelle einen eindeutig identifizierbaren Platzhalter,
+- Unterstützung der jeweiligen ELF- und Relocation-Varianten,
+- Kenntnis von Zielarchitektur und ABI,
+- abgestimmtes Verhalten mit Linker, Section Garbage Collection und LTO,
+- Behandlung von Objektarchiven und nur teilweise übernommenen Archivmitgliedern,
+- separate Lösungen für Toolchains, die ELF nicht oder anders verwenden.
+
+Auch eine ELF-Lösung benötigt vorbereitete Trice-Makros beziehungsweise vorbereitete Libraries. Aus einer beliebigen bereits kompilierten `.a`-Datei lassen sich weder die vollständigen Trice-Metadaten noch sicher patchbare ID-Stellen rekonstruieren.
+
+### 5. Vergleich der beiden Ansätze
+
+| Kriterium | `trice bind` MVP | ELF-Patch-Lösung |
+|---|---|---|
+| Numerische IDs im Trice-Aufruf | nein | nein |
+| Originalquellen werden kompiliert | ja | ja |
+| Stabile IDs im Targetcode | direkt als C-Konstanten | durch zusätzlichen Patch-/Linkschritt |
+| Runtime-Lookup im Target | nein | nicht erforderlich, aber designspezifisch |
+| Änderung des Drahtformats | nein | nein, falls entsprechend implementiert |
+| Buildspezifisches ELF zur Logdecodierung | nein | nur vermeidbar, wenn endgültige stabile IDs sauber gebunden werden |
+| Abhängigkeit von ELF und Relocations | nein | ja |
+| Abhängigkeit von Zielarchitektur und ABI | nein | ja |
+| Abhängigkeit von Linker und LTO-Verhalten | nein | ja |
+| Verwendete Sprachmechanismen | standardisierte C/C++-Präprozessorregeln, `__LINE__`, `##` | Compiler-, Objektformat- und Linkermechanismen |
+| Verständlichkeit der Zwischenartefakte | einfache generierte Header | Objektsektionen, Symbole und Relocations |
+| Inkrementeller Build | betroffene Translation Unit über ihren Sidecar | abhängig von Patch- und Linkablauf |
+| Zusätzlicher Include im Usercode | ja | nein |
+
+Für das normale Sourceprojekt besteht der verbleibende allgemeine Vorteil der ELF-Lösung damit im Wesentlichen darin, dass kein dateilokaler Sidecar-Include erforderlich wäre. Dieser Komfortgewinn steht einer wesentlich größeren Toolchain- und Implementierungskomplexität gegenüber.
+
+### 6. Prüfung der scheinbaren ELF-Vorteile
+
+#### 6.1 Vorkompilierte statische Libraries
+
+Eine vorbereitete `.a`-Library kann später unterstützt werden, ohne den normalen Sidecar-Mechanismus zu ersetzen. Die Library müsste beim eigenen Build pro Trice-Stelle Metadaten und einen bindbaren ID-Platzhalter erzeugen. `trice bind` könnte diese Informationen beim Produkt-Build lesen, freie oder neue IDs bestimmen, `til.json` und `li.json` ergänzen und ein zusätzliches Bindeartefakt für den finalen Link erzeugen.
+
+Der Gewinn wäre die nachträgliche Einordnung vorbereiteter Libraries in den stabilen ID-Raum des Endprodukts.
+
+Diese Funktion kann ELF intern verwenden, ist aber eine additive Library-Erweiterung. Sie erfordert keine ELF-basierte Behandlung normaler Userquellen und ist deshalb kein eigenständiger Vorteil einer allgemeinen ELF-Patch-Architektur.
+
+#### 6.2 Erfassung inaktiver Logstellen
+
+Das MVP scannt die nicht präprozessierten Quellen. Dadurch werden auch Logstellen in aktuell inaktiven `#if`-Zweigen erfasst. Das ist für stabile IDs erwünscht: Eine Logstelle verliert ihre Zuordnung nicht, nur weil eine bestimmte Buildkonfiguration sie vorübergehend deaktiviert.
+
+Eine ELF-Datei enthält dagegen nur Code, der mindestens bis zur Objekt- oder Linkphase gelangt ist. Sie ist daher nicht die geeignete Quelle für die vollständige, konfigurationsunabhängige ID-Inventur.
+
+#### 6.3 Aktive Logstellen einer Buildkonfiguration
+
+Falls zusätzlich die in einer konkreten Konfiguration aktiven Logstellen bestimmt werden sollen, kann später der reale Präprozessor mit den Defines und Include-Pfaden dieses Builds ausgeführt werden.
+
+Dafür werden benötigt:
+
+- die tatsächlichen Präprozessoroptionen jeder Translation Unit,
+- Include-Pfade und Defines,
+- gegebenenfalls eine `compile_commands.json` oder eine vergleichbare Buildbeschreibung,
+- eine Zuordnung der präprozessierten Stellen zu den stabilen IDs.
+
+Der Gewinn ist ein Bericht über die aktive Teilmenge. Die ID-Vergabe und das Sidecar-Binding ändern sich dadurch nicht.
+
+#### 6.4 Tatsächlich im finalen Image enthaltene Logstellen
+
+Eine aktive Logstelle kann durch Optimierung, LTO, Section Garbage Collection oder Nichtauswahl eines Archivmitglieds aus dem finalen Image verschwinden. Falls eine exakte Image-Inventur benötigt wird, kann später das fertige ELF oder eine Link-Map ausgewertet werden.
+
+Dafür werden benötigt:
+
+- ein identifizierbarer Bezug zwischen finalem Code und Trice-ID,
+- eine toolchainspezifische ELF- oder Map-Auswertung,
+- Berücksichtigung von LTO und Linkeroptimierungen.
+
+Der Gewinn ist ein exakter Bericht über die im konkreten Image verbleibende Teilmenge. Auch diese Analyse verändert weder die ID-Zuordnung noch das Sidecar-Binding.
+
+Die drei Mengen sind daher klar getrennt:
+
+```text
+alle textuell vorhandenen Logstellen
+ ⊇ in einer Konfiguration aktive Logstellen
+ ⊇ im finalen Image enthaltene Logstellen
+```
+
+Nur die erste Menge ist für die stabile ID-Vergabe des MVP erforderlich.
+
+#### 6.5 Makroexpansion und Stringerzeugung
+
+Trice setzt statische, direkt erkennbare Formatstrings voraus. Die Erzeugung verschiedener Formatstrings durch Präprozessorverkettung ist nicht vorgesehen. Variable Inhalte werden als Parameter übertragen, beispielsweise mit einer Stringvariante von Trice.
+
+Damit entfällt die Notwendigkeit, einzelne expandierte Formatstringvarianten erst im Objektcode zu unterscheiden. Auch daraus entsteht kein relevanter ELF-Vorteil.
+
+### 7. Zukünftige additive Erweiterungen
+
+Die folgenden Funktionen sind ausdrücklich nicht Teil des MVP. Sie können später ergänzt werden, ohne das Sidecar-Grundmodell zu verändern.
+
+#### 7.1 Analyse der aktiven Konfiguration
+
+**Erforderlich:** Aufruf des realen Präprozessors mit den Buildoptionen jeder Translation Unit.
+
+**Gewinn:** Bericht, welche der bereits gebundenen Logstellen in einer konkreten Konfiguration aktiv sind.
+
+#### 7.2 Post-Link-Image-Inventur
+
+**Erforderlich:** ELF- oder Link-Map-Auswertung und toolchainspezifische Zuordnung zu Trice-IDs.
+
+**Gewinn:** Exakte Liste der im finalen Image enthaltenen Logstellen.
+
+#### 7.3 Vorbereitete `.a`-Libraries
+
+**Erforderlich:** Libraryseitige Metadaten und bindbare ID-Platzhalter sowie ein zusätzliches Bindeartefakt für den finalen Link.
+
+**Gewinn:** Nachträgliche Vergabe stabiler IDs aus dem ID-Raum des Endprodukts, ohne die Library aus ihren Quellen neu zu binden.
+
+#### 7.4 Mehrere Trice-Aufrufe pro Sourcezeile
+
+**Erforderlich:** Ein zusätzlicher stabiler Auftretensindex oder ein geeignetes, ausreichend portables Zählerverfahren.
+
+**Gewinn:** Unterstützung eines derzeit unnötigen, aber syntaktisch möglichen Codestils.
+
+#### 7.5 Trice-Aufrufe in Makrodefinitionen
+
+**Erforderlich:** Eine festgelegte Semantik für Definitions- oder Aufrufstellen-IDs und ein zusätzlicher Mechanismus, beispielsweise selektives `trice insert`, explizite Wrapperkennungen oder eine Präprozessoranalyse.
+
+**Gewinn:** Migration bestehender Wrappermakros zu einem gemischten Workflow.
+
+Diese Erweiterungen ergänzen das MVP. Keine davon erfordert, normale Userquellen auf eine allgemeine ELF-Patch-Lösung umzustellen.
+
+### 8. Entscheidung
+
+Für normale C- und C++-Quellen wird `trice bind` mit dateilokalen Sidecar-Headern verfolgt. Eine allgemeine ELF-Patch-Lösung wird nicht weiterverfolgt.
+
+Die Entscheidung beruht auf folgenden technischen Punkten:
+
+1. Das MVP bindet stabile IDs mit standardisierten C/C++-Präprozessormitteln als Compile-Time-Konstanten.
+2. Es benötigt weder ELF-Kenntnis noch Architektur-, ABI-, Relocation- oder Linkerlogik.
+3. `til.json` und `li.json` bleiben die dauerhafte und buildsübergreifende ID-Wahrheit.
+4. Historische Logs bleiben ohne das zugehörige ELF decodierbar.
+5. Gleichnamige Dateien und Headerlogstellen werden durch stabile 64-Bit-Dateischlüssel eindeutig behandelt.
+6. Die Originalquellen werden direkt gebaut; nur ein einmalig eingefügter Sidecar-Include bleibt im Usercode.
+7. Die scheinbaren funktionalen Vorteile der ELF-Lösung lassen sich bei Bedarf als additive Analysen oder Spezialerweiterungen realisieren.
+8. Diese Erweiterungen verändern den MVP-Bindungsmechanismus nicht.
+9. Als allgemeiner ELF-Vorteil verbleibt im Wesentlichen der Wegfall eines dateilokalen Includes. Dieser Vorteil rechtfertigt die zusätzliche Toolchainkomplexität nicht.
+
+Die Architektur bleibt damit einfach: Source-Scan und stabile Datenbanken bestimmen die IDs, generierte Header stellen sie dem standardkonformen Präprozessor bereit, und der vorhandene Compiler erzeugt den Targetcode.
+
+
diff --git a/docs/TriceUserManual.md b/docs/TriceUserManual.md
index 210b1b5a9..57c2a577b 100644
--- a/docs/TriceUserManual.md
+++ b/docs/TriceUserManual.md
@@ -235,279 +235,346 @@ details.toc[open] .toc-hide {
* [23.1.4. Same IDs for different Trices](#same-ids-for-different-trices)
* [23.1.5. ID Routing](#id-routing)
* [23.1.6. Possibility to create new tags without modifying trice tool source](#possibility-to-create-new-tags-without-modifying-trice-tool-source)
-* [24. Trice version 1.0 Log-level Control](#trice-version-10-log-level-control)
- * [24.1. Trice version 1.0 Compile-time Log-level Control](#trice-version-10-compile-time-log-level-control)
- * [24.2. Trice version 1.0 Run-time Log-level Control](#trice-version-10-run-time-log-level-control)
- * [24.3. Trice Version 1.0 Compile-time - Run-time Log-level Control](#trice-version-10-compile-time---run-time-log-level-control)
-* [25. ID reference list til.json](#id-reference-list-tiljson)
- * [25.1. til.json Version control](#tiljson-version-control)
- * [25.2. Long Time Availability](#long-time-availability)
-* [26. The Trice Insert Algorithm](#the-trice-insert-algorithm)
- * [26.1. Starting Conditions](#starting-conditions)
- * [26.2. Aims](#aims)
- * [26.3. Method](#method)
- * [26.3.1. Trice Insert Initialization](#trice-insert-initialization)
- * [26.4. User Code Patching (trice insert)](#user-code-patching-trice-insert)
- * [26.5. User Code Patching Examples](#user-code-patching-examples)
- * [26.6. Exclude folders & files from being parsed (pull request 529)](#exclude-folders--files-from-being-parsed-pull-request-529)
- * [26.7. ID Usage Options](#id-usage-options)
- * [26.8. General ID Management Information](#general-id-management-information)
- * [26.8.1. Option Cleaning in a Post-build process](#option-cleaning-in-a-post-build-process)
- * [26.8.2. Option Let the inserted Trice ID be a Part of the User Code](#option-let-the-inserted-trice-id-be-a-part-of-the-user-code)
- * [26.8.3. Option Cleaning on Repository Check-In](#option-cleaning-on-repository-check-in)
-* [27. Trice Speed](#trice-speed)
- * [27.1. Target Implementation Options](#target-implementation-options)
- * [27.1.1. Trice Use Cases TRICESTATICBUFFER and TRICESTACKBUFFER - direct mode only](#trice-use-cases-tricestaticbuffer-and-tricestackbuffer---direct-mode-only)
- * [27.1.2. Trice Use Case TRICEDOUBLEBUFFER - deferred mode, fastest Trice execution, more RAM needed](#trice-use-case-tricedoublebuffer---deferred-mode-fastest-trice-execution-more-ram-needed)
- * [27.1.3. Trice Use Case TRICERINGBUFFER - deferred mode, balanced Trice execution time and needed RAM](#trice-use-case-triceringbuffer---deferred-mode-balanced-trice-execution-time-and-needed-ram)
- * [27.2. A configuration for maximum Trice execution speed with the L432inst example](#a-configuration-for-maximum-trice-execution-speed-with-the-l432inst-example)
- * [27.3. A configuration for normal Trice execution speed with the G0B1inst example](#a-configuration-for-normal-trice-execution-speed-with-the-g0b1inst-example)
-* [28. Trice memory needs](#trice-memory-needs)
- * [28.1. F030bare Size](#f030bare-size)
- * [28.2. F030inst Size with TRICEOFF=1](#f030inst-size-with-triceoff1)
- * [28.3. F030inst with ring buffer](#f030inst-with-ring-buffer)
- * [28.4. F030inst with ring buffer](#f030inst-with-ring-buffer-1)
- * [28.5. A developer setting, only enabling SEGGERRTT](#a-developer-setting-only-enabling-seggerrtt)
- * [28.6. A developer setting, only enabling SEGGERRTT and without deferred output gives after running ./build.sh TRICE_DIAGNOSTICS=0 TRICE_PROTECT=0:](#a-developer-setting-only-enabling-seggerrtt-and-without-deferred-output-gives-after-running-buildsh-trice_diagnostics0-trice_protect0)
- * [28.7. Settings Conclusion](#settings-conclusion)
- * [28.8. Legacy Trice Space Example (Old Version)](#legacy-trice-space-example-old-version)
- * [28.9. Memory Needs for Old Example 1](#memory-needs-for-old-example-1)
- * [28.10. Memory Needs for Old Example 2](#memory-needs-for-old-example-2)
-* [29. Trice Project Image Size Optimization](#trice-project-image-size-optimization)
- * [29.1. Code Optimization -o3 or -oz (if supported)](#code-optimization--o3-or--oz-if-supported)
- * [29.2. Compiler Independent Setting (a bit outdated)](#compiler-independent-setting-a-bit-outdated)
- * [29.3. Linker Option --split-sections (if supported)](#linker-option---split-sections-if-supported)
- * [29.4. Linker Optimization -flto (if supported)](#linker-optimization--flto-if-supported)
- * [29.4.1. ARMCC Compiler v5 Linker Feedback](#armcc-compiler-v5-linker-feedback)
- * [29.4.2. ARMCLANG Compiler v6 Link-Time Optimization](#armclang-compiler-v6-link-time-optimization)
- * [29.4.3. GCC](#gcc)
- * [29.4.4. LLVM ARM Clang](#llvm-arm-clang)
- * [29.4.5. Other IDE´s and compilers](#other-ides-and-compilers)
- * [29.5. Legacy STM32F030 Example Project - Different Build Sizes](#legacy-stm32f030-example-project---different-build-sizes)
- * [29.5.1. ARMCC compiler v5](#armcc-compiler-v5)
-* [30. Trice Tags and Color](#trice-tags-and-color)
- * [30.1. How to get](#how-to-get)
- * [30.1.1. Output options](#output-options)
- * [30.1.2. Check Alternatives](#check-alternatives)
- * [30.2. Color issues under Windows](#color-issues-under-windows)
-* [31. Trice without UART](#trice-without-uart)
-* [32. Trice over RTT](#trice-over-rtt)
- * [32.1. For the impatient (2 possibilities)](#for-the-impatient-2-possibilities)
- * [32.1.1. Start JLink commander and connect over TCP](#start-jlink-commander-and-connect-over-tcp)
- * [32.1.2. Start using JLinkRTTLogger](#start-using-jlinkrttlogger)
- * [32.1.3. JLinkRTTLogger Issue](#jlinkrttlogger-issue)
- * [32.2. Segger Real Time Transfer (RTT)](#segger-real-time-transfer-rtt)
- * [32.3. J-Link option](#j-link-option)
- * [32.3.1. Convert Evaluation Board onboard ST-Link to J-Link](#convert-evaluation-board-onboard-st-link-to-j-link)
- * [32.3.2. Some SEGGER tools in short](#some-segger-tools-in-short)
- * [32.3.3. JLinkRTTClient.exe](#jlinkrttclientexe)
- * [32.3.4. JLinkRTTViewer.exe](#jlinkrttviewerexe)
- * [32.4. Segger RTT](#segger-rtt)
- * [32.5. Segger J-Link SDK (800 EUR) Option](#segger-j-link-sdk-800-eur-option)
- * [32.6. Additional Notes (leftovers)](#additional-notes-leftovers)
- * [32.7. Further development](#further-development)
- * [32.8. NUCLEO-F030R8 example](#nucleo-f030r8-example)
- * [32.8.1. RTT with original on-board ST-LINK firmware](#rtt-with-original-on-board-st-link-firmware)
- * [32.8.2. Change to J-LINK onboard firmware](#change-to-j-link-onboard-firmware)
- * [32.8.3. RTT with J-LINK firmware on-board](#rtt-with-j-link-firmware-on-board)
- * [32.9. Possible issues](#possible-issues)
- * [32.10. OpenOCD with Darwin (macOS)](#openocd-with-darwin-macos)
- * [32.11. SEGGER J-Link on Darwin (macOS)](#segger-j-link-on-darwin-macos)
- * [32.12. Links](#links)
-* [33. Writing the Trice logs into an SD-card (or a user specific output)](#writing-the-trice-logs-into-an-sd-card-or-a-user-specific-output)
-* [34. Trice Target Code Implementation](#trice-target-code-implementation)
- * [34.1. TRICE Macro structure](#trice-macro-structure)
- * [34.1.1. TRICEENTER](#triceenter)
- * [34.1.2. TRICEPUT](#triceput)
- * [34.1.3. TRICELEAVE](#triceleave)
- * [34.2. TRICESTACKBUFFER](#tricestackbuffer)
- * [34.3. TRICESTATICBUFFER](#tricestaticbuffer)
- * [34.4. TRICEDOUBLEBUFFER](#tricedoublebuffer)
- * [34.5. TRICERINGBUFFER](#triceringbuffer)
- * [34.6. Deferred Out](#deferred-out)
- * [34.6.1. Double Buffer](#double-buffer)
- * [34.6.2. Ring Buffer](#ring-buffer)
- * [34.7. Direct Transfer](#direct-transfer)
- * [34.8. Possible Target Code Improvements](#possible-target-code-improvements)
-* [35. Trice Similarities and Differences to printf Usage](#trice-similarities-and-differences-to-printf-usage)
- * [35.1. Printf-like functions](#printf-like-functions)
- * [35.2. Trice IDs](#trice-ids)
- * [35.3. Trice values bit width](#trice-values-bit-width)
- * [35.4. Many value parameters](#many-value-parameters)
- * [35.5. Floating Point Values](#floating-point-values)
- * [35.6. Runtime Generated 0-terminated Strings Transfer with triceS](#runtime-generated-0-terminated-strings-transfer-with-trices)
- * [35.7. Runtime Generated counted Strings Transfer with triceN](#runtime-generated-counted-strings-transfer-with--tricen)
- * [35.8. Runtime Generated Buffer Transfer with triceB](#runtime-generated-buffer-transfer-with-triceb)
- * [35.9. Extended format specifier possibilities](#extended-format-specifier-possibilities)
- * [35.9.1. Trice format specifier](#trice-format-specifier)
- * [35.9.2. Length modifier support](#length-modifier-support)
- * [35.9.3. Overview Table](#overview-table)
- * [35.10. Unsupported printf format features](#unsupported-printf-format-features)
- * [35.10.1. Dynamic field width with *](#dynamic-field-width-with-)
- * [35.10.2. Dynamic precision with *](#dynamic-precision-with-)
- * [35.10.3. Dynamic width and precision together](#dynamic-width-and-precision-together)
- * [35.10.4. Wide character and wide string formats: %lc and %ls](#wide-character-and-wide-string-formats-lc-and-ls)
- * [35.10.5. The special %n conversion specifier](#the-special-n-conversion-specifier)
- * [35.10.6. Security implications of %n](#security-implications-of-n)
- * [35.10.7. Why Trice does not support %n](#why-trice-does-not-support-n)
- * [35.11. UTF-8 Support](#utf-8-support)
- * [35.12. Switch the language without changing a bit inside the target code](#switch-the-language-without-changing-a-bit-inside-the-target-code)
- * [35.13. Format tags prototype specifier examples](#format-tags-prototype-specifier-examples)
-* [36. Trice ABC - Asynchronous Broadcast Commands](#trice-abc---asynchronous-broadcast-commands)
- * [36.1. Quick use](#quick-use)
- * [36.2. ABC macro families](#abc-macro-families)
- * [36.3. Command names and handler names](#command-names-and-handler-names)
- * [36.4. Receiver selection and generated table](#receiver-selection-and-generated-table)
- * [36.5. Receive runtime contract](#receive-runtime-contract)
- * [36.6. Handler payload handling](#handler-payload-handling)
- * [36.7. Responses](#responses)
- * [36.8. What ABC is not](#what-abc-is-not)
- * [36.9. Example: examples/TriceAbc](#example-examplestriceabc)
- * [36.10. Host tests](#host-tests)
- * [36.11. Building RPC-like protocols on top](#building-rpc-like-protocols-on-top)
- * [36.12. Security boundary](#security-boundary)
- * [36.13. Summary](#summary-1)
-* [37. Development Environment Setup](#development-environment-setup)
- * [37.1. Common Information](#common-information-1)
- * [37.2. Important to know](#important-to-know)
- * [37.3. Animation](#animation)
- * [37.4. Setup Linux PC - Example with Debian12 - KDE Desktop](#setup-linux-pc---example-with-debian12---kde-desktop)
- * [37.4.1. Basic setup](#basic-setup)
- * [37.4.2. GitHub](#github)
- * [37.4.3. VS Code](#vs-code)
- * [37.4.4. Go](#go)
- * [37.4.5. Gitkraken (or other GUI for git)](#gitkraken-or-other-gui-for-git)
- * [37.4.6. arm-none-eabi toolchain (or other target system compiler)](#arm-none-eabi-toolchain-or-other-target-system-compiler)
- * [37.4.7. J-Link (if needed)](#j-link-if-needed)
- * [37.4.8. Beyond Compare (if no other diff tool)](#beyond-compare-if-no-other-diff-tool)
- * [37.5. Setup Windows PC Example](#setup-windows-pc-example)
- * [37.5.1. Setup Trice](#setup-trice)
- * [37.5.2. Setup ARM Environment Example](#setup-arm-environment-example)
- * [37.5.3. Setup STM32](#setup-stm32)
- * [37.5.4. Setup Onboard J-Link on NUCLEO (other ST evaluation boards too)](#setup-onboard-j-link-on-nucleo-other-st-evaluation-boards-too)
- * [37.5.5. Setup VS-Code](#setup-vs-code)
- * [37.6. Makefile with Clang too](#makefile-with-clang-too)
- * [37.7. Download Locations](#download-locations)
- * [37.7.1. Clang](#clang)
- * [37.7.2. GCC](#gcc-1)
- * [37.8. Install Locations](#install-locations)
- * [37.9. Environment Variables](#environment-variables)
- * [37.10. Build command](#build-command)
- * [37.11. Run & Debug](#run--debug)
- * [37.12. Logging](#logging)
- * [37.13. Setting up a new project](#setting-up-a-new-project)
-* [38. Example Projects without and with Trice Instrumentation](#example-projects-without-and-with-trice-instrumentation)
- * [38.1. Nucleo-F030R8 Examples](#nucleo-f030r8-examples)
- * [38.1.1. F030bare](#f030bare)
- * [38.1.2. F030inst](#f030inst)
- * [38.2. Nucleo-G0B1 Examples](#nucleo-g0b1-examples)
- * [38.2.1. G0B1bare](#g0b1bare)
- * [38.2.2. G0B1inst](#g0b1inst)
- * [38.3. Nucleo-L432KC Examples](#nucleo-l432kc-examples)
- * [38.3.1. L432bare](#l432bare)
- * [38.3.2. L432inst](#l432inst)
-* [39. Trice Generate](#trice-generate)
- * [39.1. Colors](#colors)
- * [39.2. C-Code](#c-code)
- * [39.3. C#-Code](#c-code-1)
- * [39.4. Generating a Trice ABC Function Pointer List](#generating-a-trice-abc-function-pointer-list)
-* [40. Testing the Trice Library C-Code for the Target](#testing-the-trice-library-c-code-for-the-target)
- * [40.1. General info](#general-info)
- * [40.2. How to run the tests](#how-to-run-the-tests)
- * [40.3. Tests Details](#tests-details)
- * [40.4. How to add new test cases](#how-to-add-new-test-cases)
- * [40.5. Test Internals](#test-internals)
- * [40.6. Test Results](#test-results)
- * [40.7. Special tests](#special-tests)
- * [40.8. Test Cases](#test-cases)
- * [40.8.1. Folder Naming Convention](#folder-naming-convention)
-* [41. Test Issues](#test-issues)
-* [42. Add-On Hints](#add-on-hints)
- * [42.1. Trice on LibOpenCM3](#trice-on-libopencm3)
- * [42.1.1. Prerequisites](#prerequisites)
- * [42.1.2. triceConfig.h](#triceconfigh)
- * [42.1.3. main.c](#mainc)
- * [42.1.4. nucleo-f411re.ld](#nucleo-f411reld)
- * [42.1.5. Makefile](#makefile)
- * [42.1.6. Usage](#usage)
- * [42.2. Get all project files containing Trice messages](#get-all-project-files-containing-trice-messages)
- * [42.3. Building a trice library?](#building-a-trice-library)
- * [42.4. Possible Compiler Issue when using Trice macros without parameters on old compiler or with strict-C settings](#possible-compiler-issue-when-using-trice-macros-without-parameters-on-old-compiler-or-with-strict-c-settings)
-* [43. Trice And Legacy User Code](#trice-and-legacy-user-code)
- * [43.1. Legacy User Code Option Separate Physical Output Channel](#legacy-user-code-option-separate-physical-output-channel)
- * [43.2. Legacy User Code Option Trice Adaptation Edits](#legacy-user-code-option-trice-adaptation-edits)
- * [43.3. Legacy User Code Option Print Buffer Wrapping and Framing](#legacy-user-code-option-print-buffer-wrapping-and-framing)
- * [43.4. Legacy User Code Option Trice Aliases Adaptation](#legacy-user-code-option-trice-aliases-adaptation)
- * [43.4.1. PR533 Doc](#pr533-doc)
- * [43.4.2. PR533 Summary](#pr533-summary)
- * [43.4.3. PR533 Motivation](#pr533-motivation)
- * [43.4.4. What This PR533 Adds](#what-this-pr533-adds)
- * [43.4.5. PR533 Example](#pr533-example)
- * [43.4.6. PR536 Doc](#pr536-doc)
- * [43.4.7. Alias Example Project](#alias-example-project)
-* [44. Future Development](#future-development)
- * [44.1. Trice Log-level Control Specification Draft](#trice-log-level-control-specification-draft)
- * [44.1.1. What log levels exist in general, including exotic ones, and what is their exact weighting relative to each other?](#what-log-levels-exist-in-general-including-exotic-ones-and-what-is-their-exact-weighting-relative-to-each-other)
- * [44.1.2. Compile-time Log-level Control](#compile-time-log-level-control)
- * [44.1.3. Run-time Log-level Control](#run-time-log-level-control)
- * [44.2. Trice Structured Logging](#trice-structured-logging)
- * [44.2.1. Trice Structured Logging Compile-time Information](#trice-structured-logging-compile-time-information)
- * [44.2.2. Trice Structured Logging Runtime Information](#trice-structured-logging-runtime-information)
- * [44.2.3. Trice Structured Logging Limitations and Special Cases](#trice-structured-logging-limitations-and-special-cases)
- * [44.2.4. A Trice Structured Logging Example](#a-trice-structured-logging-example)
- * [44.2.5. Trice Structured Logging CLI Switches and Variables](#trice-structured-logging-cli-switches-and-variables)
- * [44.2.6. Trice Structured Logging User Defined Values](#trice-structured-logging-user-defined-values)
- * [44.2.7. Trice Structured Logging CLI Switches Usage Options](#trice-structured-logging-cli-switches-usage-options)
- * [44.2.8. Trice Structured Logging Level Specific Configuration](#trice-structured-logging-level-specific-configuration)
- * [44.2.9. Trice Structured Logging Assert Macros (TODO)](#trice-structured-logging-assert-macros-todo)
- * [44.3. Improving the Trice Tool Internal Parser](#improving-the-trice-tool-internal-parser)
- * [44.3.1. Trice Internal Log Code Short Description](#trice-internal-log-code-short-description)
- * [44.4. Using Trice on Servers](#using-trice-on-servers)
-* [45. Working with the Trice Git Repository](#working-with-the-trice-git-repository)
- * [45.1. Install opencommit on macOS](#install-opencommit-on-macos)
- * [45.2. Install opencommit on Windows](#install-opencommit-on-windows)
-* [46. Trice Maintenance](#trice-maintenance)
- * [46.1. Trice Project structure (Files and Folders)](#trice-project-structure-files-and-folders)
- * [46.2. 📁 The .github Folder — Purpose and Contents](#the-github-folder--purpose-and-contents)
- * [46.2.1. 📁 .github Root](#github-root)
- * [46.2.2. 📂 .github/workflows — GitHub Actions Workflows](#githubworkflows--github-actions-workflows)
- * [46.2.3. GitHub Action clang-format.yml - Check C Code Formatting](#github-action-clang-formatyml---check-c-code-formatting)
- * [46.2.4. GitHub Action codeql.yml - Static Code Analysis](#github-action-codeqlyml---static-code-analysis)
- * [46.2.5. GitHub Action coverage.yml - Test Coverage and Coveralls Integration](#github-action-coverageyml---test-coverage-and-coveralls-integration)
- * [46.2.6. GitHub Action go.yml - Building and Testing Go Code](#github-action-goyml---building-and-testing-go-code)
- * [46.2.7. GitHub Action goreleaser.yml - Build & Pack Trice Distribution](#github-action-goreleaseryml---build--pack-trice-distribution)
- * [46.2.8. GitHub Action label.yml - Automatic Labeling Rules](#github-action-labelyml---automatic-labeling-rules)
- * [46.2.9. GitHub Action link-check.yml - Broken Links Check](#github-action-link-checkyml---broken-links-check)
- * [46.2.10. GitHub Action manual.ym - To Be Triggered Manually](#github-action-manualym---to-be-triggered-manually)
- * [46.2.11. GitHub Action shellcheck.yml - Catching Common Bash Scripts Bugs](#github-action-shellcheckyml---catching-common-bash-scripts-bugs)
- * [46.2.12. GitHub Action shfmt.yml - Ensure Consistent Shell Scripts Formatting](#github-action-shfmtyml---ensure-consistent-shell-scripts-formatting)
- * [46.2.13. GitHub Action stale.yml - Automatic Stale Issue Handling](#github-action-staleyml---automatic-stale-issue-handling)
- * [46.2.14. GitHub Action superlinter.yml - Ensure Consistent YAML and Markdown Formatting](#github-action-superlinteryml---ensure-consistent-yaml-and-markdown-formatting)
- * [46.2.15. GitHub Action pages.yml - Creates The Trice GitHub Pages](#github-action-pagesyml---creates-the-trice-github-pages)
- * [46.3. Trice User Manual Maintenance (or any *.md file)](#trice-user-manual-maintenance-or-any-md-file)
- * [46.4. Cleaning the Sources](#cleaning-the-sources)
-* [47. Build and Release the Trice Tool](#build-and-release-the-trice-tool)
- * [47.1. Build Trice tool from Go sources](#build-trice-tool-from-go-sources)
- * [47.2. Prepare A Release](#prepare-a-release)
- * [47.2.1. Check a GoReleaser Release before Publishing](#check-a-goreleaser-release-before-publishing)
- * [47.3. Trigger a real Trice release via CI (with git tag)](#trigger-a-real-trice-release-via-ci-with-git-tag)
- * [47.3.1. Make sure your workflow reacts to tags](#make-sure-your-workflow-reacts-to-tags)
- * [47.3.2. Final checks before tagging](#final-checks-before-tagging)
- * [47.3.3. Choose a version and create a git tag](#choose-a-version-and-create-a-git-tag)
- * [47.3.4. Push the tag to GitHub (this triggers CI)](#push-the-tag-to-github-this-triggers-ci)
- * [47.3.5. Watch the CI release run on GitHub](#watch-the-ci-release-run-on-github)
- * [47.3.6. Check the GitHub Release](#check-the-github-release)
-* [48. Ctrl-C robust use of trice insert and trice clean](#ctrl-c-robust-use-of-trice-insert-and-trice-clean)
- * [48.1. Background: GitHub issue #658](#background-github-issue-658)
- * [48.2. What Bash scripts can and cannot protect against](#what-bash-scripts-can-and-cannot-protect-against)
- * [48.3. Recommended build-script ownership rule](#recommended-build-script-ownership-rule)
- * [48.4. Recommended Bash pattern](#recommended-bash-pattern)
- * [48.5. Preserve the build exit code](#preserve-the-build-exit-code)
- * [48.6. Be careful with current working directory changes](#be-careful-with-current-working-directory-changes)
- * [48.7. Prefer Makefile clean targets when available](#prefer-makefile-clean-targets-when-available)
- * [48.8. Example scripts](#example-scripts)
- * [48.9. Summary](#summary-2)
-* [49. Scratch Pad](#scratch-pad)
+* [24. Trice Bind](#trice-bind)
+ * [24.1. Overview](#overview)
+ * [24.2. Requirements](#requirements)
+ * [24.3. Quick Start](#quick-start)
+ * [24.3.1. New ID-Free Project](#new-id-free-project)
+ * [24.3.2. Migration from trice insert](#migration-from-trice-insert)
+ * [24.4. Persistent and Generated Files](#persistent-and-generated-files)
+ * [24.5. Hierarchical Metadata Reuse](#hierarchical-metadata-reuse)
+ * [24.6. File Key and Sidecar Name](#file-key-and-sidecar-name)
+ * [24.7. Sidecar Contents](#sidecar-contents)
+ * [24.8. Why the Sidecar Include Is File-Local](#why-the-sidecar-include-is-file-local)
+ * [24.9. Headers and static inline](#headers-and-static-inline)
+ * [24.10. Automatic Include Position](#automatic-include-position)
+ * [24.11. File Classification and Mixed Projects](#file-classification-and-mixed-projects)
+ * [24.11.1. Insert-Owned](#insert-owned)
+ * [24.11.2. Bind-Owned](#bind-owned)
+ * [24.11.3. Mixed](#mixed)
+ * [24.11.4. Insert-Owned File After a Bind Header](#insert-owned-file-after-a-bind-header)
+ * [24.12. Supported Trice Calls](#supported-trice-calls)
+ * [24.13. ID and Stamp Forms](#id-and-stamp-forms)
+ * [24.13.1. ID-Free](#id-free)
+ * [24.13.2. Zero Placeholders](#zero-placeholders)
+ * [24.14. Command Line](#command-line)
+ * [24.15. Build Integration](#build-integration)
+ * [24.16. TRICE_CLEAN](#trice_clean)
+ * [24.16.1. trice clean After trice bind](#trice-clean-after-trice-bind)
+ * [24.17. Re-Migration to trice insert](#re-migration-to-trice-insert)
+ * [24.18. Automatic Local Counter Rebase](#automatic-local-counter-rebase)
+ * [24.18.1. When the Normal Line Path Is Sufficient](#when-the-normal-line-path-is-sufficient)
+ * [24.18.2. When trice bind Rebases Locally](#when-trice-bind-rebases-locally)
+ * [24.18.3. Concrete Wrapper Example](#concrete-wrapper-example)
+ * [24.18.4. Preferred Form: Normal or static inline Function](#preferred-form-normal-or-static-inline-function)
+ * [24.18.5. Headers and Translation Units](#headers-and-translation-units)
+ * [24.18.6. Compact Source Boundaries and Generated Helper Headers](#compact-source-boundaries-and-generated-helper-headers)
+ * [24.18.7. Missing __COUNTER__](#missing-9595counter9595)
+ * [24.18.8. Unchanged Interfaces](#unchanged-interfaces)
+ * [24.19. Supported Boundaries and Remaining Limitations](#supported-boundaries-and-remaining-limitations)
+ * [24.20. Diagnostics and Troubleshooting](#diagnostics-and-troubleshooting)
+ * [24.20.1. Sidecar Not Found](#sidecar-not-found)
+ * [24.20.2. File-Key Conflict](#file-key-conflict)
+ * [24.20.3. File Is mixed](#file-is-mixed)
+ * [24.20.4. Bind Include Is in the Wrong Place](#bind-include-is-in-the-wrong-place)
+ * [24.20.5. Unexpected Message After a Source Change](#unexpected-message-after-a-source-change)
+ * [24.20.6. Advanced Construct Requires __COUNTER__](#advanced-construct-requires-9595counter9595)
+ * [24.20.7. Counter Count or Rebase Descriptor Does Not Match](#counter-count-or-rebase-descriptor-does-not-match)
+ * [24.21. Result](#result)
+ * [24.22. Appendix: Preprocessor Fundamentals](#appendix-preprocessor-fundamentals)
+ * [24.22.1. Local Insert/Bind Dispatch](#local-insertbind-dispatch)
+ * [24.22.2. Site Descriptor](#site-descriptor)
+ * [24.23. Appendix: Stable ID Assignment and Binding Background](#appendix-stable-id-assignment-and-binding-background)
+ * [24.23.1. Stable ID Assignment](#stable-id-assignment)
+ * [24.23.2. Transfer into the Target Code](#transfer-into-the-target-code)
+ * [24.23.3. Why the Source Scan Remains Authoritative](#why-the-source-scan-remains-authoritative)
+ * [24.23.4. Requirements Met by the Sidecar Approach](#requirements-met-by-the-sidecar-approach)
+ * [24.24. Appendix: TRICE_CLEAN States at a Glance](#appendix-trice_clean-states-at-a-glance)
+ * [24.25. Appendix: Retained Architecture Decision Against ELF Patching](#appendix-retained-architecture-decision-against-elf-patching)
+ * [24.26. Architecture Decision: trice bind Instead of an ELF-Patching Solution](#architecture-decision-trice-bind-instead-of-an-elf-patching-solution)
+ * [24.26.1. Purpose of This Document](#purpose-of-this-document)
+ * [24.26.2. Requirements](#requirements-1)
+ * [24.26.3. MVP of trice bind](#mvp-of-trice-bind)
+ * [24.26.4. Investigated ELF-Patching Solution](#investigated-elf-patching-solution)
+ * [24.26.5. Comparison of the Two Approaches](#comparison-of-the-two-approaches)
+ * [24.26.6. Examination of the Apparent ELF Advantages](#examination-of-the-apparent-elf-advantages)
+ * [24.26.7. Future Additive Extensions](#future-additive-extensions)
+ * [24.26.8. Decision](#decision)
+* [25. Trice version 1.0 Log-level Control](#trice-version-10-log-level-control)
+ * [25.1. Trice version 1.0 Compile-time Log-level Control](#trice-version-10-compile-time-log-level-control)
+ * [25.2. Trice version 1.0 Run-time Log-level Control](#trice-version-10-run-time-log-level-control)
+ * [25.3. Trice Version 1.0 Compile-time - Run-time Log-level Control](#trice-version-10-compile-time---run-time-log-level-control)
+* [26. ID reference list til.json](#id-reference-list-tiljson)
+ * [26.1. til.json Version control](#tiljson-version-control)
+ * [26.2. Long Time Availability](#long-time-availability)
+* [27. The Trice Insert Algorithm](#the-trice-insert-algorithm)
+ * [27.1. Starting Conditions](#starting-conditions)
+ * [27.2. Aims](#aims)
+ * [27.3. Method](#method)
+ * [27.3.1. Trice Insert Initialization](#trice-insert-initialization)
+ * [27.4. User Code Patching (trice insert)](#user-code-patching-trice-insert)
+ * [27.5. User Code Patching Examples](#user-code-patching-examples)
+ * [27.6. Exclude folders & files from being parsed (pull request 529)](#exclude-folders--files-from-being-parsed-pull-request-529)
+ * [27.7. ID Usage Options](#id-usage-options)
+ * [27.8. General ID Management Information](#general-id-management-information)
+ * [27.8.1. Option Cleaning in a Post-build process](#option-cleaning-in-a-post-build-process)
+ * [27.8.2. Option Let the inserted Trice ID be a Part of the User Code](#option-let-the-inserted-trice-id-be-a-part-of-the-user-code)
+ * [27.8.3. Option Cleaning on Repository Check-In](#option-cleaning-on-repository-check-in)
+* [28. Trice Speed](#trice-speed)
+ * [28.1. Target Implementation Options](#target-implementation-options)
+ * [28.1.1. Trice Use Cases TRICESTATICBUFFER and TRICESTACKBUFFER - direct mode only](#trice-use-cases-tricestaticbuffer-and-tricestackbuffer---direct-mode-only)
+ * [28.1.2. Trice Use Case TRICEDOUBLEBUFFER - deferred mode, fastest Trice execution, more RAM needed](#trice-use-case-tricedoublebuffer---deferred-mode-fastest-trice-execution-more-ram-needed)
+ * [28.1.3. Trice Use Case TRICERINGBUFFER - deferred mode, balanced Trice execution time and needed RAM](#trice-use-case-triceringbuffer---deferred-mode-balanced-trice-execution-time-and-needed-ram)
+ * [28.2. A configuration for maximum Trice execution speed with the L432inst example](#a-configuration-for-maximum-trice-execution-speed-with-the-l432inst-example)
+ * [28.3. A configuration for normal Trice execution speed with the G0B1inst example](#a-configuration-for-normal-trice-execution-speed-with-the-g0b1inst-example)
+* [29. Trice memory needs](#trice-memory-needs)
+ * [29.1. F030bare Size](#f030bare-size)
+ * [29.2. F030inst Size with TRICEOFF=1](#f030inst-size-with-triceoff1)
+ * [29.3. F030inst with ring buffer](#f030inst-with-ring-buffer)
+ * [29.4. F030inst with ring buffer](#f030inst-with-ring-buffer-1)
+ * [29.5. A developer setting, only enabling SEGGERRTT](#a-developer-setting-only-enabling-seggerrtt)
+ * [29.6. A developer setting, only enabling SEGGERRTT and without deferred output gives after running ./build.sh TRICE_DIAGNOSTICS=0 TRICE_PROTECT=0:](#a-developer-setting-only-enabling-seggerrtt-and-without-deferred-output-gives-after-running-buildsh-trice_diagnostics0-trice_protect0)
+ * [29.7. Settings Conclusion](#settings-conclusion)
+ * [29.8. Legacy Trice Space Example (Old Version)](#legacy-trice-space-example-old-version)
+ * [29.9. Memory Needs for Old Example 1](#memory-needs-for-old-example-1)
+ * [29.10. Memory Needs for Old Example 2](#memory-needs-for-old-example-2)
+* [30. Trice Project Image Size Optimization](#trice-project-image-size-optimization)
+ * [30.1. Code Optimization -o3 or -oz (if supported)](#code-optimization--o3-or--oz-if-supported)
+ * [30.2. Compiler Independent Setting (a bit outdated)](#compiler-independent-setting-a-bit-outdated)
+ * [30.3. Linker Option --split-sections (if supported)](#linker-option---split-sections-if-supported)
+ * [30.4. Linker Optimization -flto (if supported)](#linker-optimization--flto-if-supported)
+ * [30.4.1. ARMCC Compiler v5 Linker Feedback](#armcc-compiler-v5-linker-feedback)
+ * [30.4.2. ARMCLANG Compiler v6 Link-Time Optimization](#armclang-compiler-v6-link-time-optimization)
+ * [30.4.3. GCC](#gcc)
+ * [30.4.4. LLVM ARM Clang](#llvm-arm-clang)
+ * [30.4.5. Other IDE´s and compilers](#other-ides-and-compilers)
+ * [30.5. Legacy STM32F030 Example Project - Different Build Sizes](#legacy-stm32f030-example-project---different-build-sizes)
+ * [30.5.1. ARMCC compiler v5](#armcc-compiler-v5)
+* [31. Trice Tags and Color](#trice-tags-and-color)
+ * [31.1. How to get](#how-to-get)
+ * [31.1.1. Output options](#output-options)
+ * [31.1.2. Check Alternatives](#check-alternatives)
+ * [31.2. Color issues under Windows](#color-issues-under-windows)
+* [32. Trice without UART](#trice-without-uart)
+* [33. Trice over RTT](#trice-over-rtt)
+ * [33.1. For the impatient (2 possibilities)](#for-the-impatient-2-possibilities)
+ * [33.1.1. Start JLink commander and connect over TCP](#start-jlink-commander-and-connect-over-tcp)
+ * [33.1.2. Start using JLinkRTTLogger](#start-using-jlinkrttlogger)
+ * [33.1.3. JLinkRTTLogger Issue](#jlinkrttlogger-issue)
+ * [33.2. Segger Real Time Transfer (RTT)](#segger-real-time-transfer-rtt)
+ * [33.3. J-Link option](#j-link-option)
+ * [33.3.1. Convert Evaluation Board onboard ST-Link to J-Link](#convert-evaluation-board-onboard-st-link-to-j-link)
+ * [33.3.2. Some SEGGER tools in short](#some-segger-tools-in-short)
+ * [33.3.3. JLinkRTTClient.exe](#jlinkrttclientexe)
+ * [33.3.4. JLinkRTTViewer.exe](#jlinkrttviewerexe)
+ * [33.4. Segger RTT](#segger-rtt)
+ * [33.5. Segger J-Link SDK (800 EUR) Option](#segger-j-link-sdk-800-eur-option)
+ * [33.6. Additional Notes (leftovers)](#additional-notes-leftovers)
+ * [33.7. Further development](#further-development)
+ * [33.8. NUCLEO-F030R8 example](#nucleo-f030r8-example)
+ * [33.8.1. RTT with original on-board ST-LINK firmware](#rtt-with-original-on-board-st-link-firmware)
+ * [33.8.2. Change to J-LINK onboard firmware](#change-to-j-link-onboard-firmware)
+ * [33.8.3. RTT with J-LINK firmware on-board](#rtt-with-j-link-firmware-on-board)
+ * [33.9. Possible issues](#possible-issues)
+ * [33.10. OpenOCD with Darwin (macOS)](#openocd-with-darwin-macos)
+ * [33.11. SEGGER J-Link on Darwin (macOS)](#segger-j-link-on-darwin-macos)
+ * [33.12. Links](#links)
+* [34. Writing the Trice logs into an SD-card (or a user specific output)](#writing-the-trice-logs-into-an-sd-card-or-a-user-specific-output)
+* [35. Trice Target Code Implementation](#trice-target-code-implementation)
+ * [35.1. TRICE Macro structure](#trice-macro-structure)
+ * [35.1.1. TRICEENTER](#triceenter)
+ * [35.1.2. TRICEPUT](#triceput)
+ * [35.1.3. TRICELEAVE](#triceleave)
+ * [35.2. TRICESTACKBUFFER](#tricestackbuffer)
+ * [35.3. TRICESTATICBUFFER](#tricestaticbuffer)
+ * [35.4. TRICEDOUBLEBUFFER](#tricedoublebuffer)
+ * [35.5. TRICERINGBUFFER](#triceringbuffer)
+ * [35.6. Deferred Out](#deferred-out)
+ * [35.6.1. Double Buffer](#double-buffer)
+ * [35.6.2. Ring Buffer](#ring-buffer)
+ * [35.7. Direct Transfer](#direct-transfer)
+ * [35.8. Possible Target Code Improvements](#possible-target-code-improvements)
+* [36. Trice Similarities and Differences to printf Usage](#trice-similarities-and-differences-to-printf-usage)
+ * [36.1. Printf-like functions](#printf-like-functions)
+ * [36.2. Trice IDs](#trice-ids)
+ * [36.3. Trice values bit width](#trice-values-bit-width)
+ * [36.4. Many value parameters](#many-value-parameters)
+ * [36.5. Floating Point Values](#floating-point-values)
+ * [36.6. Runtime Generated 0-terminated Strings Transfer with triceS](#runtime-generated-0-terminated-strings-transfer-with-trices)
+ * [36.7. Runtime Generated counted Strings Transfer with triceN](#runtime-generated-counted-strings-transfer-with--tricen)
+ * [36.8. Runtime Generated Buffer Transfer with triceB](#runtime-generated-buffer-transfer-with-triceb)
+ * [36.9. Extended format specifier possibilities](#extended-format-specifier-possibilities)
+ * [36.9.1. Trice format specifier](#trice-format-specifier)
+ * [36.9.2. Length modifier support](#length-modifier-support)
+ * [36.9.3. Overview Table](#overview-table)
+ * [36.10. Unsupported printf format features](#unsupported-printf-format-features)
+ * [36.10.1. Dynamic field width with *](#dynamic-field-width-with-)
+ * [36.10.2. Dynamic precision with *](#dynamic-precision-with-)
+ * [36.10.3. Dynamic width and precision together](#dynamic-width-and-precision-together)
+ * [36.10.4. Wide character and wide string formats: %lc and %ls](#wide-character-and-wide-string-formats-lc-and-ls)
+ * [36.10.5. The special %n conversion specifier](#the-special-n-conversion-specifier)
+ * [36.10.6. Security implications of %n](#security-implications-of-n)
+ * [36.10.7. Why Trice does not support %n](#why-trice-does-not-support-n)
+ * [36.11. UTF-8 Support](#utf-8-support)
+ * [36.12. Switch the language without changing a bit inside the target code](#switch-the-language-without-changing-a-bit-inside-the-target-code)
+ * [36.13. Format tags prototype specifier examples](#format-tags-prototype-specifier-examples)
+* [37. Trice ABC - Asynchronous Broadcast Commands](#trice-abc---asynchronous-broadcast-commands)
+ * [37.1. Quick use](#quick-use)
+ * [37.2. ABC macro families](#abc-macro-families)
+ * [37.3. Command names and handler names](#command-names-and-handler-names)
+ * [37.4. Receiver selection and generated table](#receiver-selection-and-generated-table)
+ * [37.5. Receive runtime contract](#receive-runtime-contract)
+ * [37.6. Handler payload handling](#handler-payload-handling)
+ * [37.7. Responses](#responses)
+ * [37.8. What ABC is not](#what-abc-is-not)
+ * [37.9. Example: examples/TriceAbc](#example-examplestriceabc)
+ * [37.10. Host tests](#host-tests)
+ * [37.11. Building RPC-like protocols on top](#building-rpc-like-protocols-on-top)
+ * [37.12. Security boundary](#security-boundary)
+ * [37.13. Summary](#summary-1)
+* [38. Development Environment Setup](#development-environment-setup)
+ * [38.1. Common Information](#common-information-1)
+ * [38.2. Important to know](#important-to-know)
+ * [38.3. Animation](#animation)
+ * [38.4. Setup Linux PC - Example with Debian12 - KDE Desktop](#setup-linux-pc---example-with-debian12---kde-desktop)
+ * [38.4.1. Basic setup](#basic-setup)
+ * [38.4.2. GitHub](#github)
+ * [38.4.3. VS Code](#vs-code)
+ * [38.4.4. Go](#go)
+ * [38.4.5. Gitkraken (or other GUI for git)](#gitkraken-or-other-gui-for-git)
+ * [38.4.6. arm-none-eabi toolchain (or other target system compiler)](#arm-none-eabi-toolchain-or-other-target-system-compiler)
+ * [38.4.7. J-Link (if needed)](#j-link-if-needed)
+ * [38.4.8. Beyond Compare (if no other diff tool)](#beyond-compare-if-no-other-diff-tool)
+ * [38.5. Setup Windows PC Example](#setup-windows-pc-example)
+ * [38.5.1. Choose the right Windows compiler](#choose-the-right-windows-compiler)
+ * [38.5.2. Setup Trice](#setup-trice)
+ * [38.5.3. Setup ARM Environment Example](#setup-arm-environment-example)
+ * [38.5.4. Inventory, select, and remove compiler versions](#inventory-select-and-remove-compiler-versions)
+ * [38.5.5. Setup STM32](#setup-stm32)
+ * [38.5.6. Setup Onboard J-Link on NUCLEO (other ST evaluation boards too)](#setup-onboard-j-link-on-nucleo-other-st-evaluation-boards-too)
+ * [38.5.7. Setup VS-Code](#setup-vs-code)
+ * [38.6. Makefile with Clang too](#makefile-with-clang-too)
+ * [38.7. Download Locations](#download-locations)
+ * [38.7.1. Clang](#clang)
+ * [38.7.2. GCC](#gcc-1)
+ * [38.8. Install Locations](#install-locations)
+ * [38.9. Environment Variables](#environment-variables)
+ * [38.10. Build command](#build-command)
+ * [38.11. Run & Debug](#run--debug)
+ * [38.12. Logging](#logging)
+ * [38.13. Setting up a new project](#setting-up-a-new-project)
+* [39. Example Projects without and with Trice Instrumentation](#example-projects-without-and-with-trice-instrumentation)
+ * [39.1. Nucleo-F030R8 Examples](#nucleo-f030r8-examples)
+ * [39.1.1. F030bare](#f030bare)
+ * [39.1.2. F030inst](#f030inst)
+ * [39.2. Nucleo-G0B1 Examples](#nucleo-g0b1-examples)
+ * [39.2.1. G0B1bare](#g0b1bare)
+ * [39.2.2. G0B1inst](#g0b1inst)
+ * [39.3. Nucleo-L432KC Examples](#nucleo-l432kc-examples)
+ * [39.3.1. L432bare](#l432bare)
+ * [39.3.2. L432inst](#l432inst)
+* [40. Trice Generate](#trice-generate)
+ * [40.1. Colors](#colors)
+ * [40.2. C-Code](#c-code)
+ * [40.3. C#-Code](#c-code-1)
+ * [40.4. Generating a Trice ABC Function Pointer List](#generating-a-trice-abc-function-pointer-list)
+* [41. Testing the Trice Library C-Code for the Target](#testing-the-trice-library-c-code-for-the-target)
+ * [41.1. General info](#general-info)
+ * [41.2. How to run the tests](#how-to-run-the-tests)
+ * [41.3. Tests Details](#tests-details)
+ * [41.4. How to add new test cases](#how-to-add-new-test-cases)
+ * [41.5. Test Internals](#test-internals)
+ * [41.6. Test Results](#test-results)
+ * [41.7. Special tests](#special-tests)
+ * [41.8. Test Cases](#test-cases)
+ * [41.8.1. Folder Naming Convention](#folder-naming-convention)
+* [42. Test Issues](#test-issues)
+* [43. Add-On Hints](#add-on-hints)
+ * [43.1. Trice on LibOpenCM3](#trice-on-libopencm3)
+ * [43.1.1. Prerequisites](#prerequisites)
+ * [43.1.2. triceConfig.h](#triceconfigh)
+ * [43.1.3. main.c](#mainc)
+ * [43.1.4. nucleo-f411re.ld](#nucleo-f411reld)
+ * [43.1.5. Makefile](#makefile)
+ * [43.1.6. Usage](#usage)
+ * [43.2. Get all project files containing Trice messages](#get-all-project-files-containing-trice-messages)
+ * [43.3. Building a trice library?](#building-a-trice-library)
+ * [43.4. Possible Compiler Issue when using Trice macros without parameters on old compiler or with strict-C settings](#possible-compiler-issue-when-using-trice-macros-without-parameters-on-old-compiler-or-with-strict-c-settings)
+* [44. Trice And Legacy User Code](#trice-and-legacy-user-code)
+ * [44.1. Legacy User Code Option Separate Physical Output Channel](#legacy-user-code-option-separate-physical-output-channel)
+ * [44.2. Legacy User Code Option Trice Adaptation Edits](#legacy-user-code-option-trice-adaptation-edits)
+ * [44.3. Legacy User Code Option Print Buffer Wrapping and Framing](#legacy-user-code-option-print-buffer-wrapping-and-framing)
+ * [44.4. Legacy User Code Option Trice Aliases Adaptation](#legacy-user-code-option-trice-aliases-adaptation)
+ * [44.4.1. PR533 Doc](#pr533-doc)
+ * [44.4.2. PR533 Summary](#pr533-summary)
+ * [44.4.3. PR533 Motivation](#pr533-motivation)
+ * [44.4.4. What This PR533 Adds](#what-this-pr533-adds)
+ * [44.4.5. PR533 Example](#pr533-example)
+ * [44.4.6. PR536 Doc](#pr536-doc)
+ * [44.4.7. Alias Example Project](#alias-example-project)
+* [45. Future Development](#future-development)
+ * [45.1. Trice Log-level Control Specification Draft](#trice-log-level-control-specification-draft)
+ * [45.1.1. What log levels exist in general, including exotic ones, and what is their exact weighting relative to each other?](#what-log-levels-exist-in-general-including-exotic-ones-and-what-is-their-exact-weighting-relative-to-each-other)
+ * [45.1.2. Compile-time Log-level Control](#compile-time-log-level-control)
+ * [45.1.3. Run-time Log-level Control](#run-time-log-level-control)
+ * [45.2. Trice Structured Logging](#trice-structured-logging)
+ * [45.2.1. Trice Structured Logging Compile-time Information](#trice-structured-logging-compile-time-information)
+ * [45.2.2. Trice Structured Logging Runtime Information](#trice-structured-logging-runtime-information)
+ * [45.2.3. Trice Structured Logging Limitations and Special Cases](#trice-structured-logging-limitations-and-special-cases)
+ * [45.2.4. A Trice Structured Logging Example](#a-trice-structured-logging-example)
+ * [45.2.5. Trice Structured Logging CLI Switches and Variables](#trice-structured-logging-cli-switches-and-variables)
+ * [45.2.6. Trice Structured Logging User Defined Values](#trice-structured-logging-user-defined-values)
+ * [45.2.7. Trice Structured Logging CLI Switches Usage Options](#trice-structured-logging-cli-switches-usage-options)
+ * [45.2.8. Trice Structured Logging Level Specific Configuration](#trice-structured-logging-level-specific-configuration)
+ * [45.2.9. Trice Structured Logging Assert Macros (TODO)](#trice-structured-logging-assert-macros-todo)
+ * [45.3. Improving the Trice Tool Internal Parser](#improving-the-trice-tool-internal-parser)
+ * [45.3.1. Trice Internal Log Code Short Description](#trice-internal-log-code-short-description)
+ * [45.4. Using Trice on Servers](#using-trice-on-servers)
+* [46. Working with the Trice Git Repository](#working-with-the-trice-git-repository)
+ * [46.1. Install opencommit on macOS](#install-opencommit-on-macos)
+ * [46.2. Install opencommit on Windows](#install-opencommit-on-windows)
+* [47. Trice Maintenance](#trice-maintenance)
+ * [47.1. Trice Project structure (Files and Folders)](#trice-project-structure-files-and-folders)
+ * [47.2. 📁 The .github Folder — Purpose and Contents](#the-github-folder--purpose-and-contents)
+ * [47.2.1. 📁 .github Root](#github-root)
+ * [47.2.2. 📂 .github/workflows — GitHub Actions Workflows](#githubworkflows--github-actions-workflows)
+ * [47.2.3. GitHub Action clang-format.yml - Check C Code Formatting](#github-action-clang-formatyml---check-c-code-formatting)
+ * [47.2.4. GitHub Action codeql.yml - Static Code Analysis](#github-action-codeqlyml---static-code-analysis)
+ * [47.2.5. GitHub Action coverage.yml - Test Coverage and Coveralls Integration](#github-action-coverageyml---test-coverage-and-coveralls-integration)
+ * [47.2.6. GitHub Action go.yml - Building and Testing Go Code](#github-action-goyml---building-and-testing-go-code)
+ * [47.2.7. GitHub Action goreleaser.yml - Build & Pack Trice Distribution](#github-action-goreleaseryml---build--pack-trice-distribution)
+ * [47.2.8. GitHub Action label.yml - Automatic Labeling Rules](#github-action-labelyml---automatic-labeling-rules)
+ * [47.2.9. GitHub Action link-check.yml - Broken Links Check](#github-action-link-checkyml---broken-links-check)
+ * [47.2.10. GitHub Action manual.ym - To Be Triggered Manually](#github-action-manualym---to-be-triggered-manually)
+ * [47.2.11. GitHub Action shellcheck.yml - Catching Common Bash Scripts Bugs](#github-action-shellcheckyml---catching-common-bash-scripts-bugs)
+ * [47.2.12. GitHub Action shfmt.yml - Ensure Consistent Shell Scripts Formatting](#github-action-shfmtyml---ensure-consistent-shell-scripts-formatting)
+ * [47.2.13. GitHub Action stale.yml - Automatic Stale Issue Handling](#github-action-staleyml---automatic-stale-issue-handling)
+ * [47.2.14. GitHub Action superlinter.yml - Ensure Consistent YAML and Markdown Formatting](#github-action-superlinteryml---ensure-consistent-yaml-and-markdown-formatting)
+ * [47.2.15. GitHub Action pages.yml - Creates The Trice GitHub Pages](#github-action-pagesyml---creates-the-trice-github-pages)
+ * [47.3. Trice User Manual Maintenance (or any *.md file)](#trice-user-manual-maintenance-or-any-md-file)
+ * [47.4. Cleaning the Sources](#cleaning-the-sources)
+* [48. Build and Release the Trice Tool](#build-and-release-the-trice-tool)
+ * [48.1. Build Trice tool from Go sources](#build-trice-tool-from-go-sources)
+ * [48.2. Prepare A Release](#prepare-a-release)
+ * [48.2.1. Check a GoReleaser Release before Publishing](#check-a-goreleaser-release-before-publishing)
+ * [48.3. Trigger a real Trice release via CI (with git tag)](#trigger-a-real-trice-release-via-ci-with-git-tag)
+ * [48.3.1. Make sure your workflow reacts to tags](#make-sure-your-workflow-reacts-to-tags)
+ * [48.3.2. Final checks before tagging](#final-checks-before-tagging)
+ * [48.3.3. Choose a version and create a git tag](#choose-a-version-and-create-a-git-tag)
+ * [48.3.4. Push the tag to GitHub (this triggers CI)](#push-the-tag-to-github-this-triggers-ci)
+ * [48.3.5. Watch the CI release run on GitHub](#watch-the-ci-release-run-on-github)
+ * [48.3.6. Check the GitHub Release](#check-the-github-release)
+* [49. Ctrl-C robust use of trice insert and trice clean](#ctrl-c-robust-use-of-trice-insert-and-trice-clean)
+ * [49.1. Background: GitHub issue #658](#background-github-issue-658)
+ * [49.2. What Bash scripts can and cannot protect against](#what-bash-scripts-can-and-cannot-protect-against)
+ * [49.3. Recommended build-script ownership rule](#recommended-build-script-ownership-rule)
+ * [49.4. Recommended Bash pattern](#recommended-bash-pattern)
+ * [49.5. Preserve the build exit code](#preserve-the-build-exit-code)
+ * [49.6. Be careful with current working directory changes](#be-careful-with-current-working-directory-changes)
+ * [49.7. Prefer Makefile clean targets when available](#prefer-makefile-clean-targets-when-available)
+ * [49.8. Example scripts](#example-scripts)
+ * [49.9. Summary](#summary-2)
+* [50. Scratch Pad](#scratch-pad)
@@ -1808,32 +1875,32 @@ When `id.TriceCacheEnabled` is true (applied `-cache` CLI switch) and the folder
### 8.4. Trice Cache Tests
| Nr | Action | cCache | iCache | ID state | Edited state | Test function |
-|-------|----------|---------|---------|------------|------------|-------------------------------------------------------------------------------|
-| 0,1 | 0:clean | 0:inval | 0:inval | 0:cleaned | X:any | Test_0_1_0000X_clean_on_invalid_cCache_invalid_iCache_cleaned_file |
-| 2,3 | 0:clean | 0:inval | 0:inval | 1:inserted | X:any | Test_2_3_00011_clean_on_inalid_cCache_invalid_iCache_inserted_edited_file |
-| 4,5 | 0:clean | 0:inval | 1:valid | 0:cleaned | X:any | Test_4_5_0010X_clean_on_invalid_cCache_valid_iCache_cleaned_file |
-| 6 | 0:clean | 0:inval | 1:valid | 1:inserted | 0:not | Test_6_00110_clean_on_invalid_cCache_valid_iCache_inserted_not_edited_file |
-| 7 | 0:clean | 0:inval | 1:valid | 1:inserted | 1:yes | Test_7_00111_clean_on_invalid_cCache_valid_iCache_inserted_edited_file |
-| 8 | 0:clean | 1:valid | 0:inval | 0:cleaned | 0:not | Test_8_01000_clean_on_valid_cCache_invalid_iCache_cleaned_not_edited_file |
-| 9 | 0:clean | 1:valid | 0:inval | 0:cleaned | 1:yes | Test_9_01001_clean_on_valid_cCache_invalid_iCache_cleaned_edited_file |
-| 10 | 0:clean | 1:valid | 0:inval | 1:inserted | 0:not | Test_10_01011_clean_on_valid_cCache_invalid_iCache_inserted_not_edited_file |
-| 11 | 0:clean | 1:valid | 0:inval | 1:inserted | 1:yes | Test_11_01011_clean_on_valid_cCache_invalid_iCache_inserted_edited_file |
-| 12 | 0:clean | 1:valid | 1:valid | 0:cleaned | 0:not | Test_12_01100_clean_on_valid_iCache_valid_cCache_clean_file_not_edited |
-| 13 | 0:clean | 1:valid | 1:valid | 0:cleaned | 1:yes | Test_13_01101_clean_on_valid_iCache_valid_cCache_clean_file_edited |
-| 14 | 0:clean | 1:valid | 1:valid | 1:inserted | 0:not | Test_14_01110_clean_on_valid_iCache_valid_cCache_inserted_file_not_edited |
-| 15 | 0:clean | 1:valid | 1:valid | 1:inserted | 1:yes | Test_15_01111_clean_on_valid_iCache_valid_cCache_inserted_file_edited |
-| 16,17 | 1:insert | 0:inval | 0:inval | 0:cleaned | X:any | Test_16_17_1000X_insert_on_invalid_cCache_invalid_iCache_cleaned_file |
-| 18,19 | 1:insert | 0:inval | 0:inval | 1:inserted | X:any | Test_18_19_1001X_insert_on_invalid_cCache_invalid_iCache_inserted_edited_file |
-| 20,21 | 1:insert | 0:inval | 1:valid | 0:cleaned | X:any | Test_20_21_1010X_insert_on_invalid_cCache_valid_iCache_cleaned_file |
-| 22 | 1:insert | 0:inval | 1:valid | 1:inserted | 0:not | Test_22_10100_insert_on_invalid_cCache_valid_iCache_inserted_not_edited_file |
-| 23 | 1:insert | 0:inval | 1:valid | 1:inserted | 1:yes | Test_23_10101_insert_on_invalid_cCache_valid_iCache_inserted_edited_file |
-| 24 | 1:insert | 1:valid | 0:inval | 0:cleaned | 0:not | Test_24_11000_insert_on_valid_cCache_invalid_iCache_cleaned_not_edited_file |
-| 25 | 1:insert | 1:valid | 0:inval | 0:cleaned | 1:yes | Test_25_11001_insert_on_valid_cCache_invalid_iCache_cleaned_edited_file |
-| 26,27 | 1:insert | 1:valid | 0:inval | 1:inserted | X:any | Test_26_27_1010X_insert_on_invalid_cCache_valid_iCache_cleaned_file |
-| 28 | 1:insert | 1:valid | 1:valid | 0:cleaned | 0:not | Test_28_11100_insert_on_valid_cCache_valid_iCache_cleaned_not_edited_file |
-| 29 | 1:insert | 1:valid | 1:valid | 0:cleaned | 1:yes | Test_29_11100_insert_on_valid_cCache_valid_iCache_cleaned_edited_file |
-| 30 | 1:insert | 1:valid | 1:valid | 1:inserted | 0:not | Test_30_11110_insert_on_valid_cCache_valid_iCache_inserted_not_edited_file |
-| 31 | 1:insert | 1:valid | 1:valid | 1:inserted | 1:yes | Test_31_11111_insert_on_valid_cCache_valid_iCache_inserted_edited_file |
+|-------|----------|---------|---------|------------|--------------|-------------------------------------------------------------------------------|
+| 0,1 | 0:clean | 0:inval | 0:inval | 0:cleaned | X:any | Test_0_1_0000X_clean_on_invalid_cCache_invalid_iCache_cleaned_file |
+| 2,3 | 0:clean | 0:inval | 0:inval | 1:inserted | X:any | Test_2_3_00011_clean_on_inalid_cCache_invalid_iCache_inserted_edited_file |
+| 4,5 | 0:clean | 0:inval | 1:valid | 0:cleaned | X:any | Test_4_5_0010X_clean_on_invalid_cCache_valid_iCache_cleaned_file |
+| 6 | 0:clean | 0:inval | 1:valid | 1:inserted | 0:not | Test_6_00110_clean_on_invalid_cCache_valid_iCache_inserted_not_edited_file |
+| 7 | 0:clean | 0:inval | 1:valid | 1:inserted | 1:yes | Test_7_00111_clean_on_invalid_cCache_valid_iCache_inserted_edited_file |
+| 8 | 0:clean | 1:valid | 0:inval | 0:cleaned | 0:not | Test_8_01000_clean_on_valid_cCache_invalid_iCache_cleaned_not_edited_file |
+| 9 | 0:clean | 1:valid | 0:inval | 0:cleaned | 1:yes | Test_9_01001_clean_on_valid_cCache_invalid_iCache_cleaned_edited_file |
+| 10 | 0:clean | 1:valid | 0:inval | 1:inserted | 0:not | Test_10_01011_clean_on_valid_cCache_invalid_iCache_inserted_not_edited_file |
+| 11 | 0:clean | 1:valid | 0:inval | 1:inserted | 1:yes | Test_11_01011_clean_on_valid_cCache_invalid_iCache_inserted_edited_file |
+| 12 | 0:clean | 1:valid | 1:valid | 0:cleaned | 0:not | Test_12_01100_clean_on_valid_iCache_valid_cCache_clean_file_not_edited |
+| 13 | 0:clean | 1:valid | 1:valid | 0:cleaned | 1:yes | Test_13_01101_clean_on_valid_iCache_valid_cCache_clean_file_edited |
+| 14 | 0:clean | 1:valid | 1:valid | 1:inserted | 0:not | Test_14_01110_clean_on_valid_iCache_valid_cCache_inserted_file_not_edited |
+| 15 | 0:clean | 1:valid | 1:valid | 1:inserted | 1:yes | Test_15_01111_clean_on_valid_iCache_valid_cCache_inserted_file_edited |
+| 16,17 | 1:insert | 0:inval | 0:inval | 0:cleaned | X:any | Test_16_17_1000X_insert_on_invalid_cCache_invalid_iCache_cleaned_file |
+| 18,19 | 1:insert | 0:inval | 0:inval | 1:inserted | X:any | Test_18_19_1001X_insert_on_invalid_cCache_invalid_iCache_inserted_edited_file |
+| 20,21 | 1:insert | 0:inval | 1:valid | 0:cleaned | X:any | Test_20_21_1010X_insert_on_invalid_cCache_valid_iCache_cleaned_file |
+| 22 | 1:insert | 0:inval | 1:valid | 1:inserted | 0:not | Test_22_10100_insert_on_invalid_cCache_valid_iCache_inserted_not_edited_file |
+| 23 | 1:insert | 0:inval | 1:valid | 1:inserted | 1:yes | Test_23_10101_insert_on_invalid_cCache_valid_iCache_inserted_edited_file |
+| 24 | 1:insert | 1:valid | 0:inval | 0:cleaned | 0:not | Test_24_11000_insert_on_valid_cCache_invalid_iCache_cleaned_not_edited_file |
+| 25 | 1:insert | 1:valid | 0:inval | 0:cleaned | 1:yes | Test_25_11001_insert_on_valid_cCache_invalid_iCache_cleaned_edited_file |
+| 26,27 | 1:insert | 1:valid | 0:inval | 1:inserted | X:any | Test_26_27_1010X_insert_on_invalid_cCache_valid_iCache_cleaned_file |
+| 28 | 1:insert | 1:valid | 1:valid | 0:cleaned | 0:not | Test_28_11100_insert_on_valid_cCache_valid_iCache_cleaned_not_edited_file |
+| 29 | 1:insert | 1:valid | 1:valid | 0:cleaned | 1:yes | Test_29_11100_insert_on_valid_cCache_valid_iCache_cleaned_edited_file |
+| 30 | 1:insert | 1:valid | 1:valid | 1:inserted | 0:not | Test_30_11110_insert_on_valid_cCache_valid_iCache_inserted_not_edited_file |
+| 31 | 1:insert | 1:valid | 1:valid | 1:inserted | 1:yes | Test_31_11111_insert_on_valid_cCache_valid_iCache_inserted_edited_file |
### 8.5. Possible Trice Cache Editor-Issues And How To Get Around
@@ -2073,7 +2140,28 @@ See chapter [Trice Tags and Color](#trice-tags-and-color).
#### 12.2.11. Location Information
-When running `trice insert`, a file `li.json` is created, which you can control with the `-li|locationInformation` switch. During logging, when `li.json` is found, automatically the filename and line number is displayed in front of each log line, controllable with the `-liFmt` switch. Each newly generated location entry retains both the legacy `File` value and a normalized `/`-separated `Path` relative to the directory containing `li.json`. For `trice log`, `-liPath legacy|base|relative|full` selects the displayed representation without regenerating `li.json`; `full` resolves the stored path against the `li.json` directory or an explicit `-liRoot`. This information is correct only with the right version of the `li.json` file. That is usually the case on the PC during development. Out in the field only the `til.json` reference is of importance. It serves as an accumulator of all firmware versions and usually the latest version of this file is the best fit. The `li.json` file should stay with the software developer only and needs no version control in the usual case because it is rebuilt with each compilation, when `trice i` is a prebuild step. When `trice clean` is used, the file `li.json` should go into the version management too to secure that identical trices get the same ID back.
+The `add`, `insert`, and `clean` commands generate the file selected by `-li|locationInformation`. Each entry stores one canonical source path and its line number:
+
+```json
+{
+ "1234": {
+ "File": "examples/TriceABC/src/main.c",
+ "Line": 42
+ }
+}
+```
+
+`File` is relative to `-liRoot` and always uses `/` separators. The default root is the directory containing the selected `li.json`. An explicit relative `-liRoot` is resolved from the current working directory. If a relative path cannot be represented, for example across Windows volumes, Trice stores a normalized absolute path without resolving symbolic links.
+
+For example, when `build/demoLI.json` and `examples/TriceABC/src/main.c` are below the project directory, the default stores `../examples/TriceABC/src/main.c`. To store a project-relative path instead, run:
+
+```bash
+trice insert -li build/demoLI.json -liRoot . -src examples/TriceABC
+```
+
+During logging, `-liMaxDirs` controls how much of the stored path is shown. Its default `0` shows only the filename. For `examples/TriceABC/src/main.c`, values `1`, `2`, and `3` show `src/main.c`, `TriceABC/src/main.c`, and the complete stored path respectively. Leading `..` components describe the relation to `-liRoot` and are not displayed or counted. `-liFmt` continues to control the surrounding filename and line-number format.
+
+Location information must match the exact firmware version. In field deployments, keeping `li.json` private and showing the numeric ID with `-showID` can be preferable. When `trice clean` is used, consider versioning the matching `li.json` so later insert operations can reuse locations consistently.
### 12.3. Visualization output with `-vis`
@@ -3370,302 +3458,1446 @@ Then builds can explicitly test or select the behavior with compiler defines suc
-DTRICE_OFF=1 -DTRICE_TX_X0_COUNTED_BUFFER_SUPPORT=0
```
-#### 20.4.3. `typeX0` Usage in `./examples/G0B1_inst`
+#### 20.4.3. `typeX0` Usage in `./examples/G0B1_inst`
+
+
+
+The point here is that with CLI switch `-typeX0=ignore` the counted X0 packages are invisible after their length has been checked. A future `-typeX0=forward:` option could be implemented as a `trice log` extension.
+
+### 20.5. Go implementation layout
+
+Keep the `typeX0` mode parsing and handling centralized so later modes can be added without spreading switch logic through the decoder.
+
+Code layout:
+
+```text
+internal/args/...
+ define CLI flag -typeX0 and help text
+
+internal/decoder/typeX0.go
+ hold the configured TypeX0 value
+ parse error, ignore, all:ignore, counted:,
+ format counted payloads with Go fmt
+ reject unsupported mode prefixes clearly
+
+internal/trexDecoder/trexDecoder.go
+ detect selector == 0
+ pass the remaining record buffer to the typeX0 helper
+ append returned output to the decoder result
+ consume the logical X0 record and zero alignment padding when present
+```
+
+Unsupported future modes shall fail with a clear diagnostic, for example:
+
+```text
+unsupported typeX0 mode "forward"
+```
+
+This structure keeps future extensions local. For example:
+
+```text
+-typeX0=forward:
+```
+
+could later forward valid X0 payload bytes to another sink instead of formatting them.
+
+### 20.6. Tests
+
+The counted X0 path is tested through the existing `_test/testdata/triceCheck.c` mechanism, because these test lines are processed by many Trice configurations.
+
+The shared test configurations that build `triceCheck.c` define:
+
+```c
+#define TRICE_TX_X0_COUNTED_BUFFER_SUPPORT 1
+```
+
+`src/triceX0.c` is compiled into the CGO test target through the master file `_test/testdata/cgoPackage.go`. Generated `generated_cgoPackage.go` copies are refreshed from that master file by `scripts/_renewIDs_in_examples_and_refresh_test_folder.sh`.
+
+The X0 block in `_test/testdata/triceCheck.c` is guarded by `TRICE_TX_X0_COUNTED_BUFFER_SUPPORT == 1` and intentionally mixes different counted X0 lengths with normal Trices:
+
+```c
+#if TRICE_TX_X0_COUNTED_BUFFER_SUPPORT == 1
+ break; case __LINE__: triceX0(x0Payload, 0);
+ break; case __LINE__: triceX0(x0Payload, 5); trice8B("wr:X0-B: %02x\n", x0Payload, 5);
+ break; case __LINE__: triceX0(x0Payload, 2); triceX0(x0Payload + 2, 4); trice("wr:X0 tail\n");
+#endif
+```
+
+The current shared CGO test option formats the X0 payload with the `sig:` prefix:
+
+```text
+counted:sig:% x\n
+```
+
+For maintenance, keep these parts aligned:
+
+1. The master CGO file includes `../../src/triceX0.c`.
+2. `triceCheck.c` uses `TRICE_TX_X0_COUNTED_BUFFER_SUPPORT == 1` as guard.
+3. The X0 test block uses different lengths and mixed packages with `trice`, `triceS`, `TriceS`, `trice8B`, `Trice8B` and `TRice8B`.
+4. `_test/.../triceConfig.h` files that build `triceCheck.c` enable `TRICE_TX_X0_COUNTED_BUFFER_SUPPORT`.
+5. `_test` CGO checks set `decoder.TypeX0` to `counted:sig:% x\n`.
+6. The full `_test/` matrix remains the final coverage check.
+
+
+
+Additional focused Go unit tests cover:
+
+```text
+no -typeX0 -> X0 packet is an error
+-typeX0=error -> X0 packet is an error
+-typeX0=ignore -> valid X0 packet produces no output
+-typeX0=all:ignore -> complete selector-0 package is consumed without counted parsing
+-typeX0="%s" -> payload is printed as string
+-typeX0="[%s]" -> payload is printed with formatting
+-typeX0="% x" -> payload is printed as spaced hex
+-typeX0=counted:sig:%s -> explicit counted mode is needed when the format contains a colon
+-typeX0=sig:%s -> unsupported mode "sig"
+malformed X0 -> error, also with -typeX0=ignore
+unsupported mode -> clear error
+mixed package -> counted X0 can be followed by a regular Trice in framed data
+NONE framing -> counted X0 consumes zero alignment padding when present
+```
+
+### 20.7. Initial scope
+
+The initial implementation includes only:
+
+```text
+selector-0 detection for records with len >= 2
+counted X0 payloads
+-typeX0=error as default
+-typeX0=counted:ignore
+-typeX0=ignore as counted shorthand
+-typeX0=all:ignore
+-typeX0=counted:
+-typeX0= as counted shorthand only when contains no colon
+errors for unsupported short non-X0 packets
+clear errors for malformed X0 packets and unsupported modes
+```
+
+No `counted32`, `forward`, JSON descriptor, plugin interface or `user1B` / `user2B` / `user3B` handling is part of the initial scope.
+
+(back to top)
+
+## 21. Trice Decoding
+
+The 14-bit IDs are used to display the log strings. These IDs are pointing in two reference files.
+
+### 21.1. Trice ID list til.json
+
+* This file integrates all firmware variants and versions and is the key to display the message strings. With the latest version of this file all previous deployed firmware images are usable without the need to know the actual firmware version.
+* The files `til.h` and `til.c` are generated to help writing an own trice decoder tool in your preferred language. Use `trice generate -tilH -tilC` for creation. That can be interesting in environments, where Go compiled binaries not executable, like [PCs running QNX OS](https://github.com/rokath/trice/discussions/263#discussioncomment-4180692). See also chapter [Trice Generate](#trice-generate).
+
+### 21.2. Trice location information file li.json
+
+* If the generated `li.json` is available, the Trice tool automatically displays file name and line number. But that is accurate only with the exact matching firmware version. That usually is the case right after compiling and of most interest at the developers table.
+* The Trice tool will silently not display location information, if the `li.json` file is not found. For in-field logging, the option `-showID "inf:%5d"` could be used. This allows later an easy location of the relevant source code.
+* Another option is to record the binary trice messages (`trice log -p com1 -blf aFileName`) and to play them later with the Trice tool using the correct `li.json` (`trice log -p FILEBUFFER -args aFileName` ).
+* Each entry contains only `File` and `Line`. `File` retains the normalized source path relative to `-liRoot`; the default root is the directory containing `li.json`.
+* Use an explicit project root when `li.json` lives in a build directory but stable project-relative paths are wanted: `trice insert -li build/demoLI.json -liRoot .`.
+* `File` uses `/` separators on every platform. Required leading `..` components are preserved. If Windows cannot make a source path relative across volumes, the normalized absolute path is stored.
+* `trice log` and `tlog` show only the filename by default. `-liMaxDirs=N` adds at most `N` immediately preceding parent directories. Leading `..` components are never displayed or counted.
+* The former `Path` field and `-liPath` option are intentionally removed. Regenerating an old location file with a current ID-management command removes obsolete `Path` fields.
+* The Trice repository uses `-liRoot .` while generating the shared `demoLI.json`, so all stored paths remain relative to the repository root across supported platforms.
+
+(back to top)
+
+## 22. Trice ID Numbers
+
+### 22.1. ID number selection
+
+* The default encoding TREX supports 14-bit IDs, so over 16000 IDs possible. Other encodings can work with other ID sizes.
+* `trice("Hi!\n");` ➡ `trice i` ➡ `trice( iD(12345), "Hi!\n");` ➡ `trice c` ➡ `trice("Hi!\n");`
+* The **ID** `12345` is a number assigned to `trice( "Hi!\n");` in the above example.
+ * It is a so far unused number, according to rules you can control:
+ * The `-IDMethod` switch allows a selection method for new IDs.
+ * Per default new IDs determined randomly to keep the chance low, that several developers grab the same ID.
+ * Example: `trice insert -IDMin 1000 -IDMethod upward` will choose the smallest free ID >= 1000.
+ * This allows to use the ID space without wholes.
+ * The `-IDMin` and `-IDMax` switches are usable to control the ID range, a new ID is selected from, making it possible to divide the ID space. Each developer can gets it region.
+ * Example: `trice insert -IDMin 6000 -IDMax 6999` will choose new randomly IDs only between 6000 and 6999.
+* It is possible to give each Trice tag an **ID** range making it possible to implement Trice tag specific runtime on/off on the target side if that is needed. This could be interesting for routing purposes also. Please run `trice help -insert` and read about the `-IDRange` switch for more details.
+
+#### 22.1.1. Trice tool internal Method to get fast a random ID
+
+* Create Slice with numbers 1...16383
+* Remove all used ID numbers from this slice
+* Get random number between 0 and len(slice)
+* remove this ID from slice and use it as new ID
+
+### 22.2. ID number usage and stability
+
+* If you write `trice( "msg:%d", 1);` again on a 2nd location, the copy gets a different **ID**, because each Trice gets its own **ID**.
+* If you change `trice( "msg:%d", 1);` to `trice8( "msg:%d", 1);`, to reduce the needed parameter space, a new **ID** is assigned. That is because the parameter bit width is implicit a part of the now changed Trice. If you change that back, the previous **ID** is assigned again.
+* If you change `trice( "msg:%d", 1);` to `TRice8( "msg:%d", 1);`, to get a 32-bit stamp, the associated **ID** remains unchanged. That is because the optional stamp is not a part of the Trice itself.
+* IDs stay constant and get only changed to solve conflicts.
+* To make sure, a single ID will not be changed, you could change it manually to a hexadecimal syntax.
+ * This lets the `trice insert` command ignore such Trice macros and therefore a full [til.json](../demoTIL.json) rebuild will not add them anymore. Generally this should not be done, because this could cause future bugs.
+ * It is possible to assign an ID manually as decimal number. It will be added to the ID list automatically during the next `trice i|c` if no conflicts occur.
+* If a Trice was deleted inside the source tree (or file removal) the appropriate ID stays inside the ID list.
+* If the same string appears again in the same file this ID is active again.
+* If a trice occurs more than one time, each occurrence gets a different ID. If then 2 of them disappear, their ID numbers stay in `til.json`. If then one of them comes back, it gets its ID back.
+
+### 22.3. Trice ID 0
+
+* The trice ID 0 is a placeholder for "no ID", which is replaced automatically during the next `trice insert` according to the used trice switches `-IDMethod`, `-IDMin` and `IDMax`.
+ * It is sufficient to write the `TRICE` macros just without the `id(0),` `Id(0),` `ID(0),`. It will be inserted automatically according the `-defaultStampSize` switch. With `trice clean` these stay with 0-values in the source code to encode the intended stamp size.
+ * It is recommended to use the `trice`, `Trice` and `TRice` macros instead of `TRICE`. They encode the stamp size in their names already. There may be cases, where the user prefers to use the code inserting macros `TRICE` to get maximum performnce.
+
+(back to top)
+
+## 23. Trice ID management
+
+### 23.1. Trice inside source code
+
+#### 23.1.1. Trice in source code comments
+
+* Trice macros commented out, are **visible** for the `trice insert` command and therefore regarded.
+ * Example: `// trice("Hi!\n");` is still regarded by the `trice i`.
+* During `trice insert` commented out Trice macros, are treated in the same way as active Trice macros. Even after deletion their content stays inside til.json. This is intensionally to get best stability across several firmware versions or variants.
+* The trice tool does treat trice statements inside comments or excluded by compiler switches also.
+
+#### 23.1.2. Trice parser exclusion markers
+
+Use `TRICE_INSERT_OFF` and `TRICE_INSERT_ON` markers to exclude a source section from `trice insert`, `trice clean`, `trice add` and ID refresh parsing.
+
+```C
+// TRICE_INSERT_OFF
+TRice("This text is ignored by the trice tool.");
+// TRICE_INSERT_ON
+```
+
+The markers are case-sensitive, must be written as comments, and affect only the Trice tool parser. `TRICE_INSERT_OFF` without a following `TRICE_INSERT_ON` disables Trice parsing until the end of the file. The marker state is local to the scanned file and does not affect source files including that file. This is useful for Trice target sources or other source sections containing Trice-like comments or helper macros that should not create or change IDs.
+
+#### 23.1.3. Different IDs for same Trices
+
+* When the same Trice is used several times with identical IDs, after copying, and `trice insert` is called, only one ID survives in the source code. The other Trices get assigned new IDs. Otherwise the location information would not be correct everywhere.
+
+#### 23.1.4. Same IDs for different Trices
+
+* If duplicate ID's with different format strings found inside the source tree (case several developers or source code merging) one ID is replaced by a new ID. The probability for such case is low, because of the default random ID generation.
+* Also you can simply copy a Trice statement and modify it without dealing with the ID.
+* The Trice tool will detect the 2nd (or 3rd) usage of this ID and assign a new one, also extending the ID list.
+* That is done silently for you during the next `trice insert`.
+* When you use the [Trice Cache](#trice-cache), the IDs are invisible and all happens in the background automatically.
+
+#### 23.1.5. ID Routing
+
+With the Trice insert CLI switch `-IDRange` each Trice [tag](#tags-color-and-log-levels) can get a specific ID range assigned and inside the project specific *triceConfig.h* the user can control, which ID range is routed to specific output channels. Search for `_MIN_ID` inside **triceDefaultConfig.h** and extend your search than for example `TRICE_UARTA_MIN_ID` to explore how to use.
+
+#### 23.1.6. Possibility to create new tags without modifying trice tool source
+
+According to the demand in [541](https://github.com/rokath/trice/issues/541) a CLI switch `-ulabel` exists now.
+
+Use `-ulabel` for additional user labels. Try this example in an empty folder:
+
+* File *main.c*:
+
+```C
+#include "trice.h"
+
+int main(void){
+ trice("msg:hi\n");
+ trice("man:hi\n");
+ trice("wife:hi\n");
+ trice("any:hi\n");
+}
+```
+
+* Bash:
+
+```bash
+touch til.json li.json
+trice i -IDMin 1004 -IDMax 6999 -IDRange wife:16000,16009 -IDRange man:1000,1003 -ulabel man -ulabel wife
+```
+
+* File *main.c*:
+
+```C
+#include "trice.h"
+
+int main(void){
+ trice(iD(5778), "msg:hi\n");
+ trice(iD(1002), "man:hi\n");
+ trice(iD(16004), "wife:hi\n");
+ trice(iD(2184), "any:hi\n");
+}
+```
+
+(back to top)
+
+## 24. Trice Bind
+
+**Status:** User manual for MVP and MVP2 with local counter rebasing
+**Authoritative technical specification:** [`Trice_bind_10_MVP_Spezifikation.md`](./TriceBind/Trice_bind_10_MVP_Spezifikation.md)
+**MVP test requirements:** [`Trice_bind_30_MVP_Test_Spezifikation.md`](./TriceBind/Trice_bind_30_MVP_Test_Spezifikation.md)
+**Technical background for MVP2:** [`Trice_bind_60_MVP2_Implementation_Strategies.md`](./TriceBind/Trice_bind_60_MVP2_Implementation_Strategies.md) and [`60_MVP2_Local_Counter_Rebase`](../experiments/TriceBind/60_MVP2_Local_Counter_Rebase/README.md)
+
+### 24.1. Overview
+
+`trice bind` assigns and manages stable Trice IDs without writing numeric IDs into bind-managed user Trice calls.
+
+For example, the user code remains:
+
+```c
+trice("msg:module initialized\n");
+```
+
+`trice bind` scans the project sources, uses the existing ID management with `til.json` and `li.json`, and generates one temporary sidecar header for each bind-managed source or header file. The compiler still compiles the original sources directly.
+
+The normal workflow is:
+
+```text
+trice bind
+Build
+```
+
+A subsequent `trice clean` is not required in a stable bind project.
+
+`trice bind` must be run after every change to a scanned source or header file and before the build. An outdated sidecar may still compile in some cases but contain an ID that no longer matches.
+
+### 24.2. Requirements
+
+A bind project requires:
+
+- the normal Trice library under `./src`,
+- `til.json`,
+- `li.json`,
+- the PC tool with the `trice bind` subcommand,
+- a build step before C/C++ compilation,
+- the sidecar directory on the include path.
+
+The default directory is:
+
+```text
+./build/triceIDs
+```
+
+`trice bind` creates the directory when needed. It is normally not version-controlled.
+
+### 24.3. Quick Start
+
+#### 24.3.1. New ID-Free Project
+
+1. Write Trice calls without numeric IDs:
+
+ ```c
+ trice("msg:start\n");
+ ```
+
+2. Run `trice bind`:
+
+ ```sh
+ trice bind [shared insert options]
+ ```
+
+3. Add the sidecar directory to the compiler include path:
+
+ ```text
+ -I./build/triceIDs
+ ```
+
+4. Build the project.
+
+`trice bind` adds a file-local include to bind-managed files, for example:
+
+```c
+#include "trice_module_c_K73A915E9C4021B8.h" // trice-bind: keep as last include before this file's Trice calls
+```
+
+#### 24.3.2. Migration from `trice insert`
+
+For a project previously managed entirely with `insert`:
+
+```text
+trice clean
+trice bind
+Build
+```
+
+`trice clean` removes inserted IDs. `trice bind` then generates file keys, sidecar includes, and sidecars.
+
+### 24.4. Persistent and Generated Files
+
+The following files and lines are persistent and normally version-controlled:
+
+- user sources,
+- `til.json`,
+- `li.json`,
+- the sidecar include lines added by `trice bind`,
+- for counter-dependent constructs, one clearly marked begin and one end include line in each affected source or header file.
+
+The following are generated and normally not version-controlled:
+
+- owner sidecars under `./build/triceIDs`,
+- rebase helper headers in the same directory with the suffixes `_begin.h` and `_end.h`,
+- other normal build artifacts.
+
+The owner include line stores the stable file key. The sidecar and rebase helper headers can be regenerated by `trice bind` at any time. Rebase include pairs are validated and logically removed during every bind run, then regenerated from the current source analysis. Formatter-owned horizontal whitespace is retained when the regenerated boundary has the same identity. The lines must not be moved, renamed, or partially edited manually.
+
+### 24.5. Hierarchical Metadata Reuse
+
+Each `trice bind` invocation has one writable primary TIL, LI, and `bindDir`. Files selected by `-src` may be individual files or directories. Existing valid File Keys remain unchanged; a bind-owned file without a File Key receives one when needed.
+
+For each source, `bind` performs a bounded search from its directory up to its `-src` anchor, optionally one level higher, and around the configured TIL and LI paths. Hidden directories such as `.git` and `.trice` are ignored. Immediate `*.json` files are recognized as TIL or LI data by their contents, so custom names such as `demoIDs.json` work without another option.
+
+Discovered JSON and historical `build/triceIDs` sidecars are read-only evidence. Sidecars are parsed to recover earlier assignments but are never copied because their line descriptors may be stale. Current sidecars are always regenerated from the current source into the selected `bindDir`.
+
+The primary TIL always wins a numeric-ID conflict. A conflicting subproject ID quietly yields to another matching or newly allocated primary ID; `-verbose` explains such decisions. A conflict-free historical ID is retained and only its actively used mapping is added to the primary TIL. Secondary TILs, LIs, and build artifacts are never modified.
+
+All discovery and conflict resolution completes before regular output is written. A fatal ambiguity therefore leaves sources, JSON files, and generated outputs unchanged. The complete normative implementation strategy and fallback order are documented in [`internal/id/bindIDs_doc.go`](../internal/id/bindIDs_doc.go).
+
+### 24.6. File Key and Sidecar Name
+
+Every bind-managed file receives a randomly generated 64-bit key once:
+
+```text
+K73A915E9C4021B8
+```
+
+Example:
+
+```text
+module.c
+→ trice_module_c_K73A915E9C4021B8.h
+```
+
+The base name improves readability. The key also distinguishes files with identical names in different directories.
+
+If a source is copied together with its sidecar include line, both files initially have the same key. `trice bind` detects this as a conflict; one of the files must receive a new key.
+
+Including the same header in multiple translation units is expected and supported.
+
+### 24.7. Sidecar Contents
+
+A sidecar may look like this:
+
+```c
+/// \file trice_module_c_K73A915E9C4021B8.h
+/// \brief Generated by trice bind. Do not edit.
+
+#undef TRICE_BIND_FILE_KEY
+#define TRICE_BIND_FILE_KEY K73A915E9C4021B8
+#define TRICE_BIND_ROUTE_K73A915E9C4021B8 BIND
+
+// -defaultStampSize 16
+#define TRICE_BIND_SITE_K73A915E9C4021B8_L9 TRICE_BIND_AUTO, Id(12345u) // TRICE("Hello");
+#define TRICE_BIND_SITE_K73A915E9C4021B8_L10 TRICE_BIND_REPLACE, id(12346u) // TRICE(id(0), "world");
+#define TRICE_BIND_SITE_K73A915E9C4021B8_L11 TRICE_BIND_AUTO, iD(12347u) // trice("!\n");
+```
+
+Meaning:
+
+- `TRICE_BIND_AUTO`: The TID expression is inserted as the missing first argument.
+- `TRICE_BIND_REPLACE`: An existing zero placeholder is replaced with the stable ID.
+- `iD`, `id`, `Id`, and `ID` retain the existing Trice stamp semantics.
+- The comments support diagnostics.
+- Each site definition occupies one physical line.
+
+During preprocessing, the ID becomes a normal compile-time constant. The target needs neither a string lookup nor an additional runtime mapping table.
+
+### 24.8. Why the Sidecar Include Is File-Local
+
+The include does more than provide ID definitions. It activates the bind context of the physical file for the following Trice calls.
+
+Within one translation unit, sidecars for several headers and the `.c` file can become active in sequence. Therefore, each file must activate its own file key before its own Trice calls.
+
+Typical `.c` file:
+
+```c
+#include "trice.h"
+#include "module.h"
+#include "driver.h"
+#include "trice_module_c_K73A915E9C4021B8.h" // trice-bind: keep as last include before this file's Trice calls
+
+void moduleInit(void)
+{
+ trice("msg:module initialized\n");
+}
+```
+
+A central include of all sidecars in `triceConfig.h` cannot replace this local selection.
+
+### 24.9. Headers and `static inline`
+
+Headers containing direct Trice calls receive their own sidecar:
+
+```c
+#ifndef MODULE_H
+#define MODULE_H
+
+#include "trice.h"
+#include "dependency.h"
+#include "trice_module_h_K1111111111111111.h" // trice-bind: keep as last include before this file's Trice calls
+
+static inline void moduleCheck(int value)
+{
+ trice("msg:value=%d\n", value);
+}
+
+#endif
+```
+
+All translation units use the same stable ID for this textual header site.
+
+For reusable logging helpers with multiple Trice sites, a `static inline` function is normally preferable to a preprocessor macro. Its Trice sites can use the normal file-and-line path and therefore need no rebase includes at each call site. [Preferred Form: Normal or `static inline` Function](#preferred-form-normal-or-static-inline-function) shows the recommended implementation and the semantic differences.
+
+After the header include, the `.c` file activates its own file key again through its own sidecar.
+
+The same owner sidecar may be included several times within a file if a later header switches the active file key.
+
+### 24.10. Automatic Include Position
+
+If the sidecar include is missing, `trice bind` uses a conservative heuristic:
+
+1. It finds the last include before the first bindable Trice site.
+2. It inserts the sidecar immediately after that include.
+3. If there is no preceding include, it inserts the sidecar directly before the first bindable Trice site.
+4. If a bindable Trice site appears before a later include, no unsafe automatic change is made; the user receives a diagnostic.
+
+An existing valid include is not moved unnecessarily.
+
+The `// trice-bind: ...` comment is a developer aid. Technical detection uses the include directive, sidecar name, and file key; removing only the comment is allowed.
+
+### 24.11. File Classification and Mixed Projects
+
+`trice bind` classifies every physical file.
+
+#### 24.11.1. Insert-Owned
+
+All managed Trice calls have explicit IDs greater than zero:
+
+```c
+trice(iD(123), "msg:legacy\n");
+```
+
+`trice bind` validates the file but does not modify it or generate a sidecar.
+
+#### 24.11.2. Bind-Owned
+
+The file contains only ID-free calls and/or zero placeholders:
+
+```c
+trice("msg:bound\n");
+TRICE(ID(0), "msg:bound with stamp\n");
+```
+
+`trice bind` manages the file key, include, and sidecar.
+
+#### 24.11.3. Mixed
+
+A file contains both forms:
+
+```c
+trice(iD(123), "msg:legacy\n");
+trice("msg:new\n");
+```
+
+This state is not allowed in the MVP. The file must be managed entirely by either `insert` or `bind`.
+
+#### 24.11.4. Insert-Owned File After a Bind Header
+
+A bind-owned header can be included by an insert-owned file. Before its own explicitly instrumented Trice calls, the file must remove the bind context:
+
+```c
+#include "bound_header.h"
+
+#undef TRICE_BIND_FILE_KEY
+
+trice(iD(123), "msg:insert-owned source\n");
+```
+
+This hybrid case is possible but is not the preferred normal workflow.
+
+### 24.12. Supported Trice Calls
+
+The MVP and MVP2 use the same parser and user-level macro detection as `trice insert`.
+
+In particular, the following are supported:
+
+- the public lowercase, mixed-case, and uppercase families,
+- 8-, 16-, 32-, and existing 64-bit forms,
+- arity-encoded forms,
+- string, count, buffer, float, RPC/ABC, and assertion families,
+- special macros such as `triceAssertOrReturnValue`, where they are part of the public interface,
+- the `-alias` and `-salias` names supported by `insert`,
+- direct calls in C, C++, and header files,
+- normal, `inline`, and `static inline` functions,
+- multiple ID-free calls on the same physical line,
+- the ordinary statement wrappers described under [Automatic Local Counter Rebase](#automatic-local-counter-rebase).
+
+`TRICE_INSERT_OFF` and `TRICE_INSERT_ON` behave as they do with `trice insert`.
+
+### 24.13. ID and Stamp Forms
+
+#### 24.13.1. ID-Free
+
+```c
+trice("msg:hello\n");
+TRICE8_3("msg:%d %d %d\n", a, b, c);
+```
+
+For macro names containing at least one lowercase letter, the sidecar uses `iD(...)`.
+
+For all-uppercase user-level macros, `-defaultStampSize` determines the form:
+
+- `0` → `id(...)`,
+- `16` → `Id(...)`,
+- `32` → `ID(...)`.
+
+#### 24.13.2. Zero Placeholders
+
+```c
+TRICE8_3(id(0), "msg:%d %d %d\n", a, b, c);
+TRICE8_3(Id(0), "msg:%d %d %d\n", a, b, c);
+TRICE8_3(ID(0), "msg:%d %d %d\n", a, b, c);
+```
+
+The wrapper form is retained; semantically, the sidecar replaces only the zero with the stable ID.
+
+### 24.14. Command Line
+
+Basic form:
+
+```sh
+trice bind [options]
+```
+
+Short form:
+
+```sh
+trice b [options]
+```
+
+In general, `bind` accepts the `insert` options relevant to source search, parsing, ID assignment, alias handling, `til.json`, and `li.json`.
+
+The principal bind-specific option is:
+
+```text
+-bindDir string
+ Output directory for sidecar headers.
+ Default: ./build/triceIDs
+```
+
+With:
+
+```sh
+trice bind -dry-run
+```
+
+planned changes are calculated and displayed, but no user, JSON, or sidecar files are written.
+
+### 24.15. Build Integration
+
+`trice bind` is a required generator step before compilation:
+
+```text
+Source change
+→ trice bind
+→ C/C++ build
+```
+
+The build system should:
+
+- run `trice bind` before dependent compilations,
+- add `./build/triceIDs` to the include path,
+- track sidecars as normal header dependencies,
+- not replace the generator with a mere compiler failure.
+
+The generator replaces a sidecar file only if its contents change. This keeps incremental builds limited to the translation units that are actually affected.
+
+### 24.16. `TRICE_CLEAN`
+
+`TRICE_CLEAN` remains optional. `trice bind` does not introduce a new global `TRICE_MODE`.
+
+If `TRICE_CLEAN` exists in `triceConfig.h`:
+
+- `trice bind` keeps its value at `0`,
+- `trice bind` does not add the definition,
+- `trice bind` does not remove it automatically.
+
+#### 24.16.1. `trice clean` After `trice bind`
+
+Bind-owned Trice calls already contain no IDs greater than zero. Therefore, `trice clean` does not remove IDs from them and deletes neither sidecar includes nor sidecars.
+
+With an existing definition:
+
+```c
+#define TRICE_CLEAN 0
+```
+
+`trice clean` changes it as before to:
+
+```c
+#define TRICE_CLEAN 1
+```
+
+The library then uses the clean/off path. Existing sidecars remain as artifacts but do not produce normal logging code.
+
+Without `TRICE_CLEAN`, running `trice clean` after a bind run has practically no effect:
+
+- user Trice calls remain ID-free,
+- sidecar includes remain,
+- sidecars remain,
+- the bind context remains available for the next build.
+
+Running `trice bind` again resets an existing definition to `0` and updates the sidecars.
+
+### 24.17. Re-Migration to `trice insert`
+
+A public re-migration subcommand is still not part of the normal user workflow. However, the repository helper script for returning to the clean state uses the same validated bind re-migration as the tests. It removes complete rebase include pairs, their helper headers, sidecar includes, and owner sidecars together, and corrects the affected lines in `li.json`.
+
+Anyone performing the return manually must remove all related artifacts and must not leave behind an individual begin or end include line. The previous workflow then follows:
+
+```text
+trice insert
+Build
+```
+
+### 24.18. Automatic Local Counter Rebase
+
+MVP2 does not add another command to the normal workflow:
+
+```text
+trice bind
+Build
+```
+
+The user neither sees nor maintains counter values or local ordinals. `__COUNTER__` is used only as a local compile-time selector; its value is never a Trice ID.
+
+#### 24.18.1. When the Normal Line Path Is Sufficient
+
+Unambiguous sites continue to use only the file key and `__LINE__`. These include:
+
+- one direct Trice call per physical line,
+- Trice calls in normal, `inline`, and `static inline` functions,
+- a statement wrapper with exactly one inner Trice site when its calls are unambiguous by line.
+
+Such source and header files receive no counter guard, rebase boundaries, or rebase helper headers. A compiler without `__COUNTER__` can build them as before.
+
+#### 24.18.2. When `trice bind` Rebases Locally
+
+A local rebase is generated automatically only where file and line cannot distinguish an expansion unambiguously:
+
+```c
+trice("msg:first\n"); trice("msg:second\n"); trice("msg:third\n");
+```
+
+This also applies to wrappers with several inner Trice sites, multiple wrapper calls on the same physical line, and a wrapper call written across several lines. Before the smallest safely enclosing region, the generated code captures a local counter base value. Immediately afterwards, it restores the normal bind path. Earlier counter consumption in the same translation unit is therefore irrelevant.
+
+The smallest region is normally exactly one physical source line. Two independent adjacent lines are deliberately not combined into a common rebase. A larger region could save include lines, but it could also contain unrelated macro expansions, conditional compilation, or an additional indirect use of `__COUNTER__`. A local change would then unnecessarily affect several log sites.
+
+One necessary exception is a single, syntactically connected wrapper call whose argument list spans several physical lines:
+
+```c
+LOG_ERROR(
+ determineErrorCode(
+ fileHandle,
+ operation
+ )
+);
+```
+
+A preprocessor directive such as `#include` must occupy its own physical line and cannot be inserted into an open argument list. Therefore, the minimal rebase in this case covers the complete call from the macro name through the terminating semicolon. This does not combine independent statements; it is the smallest syntactically possible enclosure of a single call.
+
+#### 24.18.3. Concrete Wrapper Example
+
+An ordinary statement macro can be defined and used as follows:
+
+```c
+#define LOG_ERROR(value) \
+ do { \
+ switch (value) { \
+ case 0: \
+ break; \
+ case 7: \
+ trice("cannot open file\n"); \
+ break; \
+ default: \
+ trice("error=%d", 8); \
+ break; \
+ } \
+ } while (0)
+
+void report(int status)
+{
+ LOG_ERROR(status);
+ LOG_ERROR(7); LOG_ERROR(8);
+}
+```
+
+The two Trice sites in `LOG_ERROR` receive a total of two stable IDs. The first ID permanently belongs to `cannot open file`, and the second to `error=%d`. Every wrapper call uses these two definition IDs in definition order; it does not create additional IDs. The fact that only one `switch` branch executes at runtime does not change the preprocessor order.
+
+For both IDs, `li.json` points to the respective inner definition site in the macro. The call sites contain only generated selection descriptors.
+
+#### 24.18.4. Preferred Form: Normal or `static inline` Function
+
+If a logging helper does not need genuine preprocessor functionality, it should preferably be written as a normal or `static inline` function. The recommended form of the previous example is:
+
+```c
+static inline void logError(int value)
+{
+ switch (value) {
+ case 0:
+ break;
+ case 7:
+ trice("cannot open file\n");
+ break;
+ default:
+ trice("error=%d", 8);
+ break;
+ }
+}
+
+void report(int status)
+{
+ logError(status);
+ logError(7);
+ logError(8);
+}
+```
+
+The two Trice calls now occupy two unambiguous physical lines inside the function. They use the normal file-key-plus-`__LINE__` path. The three `logError` call sites require neither local counter scopes nor additional begin/end includes. This minimizes the source insertions made by `trice bind` and the number of generated rebase helper headers. A target compiler without `__COUNTER__` can also compile this construct.
+
+`static inline` does not imply that a runtime function call must be generated. Depending on optimization, size, and target architecture, common C and C++ compilers can insert the function directly at the call site. Whether they actually inline it remains a compiler decision; the stable Trice ID does not depend on that decision.
+
+For a definition in a header file, the sidecar belongs to the header. All translation units use the same two textual Trice sites and therefore the same stable IDs. For a definition in a `.c` file, the sites belong to that `.c` file accordingly.
+
+When converting a macro to a function, observe the normal C/C++ differences:
+
+- Function arguments are evaluated exactly once and are type-checked.
+- A macro may intentionally process tokens, type names, or compile-time configuration; a function cannot always replace that behavior.
+- `return`, `break`, or local declarations intended to affect the caller's context must not be moved blindly from a macro into a function.
+- If the call site itself is required as log metadata, a function moves the Trice site by definition into its own function body.
+
+For ordinary helpers such as `LOG_ERROR(value)`, which merely select among several fixed Trice messages based on a value, `static inline` is the most robust and simplest form. A logging macro with several inner Trices should be used only when its preprocessor semantics are actually required.
+
+#### 24.18.5. Headers and Translation Units
+
+If `LOG_ERROR` is defined in `logging.h` and called from several `.c` files, its definition IDs remain identical in all translation units. The rebase for a call resides in the respective calling file.
+
+If the wrapper call or a line with several direct Trices is itself located in a header, the rebase is also located in that header. Every translation unit that processes this exact header region then requires `__COUNTER__`. Unrelated files and ordinary headers do not become counter-dependent. The local base value makes the number of counter values consumed before the header irrelevant.
+
+#### 24.18.6. Compact Source Boundaries and Generated Helper Headers
+
+An affected single-line statement is enclosed by exactly two clearly marked include lines:
+
+```c
+#include "trice_module_c_K73A915E9C4021B8_R0_begin.h" // trice-bind: generated rebase begin K73A915E9C4021B8_R0
+trice("first"); trice("second");
+#include "trice_module_c_K73A915E9C4021B8_R0_end.h" // trice-bind: generated rebase end K73A915E9C4021B8_R0
+```
+
+One affected user line therefore becomes three source lines. Scope definitions, phase macros, and cleanup directives that older generator versions exposed directly in the source are now located entirely in the two generated helper headers under `./build/triceIDs`. The begin file captures the local counter base and activates the appropriate selection descriptor. The end file checks the consumed counter count and restores the normal bind path.
+
+Two independent lines remain two independent regions:
+
+```c
+#include "trice_module_c_K73A915E9C4021B8_R0_begin.h" // trice-bind: generated rebase begin K73A915E9C4021B8_R0
+trice("first"); trice("second");
+#include "trice_module_c_K73A915E9C4021B8_R0_end.h" // trice-bind: generated rebase end K73A915E9C4021B8_R0
+#include "trice_module_c_K73A915E9C4021B8_R1_begin.h" // trice-bind: generated rebase begin K73A915E9C4021B8_R1
+trice("third"); trice("fourth");
+#include "trice_module_c_K73A915E9C4021B8_R1_end.h" // trice-bind: generated rebase end K73A915E9C4021B8_R1
+```
+
+`trice bind` does not combine these lines even when they are adjacent. Saving two include lines does not justify increasing the region affected by the counter. In particular, an unrelated macro between two log lines must never endanger the mapping of both lines together.
+
+A single multiline wrapper call, however, is enclosed as one syntactic unit:
+
+```c
+#include "trice_module_c_K73A915E9C4021B8_R2_begin.h" // trice-bind: generated rebase begin K73A915E9C4021B8_R2
+LOG_ERROR(
+ determineErrorCode(
+ fileHandle,
+ operation
+ )
+);
+#include "trice_module_c_K73A915E9C4021B8_R2_end.h" // trice-bind: generated rebase end K73A915E9C4021B8_R2
+```
+
+The boundary appears before the call's first line and after the line containing its semicolon. No directive is inserted into the open argument list. If this minimal region itself contains a preprocessor directive, another unassignable Trice site on a boundary line, or a `__COUNTER__` expansion that cannot be safely bounded, `trice bind` rejects the site and changes no regular output files.
+
+A rebase over an entire function, several independent statements, or the whole file is deliberately not generated. Technically, such a region could work as long as exactly the expected Trice macros—and no other expansion—consume `__COUNTER__`. In practice, every included line increases the dependency on unrelated macros, build configurations, and conditional compilation. Minimal enclosure limits a possible error to exactly one source site, and the final check turns a discrepancy into a compiler error instead of a silently incorrect ID.
+
+The include lines and helper headers are related generator artifacts. They must not be moved, renamed, split, or deleted individually. After relevant source changes, `trice bind` must run again; the generator validates existing artifacts and transactionally updates source boundaries, helper headers, descriptors, IDs, and location information. Another bind run can restore missing helper headers. Modified helper headers are rejected with a diagnostic instead of being silently overwritten. Helper headers that are no longer needed are removed.
+
+Older multiline rebase blocks from a previous generator version are still recognized. A successful new bind run replaces them with the compact include boundaries.
+
+
+
+#### 24.18.7. Missing __COUNTER__
+
+Only the affected rebase region contains a capability guard. If `__COUNTER__` is unavailable, the target compiler stops with a message explicitly stating that normal bind sites are unaffected.
+
+The available alternatives are:
+
+- preferably express an ordinary logging helper as a normal or `static inline` function,
+- place multiple direct Trice calls on separate physical lines,
+- if the macro form is indispensable, use a target compiler with `__COUNTER__` or the `trice insert` / `trice clean` workflow.
+
+The `static inline` form is especially advisable for frequently called `LOG_ERROR`-style helpers: one function definition replaces rebase includes and helper headers at every individual call site.
+
+Compile-time checks also detect additional counter consumption within the region, an incorrect expansion count, and missing generated descriptors. Such discrepancies stop the build instead of silently selecting a different ID.
+
+#### 24.18.8. Unchanged Interfaces
+
+The rebase introduces no mutable runtime state, dynamic allocation, or runtime ID table. `til.json`, `li.json`, the Trice wire format, decoders, and public CLI options remain unchanged.
+
+`TRICE_CLEAN=1` and `TRICE_OFF=1` still disable the Trice macros completely. Generated rebase helper headers are processed without a counter check in these build modes, so a disabled build does not require `__COUNTER__`, even for a file that would otherwise depend on it.
+
+### 24.19. Supported Boundaries and Remaining Limitations
+
+ID-free Trice calls with a statically and directly recognizable format string are supported, as are ordinary function-like statement macros with one or more direct Trice calls. A single wrapper call may span several physical lines if its complete region through the semicolon can be enclosed unambiguously and safely.
+
+Within a counter-selected region, the following are still rejected with a precise diagnostic:
+
+- `id(0)`, `Id(0)`, or `ID(0)`, and explicit IDs greater than zero,
+- nested or recursive logging wrappers,
+- token pasting in the wrapper,
+- stringification that generates or changes the format string,
+- dynamically composed format strings,
+- indirect redefinitions of Trice macros,
+- explicit or unbounded additional `__COUNTER__` consumption,
+- preprocessor directives within a multiline wrapper call,
+- additional Trice or wrapper sites on a physical boundary line of a multiline call,
+- expression contexts and control-flow continuations across physical line boundaries that cannot be enclosed safely,
+- conflicting wrapper definitions for which no unambiguous common semantics can be determined.
+
+Zero placeholders on ordinary bind sites that are unambiguous by line remain supported as in the MVP. Format strings must still be statically recognizable within the scope of the shared insert/bind parser.
+
+For an unsupported site, `trice bind` does not silently fall back to insert and does not write a numeric ID into the user Trice call.
+
+### 24.20. Diagnostics and Troubleshooting
+
+#### 24.20.1. Sidecar Not Found
+
+Check:
+
+- whether `trice bind` was run after the last source change,
+- whether `./build/triceIDs` exists,
+- whether the directory is on the compiler include path,
+- whether the sidecar name in the include line is correct.
+
+#### 24.20.2. File-Key Conflict
+
+Typical cause: A source was copied together with its sidecar include line.
+
+Solution: Remove the copied sidecar include from one copy and run `trice bind` again so that a new key is generated.
+
+#### 24.20.3. File Is `mixed`
+
+Either:
+
+- run `trice clean` for this file or managed scope and bind afterwards,
+- or keep all Trice calls in this file in the inserted workflow.
+
+#### 24.20.4. Bind Include Is in the Wrong Place
+
+The sidecar must be active when the direct Trice calls of the physical file are expanded. In particular, headers included later can activate a different file key.
+
+#### 24.20.5. Unexpected Message After a Source Change
+
+Run `trice bind` again. The line number is part of the build-local site name.
+
+
+
+#### 24.20.6. Advanced Construct Requires __COUNTER__
+
+The compiler is processing a generated rebase region but does not provide `__COUNTER__`. Only this source construct is affected. Use one of the alternatives described under [Missing `__COUNTER__`](#missing-__counter__) or a target compiler with local counter support.
+
+#### 24.20.7. Counter Count or Rebase Descriptor Does Not Match
+
+The build is using outdated or manually modified generator artifacts, or an additional counter is expanded inside the region. Do not repair generated include boundaries and helper headers manually. Inspect the source construct and run `trice bind` again.
+
+### 24.21. Result
+
+With `trice bind`, bind-managed user Trice calls remain free of numeric IDs. The stable ID truth remains in `til.json` and `li.json`; a reproducible sidecar passes the ID as a compile-time constant to the existing Trice transport path. Unambiguous sites continue to use the existing line path, while only ambiguous regions are locally rebased and checked at compile time.
+
+---
+
+### 24.22. Appendix: Preprocessor Fundamentals
+
+#### 24.22.1. Local Insert/Bind Dispatch
+
+A simple `#ifdef TRICE_BIND_FILE_KEY` while reading `trice.h` is insufficient because the sidecar is normally included later.
+
+Instead, the selection is expanded at the actual call site:
+
+```c
+#define TRICE_BIND_ROUTE_TRICE_BIND_FILE_KEY INSERT
+#define TRICE_BIND_ROUTE_I(key) TRICE_BIND_ROUTE_##key
+#define TRICE_BIND_ROUTE(key) TRICE_BIND_ROUTE_I(key)
+
+#define TRICE_DISPATCH_I(route, ...) TRICE_ROUTE_##route(__VA_ARGS__)
+#define TRICE_DISPATCH(route, ...) TRICE_DISPATCH_I(route, __VA_ARGS__)
+
+#define trice(...) TRICE_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), __VA_ARGS__)
+```
+
+Without an active sidecar, `TRICE_BIND_FILE_KEY` remains as a token:
+
+```text
+TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY)
+→ TRICE_BIND_ROUTE_TRICE_BIND_FILE_KEY
+→ INSERT
+```
+
+With an active sidecar:
+
+```c
+#define TRICE_BIND_FILE_KEY K73A915E9C4021B8
+#define TRICE_BIND_ROUTE_K73A915E9C4021B8 BIND
+```
+
+it expands to:
+
+```text
+TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY)
+→ TRICE_BIND_ROUTE(K73A915E9C4021B8)
+→ TRICE_BIND_ROUTE_K73A915E9C4021B8
+→ BIND
+```
+
+#### 24.22.2. Site Descriptor
+
+The site name is formed from the file key and `__LINE__`:
+
+```c
+#define TRICE_BIND_SITE_I(key, line) TRICE_BIND_SITE_##key##_L##line
+#define TRICE_BIND_SITE(key, line) TRICE_BIND_SITE_I(key, line)
+#define TRICE_BIND_SITE_HERE() TRICE_BIND_SITE(TRICE_BIND_FILE_KEY, __LINE__)
+```
+
+A descriptor:
+
+```c
+#define TRICE_BIND_SITE_K73A915E9C4021B8_L10 TRICE_BIND_REPLACE, id(12346u)
+```
+
+provides both the operation and the complete TID expression.
+
+`TRICE_BIND_AUTO` inserts the TID. `TRICE_BIND_REPLACE` discards an existing `id(0)`, `Id(0)`, or `ID(0)` and uses the bound TID.
+
+The mechanisms were verified in independent PoCs under the following repository path:
+
+```text
+experiments/TriceBind/30_Preprocessor_Verification
+```
+
+---
+
+### 24.23. Appendix: Stable ID Assignment and Binding Background
+
+The development of `trice bind` is based on separating two tasks.
+
+#### 24.23.1. Stable ID Assignment
+
+The first task is:
+
+```text
+logical Trice site → stable numeric ID
+```
+
+It includes:
+
+- recognizing known sites again,
+- assigning new IDs,
+- ID ranges and policy,
+- maintaining `til.json` and `li.json`,
+- long-term decodability.
+
+This persistent mapping does not have to reside in the source code.
+
+#### 24.23.2. Transfer into the Target Code
+
+The second task is:
+
+```text
+stable numeric ID → target code
+```
+
+`trice insert` solves it with a numeric ID in the user Trice call. `trice bind` solves it with a generated sidecar and standardized preprocessor facilities.
+
+After preprocessing, the compiler likewise sees a normal constant. Therefore, there is:
+
+- no runtime lookup,
+- no target-side string search,
+- no additional mapping table,
+- no change to the wire format.
+
+#### 24.23.3. Why the Source Scan Remains Authoritative
+
+`trice bind` scans the project sources before preprocessing. This allows sites in currently inactive `#if` branches to retain a stable ID as well.
+
+That is beneficial for ID stability: changing the build configuration does not remove the persistent identity of a log site.
+
+A future analysis of the active configuration or the final image would be an additional reporting function. It is not required for binding.
+
+#### 24.23.4. Requirements Met by the Sidecar Approach
+
+The chosen approach combines:
+
+- ID-free bind-managed user sources,
+- stable IDs and the existing ID policy,
+- cumulative `til.json` and `li.json`,
+- immediate compile-time constants,
+- portable C/C++ preprocessor mechanisms,
+- direct compilation of the original sources,
+- no build-specific ELF requirement for later decoding.
+
+The former standalone architecture paper “Trice IDs Without Source-Code Patching” has been superseded by the generator specification and this user manual. Its conclusions that remain valid are summarized in this appendix.
+
+---
+
+### 24.24. Appendix: `TRICE_CLEAN` States at a Glance
+
+| State | `TRICE_CLEAN` | Own sidecar active | Effect |
+|-----------|-----------------:|-------------------:|-------------------------------|
+| Inserted | undefined or `0` | no | Explicit TIDs from the source |
+| Bound | undefined or `0` | yes | TIDs from the sidecar |
+| Clean/Off | `1` | irrelevant | Existing clean/off path |
+
+Tool effect when the definition exists:
+
+| Tool | Effect on `TRICE_CLEAN` |
+|----------------|------------------------:|
+| `trice insert` | sets it to `0` |
+| `trice clean` | sets it to `1` |
+| `trice bind` | sets it to `0` |
+
+If the definition is absent, `trice bind` does not add it.
+
+---
+
+### 24.25. Appendix: Retained Architecture Decision Against ELF Patching
+
+The following text is an English translation of the content retained unchanged from `Trice_bind_vs_ELF_Patch.md`. It documents the architecture decision. Some example names reflect the design stage at the time; the main body of this user manual and [`Trice_bind_10_MVP_Spezifikation.md`](./TriceBind/Trice_bind_10_MVP_Spezifikation.md) define the current normative behavior.
+
+
+
+### 24.26. Architecture Decision: `trice bind` Instead of an ELF-Patching Solution
+
+#### 24.26.1. Purpose of This Document
+
+This document explains the decision to use `trice bind` and generated sidecar headers to bring stable Trice IDs into the target code. An ELF-based patching or linking solution was investigated as an alternative.
+
+The decision concerns only the mechanism by which an already determined Trice ID reaches the compiler or final target code. The existing persistent ID management with `til.json` and `li.json` remains unchanged.
+
+#### 24.26.2. Requirements
+
+The binding mechanism should:
+
+- use stable IDs from `til.json` and `li.json`,
+- require no numeric IDs in user Trice calls,
+- compile the original sources directly,
+- require no additional runtime lookup on the target,
+- leave the existing Trice wire format unchanged,
+- keep historical logs decodable without the ELF belonging to the build,
+- work with different C and C++ toolchains,
+- avoid unnecessarily expanding incremental builds,
+- generate understandable and reproducible build artifacts.
+
+#### 24.26.3. MVP of `trice bind`
+
+##### Basic Principle
+
+The user writes an ID-free Trice log site:
+
+```c
+trice("msg:module initialized\n");
+```
+
+`trice bind` scans the source files before preprocessing, maps every supported log site to a stable ID from `til.json` and `li.json`, and generates one sidecar header per file.
+
+For a source file `module.c`, the include line stored persistently in the user code may look like this:
+
+```c
+#include "trice_module_c_F73A915E9C4021B8.h" // trice-bind
+```
+
+`F73A915E9C4021B8` is a randomly generated 64-bit file key created once and represented as a preprocessor token beginning with `F`. It identifies the file independently of its path and safely distinguishes files with identical names. The file key is not a Trice ID, is not transferred to the target, and occupies no target memory.
+
+The generated header contains, for example:
+
+```c
+#undef TRICE_FILE_KEY
+#define TRICE_FILE_KEY F73A915E9C4021B8
+
+#define TRICE_ID_F73A915E9C4021B8_L9 12345u // trice("msg:module initialized\n")
+```
+
+The Trice macros combine the current `TRICE_FILE_KEY` with the standardized `__LINE__` preprocessor macro. The compiler ultimately sees an ordinary integer constant.
+
+##### Why a File-Local Include Is Required
+
+All sidecars processed in a translation unit share the same macro namespace. The 64-bit file key prevents collisions between their ID definitions. In addition, every direct Trice call must be associated with the file to which its line number belongs.
+
+Including all sidecars centrally, for example in `triceConfig.h`, provides all ID macros but does not select the file key belonging to a particular log site. The C preprocessor cannot derive a matching macro name from the `__FILE__` string literal.
+
+Therefore, each file's sidecar sets the current `TRICE_FILE_KEY` immediately before the file's own Trice log sites. The file-local include is not just a storage location for definitions; it is part of the unambiguous `file + line` selection.
+
+##### Sidecar Directory and File Names
+
+All sidecars can reside in a single build directory, for example:
+
+```text
+build/triceIDs/
+```
+
+The build then needs only one additional include path. The base name in the sidecar name improves readability, while the file key provides uniqueness:
+
+```text
+trice_module_c_F73A915E9C4021B8.h
+trice_module_c_F88217D4AC101E62.h
+trice_module_h_F1111111111111111.h
+```
+
+The complete source directory structure does not need to be replicated under `build/`.
+
+##### File-Key Persistence and Validation
-
+The file key is stored in the version-controlled include line of the user file. It therefore survives deletion of the build directory or movement of the file.
-The point here is that with CLI switch `-typeX0=ignore` the counted X0 packages are invisible after their length has been checked. A future `-typeX0=forward:` option could be implemented as a `trice log` extension.
+64 bits are sufficient for this purpose. In addition, `trice bind` verifies that no key is assigned to multiple different files within a project. This detects both an extremely unlikely random collision and a duplicated key caused by copying a source file.
-### 20.5. Go implementation layout
+##### One-Time Include Insertion
-Keep the `typeX0` mode parsing and handling centralized so later modes can be added without spreading switch logic through the decoder.
+If the sidecar include is absent, `trice bind` adds it once using a heuristic to choose a likely suitable position. It prefers a position:
-Code layout:
+- after the normal includes effective for the file,
+- before the file's first direct Trice log site,
+- inside an existing include guard for header files.
-```text
-internal/args/...
- define CLI flag -typeX0 and help text
+Without fully evaluating all preprocessor conditions, the position cannot be determined safely in every C or C++ program. Conditional includes can prevent unambiguous automatic placement. Therefore:
-internal/decoder/typeX0.go
- hold the configured TypeX0 value
- parse error, ignore, all:ignore, counted:,
- format counted payloads with Go fmt
- reject unsupported mode prefixes clearly
+- An existing correct include is not moved.
+- An automatically inserted line is clearly marked with `// trice-bind`.
+- `trice bind` checks structural plausibility.
+- For an uncertain or contradictory structure, the user receives a specific diagnostic and moves the marked line if necessary.
-internal/trexDecoder/trexDecoder.go
- detect selector == 0
- pass the remaining record buffer to the typeX0 helper
- append returned output to the decoder result
- consume the logical X0 record and zero alignment padding when present
-```
+The one-time include addition is not recurring instrumentation. During normal builds, user sources are not modified.
-Unsupported future modes shall fail with a clear diagnostic, for example:
+##### Header Files and `static inline`
-```text
-unsupported typeX0 mode "forward"
-```
+Header files with direct Trice calls receive their own file key and sidecar. This also applies to Trice calls inside `static inline` functions.
-This structure keeps future extensions local. For example:
+Example:
-```text
--typeX0=forward:
+```c
+#ifndef MODULE_H
+#define MODULE_H
+
+#include "dependency.h"
+#include "trice_module_h_F1111111111111111.h" // trice-bind
+
+static inline void moduleCheck(int value)
+{
+ trice("msg:value=%d\n", value);
+}
+
+#endif
```
-could later forward valid X0 payload bytes to another sink instead of formatting them.
+After processing this header, the sidecar of the including `.c` file sets that file's own `TRICE_FILE_KEY`. This keeps log sites from the header and source file collision-free.
-### 20.6. Tests
+##### MVP Limitations
-The counted X0 path is tested through the existing `_test/testdata/triceCheck.c` mechanism, because these test lines are processed by many Trice configurations.
+The MVP supports direct Trice calls in `.c`, `.cc`, `.cpp`, and header files, as well as in normal and `static inline` functions.
-The shared test configurations that build `triceCheck.c` define:
+Initially unsupported are:
+
+- multiple Trice calls on the same physical source line,
+- Trice calls inside a preprocessor macro definition, for example:
```c
-#define TRICE_TX_X0_COUNTED_BUFFER_SUPPORT 1
+#define LOG_ERROR(x) trice("error=%d\n", x)
```
-`src/triceX0.c` is compiled into the CGO test target through the master file `_test/testdata/cgoPackage.go`. Generated `generated_cgoPackage.go` copies are refreshed from that master file by `scripts/_renewIDs_in_examples_and_refresh_test_folder.sh`.
+For a Trice call in a macro definition, `__LINE__` and the current file key are evaluated only during the later macro expansion. They therefore describe the call site and not reliably the definition site. Simple binding by `file + line` is insufficient.
-The X0 block in `_test/testdata/triceCheck.c` is guarded by `TRICE_TX_X0_COUNTED_BUFFER_SUPPORT == 1` and intentionally mixes different counted X0 lengths with normal Trices:
+`trice bind` reports such constructs as an error in the MVP. Existing projects that depend on them continue to use `trice insert`.
-```c
-#if TRICE_TX_X0_COUNTED_BUFFER_SUPPORT == 1
- break; case __LINE__: triceX0(x0Payload, 0);
- break; case __LINE__: triceX0(x0Payload, 5); trice8B("wr:X0-B: %02x\n", x0Payload, 5);
- break; case __LINE__: triceX0(x0Payload, 2); triceX0(x0Payload + 2, 4); trice("wr:X0 tail\n");
-#endif
-```
+#### 24.26.4. Investigated ELF-Patching Solution
-The current shared CGO test option formats the X0 payload with the `sig:` prefix:
+With an ELF-based solution, Trice macros would generate additional metadata and bindable ID placeholders in object files during compilation. A later tool would have to evaluate this information and insert the final IDs through relocations, additional link objects, or direct patching of the object or image code.
-```text
-counted:sig:% x\n
-```
+Such a solution requires at least:
-For maintenance, keep these parts aligned:
+- a defined metadata format in object sections,
+- an unambiguously identifiable placeholder for every log site,
+- support for the relevant ELF and relocation variants,
+- knowledge of the target architecture and ABI,
+- coordinated behavior with the linker, section garbage collection, and LTO,
+- handling of object archives and archive members that are only partially selected,
+- separate solutions for toolchains that do not use ELF or use it differently.
-1. The master CGO file includes `../../src/triceX0.c`.
-2. `triceCheck.c` uses `TRICE_TX_X0_COUNTED_BUFFER_SUPPORT == 1` as guard.
-3. The X0 test block uses different lengths and mixed packages with `trice`, `triceS`, `TriceS`, `trice8B`, `Trice8B` and `TRice8B`.
-4. `_test/.../triceConfig.h` files that build `triceCheck.c` enable `TRICE_TX_X0_COUNTED_BUFFER_SUPPORT`.
-5. `_test` CGO checks set `decoder.TypeX0` to `counted:sig:% x\n`.
-6. The full `_test/` matrix remains the final coverage check.
+An ELF solution also requires prepared Trice macros or prepared libraries. Neither complete Trice metadata nor safely patchable ID sites can be reconstructed from an arbitrary, already compiled `.a` file.
-
+| Criterion | `trice bind` MVP | ELF-patching solution |
+|----------------------------------------------|---------------------------------------------------------|------------------------------------------------------|
+| Numeric IDs in the Trice call | no | no |
+| Original sources are compiled | yes | yes |
+| Stable IDs in target code | directly as C constants | through an additional patch/link step |
+| Runtime lookup on the target | no | not required, but design-specific |
+| Wire-format change | no | no, if implemented accordingly |
+| Build-specific ELF required for log decoding | no | avoidable only if final stable IDs are bound cleanly |
+| Dependency on ELF and relocations | no | yes |
+| Dependency on target architecture and ABI | no | yes |
+| Dependency on linker and LTO behavior | no | yes |
+| Language mechanisms used | standardized C/C++ preprocessor rules, `__LINE__`, `##` | compiler, object-format, and linker mechanisms |
+| Understandability of intermediate artifacts | simple generated headers | object sections, symbols, and relocations |
+| Incremental build | affected translation unit through its sidecar | depends on patch and link workflow |
+| Additional include in user code | yes | no |
-Additional focused Go unit tests cover:
+For a normal source project, the remaining general advantage of the ELF solution is therefore essentially that it would avoid the file-local sidecar include. This convenience comes at the cost of substantially greater toolchain and implementation complexity.
-```text
-no -typeX0 -> X0 packet is an error
--typeX0=error -> X0 packet is an error
--typeX0=ignore -> valid X0 packet produces no output
--typeX0=all:ignore -> complete selector-0 package is consumed without counted parsing
--typeX0="%s" -> payload is printed as string
--typeX0="[%s]" -> payload is printed with formatting
--typeX0="% x" -> payload is printed as spaced hex
--typeX0=counted:sig:%s -> explicit counted mode is needed when the format contains a colon
--typeX0=sig:%s -> unsupported mode "sig"
-malformed X0 -> error, also with -typeX0=ignore
-unsupported mode -> clear error
-mixed package -> counted X0 can be followed by a regular Trice in framed data
-NONE framing -> counted X0 consumes zero alignment padding when present
-```
+#### 24.26.6. Examination of the Apparent ELF Advantages
-### 20.7. Initial scope
+##### Precompiled Static Libraries
-The initial implementation includes only:
+A prepared `.a` library can be supported later without replacing the normal sidecar mechanism. During its own build, the library would have to generate metadata and a bindable ID placeholder for every Trice site. During the product build, `trice bind` could read this information, determine free or new IDs, extend `til.json` and `li.json`, and generate an additional binding artifact for the final link.
-```text
-selector-0 detection for records with len >= 2
-counted X0 payloads
--typeX0=error as default
--typeX0=counted:ignore
--typeX0=ignore as counted shorthand
--typeX0=all:ignore
--typeX0=counted:
--typeX0= as counted shorthand only when contains no colon
-errors for unsupported short non-X0 packets
-clear errors for malformed X0 packets and unsupported modes
-```
+The benefit would be subsequent integration of prepared libraries into the stable ID space of the final product.
-No `counted32`, `forward`, JSON descriptor, plugin interface or `user1B` / `user2B` / `user3B` handling is part of the initial scope.
+This feature can use ELF internally, but it is an additive library extension. It does not require ELF-based handling of normal user sources and is therefore not an independent advantage of a general ELF-patching architecture.
-(back to top)
+##### Discovery of Inactive Log Sites
-## 21. Trice Decoding
+The MVP scans sources before preprocessing. As a result, it also discovers log sites in currently inactive `#if` branches. This is desirable for stable IDs: a log site does not lose its mapping merely because a specific build configuration temporarily disables it.
-The 14-bit IDs are used to display the log strings. These IDs are pointing in two reference files.
+An ELF file, by contrast, contains only code that reached at least the object or link stage. It is therefore not the appropriate source for a complete, configuration-independent ID inventory.
-### 21.1. Trice ID list til.json
+##### Active Log Sites in a Build Configuration
-* This file integrates all firmware variants and versions and is the key to display the message strings. With the latest version of this file all previous deployed firmware images are usable without the need to know the actual firmware version.
-* The files `til.h` and `til.c` are generated to help writing an own trice decoder tool in your preferred language. Use `trice generate -tilH -tilC` for creation. That can be interesting in environments, where Go compiled binaries not executable, like [PCs running QNX OS](https://github.com/rokath/trice/discussions/263#discussioncomment-4180692). See also chapter [Trice Generate](#trice-generate).
+If the log sites active in a specific configuration also need to be determined, the actual preprocessor can later be run with the defines and include paths of that build.
-### 21.2. Trice location information file li.json
+This requires:
-* If the generated `li.json` is available, the Trice tool automatically displays file name and line number. But that is accurate only with the exact matching firmware version. That usually is the case right after compiling and of most interest at the developers table.
-* The Trice tool will silently not display location information, if the `li.json` file is not found. For in-field logging, the option `-showID "inf:%5d"` could be used. This allows later an easy location of the relevant source code.
-* Another option is to record the binary trice messages (`trice log -p com1 -blf aFileName`) and to play them later with the Trice tool using the correct `li.json` (`trice log -p FILEBUFFER -args aFileName` ).
-* For `add`, `insert`, and `clean`, `-liPath` continues to select the legacy `File` representation (`base`, `relative`, a prefixed `path/relative`, or `full`). Independently, every newly generated entry stores `Path` as the complete normalized source path relative to the directory containing `li.json`.
-* For `log`, `-liPath legacy` displays `File` exactly as stored and is the default. `base` displays only the basename, `relative` displays `Path` with a fallback to `File` for older files, and `full` resolves the available path against `-liRoot`. If `-liRoot` is omitted, the directory containing the selected `li.json` is used.
-* Older Trice tools ignore the optional `Path` field when reading a new `li.json`. If an older `add`, `insert`, or `clean` command rewrites that file, it drops the unknown `Path` field; a current ID-management command restores it.
-* The user has the possibility to change the legacy `File` path. Normally it is "base" and just the source code file names containing Trice macros occur inside the _li.json_ file. That is sufficient as long there are no files with identical names on different places possibly containing identical Trices. Then it is not guarantied that the same IDs are always assigned. For such cases "relative" or "full" is selectable for the generation-time location information path kind. But both have weaknesses: The "full" path can differ between different machines and "relative" can differ between different projects on the same PC. Again: we are talking here about identical Trice messages in files with identical names and the worst happening is that these "exchange" their IDs between `trice insert && trice clean && trice insert`. When using the Trice cache even less inconsistencies are expected.
- * The Trice folder itself is an example, how to deal with several projects and user library code. The "user libraries" here are inside `./_test/testdata` and `./examples/exampleData`. The "user projects" are the folders `./examples/*_inst/`. You can take the `*.sh` scripts as examples how to deal with such case.
+- the actual preprocessor options of every translation unit,
+- include paths and defines,
+- optionally a `compile_commands.json` or comparable build description,
+- a mapping from preprocessed sites to stable IDs.
-(back to top)
+The benefit is a report of the active subset. ID assignment and sidecar binding do not change.
-## 22. Trice ID Numbers
+##### Log Sites Actually Present in the Final Image
-### 22.1. ID number selection
+An active log site can disappear from the final image through optimization, LTO, section garbage collection, or because an archive member is not selected. If an exact image inventory is required, the final ELF or a link map can be analyzed later.
-* The default encoding TREX supports 14-bit IDs, so over 16000 IDs possible. Other encodings can work with other ID sizes.
-* `trice("Hi!\n");` ➡ `trice i` ➡ `trice( iD(12345), "Hi!\n");` ➡ `trice c` ➡ `trice("Hi!\n");`
-* The **ID** `12345` is a number assigned to `trice( "Hi!\n");` in the above example.
- * It is a so far unused number, according to rules you can control:
- * The `-IDMethod` switch allows a selection method for new IDs.
- * Per default new IDs determined randomly to keep the chance low, that several developers grab the same ID.
- * Example: `trice insert -IDMin 1000 -IDMethod upward` will choose the smallest free ID >= 1000.
- * This allows to use the ID space without wholes.
- * The `-IDMin` and `-IDMax` switches are usable to control the ID range, a new ID is selected from, making it possible to divide the ID space. Each developer can gets it region.
- * Example: `trice insert -IDMin 6000 -IDMax 6999` will choose new randomly IDs only between 6000 and 6999.
-* It is possible to give each Trice tag an **ID** range making it possible to implement Trice tag specific runtime on/off on the target side if that is needed. This could be interesting for routing purposes also. Please run `trice help -insert` and read about the `-IDRange` switch for more details.
+This requires:
-#### 22.1.1. Trice tool internal Method to get fast a random ID
+- an identifiable relationship between final code and Trice ID,
+- toolchain-specific ELF or map analysis,
+- consideration of LTO and linker optimizations.
-* Create Slice with numbers 1...16383
-* Remove all used ID numbers from this slice
-* Get random number between 0 and len(slice)
-* remove this ID from slice and use it as new ID
+The benefit is an exact report of the subset remaining in the specific image. This analysis also changes neither the ID mapping nor the sidecar binding.
-### 22.2. ID number usage and stability
+The three sets are therefore clearly distinct:
-* If you write `trice( "msg:%d", 1);` again on a 2nd location, the copy gets a different **ID**, because each Trice gets its own **ID**.
-* If you change `trice( "msg:%d", 1);` to `trice8( "msg:%d", 1);`, to reduce the needed parameter space, a new **ID** is assigned. That is because the parameter bit width is implicit a part of the now changed Trice. If you change that back, the previous **ID** is assigned again.
-* If you change `trice( "msg:%d", 1);` to `TRice8( "msg:%d", 1);`, to get a 32-bit stamp, the associated **ID** remains unchanged. That is because the optional stamp is not a part of the Trice itself.
-* IDs stay constant and get only changed to solve conflicts.
-* To make sure, a single ID will not be changed, you could change it manually to a hexadecimal syntax.
- * This lets the `trice insert` command ignore such Trice macros and therefore a full [til.json](../demoTIL.json) rebuild will not add them anymore. Generally this should not be done, because this could cause future bugs.
- * It is possible to assign an ID manually as decimal number. It will be added to the ID list automatically during the next `trice i|c` if no conflicts occur.
-* If a Trice was deleted inside the source tree (or file removal) the appropriate ID stays inside the ID list.
-* If the same string appears again in the same file this ID is active again.
-* If a trice occurs more than one time, each occurrence gets a different ID. If then 2 of them disappear, their ID numbers stay in `til.json`. If then one of them comes back, it gets its ID back.
+```text
+all textually present log sites
+ ⊇ log sites active in one configuration
+ ⊇ log sites present in the final image
+```
-### 22.3. Trice ID 0
+Only the first set is required for stable ID assignment in the MVP.
-* The trice ID 0 is a placeholder for "no ID", which is replaced automatically during the next `trice insert` according to the used trice switches `-IDMethod`, `-IDMin` and `IDMax`.
- * It is sufficient to write the `TRICE` macros just without the `id(0),` `Id(0),` `ID(0),`. It will be inserted automatically according the `-defaultStampSize` switch. With `trice clean` these stay with 0-values in the source code to encode the intended stamp size.
- * It is recommended to use the `trice`, `Trice` and `TRice` macros instead of `TRICE`. They encode the stamp size in their names already. There may be cases, where the user prefers to use the code inserting macros `TRICE` to get maximum performnce.
+##### Macro Expansion and String Generation
-(back to top)
+Trice requires static, directly recognizable format strings. Generating different format strings through preprocessor concatenation is not intended. Variable content is transferred as parameters, for example with a Trice string variant.
-## 23. Trice ID management
+Consequently, individual expanded format-string variants do not have to be distinguished in object code. This does not create a relevant ELF advantage either.
-### 23.1. Trice inside source code
+#### 24.26.7. Future Additive Extensions
-#### 23.1.1. Trice in source code comments
+The following functions are explicitly not part of the MVP. They can be added later without changing the basic sidecar model.
-* Trice macros commented out, are **visible** for the `trice insert` command and therefore regarded.
- * Example: `// trice("Hi!\n");` is still regarded by the `trice i`.
-* During `trice insert` commented out Trice macros, are treated in the same way as active Trice macros. Even after deletion their content stays inside til.json. This is intensionally to get best stability across several firmware versions or variants.
-* The trice tool does treat trice statements inside comments or excluded by compiler switches also.
+##### Active-Configuration Analysis
-#### 23.1.2. Trice parser exclusion markers
+**Required:** Run the actual preprocessor with the build options of every translation unit.
-Use `TRICE_INSERT_OFF` and `TRICE_INSERT_ON` markers to exclude a source section from `trice insert`, `trice clean`, `trice add` and ID refresh parsing.
+**Benefit:** Report which of the already bound log sites are active in a specific configuration.
-```C
-// TRICE_INSERT_OFF
-TRice("This text is ignored by the trice tool.");
-// TRICE_INSERT_ON
-```
+##### Post-Link Image Inventory
-The markers are case-sensitive, must be written as comments, and affect only the Trice tool parser. `TRICE_INSERT_OFF` without a following `TRICE_INSERT_ON` disables Trice parsing until the end of the file. The marker state is local to the scanned file and does not affect source files including that file. This is useful for Trice target sources or other source sections containing Trice-like comments or helper macros that should not create or change IDs.
+**Required:** Analyze ELF or the link map and map the result to Trice IDs in a toolchain-specific way.
-#### 23.1.3. Different IDs for same Trices
+**Benefit:** Exact list of log sites present in the final image.
-* When the same Trice is used several times with identical IDs, after copying, and `trice insert` is called, only one ID survives in the source code. The other Trices get assigned new IDs. Otherwise the location information would not be correct everywhere.
+##### Prepared `.a` Libraries
-#### 23.1.4. Same IDs for different Trices
+**Required:** Library-side metadata and bindable ID placeholders, plus an additional binding artifact for the final link.
-* If duplicate ID's with different format strings found inside the source tree (case several developers or source code merging) one ID is replaced by a new ID. The probability for such case is low, because of the default random ID generation.
-* Also you can simply copy a Trice statement and modify it without dealing with the ID.
-* The Trice tool will detect the 2nd (or 3rd) usage of this ID and assign a new one, also extending the ID list.
-* That is done silently for you during the next `trice insert`.
-* When you use the [Trice Cache](#trice-cache), the IDs are invisible and all happens in the background automatically.
+**Benefit:** Subsequent assignment of stable IDs from the final product's ID space without rebinding the library from its sources.
-#### 23.1.5. ID Routing
+##### Multiple Trice Calls per Source Line
-With the Trice insert CLI switch `-IDRange` each Trice [tag](#tags-color-and-log-levels) can get a specific ID range assigned and inside the project specific *triceConfig.h* the user can control, which ID range is routed to specific output channels. Search for `_MIN_ID` inside **triceDefaultConfig.h** and extend your search than for example `TRICE_UARTA_MIN_ID` to explore how to use.
+**Required:** An additional stable occurrence index or a suitable, sufficiently portable counter mechanism.
-#### 23.1.6. Possibility to create new tags without modifying trice tool source
+**Benefit:** Support for a syntactically possible but currently unnecessary coding style.
-According to the demand in [541](https://github.com/rokath/trice/issues/541) a CLI switch `-ulabel` exists now.
+##### Trice Calls in Macro Definitions
-Use `-ulabel` for additional user labels. Try this example in an empty folder:
+**Required:** Defined semantics for definition-site or call-site IDs and an additional mechanism, such as selective `trice insert`, explicit wrapper identifiers, or preprocessor analysis.
-* File *main.c*:
+**Benefit:** Migration of existing wrapper macros to a mixed workflow.
-```C
-#include "trice.h"
+These extensions supplement the MVP. None of them requires switching normal user sources to a general ELF-patching solution.
-int main(void){
- trice("msg:hi\n");
- trice("man:hi\n");
- trice("wife:hi\n");
- trice("any:hi\n");
-}
-```
+#### 24.26.8. Decision
-* Bash:
+For normal C and C++ sources, `trice bind` with file-local sidecar headers will be pursued. A general ELF-patching solution will not be pursued further.
-```bash
-touch til.json li.json
-trice i -IDMin 1004 -IDMax 6999 -IDRange wife:16000,16009 -IDRange man:1000,1003 -ulabel man -ulabel wife
-```
+The decision is based on the following technical points:
-* File *main.c*:
+1. The MVP binds stable IDs as compile-time constants using standardized C/C++ preprocessor facilities.
+2. It requires no ELF knowledge or architecture, ABI, relocation, or linker logic.
+3. `til.json` and `li.json` remain the persistent ID truth across builds.
+4. Historical logs remain decodable without the corresponding ELF.
+5. Stable 64-bit file keys distinguish files with identical names and log sites in headers unambiguously.
+6. The original sources are built directly; only a sidecar include added once remains in the user code.
+7. The apparent functional advantages of the ELF solution can be implemented, if needed, as additive analyses or specialized extensions.
+8. These extensions do not change the MVP binding mechanism.
+9. The main general ELF advantage that remains is avoiding a file-local include. That advantage does not justify the additional toolchain complexity.
-```C
-#include "trice.h"
+The architecture therefore remains simple: source scanning and persistent databases determine the IDs, generated headers provide them to the standards-conforming preprocessor, and the existing compiler generates the target code.
-int main(void){
- trice(iD(5778), "msg:hi\n");
- trice(iD(1002), "man:hi\n");
- trice(iD(16004), "wife:hi\n");
- trice(iD(2184), "any:hi\n");
-}
-```
+
(back to top)
-## 24. Trice version 1.0 Log-level Control
+## 25. Trice version 1.0 Log-level Control
-### 24.1. Trice version 1.0 Compile-time Log-level Control
+### 25.1. Trice version 1.0 Compile-time Log-level Control
In Trice version 1.0 is no compile-time log-level control. You can only disable **all** Trice logs
* on file level by adding a `#define TRICE_OFF` line before `#include "trice.h"`
* or project level by using `-DTRICE_OFF` as compiler switch.
-### 24.2. Trice version 1.0 Run-time Log-level Control
+### 25.2. Trice version 1.0 Run-time Log-level Control
Because the target Trice code is so fast and generates only a few bytes per log, in Trice version 1.0 is no direct run-time log-level control inside the target code. The user has the Trice CLI switches `-ban`, `-pick` and `-logLevel`, to control, which Trice messages are displayed by the Trice tool.
-### 24.3. Trice Version 1.0 Compile-time - Run-time Log-level Control
+### 25.3. Trice Version 1.0 Compile-time - Run-time Log-level Control
During compilation the developer can control which Trice tags, like *info* in `trice( "info:...\n");` get which ID range. Look for `-IDRange` in `trice h -i` output. By defining values like `TRICE_UARTA_MIN_ID` in the project specific *triceConfig.h* during compile-time is controllable, which Trice tags get routed to an output device or not.
(back to top)
-## 25. ID reference list til.json
+## 26. ID reference list til.json
* The `trice insert` command demands a **til.json** file - it will not work without it. That is a safety feature to avoid unwanted file generations. If you are sure to create a new **til.json** file, create an empty one: `touch til.json`.
* The name **til.json** is a default one. With the command line parameter `-i` you can use any filename.
@@ -3674,7 +4906,7 @@ During compilation the developer can control which Trice tags, like *info* in `t
* One can delete the ID reference list when IDs inside the code. It will be reconstructed automatically from the source tree with the next `trice clean` command, but history is lost then.
* Keeping obsolete IDs makes it more comfortable during development to deal with different firmware variants at the same time.
-### 25.1. til.json Version control
+### 26.1. til.json Version control
* The ID list should go into the version control repository of your project.
* To keep it clean from the daily development garbage one could `git restore til.json`, and re-build just before check-in.
@@ -3695,16 +4927,16 @@ git restore til.json # Forget the todays garbage.
trice clean # Remove the IDs from the source code with deactivated cache.
```
-### 25.2. Long Time Availability
+### 26.2. Long Time Availability
* You could place a download link for the Trice tool and the used **til.json** list.
* Optionally add the (compressed/encrypted) ID reference list as resource into the target FLASH memory to be sure not to loose it in the next 200 years.
(back to top)
-## 26. The Trice Insert Algorithm
+## 27. The Trice Insert Algorithm
-### 26.1. Starting Conditions
+### 27.1. Starting Conditions
```diff
@@ To understand this chapter you should look into the Trice tool source code. @@
@@ -3736,7 +4968,7 @@ trice clean # Remove the IDs from the source code with deactivated cache.
* One and only one position is used and relevant, all others are ignored. If no `li.json` exists on the expected location trice insert creates one there.
* The src tree can contain IDs not present inside `til.json`. This state is seldom, for example after adding sources containing IDs.
-### 26.2. Aims
+### 27.2. Aims
* The `trice insert` main aim is to have a consistent state between `til.json`, `li.json` and the source tree with no **ID** used twice.
* Also the changes should be minimal.
@@ -3746,9 +4978,9 @@ trice clean # Remove the IDs from the source code with deactivated cache.
* To keep the [Trice ID management](#trice-id-management) simple, the `insert` operation acts "per file". That means, that in case a file is renamed or code containing trice statements is copied to another file, new IDs are generated for the affectes trices.
* File name changes occur are not that often, so that should be acceptable.
-### 26.3. Method
+### 27.3. Method
-#### 26.3.1. Trice Insert Initialization
+#### 27.3.1. Trice Insert Initialization
```Go
// insertIDsData holds the insert run specific data.
@@ -3804,7 +5036,7 @@ Until here the algorithm seem to be ok.
* If after `trice i` a `trice c` and a `trice i` again is executed, all IDs are expected to be at the same place again. If in between `trice i`, an optional `trice c`and a `trice i` src was edited, most IDs are expected to be at the same place again.
-### 26.4. User Code Patching (trice insert)
+### 27.4. User Code Patching (trice insert)
* A Trice **ID** is inserted by `trice insert` as shown in the table:
@@ -3833,7 +5065,7 @@ Until here the algorithm seem to be ok.
* `trice i` in your project root expects a til.json file there and checks sources and **til.json** for changes to insert.
* `trice i -v -i ../../../til.json -src ../src -src ../lib/src -src ./` is a typical case as automated pre-build step in your project settings telling Trice to scan the project dir and two external directories. Even `trice i` is fast, it is generally quicker to search only relevant places.
-### 26.5. User Code Patching Examples
+### 27.5. User Code Patching Examples
* A Trice **ID** is modified as shown in these cases:
* Previously inserted (patched) user code copied to a different location:
@@ -3881,7 +5113,7 @@ Until here the algorithm seem to be ok.
TRice( iD(12345), "Hi!" ); // manually changed stamp size and then "trice i" performed.
```
-### 26.6. Exclude folders & files from being parsed (pull request 529)
+### 27.6. Exclude folders & files from being parsed (pull request 529)
The pull request [\#529](https://github.com/rokath/trice/pull/529) introduces key enhancement:
@@ -3896,36 +5128,36 @@ The -exclude flag can be used multiple times to omit specific files or directori
trice insert -v -src ./_test/ -exclude _test/src/trice.h -exclude _test/generated/
-### 26.7. ID Usage Options
+### 27.7. ID Usage Options
* Per default the `trice insert` command chooses randomly a so far unused ID for new format strings and extends `til.json`.
* After `trice c` all src IDs are removed or 0. In this state the src should go into the version management system.
-### 26.8. General ID Management Information
+### 27.8. General ID Management Information
* Each format string gets its unique trice ID. If the same format string is used on different source code locations it gets different trice IDs this way allowing a reliable location information.
* The trice ID-instead-of-String idea lives from pre-compile patching of the user code.
* The user has full control how to deal with that.
* There are the 3 following options and the user has to decide which fits best for him. The [Trice Cache](#trice-cache) is probably the best fitting setup for many users.
-#### 26.8.1. Option Cleaning in a Post-build process
+#### 27.8.1. Option Cleaning in a Post-build process
* The code is visually free of IDs all the time.
-#### 26.8.2. Option Let the inserted Trice ID be a Part of the User Code
+#### 27.8.2. Option Let the inserted Trice ID be a Part of the User Code
* This is the legacy method. It allows unchanged src translation into code without using the trice tool.
* It is very robust and maybe needed in nasty debugging situations.
* It allows to reconstruct lost til.json information.
* Recommendet for small projects.
-#### 26.8.3. Option Cleaning on Repository Check-In
+#### 27.8.3. Option Cleaning on Repository Check-In
* The code is visually free of IDs only inside the repository.
(back to top)
-## 27. Trice Speed
+## 28. Trice Speed
A Trice macro execution can be as cheap like **3 Assembler instructions or 6 processor clocks**:
@@ -3940,7 +5172,7 @@ The MCU is clocked with 48 MHz and a Trice duration is about 2 µs, where alone

-### 27.1. Target Implementation Options
+### 28.1. Target Implementation Options
All trice macros use internally this sub-macro:
@@ -3950,7 +5182,7 @@ All trice macros use internally this sub-macro:
The usual case is `#define TRICE_HTOTL(x) (x)`. The `uint32_t* TriceBufferWritePosition` points to a buffer, which is codified and used with the Trice framing sub-macros `TRICE_ENTER` and `TRICE_LEAVE` depending on the use case.
-#### 27.1.1. Trice Use Cases TRICE_STATIC_BUFFER and TRICE_STACK_BUFFER - direct mode only
+#### 28.1.1. Trice Use Cases TRICE_STATIC_BUFFER and TRICE_STACK_BUFFER - direct mode only
1. Each single Trice is build inside a common buffer and finally copied inside the sub-macro `TRICE_LEAVE`.
2. Disabled relevant interrupts between `TRICE_ENTER` and `TRICE_LEAVE` are mantadory for `TRICE_STATIC_BUFFER`.
@@ -3963,7 +5195,7 @@ The usual case is `#define TRICE_HTOTL(x) (x)`. The `uint32_t* TriceBufferWriteP
* AUX without extra copy.
* Not (yet) supported UART transfer loop with polling. With 1MBit baud rate, 4-12 bytes would last 40-120 µs.
-#### 27.1.2. Trice Use Case TRICE_DOUBLE_BUFFER - deferred mode, fastest Trice execution, more RAM needed
+#### 28.1.2. Trice Use Case TRICE_DOUBLE_BUFFER - deferred mode, fastest Trice execution, more RAM needed
1. Several *trices* are build in a half buffer.
1. No stack used.
@@ -3971,7 +5203,7 @@ The usual case is `#define TRICE_HTOTL(x) (x)`. The `uint32_t* TriceBufferWriteP
1. Usable for multiple blocking and non-blocking physical Trice channels.
1. No copy call inside `TRICE_LEAVE` but optionally an additional direct mode is supported.
-#### 27.1.3. Trice Use Case TRICE_RING_BUFFER - deferred mode, balanced Trice execution time and needed RAM
+#### 28.1.3. Trice Use Case TRICE_RING_BUFFER - deferred mode, balanced Trice execution time and needed RAM
1. Each single *trices* is build in a ring buffer segment.
1. No stack used.
@@ -3980,7 +5212,7 @@ The usual case is `#define TRICE_HTOTL(x) (x)`. The `uint32_t* TriceBufferWriteP
1. No copy call inside `TRICE_LEAVE` but optionally an additional direct mode is supported.
1. Allocation call inside `TRICE_ENTER`
-### 27.2. A configuration for maximum Trice execution speed with the L432_inst example
+### 28.2. A configuration for maximum Trice execution speed with the L432_inst example
* To not loose any clocks, the function `SomeExampleTrices` in [triceExamples.c](../examples/exampleData/triceExamples.c) uses the upper case macro `TRICE` for the first "🐁 Speedy Gonzales" Trices.
@@ -4167,7 +5399,7 @@ C:\Users\ms\repos\trice_wt_devel\examples\L432_inst/../../src/trice.h:741
As you can see in the highlighted blue timestamp bar, typical 8-10 clocks are needed for one Trice macro. One clock duration @64MHz is 15.625 ns, so we need about 150 ns for a Trice. Light can travel about 50 meter in that time.
-### 27.3. A configuration for normal Trice execution speed with the G0B1_inst example
+### 28.3. A configuration for normal Trice execution speed with the G0B1_inst example
* The `triceConfig.h` settings are
@@ -4216,11 +5448,11 @@ Still fast enough for many cases but you hopefully have a good knowledge now how
(back to top)
-## 28. Trice memory needs
+## 29. Trice memory needs
Depending on your target configuration the needed space can differ:
-### 28.1. F030_bare Size
+### 29.1. F030_bare Size
* `./build.sh`:
@@ -4232,7 +5464,7 @@ arm-none-eabi-size build/F030_bare.elf
That is the basic size of an empty generated project just containing some drivers.
-### 28.2. F030_inst Size with TRICE_OFF=1
+### 29.2. F030_inst Size with TRICE_OFF=1
* `./build.sh TRICE_OFF=1` :
@@ -4244,7 +5476,7 @@ arm-none-eabi-size build/F030_inst.elf
This is exactly the same result, proofing that `TRICE_OFF 1` is working correctly.
-### 28.3. F030_inst with ring buffer
+### 29.3. F030_inst with ring buffer
* `./build.sh`:
@@ -4320,7 +5552,7 @@ com5: triceExamples.c 29 0,031_344 🐁 Speedy Gonzales a 32-bit ti
com5: triceExamples.c 30 0,031_186 🐁 Speedy Gonzales b 32-bit timestamp
```
-### 28.4. F030_inst with ring buffer
+### 29.4. F030_inst with ring buffer
* `./build.sh`:
@@ -4395,7 +5627,7 @@ com5: triceExamples.c 29 0,031_188 🐁 Speedy Gonzales a 32-bit ti
com5: triceExamples.c 30 0,030_987 🐁 Speedy Gonzales b 32-bit timestamp
```
-### 28.5. A developer setting, only enabling SEGGER_RTT
+### 29.5. A developer setting, only enabling SEGGER_RTT
* `./build.sh`:
@@ -4473,7 +5705,7 @@ Dec 6 16:14:41.191648 jlink: triceExamples.c 30 0,030_072 16355
"🐁 Speedy Gonzales" needs about 500 MCU clocks.
-### 28.6. A developer setting, only enabling SEGGER_RTT and without deferred output gives after running `./build.sh TRICE_DIAGNOSTICS=0 TRICE_PROTECT=0`:
+### 29.6. A developer setting, only enabling SEGGER_RTT and without deferred output gives after running `./build.sh TRICE_DIAGNOSTICS=0 TRICE_PROTECT=0`:
```bash
arm-none-eabi-size out/F030_inst.elf
@@ -4527,13 +5759,13 @@ Dec 6 16:20:12.453968 jlink: triceExamples.c 30 0,031_661 16355
"🐁 Speedy Gonzales" direct outout needs about 200 MCU clocks and not 500 as before.
-### 28.7. Settings Conclusion
+### 29.7. Settings Conclusion
* 4-8 KB Flash and 1.2 KB RAM needed for the Trice library.
* The RAM size is mainly influenced by the configured buffer sizes.
* Switching off diagnostics and/or protection is ok for less memory needs and faster Trice execution after getting some experience with the project.
-### 28.8. Legacy Trice Space Example (Old Version)
+### 29.8. Legacy Trice Space Example (Old Version)
* STM32CubeMX generated empty default project: `Program Size: Code=2208 RO-data=236 RW-data=4 ZI-data=1636`
* Same project with default `Trice` instrumentation: `Program Size: Code=2828 RO-data=236 RW-data=44 ZI-data=1836`
@@ -4545,7 +5777,7 @@ Dec 6 16:20:12.453968 jlink: triceExamples.c 30 0,031_661 16355
* No format strings go into the target code anymore.
* In general Trice instrumentation **reduces** the needed memory compared to a printf-like implementation.
-### 28.9. Memory Needs for Old Example 1
+### 29.9. Memory Needs for Old Example 1
The following numbers are measured with a legacy encoding, showing that the instrumentation code can be even smaller.
@@ -4560,7 +5792,7 @@ The following numbers are measured with a legacy encoding, showing that the inst
* The about 50 trices in TriceCheckSet() allocate roughly 2100 (fast mode) or 1500 (small mode) bytes.
* trices are removable without code changes with `#define TRICE_OFF 1` before `incude "trice.h"` on file level or generally on project level.
-### 28.10. Memory Needs for Old Example 2
+### 29.10. Memory Needs for Old Example 2
| Project | Compiler | Optimization | Link-Time-Optimization | Result | Remark |
|--------------------------------|-------------|--------------|------------------------|-----------------------------------------------|--------------------------------------------------------------------|
@@ -4571,17 +5803,17 @@ The following numbers are measured with a legacy encoding, showing that the inst
(back to top)
-## 29. Trice Project Image Size Optimization
+## 30. Trice Project Image Size Optimization
Modern compilers are optimizing out unused code automatically, but you can help to reduce trice code size if your compiler is not perfect.
-### 29.1. Code Optimization -o3 or -oz (if supported)
+### 30.1. Code Optimization -o3 or -oz (if supported)
For debugging it could be helpful to switch off code optimization what increases the code size. A good choice is `-o1`. See also
[TRICE_STACK_BUFFER could cause stack overflow with -o0 optimization](#tricestackbuffer-could-cause-stack-overflow-with--o0-optimization).
-### 29.2. Compiler Independent Setting (a bit outdated)
+### 30.2. Compiler Independent Setting (a bit outdated)
Maybe the following is a bit unhandy but it decreases the code amount, build time and the image size.
@@ -4593,41 +5825,41 @@ When having lots of program memory simply let all values be `1`. With specific l
It is possible to `#define TRICE_SINGLE_MAX_SIZE 12` for example in *triceConfig.h*. This automaticaly disables all Trice messages with payloads > 8 bytes (Trice size is 4 bytes).
-### 29.3. Linker Option --split-sections (if supported)
+### 30.3. Linker Option --split-sections (if supported)
In ARM-MDK uVision `Project -> Options -> C/C++ -> "One EFL section for each function"` allows good optimization and getting rid of unused code without additional linker optimization. This leads to a faster build process and is fine for most cases. It allows excluding unused functions.
-### 29.4. Linker Optimization -flto (if supported)
+### 30.4. Linker Optimization -flto (if supported)
* To get the smallest possible image, do _not_ use option `--split sections`.
* Use linker optimization alone.
* This increases the build time but reduces the image size significantly.
-#### 29.4.1. ARMCC Compiler v5 Linker Feedback
+#### 30.4.1. ARMCC Compiler v5 Linker Feedback
* In ARM-MDK uVision, when using ARMCC compiler v5, there is a check box `Project -> Options -> Target -> "Cross Module Optimization"`.
* In ARMCC this works also with the lite version.
-#### 29.4.2. ARMCLANG Compiler v6 Link-Time Optimization
+#### 30.4.2. ARMCLANG Compiler v6 Link-Time Optimization
* In ARM-MDK uVision, when using ARMCLANG compiler v6, the check box `Project -> Options -> C/C++(AC6) -> "Link-Time Optimization"` is usable to set the CLI `-flto` switch.
* LTO is not possible with ARMCLANG6 lite: https://developer.arm.com/documentation/ka004054/latest.
-#### 29.4.3. GCC
+#### 30.4.3. GCC
With GCC use the `-flto` CLI switch directly.
-#### 29.4.4. LLVM ARM Clang
+#### 30.4.4. LLVM ARM Clang
This compiler is much faster and creates the smallest images. Right now it uses the GCC libs and linker.
-#### 29.4.5. Other IDE´s and compilers
+#### 30.4.5. Other IDE´s and compilers
Please check the manuals and create a pull request or simply let me know.
-### 29.5. Legacy STM32F030 Example Project - Different Build Sizes
+### 30.5. Legacy STM32F030 Example Project - Different Build Sizes
-#### 29.5.1. ARMCC compiler v5
+#### 30.5.1. ARMCC compiler v5
| Compiler | Linker | Result | Comment |
|----------|----------------|-------------------------------------------------|-----------------------------------|
@@ -4643,9 +5875,9 @@ Please check the manuals and create a pull request or simply let me know.
(back to top)
-## 30. Trice Tags and Color
+## 31. Trice Tags and Color
-### 30.1. How to get
+### 31.1. How to get
* Add a tag name as color descriptor in front of each Trice format string like `"wrn:Peng!"`.
* In file [../internal/emitter/lineTransformerANSI.go](../internal/emitter/lineTransformerANSI.go) the colors are changeable and additional color tags definable.
@@ -4665,11 +5897,11 @@ Please check the manuals and create a pull request or simply let me know.
* An option using tag specific ID ranges with optional routing exists.
* The Trice tool offers the 2 command line switches `-pick` and `-ban` to control tag visualization during runtime.
-#### 30.1.1. Output options
+#### 31.1.1. Output options

-#### 30.1.2. Check Alternatives
+#### 31.1.2. Check Alternatives
There are over 1000 possibilities:
@@ -4677,13 +5909,13 @@ There are over 1000 possibilities:
To see them all run `trice generate -color`. Only file [../internal/emitter/lineTransformerANSI.go](../internal/emitter/lineTransformerANSI.go) needs to be changed and the Trice tool needs to be rebuild afterwards: `go install ./...`. If you design a good looking flavour, feel free to propose it.
-### 30.2. Color issues under Windows
+### 31.2. Color issues under Windows
**Currently console colors are not enabled by default in Win10**, so if you see no color but escape sequences on your powershell or cmd window, please refer to [Windows console with ANSI colors handling](https://superuser.com/questions/413073/windows-console-with-ansi-colors-handling/1050078#1050078) or simply use a Linux like terminal under windows, like git-bash. One option is also to install Microsoft *Windows Terminal (Preview)* from inside the Microsoft store and to start the Trice tool inside there. Unfortunately this can not be done automatically right now because of missing command line switches. [Alacritty](../third_party/alacritty/ReadMe.md) is one of other alternatives.
(back to top)
-## 31. Trice without UART
+## 32. Trice without UART
A very performant output path is RTT, if your MCU supports background memory access like the ARM-M ones.
@@ -4709,7 +5941,7 @@ Because the Trice tool needs only to receive, a single target UART-TX pin will d
(back to top)
-## 32. Trice over RTT
+## 33. Trice over RTT
> Allows Trice over the debug probe without using a pin or UART.
@@ -4729,11 +5961,11 @@ Because the Trice tool needs only to receive, a single target UART-TX pin will d
(back to top)
-### 32.1. For the impatient (2 possibilities)
+### 33.1. For the impatient (2 possibilities)
The default SEGGER tools only suport RTT channel 0.
-#### 32.1.1. Start JLink commander and connect over TCP
+#### 33.1.1. Start JLink commander and connect over TCP
* JLink.exe → `connect ⏎ ⏎ S ⏎` and keep it active.
* You can control the target with `r[eset], g[o], h[alt]` and use other commands too.
@@ -4815,7 +6047,7 @@ In this **G0B1_inst** example we use the additional `-d16` and `-pf none` switch
**This is a demonstration and test for the `-port TCP4` usage possibility**. Using RTT with J-Link is more easy possible as shown in the next point.
-#### 32.1.2. Start using JLinkRTTLogger
+#### 33.1.2. Start using JLinkRTTLogger
* Start inside Git-Bash or something similar: `trice l -p JLINK -args "-Device STM32F030R8 -if SWD -Speed 4000 -RTTChannel 0"`
* Replace CLI details with your settings.
@@ -4823,7 +6055,7 @@ In this **G0B1_inst** example we use the additional `-d16` and `-pf none` switch
* You can add the `-verbose` CLI switch for more details.
* You may **not** need a Trice tool restart after firmware reload.
-#### 32.1.3. JLinkRTTLogger Issue
+#### 33.1.3. JLinkRTTLogger Issue
* For some reason the RTT technique does not work well with Darwin (macOS) and also Linux right now. The problem seems to be that the JLinkRTTLogger app cannot work correctly in the background. But there is a workaround:
* Example 1:
@@ -4948,7 +6180,7 @@ tmux kill-session -t "tricerttlog"
(back to top)
-### 32.2. Segger Real Time Transfer (RTT)
+### 33.2. Segger Real Time Transfer (RTT)
* Prerequisite is a processor with memory background access support like ARM Cortex-M cores.
* If you can use a Segger J-Link or an STM ST-Link debug probe (ST Microelectronics eval boards have it) this is an easy and fast way to use Trice without any UART or other port.
@@ -4989,11 +6221,11 @@ tmux kill-session -t "tricerttlog"
(back to top)
-### 32.3. J-Link option
+### 33.3. J-Link option
* Prerequisite is a SEGGER J-Link debug probe or a development board with an on-board J-Link option.
-#### 32.3.1. Convert Evaluation Board onboard ST-Link to J-Link
+#### 33.3.1. Convert Evaluation Board onboard ST-Link to J-Link
* Following steps describe the needed action for a ST Microelectronics evaluation board and windows - adapt them to your environment.
* It is always possible to turn back to the ST-Link OB firmware with the SEGGER `STLinkReflash.exe` tool but afterwards the ST-Link Upgrade tool should be used again to get the latest version.
@@ -5014,7 +6246,7 @@ See also [https://github.com/stlink-org/stlink](https://github.com/stlink-org/st
* Check [Converting ST-LINK On-Board Into a J-Link](https://www.segger.com/products/debug-probes/j-link/models/other-j-links/st-link-on-board/)
* Use `STLinkReflash.exe` to convert NUCLEO from ST-Link on-board to J-Link on-board. *`STM32 Debug+ VCP` won´t be detected by Segger reflash utility.*
-#### 32.3.2. Some SEGGER tools in short
+#### 33.3.2. Some SEGGER tools in short
* Download [J-Link Software and Documentation Pack](https://www.segger.com/downloads/jlink/#J-LinkSoftwareAndDocumentationPack) and install.
* You may need to add `C:\Program Files\SEGGER\JLink` to the %PATH% variable.
@@ -5086,7 +6318,7 @@ See also [https://github.com/stlink-org/stlink](https://github.com/stlink-org/st
* The Trice tool can watch the output file and display the *Trices*: `trice log -port JLINK -args "-Device STM32F030R8 -if SWD -Speed 4000 -RTTChannel 0"

-#### 32.3.3. JLinkRTTClient.exe
+#### 33.3.3. JLinkRTTClient.exe
* `JLinkRTTClient.exe` can be used for simple text transmitting to the target, it also displays strings from target coming over channel 0. It is not used by the Trice tool.
* **PLUS:**
@@ -5094,7 +6326,7 @@ See also [https://github.com/stlink-org/stlink](https://github.com/stlink-org/st
* **MINUS:**
* Unfortunately it cannot run separately parallel to stimulate the target with any proprietary protocol because it connects to localhost:19021 and therefore blockades the only one possible connection.
-#### 32.3.4. JLinkRTTViewer.exe
+#### 33.3.4. JLinkRTTViewer.exe
* `JLinkRTTViewer.exe` is a GUI tool and connects via the SEGGER API to the target. It expects ASCII codes and is not used by the Trice tool. The switching between the 16 possible terminals is done via `FF 00` ... `FF 0F`. These byte pairs can occur inside the Trice data.
@@ -5108,7 +6340,7 @@ See also [https://github.com/stlink-org/stlink](https://github.com/stlink-org/st
(back to top)
-### 32.4. Segger RTT
+### 33.4. Segger RTT
* The main advantages are:
* Speed
@@ -5122,7 +6354,7 @@ See also [https://github.com/stlink-org/stlink](https://github.com/stlink-org/st
(back to top)
-### 32.5. Segger J-Link SDK (~800 EUR) Option
+### 33.5. Segger J-Link SDK (~800 EUR) Option
* Segger offers a SeggerRTT SDK which allows to use more than just channel 0 and you can develop your own tooling with it.
* The `trice -port JLINK` is ok for usage **as is** right now. However if you wish more comfort check here:
@@ -5132,7 +6364,7 @@ See also [https://github.com/stlink-org/stlink](https://github.com/stlink-org/st
(back to top)
-### 32.6. Additional Notes (leftovers)
+### 33.6. Additional Notes (leftovers)
* `Downloading RTT target package` from [https://www.segger.com/products/debug-probes/j-link/technology/about-real-time-transfer/](https://www.segger.com/products/debug-probes/j-link/technology/about-real-time-transfer/).
* Read the manual [UM08001_JLink.pdf](../third_party/segger.com/UM08001_JLink.pdf).
@@ -5141,7 +6373,7 @@ See also [https://github.com/stlink-org/stlink](https://github.com/stlink-org/st
(back to top)
-### 32.7. Further development
+### 33.7. Further development
* Check OpenOCD!
* Use OpenOCD and its built-in RTT feature. OpenOCD then starts a server on localhost:17001 where it dumps all RTT messages.
@@ -5178,21 +6410,21 @@ libusb-1.0.23\examples\bin64> .\listdevs.exe
(back to top)
-### 32.8. NUCLEO-F030R8 example
+### 33.8. NUCLEO-F030R8 example
Info: [https://www.st.com/en/evaluation-tools/nucleo-F030r8.html](https://www.st.com/en/evaluation-tools/nucleo-F030r8.html)
-#### 32.8.1. RTT with original on-board ST-LINK firmware
+#### 33.8.1. RTT with original on-board ST-LINK firmware
* `#define TRICE_RTT_CHANNEL 0`:
* If you use a NUCLEO-F030R8 with the original ST-Link on board after firmware download enter: `trice l -p ST-LINK -args "-Device STM32F030R8 -if SWD -Speed 4000 -RTTChannel 0 -RTTSearchRanges 0x20000000_0x2000"`. After pressing the reset button output becomes visible: 
* It works with both ST-Link variants (with or without mass storage device.)
-#### 32.8.2. Change to J-LINK onboard firmware
+#### 33.8.2. Change to J-LINK onboard firmware

-#### 32.8.3. RTT with J-LINK firmware on-board
+#### 33.8.3. RTT with J-LINK firmware on-board

@@ -5203,7 +6435,7 @@ Info: [https://www.st.com/en/evaluation-tools/nucleo-F030r8.html](https://www.st
(back to top)
-### 32.9. Possible issues
+### 33.9. Possible issues
* These boards seem not to work reliable with RTT over J-Link on-board firmware.
* NUCLEO-G071RB
@@ -5212,7 +6444,7 @@ Info: [https://www.st.com/en/evaluation-tools/nucleo-F030r8.html](https://www.st
(back to top)
-### 32.10. OpenOCD with Darwin (macOS)
+### 33.10. OpenOCD with Darwin (macOS)
* OpenOCD on macOS works out of the box after installing it.
* When using VS code with Cortex-Debug you cannot use OpenOCD at the same time.
@@ -5282,11 +6514,11 @@ Nov 14 17:32:35.710201 TCP4: triceExamples.c 26 0_504 i=4444440
...
```
-### 32.11. SEGGER J-Link on Darwin (macOS)
+### 33.11. SEGGER J-Link on Darwin (macOS)
TODO: Working example with SEGGER_RTT J-Link and Open OCD
-### 32.12. Links
+### 33.12. Links
* [USB over WSL2?](https://twitter.com/beriberikix/status/1487127732190212102?s=20&t=NQVa27qvOqPi2uGz6pJNRA) (Maybe intersting for OpenOCD)
@@ -5295,7 +6527,7 @@ TODO: Working example with SEGGER_RTT J-Link and Open OCD
(back to top)
-## 33. Writing the Trice logs into an SD-card (or a user specific output)
+## 34. Writing the Trice logs into an SD-card (or a user specific output)
* Enable `TRICE_DEFERRED_AUXILIARY8` in your project specific _triceConfig.h_ file.
* Enabling `TRICE_DEFERRED_AUXILIARY8` is possible parallel to any direct and/or deferred output.
@@ -5332,63 +6564,63 @@ Related issues/discussions:
(back to top)
-## 34. Trice Target Code Implementation
+## 35. Trice Target Code Implementation
-### 34.1. TRICE Macro structure
+### 35.1. TRICE Macro structure
-#### 34.1.1. TRICE_ENTER
+#### 35.1.1. TRICE_ENTER
* Optionally disable interrupts.
* Prepare `TriceBufferWritePosition` and keep its initial value.
-#### 34.1.2. TRICE_PUT
+#### 35.1.2. TRICE_PUT
* Use and increment `TriceBufferWritePosition`.
-#### 34.1.3. TRICE_LEAVE
+#### 35.1.3. TRICE_LEAVE
* Use `TriceBufferWritePosition` and its initial value for data transfer
* Optionally restore interrupt state.
-### 34.2. TRICE_STACK_BUFFER
+### 35.2. TRICE_STACK_BUFFER
* `TRICE_ENTER`: Allocate stack
* `TRICE_LEAVE`: Call TriceDirectOut()
-### 34.3. TRICE_STATIC_BUFFER
+### 35.3. TRICE_STATIC_BUFFER
* This is like `TRICE_STACK_BUFFER` but avoids stack allocation, what is better for many stacks.
* `TRICE_ENTER`: Set TriceBufferWritePosition to buffer start.
* `TRICE_LEAVE`: Call TriceDirectOut().
-### 34.4. TRICE_DOUBLE_BUFFER
+### 35.4. TRICE_DOUBLE_BUFFER
* `TRICE_ENTER`: Keep TriceBufferWritePosition.
* `TRICE_LEAVE`: Optionally call TriceDirectOut().
-### 34.5. TRICE_RING_BUFFER
+### 35.5. TRICE_RING_BUFFER
* `TRICE_ENTER`: Keep or wrap TriceBufferWritePosition and add offset.
* `TRICE_LEAVE`: Optionally call TriceDirectOut().
The `TRICE_RING_BUFFER` allocates incremental ring buffer space and each trice location is read by a deferred task.
-### 34.6. Deferred Out
+### 35.6. Deferred Out
-#### 34.6.1. Double Buffer
+#### 35.6.1. Double Buffer
* TriceTransfer
* TriceOut
* TriceNonBlockingWrite( triceID, enc, encLen );
-#### 34.6.2. Ring Buffer
+#### 35.6.2. Ring Buffer
* TriceTransfer
* lastWordCount = TriceSingleDeferredOut(addr);
* int triceID = TriceIDAndBuffer( pData, &wordCount, &pStart, &Length );
* TriceNonBlockingWrite( triceID, pEnc, encLen );
-### 34.7. Direct Transfer
+### 35.7. Direct Transfer
* TRICE_LEAVE
* TriceDirectWrite(triceSingleBufferStartWritePosition, wordCount);
@@ -5399,7 +6631,7 @@ The `TRICE_RING_BUFFER` allocates incremental ring buffer space and each trice l
* triceDirectEncode
* triceNonBlockingDirectWrite
-### 34.8. Possible Target Code Improvements
+### 35.8. Possible Target Code Improvements
There have been 3 similar implementations for trice encode
@@ -5443,14 +6675,14 @@ size_t TriceEncode(int* pTriceID, unsigned int pCount, uint32_t * const dest, ui
(back to top)
-## 35. Trice Similarities and Differences to printf Usage
+## 36. Trice Similarities and Differences to printf Usage
-### 35.1. Printf-like functions
+### 36.1. Printf-like functions
...have a lot of things to do: Copy format string from FLASH memory into a RAM buffer and parse it for format specifiers. Also parse the variadic parameter list and convert each parameter according to its format specifier into a character sequences, what includes several divisions - costly function calls. Concatenate the parts to a new string and deliver it to the output, what often means copying again. A full-featured printf library consumes plenty space and processing time and several open source projects try to make it better in this or that way. Never ever call a printf-like function in time critical code, like an interrupt - it would crash your target in most cases.
The *trice* calls are usable inside interrupts, because they only need a few MCU clocks for execution. Porting legacy code to use it with the Trice library, means mainly to replace Printf-like function calls with `trice` function calls. See also chapter [Legacy User Code Option Print Buffer Wrapping and Framing](#legacy-user-code-option-print-buffer-wrapping-and-framing).
-### 35.2. Trice IDs
+### 36.2. Trice IDs
* Each Trice caries a 14-bit nuber ID as replacement for the format string.
* This ID is automatically generated (controllable) and in the source code it is the first parameter inside the Trice macro followed by the format string and optional values.
@@ -5458,7 +6690,7 @@ The *trice* calls are usable inside interrupts, because they only need a few MCU
* The Trice cache makes this invisible to the build system, allowing full translation speed.
* The format string is **not** compiled into the target code. It goes together with the ID into a project specific reference list file [til.json](../demoTIL.json) (example).
-### 35.3. Trice values bit width
+### 36.3. Trice values bit width
* No need to explicit express the value bit width.
* The default parameter width for the Trice macro is 32 bit. It is changeable to 8, 16 or 64-bit:
@@ -5469,7 +6701,7 @@ The *trice* calls are usable inside interrupts, because they only need a few MCU
* The fastest Trice macro execution is, when MCU bit width matches the macro bit width.
* The implicit TCOBS compression compacts the binary Trice data during the framing.
-### 35.4. Many value parameters
+### 36.4. Many value parameters
* No need to explicit express the values count.
* Up to 12 values are supported directly. Example:
@@ -5480,7 +6712,7 @@ The *trice* calls are usable inside interrupts, because they only need a few MCU
* The _Trice_ tool compares the number of given format specifiers with the written parameters in a precimpile step to minimize the risk of runtime errors.
* There is no variadic values scanning during runtime. The C preprocessor does the work.
-### 35.5. Floating Point Values
+### 36.5. Floating Point Values
These types are mixable with integer types but need to be covered by converter function.
@@ -5525,7 +6757,7 @@ static inline uint64_t aDouble( double x ){
}
```
-### 35.6. Runtime Generated 0-terminated Strings Transfer with triceS
+### 36.6. Runtime Generated 0-terminated Strings Transfer with triceS
* The `%s` format specifier is supported by the Trice macro too but needs specific treatment.
* Strings, known at compile time should be a part of a format string to reduce runtime overhead.
@@ -5565,13 +6797,13 @@ trice( "Birthday %2u-%02u-%4u\n", dd, mm, yyyy );
triceS( "Name: %12s, ", n ); triceS( "Family: %s, ", f ); trice( "Birthday %2u-%02u-%4u\n", dd, mm, yyyy );
```
-### 35.7. Runtime Generated counted Strings Transfer with triceN
+### 36.7. Runtime Generated counted Strings Transfer with triceN
* It is also possible to transfer a buffer with length n using the `TRICE_N` (or `triceN`, `TriceN`, `TRiceN`) macro.
* This becomes handy for example, when a possibly not 0-terminated string in FLASH memory needs transmission: `triceN( "msg: FLASH string is %s", addr, 16 );`
* There are also specific macros like `trice32B` or `trice16F`. Please look into [triceCheck.c](../_test/testdata/triceCheck.c) for usage or see the following.
-### 35.8. Runtime Generated Buffer Transfer with triceB
+### 36.8. Runtime Generated Buffer Transfer with triceB
* A buffer is transmittable with `TRICE_B` (or `triceB`, `TriceB`, `TRiceB`) and specifying just one format specifier, which is then repeated. Example:
@@ -5627,18 +6859,18 @@ The `triceF` macros were an experimental remote-function-call syntax. They are d
> * An appropriate syntax is needed.
-->
-### 35.9. Extended format specifier possibilities
+### 36.9. Extended format specifier possibilities
* Because the format string is interpreted by the Trice tool written in [Go](https://en.wikipedia.org/wiki/Go_(programming_language)), the **Go** capabilities partial usable.
-#### 35.9.1. Trice format specifier
+#### 36.9.1. Trice format specifier
* The Trice macros are used in **C** code.
* The format strings are interpreted by the Trice tool, which is written in **Go**.
* The **C** and **Go** format specifier are not equal but similar.
* Therefore, a **T**rice adaptation is internally performed.
-#### 35.9.2. Length modifier support
+#### 36.9.2. Length modifier support
* Trice now accepts the common C length modifiers `hh`, `h`, `l`, `ll`, `j`, `z`, `t`, and `L` together with the corresponding supported conversion specifiers.
* This is useful for ordinary Trice macros as well as for buffer macros such as `TRICE8_B`, `TRICE16_B`, `TRICE32_B`, and `TRICE64_B`.
@@ -5652,7 +6884,7 @@ The `triceF` macros were an experimental remote-function-call syntax. They are d
* The normalization keeps flags, field width, and precision. Only the C length modifier itself is removed from the host side working copy.
* Invalid combinations are not legalized by Trice. For example, `%LX` is not treated as a valid integer format because `L` belongs to floating-point conversions such as `%Lf`, not to `%X`.
-#### 35.9.3. Overview Table
+#### 36.9.3. Overview Table
| Format Specifier Type | C | Go | T | (T =Trice) \| remark |
|-----------------------------------------------------------------|---|----|---|-----------------------------------------------------------------------------|
@@ -5693,7 +6925,7 @@ The `triceF` macros were an experimental remote-function-call syntax. They are d

-### 35.10. Unsupported `printf` format features
+### 36.10. Unsupported `printf` format features
Trice supports the common `printf`-style format specifiers used for embedded logging. Some less common `printf` features are intentionally not supported yet, because they do not fit well into the current lightweight Trice argument handling model or because they introduce side effects that are unsuitable for logging.
@@ -5704,7 +6936,7 @@ This mainly concerns:
* wide character and wide string formats such as `%lc` and `%ls`
* the `%n` conversion specifier
-#### 35.10.1. Dynamic field width with `*`
+#### 36.10.1. Dynamic field width with `*`
In standard `printf`, a field width can either be fixed inside the format string or supplied dynamically.
@@ -5734,7 +6966,7 @@ printf("%10d", value);
A negative dynamic width has a special meaning and implies left-aligned output, similar to the `-` flag.
-#### 35.10.2. Dynamic precision with `*`
+#### 36.10.2. Dynamic precision with `*`
The same principle exists for precision.
@@ -5756,7 +6988,7 @@ Again, the `*` consumes an additional `int` argument. For strings this is often
printf("%.*s", maxLen, text);
```
-#### 35.10.3. Dynamic width and precision together
+#### 36.10.3. Dynamic width and precision together
Both dynamic field width and dynamic precision can be used in the same conversion:
@@ -5778,7 +7010,7 @@ Trice is designed so that a format string usually maps to a compact and predicta
For that reason, Trice currently does not support these forms. Supporting them correctly would require the Trice format analysis to count and encode the hidden width and precision arguments in addition to the visible value arguments.
-#### 35.10.4. Wide character and wide string formats: `%lc` and `%ls`
+#### 36.10.4. Wide character and wide string formats: `%lc` and `%ls`
The `%lc` and `%ls` conversions are valid C `printf` forms for wide character and wide string data.
@@ -5799,7 +7031,7 @@ Therefore, simply removing the `l` and treating `%lc` like `%c` or `%ls` like `%
For that reason, Trice currently does not support `%lc` and `%ls`. Proper support would require extra target-side type or encoding information so that the host can decode the transported data in an unambiguous and portable way.
-#### 35.10.5. The special `%n` conversion specifier
+#### 36.10.5. The special `%n` conversion specifier
The `%n` specifier is fundamentally different from ordinary `printf` conversions.
@@ -5841,7 +7073,7 @@ printf("%lln", &ll); // long long *
This means `%n` is not a pure logging conversion. It has a side effect because it writes to memory.
-#### 35.10.6. Security implications of `%n`
+#### 36.10.6. Security implications of `%n`
The `%n` specifier is also relevant for format-string security.
@@ -5861,7 +7093,7 @@ printf("%s", userInput);
Because `%n` writes to memory and is strongly associated with format-string vulnerabilities, many coding standards and safety-oriented code bases discourage or forbid it.
-#### 35.10.7. Why Trice does not support `%n`
+#### 36.10.7. Why Trice does not support `%n`
Trice is a logging and tracing system. Its purpose is to transfer compact log information from the target to the host, where it is decoded into readable text.
@@ -5878,7 +7110,7 @@ For these reasons, Trice currently does not support `%n`.
This is intentional. Trice log statements should describe data to be logged, not modify application memory as a side effect of formatting.
-### 35.11. UTF-8 Support
+### 36.11. UTF-8 Support
This is gratis, if you edit your source files containing the format strings in UTF-8:
@@ -5886,11 +7118,11 @@ This is gratis, if you edit your source files containing the format strings in U
The target does not even "know" about that, because it gets only the Trice IDs.
-### 35.12. Switch the language without changing a bit inside the target code
+### 36.12. Switch the language without changing a bit inside the target code
Once the [til.json](../demoTIL.json) list is done the user can translate it in any language and exchanging the list switches to another language. This is nowadays a simple AI agent task.
-### 35.13. Format tags prototype specifier examples
+### 36.13. Format tags prototype specifier examples
This syntax is supported: `%[flags][width][.precision][length]`
@@ -5905,7 +7137,7 @@ This syntax is supported: `%[flags][width][.precision][length]`
(back to top)
-## 36. Trice ABC - Asynchronous Broadcast Commands
+## 37. Trice ABC - Asynchronous Broadcast Commands
Trice ABC adds command-style communication to normal Trice records. The API is intentionally small and meant as a building block.
@@ -5938,7 +7170,7 @@ TriceParseRecord() -> TriceResolveAbc() -> TriceDispatchAbc() -> setLeds(&rx)
Only the Trice ID, optional ABC stamp, and optional payload are transferred. The command string stays in the TIL data and is used during receiver-code generation.
-### 36.1. Quick use
+### 37.1. Quick use

@@ -6034,7 +7266,7 @@ if (used > 0 && TriceResolveAbc(&rx, triceAbc, triceAbcElements) == TRICE_RX_RES

-### 36.2. ABC macro families
+### 37.2. ABC macro families
The suffix `C` means command. The optional number in the macro name is the payload element width.
@@ -6070,7 +7302,7 @@ TriceC("cmd:sample", TriceStamp16);
TRiceC("cmd:sample", TriceStamp32);
```
-### 36.3. Command names and handler names
+### 37.3. Command names and handler names
The ABC command name is written where a normal Trice format string would stand. Treat it as a command name, not as a printf format string.
@@ -6091,7 +7323,7 @@ The prefixes are not ABC addresses. They are useful for readable TIL data, filte
The final command part must be a valid C identifier. Do not add a trailing newline to ABC command strings.
-### 36.4. Receiver selection and generated table
+### 37.4. Receiver selection and generated table
`trice generate -abc` creates a user-owned selection header once. Afterwards the user edits this header to select the commands compiled into that target.
@@ -6118,7 +7350,7 @@ const unsigned triceAbcElements = sizeof(triceAbc) / sizeof(triceAbc[0]);
Do not edit `device_abc.c`. Implement the selected handlers in normal application code. Missing handler implementations fail as normal linker errors.
-### 36.5. Receive runtime contract
+### 37.5. Receive runtime contract
The common receive API is in `src/triceRx.h` and `src/triceRx.c`.
@@ -6141,7 +7373,7 @@ The payload is not copied. Do not store `rx->payload` beyond the lifetime of the
For simple one-record receive paths, `TriceAbcOnReceive(pBuf, len)` is available as a convenience wrapper. Stream receivers should usually parse records explicitly, advance by the positive consumed byte count, and decide per record whether it is ABC, normal log traffic, counted typeX0 traffic, or unknown traffic.
-### 36.6. Handler payload handling
+### 37.6. Handler payload handling
Handlers get only `const triceRx_t*`. Application state must come from normal program context.
@@ -6164,7 +7396,7 @@ void setTime(const triceRx_t* rx) {
Use the configured Trice transfer order consistently if payload values are exchanged between different endian architectures.
-### 36.7. Responses
+### 37.7. Responses
ABC has no built-in response model. A handler may send no response, one response, or several responses.
@@ -6180,7 +7412,7 @@ TRice8C("abc:LedsState", responseStamp32, &leds, 1);
The response is just another Trice message. It may be a normal log message or another ABC command. Use stamps to correlate responses with requests.
-### 36.8. What ABC is not
+### 37.8. What ABC is not
ABC is not RPC by itself.
@@ -6201,7 +7433,7 @@ Build these policies above ABC when needed.
ABC is also not remote code execution. A receiver can execute only handlers already compiled into the firmware and selected by its generated ABC table.
-### 36.9. Example: `examples/TriceAbc`
+### 37.9. Example: `examples/TriceAbc`
The host-native demo shows ABC without embedded hardware.
@@ -6336,7 +7568,7 @@ th@Thomass-MacBook-Pro-7 TriceAbc %

-### 36.10. Host tests
+### 37.10. Host tests
`_test/abc_tx_host` checks the transmit side. It compiles a small C fixture with ABC TX support, emits selected `triceC`, `TriceC`, `TRiceC`, `trice8C`, `trice16C`, and `trice32C` calls, and compares the produced bytes with fixed fixtures. It verifies wire format generation only; it does not use a receiver table.
@@ -6344,7 +7576,7 @@ th@Thomass-MacBook-Pro-7 TriceAbc %
Together, these tests document the current ABC boundary: transmit macros create normal Trice records, the generated table maps selected IDs to handlers, and the receive runtime parses/resolves/dispatches one decoded record at a time.
-### 36.11. Building RPC-like protocols on top
+### 37.11. Building RPC-like protocols on top
Use ABC as the transport primitive and define the RPC policy in the application.
@@ -6360,7 +7592,7 @@ A minimal RPC-like pattern is:
For addressed RPC over a broadcast bus, put the destination into the stamp or payload and let non-matching receivers ignore the command. ABC itself still broadcasts the record.
-### 36.12. Security boundary
+### 37.12. Security boundary
ABC receiving allows incoming Trice records to trigger selected local application handlers. Do not enable ABC receive processing on untrusted inputs without an application-level trust model.
@@ -6372,7 +7604,7 @@ Typical protections are:
- add authentication or encryption around the transport,
- compile out `TRICE_RX_ABC_SUPPORT` where it is not needed.
-### 36.13. Summary
+### 37.13. Summary
ABC turns selected Trice IDs into asynchronous broadcast commands.
@@ -6392,30 +7624,30 @@ Using Trice ABC for the same (remote) handler from different devices assigns dif
(back to top)
-## 37. Development Environment Setup
+## 38. Development Environment Setup
* Trice is usable with any C-compiler for any processor type, bit width and endianness. The example projects here are STM32 ones but illustrate how to setup Trice.
* The [examples](../examples) folder contains some instrumented example projects together with bare counterparts. Comparing a bare project with its intrumented counterpart gives a quick overview what needs to be done to get started.
-### 37.1. Common Information
+### 38.1. Common Information
- All used tools are **Open Source** (despite the [ARM-Keil µVision IDE](https://www2.keil.com/mdk5/uvision/), for new projects VS Code is a better choice).
- All provided information is just as example and needs adaptation to your needs.
- There is no need to setup the environment in the given order.
-### 37.2. Important to know
+### 38.2. Important to know
The [ARM-Keil µVision IDE](https://www2.keil.com/mdk5/uvision/) does sometimes not recognize external file modifications. That means for example: After editing `main.c` by adding a `trice( "Hi!\n" )` and executing `trice insert` as pre-compile step it could happen, that an updated `trice( iD(12345), "Hi!\n" )` was inserted and correct compiled but the update in `main.c` is not shown. Simply close and reopen `main.c` before editing again. This seems to be a [ARM-Keil µVision IDE](https://www2.keil.com/mdk5/uvision/) "feature" or be caused Windows not signaling a file change.
-### 37.3. Animation
+### 38.3. Animation
(The trice IDs occur just during the compilation.)
-### 37.4. Setup Linux PC - Example with Debian12 - KDE Desktop
+### 38.4. Setup Linux PC - Example with Debian12 - KDE Desktop
-#### 37.4.1. Basic setup
+#### 38.4.1. Basic setup
* Add yourself to the sudo group:
@@ -6441,7 +7673,7 @@ git config --global user.email "you@example.com"
git config --global user.name "Your Name"
```
-#### 37.4.2. GitHub
+#### 38.4.2. GitHub
* Create github account.
* Create ssh pair:
@@ -6460,7 +7692,7 @@ git config --global user.name "Your Name"
git clone git@github.com:rokath/trice.git
```
-#### 37.4.3. VS Code
+#### 38.4.3. VS Code
* Download VS Code from https://code.visualstudio.com/.
* Install VS Code (adapt to downloaded version) and start it inside the Trice folder:
@@ -6472,7 +7704,7 @@ git config --global user.name "Your Name"
code .
```
-#### 37.4.4. Go
+#### 38.4.4. Go
* Download the **Go** language from https://go.dev/doc/install and install:
@@ -6622,7 +7854,7 @@ git config --global user.name "Your Name"
th@P51-DebianKDE:~/repos/trice$
```
-#### 37.4.5. Gitkraken (or other GUI for git)
+#### 38.4.5. Gitkraken (or other GUI for git)
* Gitkraken download from https://www.gitkraken.com/download and Install:
@@ -6630,7 +7862,7 @@ git config --global user.name "Your Name"
mv ./gitkraken-amd64.deb /tmp; sudo apt install /tmp/gitkraken-amd64.deb
```
-#### 37.4.6. arm-none-eabi toolchain (or other target system compiler)
+#### 38.4.6. arm-none-eabi toolchain (or other target system compiler)
```bash
sudo apt install gcc-arm-none-eabi
@@ -6681,7 +7913,7 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
##### Recommended complete Arm GNU Toolchain
-For the Trice bare-metal examples, use a complete, internally consistent toolchain containing GCC, GNU Binutils, Newlib, and Newlib-Nano. The official [Arm GNU Toolchain releases](https://gitlab.arm.com/tooling/gnu-toolchains-for-arm) provide matching packages for Linux, macOS, and Windows. Select the package for the host platform whose target name ends in `arm-none-eabi`, and verify its accompanying SHA-256 file before installing it.
+For the Trice bare-metal examples, use a complete, internally consistent toolchain containing GCC, GNU Binutils, Newlib, and Newlib-Nano. The official [Arm GNU Toolchain installation guide](https://learn.arm.com/install-guides/gcc/arm-gnu/) covers matching packages for Linux, macOS, and Windows. Select the package for the host platform whose target name ends in `arm-none-eabi`, and verify its accompanying SHA-256 file before installing it.
Arm GNU Toolchain 15.3.Rel1 is the currently tested version for the Trice GCC example builds. It reports:
@@ -6697,7 +7929,11 @@ toolchain_dir="$HOME/opt/arm-gnu-toolchain-15.3.rel1"
export PATH="$toolchain_dir/bin:$PATH"
```
-On Windows, add the corresponding extracted or installed `bin` directory at the beginning of the user `Path`. Afterwards, open a new terminal. Do not combine GCC, `as`, libraries, or specifications from different toolchain installations.
+On Windows, keep versioned installations side by side and prepend the selected
+`bin` directory for the current terminal. See
+[Inventory, select, and remove compiler versions](#inventory-select-and-remove-compiler-versions).
+Make the selection persistent only after it passes the tests. Do not combine
+GCC, `as`, libraries, or specifications from different toolchain installations.
Check which installation is active and whether the required runtime files are present:
@@ -6734,7 +7970,7 @@ If the warning occurs:
4. Repeat the affected build once with the complete 15.3.Rel1 package.
5. If it is reproducible, retain the complete compiler command, tool versions, source file, and generated listing and report the case as a GNU Binutils or Arm GNU Toolchain issue.
-#### 37.4.7. J-Link (if needed)
+#### 38.4.7. J-Link (if needed)
* Download and install from https://www.segger.com/downloads/jlink/#J-LinkSoftwareAndDocumentationPack
@@ -6770,11 +8006,11 @@ Available options:
Shutting down... Done.th@P51-DebianKDE:~/Downloads$
```
-#### 37.4.8. Beyond Compare (if no other diff tool)
+#### 38.4.8. Beyond Compare (if no other diff tool)
* Download and install from https://www.scootersoftware.com
-### 37.5. Setup Windows PC Example
+### 38.5. Setup Windows PC Example
Setting up a PC is for Linux mostly straightforward but Windows PCs are more problematic. The steps shown here are just one example.
@@ -6791,33 +8027,55 @@ Setting up a PC is for Linux mostly straightforward but Windows PCs are more pro
- This is my favorite editor with many optional Add-Ons. It is used for debugging as well.
- Install Go if you wish to compile Go programs.
- `go test ./...` should succeed in a terminal window.
- - When GCC is not installed you get some strange errors with `TestAll.sh`:
- ```bash
- ms@PaulPCWin11 MINGW64 ~/repos/trice (devel)
- $ ./scripts/testAll.sh
- Fri Jan 10 11:19:39 WEST 2025
- This can take several minutes ...
-
- ...
-
- ok github.com/rokath/trice/pkg/tst 0.601s
- # github.com/rokath/trice/_test/dblB_de_cobs_ua [github.com/rokath/trice/_test/dblB_de_cobs_ua.test]
- dblB_de_cobs_ua\cgo_test.go:20:110: undefined: triceDir
- dblB_de_cobs_ua\cgo_test.go:24:2: undefined: triceLogTest
- dblB_de_cobs_ua\cgo_test.go:24:28: undefined: testLines
- # github.com/rokath/trice/_test/dblB_de_tcobs_ua [github.com/rokath/trice/_test/dblB_de_tcobs_ua.test]
- dblB_de_tcobs_ua\cgo_test.go:20:92: undefined: triceDir
- dblB_de_tcobs_ua\cgo_test.go:24:2: undefined: triceLogTest
- dblB_de_tcobs_ua\cgo_test.go:24:28: undefined: testLines
- ```
- - Download and install latest GCC then, from https://winlibs.com for example.
- - Extract to `C:\bin\mingw64` and extend PATH with `C:\bin\mingw64\bin`
- - Open terminal and execute `gcc --version` to check success.
+ - Some Go tests use CGO and therefore additionally need a Windows host C
+ compiler. This is not the ARM compiler used for the embedded examples.
+ See [Choose the right Windows compiler](#choose-the-right-windows-compiler).
- Setup J-Link if you use this debug probe as hardware or software (see below).
- Install SEGGER [J-Link Software and Documentation Pack](https://www.segger.com/downloads/jlink/#J-LinkSoftwareAndDocumentationPack)
- Install [Make for Windows](#install-make) and add its installation bin folder location to the PATH variable.
-#### 37.5.1. Setup Trice
+#### 38.5.1. Choose the right Windows compiler
+
+Three different compiler roles occur in this repository. A higher GCC version
+number does not make one role a replacement for another:
+
+| Role | Command or target | Used for | Recommended source |
+|------------------------------------|------------------------------------------------------------------|--------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------|
+| ARM bare-metal GCC cross-toolchain | `arm-none-eabi-gcc`; target `arm-none-eabi` | Firmware and `scripts/_testAll_12_GccExampleBuilds.sh` | Official [Arm GNU Toolchain installation guide](https://learn.arm.com/install-guides/gcc/arm-gnu/); choose a Windows package ending in `arm-none-eabi` |
+| Windows host GCC | `gcc`; target such as `x86_64-w64-mingw32` or `i686-w64-mingw32` | CGO and native Windows C tests | Optional MinGW-w64 distribution, for example [WinLibs](https://winlibs.com/) |
+| Clang frontend | `clang`; use `--target=arm-none-eabi` for firmware | Optional ARM firmware builds and, when correctly configured, native host tests | Official [LLVM releases](https://github.com/llvm/llvm-project/releases/latest) |
+
+WinLibs is a third-party distribution of upstream GCC and MinGW-w64 for
+Windows. Its GCC 16.1 packages are Windows host compilers, not
+`arm-none-eabi-gcc`. They cannot build the ARM examples or replace the Arm GNU
+Toolchain. WinLibs is useful only when a Windows host GCC is needed. Normally
+choose its Win64 `x86_64` build for a 64-bit Go installation; a Win32 package
+reports `i686-w64-mingw32`. Use `go env GOARCH` to check the Go architecture;
+`amd64` normally needs the Win64 host compiler.
+
+Do not infer the compiler target from the download page, folder name, or
+`--version` alone. Check it explicitly:
+
+```bash
+arm-none-eabi-gcc -dumpmachine # must print: arm-none-eabi
+gcc -dumpmachine # host GCC normally prints: x86_64-w64-mingw32
+clang --target=arm-none-eabi -dumpmachine
+```
+
+For example, a `C:\bin\mingw32\bin\gcc.exe` reporting GCC 16.1 and
+`i686-w64-mingw32` is an optional 32-bit Windows host compiler. The executable
+needed by Step 12 is named `arm-none-eabi-gcc.exe` and comes from a separate
+Arm GNU Toolchain installation.
+
+At the time of writing, GCC 16.1 is the newest upstream GCC major release and
+WinLibs offers it as its current Windows host build. The current official Arm
+GNU Toolchain version can differ because Arm publishes an integrated
+cross-toolchain on its own release schedule. Use the version identified as
+tested in [Recommended complete Arm GNU Toolchain](#recommended-complete-arm-gnu-toolchain)
+for the ARM examples; do not select a host GCC merely because its GCC number
+is higher.
+
+#### 38.5.2. Setup Trice
- from inside folder `repos` clone trice repo with `git clone https://github.com/rokath/trice.git`.
- Run `go install ./cmd/trice/...` from folder `repos/trice`.
@@ -6829,7 +8087,7 @@ OR
- Put trice/src into `repos` if you want access the trice library code from several projects and have it only once.
- Alternatively copy it into your project.
-#### 37.5.2. Setup ARM Environment Example
+#### 38.5.3. Setup ARM Environment Example
Install make
@@ -6876,33 +8134,41 @@ There is NO WARRANTY, to the extent permitted by law.
Install ARM GCC
-- Uninstall existing ARM GCC compilers optionally.
-- Check if $PATH is clean.
- - In fact you can leave it as it is.
-- Check if `C_INCLUDE_PATH` is not defined.
- - It would cause issues performing Go tests with CGO.
- - The environment variable `C_INCLUDE_PATH` is needed by Clang, but is set temporarily inside the Makefile.
-- Open a console.
- - `which arm-none-eabi-gcc` should return `no arm-none-eabi-gcc` if no legacy compilers installed.
-- Download latest version from https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads.
-- Install exactly into `C:\bin\ArmGNUToolchain` and add `C:\bin\ArmGNUToolchain\bin` it to the **beginning** of the path variable.
- - The path is temporarily extendable inside the manually edited Makefiles as well, but for debugging the Windows path is used directly.
- - The path is used directly also in generated Makefiles.
- - Extending the path variable at the beginning avoids accidentally usage of installed legacy compilers with the same name.
- - To use exactly `C:\bin\ArmGNUToolchain` as install location allows a more easy project collaboration.
- - Check path:
+- Use the official [Arm GNU Toolchain installation guide](https://learn.arm.com/install-guides/gcc/arm-gnu/)
+ to select a Windows package whose name ends in `arm-none-eabi`.
+- Prefer a ZIP package for testing versions side by side. Verify the published
+ checksum and extract each version to its own directory, for example:
+
+ ```text
+ C:\bin\ArmGNUToolchain-13.2.Rel1
+ C:\bin\ArmGNUToolchain-15.3.Rel1
+ ```
+
+- Do not merge or copy files between toolchain directories. Compiler,
+ assembler, linker, Newlib, specifications, and DLLs must stay from the same
+ package.
+- Do not uninstall the previous working version before the new version passes
+ the tests. Select one version for the current terminal as described in
+ [Inventory, select, and remove compiler versions](#inventory-select-and-remove-compiler-versions).
+- Keep `C_INCLUDE_PATH` unset globally. The repository setup derives the ARM
+ headers needed by Clang from the selected `arm-none-eabi-gcc`; a global ARM
+ include path can break CGO and other host builds.
+- Verify the complete selected toolchain in Git Bash:
+
```bash
- $ echo $PATH | tr : '\n'
- ...
- /c/bin
- /c/bin/ArmGNUToolchain/bin
- /c/bin/mingw64/bin
- /c/Program Files/Go/bin
- /c/Users/ms/go/bin
- /c/Users/ms/AppData/Local/Microsoft/WinGet/Packages/ezwinports.make_Microsoft.Winget.Source_8wekyb3d8bbwe/bin
- ...
+ type -a arm-none-eabi-gcc
+ type -a arm-none-eabi-as
+ arm-none-eabi-gcc -dumpmachine
+ arm-none-eabi-gcc --version
+ arm-none-eabi-as --version
+ arm-none-eabi-gcc -print-file-name=nano.specs
+ arm-none-eabi-gcc -print-file-name=libnosys.a
```
+ The target must be `arm-none-eabi`. The last two commands must print absolute
+ paths inside the selected installation, not only `nano.specs` or
+ `libnosys.a`.
+
macOS
- In terminal `brew install arm-none-eabi-gcc`
@@ -6931,36 +8197,48 @@ There is NO WARRANTY, to the extent permitted by law.
With the ARM Clang you get quicker compilation runs and smaller images.
-- You need to install ARM GCC as well to use ARM Clang.
- - ARM Clang uses the GCC libraries. For that it looks for `C_INCLUDE_PATH`.
- - ARM Clang uses the GCC debugger. For that it looks into the Windows path variable directly.
-- Uninstall existing ARM clang compilers or make sure they are hidden.
-- Check if $PATH is clean.
- - In fact you can leave is as it is.
-- Check if `C_INCLUDE_PATH` is not defined.
- - It would cause issues performing Go tests with CGO.
-- Open a console.
- - `which clang` should return `no clang`.
- - If you have other clang compilers installed, do not touch them.
-- Download latest version from https://github.com/llvm/llvm-project/releases.
-- Install exactly into `C:\bin\ArmClang` and do **not** add it to path variable.
- - The path is extended temporarily inside the Makefile for the compiler run.
-
-Check Project Makefile (if it already exists)
+- You need to install ARM GCC as well to use ARM Clang for the embedded examples.
+ - Clang supplies the compiler frontend, but it does not supply the ARM C library, target headers, linker, or debugger.
+ - The repository setup script derives the required ARM header locations from `arm-none-eabi-gcc` and exports them through `CLANG_SYS_INCLUDES`.
+ - Keep `C_INCLUDE_PATH` unset globally. A global value can leak ARM headers into host builds and CGO tests.
+- Download a Windows x64 package from the official
+ [LLVM releases](https://github.com/llvm/llvm-project/releases/latest).
+ Install versions side by side, for example `C:\bin\LLVM-22.1.6`.
+- Select the intended version temporarily in `PATH`; do not uninstall other
+ Clang installations merely to hide them.
+- Verify the ARM frontend explicitly with
+ `clang --target=arm-none-eabi --version` and
+ `clang --target=arm-none-eabi -dumpmachine`.
+ - The reported target must be `arm-none-unknown-eabi`.
+ - A plain `clang --version` reports the default host target and therefore does not verify the ARM build configuration.
+
+On Windows, a globally visible `clang` is also detected by some Go regression tests as a host C compiler. LLVM does not include a Windows C runtime or its standard headers. Therefore, a host Clang installation must use one of these runtime setups:
+
+- MSVC target: Install the Visual Studio C++ Build Tools and a Windows SDK. This is the native Microsoft setup, but it is a comparatively large installation.
+- GNU target: Install a matching 64-bit MinGW-w64 distribution, such as TDM-GCC, and make its `bin` directory available in `PATH`. If Clang otherwise defaults to the MSVC target, create `clang.cfg` next to `clang.exe` containing:
+
+ ```text
+ --target=x86_64-w64-windows-gnu
+ ```
-- The Makefile should start with these lines:
+ Explicit embedded options such as `--target=arm-none-eabi` still override this host default.
-```mak
-# Put ARM Clang first in path temporary to avoid compiler variants issues.
-export PATH := C:\bin\ArmClang\bin:$(PATH)
+Check the host installation before running the Go test suite:
-# ARM Clang uses the ARM GNU toolchain libraries and finds them over C_INCLUDE_PATH.
-export C_INCLUDE_PATH := C:\bin\ArmGNUToolchain\arm-none-eabi\include
+```bash
+printf '#include \n' | clang -std=c99 -fsyntax-only -x c -
```
-The `C:\bin\ArmGNUToolchain\bin:` is in fact not needed, because it must be in the path anyway for debugging.
+The command must finish without diagnostics. An error such as `fatal error: 'string.h' file not found` means that the compiler executable exists, but its matching host C runtime headers are not configured. Do not add ARM include directories globally to work around that host error.
+
+Check Project Makefile (if it already exists)
-- `make version` should give output like that:
+- Do not hard-code a global `C_INCLUDE_PATH` or mix paths from different ARM
+ toolchain versions in the Makefile.
+- Select the intended ARM GCC and Clang `bin` directories in the terminal
+ before invoking `make`. The repository setup script then computes
+ `CLANG_SYS_INCLUDES` from the active complete ARM GCC installation.
+- `make version` should give output like this:
```bash
$ make version
@@ -6970,16 +8248,132 @@ Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-/c/bin/ArmClang/bin/clang
+/c/bin/ArmClang/bin/clang --target=arm-none-eabi
clang version 17.0.0
-Target: x86_64-pc-windows-msvc
+Target: arm-none-unknown-eabi
Thread model: posix
InstalledDir: C:\bin\ArmClang\bin
```
-The paths must match with the installation locations.
+The paths and versions must match the installations selected in the current
+terminal.
+
+#### 38.5.4. Inventory, select, and remove compiler versions
+
+An extracted ZIP toolchain is usually not registered as an installed Windows
+application. Therefore no single Windows dialog lists every compiler. Inspect
+both command resolution and likely installation directories before changing
+anything.
+
+In PowerShell, list every matching executable visible through `Path`:
+
+```powershell
+Get-Command arm-none-eabi-gcc,gcc,clang -All -ErrorAction SilentlyContinue |
+ Format-Table Name,Source
+where.exe arm-none-eabi-gcc
+where.exe gcc
+where.exe clang
+
+arm-none-eabi-gcc -dumpmachine
+gcc -dumpmachine
+clang --version
+
+[Environment]::GetEnvironmentVariable('Path', 'User') -split ';'
+[Environment]::GetEnvironmentVariable('Path', 'Machine') -split ';'
+Get-ChildItem C:\bin -Directory
+```
+
+In Git Bash, use:
+
+```bash
+type -a arm-none-eabi-gcc
+type -a gcc
+type -a clang
+arm-none-eabi-gcc -dumpmachine
+gcc -dumpmachine
+clang --version
+printf '%s\n' "$PATH" | tr : '\n'
+```
+
+`where.exe` and `type -a` show all visible duplicates in search order. The first
+entry is executed. `winget list` and Windows **Installed apps** provide an
+additional list of registered installers, but they do not include manually
+extracted archives.
+
+Install compiler versions side by side and test a selection in a fresh terminal
+before modifying the persistent user `Path`. For example, select Arm GNU
+Toolchain 15.3.Rel1 for only the current PowerShell session:
+
+```powershell
+$savedPath = $env:Path
+$env:Path = 'C:\bin\ArmGNUToolchain-15.3.Rel1\bin;' + $savedPath
+
+where.exe arm-none-eabi-gcc
+arm-none-eabi-gcc -dumpmachine
+arm-none-eabi-gcc --version
+
+# Restore the session when the test is complete.
+$env:Path = $savedPath
+```
+
+The equivalent Git Bash commands are:
+
+```bash
+saved_path=$PATH
+export PATH="/c/bin/ArmGNUToolchain-15.3.Rel1/bin:$saved_path"
+hash -r
+
+type -a arm-none-eabi-gcc
+arm-none-eabi-gcc -dumpmachine
+arm-none-eabi-gcc --version
+
+# Restore the session when the test is complete.
+export PATH="$saved_path"
+hash -r
+```
+
+Use the same pattern for Clang or host GCC by prepending that version's `bin`
+directory. Start from a fresh terminal for each comparison so that a path from
+the previous test cannot leak into the next one. Shell command caches are
+cleared by `hash -r` in Git Bash. Do not put several directories containing the
+same compiler command permanently in `Path`; their order otherwise becomes an
+implicit and easily missed version switch.
-#### 37.5.3. Setup STM32
+After selecting ARM GCC, test the known serial baseline and then the desired
+parallelism from the repository root:
+
+```bash
+MAKE_JOBS=-j1 ./scripts/_testAll_12_GccExampleBuilds.sh
+MAKE_JOBS=-j4 ./scripts/_testAll_12_GccExampleBuilds.sh
+```
+
+Record `type -a arm-none-eabi-gcc`, both tool versions, `MAKE_JOBS`, and
+`temp/log/_testAll_12_GccExampleBuilds.log` with every comparison. Windows exit
+code `-1073741819` is `0xC0000005` (`STATUS_ACCESS_VIOLATION`): a compiler
+process crashed; it is not a normal C diagnostic. If `-j1` succeeds but a
+bounded parallel build crashes, preserve the evidence and compare another
+complete official Arm GNU Toolchain before concluding that source code or job
+count is the root cause.
+
+Remove an old compiler only after all of the following are true:
+
+1. A new terminal resolves every command to the intended replacement.
+2. The relevant ARM, CGO, and Clang tests pass with that replacement.
+3. Neither the user nor machine `Path`, a Makefile, `clang.cfg`, IDE setting, or
+ debugger configuration refers to the old directory.
+4. The old package name, version, source URL, and checksum have been recorded
+ so that the setup can be reproduced.
+
+Use **Installed apps** or the package manager that installed a registered
+toolchain. For a manually extracted archive, first remove its `Path` entry,
+open a new terminal, repeat the inventory commands, and only then delete that
+one version directory. Keep at least one complete `arm-none-eabi` toolchain;
+ARM Clang needs its target headers and libraries. Keep one Windows host compiler
+when CGO tests require it. A 32-bit `i686-w64-mingw32` WinLibs installation is
+normally unnecessary when Go and the required host builds are all 64-bit, but
+verify that no project depends on 32-bit output before removing it.
+
+#### 38.5.5. Setup STM32
Generate Base Project
@@ -7012,7 +8406,7 @@ This step is recommended before re-flashing with the J-Link onboard debugger sof
- Selecting the other option, would not allow to update with the SEGGER STLinkReflash tool.
- Close
-#### 37.5.4. Setup Onboard J-Link on NUCLEO (other ST evaluation boards too)
+#### 38.5.6. Setup Onboard J-Link on NUCLEO (other ST evaluation boards too)
(https://www.segger.com/products/debug-probes/j-link/models/other-j-links/st-link-on-board/)
@@ -7028,7 +8422,7 @@ Unfortunately this is not possible with **v3** onboard debugger hardware! But yo
- Re-Flash onboard debugger.
- You can undo this step anytime.
-#### 37.5.5. Setup VS-Code
+#### 38.5.7. Setup VS-Code
- Start VS Code
- Install Go rich language support if you want to use Go as well (not needed for ARM debugging).
@@ -7049,43 +8443,68 @@ Unfortunately this is not possible with **v3** onboard debugger hardware! But yo
- Download file `STM32L4x2.svd` from https://www.st.com/resource/en/svd/stm32l4_svd.zip (example)
- Installing the **Cortex Debug** extension allow you to debug the target code.
-### 37.6. Makefile with Clang too
+### 38.6. Makefile with Clang too
- After STM32 CubeMX code generation the Makefile was edited and spitted.
- STM32 CubeMX code generation accepts the edited Makefile, so re-generation is no issue.
- It modifies the settings according to the changes.
-### 37.7. Download Locations
+### 38.7. Download Locations
-#### 37.7.1. Clang
+#### 38.7.1. Clang
https://releases.llvm.org/download.html -> https://github.com/llvm/llvm-project/releases/ (example)
-#### 37.7.2. GCC
+The LLVM download supplies Clang and its builtin headers. It does not supply the target C runtime:
+
+- ARM builds additionally need the ARM GNU toolchain headers and libraries.
+- Windows host builds need either an MSVC/Windows SDK installation or a matching MinGW-w64 runtime.
+
+#### 38.7.2. GCC
+
+- ARM firmware: official
+ [Arm GNU Toolchain installation guide](https://learn.arm.com/install-guides/gcc/arm-gnu/);
+ select a Windows package ending in `arm-none-eabi`.
+- Windows host and CGO tests only: a MinGW-w64 host distribution such as
+ [WinLibs](https://winlibs.com/).
+
+These downloads are not interchangeable. Confirm the target with
+`-dumpmachine` after selecting the compiler.
-https://developer.arm.com/Tools%20and%20Software/GNU%20Toolchain -> https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads (example))
+### 38.8. Install Locations
-### 37.8. Install Locations
+Do not use locations containing spaces, like `C:\Program Files`. Take `C:\bin`
+for example. This avoids trouble caused by spaces inside path names.
-Do not use locations containing spaces, like `C:\Program Files`. Take `C:\bin` for example. This avoids trouble caused by spaces inside path names.
+Keep roles and versions distinguishable. For example, use
+`C:\bin\ArmGNUToolchain-15.3.Rel1` for `arm-none-eabi-gcc`,
+`C:\bin\LLVM-22.1.6` for Clang, and `C:\bin\WinLibs-GCC-16.1-x86_64`
+for a MinGW-w64 host compiler. A compiler executable in `Path` is not sufficient
+by itself; its matching standard headers, libraries, support programs, and DLLs
+must also remain in the same installation.
-### 37.9. Environment Variables
+### 38.9. Environment Variables
-Extend the path variable:
+Prepend only the currently selected compiler's `bin` directory to `Path`.
+Prefer a temporary terminal selection while comparing versions. If the
+selection is made persistent, place it before other directories containing the
+same command and verify it from a new terminal with `where.exe` or `type -a`.
+See
+[Inventory, select, and remove compiler versions](#inventory-select-and-remove-compiler-versions).
-- PATH += `C:\bin\ArmGNUToolchain\bin`
-- PATH += `C:\Program Files\SEGGER\JLink`. (may be C:\Program Files\SEGGER\JLink_V812a or similar)
+The debugger path can be added independently, for example
+`C:\Program Files\SEGGER\JLink` or a versioned `JLink_V...` directory.
-### 37.10. Build command
+### 38.10. Build command
- Clang: `make` or to get it faster `make -j`.
- GCC: `make GCC`.
-### 37.11. Run & Debug
+### 38.11. Run & Debug
- In terminal after `make` click Run&Debug & click green triangle.
-### 37.12. Logging
+### 38.12. Logging
- In terminal type `make log`. This executes the command in project folder:
@@ -7093,7 +8512,7 @@ Extend the path variable:
-### 37.13. Setting up a new project
+### 38.13. Setting up a new project
- Copy this project folder under a new name like `myAwesomeNewProject` or name it as you like.
- Make a temporary folder `myTemp` and generate with STM CubeMX the base project.
@@ -7109,7 +8528,7 @@ Extend the path variable:
(back to top)
-## 38. Example Projects without and with Trice Instrumentation
+## 39. Example Projects without and with Trice Instrumentation
| Project Name | Description |
|------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
@@ -7126,11 +8545,11 @@ Extend the path variable:
(back to top)
-### 38.1. Nucleo-F030R8 Examples
+### 39.1. Nucleo-F030R8 Examples
-#### 38.1.1. F030_bare
+#### 39.1.1. F030_bare
Folder: [../examples/F030_bare/](../examples/F030_bare/)
@@ -7218,7 +8637,7 @@ PS E:\repos\trice\examples\F030_bare>
__weak int _write(void) { return -1; }
```
-#### 38.1.2. F030_inst
+#### 39.1.2. F030_inst
Folder: [../examples/F030_inst/](../examples/F030_inst/)
@@ -7244,11 +8663,11 @@ This is a working example with deferred encrypted out over UART. By uncommenting
(back to top)
-### 38.2. Nucleo-G0B1 Examples
+### 39.2. Nucleo-G0B1 Examples
-#### 38.2.1. G0B1_bare
+#### 39.2.1. G0B1_bare
Folder: [../examples/G0B1_bare/](../examples/G0B1_bare/)
@@ -7263,7 +8682,7 @@ Folder: [../examples/G0B1_bare/](../examples/G0B1_bare/)
- See and adapt steps from [F030_bare](#f030bare).
- Then add/modify the files to reach this folder layot.
-#### 38.2.2. G0B1_inst
+#### 39.2.2. G0B1_inst
Folder: [../examples/G0B1_inst/](../examples/G0B1_inst/)
@@ -7282,11 +8701,11 @@ This is an example with direct out without framing over RTT and deferred out in
(back to top)
-### 38.3. Nucleo-L432KC Examples
+### 39.3. Nucleo-L432KC Examples
-#### 38.3.1. L432_bare
+#### 39.3.1. L432_bare
Folder: [../examples/L432_bare/](../examples/L432_bare/)
@@ -7297,7 +8716,7 @@ Folder: [../examples/L432_bare/](../examples/L432_bare/)
* It was then manually adapted additionally to Clang.
* It was additionally configured for FreeRTOS.
-#### 38.3.2. L432_inst
+#### 39.3.2. L432_inst
Folder: [../examples/L432_inst/](../examples/L432_inst/)
@@ -7473,9 +8892,9 @@ Receive signal 0. Exiting...
(back to top)
-## 39. Trice Generate
+## 40. Trice Generate
-### 39.1. Colors
+### 40.1. Colors
Support for finding a color style:
@@ -7483,7 +8902,7 @@ Support for finding a color style:
See [Check Alternatives](#check-alternatives) chapter.
-### 39.2. C-Code
+### 40.2. C-Code
If you intend to get the `trice log` functionality full or partially as a `tlog` C-Source and do not wish to parse the _til.json_ file, you can run `trice generate -tilH --tilC` to create a C-file with header as starting point. That could be interesting for compiling the log functionality into a small separate microcontroller board.
@@ -7520,7 +8939,7 @@ const triceFormatStringList_t triceFormatStringList[] = {
const unsigned triceFormatStringListElements = sizeof(triceFormatStringList) / sizeof(triceFormatStringList_t);
```
-### 39.3. C#-Code
+### 40.3. C#-Code
With `trice generate -tilCS` a starting point for a C-Sharp application is generated:
@@ -7567,7 +8986,7 @@ namespace TriceIDList;
}
```
-### 39.4. Generating a Trice ABC Function Pointer List
+### 40.4. Generating a Trice ABC Function Pointer List
Use `-abc=` to generate the target-specific ABC receive selection and table files:
@@ -7696,9 +9115,9 @@ This was an experimental implementation and will be removed in the future. Use `
(back to top)
-## 40. Testing the Trice Library C-Code for the Target
+## 41. Testing the Trice Library C-Code for the Target
-### 40.1. General info
+### 41.1. General info
This folder is per default named to `_test` to avoid VS Code slow down. Also, when running `go test ./...`, the tests in the `_test` folder are excluded, because they take a long time. Run `./scripts/testAll.sh` to include them.
@@ -7712,8 +9131,13 @@ The main aim of these tests is to automatic compile and run the target code in d
For the user it could be helpful to start with a `triceConfig.h`file from here and to adapt the Trice tool command line from the matching `cgo_test.go` if no close match in the `examples` folder was found.
-### 40.2. How to run the tests
+### 41.2. How to run the tests
+* Host compiler prerequisites:
+ * CGO and host-side target-code tests need a working host C compiler, not only a compiler executable in `PATH`.
+ * On Windows, TDM-GCC or another matching MinGW-w64 GCC installation can provide the host compiler and C runtime.
+ * Some Go regression tests execute every supported compiler found in `PATH`, including `clang`. If Clang is visible, verify it first with `printf '#include \n' | clang -std=c99 -fsyntax-only -x c -`.
+ * Keep `C_INCLUDE_PATH` unset globally so ARM cross-compiler headers do not leak into host and CGO builds.
* In `_trice` folder first execute `go clean -cache` after editing C-files. Cleaning the **Go** cache is recommended, because the CGO tests keep pre-compiled files and when editing C-files, this can lead to confusing results.
* Execute `./renewIDs_in_examples_and_test_folder.sh` after you edited files in the `./examples` or `_test` folder.
* To run direct Go tests from the repository root, use a repo-local Go cache if needed: `GOCACHE="$PWD/.gocache" go test ./...` on POSIX shells, or `$env:GOCACHE = "$PWD/.gocache"; go test ./...` in PowerShell. The `.gocache/` folder is ignored by Git.
@@ -7722,7 +9146,7 @@ For the user it could be helpful to start with a `triceConfig.h`file from here a
* `scripts/testAll.sh` creates its local helper artifacts inside the ignored `./temp/log` folder. The versioned `demoTIL.json` and `demoLI.json` files in the repository root stay available as example reference files. When `GOCACHE` is unset, `scripts/testAll.sh` also uses the ignored repo-local cache folder `./.gocache`.
* It is possible to start the tests individually, but for some the default `-timeout 30s` maybe too short.
-### 40.3. Tests Details
+### 41.3. Tests Details
All folders despite `testdata` are test folders and the name `tf` is used as a place holder for them in this document.
@@ -7744,14 +9168,14 @@ The whole process is relatively slow because of the often passed Go - C barrier,
The `testdata\cgoPackage.go` file contains a variable `testLines = n`, which limits the amount of performed trices for each test case to `n`. Changing this value will heavily influence the test duration. The value `-1` is reserved for testing all test lines.
-### 40.4. How to add new test cases
+### 41.4. How to add new test cases
- Choose a test folder similar to the intended test and copy it under a new descriptive name like `newTest`.
- Extend file `./renewIDs_in_examples_and_test_folder.sh` accordingly.
- Edit files `newTest/triceConfig.h` and `newTest/cgo_test.go` in a matching way.
- Run command `go test test/newTest/...`
-### 40.5. Test Internals
+### 41.5. Test Internals
The `./trice/_test/testdata/*.c` and `./trice/src/*.c` are compiled together with the actual cgot package into one single Trice test binary, resulting in as many test binaries as there are test folders. Calling its TestFunction(s) causes the activation of the Trice statement(s) inside *triceCheck.c*. The ususally into an embedded device compiled Trice code generates a few bytes according to the configuration into a buffer. These bytes are transmitted usually in real life over a (serial) port or RTT. In the tests here, this buffer is then read out by the Trice tool handler function according to the used CLI switches and processed to a log string using the *til.json* file. This string is then compared to the expected string for the activated line.
@@ -7771,7 +9195,7 @@ Some C-code lines contain Trice statements and comments starting with `//exp: `
Because each test runs a different configuration, all possible combinations are testable.
-### 40.6. Test Results
+### 41.6. Test Results
```bash
ms@DESKTOP-7POEGPB MINGW64 ~/repos/trice (main)
@@ -7918,11 +9342,11 @@ ms@DESKTOP-7POEGPB MINGW64 ~/repos/trice (main)
$
```
-### 40.7. Special tests
+### 41.7. Special tests
-### 40.8. Test Cases
+### 41.8. Test Cases
-#### 40.8.1. Folder Naming Convention
+#### 41.8.1. Folder Naming Convention
| Folder Name Part | Meaning |
|:----------------:|----------------------------------------------------------------------------------------------------------|
@@ -7947,15 +9371,15 @@ $
(back to top)
-## 41. Test Issues
+## 42. Test Issues
Test folders starting with `ERROR_` have issues. These cases are **usable** on the target. These tests fail for an unknown reason. Probably it is a test implementation issue. Especially when XTEA is used in one output but not in the other, the tests fail.
(back to top)
-## 42. Add-On Hints
+## 43. Add-On Hints
-### 42.1. Trice on LibOpenCM3
+### 43.1. Trice on LibOpenCM3
* This is a OpenCM3_STM32F411_Nucleo Contribution from [kraiskil](https://github.com/kraiskil).
* See also pull request [\#269](https://github.com/rokath/trice/pull/269).
@@ -7969,7 +9393,7 @@ This is an exampe using STM's [STM32F411 Nucleo](https://www.st.com/en/evaluatio
--> This code uses a legacy Trice version and needs adaptation!
```
-#### 42.1.1. Prerequisites
+#### 43.1.1. Prerequisites
- Suitable ARM GCC cross compiler (`arm-none-eabi-gcc`) found in your system's PATH
- GNU Make, or compatible
@@ -7977,7 +9401,7 @@ This is an exampe using STM's [STM32F411 Nucleo](https://www.st.com/en/evaluatio
This is e.g. the libopencm3 source directory, if you also built it in the source directory.
- OpenOCD
-#### 42.1.2. triceConfig.h
+#### 43.1.2. triceConfig.h
```C
/*! \file triceConfig.h
@@ -8212,7 +9636,7 @@ TRICE_INLINE void triceDisableTxEmptyInterrupt(void) {
```
-#### 42.1.3. main.c
+#### 43.1.3. main.c
```C
/*
@@ -8367,7 +9791,7 @@ int main(void)
```
-#### 42.1.4. nucleo-f411re.ld
+#### 43.1.4. nucleo-f411re.ld
```ld
/* Use the LibOpenCM3-provided defaults for the linker details.
@@ -8381,7 +9805,7 @@ MEMORY
INCLUDE cortex-m-generic.ld
```
-#### 42.1.5. Makefile
+#### 43.1.5. Makefile
```mak
# Makefile for compiling the Trice demo on LibOpenCM3
@@ -8435,13 +9859,13 @@ clean:
@rm -f *.elf til.json main.trice.c
```
-#### 42.1.6. Usage
+#### 43.1.6. Usage
- Run `make direct_mode.elf` to compile with Trice mode 0.
- Run `make flash_direct_mode` to program the board.
- Run trice: `trice l -p /dev/ttyACM0`.
-### 42.2. Get all project files containing Trice messages
+### 43.2. Get all project files containing Trice messages
We check the location information file. Every Trice is registered here.
@@ -8462,19 +9886,19 @@ cat demoLI.json | grep '"File":' | sort | uniq
"File": "examples/exampleData/triceLogDiagData.c",
```
-### 42.3. Building a trice library?
+### 43.3. Building a trice library?
The triceConfig.h is mandatory for the trice code. It controls which parts of the trice code are included. There is no big advantage having a trice library, because it would work only with unchanged settings in the project specific triceConfig.h. Once the trice source files are translated, their objects are rebuilt automatically and only when the triceConfig.h is changed. So only the linker has a bit less to do when it finds a trice library compared to a bunch of trice objects. But does that influence the build time heavily?
The triceConfig.h is the only part of the trice sources which should be modified by the users. It is ment to be a individual part of the user projects. The examples folder shows the usage.
-### 42.4. Possible Compiler Issue when using Trice macros without parameters on old compiler or with strict-C settings
+### 43.4. Possible Compiler Issue when using Trice macros without parameters on old compiler or with strict-C settings
If you encounter a compilation error on `trice( "hi");` for example, but not on `trice( "%u stars", 5 );`, this is probably caused by the way your compiler interprets variadic macros. Simply change to `trice0( "hi");` or change your compiler settings. See issue [\#279](https://github.com/rokath/trice/issues/279) for more details. If your project needs to be translated with strict-C settings for some reason, you have to use the `trice0` macros when no values exist for the Trice macros.
(back to top)
-## 43. Trice And Legacy User Code
+## 44. Trice And Legacy User Code
When it comes to use legacy sources together with Trice, there are several ways doing so, which do not exclude each other:
@@ -8483,7 +9907,7 @@ When it comes to use legacy sources together with Trice, there are several ways
* [Legacy User Code Option Print Buffer Wrapping and Framing](#legacy-user-code-option-print-buffer-wrapping-and-framing)
* [Legacy User Code Option Trice Aliases Adaptation](#legacy-user-code-option-trice-aliases-adaptation)
-### 43.1. Legacy User Code Option Separate Physical Output Channel
+### 44.1. Legacy User Code Option Separate Physical Output Channel
*Advantages:*
@@ -8500,7 +9924,7 @@ When it comes to use legacy sources together with Trice, there are several ways
* The legacy user code output drives a terminal app and the Trice output feeds the Trice binary data into the Trice tool.
-### 43.2. Legacy User Code Option Trice Adaptation Edits
+### 44.2. Legacy User Code Option Trice Adaptation Edits
*Advantages:*
@@ -8526,7 +9950,7 @@ When it comes to use legacy sources together with Trice, there are several ways
* All exising user prints are replaced with appropriate Trice macros according chapter [Trice Similarities and Differences to printf Usage](#trice-similarities-and-differences-to-printf-usage).
* When using 64-bit as default Trice bit width, more RAM is used compared to 32-bit, but in combination with the default [TCOBS](https://github.com/rokath/tcobs) compressing framing the transmitted Trice packets do not increase much compared to 32-bit width.
-### 43.3. Legacy User Code Option Print Buffer Wrapping and Framing
+### 44.3. Legacy User Code Option Print Buffer Wrapping and Framing
> **Trice >= v1.1 feature**, see also issue [\#550](https://github.com/rokath/trice/issues/550)
@@ -8547,7 +9971,7 @@ The Trice binary encoding uses states 1, 2, 3 of the 4 states, the 2 [Binary Enc
If the Trice library and the user print both write to the same output, an easy modification would be, to prepend the user print output with a 2-byte count as long its size is < 16383, so that the 2 most significant bits are zero. Additionally, the this way counted buffer needs the same buffer framing as the Trice binary data.
-### 43.4. Legacy User Code Option Trice Aliases Adaptation
+### 44.4. Legacy User Code Option Trice Aliases Adaptation
> **Trice >= v1.1 feature**, see also accepted pull requests [\#533](https://github.com/rokath/trice/pull/533) and [\#536](https://github.com/rokath/trice/pull/536)
@@ -8579,15 +10003,15 @@ Despite of these 2 CGO tests the real-world example [./examples/G0B1_inst](../ex
The following sub-chapters are mainly written by [@srgg](https://github.com/srgg) as accompanying documentation to its pull requests.
-#### 43.4.1. PR533 Doc
+#### 44.4.1. PR533 Doc
-#### 43.4.2. PR533 Summary
+#### 44.4.2. PR533 Summary
This PR introduces support for treating user-defined macros as aliases to trice and triceS within the Trice CLI toolchain. The goal is to enable project-specific logging macros to be processed just like built-in Trice macros — including ID generation, decoding, and binary format support — without requiring projects to directly call `trice()` or `triceS()` in their source code.
PR leverages the `-exclude` source feature added in [\#529](https://github.com/rokath/trice/pull/529).
-#### 43.4.3. PR533 Motivation
+#### 44.4.3. PR533 Motivation
Trice uses a source-scanning and ID generation approach, where the toolchain scans for `trice(...)` and `triceS(...)` calls, injects numeric trace IDs, and builds a mapping database. However, it currently only supports built-in(hardcoded) macros and allows only global on/off control via compile-time flags.
@@ -8597,11 +10021,11 @@ This makes it difficult to:
- Redirect trace/logging behavior to other backends (e.g., MicroSD, raw printf, no-op).
- Change behavior per module or configuration without losing Trice tooling support.
-#### 43.4.4. What This PR533 Adds
+#### 44.4.4. What This PR533 Adds
**CLI-level aliasing**: Developers can now declare custom macros to be treated as `trice` or `triceS` equivalents. These user-defined macros will be recognized during scanning, ID injection, and decoding.
-#### 43.4.5. PR533 Example
+#### 44.4.5. PR533 Example
*print_macro.h*:
@@ -8662,7 +10086,7 @@ trice clean -alias DEBUG_PRINT -salias DEBUG_PRINT_S -exclude ./print_macro.h -
Flash with `-DTRICE_OFF`.
-#### 43.4.6. PR536 Doc
+#### 44.4.6. PR536 Doc
##### What This PR536 Adds
@@ -8701,7 +10125,7 @@ Improving this would likely require Clang integration—adding complexity (e.g.,
This approach simplifies the logic and allows the parser to skip invalid or partial matches without aborting, enabling continued scanning of the file for valid constructs.
-#### 43.4.7. Alias Example Project
+#### 44.4.7. Alias Example Project
To use the Alias technique with `examples/G0B1_inst` the following adaptations were made:
@@ -8751,9 +10175,9 @@ To use the Alias technique with `examples/G0B1_inst` the following adaptations w
(back to top)
-## 44. Future Development
+## 45. Future Development
-### 44.1. Trice Log-level Control Specification Draft
+### 45.1. Trice Log-level Control Specification Draft
> Specification Draft
@@ -8761,7 +10185,7 @@ To use the Alias technique with `examples/G0B1_inst` the following adaptations w
--> IMPORTANT: No breaking changes!
```
-#### 44.1.1. What log levels exist in general, including exotic ones, and what is their exact weighting relative to each other?
+#### 45.1.1. What log levels exist in general, including exotic ones, and what is their exact weighting relative to each other?
🧭 **Basic principle**
@@ -8852,7 +10276,7 @@ Here’s a 7-level scheme, embedded-friendly yet compatible with syslog/log4j co
* [x] Backward-compatible (old log constants still valid)
* [x] Easily extendable (e.g., add NOTICE or ASSERT later)
-#### 44.1.2. Compile-time Log-level Control
+#### 45.1.2. Compile-time Log-level Control
In [Trice Structured Logging Compile-time Information](#trice-structured-logging-compile-time-information) we see, how `trice insert ...` could modify (temporarily) the source code. With an additional *insert* switch like `-loglevel` the shown example could get changed in this way:
@@ -8900,7 +10324,7 @@ That results in no code generation for `trice("info:The answer is %d.\n", 42);`
* The user is free to add its own log-levels.
* No run-time costs at all.
-#### 44.1.3. Run-time Log-level Control
+#### 45.1.3. Run-time Log-level Control
Trice logs are very light-weight and usually is no need for their run-time control. Nevertheless there could be a need for that. The very first we need, is a control channel to tell the target device about a changing log-level. See for example chapter [Stimulate target with a user command over UART](#stimulate-target-with-a-user-command-over-uart).
@@ -8925,7 +10349,7 @@ That implies a small Trice library extension, which gets active only with a `LOG
(back to top)
-### 44.2. Trice Structured Logging
+### 45.2. Trice Structured Logging
> **Specification Draft**
@@ -8933,23 +10357,23 @@ Structured logging, in contrast to unformatted logging, automatically adds compi
Trice is considerable already a bit as a (very limited) structured logger, if we look at the file and line insertion capability and the timestamp options. The following is about how Trice could get full structured logging capability without making a breaking change.
-#### 44.2.1. Trice Structured Logging Compile-time Information
+#### 45.2.1. Trice Structured Logging Compile-time Information
*file, line, function, compiler version, module, build time, firmware version, machine name, user name, locale, host OS version, log level, an (unstructured) format string, compiler flags, (locally) defined values...*
These data can be strings or numbers.
-#### 44.2.2. Trice Structured Logging Runtime Information
+#### 45.2.2. Trice Structured Logging Runtime Information
*uptime, timestamp, hw serial, task ID, stack depth, event count, core ID, position, variables values, parameter values ...*
In an initial approach we assume, these data do not contain runtime generated strings. If really needed, a derived hash is usable instead for now. Despite of this, runtime generated strings are an important feature and therefore Trice supports `triceS`, capable to transmit a single string up to 32KB long, and `triceS` relatives like `triceB`. We could add compile-time data (as inserted fixed strings) but runtime information can only get as an additional part of the runtime generated string into the structured log. This should be acceptable and we will deal with this later.
-#### 44.2.3. Trice Structured Logging Limitations and Special Cases
+#### 45.2.3. Trice Structured Logging Limitations and Special Cases
For performance reasons, Trice was designed to only transmit 0-12 (straight forward extendable) numbers of equal bit-width **OR** a single runtime generated string. Firstly we look at only "normal" Trice macros `trice`, `Trice`, `TRice` and exclude the special cases `triceS`, `TriceS`, `TRiceS`. Also we consider just trices without specified bit-width, assume 32-bit and exlude cases like `trice32_4` firstly.
-#### 44.2.4. A Trice Structured Logging Example
+#### 45.2.4. A Trice Structured Logging Example
User may have written inside *val.c*:
@@ -8981,7 +10405,7 @@ void doStuff( void ){
}
```
-#### 44.2.5. Trice Structured Logging CLI Switches and Variables
+#### 45.2.5. Trice Structured Logging CLI Switches and Variables
To achieve that, 2 structured logging CLI switches `-stf` and `-stv` on `trice insert` and `trice clean` are usable:
@@ -9002,7 +10426,7 @@ Additionally the Trice tool uses these internal variables (no bash variables!) a
| `$values` | `42` | The bare Trice statement values. |
| `$usr0` | `abc` \| ` ` \| `xyz` | A predefined string value with location dependent values (see below). |
-#### 44.2.6. Trice Structured Logging User Defined Values
+#### 45.2.6. Trice Structured Logging User Defined Values
This use case is not expected for most cases, but mentioned here to show the possibilities. Adding user specific values like `$usr0` can be done in this way:
@@ -9068,7 +10492,7 @@ The structured log output would be:
{...}
```
-#### 44.2.7. Trice Structured Logging CLI Switches Usage Options
+#### 45.2.7. Trice Structured Logging CLI Switches Usage Options
The in [A Trice Structured Logging Example](#a-trice-structured-logging-example) shown `trice insert` result is possible with
@@ -9179,7 +10603,7 @@ trice insert -stf="$STF" -stv="$STV"
trice clean -stf="$STF" -stv="$STV"
```
-#### 44.2.8. Trice Structured Logging Level Specific Configuration
+#### 45.2.8. Trice Structured Logging Level Specific Configuration
Configure the Trice Structured Logging selectively in a way, to provide as much helpful diagnostic info as possible on `ERROR` level for example. Example script:
@@ -9215,15 +10639,15 @@ source make.sh # build process
trice clean $STL ...
```
-#### 44.2.9. Trice Structured Logging Assert Macros (TODO)
+#### 45.2.9. Trice Structured Logging Assert Macros (TODO)
Configure `TriceAssert` like macros and this works also with the `-salias` switch.
(back to top)
-### 44.3. Improving the Trice Tool Internal Parser
+### 45.3. Improving the Trice Tool Internal Parser
-#### 44.3.1. Trice Internal Log Code Short Description
+#### 45.3.1. Trice Internal Log Code Short Description
##### Trice v1.0 Code
@@ -9260,7 +10684,7 @@ Configure `TriceAssert` like macros and this works also with the `-salias` switc
* The format string has no newline inside anymore, but has one at the end (usually) or not.
* The struct slice is cyclically passed to a line writer, which writes one line if it can find a format string ending with a newline.
-### 44.4. Using Trice on Servers
+### 45.4. Using Trice on Servers
* The internet traffic causes many megabytes logfiles, which need storage and are also often transferred by themselves.
* Of course it is possibe to compress them to save space and traffic.
@@ -9278,7 +10702,7 @@ Configure `TriceAssert` like macros and this works also with the `-salias` switc
(back to top)
-## 45. Working with the Trice Git Repository
+## 46. Working with the Trice Git Repository
| Action | Command |
|-------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
@@ -9314,7 +10738,7 @@ Configure `TriceAssert` like macros and this works also with the `-salias` switc
| Show all opencommit parameter | `oco config describe` |
| Show some config settings | `oco config get OCO_MODEL && oco config get OCO_PROMPT_MODULE && oco config get OCO_EMOJI` |
-### 45.1. Install `opencommit` on macOS
+### 46.1. Install `opencommit` on macOS
* * *
@@ -9406,7 +10830,7 @@ If OpenCommit says:
* * *
-### 45.2. Install `opencommit` on Windows
+### 46.2. Install `opencommit` on Windows
🧭 Overview
@@ -9504,9 +10928,9 @@ Generated commit message:
(back to top)
-## 46. Trice Maintenance
+## 47. Trice Maintenance
-### 46.1. Trice Project structure (Files and Folders)
+### 47.1. Trice Project structure (Files and Folders)
| Trice Root Folder File | Details |
|-------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------|
@@ -9553,7 +10977,7 @@ Generated commit message:
| [scripts/gitLogWithBranches.sh](../scripts/gitLogWithBranches.sh) | helper to get easy a history view |
| [go.mod](../go.mod) | Go modules file |
| [go.sum](../go.sum) | Go modules sums |
-| [index.md](../index.md) | Jekyll index site for README.md |
+| [index.md](../index.md) | Jekyll index site for README.md |
| [internal/](../internal) | Trice tool internal Go packages |
| [pkg/](../pkg) | Trice tool common Go packages |
| [scripts/_renewIDs_in_examples_and_refresh_test_folder.sh](../scripts/_renewIDs_in_examples_and_refresh_test_folder.sh) | renew all ID data |
@@ -9568,12 +10992,12 @@ Generated commit message:
(back to top)
-### 46.2. 📁 The .github Folder — Purpose and Contents
+### 47.2. 📁 The .github Folder — Purpose and Contents
GitHub automatically recognizes and uses everything contained inside the [.github/](../.github/) directory.
This folder defines how the project behaves on GitHub: issue templates, automated workflows, labels, code scanning, greetings, and release automation. Details:
-#### 46.2.1. 📁 `.github` Root
+#### 47.2.1. 📁 `.github` Root
It contains issue templates, labels, workflow automation, code scanning, linting, and the CI/CD release pipeline.
@@ -9868,7 +11292,7 @@ Labels will be applied automatically within seconds after opening or updating a
-->
-#### 46.2.2. 📂 `.github/workflows` — GitHub Actions Workflows
+#### 47.2.2. 📂 `.github/workflows` — GitHub Actions Workflows
The [.github/workflows/](../.github/workflows/) folder contains YAML descriptions for various actions, which will be triggered automatically on certain events or are started manually.
Every *yml* file in this directory defines an automated process. These processes run on GitHub’s servers (CI/CD).
@@ -9901,7 +11325,7 @@ These files are not executed; they simply inform GitHub how certain workflows be
| [superlinter.ym](../.github/workflows/superlinter.yml) | [GitHub Action superlinter.yml - Ensure Consistent YAML and Markdown Formatting](#github-action-superlinteryml---ensure-consistent-yaml-and-markdown-formatting) |
| [pages.yml](../.github/workflows/pages.yml) | [GitHub Action pages.yml - Creates The Trice GitHub Pages](#github-action-pagesyml---creates-the-trice-github-pages) |
-#### 46.2.3. GitHub Action clang-format.yml - Check C Code Formatting
+#### 47.2.3. GitHub Action clang-format.yml - Check C Code Formatting
* **Local Action (developer machine):** [./scripts/_format_c_code.sh](../scripts/_format_c_code.sh) - adjust all C files excluding [.clang-format-ignore](../.clang-format-ignore) according rule set in [.clang-format](../.clang-format).
> The file [./scripts/_format_c_code.sh](../scripts/_format_c_code.sh) is used to auto-format the Trice code.
@@ -9972,7 +11396,7 @@ These files are not executed; they simply inform GitHub how certain workflows be
> ```
* **GitHub Action (Continuous Integration):** [.github/workflows/clang-format.yml](../.github/workflows/clang-format.yml) does not format, it only checks.
-#### 46.2.4. GitHub Action codeql.yml - Static Code Analysis
+#### 47.2.4. GitHub Action codeql.yml - Static Code Analysis
* This workflow runs CodeQL, GitHub’s static code analysis tool. Purpose:
* scan the codebase for potential security vulnerabilities
@@ -9994,7 +11418,7 @@ These files are not executed; they simply inform GitHub how certain workflows be
* The results are uploaded to GitHub and appear under **Security → Code scanning alerts**.
* The “QL” is the same concept as SQL, but specialized for code analysis.
-#### 46.2.5. GitHub Action coverage.yml - Test Coverage and Coveralls Integration
+#### 47.2.5. GitHub Action coverage.yml - Test Coverage and Coveralls Integration
Trice uses Go’s built-in coverage tooling to measure how much of the Go codebase is exercised by automated tests.
@@ -10020,7 +11444,7 @@ The README displays the current coverage status for the default branch using the
This badge is updated whenever the CI workflow successfully uploads a new coverage report for the `master` branch.
-#### 46.2.6. GitHub Action go.yml - Building and Testing Go Code
+#### 47.2.6. GitHub Action go.yml - Building and Testing Go Code
* A workflow for building and testing Go code. It runs GitHub CodeQL for Go and C (cpp language pack), detecting security vulnerabilities and code issues.
* Typically includes steps such as:
@@ -10031,7 +11455,7 @@ This badge is updated whenever the CI workflow successfully uploads a new covera
* **Local Action (developer machine):** `go test ./...` or better `./scripts/testAll.sh full` (takes long)
* **GitHub Action (Continuous Integration):** [.github/workflows/go.yml](../.github/workflows/go.yml)
-#### 46.2.7. GitHub Action goreleaser.yml - Build & Pack Trice Distribution
+#### 47.2.7. GitHub Action goreleaser.yml - Build & Pack Trice Distribution
This workflow runs GoReleaser, the tool that builds and packages Trice for distribution.
* Purpose:
@@ -10048,14 +11472,14 @@ This workflow runs GoReleaser, the tool that builds and packages Trice for distr
See also [Trigger a **real** Trice release via CI (with `git tag`)](#trigger-a-real-trice-release-via-ci-with-git-tag)
-#### 46.2.8. GitHub Action label.yml - Automatic Labeling Rules
+#### 47.2.8. GitHub Action label.yml - Automatic Labeling Rules
* Defines automatic labeling rules for issues and PRs.
* For example, files in certain directories may automatically get category labels.
* This helps maintainers classify submissions more easily.
* **GitHub Action (Continuous Integration):** [.github/workflows/label.yml](../.github/workflows/label.yml)
-#### 46.2.9. GitHub Action link-check.yml - Broken Links Check
+#### 47.2.9. GitHub Action link-check.yml - Broken Links Check
* **Local Action (developer machine):** (deprechiated) `markdown-link-check ./docs/TriceUserManual.md`
* Ignore patterns: [.markdownlinkcheck.json](../.markdownlinkcheck.json)
@@ -10067,7 +11491,7 @@ See also [Trigger a **real** Trice release via CI (with `git tag`)](#trigger-a-r
* The workflow already provides `GITHUB_TOKEN` to the Lychee action for GitHub-hosted links
-#### 46.2.10. GitHub Action manual.ym - To Be Triggered Manually
+#### 47.2.10. GitHub Action manual.ym - To Be Triggered Manually
A workflow that is designed to be triggered manually (similar to _workflow_dispatch_ workflows). Common use cases:
* executing maintenance tasks
@@ -10075,20 +11499,20 @@ A workflow that is designed to be triggered manually (similar to _workflow_dispa
* testing workflow behavior without making a commit
* This workflow does not run automatically.
-#### 46.2.11. GitHub Action shellcheck.yml - Catching Common Bash Scripts Bugs
+#### 47.2.11. GitHub Action shellcheck.yml - Catching Common Bash Scripts Bugs
Runs ShellCheck on all *.sh files, catching common bugs in Bash scripts.
* **GitHub Action (Continuous Integration):** [.github/workflows/shellcheck.yml](../.github/workflows/shellcheck.yml)
-#### 46.2.12. GitHub Action shfmt.yml - Ensure Consistent Shell Scripts Formatting
+#### 47.2.12. GitHub Action shfmt.yml - Ensure Consistent Shell Scripts Formatting
Runs shfmt in diff mode on pull requests to ensure consistent formatting of shell scripts.
* **Local Action (developer machine):** `go test ./...` or better `./scripts/testAll.sh full` (takes long)
* **GitHub Action (Continuous Integration):** [.github/workflows/shfmt.yml](../.github/workflows/shfmt.yml)
-#### 46.2.13. GitHub Action stale.yml - Automatic Stale Issue Handling
+#### 47.2.13. GitHub Action stale.yml - Automatic Stale Issue Handling
Automates stale issue handling. Function:
* marks inactive issues or PRs as “stale”
@@ -10099,7 +11523,7 @@ Mark stale issues and pull requests
* **GitHub Action (Continuous Integration):** [.github/workflows/stale.yml](../.github/workflows/stale.yml)
-#### 46.2.14. GitHub Action superlinter.yml - Ensure Consistent YAML and Markdown Formatting
+#### 47.2.14. GitHub Action superlinter.yml - Ensure Consistent YAML and Markdown Formatting
* **Local Action (developer machine):** `markdownlint .`
* Runs GitHub Super Linter, a powerful linting suite. Purpose:
@@ -10110,13 +11534,13 @@ Mark stale issues and pull requests
* **GitHub Action (Continuous Integration):** [.github/workflows/superlinter.yml](../.github/workflows/superlinter.yml)
* Checks YAML and Markdown files
-#### 46.2.15. GitHub Action pages.yml - Creates The Trice GitHub Pages
+#### 47.2.15. GitHub Action pages.yml - Creates The Trice GitHub Pages
This workflow creates the Trice github pages avaliable under [rokath.github.io/trice/](https://rokath.github.io/trice/).
* **GitHub Action (Continuous Integration):** [.github/workflows/pages.yml](../.github/workflows/pages.yml)
-### 46.3. Trice User Manual Maintenance (or any `*.md` file)
+### 47.3. Trice User Manual Maintenance (or any `*.md` file)
* Recommended Tool: VS Code with some extensions:
* Markdown All in One (Yu Zhang)
@@ -10153,7 +11577,7 @@ This workflow creates the Trice github pages avaliable under [rokath.github.io/t
* Use Shift-Command-P "markdown PDF:export" to generate a PDF
* page break for PDF generation: ``
-### 46.4. Cleaning the Sources
+### 47.4. Cleaning the Sources
In GitHub are some Actions defined. Some of them get triggered on a `git push` and perform some checks. To get no fail, some scripts should run before committing:
@@ -10164,9 +11588,9 @@ In GitHub are some Actions defined. Some of them get triggered on a `git push` a
(back to top)
-## 47. Build and Release the Trice Tool
+## 48. Build and Release the Trice Tool
-### 47.1. Build Trice tool from Go sources
+### 48.1. Build Trice tool from Go sources
* Install [Go](https://go.dev/).
* Run:
@@ -10208,12 +11632,13 @@ In GitHub are some Actions defined. Some of them get triggered on a `git push` a
* `tlog` is a separate binary for the `trice log` runtime path. It accepts the log flags directly, for example `tlog -port HEX ...`, and release archives/packages ship it next to `trice`.
* Give each Trice binary its own name when using different images. Otherwise you always get what is found first in the **$PATH**.
* Use GoReleaser if you wish to create releases on your forked Trice repository.
- * On Windows you need to install [TDM-GCC](https://jmeubank.github.io/tdm-gcc/download/) if you wish to execute the CGO tests as well.
- * Take the 64-bit variant when Go is 64-bit or take the 32-bit variant when Go is 32-bit. If mixed installations work I doubt.
- * Recommendation: Minimal online installer.
- * GCC is only needed to test the target C-code on the host.
- * Make sure TDM-GCC is found first in the path, if you have several compilers installed.
- * Other gcc variants could work also but not tested.
+ * On Windows, install [TDM-GCC](https://jmeubank.github.io/tdm-gcc/download/) or another compatible MinGW-w64 GCC distribution if you wish to execute the CGO and host C-code tests.
+ * Match the compiler architecture to Go, normally 64-bit Go with a 64-bit host compiler.
+ * The minimal TDM-GCC online installation is sufficient for these host tests.
+ * Put the selected host compiler first in `PATH` when several GCC variants are installed.
+ * If `clang` is also in `PATH`, the regression tests can execute it in addition to GCC. Clang must therefore have a usable host C runtime configuration; merely finding `clang.exe` is not enough.
+ * A Windows Clang using the GNU target can reuse the installed MinGW-w64 runtime. A Clang using the MSVC target instead requires the Visual Studio C++ Build Tools and a Windows SDK.
+ * Verify each visible host compiler can include `string.h` before running `go test ./...`.
* Open a console inside the Trice directory, recommended is the git-bash, when using Windows.
* Tests:
@@ -10261,11 +11686,11 @@ Afterwards you should find an executable `trice` inside $GOPATH/bin/ and you can
After installing Go, in your home folder should exist a folder ./go/bin. Please add it to your path variable. OR: Copy the Trice binaries from there into a folder of your path after creating them with `go install ./cmd/trice/... ./cmd/tlog/...`. There is now a remommended script `./scripts/buildTriceTool.sh`. Using it, depending on your system you may need to enter `bash ./scripts/buildTriceTool.sh`, includes the actual Trice repository state into the Trice binaries, which is shown with `trice version` and `tlog --version` then - useful in case of issues.
-### 47.2. Prepare A Release
+### 48.2. Prepare A Release
Prerequisite: Installed `goreleaser`.
-#### 47.2.1. Check a GoReleaser Release before Publishing
+#### 48.2.1. Check a GoReleaser Release before Publishing
By cloning the Trice repo into an empty folder, you make sure no other files exist in the Trice folder.
@@ -10304,11 +11729,11 @@ What you should see:
If this **succeeds**, you’ve already tested 90% of what CI will do for a real release.
If it **fails**, fix the problem locally first (missing files, bad paths, etc.) – it would fail the same way in CI.
-### 47.3. Trigger a **real** Trice release via CI (with `git tag`)
+### 48.3. Trigger a **real** Trice release via CI (with `git tag`)
Letting CI build and publish an **official release**.
-#### 47.3.1. Make sure your workflow reacts to tags
+#### 48.3.1. Make sure your workflow reacts to tags
In [.github/workflows/goreleaser.yml](../.github/workflows/goreleaser.yml), you need `on: workflow_dispatch: push: tags: - 'v*'`.
@@ -10319,7 +11744,7 @@ Commit & push this change (if you haven’t already):
`git add .github/workflows/goreleaser.yml git commit -m "Configure GoReleaser workflow to run on tags" git push origin main`
-#### 47.3.2. Final checks before tagging
+#### 48.3.2. Final checks before tagging
In your local `trice` repo:
@@ -10332,7 +11757,7 @@ In your local `trice` repo:
If all of that is green, you’re ready to “bless” a version.
-#### 47.3.3. Choose a version and create a `git tag`
+#### 48.3.3. Choose a version and create a `git tag`
Decide on a version, for example:
@@ -10353,7 +11778,7 @@ You should see `v0.44.0` in the list.
> 💡 The **tag** is what GoReleaser uses as the release version (`.Tag`, `.Version`, etc.) in your `.goreleaser.yaml`.
> Your `ldflags` like `-X main.version={{ .Version }}` will use this.
-#### 47.3.4. Push the tag to GitHub (this triggers CI)
+#### 48.3.4. Push the tag to GitHub (this triggers CI)
Now push the tag:
@@ -10363,7 +11788,7 @@ This does **not** push all tags, only `v0.44.0`.
Because of your workflow’s `on: push: tags: 'v*'`, this **automatically starts** the GoReleaser workflow in GitHub Actions.
-#### 47.3.5. Watch the CI release run on GitHub
+#### 48.3.5. Watch the CI release run on GitHub
1. Open your browser and go to your repo:
@@ -10387,7 +11812,7 @@ Because of your workflow’s `on: push: tags: 'v*'`, this **automatically starts
If “Run GoReleaser” is green ✔, the CI release has succeeded.
-#### 47.3.6. Check the GitHub Release
+#### 48.3.6. Check the GitHub Release
Finally, verify the published release:
@@ -10405,13 +11830,13 @@ This is now your **official Trice release built by CI**.
(back to top)
-## 48. Ctrl-C robust use of `trice insert` and `trice clean`
+## 49. Ctrl-C robust use of `trice insert` and `trice clean`
`trice insert` and `trice clean` can modify many source files. This is useful for build workflows where IDs are inserted before compilation and removed afterwards, but it also means that interruption handling matters.
This chapter summarizes practical recommendations for robust build scripts and explains the background of GitHub issue #658.
-### 48.1. Background: GitHub issue #658
+### 49.1. Background: GitHub issue #658
GitHub issue #658 discusses the risk that `trice insert` or `trice clean` may be interrupted while source files are being modified.
@@ -10449,7 +11874,7 @@ This avoids cross-filesystem rename problems and ensures that the replacement is
The `-cache` mechanism can still be useful for recovery metadata, hashes, transaction manifests, and diagnostics, but it should not be required for the atomic replacement of source files.
-### 48.2. What Bash scripts can and cannot protect against
+### 49.2. What Bash scripts can and cannot protect against
A shell script can improve the workflow by making sure that `trice clean` is called after a successful `trice insert`, even when a build fails or the user presses Ctrl-C.
@@ -10469,7 +11894,7 @@ Trice implementation:
- Can provide transaction/recovery diagnostics.
```
-### 48.3. Recommended build-script ownership rule
+### 49.3. Recommended build-script ownership rule
Only one script level should own the full sequence:
@@ -10511,7 +11936,7 @@ inner build script:
Do not mix both models unintentionally.
-### 48.4. Recommended Bash pattern
+### 49.4. Recommended Bash pattern
The following pattern is a simplified example. It keeps cleanup in one place and makes the normal success path use the same cleanup logic as error and interruption paths.
@@ -10584,7 +12009,7 @@ Important points in this pattern:
- the normal success path and abnormal paths use the same cleanup helper.
```
-### 48.5. Preserve the build exit code
+### 49.5. Preserve the build exit code
If the build command may fail and the script still needs to run cleanup afterwards, do not let `set -e` abort before the exit code is captured.
@@ -10607,7 +12032,7 @@ exit "${make_status}"
This keeps the original build result unless cleanup itself fails after an otherwise successful build.
-### 48.6. Be careful with current working directory changes
+### 49.6. Be careful with current working directory changes
A subtle problem can occur when a cleanup helper changes the current working directory and does not change it back.
@@ -10646,7 +12071,7 @@ cd "${SCRIPT_DIR}"
make clean
```
-### 48.7. Prefer Makefile `clean` targets when available
+### 49.7. Prefer Makefile `clean` targets when available
If an example Makefile provides a clean target, prefer:
@@ -10671,7 +12096,7 @@ clean:
A direct `rm -rf out out.gcc` can be used as a fallback, but it is less precise.
-### 48.8. Example scripts
+### 49.8. Example scripts
The following scripts are useful examples for Ctrl-C robust wrapping of `trice insert` and `trice clean`.
@@ -10716,7 +12141,7 @@ G0B1_inst_build_fixed_cwd_cleanup.sh
These scripts are examples for build-wrapper robustness. They do not replace the need for atomic file write-back inside Trice itself.
-### 48.9. Summary
+### 49.9. Summary
Recommended practical rules:
@@ -10739,7 +12164,7 @@ A source file is never left partially written after Ctrl-C, SIGTERM, crash, or w
(back to top)
-## 49. Scratch Pad
+## 50. Scratch Pad
*) The TriceABC examples uses COBS framing and acts without encryption and it is not simple configurable because its main aim is to show just the TriceABC technique in action.
diff --git a/docs/ref/trice-help-all.txt b/docs/ref/trice-help-all.txt
index a44371e08..3b1c91bf6 100644
--- a/docs/ref/trice-help-all.txt
+++ b/docs/ref/trice-help-all.txt
@@ -40,6 +40,8 @@ sub-command 'h|help': For command line usage.
Show a|add specific help.
-all
Show all help.
+ -bind
+ Show bind specific help.
-c Show c|clean specific help.
-clean
Show c|clean specific help.
@@ -186,10 +188,8 @@ sub-command 'l|log': For displaying trice logs coming from port. With "trice log
(default "li.json")
-liFmt string
Target location format string at start of each line, if target location existent (configured). Use "off" or "none" to suppress existing target location. If several trices form a log line only the location of first trice ist displayed. (default "info:%21s%6d ")
- -liPath string
- How to display location information paths: legacy, base, relative or full. Legacy displays File exactly as stored. Relative uses Path when available. Full resolves Path against -liRoot. (default "legacy")
- -liRoot string
- Root directory used to resolve relative location paths for -liPath full. The default is the directory containing li.json.
+ -liMaxDirs int
+ Maximum number of parent directories displayed before the source filename. The filename is always shown; leading ".." components are omitted.
-locationInformation string
The trice location information file.
The specified JSON file is needed to display the location information for each ID during runtime.
@@ -339,9 +339,8 @@ sub-command 'a|add': Use for adding library source files containing already tric
-li string
Short for '-locationInformation'.
(default "li.json")
- -liPath string
- How to store location information paths inside li.json: base, relative, path/relative or full. When relative is given, the location information is stored relative to the current location. If a path is given additionally, like ../../relative the path is added to the location information.
- (default "base")
+ -liRoot string
+ Base directory for File paths stored in li.json. Each File path is stored relative to this directory. A relative -liRoot value is resolved from the current working directory. Examples: when running in project/build, "-liRoot .." stores ../src/main.c as src/main.c; without -liRoot, the directory containing li.json is used as the base.
-locationInformation string
The trice location information file.
The specified JSON file is needed to display the location information for each ID during runtime.
@@ -496,9 +495,8 @@ sub-command 'i|insert': For updating til.json and inserting IDs into source file
-li string
Short for '-locationInformation'.
(default "li.json")
- -liPath string
- How to store location information paths inside li.json: base, relative, path/relative or full. When relative is given, the location information is stored relative to the current location. If a path is given additionally, like ../../relative the path is added to the location information.
- (default "base")
+ -liRoot string
+ Base directory for File paths stored in li.json. Each File path is stored relative to this directory. A relative -liRoot value is resolved from the current working directory. Examples: when running in project/build, "-liRoot .." stores ../src/main.c as src/main.c; without -liRoot, the directory containing li.json is used as the base.
-locationInformation string
The trice location information file.
The specified JSON file is needed to display the location information for each ID during runtime.
@@ -544,6 +542,104 @@ sub-command 'i|insert': For updating til.json and inserting IDs into source file
For example "trice log -p JLINK -v" is the same as "trice log -p JLINK" but with more descriptive output what could be helpful during setup.
This is a bool switch. It has no parameters. Its default value is false. If the switch is applied its value is true. You can also set it explicit: =false or =true.
-w Short for (white)spaceInsideParenthesis or "wide".
+sub-command 'b|bind': Generate stable Trice ID sidecars while keeping bind-owned source calls ID-free.
+# "trice bind" scans C/C++ source and headers, updates til.json and li.json with insert-compatible semantics,
+# adds a file-local sidecar include where it is safe, and writes generated headers below -bindDir.
+# Insert-owned files remain unchanged; mixed explicit and bind-style sites in one file are rejected.
+# Example: 'trice bind -src ./src -bindDir ./build/triceIDs'
+ -IDMax value
+ Upper end of ID range for normal trices. (default 7999)
+ -IDMethod string
+ Search method for new IDs in range. Options are 'upward', 'downward', and 'random'. (default "random")
+ -IDMin value
+ Lower end of ID range for normal trices. (default 1000)
+ -IDRange value
+ This allows tag specific routing in the target code.
+ This switch has one parameter string and is a multi-flag switch. It can be used for each Trice tag. Example:
+ Assign error tag Trice IDs in the range 10-99 and msg tag IDs in the range 100-199:
+ "trice bind -IDRange err:10,99 -IDRange msg:100,999" (overlapping ID ranges are forbidden)
+ All other trice tags get IDs from the -IDMin, -IDMax range. The used -IDMethod is the same for all tags.
+ For example you can have all trice messages in direct mode over RTT but err & msg tagged trices additionally
+ in deferred mode over a serial port and, if you need, store all error tagged Trice logs additionally in the Flash memory.
+ You need to configure the target code in your triceConfig.h accordingly (search trice code for MIN_ID):
+ Use "#define TRICE_UARTA_MIN_ID 10" and "#define TRICE_UARTA_MAX_ID 999" for example. (default "")
+ -a value
+ Short for trice() aliases.
+ -alias value
+ Additional macro names to treat like trice().
+ This flag can be specified multiple times to add more aliases. Each provided name will be
+ recognized as equivalent to a trice() call. (default none)
+ (default none)
+ -bindDir string
+ Output directory for generated Trice bind sidecar headers. (default "./build/triceIDs")
+ -defaultStampSize int
+ Default stamp size for uppercase TRICE macros without id(0), Id(0), or ID(0). Valid values are 0, 16, or 32.
+ -dry-run
+ No changes applied but output shows what would happen.
+ "trice bind -dry-run" will change nothing but show changes it would perform without the "-dry-run" switch.
+ This is a bool switch. It has no parameters. Its default value is false. If the switch is applied its value is true. You can also set it explicit: =false or =true.
+ -e value
+ Short for exclude.
+ -exclude value
+ Exclude dir or file, It has one parameter. Not usable in the form "-exclude *.c".
+ This is a multi-flag switch. It can be used several times for directories and also for files.
+ Example: "trice bind -v -src ./_test/ -exclude _test/src/trice.h" will scan all C|C++ header and
+ source code files inside directory ./_test EXCEPT file trice.h inside _test/src directory.
+ (default none)
+ -i string
+ Short for '-idlist'.
+ (default "til.json")
+ -idlist string
+ The trice ID list file.
+ The specified JSON file is needed to display the ID coded trices during runtime and should be under version control.
+ (default "til.json")
+ -li string
+ Short for '-locationInformation'.
+ (default "li.json")
+ -liRoot string
+ Base directory for File paths stored in li.json. Each File path is stored relative to this directory. A relative -liRoot value is resolved from the current working directory. Examples: when running in project/build, "-liRoot .." stores ../src/main.c as src/main.c; without -liRoot, the directory containing li.json is used as the base.
+ -locationInformation string
+ The trice location information file.
+ The specified JSON file is needed to display the location information for each ID during runtime.
+ It is regenerated on each add, clean, or insert trice run. When trice log finds a location information file, it is used for
+ log output with location information. Otherwise no location information is displayed, what usually is wanted in the field.
+ This way the newest til.json can be used also with legacy firmware, but the li.json must match the current firmware version.
+ With "off" or "none" suppress the display or generation of the location information. See -tLocFmt for formatting.
+ (default "li.json")
+ -s value
+ Short for src.
+ -sa value
+ Short for triceS() aliases.
+ -salias value
+ Additional macro names to treat like triceS().
+ This flag can be specified multiple times to add more aliases. Each provided name will be
+ recognized as equivalent to a triceS() call.
+ (default none)
+ -skip
+ short for skipAdditionalChecks
+ -skipAdditionalChecks
+ No parameter count checks, when this flag is true.
+ This reduces the processing time by a few percent but does not detect wrong parameter counts, anyway the compiler would complain.
+ Add this flag for script speed-up, when not editing the sources. Alternatively consider the -cache switch.
+ This is a bool switch. It has no parameters. Its default value is false. If the switch is applied its value is true. You can also set it explicit: =false or =true.
+ -src value
+ Source dir or file, It has one parameter. Not usable in the form "-src *.c".
+ This is a multi-flag switch. It can be used several times for directories and also for files.
+ Example: "trice bind -dry-run -v -src ./_test/ -src pkg/src/trice.h" will scan all C|C++ header and
+ source code files inside directory ./_test and scan also file trice.h inside pkg/src directory.
+ Without the "-dry-run" switch it would create|extend a list file til.json in the current directory.
+ (default "./")
+ -til string
+ Short for '-idlist'.
+ (default "til.json")
+ -ulabel value
+ Additional user channel/tag(s) to display. This is a multi-flag switch. It can be used several times with a colon separated list of channel descriptors.
+ Example: "-ulabel this:that -ulabel also" results in adding "also", "this" and "that" as message tags. These user labels are added at the end of emitter.Tags. See also "-logLevel".
+ -v short for verbose
+ -verbose
+ Gives more informal output if used. Can be helpful during setup.
+ For example "trice log -p JLINK -v" is the same as "trice log -p JLINK" but with more descriptive output what could be helpful during setup.
+ This is a bool switch. It has no parameters. Its default value is false. If the switch is applied its value is true. You can also set it explicit: =false or =true.
sub-command 'c|clean': Set all [id|Id|ID](n) inside source tree dir to [id|Id|ID](0). Remove all iD(n).
# All in source code found IDs are added to til.json if not already there. Inside til.json differently used IDs are
# reported and just cleaned inside the source files. The existing li.json is updated/extended.
@@ -584,9 +680,8 @@ sub-command 'c|clean': Set all [id|Id|ID](n) inside source tree dir to [id|Id|ID
-li string
Short for '-locationInformation'.
(default "li.json")
- -liPath string
- How to store location information paths inside li.json: base, relative, path/relative or full. When relative is given, the location information is stored relative to the current location. If a path is given additionally, like ../../relative the path is added to the location information.
- (default "base")
+ -liRoot string
+ Base directory for File paths stored in li.json. Each File path is stored relative to this directory. A relative -liRoot value is resolved from the current working directory. Examples: when running in project/build, "-liRoot .." stores ../src/main.c as src/main.c; without -liRoot, the directory containing li.json is used as the base.
-locationInformation string
The trice location information file.
The specified JSON file is needed to display the location information for each ID during runtime.
diff --git a/docs/scratchPad/TriceBind/PoC_bind/app/module.c b/docs/scratchPad/TriceBind/PoC_bind/app/module.c
deleted file mode 100644
index bcc2692bc..000000000
--- a/docs/scratchPad/TriceBind/PoC_bind/app/module.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "trice.h"
-#include "module.c.triceIDs.h"
-
-int main(void) {
- if (TriceInit() != 0) {
- return 1;
- }
-
- trice("msg:Hello trice bind world\n");
-
- TriceClose();
- return 0;
-}
diff --git a/docs/scratchPad/TriceBind/PoC_bind/trice/src/trice.c b/docs/scratchPad/TriceBind/PoC_bind/trice/src/trice.c
deleted file mode 100644
index b5a9f0051..000000000
--- a/docs/scratchPad/TriceBind/PoC_bind/trice/src/trice.c
+++ /dev/null
@@ -1,40 +0,0 @@
-// SPDX-License-Identifier: MIT
-// Minimal host-file backend producing an unframed, little-endian Trice record.
-#include "trice.h"
-
-#include
-
-static FILE* triceOutput;
-
-int TriceInit(void) {
- triceOutput = fopen(TRICE_OUTPUT_FILE, "wb");
- return triceOutput == NULL ? -1 : 0;
-}
-
-void TriceClose(void) {
- if (triceOutput != NULL) {
- fclose(triceOutput);
- triceOutput = NULL;
- }
-}
-
-void trice32fn_0(uint16_t tid) {
- // Equivalent to the current no-stamp/no-value trice32m_0 record:
- // bits 15:14 = 01 (no stamp), bits 13:0 = ID,
- // byte 2 = cycle marker, byte 3 = payload byte count (zero).
- const uint32_t record =
- ((uint32_t)0u << 24) |
- ((uint32_t)TRICE_CYCLE << 16) |
- (uint32_t)(0x4000u | (tid & 0x3FFFu));
-
- const unsigned char bytes[4] = {
- (unsigned char)(record),
- (unsigned char)(record >> 8),
- (unsigned char)(record >> 16),
- (unsigned char)(record >> 24),
- };
-
- if (triceOutput != NULL) {
- (void)fwrite(bytes, 1, sizeof bytes, triceOutput);
- }
-}
diff --git a/docs/scratchPad/Trice_IDs_ohne_Sourcecode_Patching.md b/docs/scratchPad/Trice_IDs_ohne_Sourcecode_Patching.md
deleted file mode 100644
index bc8ca2e98..000000000
--- a/docs/scratchPad/Trice_IDs_ohne_Sourcecode_Patching.md
+++ /dev/null
@@ -1,1130 +0,0 @@
-# Trice-IDs ohne Sourcecode-Patching
-
-## Analyse von TreeLog und mögliche Hybridarchitekturen
-
-**Stand:** 23. Juli 2026
-**Status:** Architekturüberlegung, noch kein Implementierungsentwurf
-**Ziel:** Einen tragfähigen Ansatz finden, der TreeLogs unveränderten Sourcecode mit Trices stabilen, policygesteuerten IDs und langfristiger Decodierbarkeit verbindet.
-
----
-
-## 1. Zusammenfassung
-
-Trice und TreeLog lösen zwei verschiedene Teilprobleme jeweils besonders gut:
-
-- **Trice** verwaltet stabile numerische IDs, eine ID-Policy und eine kumulative `til.json`. Die ID wird mit `trice insert` als Konstante in den Sourcecode geschrieben und dadurch vom Compiler unmittelbar in das Image übernommen.
-- **TreeLog** verändert den Sourcecode nicht. Jede Logstelle hinterlegt Metadaten in ELF-Sektionen; der Linker ordnet die Logstellen eindeutig an. Aus dieser buildlokalen Anordnung wird die gesendete ID abgeleitet.
-
-Der zentrale Nachteil von Trice ist der `insert`/`clean`-Workflow beziehungsweise die sichtbare Instrumentierung des Sourcecodes. Der zentrale Nachteil von TreeLog ist, dass seine IDs vom konkreten Linkerlayout abhängen und deshalb zwischen Builds nicht stabil sind. Für die spätere Decodierung muss daher das zum Firmware-Build passende ELF oder ein daraus exportiertes Dictionary verfügbar sein.
-
-Die aussichtsreichste Verbindung beider Welten besteht darin, die bisher gekoppelte Funktion von `trice insert` aufzuteilen:
-
-1. **ID-Allocator:** Erkennt eine Logstelle und ordnet ihr eine stabile, policygerechte ID zu.
-2. **ID-Binder:** Bringt diese ID ohne Änderung der Originalquellen in den erzeugten Targetcode.
-
-Dafür erscheinen drei Varianten besonders relevant:
-
-1. **Instrumentierte Build-Kopie der Quellen:** portabel, risikoarm und schnell realisierbar.
-
->DISKUSSION: START
-
-Vermutlich bringt das Seiteneffekte beim Debuggen, da nicht die Originalquellen compiliert werden.
-
-Im Prinzip ist das mit dem Trice Cache Mechanismus bereits vorhanden und vermutlich besser gelöst, als eine Kopie zu compilieren, oder?
-
->DISKUSSION: ENDE
-
-2. **Generierter, übersetzungseinheitsspezifischer ID-Header:** Originalquellen bleiben unverändert; die ID ist weiterhin eine Compile-Time-Konstante.
-
->DISKUSSION: START
-
-Du meinst keine generierte C-Headerdatei mit `#define TRICE_ID_FILE_LINE_pFmt 12345u`, denn die wäre ja Compiler-unspezifisch, oder? pFmt wäre dann ein generierter Makroname-kompatibler String. Perfekt wäre, wenn man diese Infos in die jeweilige Makro-Definition hineinbekäme. Trice Library Code temporär zu patchen ist vielleicht eher akzeptabel. Oder gibt es im Compiler mittlerweile Hooks, die User-Code auführen, wenn ein bestmmtes Makro angefasst wird?
-
-Was mir noch einfällt: Eine temporäre Schattendatei hinter jedem C-File, die beim Compilieren/Linken mitbenutzt wird.
-
-Bitte führe das genauer aus was du eigentlich gemeint hast oder verweise auf die entsprechende Textstelle.
-
-Noch wichiger: Spinne meine hier geäußerten Gedanken weiter im Hinblick auf aktuelel Entwicklungen und Machbarkeit.
-
->DISKUSSION: ENDE
-
-3. **ELF-/Linker-Binder:** Logstellen werden in Objektdateien erkannt; stabile IDs werden vor dem finalen Link direkt als Symbolwerte oder Relocations gebunden. Das ist strategisch am interessantesten und unterstützt grundsätzlich auch vorkompilierte Bibliotheken.
-
-Eine Runtime-Mapping-Tabelle ist ein robuster Fallback, verursacht aber Flashbedarf und einen zusätzlichen Tabellenzugriff pro Logaufruf.
-
----
-
-## 2. TreeLog: Einordnung und Funktionsprinzip
-
-[TreeLog](https://github.com/hefanbo/treelog) ist ein eigenständiges, auf Trice aufbauendes Projekt für tokenisiertes Logging in C. TreeLog verwendet Trice für wesentliche Teile des Drahtprotokolls, der Pufferung, des Transports und der Host-Decodierung. Die eigene Kernidee ist die linkerbasierte Erzeugung der Log-IDs.
-
-Für jede Logstelle erzeugen die Makros Metadaten, unter anderem:
-
-- Trice- beziehungsweise TreeLog-Typ,
-- Timestamp-Variante,
-- Formatstring,
-- Gruppe und Log-Level,
-- Quelldatei und Zeilennummer.
-
-Diese Metadaten werden in speziellen ELF-Sektionen abgelegt. Zusätzlich enthält `.trlog.index` ein Array von Zeigern auf die Metadateneinträge. Die Position eines Zeigers in diesem Array ist innerhalb eines Builds eindeutig.
-
-TreeLog verändert dafür auch das Trice-TID-Layout:
-
-```text
-Trice:
-
-15 14 13 0
-+--------------+--------------------------------+
-| StampType | ID |
-+--------------+--------------------------------+
- 2 Bit 14 Bit
-```
-
-```text
-TreeLog:
-
-15 2 1 0
-+--------------------------------+--------------+
-| ID | StampType |
-+--------------------------------+--------------+
- 14 Bit 2 Bit
-```
-
-Auf einer 32-Bit-Architektur sind die Zeigerelemente in `.trlog.index` vier Byte groß und ausgerichtet. Ihre Adressen enden daher auf zwei Nullbits:
-
-```text
-Adresse des Indexelements = Index << 2
-```
-
-TreeLog kann die unteren 16 Adressbits direkt mit dem Timestamp-Typ verknüpfen:
-
-```c
-tid = addr16 | stampType;
-```
-
-Der Decoder gewinnt daraus:
-
-```c
-stampType = tid & 3;
-id = tid >> 2;
-```
-
-Die Bitverschiebung ist somit keine allgemeine Verbesserung des Trice-Protokolls. Sie ist eine gezielte Anpassung an die linkerbasierte TreeLog-ID.
-
-Weitere technische Details finden sich im [TreeLog Developer Manual](https://github.com/hefanbo/treelog/blob/master/docs/DeveloperManual.adoc). Der zugehörige angepasste Trice-Fork ist im [Vergleich `main...hefanbo:treelog`](https://github.com/rokath/trice/compare/main...hefanbo%3Atrice%3Atreelog) beziehungsweise im Commit [„adapt for TreeLog integration“](https://github.com/hefanbo/trice/commit/d6b7fb1) sichtbar.
-
-### 2.1 Wichtige Präzisierung zur Build-Abhängigkeit
-
-Die Firmware benötigt zur Laufzeit nicht das ELF oder Dictionary. Der Linker hat die buildlokale ID bereits in den Maschinencode eingebracht.
-
-Das passende Artefakt wird auf der **Hostseite zur Decodierung** benötigt:
-
-- entweder das konkrete Firmware-ELF,
-- oder die daraus exportierte `trlog_dict.json`.
-
-TreeLog dokumentiert ausdrücklich, dass das Hinzufügen, Entfernen oder Umsortieren von Logstellen die Positionen in `.trlog.index` und damit die IDs verändern kann. Die `trlog_dict.json` ist deshalb genauso buildspezifisch wie das ELF, aus dem sie erzeugt wurde.
-
----
-
-## 3. Die zwei voneinander zu trennenden Fragen
-
-Die bisherige Diskussion wird klarer, wenn zwei Aufgaben strikt getrennt betrachtet werden.
-
-### 3.1 Wie wird einer Logstelle eine stabile ID zugeordnet?
-
-Das ist ein Problem der **Identität und Verwaltung**.
-
-Trice löst es heute mit:
-
-- `trice insert`,
-- `til.json`,
-- `li.json`,
-- ID-Bereichen und Vergabepolicy,
-- Wiedererkennung bereits bekannter Logstellen.
-
-Beispiel:
-
-```c
-trice("temperature=%d\n", temperature);
-```
-
-wird logisch der stabilen ID `4711` zugeordnet.
-
-Die Zuordnung muss persistent gespeichert werden:
-
-```text
-logische Logstelle -> stabile numerische ID
-```
-
-Ohne einen solchen persistenten Zustand sind gleichzeitig
-
-- stabile IDs,
-- Kollisionsfreiheit,
-- eine kontrollierte ID-Policy und
-- langfristige Decodierbarkeit
-
-nicht zuverlässig möglich.
-
-Die persistente Zuordnung muss aber nicht im Sourcecode liegen. Sie kann weiterhin in einer Registry wie `til.json`/`li.json` oder in einem neuen Datenmodell gespeichert werden.
-
-### 3.2 Wie gelangt diese ID in den Targetcode?
-
-Das ist ein Problem der **Bindung beziehungsweise Einbettung**.
-
-Heute erledigt `trice insert` dies, indem es die ID in den Sourcecode schreibt:
-
-```c
-trice(iD(4711), "temperature=%d\n", temperature);
-```
-
-Der Compiler sieht eine Konstante und übernimmt sie effizient in den Maschinencode.
-
-TreeLog bindet dagegen eine Linkeradresse in den Code ein. Diese Adresse repräsentiert nur die buildlokale Position der Logstelle.
-
-Die gesuchte Hybridlösung soll Folgendes erreichen:
-
-```text
-Originalsource ohne numerische ID
- +
-externe stabile ID-Zuordnung
- +
-automatische Bindung beim Build
- =
-Targetcode mit stabiler Trice-ID
-```
-
----
-
-## 4. Anforderungen an eine tragfähige Hybridlösung
-
-Ein überzeugender Ansatz sollte möglichst viele der folgenden Eigenschaften erfüllen:
-
-1. **Keine Änderung der Originalquellen**
- - kein sichtbares `insert`,
- - kein nachträgliches `clean`,
- - keine ID-bedingten Git-Diffs.
-
-2. **Stabile IDs**
- - Verschieben einer unveränderten Logstelle soll ihre ID nicht ändern.
- - Das Hinzufügen anderer Logstellen soll vorhandene IDs nicht beeinflussen.
-
-3. **ID-Policy**
- - definierbare ID-Bereiche,
- - reservierte Bereiche,
- - Vergabe nach Komponenten, Gruppen oder Projekten,
- - kontrollierte Behandlung externer Bibliotheken.
-
-4. **Langfristige Decodierbarkeit**
- - alte Aufzeichnungen sollen mit einer kumulativen ID-Liste decodierbar bleiben,
- - kein zwingendes buildspezifisches ELF für jede Aufzeichnung.
-
-5. **Geringe Targetkosten**
- - ID möglichst als Compile-/Link-Time-Konstante,
- - kein String-Lookup auf dem Target,
- - möglichst kein zusätzlicher Flashbedarf und kein zusätzlicher Tabellenzugriff.
-
-6. **Gute Buildintegration**
- - deterministisch,
- - CI-tauglich,
- - klare Fehler bei Mehrdeutigkeiten,
- - reproduzierbare Artefakte.
-
-7. **Perspektivisch Binärbibliotheken**
- - Logstellen aus `.a`-Bibliotheken sollen ohne vorher ausgehandelte numerische ID-Bereiche eingebunden werden können.
-
-8. **Beibehaltung des Trice-Drahtformats**
- - eine inkompatible Veränderung des TID-Layouts soll vermieden werden.
-
-Keine einzelne Variante erfüllt alle Punkte gleich gut. Daher ist eine gestufte Architektur sinnvoll.
-
----
-
-## 5. Stabile Identität einer Logstelle
-
-Bevor eine ID gebunden werden kann, muss das Werkzeug entscheiden, ob eine gefundene Logstelle neu oder bereits bekannt ist.
-
-### 5.1 Der Positionsindex ist keine langfristige Identität
-
-Eine deterministische Sortierung wie
-
-```text
-Filename + Line + Trice-Typ + Formatstring
-```
-
-ist nützlich, um die Logstellen eines konkreten Builds in eine reproduzierbare Reihenfolge zu bringen. Der daraus entstehende Positionsindex ist aber nicht stabil:
-
-```text
-src/motor.c:100 "speed=%d"
-```
-
-wird nach eingefügten Quellzeilen beispielsweise zu:
-
-```text
-src/motor.c:125 "speed=%d"
-```
-
-Auch das Einfügen einer früher sortierten Datei kann viele nachfolgende Indizes verändern.
-
-Der Positionsindex eignet sich daher als:
-
-- lokaler Build-Index,
-- Tabellenindex,
-- technischer Schlüssel zwischen Compiler und Binder,
-
-aber nicht als langfristige Trice-ID.
-
-### 5.2 Empfohlene Wiedererkennung
-
-Ein neuer ID-Allocator könnte mehrere Merkmale kombinieren:
-
-1. normalisierter Projektpfad,
-2. Trice-Typ und Parameterstruktur,
-3. Formatstring,
-4. Quellzeile als Hinweis, nicht als Identität,
-5. Hash eines kleinen normalisierten Quellkontexts,
-6. Nachbarschaft zu anderen bekannten Trice-Stellen,
-7. optional Git-Diff- oder Rename-Informationen.
-
-Eine mögliche Matching-Reihenfolge:
-
-```text
-1. Expliziter symbolischer Schlüssel vorhanden?
- -> eindeutig zuordnen.
-
-2. Datei, Typ und Formatstring stimmen exakt?
- -> bekannte ID übernehmen.
-
-3. Datei wurde verschoben oder umbenannt, Typ und Formatstring sind eindeutig?
- -> bekannte ID übernehmen.
-
-4. Mehrere gleiche Meldungen vorhanden?
- -> Zeile, Kontext-Hash und Nachbarschaft auswerten.
-
-5. Zuordnung bleibt mehrdeutig?
- -> nicht raten; Warnung oder Fehler und neue ID nur nach klarer Regel.
-```
-
-### 5.3 Änderung des Formatstrings
-
-Eine „stabile ID“ sollte nicht bedeuten, dass jede beliebige Änderung derselben Quellstelle zwingend dieselbe ID behält.
-
-Ändert sich beispielsweise
-
-```c
-trice("temperature=%d\n", t);
-```
-
-zu
-
-```c
-trice("temperature=%d, voltage=%d\n", t, u);
-```
-
-haben sich Format und Parameterstruktur geändert. Wird dieselbe ID wiederverwendet, kann eine kumulative `til.json` alte und neue Binärlogs nicht mehr gleichzeitig eindeutig interpretieren.
-
-Daher sollte gelten:
-
-- **reine Verschiebung oder Umbenennung:** ID kann stabil bleiben,
-- **Format- oder Typänderung:** normalerweise neue ID,
-- **inhaltlich kompatible Textkorrektur:** nur nach expliziter Policy.
-
-### 5.4 Optionaler symbolischer Schlüssel
-
-Für besonders langlebige oder extern relevante Logstellen kann ein optionaler semantischer Schlüssel hilfreich sein:
-
-```c
-triceK(
- "motor.overtemperature",
- "motor temperature=%d\n",
- temperature
-);
-```
-
-Der Schlüssel ersetzt keine Versionsregeln für inkompatible Formatänderungen, verbessert aber die Wiedererkennung bei:
-
-- Verschieben in andere Dateien,
-- Refactoring,
-- mehrfach identischen Formatstrings,
-- gemeinsam genutzten Bibliotheken.
-
-Für normale Debugmeldungen sollte ein solcher Schlüssel nicht zwingend erforderlich sein.
-
----
-
-## 6. Lösungsvariante A: Instrumentierte Build-Kopie
-
-### 6.1 Prinzip
-
-Die Originalquellen bleiben unverändert. Vor der Compilation erzeugt ein Werkzeug eine instrumentierte Kopie im Buildverzeichnis:
-
-```text
-src/
- motor.c
-
- |
- | trice stage
- v
-
-build/trice-src/
- motor.c
-```
-
-Original:
-
-```c
-trice("temperature=%d\n", temperature);
-```
-
-Build-Kopie:
-
-```c
-trice(iD(4711), "temperature=%d\n", temperature);
-```
-
-Kompiliert wird ausschließlich die Build-Kopie.
-
-### 6.2 Eigenschaften
-
-**Vorteile**
-
-- compiler- und linkerunabhängig,
-- bestehende Trice-Makros und bestehendes Drahtformat,
-- IDs bleiben reine Compile-Time-Konstanten,
-- keine Target-Mehrkosten,
-- ID-Allocator kann weitgehend aus `trice insert` hervorgehen,
-- kein `clean`, da die Originaldatei nie verändert wird,
-- vergleichsweise einfach und risikoarm.
-
-**Nachteile**
-
-- das Buildsystem muss auf die gespiegelten Quellen umgestellt werden,
-- relative Includes und generierte Quellen müssen korrekt behandelt werden,
-- Debugpfade und Fehlermeldungen sollen auf Originalquellen zeigen,
-- vorkompilierte Bibliotheken können nicht nachträglich instrumentiert werden.
-
-Mit `#line`-Direktiven oder Compileroptionen für Quellpfad-Mapping können Diagnose- und Debugpfade weitgehend auf die Originaldateien zurückgeführt werden.
-
-### 6.3 Bewertung
-
-Diese Variante ist kein fundamentaler technischer Durchbruch, aber ein sehr guter praktischer erster Schritt:
-
-- Sie beseitigt den problematischen Schreibzugriff auf das Arbeitsverzeichnis.
-- Sie erhält das bewährte Trice-ID-Modell vollständig.
-- Sie bietet eine Referenzimplementierung für den getrennten ID-Allocator.
-
-Sie sollte als **portabler Basismodus** betrachtet werden, selbst wenn später ein eleganterer Binder hinzukommt.
-
----
-
-## 7. Lösungsvariante B: Generierte ID-Header pro Übersetzungseinheit
-
-### 7.1 Grundidee
-
-Ein Scanner ermittelt vor der Compilation alle Trice-Stellen einer Quelldatei und ordnet ihnen stabile IDs zu. Anschließend erzeugt er einen nur für diese Übersetzungseinheit gültigen Header.
-
-Für `src/motor.c` könnte entstehen:
-
-```c
-/* build/trice-ids/src_motor_c.h */
-
-#define TRICE_ID_AT_LINE_42 4711
-#define TRICE_ID_AT_LINE_87 8123
-#define TRICE_ID_AT_LINE_130 12001
-```
-
-Das Trice-Makro verwendet die aktuelle Zeilennummer zur Compilezeit:
-
-```c
-#define TRICE_ID_AT_LINE_I(line) TRICE_ID_AT_LINE_##line
-#define TRICE_ID_AT_LINE(line) TRICE_ID_AT_LINE_I(line)
-
-#define trice(...) \
- TRICE_WITH_ID(TRICE_ID_AT_LINE(__LINE__), __VA_ARGS__)
-```
-
-Der Compiler erhält für jede Quelldatei den passenden Header, beispielsweise über:
-
-```text
--DTRICE_ID_HEADER="build/trice-ids/src_motor_c.h"
-```
-
-und `trice.h` bindet ihn ein:
-
-```c
-#include TRICE_ID_HEADER
-```
-
-### 7.2 Laufzeitverhalten
-
-Die ID ist nach der Präprozessorauflösung eine normale Konstante:
-
-```c
-TRICE_WITH_ID(4711, "temperature=%d\n", temperature);
-```
-
-Es gibt:
-
-- keine Runtime-Suche,
-- keine Mapping-Tabelle im Target,
-- keinen zusätzlichen Tabellenzugriff,
-- keine Änderung des Originalsource.
-
-### 7.3 Grenzen
-
-Die einfache Zeilenvariante benötigt Regeln:
-
-- höchstens eine Trice-Logstelle pro physischer Quellzeile,
-- `#line`-Direktiven und generierter Code müssen kontrolliert behandelt werden,
-- der Header muss nach jeder relevanten Quelländerung neu erzeugt werden,
-- jede Übersetzungseinheit benötigt den korrekten, individuellen Header.
-
-`__COUNTER__` könnte statt `__LINE__` lokale Nummern erzeugen. GCC dokumentiert `__COUNTER__` als fortlaufenden Zähler. Seine Verwendung ist jedoch empfindlich, wenn andere Makros derselben Übersetzungseinheit ebenfalls `__COUNTER__` verwenden. Ein Buildwerkzeug müsste dann den tatsächlich präprozessierten Zustand kennen oder einen robusten lokalen Namensraum schaffen.
-
-### 7.4 Buildintegration
-
-Geeignete Integrationsformen wären:
-
-- Compiler-Wrapper,
-- CMake-Generator mit per-source compile options,
-- Ninja-/Make-Regeln,
-- erzeugte Wrapper-Übersetzungseinheiten,
-- ein neues Tool, das eine `compile_commands.json` liest und die Compile-Kommandos ergänzt.
-
-### 7.5 Bewertung
-
-Diese Variante ist technisch interessant, weil sie
-
-- ohne Sourcekopie,
-- ohne Linkertrick,
-- ohne Targettabelle
-
-auskommt.
-
-Sie ist portabler als ein ELF-Binder, verlangt aber eine engere Buildsystemintegration. Die Zeilenadressierung ist weniger elegant als linkerbasierte Metadaten, kann für einen kontrollierten C-Codebestand jedoch tragfähig sein.
-
-Sie eignet sich besonders als **mittelfristiger portabler Binder**, wenn die Einschränkung „eine Trice-Stelle pro Zeile“ akzeptabel ist.
-
----
-
-## 8. Lösungsvariante C: Buildlokaler Index plus stabile Runtime-Mapping-Tabelle
-
-### 8.1 Prinzip
-
-Jede Logstelle erzeugt wie bei TreeLog einen Anchor beziehungsweise Indexeintrag. Der Linker bringt alle tatsächlich eingebundenen Logstellen in eine eindeutige lokale Reihenfolge:
-
-```text
-lokaler Index 0 -> Logstelle A
-lokaler Index 1 -> Logstelle B
-lokaler Index 2 -> Logstelle C
-```
-
-Der ID-Allocator ordnet stabile IDs zu:
-
-```text
-A -> 4711
-B -> 8123
-C -> 12001
-```
-
-Ein Buildwerkzeug erzeugt eine Tabelle:
-
-```c
-const uint16_t triceIdMap[] = {
- 4711,
- 8123,
- 12001,
-};
-```
-
-Das Makro berechnet oder erhält seinen lokalen Index und verwendet:
-
-```c
-uint16_t id = triceIdMap[localIndex];
-```
-
-Danach sendet die Firmware die normale stabile Trice-ID.
-
-### 8.2 Buildablauf
-
-```text
-1. Quellen kompilieren
-2. Vorläufig linken oder Objektdateien analysieren
-3. lokale Logstellenreihenfolge feststellen
-4. stabile IDs aus Registry zuordnen
-5. triceIdMap.c oder triceIdMap.o erzeugen
-6. final linken
-```
-
-### 8.3 Kosten
-
-Bei einer 16-Bit-ID:
-
-```text
-Flashbedarf = 2 Byte * Anzahl der Logstellen
-```
-
-Beispiele:
-
-| Logstellen | Tabellenbedarf |
-|---:|---:|
-| 500 | ca. 1 KiB |
-| 1.000 | ca. 2 KiB |
-| 5.000 | ca. 10 KiB |
-| 16.384 | 32 KiB |
-
-Zusätzlich entsteht pro Logaufruf mindestens ein Tabellenzugriff. Je nach Indexberechnung kommen Subtraktion und Shift hinzu.
-
-### 8.4 Vorteile
-
-- Originalsource bleibt unverändert,
-- stabile IDs auf dem Draht,
-- normale kumulative `til.json`,
-- linkerbasierte Erfassung tatsächlich verwendeter Logstellen,
-- grundsätzlich auch Logstellen aus `.a`-Bibliotheken,
-- deutlich einfacher als Relocation- oder Objektdatei-Patching.
-
-### 8.5 Nachteile
-
-- zusätzlicher Flashbedarf,
-- zusätzlicher Runtimezugriff,
-- mindestens teilweise linker- beziehungsweise Objektformat-spezifisch,
-- meist zweistufiger Linkprozess.
-
-### 8.6 Bewertung
-
-Die Tabelle ist ein sehr guter **technischer Fallback**:
-
-- robust,
-- gut nachvollziehbar,
-- relativ leicht zu testen,
-- geeignet für einen Proof of Concept.
-
-Sie ist aber nicht die ideale Endlösung, wenn maximale Targeteffizienz ein Hauptziel bleibt.
-
----
-
-## 9. Lösungsvariante D: ELF-/Linker-Binder mit direkter ID-Auflösung
-
-### 9.1 Ziel
-
-Das Trice-Makro erzeugt noch keine numerische ID, sondern eine symbolische Referenz auf die lokale Logstelle. Nach der Compilation liest ein Binder die Metadaten aus `.o`- und `.a`-Dateien, ordnet stabile IDs zu und lässt den finalen Linker diese IDs direkt in den Code einsetzen.
-
-Der Sourcecode bleibt:
-
-```c
-trice("temperature=%d\n", temperature);
-```
-
-Im Objektcode existieren konzeptionell:
-
-- ein Metadateneintrag,
-- ein lokales Site-Symbol,
-- eine Relocation vom Logaufruf auf den ID-Wert.
-
-Der Binder entscheidet:
-
-```text
-Site aus src/motor.c -> stabile ID 4711
-```
-
-Der finale Link enthält an der Aufrufstelle direkt `4711`, ohne Runtime-Tabelle.
-
-### 9.2 Möglicher Buildablauf
-
-```text
-saubere C-Quellen
- |
- | normale Compilation
- v
-.o / .a mit Trice-Metadaten und symbolischen ID-Referenzen
- |
- | trice bind
- | - Metadaten lesen
- | - Sites wiedererkennen
- | - stabile IDs vergeben
- | - Symbolwerte/Relocations erzeugen
- v
-finaler Link
- |
- v
-Firmware mit normalen stabilen Trice-IDs
-```
-
-### 9.3 Technische Umsetzungsformen
-
-#### A. Generiertes Linkerskript mit absoluten Symbolwerten
-
-GNU `ld` kann Symbolen in einem Linkerskript numerische Werte zuweisen. Der Binder könnte aus den zugeordneten IDs ein Fragment erzeugen:
-
-```ld
-__trice_id_site_a = 4711;
-__trice_id_site_b = 8123;
-```
-
-Der Targetcode referenziert die Symboladresse beziehungsweise den Symbolwert.
-
-Problematisch ist die eindeutige Benennung über mehrere Übersetzungseinheiten. Mögliche Lösungen:
-
-- pro Object-Datei eindeutig umbenannte Symbole,
-- ein Compiler-Wrapper, der einen Übersetzungseinheits-Hash vorgibt,
-- Binder-seitiges Umbenennen lokaler Symbole,
-- pro Site eindeutig benannte ELF-Subsektionen.
-
-GNU-`ld` dokumentiert die [Zuweisung von Werten an Symbole](https://sourceware.org/binutils/docs/ld/Assignments.html) und die [Referenz solcher Symbole aus Sourcecode](https://sourceware.org/binutils/docs/ld/Source-Code-Reference.html).
-
-#### B. Erzeugtes ID-Objekt
-
-Der Binder kann eine Assembler- oder Objektdatei erzeugen, welche die benötigten Symbole mit absoluten Werten definiert. Dieses Objekt wird beim finalen Link ergänzt.
-
-#### C. Direkte Anpassung von ELF-Symbolen oder Relocations
-
-Der Binder kann lokale Site-Symbole in den Objektdateien identifizieren und deren Werte beziehungsweise die zugehörigen Relocations auf die stabile ID umstellen.
-
-Das ist besonders leistungsfähig, aber architektur- und objektformatspezifisch:
-
-- ELF-Klassen,
-- ARM-, RISC-V- und andere Relocationtypen,
-- Archive,
-- Section-Garbage-Collection,
-- LTO,
-- Debugsymbole
-
-müssen korrekt behandelt werden.
-
-#### D. Anchor-Adressen codieren die stabile ID
-
-Ähnlich wie TreeLog könnte jede Logstelle einen Anchor referenzieren. Anders als bei TreeLog würde nicht die zufällige Reihenfolge die ID bestimmen. Der Binder erzeugt ein Linkerskript, das jedem Anchor eine Adresse zuweist, deren relevante Bits der stabilen TID entsprechen.
-
-```text
-Anchor A -> Adresse ...4711
-Anchor B -> Adresse ...8123
-```
-
-Das Makro übernimmt den Adresswert als ID. Die Anchor-Sektionen können nicht allokiert sein oder in einer Dummy-Memory-Region liegen und müssen nicht im BIN/HEX erscheinen.
-
-Diese Variante verbindet TreeLogs Adressmechanik direkt mit einer extern verwalteten stabilen ID. Sie ist konzeptionell elegant, benötigt aber sorgfältige Tests mit den verwendeten Compilern und Linkern.
-
-### 9.4 Vorteile
-
-- unveränderte Originalquellen,
-- keine Runtime-Tabelle,
-- kein zusätzlicher Tabellenzugriff,
-- stabile Trice-IDs auf dem Draht,
-- unverändertes Trice-TID-Layout,
-- kumulative `til.json`,
-- vollständige ID-Policy,
-- grundsätzlich Unterstützung vorkompilierter `.a`-Bibliotheken,
-- Metadaten können aus BIN/HEX entfernt werden.
-
-### 9.5 Risiken und offene technische Punkte
-
-- zunächst voraussichtlich ELF-spezifisch,
-- GNU-GCC/GNU-ld und Clang/LLD können sich unterscheiden,
-- LTO verschiebt Codeerzeugung und Optimierung in die Linkphase,
-- Compiler können Adressreferenzen unterschiedlich materialisieren,
-- nicht allokierte Metadatensektionen dürfen Referenzen aus Code nicht unzulässig machen,
-- `--gc-sections` darf benötigte Site-Metadaten nicht vor der Binderanalyse entfernen,
-- Archivmitglieder werden normalerweise nur bei Bedarf aus `.a` geladen,
-- die Methode muss auf ARM und RISC-V mit realen Relocationtypen verifiziert werden.
-
-### 9.6 Bewertung
-
-Der ELF-/Linker-Binder ist die **strategisch beste Lösung**, sofern der technische Proof of Concept gelingt.
-
-Er erreicht nahezu das Optimum:
-
-```text
-TreeLog:
- unveränderte Quellen
- + Binärbibliotheken
-
-Trice:
- stabile IDs
- + ID-Policy
- + langfristige Decodierbarkeit
- + unverändertes Drahtformat
-```
-
-Der Preis ist eine deutlich höhere Implementierungs- und Testkomplexität.
-
----
-
-## 10. Lösungsvariante E: Compiler- oder AST-Plugin
-
-Ein Compiler-Frontend kann Trice-Aufrufe erkennen und die stabile ID während der Compilation in AST oder IR einsetzen.
-
-Mögliche Technologien:
-
-- GCC-Plugin,
-- Clang-Plugin,
-- [Clang LibTooling](https://clang.llvm.org/docs/LibTooling.html),
-- Clang Transformer beziehungsweise AST Matchers.
-
-### Vorteile
-
-- keine Änderung der Originalquellen,
-- ID kann direkt als Konstante in den erzeugten Code gelangen,
-- semantisch genaue Erkennung von Makros und Aufrufen,
-- kein Runtime-Overhead.
-
-### Nachteile
-
-- starke Bindung an Compiler und Version,
-- hoher Wartungsaufwand,
-- GCC und Clang benötigen unterschiedliche Implementierungen,
-- Integration in proprietäre Embedded-Toolchains schwierig,
-- vorkompilierte Libraries sind nur erfasst, wenn sie bereits mit dem Plugin gebaut wurden.
-
-Diese Variante ist technisch möglich, aber als allgemeiner Trice-Standard weniger attraktiv als ein ELF-Binder oder der portable Build-Kopien-Modus.
-
----
-
-## 11. Vorkompilierte Bibliotheken
-
-Eine wesentliche Stärke des TreeLog-Modells ist die Einbindung vorkompilierter `.a`-Bibliotheken ohne vorherige Abstimmung numerischer ID-Bereiche.
-
-Ein Hybridmodell könnte dies erhalten:
-
-1. Die Bibliothek enthält Trice-Code, Metadaten und symbolische Site-Referenzen.
-2. Sie enthält noch keine endgültigen projektspezifischen IDs.
-3. Beim finalen Produktlink werden nur tatsächlich benötigte Archivobjekte eingebunden.
-4. Der Binder sieht Anwendung und Bibliotheken gemeinsam.
-5. Die stabile ID-Policy des Endprodukts weist allen Sites IDs zu.
-6. Die finalen IDs werden direkt gebunden oder über die Mapping-Tabelle bereitgestellt.
-
-Damit könnten Bibliotheken einen symbolischen Namespace mitbringen, etwa:
-
-```text
-vendor.sensor.temperature
-vendor.sensor.timeout
-```
-
-ohne feste numerische Bereiche zu beanspruchen.
-
-Das spricht stark für einen ELF-/Linker-Binder. Build-Kopie und generierte Header können bereits kompilierte Bibliotheken nicht nachträglich erfassen.
-
----
-
-## 12. Build-Artefakte und Datenmodell
-
-Ein neues System sollte die Artefakte klar unterscheiden.
-
-### 12.1 Langfristige Registry
-
-Sie enthält die stabile Zuordnung und muss erhalten bleiben:
-
-```text
-stable-id-registry.json
-```
-
-Mögliche Felder:
-
-```json
-{
- "version": 1,
- "entries": {
- "4711": {
- "type": "TRICE32_1",
- "format": "temperature=%d\n",
- "logicalKey": "motor.temperature",
- "lastPath": "src/motor.c",
- "lastLine": 125,
- "contextHash": "..."
- }
- }
-}
-```
-
-Die existierende `til.json` und `li.json` könnten weiterverwendet oder zu einem erweiterten Registry-Modell ergänzt werden.
-
-### 12.2 Buildlokale Site-Liste
-
-Sie beschreibt die in einem konkreten Build gefundenen Logstellen:
-
-```text
-trice-sites.json
-```
-
-Beispiel:
-
-```json
-{
- "buildSite": 17,
- "object": "build/src/motor.c.o",
- "localSymbol": "__trice_site_4",
- "type": "TRICE32_1",
- "format": "temperature=%d\n",
- "file": "src/motor.c",
- "line": 125,
- "stableID": 4711
-}
-```
-
-Diese Liste ist ein Build-Hilfsmittel und muss nicht zur späteren Decodierung archiviert werden, wenn die Firmware bereits stabile IDs sendet.
-
-### 12.3 Host-Dictionary
-
-Für das bestehende Trice-Modell bleibt die kumulative `til.json` das zentrale Decodierartefakt.
-
-Zusätzlich ist eine Firmware-Build-ID oder ein Dictionary-Hash sinnvoll, auch wenn stabile IDs verwendet werden. Sie ermöglicht:
-
-- Erkennung falscher Dictionaries,
-- Nachvollziehbarkeit von Feldaufzeichnungen,
-- Diagnose bei inkompatiblen Änderungen,
-- Zuordnung zu Git-Commit und Buildkonfiguration.
-
----
-
-## 13. Nicht empfohlene Ansätze
-
-Die folgenden Möglichkeiten sind denkbar, lösen das Gesamtproblem aber nicht überzeugend.
-
-### 13.1 Nur hostseitige Umabbildung von TreeLog-IDs
-
-Das Target sendet weiterhin buildabhängige Linker-IDs. Der Host benötigt für jeden Build eine eigene Mappingdatei. Der wesentliche TreeLog-Nachteil bleibt bestehen.
-
-### 13.2 Reiner Hash aus Datei, Zeile und Formatstring
-
-Ein auf 14 Bit verkürzter Hash hat bei größeren Projekten relevante Kollisionswahrscheinlichkeit. Eine Kollisionsauflösung benötigt wiederum eine persistente Registry und eine Bindungsmethode.
-
-### 13.3 Runtime-Suche nach Datei, Zeile oder Formatstring
-
-Strings und Suchstrukturen müssten im Target verbleiben. Flashbedarf und Laufzeitkosten widersprechen den Grundzielen von Trice.
-
-### 13.4 Unveränderte Übernahme des TreeLog-TID-Layouts
-
-Die Bitverschiebung erleichtert TreeLogs Adressmechanik, ist aber für eine stabile Hybrid-ID nicht erforderlich. Sie würde das Trice-Drahtformat ohne entsprechenden Nutzen inkompatibel machen.
-
-### 13.5 Vollständige Abkehr von persistenten ID-Daten
-
-Ohne persistente Zuordnung kann ein Werkzeug keine dauerhaft stabilen, kollisionsfreien und policygesteuerten IDs garantieren. Entfernt werden kann die ID aus dem Sourcecode, nicht die Notwendigkeit einer Registry.
-
----
-
-## 14. Empfohlene Zielarchitektur
-
-Die Architektur sollte aus zwei klar getrennten Komponenten bestehen.
-
-### 14.1 Trice ID Allocator
-
-Aufgabe:
-
-```text
-gefundene Logstelle -> stabile ID
-```
-
-Verantwortlichkeiten:
-
-- Scannen von Source- oder Objektmetadaten,
-- Wiedererkennung bestehender Logstellen,
-- Vergabe neuer IDs,
-- Anwendung der ID-Policy,
-- Pflege von `til.json`, `li.json` oder einer erweiterten Registry,
-- Fehler bei mehrdeutigen Zuordnungen,
-- neue ID bei inkompatiblen Formatänderungen.
-
-Der Allocator soll unabhängig davon funktionieren, wie die ID später in den Code gelangt.
-
-### 14.2 Trice ID Binder
-
-Aufgabe:
-
-```text
-stabile ID -> Targetcode
-```
-
-Mehrere Binder können dasselbe Allocator-Ergebnis verwenden:
-
-1. **Stage-Binder:** erzeugt instrumentierte Build-Kopien.
-2. **Header-Binder:** erzeugt per-TU ID-Header.
-3. **ELF-Binder:** bindet Symbolwerte oder Relocations.
-4. **Map-Binder:** erzeugt eine Runtime-Mapping-Tabelle.
-
-Damit bleibt die Architektur offen und testbar. Ein Projekt kann den Binder entsprechend seiner Toolchain auswählen.
-
----
-
-## 15. Empfohlener Entwicklungsweg
-
-### Phase 1: Fachliches Datenmodell und Scanner trennen
-
-Zunächst sollte der heutige `trice insert`-Code logisch zerlegt werden:
-
-```text
-Scan -> Match -> Allocate -> Persist -> Bind
-```
-
-Der bestehende Sourcecode-Binder bleibt funktionsfähig, aber die ID-Zuordnung wird als unabhängige Komponente testbar.
-
-### Phase 2: Build-Kopien-Modus
-
-Ein neuer Befehl könnte beispielsweise heißen:
-
-```text
-trice stage
-```
-
-Er erzeugt instrumentierte Quellen ausschließlich im Buildverzeichnis.
-
-Ziele:
-
-- kein Schreibzugriff auf Originalquellen,
-- kein `clean`,
-- identischer Targetcode zum heutigen `insert`,
-- Referenz für alle späteren Binder.
-
-### Phase 3: Generierter Header-Binder
-
-Proof of Concept für eine ausgewählte Buildumgebung:
-
-```text
-trice headers
-```
-
-Prüfen:
-
-- per-source Header-Include,
-- `__LINE__`-Zuordnung,
-- Diagnose bei zwei Logstellen auf einer Zeile,
-- inkrementelle Builds,
-- IDE-Diagnosen,
-- generierte Quellen.
-
-Dieser Schritt zeigt, ob eine weitgehend portable Lösung ohne Sourcekopie ausreichend praktikabel ist.
-
-### Phase 4: ELF-Binder-Prototyp
-
-Zunächst stark begrenzen:
-
-- GCC,
-- ELF32 little-endian,
-- ARM Cortex-M,
-- kein LTO,
-- GNU `ld`,
-- normale `.o`-Dateien,
-- später `.a`.
-
-Proof-of-Concept-Ziel:
-
-```text
-TRICE ohne ID im Source
--> .o mit Site-Metadaten
--> stabile ID aus Registry
--> finaler Maschinencode enthält dieselbe Konstante
- wie heutiges trice insert
-```
-
-Zu prüfen sind insbesondere:
-
-- erzeugte Relocationtypen,
-- Codegröße und Instruktionsfolge,
-- `--gc-sections`,
-- Debugging,
-- Archive,
-- nicht allokierte Metadatensektionen,
-- reproduzierbare Builds.
-
-### Phase 5: Runtime-Tabelle als Fallback
-
-Falls direkte Symbolbindung auf einer Toolchain nicht zuverlässig möglich ist, kann dieselbe Metadata- und Allocator-Infrastruktur eine `triceIdMap[]` erzeugen.
-
-### Phase 6: Vorkompilierte Bibliotheken und weitere Toolchains
-
-Erst nach einem stabilen GCC/ARM-Prototyp:
-
-- `.a`-Archive,
-- RISC-V,
-- Clang/LLD,
-- LTO,
-- weitere Embedded-Compiler,
-- optional Compiler-Plugins.
-
----
-
-## 16. Vergleich der Hauptvarianten
-
-| Eigenschaft | Build-Kopie | ID-Header | Runtime-Map | ELF-/Linker-Binder |
-|---|---:|---:|---:|---:|
-| Originalsource unverändert | ja | ja | ja | ja |
-| Kein `clean` | ja | ja | ja | ja |
-| Stabile IDs | ja | ja | ja | ja |
-| ID-Policy | ja | ja | ja | ja |
-| Bestehendes Drahtformat | ja | ja | ja | ja |
-| Zusätzlicher Target-Flash | nein | nein | ja | nein |
-| Zusätzlicher Runtimezugriff | nein | nein | ja | nein |
-| Compilerunabhängig | weitgehend | weitgehend | teilweise | nein |
-| Linkerunabhängig | ja | ja | nein | nein |
-| Vorkompilierte `.a` | nein | nein | grundsätzlich ja | grundsätzlich ja |
-| Implementierungsrisiko | niedrig | mittel | mittel | hoch |
-| Strategischer Nutzen | mittel | hoch | hoch als Fallback | sehr hoch |
-
----
-
-## 17. Gesamtbewertung
-
-Die Idee, TreeLogs Linkermechanik mit Trices stabilen IDs zu verbinden, ist tragfähig. Entscheidend ist, TreeLogs Linker-ID nicht als endgültige ID zu übernehmen.
-
-Die Linker- oder Scannerposition sollte lediglich ein **temporärer technischer Site-Identifier** sein:
-
-```text
-buildlokale Site
- |
- | ID-Allocator
- v
-stabile Trice-ID
- |
- | ID-Binder
- v
-Targetcode
-```
-
-Die beste langfristige Lösung wäre ein ELF-/Linker-Binder, der stabile IDs direkt in den Code bindet. Sie bietet:
-
-- keine numerischen IDs im Source,
-- keine `insert`/`clean`-Schritte,
-- keine buildspezifische Hostzuordnung,
-- normale Trice-Decodierung,
-- stabile ID-Policy,
-- Unterstützung vorkompilierter Bibliotheken,
-- keine zusätzlichen Targetkosten.
-
-Da dieser Weg technisch anspruchsvoll ist, sollte er nicht als einzige Option begonnen werden. Ein Build-Kopien-Modus liefert schnell einen robusten praktischen Nutzen. Ein generierter Header-Binder ist eine interessante portable Zwischenstufe. Die Runtime-Mapping-Tabelle dient als belastbarer linkerbasierter Fallback.
-
-Ein völlig neues Tool wäre dafür vertretbar, sofern die Architektur zunächst unabhängig von Trice implementiert und erprobt werden soll. Inhaltlich sollte es jedoch dieselben Kernkomponenten besitzen:
-
-```text
-Site Discovery
-Stable ID Registry
-ID Policy
-ID Allocator
-Target Binder
-Dictionary Export
-```
-
-Bei erfolgreichem Proof of Concept könnte es später als neuer Trice-Buildmodus integriert werden.
-
----
-
-## 18. Relevante Links
-
-### Trice
-
-- [Trice Repository](https://github.com/rokath/trice)
-- [Trice README – ID-Workflow, `til.json`, `li.json`, `insert` und `clean`](https://github.com/rokath/trice/blob/main/README.md)
-- [Trice User Manual](https://github.com/rokath/trice/blob/main/docs/TriceUserManual.md)
-- [Issue: Remove IDs from target sources](https://github.com/rokath/trice/issues/421)
-
-### TreeLog
-
-- [TreeLog Repository](https://github.com/hefanbo/treelog)
-- [TreeLog Developer Manual](https://github.com/hefanbo/treelog/blob/master/docs/DeveloperManual.adoc)
-- [Vergleich Trice `main` mit TreeLog-Fork](https://github.com/rokath/trice/compare/main...hefanbo%3Atrice%3Atreelog)
-- [TreeLog-Anpassungscommit im Trice-Fork](https://github.com/hefanbo/trice/commit/d6b7fb1)
-
-### Compiler- und Linkermechanismen
-
-- [GCC: vordefinierte Makros, darunter `__COUNTER__`](https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html)
-- [GNU ld: Zuweisung von Werten an Symbole](https://sourceware.org/binutils/docs/ld/Assignments.html)
-- [GNU ld: Zugriff auf Linkersymbole aus C](https://sourceware.org/binutils/docs/ld/Source-Code-Reference.html)
-- [GNU objcopy](https://sourceware.org/binutils/docs/binutils/objcopy.html)
-- [Clang LibTooling](https://clang.llvm.org/docs/LibTooling.html)
diff --git a/docs/scratchPad/obsolete/til-json-v2-spezifikationsentwurf.md b/docs/scratchPad/obsolete/til-json-v2-spezifikationsentwurf.md
index 2cbf7c764..d251a41e6 100644
--- a/docs/scratchPad/obsolete/til-json-v2-spezifikationsentwurf.md
+++ b/docs/scratchPad/obsolete/til-json-v2-spezifikationsentwurf.md
@@ -766,7 +766,7 @@ Diese Optionen dürfen weiterhin den erzeugten ASCII-Strom verändern, sind aber
### 13.4 Location Information
-`li.json`, `-locationInformation`, `-liFmt` und `-liPath` bleiben außerhalb des Schemas. Quellpfad und Zeilennummer sind nicht im binären Trice-Datenstrom enthalten und nicht zur inhaltlichen Decodierung erforderlich.
+`li.json`, `-locationInformation`, `-liRoot`, `-liFmt` und `-liMaxDirs` bleiben außerhalb des Schemas. Quellpfad und Zeilennummer sind nicht im binären Trice-Datenstrom enthalten und nicht zur inhaltlichen Decodierung erforderlich.
## 14. V1-/V2-Kompatibilität
diff --git a/docs/scratchPad/scratchPad.md b/docs/scratchPad/scratchPad.md
index e69de29bb..d48c7be48 100644
--- a/docs/scratchPad/scratchPad.md
+++ b/docs/scratchPad/scratchPad.md
@@ -0,0 +1,6 @@
+
+
+*) In ./examples/TriceABC funktionieren die *.sh Skripte sehr gut, allerdings wirken sie etwas abschreckend insbesondere für User, die keine ash-Experten sind. Lassen sich diese Skripte im Sinne der einfachen Lesarkeit verbessern ohne die Funktionalität zu verschlechteren? Zumindest mit ausführlichen Kommentaren. Auch ist es schwer, die generierten *.h und *.c Dateien zu finden. Wo sind die eigentlich? Das muss unbeding verbessert werden, damit User sich schnell zurechtfinden. Zumindest die README.md Files sollten darüber Aufschluss geben.
+
+*) Die Bezeichnung MVP sollte verschwinden aus dem Inhalt der Datei docs/TriceBind/Trice_bind_90_MVP_User_Manual.md und geeignet ersetzt verden.
+
diff --git a/examples/DemoData_CSV/src/main.c b/examples/DemoData_CSV/src/main.c
index 047138b38..933ab28b5 100644
--- a/examples/DemoData_CSV/src/main.c
+++ b/examples/DemoData_CSV/src/main.c
@@ -38,92 +38,88 @@ typedef int SocketHandle;
* a file is useful for playback, and UDP is useful for a live plot.
*/
typedef enum {
- OUTPUT_STDOUT,
- OUTPUT_FILE,
- OUTPUT_UDP
+ OUTPUT_STDOUT,
+ OUTPUT_FILE,
+ OUTPUT_UDP
} OutputKind;
typedef struct {
- /* Number of generated records per second. */
- double rate_hz;
+ /* Number of generated records per second. */
+ double rate_hz;
- /* Zero means "continue until interrupted with Ctrl+C". */
- unsigned long long sample_count;
+ /* Zero means "continue until interrupted with Ctrl+C". */
+ unsigned long long sample_count;
- /* Skip real-time waiting when false, for fast file generation and tests. */
- bool delay;
+ /* Skip real-time waiting when false, for fast file generation and tests. */
+ bool delay;
- /* A CSV header is optional because live receivers usually expect numbers. */
- bool header;
+ /* A CSV header is optional because live receivers usually expect numbers. */
+ bool header;
- /* Selected output and its optional command-line parameters. */
- OutputKind output_kind;
- const char *file_name;
- const char *udp_host;
- const char *udp_port;
+ /* Selected output and its optional command-line parameters. */
+ OutputKind output_kind;
+ const char* file_name;
+ const char* udp_host;
+ const char* udp_port;
} Options;
typedef struct {
- SocketHandle socket;
- struct sockaddr_storage address;
+ SocketHandle socket;
+ struct sockaddr_storage address;
#ifdef _WIN32
- int address_length;
- bool winsock_started;
+ int address_length;
+ bool winsock_started;
#else
- socklen_t address_length;
+ socklen_t address_length;
#endif
} UdpSender;
-static void print_usage(const char *program)
-{
- printf(
- "Usage: %s [options]\n"
- "\n"
- "Generate time_s,x,y,z records as newline-terminated CSV.\n"
- "\n"
- "Output options (choose at most one):\n"
- " -o, --output FILE Write CSV to FILE\n"
- " --udp HOST PORT Send one CSV record per UDP datagram\n"
- " Example: --udp 127.0.0.1 9000\n"
- " No output option writes CSV to stdout.\n"
- "\n"
- "Generator options:\n"
- " -r, --rate HZ Sample rate (default: 50)\n"
- " -n, --samples N Stop after N samples (default: unlimited)\n"
- " --header Write/send the CSV column names first\n"
- " --no-delay Generate as fast as possible\n"
- " -h, --help Show this help\n",
- program
- );
+static void print_usage(const char* program) {
+ printf(
+ "Usage: %s [options]\n"
+ "\n"
+ "Generate time_s,x,y,z records as newline-terminated CSV.\n"
+ "\n"
+ "Output options (choose at most one):\n"
+ " -o, --output FILE Write CSV to FILE\n"
+ " --udp HOST PORT Send one CSV record per UDP datagram\n"
+ " Example: --udp 127.0.0.1 9000\n"
+ " No output option writes CSV to stdout.\n"
+ "\n"
+ "Generator options:\n"
+ " -r, --rate HZ Sample rate (default: 50)\n"
+ " -n, --samples N Stop after N samples (default: unlimited)\n"
+ " --header Write/send the CSV column names first\n"
+ " --no-delay Generate as fast as possible\n"
+ " -h, --help Show this help\n",
+ program);
}
/*
* Convert a complete string to double. Checking both errno and the final
* character rejects range errors as well as partial input such as "50Hz".
*/
-static bool parse_double(const char *text, double *value)
-{
- char *end = NULL;
- errno = 0;
- *value = strtod(text, &end);
- return errno == 0 && end != text && *end == '\0';
+static bool parse_double(const char* text, double* value) {
+ char* end = NULL;
+ errno = 0;
+ *value = strtod(text, &end);
+ return errno == 0 && end != text && *end == '\0';
}
/* Apply the same strict parsing rule to the unsigned sample count. */
static bool parse_unsigned_long_long(
- const char *text,
- unsigned long long *value)
-{
- char *end = NULL;
-
- /* strtoull() accepts a leading minus sign, which is not useful here. */
- if (text[0] == '-') {
- return false;
- }
-
- errno = 0;
- *value = strtoull(text, &end, 10);
- return errno == 0 && end != text && *end == '\0';
+ const char* text,
+ unsigned long long* value) {
+ char* end = NULL;
+
+ /* strtoull() accepts a leading minus sign, which is not useful here. */
+ if (text[0] == '-') {
+ return false;
+ }
+
+ errno = 0;
+ *value = strtoull(text, &end, 10);
+ return errno == 0 && end != text && *end == '\0';
}
/*
@@ -134,105 +130,102 @@ static bool require_values(
int current_index,
int argument_count,
int required_count,
- const char *option)
-{
- if (current_index + required_count < argument_count) {
- return true;
- }
-
- fprintf(stderr, "Missing value for %s\n", option);
- return false;
+ const char* option) {
+ if (current_index + required_count < argument_count) {
+ return true;
+ }
+
+ fprintf(stderr, "Missing value for %s\n", option);
+ return false;
}
/*
* The program deliberately uses a small hand-written parser. This keeps the
* executable independent of platform-specific option-parsing libraries.
*/
-static bool parse_options(int argc, char **argv, Options *options)
-{
- bool destination_selected = false;
-
- for (int i = 1; i < argc; ++i) {
- const char *argument = argv[i];
-
- if (strcmp(argument, "-h") == 0 ||
- strcmp(argument, "--help") == 0) {
- print_usage(argv[0]);
- exit(EXIT_SUCCESS);
- } else if (strcmp(argument, "--header") == 0) {
- options->header = true;
- } else if (strcmp(argument, "--no-delay") == 0) {
- options->delay = false;
- } else if (strcmp(argument, "-r") == 0 ||
- strcmp(argument, "--rate") == 0) {
- if (!require_values(i, argc, 1, argument) ||
- !parse_double(argv[++i], &options->rate_hz) ||
- !isfinite(options->rate_hz) ||
- options->rate_hz <= 0.0) {
- fprintf(stderr, "Invalid sample rate\n");
- return false;
- }
- } else if (strcmp(argument, "-n") == 0 ||
- strcmp(argument, "--samples") == 0) {
- if (!require_values(i, argc, 1, argument) ||
- !parse_unsigned_long_long(
- argv[++i], &options->sample_count)) {
- fprintf(stderr, "Invalid sample count\n");
- return false;
- }
- } else if (strcmp(argument, "-o") == 0 ||
- strcmp(argument, "--output") == 0) {
- if (destination_selected) {
- fprintf(stderr, "Select only one output destination\n");
- return false;
- }
- if (!require_values(i, argc, 1, argument)) {
- return false;
- }
-
- destination_selected = true;
- options->output_kind = OUTPUT_FILE;
- options->file_name = argv[++i];
- } else if (strcmp(argument, "--udp") == 0) {
- if (destination_selected) {
- fprintf(stderr, "Select only one output destination\n");
- return false;
- }
- if (!require_values(i, argc, 2, argument)) {
- return false;
- }
-
- destination_selected = true;
- options->output_kind = OUTPUT_UDP;
- options->udp_host = argv[++i];
- options->udp_port = argv[++i];
- } else {
- fprintf(stderr, "Unknown option: %s\n", argument);
- return false;
- }
- }
-
- return true;
+static bool parse_options(int argc, char** argv, Options* options) {
+ bool destination_selected = false;
+
+ for (int i = 1; i < argc; ++i) {
+ const char* argument = argv[i];
+
+ if (strcmp(argument, "-h") == 0 ||
+ strcmp(argument, "--help") == 0) {
+ print_usage(argv[0]);
+ exit(EXIT_SUCCESS);
+ } else if (strcmp(argument, "--header") == 0) {
+ options->header = true;
+ } else if (strcmp(argument, "--no-delay") == 0) {
+ options->delay = false;
+ } else if (strcmp(argument, "-r") == 0 ||
+ strcmp(argument, "--rate") == 0) {
+ if (!require_values(i, argc, 1, argument) ||
+ !parse_double(argv[++i], &options->rate_hz) ||
+ !isfinite(options->rate_hz) ||
+ options->rate_hz <= 0.0) {
+ fprintf(stderr, "Invalid sample rate\n");
+ return false;
+ }
+ } else if (strcmp(argument, "-n") == 0 ||
+ strcmp(argument, "--samples") == 0) {
+ if (!require_values(i, argc, 1, argument) ||
+ !parse_unsigned_long_long(
+ argv[++i], &options->sample_count)) {
+ fprintf(stderr, "Invalid sample count\n");
+ return false;
+ }
+ } else if (strcmp(argument, "-o") == 0 ||
+ strcmp(argument, "--output") == 0) {
+ if (destination_selected) {
+ fprintf(stderr, "Select only one output destination\n");
+ return false;
+ }
+ if (!require_values(i, argc, 1, argument)) {
+ return false;
+ }
+
+ destination_selected = true;
+ options->output_kind = OUTPUT_FILE;
+ options->file_name = argv[++i];
+ } else if (strcmp(argument, "--udp") == 0) {
+ if (destination_selected) {
+ fprintf(stderr, "Select only one output destination\n");
+ return false;
+ }
+ if (!require_values(i, argc, 2, argument)) {
+ return false;
+ }
+
+ destination_selected = true;
+ options->output_kind = OUTPUT_UDP;
+ options->udp_host = argv[++i];
+ options->udp_port = argv[++i];
+ } else {
+ fprintf(stderr, "Unknown option: %s\n", argument);
+ return false;
+ }
+ }
+
+ return true;
}
/*
* Pause between samples. The rest of the program works in seconds, so both
* operating-system-specific APIs are hidden behind this common interface.
*/
-static void sleep_seconds(double seconds)
-{
+static void sleep_seconds(double seconds) {
#ifdef _WIN32
- DWORD milliseconds = (DWORD)(seconds * 1000.0 + 0.5);
- Sleep(milliseconds > 0 ? milliseconds : 1);
+ DWORD milliseconds = (DWORD)(seconds * 1000.0 + 0.5);
+ Sleep(milliseconds > 0 ? milliseconds : 1);
#else
- struct timespec remaining;
- remaining.tv_sec = (time_t)seconds;
- remaining.tv_nsec =
- (long)((seconds - (double)remaining.tv_sec) * 1.0e9);
-
- while (nanosleep(&remaining, &remaining) != 0 && errno == EINTR) {
- /* Resume sleeping for the time left after an interrupt. */
- }
+ struct timespec remaining;
+ remaining.tv_sec = (time_t)seconds;
+ remaining.tv_nsec =
+ (long)((seconds - (double)remaining.tv_sec) * 1.0e9);
+
+ while (nanosleep(&remaining, &remaining) != 0 && errno == EINTR) {
+ /* Resume sleeping for the time left after an interrupt. */
+ }
#endif
}
@@ -246,58 +239,50 @@ static void sleep_seconds(double seconds)
*/
static void generate_values(
double t_seconds,
- double *x,
- double *y,
- double *z)
-{
- /*
- * Modulate y slowly so the Lissajous trace keeps changing visibly even
- * after the plot has collected enough samples to cover the full figure.
- */
- double phase_drift = (DEMO_PI / 3.0)
- * sin(2.0 * DEMO_PI * 0.04 * t_seconds);
-
- *x = sin(2.0 * DEMO_PI * 0.70 * t_seconds);
- *y = sin(2.0 * DEMO_PI * 0.91 * t_seconds
- + DEMO_PI / 2.0
- + phase_drift);
-
- /* Add a 250 ms pulse at the end of every eight-second interval. */
- double cycle_position = fmod(t_seconds, 8.0);
- double pulse = cycle_position >= 7.75 ? 0.8 : 0.0;
-
- *z = 0.6 * sin(2.0 * DEMO_PI * 0.13 * t_seconds)
- + 0.2 * *x * *y
- + pulse;
+ double* x,
+ double* y,
+ double* z) {
+ /*
+ * Modulate y slowly so the Lissajous trace keeps changing visibly even
+ * after the plot has collected enough samples to cover the full figure.
+ */
+ double phase_drift = (DEMO_PI / 3.0) * sin(2.0 * DEMO_PI * 0.04 * t_seconds);
+
+ *x = sin(2.0 * DEMO_PI * 0.70 * t_seconds);
+ *y = sin(2.0 * DEMO_PI * 0.91 * t_seconds + DEMO_PI / 2.0 + phase_drift);
+
+ /* Add a 250 ms pulse at the end of every eight-second interval. */
+ double cycle_position = fmod(t_seconds, 8.0);
+ double pulse = cycle_position >= 7.75 ? 0.8 : 0.0;
+
+ *z = 0.6 * sin(2.0 * DEMO_PI * 0.13 * t_seconds) + 0.2 * *x * *y + pulse;
}
/* Return the platform-specific socket error as a printable integer. */
-static int socket_error_code(void)
-{
+static int socket_error_code(void) {
#ifdef _WIN32
- return WSAGetLastError();
+ return WSAGetLastError();
#else
- return errno;
+ return errno;
#endif
}
/* Close the socket and release Winsock state when necessary. */
-static void udp_sender_close(UdpSender *sender)
-{
- if (sender->socket != INVALID_SOCKET_HANDLE) {
+static void udp_sender_close(UdpSender* sender) {
+ if (sender->socket != INVALID_SOCKET_HANDLE) {
#ifdef _WIN32
- closesocket(sender->socket);
+ closesocket(sender->socket);
#else
- close(sender->socket);
+ close(sender->socket);
#endif
- sender->socket = INVALID_SOCKET_HANDLE;
- }
+ sender->socket = INVALID_SOCKET_HANDLE;
+ }
#ifdef _WIN32
- if (sender->winsock_started) {
- WSACleanup();
- sender->winsock_started = false;
- }
+ if (sender->winsock_started) {
+ WSACleanup();
+ sender->winsock_started = false;
+ }
#endif
}
@@ -306,117 +291,115 @@ static void udp_sender_close(UdpSender *sender)
* supports names such as "localhost" as well as numeric IPv4/IPv6 addresses.
*/
static bool udp_sender_open(
- UdpSender *sender,
- const char *host,
- const char *port)
-{
- struct addrinfo hints;
- struct addrinfo *addresses = NULL;
- struct addrinfo *candidate = NULL;
+ UdpSender* sender,
+ const char* host,
+ const char* port) {
+ struct addrinfo hints;
+ struct addrinfo* addresses = NULL;
+ struct addrinfo* candidate = NULL;
- memset(sender, 0, sizeof(*sender));
- sender->socket = INVALID_SOCKET_HANDLE;
+ memset(sender, 0, sizeof(*sender));
+ sender->socket = INVALID_SOCKET_HANDLE;
#ifdef _WIN32
- WSADATA winsock_data;
- if (WSAStartup(MAKEWORD(2, 2), &winsock_data) != 0) {
- fprintf(stderr, "WSAStartup failed\n");
- return false;
- }
- sender->winsock_started = true;
+ WSADATA winsock_data;
+ if (WSAStartup(MAKEWORD(2, 2), &winsock_data) != 0) {
+ fprintf(stderr, "WSAStartup failed\n");
+ return false;
+ }
+ sender->winsock_started = true;
#endif
- memset(&hints, 0, sizeof(hints));
- hints.ai_family = AF_UNSPEC;
- hints.ai_socktype = SOCK_DGRAM;
- hints.ai_protocol = IPPROTO_UDP;
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_socktype = SOCK_DGRAM;
+ hints.ai_protocol = IPPROTO_UDP;
- int result = getaddrinfo(host, port, &hints, &addresses);
- if (result != 0) {
+ int result = getaddrinfo(host, port, &hints, &addresses);
+ if (result != 0) {
#ifdef _WIN32
- fprintf(stderr, "Cannot resolve UDP destination: %d\n", result);
+ fprintf(stderr, "Cannot resolve UDP destination: %d\n", result);
#else
- fprintf(stderr, "Cannot resolve UDP destination: %s\n",
- gai_strerror(result));
+ fprintf(stderr, "Cannot resolve UDP destination: %s\n",
+ gai_strerror(result));
#endif
- udp_sender_close(sender);
- return false;
- }
-
- for (candidate = addresses;
- candidate != NULL;
- candidate = candidate->ai_next) {
- sender->socket = socket(
- candidate->ai_family,
- candidate->ai_socktype,
- candidate->ai_protocol);
-
- if (sender->socket == INVALID_SOCKET_HANDLE) {
- continue;
- }
-
- if (candidate->ai_addrlen <= sizeof(sender->address)) {
- memcpy(
- &sender->address,
- candidate->ai_addr,
- candidate->ai_addrlen);
+ udp_sender_close(sender);
+ return false;
+ }
+
+ for (candidate = addresses;
+ candidate != NULL;
+ candidate = candidate->ai_next) {
+ sender->socket = socket(
+ candidate->ai_family,
+ candidate->ai_socktype,
+ candidate->ai_protocol);
+
+ if (sender->socket == INVALID_SOCKET_HANDLE) {
+ continue;
+ }
+
+ if (candidate->ai_addrlen <= sizeof(sender->address)) {
+ memcpy(
+ &sender->address,
+ candidate->ai_addr,
+ candidate->ai_addrlen);
#ifdef _WIN32
- sender->address_length = (int)candidate->ai_addrlen;
+ sender->address_length = (int)candidate->ai_addrlen;
#else
- sender->address_length = (socklen_t)candidate->ai_addrlen;
+ sender->address_length = (socklen_t)candidate->ai_addrlen;
#endif
- break;
- }
+ break;
+ }
#ifdef _WIN32
- closesocket(sender->socket);
+ closesocket(sender->socket);
#else
- close(sender->socket);
+ close(sender->socket);
#endif
- sender->socket = INVALID_SOCKET_HANDLE;
- }
+ sender->socket = INVALID_SOCKET_HANDLE;
+ }
- freeaddrinfo(addresses);
+ freeaddrinfo(addresses);
- if (sender->socket == INVALID_SOCKET_HANDLE) {
- fprintf(stderr, "Cannot create UDP socket: %d\n", socket_error_code());
- udp_sender_close(sender);
- return false;
- }
+ if (sender->socket == INVALID_SOCKET_HANDLE) {
+ fprintf(stderr, "Cannot create UDP socket: %d\n", socket_error_code());
+ udp_sender_close(sender);
+ return false;
+ }
- return true;
+ return true;
}
/* Send one complete newline-terminated CSV record as one UDP datagram. */
static bool udp_sender_send(
- const UdpSender *sender,
- const char *data,
- size_t length)
-{
+ const UdpSender* sender,
+ const char* data,
+ size_t length) {
#ifdef _WIN32
- int sent = sendto(
- sender->socket,
- data,
- (int)length,
- 0,
- (const struct sockaddr *)&sender->address,
- sender->address_length);
- bool complete = sent == (int)length;
+ int sent = sendto(
+ sender->socket,
+ data,
+ (int)length,
+ 0,
+ (const struct sockaddr*)&sender->address,
+ sender->address_length);
+ bool complete = sent == (int)length;
#else
- ssize_t sent = sendto(
- sender->socket,
- data,
- length,
- 0,
- (const struct sockaddr *)&sender->address,
- sender->address_length);
- bool complete = sent == (ssize_t)length;
+ ssize_t sent = sendto(
+ sender->socket,
+ data,
+ length,
+ 0,
+ (const struct sockaddr*)&sender->address,
+ sender->address_length);
+ bool complete = sent == (ssize_t)length;
#endif
- if (!complete) {
- fprintf(stderr, "UDP send failed: %d\n", socket_error_code());
- }
- return complete;
+ if (!complete) {
+ fprintf(stderr, "UDP send failed: %d\n", socket_error_code());
+ }
+ return complete;
}
/*
@@ -424,132 +407,129 @@ static bool udp_sender_send(
* every record so a following process or live viewer sees data immediately.
*/
static bool write_text(
- const Options *options,
- FILE *stream,
- const UdpSender *udp_sender,
- const char *text)
-{
- size_t length = strlen(text);
-
- if (options->output_kind == OUTPUT_UDP) {
- return udp_sender_send(udp_sender, text, length);
- }
-
- if (fwrite(text, 1, length, stream) != length) {
- fprintf(stderr, "Output write failed\n");
- return false;
- }
-
- if (fflush(stream) != 0) {
- fprintf(stderr, "Output flush failed\n");
- return false;
- }
- return true;
+ const Options* options,
+ FILE* stream,
+ const UdpSender* udp_sender,
+ const char* text) {
+ size_t length = strlen(text);
+
+ if (options->output_kind == OUTPUT_UDP) {
+ return udp_sender_send(udp_sender, text, length);
+ }
+
+ if (fwrite(text, 1, length, stream) != length) {
+ fprintf(stderr, "Output write failed\n");
+ return false;
+ }
+
+ if (fflush(stream) != 0) {
+ fprintf(stderr, "Output flush failed\n");
+ return false;
+ }
+ return true;
}
-int main(int argc, char **argv)
-{
- /*
- * These defaults provide a smooth live plot without placing a noticeable
- * load on the host computer.
- */
- Options options = {
- .rate_hz = 50.0,
- .sample_count = 0,
- .delay = true,
- .header = false,
- .output_kind = OUTPUT_STDOUT,
- .file_name = NULL,
- .udp_host = NULL,
- .udp_port = NULL
- };
-
- if (!parse_options(argc, argv, &options)) {
- fprintf(stderr, "Try '%s --help'.\n", argv[0]);
- return EXIT_FAILURE;
- }
-
- FILE *stream = stdout;
- UdpSender udp_sender;
- memset(&udp_sender, 0, sizeof(udp_sender));
- udp_sender.socket = INVALID_SOCKET_HANDLE;
-
- if (options.output_kind == OUTPUT_FILE) {
- /*
- * "w" starts a fresh CSV file on each invocation. Text mode provides
- * the operating system's conventional newline representation.
- */
- stream = fopen(options.file_name, "w");
- if (stream == NULL) {
- fprintf(stderr, "Cannot open '%s': %s\n",
- options.file_name, strerror(errno));
- return EXIT_FAILURE;
- }
- } else if (options.output_kind == OUTPUT_UDP) {
- if (!udp_sender_open(
- &udp_sender,
- options.udp_host,
- options.udp_port)) {
- return EXIT_FAILURE;
- }
- }
-
- bool success = true;
- if (options.header) {
- success = write_text(
- &options,
- stream,
- &udp_sender,
- "time_s,x,y,z\n");
- }
-
- /*
- * Derive time from the integer sample index rather than repeatedly adding
- * the period. This avoids an accumulating floating-point rounding error.
- */
- const double period_seconds = 1.0 / options.rate_hz;
- for (unsigned long long sample = 0;
- success &&
- (options.sample_count == 0 || sample < options.sample_count);
- ++sample) {
- double time_seconds = (double)sample * period_seconds;
- double x;
- double y;
- double z;
- generate_values(time_seconds, &x, &y, &z);
-
- char line[CSV_LINE_CAPACITY];
- int length = snprintf(
- line,
- sizeof(line),
- "%.6f,%.6f,%.6f,%.6f\n",
- time_seconds,
- x,
- y,
- z);
-
- if (length < 0 || (size_t)length >= sizeof(line)) {
- fprintf(stderr, "CSV line buffer is too small\n");
- success = false;
- break;
- }
-
- success = write_text(&options, stream, &udp_sender, line);
-
- if (success &&
- options.delay &&
- (options.sample_count == 0 ||
- sample + 1 < options.sample_count)) {
- sleep_seconds(period_seconds);
- }
- }
-
- udp_sender_close(&udp_sender);
-
- if (stream != stdout && fclose(stream) != 0) {
- fprintf(stderr, "Error while closing output file\n");
- success = false;
- }
-
- return success ? EXIT_SUCCESS : EXIT_FAILURE;
+int main(int argc, char** argv) {
+ /*
+ * These defaults provide a smooth live plot without placing a noticeable
+ * load on the host computer.
+ */
+ Options options = {
+ .rate_hz = 50.0,
+ .sample_count = 0,
+ .delay = true,
+ .header = false,
+ .output_kind = OUTPUT_STDOUT,
+ .file_name = NULL,
+ .udp_host = NULL,
+ .udp_port = NULL};
+
+ if (!parse_options(argc, argv, &options)) {
+ fprintf(stderr, "Try '%s --help'.\n", argv[0]);
+ return EXIT_FAILURE;
+ }
+
+ FILE* stream = stdout;
+ UdpSender udp_sender;
+ memset(&udp_sender, 0, sizeof(udp_sender));
+ udp_sender.socket = INVALID_SOCKET_HANDLE;
+
+ if (options.output_kind == OUTPUT_FILE) {
+ /*
+ * "w" starts a fresh CSV file on each invocation. Text mode provides
+ * the operating system's conventional newline representation.
+ */
+ stream = fopen(options.file_name, "w");
+ if (stream == NULL) {
+ fprintf(stderr, "Cannot open '%s': %s\n",
+ options.file_name, strerror(errno));
+ return EXIT_FAILURE;
+ }
+ } else if (options.output_kind == OUTPUT_UDP) {
+ if (!udp_sender_open(
+ &udp_sender,
+ options.udp_host,
+ options.udp_port)) {
+ return EXIT_FAILURE;
+ }
+ }
+
+ bool success = true;
+ if (options.header) {
+ success = write_text(
+ &options,
+ stream,
+ &udp_sender,
+ "time_s,x,y,z\n");
+ }
+
+ /*
+ * Derive time from the integer sample index rather than repeatedly adding
+ * the period. This avoids an accumulating floating-point rounding error.
+ */
+ const double period_seconds = 1.0 / options.rate_hz;
+ for (unsigned long long sample = 0;
+ success &&
+ (options.sample_count == 0 || sample < options.sample_count);
+ ++sample) {
+ double time_seconds = (double)sample * period_seconds;
+ double x;
+ double y;
+ double z;
+ generate_values(time_seconds, &x, &y, &z);
+
+ char line[CSV_LINE_CAPACITY];
+ int length = snprintf(
+ line,
+ sizeof(line),
+ "%.6f,%.6f,%.6f,%.6f\n",
+ time_seconds,
+ x,
+ y,
+ z);
+
+ if (length < 0 || (size_t)length >= sizeof(line)) {
+ fprintf(stderr, "CSV line buffer is too small\n");
+ success = false;
+ break;
+ }
+
+ success = write_text(&options, stream, &udp_sender, line);
+
+ if (success &&
+ options.delay &&
+ (options.sample_count == 0 ||
+ sample + 1 < options.sample_count)) {
+ sleep_seconds(period_seconds);
+ }
+ }
+
+ udp_sender_close(&udp_sender);
+
+ if (stream != stdout && fclose(stream) != 0) {
+ fprintf(stderr, "Error while closing output file\n");
+ success = false;
+ }
+
+ return success ? EXIT_SUCCESS : EXIT_FAILURE;
}
diff --git a/examples/DemoData_Trice/CMakeLists.txt b/examples/DemoData_Trice/CMakeLists.txt
index 9c32b5233..c9bad1242 100644
--- a/examples/DemoData_Trice/CMakeLists.txt
+++ b/examples/DemoData_Trice/CMakeLists.txt
@@ -12,6 +12,13 @@ if(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
endif()
+# The repository build matrix selects the target logging mode through the
+# existing build.sh TRICE_OFF option.
+set(TRICE_OFF 0 CACHE STRING "Compile Trice target logging out (0 or 1)")
+if(NOT TRICE_OFF MATCHES "^[01]$")
+ message(FATAL_ERROR "TRICE_OFF must be 0 or 1, got '${TRICE_OFF}'")
+endif()
+
# The project is intended to live in trice/examples/DemoData_Trice.
# Therefore the unmodified Trice target library is two levels above this file.
get_filename_component(TRICE_SOURCE_DIR
@@ -37,6 +44,7 @@ add_executable(DemoData_Trice
)
target_compile_features(DemoData_Trice PRIVATE c_std_11)
+target_compile_definitions(DemoData_Trice PRIVATE TRICE_OFF=${TRICE_OFF})
# Put the project directory first so trice.h finds this demo's triceConfig.h.
target_include_directories(DemoData_Trice PRIVATE
@@ -44,6 +52,17 @@ target_include_directories(DemoData_Trice PRIVATE
"${TRICE_SOURCE_DIR}"
)
+# Managed Bound tests provide the generated sidecar directory through a
+# compiler-independent absolute path. Normal standalone builds leave it unset.
+if(DEFINED ENV{TRICE_BIND_INCLUDE_DIR} AND NOT "$ENV{TRICE_BIND_INCLUDE_DIR}" STREQUAL "")
+ if(NOT IS_DIRECTORY "$ENV{TRICE_BIND_INCLUDE_DIR}")
+ message(FATAL_ERROR
+ "TRICE_BIND_INCLUDE_DIR is not a directory: '$ENV{TRICE_BIND_INCLUDE_DIR}'"
+ )
+ endif()
+ target_include_directories(DemoData_Trice PRIVATE "$ENV{TRICE_BIND_INCLUDE_DIR}")
+endif()
+
if(MSVC)
# C5105 originates in older Windows SDK headers, not in this project.
target_compile_options(DemoData_Trice PRIVATE /W4 /wd5105)
diff --git a/examples/DemoData_Trice/build.sh b/examples/DemoData_Trice/build.sh
index 07f23f20d..60480eb44 100755
--- a/examples/DemoData_Trice/build.sh
+++ b/examples/DemoData_Trice/build.sh
@@ -13,41 +13,32 @@ set -eu
script_dir=$(CDPATH='' cd -- "$(dirname -- "$0")" && pwd)
repo_root=$(CDPATH='' cd -- "$script_dir/../.." && pwd)
-# Track whether this build inserted generated Trice IDs. The EXIT trap only
-# cleans the repository after a successful insert, including failed builds or
-# interrupted builds.
-ids_inserted=0
-
-cleanup_after_build() {
- status=$1
- trap - EXIT INT TERM
-
- if [ "$ids_inserted" -eq 1 ]; then
- echo "cleanup: running trice clean"
- if ! bash "$repo_root/trice_cleanIDs_in_examples_and_test_folder.sh"; then
- if [ "$status" -eq 0 ]; then
- status=1
- fi
- fi
- fi
-
- exit "$status"
-}
-
-trap 'cleanup_after_build "$?"' EXIT
-trap 'cleanup_after_build 130' INT
-trap 'cleanup_after_build 143' TERM
-
-# Start from a clean repository state before generating IDs for this build.
-bash "$repo_root/trice_cleanIDs_in_examples_and_test_folder.sh"
-bash "$repo_root/trice_insertIDs_in_examples_and_test_folder.sh"
-ids_inserted=1
+# Accept the repository build-matrix option explicitly and reject misspellings
+# instead of silently producing a binary in the wrong Trice mode.
+trice_off=0
+for option; do
+ case "$option" in
+ TRICE_OFF=0) trice_off=0 ;;
+ TRICE_OFF=1) trice_off=1 ;;
+ *)
+ echo "Unsupported build option: $option (expected TRICE_OFF=0 or TRICE_OFF=1)" >&2
+ exit 2
+ ;;
+ esac
+done
+
+# Bound sources depend on generated headers but those build artifacts are not
+# committed. The shared preparation runs Bind for direct builds and respects an
+# outer test workflow that already owns the source state.
+# shellcheck source=../prepareTriceBind.sh
+. "$script_dir/../prepareTriceBind.sh"
+prepare_trice_bind_build "$repo_root"
cd "$script_dir"
# CMAKE_BUILD_TYPE is used by single-configuration generators. --config selects
# Release for multi-configuration generators such as Visual Studio.
-cmake -S . -B build
+cmake -S . -B build -DTRICE_OFF="$trice_off"
cmake --build build --config Release
cmake --install build --config Release --prefix "$script_dir"
diff --git a/examples/DemoData_Trice/src/main.c b/examples/DemoData_Trice/src/main.c
index d09957c3e..d8a17b6e4 100644
--- a/examples/DemoData_Trice/src/main.c
+++ b/examples/DemoData_Trice/src/main.c
@@ -34,6 +34,7 @@ typedef int SocketHandle;
#endif
#include "trice.h"
+#include "trice_main_c_K59380759EB9D6878.h" // trice-bind: keep as last include before this file's Trice calls
#define DEMO_PI 3.14159265358979323846
#define DEFAULT_BINARY_FILE "DemoData_Trice.bin"
@@ -49,29 +50,29 @@ uint32_t demo_plot_timestamp_10ms = 0;
* destination: a binary file, stdout, or a UDP datagram.
*/
typedef enum {
- OUTPUT_BINARY_FILE,
- OUTPUT_STDOUT,
- OUTPUT_UDP
+ OUTPUT_BINARY_FILE,
+ OUTPUT_STDOUT,
+ OUTPUT_UDP
} OutputKind;
typedef struct {
- double rate_hz;
- unsigned long long sample_count;
- bool delay;
- OutputKind output_kind;
- const char *file_name;
- const char *udp_host;
- const char *udp_port;
+ double rate_hz;
+ unsigned long long sample_count;
+ bool delay;
+ OutputKind output_kind;
+ const char* file_name;
+ const char* udp_host;
+ const char* udp_port;
} Options;
typedef struct {
- SocketHandle socket;
- struct sockaddr_storage address;
+ SocketHandle socket;
+ struct sockaddr_storage address;
#ifdef _WIN32
- int address_length;
- bool winsock_started;
+ int address_length;
+ bool winsock_started;
#else
- socklen_t address_length;
+ socklen_t address_length;
#endif
} UdpSender;
@@ -81,57 +82,53 @@ typedef struct {
*/
static bool output_failed = false;
static OutputKind active_output_kind = OUTPUT_BINARY_FILE;
-static FILE *active_stream = NULL;
+static FILE* active_stream = NULL;
static UdpSender active_udp_sender;
-static void print_usage(const char *program)
-{
- printf(
- "Usage: %s [options]\n"
- "\n"
- "Generate TCOBS-framed TRice records containing x, y, and z.\n"
- "The 32-bit target timestamp counts units of 10 ms.\n"
- "\n"
- "Output options (choose at most one):\n"
- " -o, --output FILE Write a fresh binary FILE\n"
- " --stdout Write the binary stream to stdout\n"
- " --udp HOST PORT Send one framed record per UDP datagram\n"
- " Example: --udp 127.0.0.1 9001\n"
- " Default: overwrite " DEFAULT_BINARY_FILE "\n"
- "\n"
- "Generator options:\n"
- " -r, --rate HZ Sample rate (default: 50)\n"
- " -n, --samples N Stop after N samples (default: unlimited)\n"
- " --no-delay Generate as fast as possible\n"
- " -h, --help Show this help\n",
- program
- );
+static void print_usage(const char* program) {
+ printf(
+ "Usage: %s [options]\n"
+ "\n"
+ "Generate TCOBS-framed TRice records containing x, y, and z.\n"
+ "The 32-bit target timestamp counts units of 10 ms.\n"
+ "\n"
+ "Output options (choose at most one):\n"
+ " -o, --output FILE Write a fresh binary FILE\n"
+ " --stdout Write the binary stream to stdout\n"
+ " --udp HOST PORT Send one framed record per UDP datagram\n"
+ " Example: --udp 127.0.0.1 9001\n"
+ " Default: overwrite " DEFAULT_BINARY_FILE "\n"
+ "\n"
+ "Generator options:\n"
+ " -r, --rate HZ Sample rate (default: 50)\n"
+ " -n, --samples N Stop after N samples (default: unlimited)\n"
+ " --no-delay Generate as fast as possible\n"
+ " -h, --help Show this help\n",
+ program);
}
/* Strictly parse a floating-point command-line value. */
-static bool parse_double(const char *text, double *value)
-{
- char *end = NULL;
- errno = 0;
- *value = strtod(text, &end);
- return errno == 0 && end != text && *end == '\0';
+static bool parse_double(const char* text, double* value) {
+ char* end = NULL;
+ errno = 0;
+ *value = strtod(text, &end);
+ return errno == 0 && end != text && *end == '\0';
}
/* Strictly parse the requested unsigned sample count. */
static bool parse_unsigned_long_long(
- const char *text,
- unsigned long long *value)
-{
- char *end = NULL;
-
- /* strtoull() accepts a leading minus sign, which is not useful here. */
- if (text[0] == '-') {
- return false;
- }
-
- errno = 0;
- *value = strtoull(text, &end, 10);
- return errno == 0 && end != text && *end == '\0';
+ const char* text,
+ unsigned long long* value) {
+ char* end = NULL;
+
+ /* strtoull() accepts a leading minus sign, which is not useful here. */
+ if (text[0] == '-') {
+ return false;
+ }
+
+ errno = 0;
+ *value = strtoull(text, &end, 10);
+ return errno == 0 && end != text && *end == '\0';
}
/* Ensure that an option has enough following values before advancing argv. */
@@ -139,14 +136,13 @@ static bool require_values(
int current_index,
int argument_count,
int required_count,
- const char *option)
-{
- if (current_index + required_count < argument_count) {
- return true;
- }
-
- fprintf(stderr, "Missing value for %s\n", option);
- return false;
+ const char* option) {
+ if (current_index + required_count < argument_count) {
+ return true;
+ }
+
+ fprintf(stderr, "Missing value for %s\n", option);
+ return false;
}
/*
@@ -154,94 +150,92 @@ static bool require_values(
* The default destination remains the fixed binary file unless the user
* explicitly selects one other destination.
*/
-static bool parse_options(int argc, char **argv, Options *options)
-{
- bool destination_selected = false;
-
- for (int i = 1; i < argc; ++i) {
- const char *argument = argv[i];
-
- if (strcmp(argument, "-h") == 0 ||
- strcmp(argument, "--help") == 0) {
- print_usage(argv[0]);
- exit(EXIT_SUCCESS);
- } else if (strcmp(argument, "--no-delay") == 0) {
- options->delay = false;
- } else if (strcmp(argument, "-r") == 0 ||
- strcmp(argument, "--rate") == 0) {
- if (!require_values(i, argc, 1, argument) ||
- !parse_double(argv[++i], &options->rate_hz) ||
- !isfinite(options->rate_hz) ||
- options->rate_hz <= 0.0) {
- fprintf(stderr, "Invalid sample rate\n");
- return false;
- }
- } else if (strcmp(argument, "-n") == 0 ||
- strcmp(argument, "--samples") == 0) {
- if (!require_values(i, argc, 1, argument) ||
- !parse_unsigned_long_long(
- argv[++i], &options->sample_count)) {
- fprintf(stderr, "Invalid sample count\n");
- return false;
- }
- } else if (strcmp(argument, "-o") == 0 ||
- strcmp(argument, "--output") == 0) {
- if (destination_selected) {
- fprintf(stderr, "Select only one output destination\n");
- return false;
- }
- if (!require_values(i, argc, 1, argument)) {
- return false;
- }
-
- destination_selected = true;
- options->output_kind = OUTPUT_BINARY_FILE;
- options->file_name = argv[++i];
- } else if (strcmp(argument, "--stdout") == 0) {
- if (destination_selected) {
- fprintf(stderr, "Select only one output destination\n");
- return false;
- }
-
- destination_selected = true;
- options->output_kind = OUTPUT_STDOUT;
- } else if (strcmp(argument, "--udp") == 0) {
- if (destination_selected) {
- fprintf(stderr, "Select only one output destination\n");
- return false;
- }
- if (!require_values(i, argc, 2, argument)) {
- return false;
- }
-
- destination_selected = true;
- options->output_kind = OUTPUT_UDP;
- options->udp_host = argv[++i];
- options->udp_port = argv[++i];
- } else {
- fprintf(stderr, "Unknown option: %s\n", argument);
- return false;
- }
- }
-
- return true;
+static bool parse_options(int argc, char** argv, Options* options) {
+ bool destination_selected = false;
+
+ for (int i = 1; i < argc; ++i) {
+ const char* argument = argv[i];
+
+ if (strcmp(argument, "-h") == 0 ||
+ strcmp(argument, "--help") == 0) {
+ print_usage(argv[0]);
+ exit(EXIT_SUCCESS);
+ } else if (strcmp(argument, "--no-delay") == 0) {
+ options->delay = false;
+ } else if (strcmp(argument, "-r") == 0 ||
+ strcmp(argument, "--rate") == 0) {
+ if (!require_values(i, argc, 1, argument) ||
+ !parse_double(argv[++i], &options->rate_hz) ||
+ !isfinite(options->rate_hz) ||
+ options->rate_hz <= 0.0) {
+ fprintf(stderr, "Invalid sample rate\n");
+ return false;
+ }
+ } else if (strcmp(argument, "-n") == 0 ||
+ strcmp(argument, "--samples") == 0) {
+ if (!require_values(i, argc, 1, argument) ||
+ !parse_unsigned_long_long(
+ argv[++i], &options->sample_count)) {
+ fprintf(stderr, "Invalid sample count\n");
+ return false;
+ }
+ } else if (strcmp(argument, "-o") == 0 ||
+ strcmp(argument, "--output") == 0) {
+ if (destination_selected) {
+ fprintf(stderr, "Select only one output destination\n");
+ return false;
+ }
+ if (!require_values(i, argc, 1, argument)) {
+ return false;
+ }
+
+ destination_selected = true;
+ options->output_kind = OUTPUT_BINARY_FILE;
+ options->file_name = argv[++i];
+ } else if (strcmp(argument, "--stdout") == 0) {
+ if (destination_selected) {
+ fprintf(stderr, "Select only one output destination\n");
+ return false;
+ }
+
+ destination_selected = true;
+ options->output_kind = OUTPUT_STDOUT;
+ } else if (strcmp(argument, "--udp") == 0) {
+ if (destination_selected) {
+ fprintf(stderr, "Select only one output destination\n");
+ return false;
+ }
+ if (!require_values(i, argc, 2, argument)) {
+ return false;
+ }
+
+ destination_selected = true;
+ options->output_kind = OUTPUT_UDP;
+ options->udp_host = argv[++i];
+ options->udp_port = argv[++i];
+ } else {
+ fprintf(stderr, "Unknown option: %s\n", argument);
+ return false;
+ }
+ }
+
+ return true;
}
/* Hide the Windows/POSIX sleep difference behind a seconds-based function. */
-static void sleep_seconds(double seconds)
-{
+static void sleep_seconds(double seconds) {
#ifdef _WIN32
- DWORD milliseconds = (DWORD)(seconds * 1000.0 + 0.5);
- Sleep(milliseconds > 0 ? milliseconds : 1);
+ DWORD milliseconds = (DWORD)(seconds * 1000.0 + 0.5);
+ Sleep(milliseconds > 0 ? milliseconds : 1);
#else
- struct timespec remaining;
- remaining.tv_sec = (time_t)seconds;
- remaining.tv_nsec =
- (long)((seconds - (double)remaining.tv_sec) * 1.0e9);
-
- while (nanosleep(&remaining, &remaining) != 0 && errno == EINTR) {
- /* Resume sleeping for the remaining duration after an interrupt. */
- }
+ struct timespec remaining;
+ remaining.tv_sec = (time_t)seconds;
+ remaining.tv_nsec =
+ (long)((seconds - (double)remaining.tv_sec) * 1.0e9);
+
+ while (nanosleep(&remaining, &remaining) != 0 && errno == EINTR) {
+ /* Resume sleeping for the remaining duration after an interrupt. */
+ }
#endif
}
@@ -252,173 +246,163 @@ static void sleep_seconds(double seconds)
*/
static void generate_values(
double t_seconds,
- double *x,
- double *y,
- double *z)
-{
- /*
- * Modulate y slowly so the Lissajous trace keeps changing visibly even
- * after the plot has collected enough samples to cover the full figure.
- */
- double phase_drift = (DEMO_PI / 3.0)
- * sin(2.0 * DEMO_PI * 0.04 * t_seconds);
-
- *x = sin(2.0 * DEMO_PI * 0.70 * t_seconds);
- *y = sin(2.0 * DEMO_PI * 0.91 * t_seconds
- + DEMO_PI / 2.0
- + phase_drift);
-
- double cycle_position = fmod(t_seconds, 8.0);
- double pulse = cycle_position >= 7.75 ? 0.8 : 0.0;
-
- *z = 0.6 * sin(2.0 * DEMO_PI * 0.13 * t_seconds)
- + 0.2 * *x * *y
- + pulse;
+ double* x,
+ double* y,
+ double* z) {
+ /*
+ * Modulate y slowly so the Lissajous trace keeps changing visibly even
+ * after the plot has collected enough samples to cover the full figure.
+ */
+ double phase_drift = (DEMO_PI / 3.0) * sin(2.0 * DEMO_PI * 0.04 * t_seconds);
+
+ *x = sin(2.0 * DEMO_PI * 0.70 * t_seconds);
+ *y = sin(2.0 * DEMO_PI * 0.91 * t_seconds + DEMO_PI / 2.0 + phase_drift);
+
+ double cycle_position = fmod(t_seconds, 8.0);
+ double pulse = cycle_position >= 7.75 ? 0.8 : 0.0;
+
+ *z = 0.6 * sin(2.0 * DEMO_PI * 0.13 * t_seconds) + 0.2 * *x * *y + pulse;
}
/* Return the platform-specific socket error as a printable integer. */
-static int socket_error_code(void)
-{
+static int socket_error_code(void) {
#ifdef _WIN32
- return WSAGetLastError();
+ return WSAGetLastError();
#else
- return errno;
+ return errno;
#endif
}
/* Close the UDP socket and release Winsock state when applicable. */
-static void udp_sender_close(UdpSender *sender)
-{
- if (sender->socket != INVALID_SOCKET_HANDLE) {
+static void udp_sender_close(UdpSender* sender) {
+ if (sender->socket != INVALID_SOCKET_HANDLE) {
#ifdef _WIN32
- closesocket(sender->socket);
+ closesocket(sender->socket);
#else
- close(sender->socket);
+ close(sender->socket);
#endif
- sender->socket = INVALID_SOCKET_HANDLE;
- }
+ sender->socket = INVALID_SOCKET_HANDLE;
+ }
#ifdef _WIN32
- if (sender->winsock_started) {
- WSACleanup();
- sender->winsock_started = false;
- }
+ if (sender->winsock_started) {
+ WSACleanup();
+ sender->winsock_started = false;
+ }
#endif
}
/* Resolve the destination and retain the first usable UDP address. */
static bool udp_sender_open(
- UdpSender *sender,
- const char *host,
- const char *port)
-{
- struct addrinfo hints;
- struct addrinfo *addresses = NULL;
- struct addrinfo *candidate = NULL;
+ UdpSender* sender,
+ const char* host,
+ const char* port) {
+ struct addrinfo hints;
+ struct addrinfo* addresses = NULL;
+ struct addrinfo* candidate = NULL;
- memset(sender, 0, sizeof(*sender));
- sender->socket = INVALID_SOCKET_HANDLE;
+ memset(sender, 0, sizeof(*sender));
+ sender->socket = INVALID_SOCKET_HANDLE;
#ifdef _WIN32
- WSADATA winsock_data;
- if (WSAStartup(MAKEWORD(2, 2), &winsock_data) != 0) {
- fprintf(stderr, "WSAStartup failed\n");
- return false;
- }
- sender->winsock_started = true;
+ WSADATA winsock_data;
+ if (WSAStartup(MAKEWORD(2, 2), &winsock_data) != 0) {
+ fprintf(stderr, "WSAStartup failed\n");
+ return false;
+ }
+ sender->winsock_started = true;
#endif
- memset(&hints, 0, sizeof(hints));
- hints.ai_family = AF_UNSPEC;
- hints.ai_socktype = SOCK_DGRAM;
- hints.ai_protocol = IPPROTO_UDP;
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_socktype = SOCK_DGRAM;
+ hints.ai_protocol = IPPROTO_UDP;
- int result = getaddrinfo(host, port, &hints, &addresses);
- if (result != 0) {
+ int result = getaddrinfo(host, port, &hints, &addresses);
+ if (result != 0) {
#ifdef _WIN32
- fprintf(stderr, "Cannot resolve UDP destination: %d\n", result);
+ fprintf(stderr, "Cannot resolve UDP destination: %d\n", result);
#else
- fprintf(stderr, "Cannot resolve UDP destination: %s\n",
- gai_strerror(result));
+ fprintf(stderr, "Cannot resolve UDP destination: %s\n",
+ gai_strerror(result));
#endif
- udp_sender_close(sender);
- return false;
- }
-
- for (candidate = addresses;
- candidate != NULL;
- candidate = candidate->ai_next) {
- sender->socket = socket(
- candidate->ai_family,
- candidate->ai_socktype,
- candidate->ai_protocol);
-
- if (sender->socket == INVALID_SOCKET_HANDLE) {
- continue;
- }
-
- if (candidate->ai_addrlen <= sizeof(sender->address)) {
- memcpy(
- &sender->address,
- candidate->ai_addr,
- candidate->ai_addrlen);
+ udp_sender_close(sender);
+ return false;
+ }
+
+ for (candidate = addresses;
+ candidate != NULL;
+ candidate = candidate->ai_next) {
+ sender->socket = socket(
+ candidate->ai_family,
+ candidate->ai_socktype,
+ candidate->ai_protocol);
+
+ if (sender->socket == INVALID_SOCKET_HANDLE) {
+ continue;
+ }
+
+ if (candidate->ai_addrlen <= sizeof(sender->address)) {
+ memcpy(
+ &sender->address,
+ candidate->ai_addr,
+ candidate->ai_addrlen);
#ifdef _WIN32
- sender->address_length = (int)candidate->ai_addrlen;
+ sender->address_length = (int)candidate->ai_addrlen;
#else
- sender->address_length = (socklen_t)candidate->ai_addrlen;
+ sender->address_length = (socklen_t)candidate->ai_addrlen;
#endif
- break;
- }
+ break;
+ }
#ifdef _WIN32
- closesocket(sender->socket);
+ closesocket(sender->socket);
#else
- close(sender->socket);
+ close(sender->socket);
#endif
- sender->socket = INVALID_SOCKET_HANDLE;
- }
+ sender->socket = INVALID_SOCKET_HANDLE;
+ }
- freeaddrinfo(addresses);
+ freeaddrinfo(addresses);
- if (sender->socket == INVALID_SOCKET_HANDLE) {
- fprintf(stderr, "Cannot create UDP socket: %d\n", socket_error_code());
- udp_sender_close(sender);
- return false;
- }
+ if (sender->socket == INVALID_SOCKET_HANDLE) {
+ fprintf(stderr, "Cannot create UDP socket: %d\n", socket_error_code());
+ udp_sender_close(sender);
+ return false;
+ }
- return true;
+ return true;
}
/* Send one complete TCOBS-framed TRice record in one UDP datagram. */
static bool udp_sender_send(
- const UdpSender *sender,
- const uint8_t *data,
- size_t length)
-{
+ const UdpSender* sender,
+ const uint8_t* data,
+ size_t length) {
#ifdef _WIN32
- int sent = sendto(
- sender->socket,
- (const char *)data,
- (int)length,
- 0,
- (const struct sockaddr *)&sender->address,
- sender->address_length);
- bool complete = sent == (int)length;
+ int sent = sendto(
+ sender->socket,
+ (const char*)data,
+ (int)length,
+ 0,
+ (const struct sockaddr*)&sender->address,
+ sender->address_length);
+ bool complete = sent == (int)length;
#else
- ssize_t sent = sendto(
- sender->socket,
- data,
- length,
- 0,
- (const struct sockaddr *)&sender->address,
- sender->address_length);
- bool complete = sent == (ssize_t)length;
+ ssize_t sent = sendto(
+ sender->socket,
+ data,
+ length,
+ 0,
+ (const struct sockaddr*)&sender->address,
+ sender->address_length);
+ bool complete = sent == (ssize_t)length;
#endif
- if (!complete) {
- fprintf(stderr, "UDP send failed: %d\n", socket_error_code());
- }
- return complete;
+ if (!complete) {
+ fprintf(stderr, "UDP send failed: %d\n", socket_error_code());
+ }
+ return complete;
}
/*
@@ -428,142 +412,135 @@ static bool udp_sender_send(
* complete framed record becomes one datagram, preserving its packet boundary.
*/
void TriceNonBlockingDirectWrite8Auxiliary(
- const uint8_t *encoded_data,
- size_t encoded_length)
-{
- if (output_failed) {
- return;
- }
-
- if (active_output_kind == OUTPUT_UDP) {
- output_failed = !udp_sender_send(
- &active_udp_sender,
- encoded_data,
- encoded_length);
- return;
- }
-
- if (fwrite(encoded_data, 1, encoded_length, active_stream)
- != encoded_length) {
- fprintf(stderr, "Binary output write failed\n");
- output_failed = true;
- return;
- }
-
- if (fflush(active_stream) != 0) {
- fprintf(stderr, "Binary output flush failed\n");
- output_failed = true;
- }
+ const uint8_t* encoded_data,
+ size_t encoded_length) {
+ if (output_failed) {
+ return;
+ }
+
+ if (active_output_kind == OUTPUT_UDP) {
+ output_failed = !udp_sender_send(
+ &active_udp_sender,
+ encoded_data,
+ encoded_length);
+ return;
+ }
+
+ if (fwrite(encoded_data, 1, encoded_length, active_stream) != encoded_length) {
+ fprintf(stderr, "Binary output write failed\n");
+ output_failed = true;
+ return;
+ }
+
+ if (fflush(active_stream) != 0) {
+ fprintf(stderr, "Binary output flush failed\n");
+ output_failed = true;
+ }
}
-int main(int argc, char **argv)
-{
- Options options = {
- .rate_hz = 50.0,
- .sample_count = 0,
- .delay = true,
- .output_kind = OUTPUT_BINARY_FILE,
- .file_name = DEFAULT_BINARY_FILE,
- .udp_host = NULL,
- .udp_port = NULL
- };
-
- if (!parse_options(argc, argv, &options)) {
- fprintf(stderr, "Try '%s --help'.\n", argv[0]);
- return EXIT_FAILURE;
- }
-
- memset(&active_udp_sender, 0, sizeof(active_udp_sender));
- active_udp_sender.socket = INVALID_SOCKET_HANDLE;
- active_output_kind = options.output_kind;
-
- if (options.output_kind == OUTPUT_BINARY_FILE) {
- /*
- * "wb" always creates a new file or truncates an existing one. Binary
- * mode is essential on Windows because TRice data can contain 0x0A.
- */
- active_stream = fopen(options.file_name, "wb");
- if (active_stream == NULL) {
- fprintf(stderr, "Cannot open '%s': %s\n",
- options.file_name, strerror(errno));
- return EXIT_FAILURE;
- }
- fprintf(stderr, "Writing %s\n", options.file_name);
- } else if (options.output_kind == OUTPUT_STDOUT) {
- active_stream = stdout;
+int main(int argc, char** argv) {
+ Options options = {
+ .rate_hz = 50.0,
+ .sample_count = 0,
+ .delay = true,
+ .output_kind = OUTPUT_BINARY_FILE,
+ .file_name = DEFAULT_BINARY_FILE,
+ .udp_host = NULL,
+ .udp_port = NULL};
+
+ if (!parse_options(argc, argv, &options)) {
+ fprintf(stderr, "Try '%s --help'.\n", argv[0]);
+ return EXIT_FAILURE;
+ }
+
+ memset(&active_udp_sender, 0, sizeof(active_udp_sender));
+ active_udp_sender.socket = INVALID_SOCKET_HANDLE;
+ active_output_kind = options.output_kind;
+
+ if (options.output_kind == OUTPUT_BINARY_FILE) {
+ /*
+ * "wb" always creates a new file or truncates an existing one. Binary
+ * mode is essential on Windows because TRice data can contain 0x0A.
+ */
+ active_stream = fopen(options.file_name, "wb");
+ if (active_stream == NULL) {
+ fprintf(stderr, "Cannot open '%s': %s\n",
+ options.file_name, strerror(errno));
+ return EXIT_FAILURE;
+ }
+ fprintf(stderr, "Writing %s\n", options.file_name);
+ } else if (options.output_kind == OUTPUT_STDOUT) {
+ active_stream = stdout;
#ifdef _WIN32
- /*
- * Prevent the Microsoft runtime from translating binary byte 0x0A
- * into the two-byte text sequence 0x0D 0x0A.
- */
- if (_setmode(_fileno(stdout), _O_BINARY) == -1) {
- fprintf(stderr, "Cannot switch stdout to binary mode\n");
- return EXIT_FAILURE;
- }
+ /*
+ * Prevent the Microsoft runtime from translating binary byte 0x0A
+ * into the two-byte text sequence 0x0D 0x0A.
+ */
+ if (_setmode(_fileno(stdout), _O_BINARY) == -1) {
+ fprintf(stderr, "Cannot switch stdout to binary mode\n");
+ return EXIT_FAILURE;
+ }
#endif
- } else {
- if (!udp_sender_open(
- &active_udp_sender,
- options.udp_host,
- options.udp_port)) {
- return EXIT_FAILURE;
- }
- }
-
- TriceInit();
- trice("msg:Hello LabPlot!\n");
- /*
- * Derive seconds and the 10 ms timestamp from the integer sample index.
- * Rounding to the nearest tick also gives sensible timestamps for sample
- * rates that are not exact multiples of 100 Hz.
- */
- const double period_seconds = 1.0 / options.rate_hz;
- for (unsigned long long sample = 0;
- !output_failed &&
- (options.sample_count == 0 || sample < options.sample_count);
- ++sample) {
- double time_seconds = (double)sample * period_seconds;
- double x;
- double y;
- double z;
- generate_values(time_seconds, &x, &y, &z);
-
- /*
- * Convert through uint64_t first. The final cast then gives the
- * intentional uint32_t wrap after 2^32 ticks (about 497 days).
- */
- uint64_t absolute_ticks_10ms =
- (uint64_t)(time_seconds * 100.0 + 0.5);
- demo_plot_timestamp_10ms = (uint32_t)absolute_ticks_10ms;
-
- if(absolute_ticks_10ms % 100 == 0) {
- TRice64("sig:%.1f s\n", aDouble(time_seconds));
- }
- /*#
- * aFloat() transfers the IEEE-754 float bit pattern as a 32-bit Trice
- * value. The decoder uses the three %f specifiers from til.json.
- */
- TRice("vis_demo:%f,%f,%f\n",
- aFloat((float)x),
- aFloat((float)y),
- aFloat((float)z));
-
- if (!output_failed &&
- options.delay &&
- (options.sample_count == 0 ||
- sample + 1 < options.sample_count)) {
- sleep_seconds(period_seconds);
- }
- }
-
- udp_sender_close(&active_udp_sender);
-
- if (active_stream != NULL &&
- active_stream != stdout &&
- fclose(active_stream) != 0) {
- fprintf(stderr, "Error while closing binary output file\n");
- output_failed = true;
- }
-
- return output_failed ? EXIT_FAILURE : EXIT_SUCCESS;
+ } else {
+ if (!udp_sender_open(
+ &active_udp_sender,
+ options.udp_host,
+ options.udp_port)) {
+ return EXIT_FAILURE;
+ }
+ }
+
+ TriceInit();
+ trice("msg:Hello LabPlot!\n");
+ /*
+ * Derive seconds and the 10 ms timestamp from the integer sample index.
+ * Rounding to the nearest tick also gives sensible timestamps for sample
+ * rates that are not exact multiples of 100 Hz.
+ */
+ const double period_seconds = 1.0 / options.rate_hz;
+ for (unsigned long long sample = 0;
+ !output_failed &&
+ (options.sample_count == 0 || sample < options.sample_count);
+ ++sample) {
+ double time_seconds = (double)sample * period_seconds;
+ double x;
+ double y;
+ double z;
+ generate_values(time_seconds, &x, &y, &z);
+
+ /*
+ * Convert through uint64_t first. The final cast then gives the
+ * intentional uint32_t wrap after 2^32 ticks (about 497 days).
+ */
+ uint64_t absolute_ticks_10ms =
+ (uint64_t)(time_seconds * 100.0 + 0.5);
+ demo_plot_timestamp_10ms = (uint32_t)absolute_ticks_10ms;
+
+ if (absolute_ticks_10ms % 100 == 0) {
+ TRice64("sig:%.1f s\n", aDouble(time_seconds));
+ }
+ /*#
+ * aFloat() transfers the IEEE-754 float bit pattern as a 32-bit Trice
+ * value. The decoder uses the three %f specifiers from til.json.
+ */
+ TRice("vis_demo:%f,%f,%f\n", aFloat((float)x), aFloat((float)y), aFloat((float)z));
+
+ if (!output_failed &&
+ options.delay &&
+ (options.sample_count == 0 ||
+ sample + 1 < options.sample_count)) {
+ sleep_seconds(period_seconds);
+ }
+ }
+
+ udp_sender_close(&active_udp_sender);
+
+ if (active_stream != NULL &&
+ active_stream != stdout &&
+ fclose(active_stream) != 0) {
+ fprintf(stderr, "Error while closing binary output file\n");
+ output_failed = true;
+ }
+
+ return output_failed ? EXIT_FAILURE : EXIT_SUCCESS;
}
diff --git a/examples/DemoData_Trice/triceConfig.h b/examples/DemoData_Trice/triceConfig.h
index 5f0aef419..a76a1e907 100644
--- a/examples/DemoData_Trice/triceConfig.h
+++ b/examples/DemoData_Trice/triceConfig.h
@@ -12,7 +12,7 @@
* Keep normal TRice code active. This demo already contains a fixed iD(1000)
* and a matching private til.json, so an insertion step is not required.
*/
-#define TRICE_CLEAN 1
+#define TRICE_CLEAN 0
/*
* A stack buffer is the simplest choice for this single-threaded host program.
diff --git a/examples/F030_inst/Core/Inc/triceConfig.h b/examples/F030_inst/Core/Inc/triceConfig.h
index 531cf95d5..e6adf4dd8 100644
--- a/examples/F030_inst/Core/Inc/triceConfig.h
+++ b/examples/F030_inst/Core/Inc/triceConfig.h
@@ -11,7 +11,7 @@ extern "C" {
#define TRICE_LEGACY_RPC_SUPPORT 1
//! TRICE_CLEAN, if found inside triceConfig.h, is modified by the Trice tool to silent editor warnings in the cleaned state.
-#define TRICE_CLEAN 1 // Do not define this at an other place! But you can delete this here.
+#define TRICE_CLEAN 0 // Do not define this at an other place! But you can delete this here.
extern uint32_t ms32; //! ms32 is a 32-bit millisecond counter, counting circular in steps of 1 every ms.
#include "stm32f0xx_ll_system.h"
diff --git a/examples/F030_inst/Core/Src/main.c b/examples/F030_inst/Core/Src/main.c
index 0f54d5a9b..b0f983d83 100644
--- a/examples/F030_inst/Core/Src/main.c
+++ b/examples/F030_inst/Core/Src/main.c
@@ -1,20 +1,20 @@
/* USER CODE BEGIN Header */
/**
- ******************************************************************************
- * @file : main.c
- * @brief : Main program body
- ******************************************************************************
- * @attention
- *
- * Copyright (c) 2024 STMicroelectronics.
- * All rights reserved.
- *
- * This software is licensed under terms that can be found in the LICENSE file
- * in the root directory of this software component.
- * If no LICENSE file comes with this software, it is provided AS-IS.
- *
- ******************************************************************************
- */
+ ******************************************************************************
+ * @file : main.c
+ * @brief : Main program body
+ ******************************************************************************
+ * @attention
+ *
+ * Copyright (c) 2024 STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software is licensed under terms that can be found in the LICENSE file
+ * in the root directory of this software component.
+ * If no LICENSE file comes with this software, it is provided AS-IS.
+ *
+ ******************************************************************************
+ */
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
@@ -59,247 +59,233 @@ static void MX_USART2_UART_Init(void);
/* USER CODE END 0 */
/**
- * @brief The application entry point.
- * @retval int
- */
-int main(void)
-{
+ * @brief The application entry point.
+ * @retval int
+ */
+int main(void) {
- /* USER CODE BEGIN 1 */
+ /* USER CODE BEGIN 1 */
#if !TRICE_OFF
- TriceInit(); // This so early, to allow trice logs inside interrupts from the beginning. Only needed for RTT.
- TriceHeadLine(" 𝕹𝖀𝕮𝕷𝕰𝕺-F030R8 ");
+ TriceInit(); // This so early, to allow trice logs inside interrupts from the beginning. Only needed for RTT.
+ TriceHeadLine(" 𝕹𝖀𝕮𝕷𝕰𝕺-F030R8 ");
#endif
- /* USER CODE END 1 */
+ /* USER CODE END 1 */
- /* MCU Configuration--------------------------------------------------------*/
+ /* MCU Configuration--------------------------------------------------------*/
- /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
- LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_SYSCFG);
- LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR);
+ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
+ LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_SYSCFG);
+ LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR);
- /* USER CODE BEGIN Init */
+ /* USER CODE BEGIN Init */
- /* USER CODE END Init */
+ /* USER CODE END Init */
- /* Configure the system clock */
- SystemClock_Config();
+ /* Configure the system clock */
+ SystemClock_Config();
- /* USER CODE BEGIN SysInit */
+ /* USER CODE BEGIN SysInit */
- /* USER CODE END SysInit */
+ /* USER CODE END SysInit */
- /* Initialize all configured peripherals */
- MX_GPIO_Init();
- MX_USART2_UART_Init();
- /* USER CODE BEGIN 2 */
+ /* Initialize all configured peripherals */
+ MX_GPIO_Init();
+ MX_USART2_UART_Init();
+ /* USER CODE BEGIN 2 */
#if !TRICE_OFF
- SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk; // enable SysTick interrupt
- LogTriceConfiguration();
- SomeExampleTrices(3);
+ SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk; // enable SysTick interrupt
+ LogTriceConfiguration();
+ SomeExampleTrices(3);
#endif
- /* USER CODE END 2 */
+ /* USER CODE END 2 */
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1)
- {
+ /* Infinite loop */
+ /* USER CODE BEGIN WHILE */
+ while (1) {
#if !TRICE_OFF
- static uint32_t lastMs = 0;
- if( lastMs != ms32 ){ // each ms
- lastMs = ms32;
+ static uint32_t lastMs = 0;
+ if (lastMs != ms32) { // each ms
+ lastMs = ms32;
#if TRICE_DIAGNOSTICS == 1
- static uint32_t msDiag = 0;
- msDiag++;
- if(msDiag >= 3000 ){
- msDiag = 0;
- TriceLogDiagnosticData();
- }
+ static uint32_t msDiag = 0;
+ msDiag++;
+ if (msDiag >= 3000) {
+ msDiag = 0;
+ TriceLogDiagnosticData();
+ }
#endif
- static uint32_t msCheck = 0;
- msCheck++;
- if(msCheck >= 1000 ){
- msCheck = 0;
- SomeExampleTrices(5);
- }
-
- #if (TRICE_BUFFER == TRICE_RING_BUFFER) || (TRICE_BUFFER == TRICE_DOUBLE_BUFFER)
-
- static uint32_t msTransfer = 0;
- msTransfer++;
- if(msTransfer >= 100 ){
- msTransfer = 0;
- // Serve deferred trice transfer every few ms or if TRICE_BUFFER is getting filled. With an RTOS put this in a separate task.
- // In TRICE_RING_BUFFER && TRICE_SINGLE_PACK_MODE TriceTransfer can transmit only 1 Trice per call, so call it every 1ms then.
- // In TRICE_DOUBLE_BUFFER TriceTransfer transmits one half buffer.
- TriceTransfer(); // serve deferred output
- }
- #if TRICE_RING_BUFFER_OVERFLOW_WATCH == 1
- WatchRingBufferMargins();
- #endif
-
- #endif // #if ( TRICE_BUFFER == TRICE_RING_BUFFER) || ( TRICE_BUFFER == TRICE_DOUBLE_BUFFER)
- }
-
-
- /* USER CODE END WHILE */
-
- /* USER CODE BEGIN 3 */
+ static uint32_t msCheck = 0;
+ msCheck++;
+ if (msCheck >= 1000) {
+ msCheck = 0;
+ SomeExampleTrices(5);
+ }
+
+#if (TRICE_BUFFER == TRICE_RING_BUFFER) || (TRICE_BUFFER == TRICE_DOUBLE_BUFFER)
+
+ static uint32_t msTransfer = 0;
+ msTransfer++;
+ if (msTransfer >= 100) {
+ msTransfer = 0;
+ // Serve deferred trice transfer every few ms or if TRICE_BUFFER is getting filled. With an RTOS put this in a separate task.
+ // In TRICE_RING_BUFFER && TRICE_SINGLE_PACK_MODE TriceTransfer can transmit only 1 Trice per call, so call it every 1ms then.
+ // In TRICE_DOUBLE_BUFFER TriceTransfer transmits one half buffer.
+ TriceTransfer(); // serve deferred output
+ }
+#if TRICE_RING_BUFFER_OVERFLOW_WATCH == 1
+ WatchRingBufferMargins();
+#endif
+
+#endif // #if ( TRICE_BUFFER == TRICE_RING_BUFFER) || ( TRICE_BUFFER == TRICE_DOUBLE_BUFFER)
+ }
+
+ /* USER CODE END WHILE */
+
+ /* USER CODE BEGIN 3 */
#endif // #if !TRICE_OFF
- }
- /* USER CODE END 3 */
+ }
+ /* USER CODE END 3 */
}
/**
- * @brief System Clock Configuration
- * @retval None
- */
-void SystemClock_Config(void)
-{
- LL_FLASH_SetLatency(LL_FLASH_LATENCY_1);
- while(LL_FLASH_GetLatency() != LL_FLASH_LATENCY_1)
- {
- }
- LL_RCC_HSI_Enable();
-
- /* Wait till HSI is ready */
- while(LL_RCC_HSI_IsReady() != 1)
- {
-
- }
- LL_RCC_HSI_SetCalibTrimming(16);
- LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_HSI_DIV_2, LL_RCC_PLL_MUL_8);
- LL_RCC_PLL_Enable();
-
- /* Wait till PLL is ready */
- while(LL_RCC_PLL_IsReady() != 1)
- {
-
- }
- LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1);
- LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_1);
- LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL);
-
- /* Wait till System clock is ready */
- while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL)
- {
-
- }
- LL_Init1msTick(32000000);
- LL_SetSystemCoreClock(32000000);
+ * @brief System Clock Configuration
+ * @retval None
+ */
+void SystemClock_Config(void) {
+ LL_FLASH_SetLatency(LL_FLASH_LATENCY_1);
+ while (LL_FLASH_GetLatency() != LL_FLASH_LATENCY_1) {
+ }
+ LL_RCC_HSI_Enable();
+
+ /* Wait till HSI is ready */
+ while (LL_RCC_HSI_IsReady() != 1) {
+ }
+ LL_RCC_HSI_SetCalibTrimming(16);
+ LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_HSI_DIV_2, LL_RCC_PLL_MUL_8);
+ LL_RCC_PLL_Enable();
+
+ /* Wait till PLL is ready */
+ while (LL_RCC_PLL_IsReady() != 1) {
+ }
+ LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1);
+ LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_1);
+ LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL);
+
+ /* Wait till System clock is ready */
+ while (LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL) {
+ }
+ LL_Init1msTick(32000000);
+ LL_SetSystemCoreClock(32000000);
}
/**
- * @brief USART2 Initialization Function
- * @param None
- * @retval None
- */
-static void MX_USART2_UART_Init(void)
-{
-
- /* USER CODE BEGIN USART2_Init 0 */
-
- /* USER CODE END USART2_Init 0 */
-
- LL_USART_InitTypeDef USART_InitStruct = {0};
-
- LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
-
- /* Peripheral clock enable */
- LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_USART2);
-
- LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOA);
- /**USART2 GPIO Configuration
- PA2 ------> USART2_TX
- PA3 ------> USART2_RX
- */
- GPIO_InitStruct.Pin = USART_TX_Pin;
- GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
- GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
- GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
- GPIO_InitStruct.Alternate = LL_GPIO_AF_1;
- LL_GPIO_Init(USART_TX_GPIO_Port, &GPIO_InitStruct);
-
- GPIO_InitStruct.Pin = USART_RX_Pin;
- GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
- GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
- GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
- GPIO_InitStruct.Alternate = LL_GPIO_AF_1;
- LL_GPIO_Init(USART_RX_GPIO_Port, &GPIO_InitStruct);
-
- /* USART2 interrupt Init */
- NVIC_SetPriority(USART2_IRQn, 0);
- NVIC_EnableIRQ(USART2_IRQn);
-
- /* USER CODE BEGIN USART2_Init 1 */
-
- /* USER CODE END USART2_Init 1 */
- USART_InitStruct.BaudRate = 115200;
- USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_9B;
- USART_InitStruct.StopBits = LL_USART_STOPBITS_1;
- USART_InitStruct.Parity = LL_USART_PARITY_NONE;
- USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX_RX;
- USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE;
- USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16;
- LL_USART_Init(USART2, &USART_InitStruct);
- LL_USART_DisableIT_CTS(USART2);
- LL_USART_ConfigAsyncMode(USART2);
- LL_USART_Enable(USART2);
- /* USER CODE BEGIN USART2_Init 2 */
-
- /* USER CODE END USART2_Init 2 */
-
+ * @brief USART2 Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_USART2_UART_Init(void) {
+
+ /* USER CODE BEGIN USART2_Init 0 */
+
+ /* USER CODE END USART2_Init 0 */
+
+ LL_USART_InitTypeDef USART_InitStruct = {0};
+
+ LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
+
+ /* Peripheral clock enable */
+ LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_USART2);
+
+ LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOA);
+ /**USART2 GPIO Configuration
+ PA2 ------> USART2_TX
+ PA3 ------> USART2_RX
+ */
+ GPIO_InitStruct.Pin = USART_TX_Pin;
+ GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
+ GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
+ GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
+ GPIO_InitStruct.Alternate = LL_GPIO_AF_1;
+ LL_GPIO_Init(USART_TX_GPIO_Port, &GPIO_InitStruct);
+
+ GPIO_InitStruct.Pin = USART_RX_Pin;
+ GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
+ GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
+ GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
+ GPIO_InitStruct.Alternate = LL_GPIO_AF_1;
+ LL_GPIO_Init(USART_RX_GPIO_Port, &GPIO_InitStruct);
+
+ /* USART2 interrupt Init */
+ NVIC_SetPriority(USART2_IRQn, 0);
+ NVIC_EnableIRQ(USART2_IRQn);
+
+ /* USER CODE BEGIN USART2_Init 1 */
+
+ /* USER CODE END USART2_Init 1 */
+ USART_InitStruct.BaudRate = 115200;
+ USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_9B;
+ USART_InitStruct.StopBits = LL_USART_STOPBITS_1;
+ USART_InitStruct.Parity = LL_USART_PARITY_NONE;
+ USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX_RX;
+ USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE;
+ USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16;
+ LL_USART_Init(USART2, &USART_InitStruct);
+ LL_USART_DisableIT_CTS(USART2);
+ LL_USART_ConfigAsyncMode(USART2);
+ LL_USART_Enable(USART2);
+ /* USER CODE BEGIN USART2_Init 2 */
+
+ /* USER CODE END USART2_Init 2 */
}
/**
- * @brief GPIO Initialization Function
- * @param None
- * @retval None
- */
-static void MX_GPIO_Init(void)
-{
- LL_EXTI_InitTypeDef EXTI_InitStruct = {0};
- LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
-/* USER CODE BEGIN MX_GPIO_Init_1 */
-/* USER CODE END MX_GPIO_Init_1 */
-
- /* GPIO Ports Clock Enable */
- LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOC);
- LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOF);
- LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOA);
-
- /**/
- LL_GPIO_ResetOutputPin(LD2_GPIO_Port, LD2_Pin);
-
- /**/
- LL_SYSCFG_SetEXTISource(LL_SYSCFG_EXTI_PORTC, LL_SYSCFG_EXTI_LINE13);
-
- /**/
- LL_GPIO_SetPinPull(B1_GPIO_Port, B1_Pin, LL_GPIO_PULL_NO);
-
- /**/
- LL_GPIO_SetPinMode(B1_GPIO_Port, B1_Pin, LL_GPIO_MODE_INPUT);
-
- /**/
- EXTI_InitStruct.Line_0_31 = LL_EXTI_LINE_13;
- EXTI_InitStruct.LineCommand = ENABLE;
- EXTI_InitStruct.Mode = LL_EXTI_MODE_IT;
- EXTI_InitStruct.Trigger = LL_EXTI_TRIGGER_FALLING;
- LL_EXTI_Init(&EXTI_InitStruct);
-
- /**/
- GPIO_InitStruct.Pin = LD2_Pin;
- GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
- GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
- GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
- LL_GPIO_Init(LD2_GPIO_Port, &GPIO_InitStruct);
-
-/* USER CODE BEGIN MX_GPIO_Init_2 */
-/* USER CODE END MX_GPIO_Init_2 */
+ * @brief GPIO Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_GPIO_Init(void) {
+ LL_EXTI_InitTypeDef EXTI_InitStruct = {0};
+ LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
+ /* USER CODE BEGIN MX_GPIO_Init_1 */
+ /* USER CODE END MX_GPIO_Init_1 */
+
+ /* GPIO Ports Clock Enable */
+ LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOC);
+ LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOF);
+ LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOA);
+
+ /**/
+ LL_GPIO_ResetOutputPin(LD2_GPIO_Port, LD2_Pin);
+
+ /**/
+ LL_SYSCFG_SetEXTISource(LL_SYSCFG_EXTI_PORTC, LL_SYSCFG_EXTI_LINE13);
+
+ /**/
+ LL_GPIO_SetPinPull(B1_GPIO_Port, B1_Pin, LL_GPIO_PULL_NO);
+
+ /**/
+ LL_GPIO_SetPinMode(B1_GPIO_Port, B1_Pin, LL_GPIO_MODE_INPUT);
+
+ /**/
+ EXTI_InitStruct.Line_0_31 = LL_EXTI_LINE_13;
+ EXTI_InitStruct.LineCommand = ENABLE;
+ EXTI_InitStruct.Mode = LL_EXTI_MODE_IT;
+ EXTI_InitStruct.Trigger = LL_EXTI_TRIGGER_FALLING;
+ LL_EXTI_Init(&EXTI_InitStruct);
+
+ /**/
+ GPIO_InitStruct.Pin = LD2_Pin;
+ GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
+ GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
+ GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
+ LL_GPIO_Init(LD2_GPIO_Port, &GPIO_InitStruct);
+
+ /* USER CODE BEGIN MX_GPIO_Init_2 */
+ /* USER CODE END MX_GPIO_Init_2 */
}
/* USER CODE BEGIN 4 */
@@ -307,33 +293,30 @@ static void MX_GPIO_Init(void)
/* USER CODE END 4 */
/**
- * @brief This function is executed in case of error occurrence.
- * @retval None
- */
-void Error_Handler(void)
-{
- /* USER CODE BEGIN Error_Handler_Debug */
- /* User can add his own implementation to report the HAL error return state */
- __disable_irq();
- while (1)
- {
- }
- /* USER CODE END Error_Handler_Debug */
+ * @brief This function is executed in case of error occurrence.
+ * @retval None
+ */
+void Error_Handler(void) {
+ /* USER CODE BEGIN Error_Handler_Debug */
+ /* User can add his own implementation to report the HAL error return state */
+ __disable_irq();
+ while (1) {
+ }
+ /* USER CODE END Error_Handler_Debug */
}
-#ifdef USE_FULL_ASSERT
+#ifdef USE_FULL_ASSERT
/**
- * @brief Reports the name of the source file and the source line number
- * where the assert_param error has occurred.
- * @param file: pointer to the source file name
- * @param line: assert_param error line source number
- * @retval None
- */
-void assert_failed(uint8_t *file, uint32_t line)
-{
- /* USER CODE BEGIN 6 */
- /* User can add his own implementation to report the file name and line number,
- ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
- /* USER CODE END 6 */
+ * @brief Reports the name of the source file and the source line number
+ * where the assert_param error has occurred.
+ * @param file: pointer to the source file name
+ * @param line: assert_param error line source number
+ * @retval None
+ */
+void assert_failed(uint8_t* file, uint32_t line) {
+ /* USER CODE BEGIN 6 */
+ /* User can add his own implementation to report the file name and line number,
+ ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
+ /* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */
diff --git a/examples/F030_inst/Core/Src/stm32f0xx_it.c b/examples/F030_inst/Core/Src/stm32f0xx_it.c
index b6c6ad5b0..8281e88c5 100644
--- a/examples/F030_inst/Core/Src/stm32f0xx_it.c
+++ b/examples/F030_inst/Core/Src/stm32f0xx_it.c
@@ -24,6 +24,7 @@
/* USER CODE BEGIN Includes */
#include "trice.h"
#include
+#include "trice_stm32f0xx_it_c_K0ECAFE54F6AA9E8D.h" // trice-bind: keep as last include before this file's Trice calls
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
diff --git a/examples/F030_inst/build.sh b/examples/F030_inst/build.sh
index e43c62fdd..debf09155 100755
--- a/examples/F030_inst/build.sh
+++ b/examples/F030_inst/build.sh
@@ -143,18 +143,16 @@ flags="${trice_flags[*]-}"
# 4) Run TRICE scripts
# ------------------------------------------------------------------------------
-# Always start from a cleaned state.
-#
-# This pre-clean is intentionally not guarded by ids_inserted. If it fails, the
-# script should fail immediately because the starting state is not trustworthy.
-cd "${ROOT}"
-bash "${ROOT}/trice_cleanIDs_in_examples_and_test_folder.sh"
-
-# Insert IDs before the build.
-#
-# After this command succeeds, cleanup must run trice clean on every exit path.
-bash "${ROOT}/trice_insertIDs_in_examples_and_test_folder.sh"
-ids_inserted=1
+# An outer test wrapper owns Insert/Bind preparation and exact restoration. A
+# direct user invocation keeps the historical local Insert/Clean lifecycle.
+if [ "${TRICE_ID_WORKFLOW_OWNER:-0}" = "1" ]; then
+ echo "Trice ID workflow owned by outer wrapper: ${TRICE_ID_WORKFLOW:-unknown}"
+else
+ cd "${ROOT}"
+ bash "${ROOT}/trice_cleanIDs_in_examples_and_test_folder.sh"
+ bash "${ROOT}/trice_insertIDs_in_examples_and_test_folder.sh"
+ ids_inserted=1
+fi
# ------------------------------------------------------------------------------
# 5) Load build environment and build
diff --git a/examples/G0B1_inst/Core/Inc/triceConfig.h b/examples/G0B1_inst/Core/Inc/triceConfig.h
index cd6c422aa..07597d2b7 100644
--- a/examples/G0B1_inst/Core/Inc/triceConfig.h
+++ b/examples/G0B1_inst/Core/Inc/triceConfig.h
@@ -15,7 +15,7 @@ extern "C" {
#define TRICE_SINGLE_MAX_SIZE 256
//! TRICE_CLEAN, if found inside triceConfig.h, is modified by the Trice tool to silent editor warnings in the cleaned state.
-#define TRICE_CLEAN 1 // Do not define this at an other place! But you can delete this here.
+#define TRICE_CLEAN 0 // Do not define this at an other place! But you can delete this here.
// hardware specific trice lib settings
#include "main.h"
diff --git a/examples/G0B1_inst/Core/Inc/triceCustomAliases.h b/examples/G0B1_inst/Core/Inc/triceCustomAliases.h
index bbff29b42..bfe12dad0 100644
--- a/examples/G0B1_inst/Core/Inc/triceCustomAliases.h
+++ b/examples/G0B1_inst/Core/Inc/triceCustomAliases.h
@@ -23,39 +23,39 @@
#define _DISPATCH_EXPAND(name, N) _DISPATCH_IMPL(name, N)
// Build an assertion message without a user-provided format string.
-#define ASSERT_MESSAGE_HELPER(out_var, condition_str, file_path, line_number) \
- char full_msg[512]; \
- npf_snprintf(full_msg, sizeof(full_msg), "[ASSERT] %s:%d: %s\n", \
- FILENAME(file_path), line_number, condition_str); \
+#define ASSERT_MESSAGE_HELPER(out_var, condition_str, file_path, line_number) \
+ char full_msg[512]; \
+ npf_snprintf(full_msg, sizeof(full_msg), "[ASSERT] %s:%d: %s\n", \
+ FILENAME(file_path), line_number, condition_str); \
char* out_var = full_msg
// Build an assertion message from a mandatory format string and optional values.
// The format string is part of __VA_ARGS__, so the variadic list is never empty.
#define ASSERT_FORMATTED_MESSAGE_HELPER(out_var, condition_str, file_path, line_number, ...) \
- char user_msg[256]; \
- npf_snprintf(user_msg, sizeof(user_msg), __VA_ARGS__); \
- char full_msg[512]; \
- npf_snprintf(full_msg, sizeof(full_msg), "[ASSERT] %s:%d: %s -> %s\n", \
- FILENAME(file_path), line_number, condition_str, user_msg); \
+ char user_msg[256]; \
+ npf_snprintf(user_msg, sizeof(user_msg), __VA_ARGS__); \
+ char full_msg[512]; \
+ npf_snprintf(full_msg, sizeof(full_msg), "[ASSERT] %s:%d: %s -> %s\n", \
+ FILENAME(file_path), line_number, condition_str, user_msg); \
char* out_var = full_msg
#if (defined(TRICE_CLEAN) && TRICE_CLEAN == 0) || !defined(TRICE_OFF) || TRICE_OFF == 0
// ALL calls have ID as first parameter.
-#define CUSTOM_ASSERT_IMPL(id, condition, condition_str, file, line) \
- do { \
- if (!(condition)) { \
- ASSERT_MESSAGE_HELPER(assert_msg, condition_str, file, line); \
- triceS(id, "%s", assert_msg); \
- } \
+#define CUSTOM_ASSERT_IMPL(id, condition, condition_str, file, line) \
+ do { \
+ if (!(condition)) { \
+ ASSERT_MESSAGE_HELPER(assert_msg, condition_str, file, line); \
+ TRICE_INSERT_triceS(id, "%s", assert_msg); \
+ } \
} while (0)
-#define CUSTOM_ASSERT_FORMAT_IMPL(id, condition, condition_str, file, line, ...) \
- do { \
- if (!(condition)) { \
+#define CUSTOM_ASSERT_FORMAT_IMPL(id, condition, condition_str, file, line, ...) \
+ do { \
+ if (!(condition)) { \
ASSERT_FORMATTED_MESSAGE_HELPER(assert_msg, condition_str, file, line, __VA_ARGS__); \
- triceS(id, "%s", assert_msg); \
- } \
+ TRICE_INSERT_triceS(id, "%s", assert_msg); \
+ } \
} while (0)
#define CUSTOM_PRINT(id, ...) trice(id, __VA_ARGS__)
@@ -73,8 +73,13 @@
#define CUSTOM_ASSERT_4(id, condition, ...) \
CUSTOM_ASSERT_FORMAT_IMPL(id, condition, #condition, __FILE__, __LINE__, __VA_ARGS__)
-#define CUSTOM_ASSERT(...) \
+// Route the registered simple alias at its invocation site. Insert-owned calls
+// already carry an ID, while bound calls receive the same argument from the
+// generated sidecar before the existing assertion implementation is expanded.
+#define CUSTOM_ASSERT_WITH_ID(...) \
_DISPATCH_EXPAND(CUSTOM_ASSERT, COUNT_ARGS_4(__VA_ARGS__))(__VA_ARGS__)
+#define CUSTOM_ASSERT(...) \
+ TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), CUSTOM_ASSERT_WITH_ID, __VA_ARGS__)
#else
static inline void uart2_putc(int c, void* ctx) {
@@ -87,20 +92,20 @@ static inline void uart2_putc(int c, void* ctx) {
}
// NO calls have ID, fallback to printf.
-#define CUSTOM_ASSERT_IMPL(condition, condition_str, file, line) \
- do { \
- if (!(condition)) { \
- ASSERT_MESSAGE_HELPER(assert_msg, condition_str, file, line); \
- npf_pprintf(&uart2_putc, NULL, "%s", assert_msg); \
- } \
+#define CUSTOM_ASSERT_IMPL(condition, condition_str, file, line) \
+ do { \
+ if (!(condition)) { \
+ ASSERT_MESSAGE_HELPER(assert_msg, condition_str, file, line); \
+ npf_pprintf(&uart2_putc, NULL, "%s", assert_msg); \
+ } \
} while (0)
-#define CUSTOM_ASSERT_FORMAT_IMPL(condition, condition_str, file, line, ...) \
- do { \
- if (!(condition)) { \
+#define CUSTOM_ASSERT_FORMAT_IMPL(condition, condition_str, file, line, ...) \
+ do { \
+ if (!(condition)) { \
ASSERT_FORMATTED_MESSAGE_HELPER(assert_msg, condition_str, file, line, __VA_ARGS__); \
- npf_pprintf(&uart2_putc, NULL, "%s", assert_msg); \
- } \
+ npf_pprintf(&uart2_putc, NULL, "%s", assert_msg); \
+ } \
} while (0)
#define CUSTOM_PRINT(...) npf_pprintf(&uart2_putc, NULL, __VA_ARGS__)
diff --git a/examples/G0B1_inst/Core/Src/main.c b/examples/G0B1_inst/Core/Src/main.c
index 986c1413e..f8413a27b 100644
--- a/examples/G0B1_inst/Core/Src/main.c
+++ b/examples/G0B1_inst/Core/Src/main.c
@@ -23,7 +23,8 @@
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "triceCustomAliases.h"
-#include // INT_MAX
+#include // INT_MAX
+#include "trice_main_c_KF3C2473920A6B5A0.h" // trice-bind: keep as last include before this file's Trice calls
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
@@ -54,8 +55,8 @@ int LoopCount = 0;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART2_UART_Init(void);
-void StartDefaultTask(void const * argument);
-void StartTask02(void const * argument);
+void StartDefaultTask(void const* argument);
+void StartTask02(void const* argument);
/* USER CODE BEGIN PFP */
@@ -65,270 +66,259 @@ void StartTask02(void const * argument);
/* USER CODE BEGIN 0 */
__weak int _close(void) { return -1; }
__weak int _lseek(void) { return -1; }
-__weak int _read (void) { return -1; }
+__weak int _read(void) { return -1; }
__weak int _write(void) { return -1; }
-
/* USER CODE END 0 */
/**
- * @brief The application entry point.
- * @retval int
- */
-int main(void)
-{
- /* USER CODE BEGIN 1 */
-#if !TRICE_OFF
- TriceInit(); // This so early, to allow trice logs inside interrupts from the beginning. Only needed for RTT.
- trice("Fun %x!\n", 0xadded ); // with "fixed" iD(255), 32-bit stamp, and with `\n`
- TriceHeadLine(" NUCLEO-G0B1RE ");
- LogTriceConfiguration();
- {
- char buf[] = { 0, 1, 2, 3, 4, 0xff, 0xfe, 0xfd, 0xfc };
- for( size_t i = 0; i < sizeof(buf); i++ ){
- triceX0(buf, i);
- }
- }
+ * @brief The application entry point.
+ * @retval int
+ */
+int main(void) {
+ /* USER CODE BEGIN 1 */
+#if !TRICE_OFF
+ TriceInit(); // This so early, to allow trice logs inside interrupts from the beginning. Only needed for RTT.
+ trice("Fun %x!\n", 0xadded); // with "fixed" iD(255), 32-bit stamp, and with `\n`
+ TriceHeadLine(" NUCLEO-G0B1RE ");
+ LogTriceConfiguration();
+ {
+ char buf[] = {0, 1, 2, 3, 4, 0xff, 0xfe, 0xfd, 0xfc};
+ for (size_t i = 0; i < sizeof(buf); i++) {
+ triceX0(buf, i);
+ }
+ }
#endif
- /* USER CODE END 1 */
+ /* USER CODE END 1 */
- /* MCU Configuration--------------------------------------------------------*/
+ /* MCU Configuration--------------------------------------------------------*/
- /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
- HAL_Init();
+ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
+ HAL_Init();
- /* USER CODE BEGIN Init */
+ /* USER CODE BEGIN Init */
- /* USER CODE END Init */
+ /* USER CODE END Init */
- /* Configure the system clock */
- SystemClock_Config();
+ /* Configure the system clock */
+ SystemClock_Config();
- /* USER CODE BEGIN SysInit */
+ /* USER CODE BEGIN SysInit */
- /* USER CODE END SysInit */
+ /* USER CODE END SysInit */
- /* Initialize all configured peripherals */
- MX_GPIO_Init();
- MX_USART2_UART_Init();
- /* USER CODE BEGIN 2 */
+ /* Initialize all configured peripherals */
+ MX_GPIO_Init();
+ MX_USART2_UART_Init();
+ /* USER CODE BEGIN 2 */
#if TRICE_OFF == 1 && TRICE_CLEAN == 0
-// With TRICE_OFF == 1 the custom macros fall back to the custom implementation.
-// That can work only in the TRICE_CLEAN == 0 state.
-// The custom macros cause compiler warnings, when the IDs are still inserted.
-// It makes no sense to translate with TRICE_OFF == 1 && TRICE_CLEAN == 0.
-// Therefore a 'trice clean' is needed before building the binary with TRICE_OFF == 1.
-// We silently exclude the custom macros here, to test the TRICE_OFF == 1 tanslation with and without IDs inserted.
+ // With TRICE_OFF == 1 the custom macros fall back to the custom implementation.
+ // That can work only in the TRICE_CLEAN == 0 state.
+ // The custom macros cause compiler warnings, when the IDs are still inserted.
+ // It makes no sense to translate with TRICE_OFF == 1 && TRICE_CLEAN == 0.
+ // Therefore a 'trice clean' is needed before building the binary with TRICE_OFF == 1.
+ // We silently exclude the custom macros here, to test the TRICE_OFF == 1 tanslation with and without IDs inserted.
#else // #if TRICE_OFF == 1 && TRICE_CLEAN == 0
- /* Some Custom Trice Alias Examples */
- const int theRightAnswer = 42;
- const int theFastFoundAnswer = 24;
- const char* theQuestion = "What could be the answer to the Ultimate Question of Life, the Universe, and Everything?";
-
- // Some Trice custom alias examples
- CUSTOM_PRINT("CUSTOM_PRINT example: the right answer is: %d\n", theRightAnswer);
-
- // Assert with condition
- CUSTOM_ASSERT(theFastFoundAnswer == theRightAnswer);
-
- // Assert with condition and a message: This works too, but triggers a clang compiler warning, we cannot suppress.
- //CUSTOM_ASSERT(theFastFoundAnswer == theRightAnswer, (char*)theQuestion ); // https://stackoverflow.com/questions/52692564/how-can-i-disable-format-security-error-with-clang
-
- // Assert with condition and a message and some extra message arguments
- CUSTOM_ASSERT(theFastFoundAnswer == theRightAnswer, (char*)"'%s' Am, it is %d", (char*)theQuestion, theRightAnswer);
+ /* Some Custom Trice Alias Examples */
+ const int theRightAnswer = 42;
+ const int theFastFoundAnswer = 24;
+ const char* theQuestion = "What could be the answer to the Ultimate Question of Life, the Universe, and Everything?";
+
+ // Some Trice custom alias examples
+ CUSTOM_PRINT("CUSTOM_PRINT example: the right answer is: %d\n", theRightAnswer);
+
+ // Assert with condition
+ CUSTOM_ASSERT(theFastFoundAnswer == theRightAnswer);
+
+ // Assert with condition and a message: This works too, but triggers a clang compiler warning, we cannot suppress.
+ // CUSTOM_ASSERT(theFastFoundAnswer == theRightAnswer, (char*)theQuestion ); // https://stackoverflow.com/questions/52692564/how-can-i-disable-format-security-error-with-clang
+
+ // Assert with condition and a message and some extra message arguments
+ CUSTOM_ASSERT(theFastFoundAnswer == theRightAnswer, (char*)"'%s' Am, it is %d", (char*)theQuestion, theRightAnswer);
#endif // #else // #if TRICE_OFF == 1 && TRICE_CLEAN == 0
- /* USER CODE END 2 */
-
- /* USER CODE BEGIN RTOS_MUTEX */
- /* add mutexes, ... */
- /* USER CODE END RTOS_MUTEX */
-
- /* USER CODE BEGIN RTOS_SEMAPHORES */
- /* add semaphores, ... */
- /* USER CODE END RTOS_SEMAPHORES */
-
- /* USER CODE BEGIN RTOS_TIMERS */
- /* start timers, add new ones, ... */
- /* USER CODE END RTOS_TIMERS */
-
- /* USER CODE BEGIN RTOS_QUEUES */
- /* add queues, ... */
- /* USER CODE END RTOS_QUEUES */
-
- /* Create the thread(s) */
- /* definition and creation of defaultTask */
- osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 256);
- defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);
-
- /* definition and creation of myTask02_Diagno */
- osThreadDef(myTask02_Diagno, StartTask02, osPriorityIdle, 0, 256);
- myTask02_DiagnoHandle = osThreadCreate(osThread(myTask02_Diagno), NULL);
-
- /* USER CODE BEGIN RTOS_THREADS */
- /* add threads, ... */
- /* USER CODE END RTOS_THREADS */
-
- /* Start scheduler */
- osKernelStart();
- /* We should never get here as control is now taken by the scheduler */
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1)
- {
- /* USER CODE END WHILE */
-
- /* USER CODE BEGIN 3 */
- }
- /* USER CODE END 3 */
+ /* USER CODE END 2 */
+
+ /* USER CODE BEGIN RTOS_MUTEX */
+ /* add mutexes, ... */
+ /* USER CODE END RTOS_MUTEX */
+
+ /* USER CODE BEGIN RTOS_SEMAPHORES */
+ /* add semaphores, ... */
+ /* USER CODE END RTOS_SEMAPHORES */
+
+ /* USER CODE BEGIN RTOS_TIMERS */
+ /* start timers, add new ones, ... */
+ /* USER CODE END RTOS_TIMERS */
+
+ /* USER CODE BEGIN RTOS_QUEUES */
+ /* add queues, ... */
+ /* USER CODE END RTOS_QUEUES */
+
+ /* Create the thread(s) */
+ /* definition and creation of defaultTask */
+ osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 256);
+ defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);
+
+ /* definition and creation of myTask02_Diagno */
+ osThreadDef(myTask02_Diagno, StartTask02, osPriorityIdle, 0, 256);
+ myTask02_DiagnoHandle = osThreadCreate(osThread(myTask02_Diagno), NULL);
+
+ /* USER CODE BEGIN RTOS_THREADS */
+ /* add threads, ... */
+ /* USER CODE END RTOS_THREADS */
+
+ /* Start scheduler */
+ osKernelStart();
+ /* We should never get here as control is now taken by the scheduler */
+ /* Infinite loop */
+ /* USER CODE BEGIN WHILE */
+ while (1) {
+ /* USER CODE END WHILE */
+
+ /* USER CODE BEGIN 3 */
+ }
+ /* USER CODE END 3 */
}
/**
- * @brief System Clock Configuration
- * @retval None
- */
-void SystemClock_Config(void)
-{
- /* HSI configuration and activation */
- LL_RCC_HSI_Enable();
- while(LL_RCC_HSI_IsReady() != 1)
- {
- }
-
- /* Set AHB prescaler*/
- LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1);
-
- /* Sysclk activation on the HSI */
- LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_HSI);
- while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_HSI)
- {
- }
-
- /* Set APB1 prescaler*/
- LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_1);
- /* Update CMSIS variable (which can be updated also through SystemCoreClockUpdate function) */
- LL_SetSystemCoreClock(16000000);
-
- /* Update the time base */
- if (HAL_InitTick (TICK_INT_PRIORITY) != HAL_OK)
- {
- Error_Handler();
- }
+ * @brief System Clock Configuration
+ * @retval None
+ */
+void SystemClock_Config(void) {
+ /* HSI configuration and activation */
+ LL_RCC_HSI_Enable();
+ while (LL_RCC_HSI_IsReady() != 1) {
+ }
+
+ /* Set AHB prescaler*/
+ LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1);
+
+ /* Sysclk activation on the HSI */
+ LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_HSI);
+ while (LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_HSI) {
+ }
+
+ /* Set APB1 prescaler*/
+ LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_1);
+ /* Update CMSIS variable (which can be updated also through SystemCoreClockUpdate function) */
+ LL_SetSystemCoreClock(16000000);
+
+ /* Update the time base */
+ if (HAL_InitTick(TICK_INT_PRIORITY) != HAL_OK) {
+ Error_Handler();
+ }
}
/**
- * @brief USART2 Initialization Function
- * @param None
- * @retval None
- */
-static void MX_USART2_UART_Init(void)
-{
-
- /* USER CODE BEGIN USART2_Init 0 */
-
- /* USER CODE END USART2_Init 0 */
-
- LL_USART_InitTypeDef USART_InitStruct = {0};
-
- LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
-
- LL_RCC_SetUSARTClockSource(LL_RCC_USART2_CLKSOURCE_PCLK1);
-
- /* Peripheral clock enable */
- LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_USART2);
-
- LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA);
- /**USART2 GPIO Configuration
- PA2 ------> USART2_TX
- PA3 ------> USART2_RX
- */
- GPIO_InitStruct.Pin = USART2_TX_Pin;
- GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
- GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
- GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
- GPIO_InitStruct.Alternate = LL_GPIO_AF_1;
- LL_GPIO_Init(USART2_TX_GPIO_Port, &GPIO_InitStruct);
-
- GPIO_InitStruct.Pin = USART2_RX_Pin;
- GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
- GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
- GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
- GPIO_InitStruct.Alternate = LL_GPIO_AF_1;
- LL_GPIO_Init(USART2_RX_GPIO_Port, &GPIO_InitStruct);
-
- /* USART2 interrupt Init */
- NVIC_SetPriority(USART2_LPUART2_IRQn, 3);
- NVIC_EnableIRQ(USART2_LPUART2_IRQn);
-
- /* USER CODE BEGIN USART2_Init 1 */
-
- /* USER CODE END USART2_Init 1 */
- USART_InitStruct.PrescalerValue = LL_USART_PRESCALER_DIV1;
- USART_InitStruct.BaudRate = 115200;
- USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B;
- USART_InitStruct.StopBits = LL_USART_STOPBITS_1;
- USART_InitStruct.Parity = LL_USART_PARITY_NONE;
- USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX_RX;
- USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE;
- USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16;
- LL_USART_Init(USART2, &USART_InitStruct);
- LL_USART_SetTXFIFOThreshold(USART2, LL_USART_FIFOTHRESHOLD_1_8);
- LL_USART_SetRXFIFOThreshold(USART2, LL_USART_FIFOTHRESHOLD_1_8);
- LL_USART_DisableFIFO(USART2);
- LL_USART_ConfigAsyncMode(USART2);
-
- /* USER CODE BEGIN WKUPType USART2 */
-
- /* USER CODE END WKUPType USART2 */
-
- LL_USART_Enable(USART2);
-
- /* Polling USART2 initialisation */
- while((!(LL_USART_IsActiveFlag_TEACK(USART2))) || (!(LL_USART_IsActiveFlag_REACK(USART2))))
- {
- }
- /* USER CODE BEGIN USART2_Init 2 */
-
- /* USER CODE END USART2_Init 2 */
-
+ * @brief USART2 Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_USART2_UART_Init(void) {
+
+ /* USER CODE BEGIN USART2_Init 0 */
+
+ /* USER CODE END USART2_Init 0 */
+
+ LL_USART_InitTypeDef USART_InitStruct = {0};
+
+ LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
+
+ LL_RCC_SetUSARTClockSource(LL_RCC_USART2_CLKSOURCE_PCLK1);
+
+ /* Peripheral clock enable */
+ LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_USART2);
+
+ LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA);
+ /**USART2 GPIO Configuration
+ PA2 ------> USART2_TX
+ PA3 ------> USART2_RX
+ */
+ GPIO_InitStruct.Pin = USART2_TX_Pin;
+ GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
+ GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
+ GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
+ GPIO_InitStruct.Alternate = LL_GPIO_AF_1;
+ LL_GPIO_Init(USART2_TX_GPIO_Port, &GPIO_InitStruct);
+
+ GPIO_InitStruct.Pin = USART2_RX_Pin;
+ GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
+ GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
+ GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
+ GPIO_InitStruct.Alternate = LL_GPIO_AF_1;
+ LL_GPIO_Init(USART2_RX_GPIO_Port, &GPIO_InitStruct);
+
+ /* USART2 interrupt Init */
+ NVIC_SetPriority(USART2_LPUART2_IRQn, 3);
+ NVIC_EnableIRQ(USART2_LPUART2_IRQn);
+
+ /* USER CODE BEGIN USART2_Init 1 */
+
+ /* USER CODE END USART2_Init 1 */
+ USART_InitStruct.PrescalerValue = LL_USART_PRESCALER_DIV1;
+ USART_InitStruct.BaudRate = 115200;
+ USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B;
+ USART_InitStruct.StopBits = LL_USART_STOPBITS_1;
+ USART_InitStruct.Parity = LL_USART_PARITY_NONE;
+ USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX_RX;
+ USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE;
+ USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16;
+ LL_USART_Init(USART2, &USART_InitStruct);
+ LL_USART_SetTXFIFOThreshold(USART2, LL_USART_FIFOTHRESHOLD_1_8);
+ LL_USART_SetRXFIFOThreshold(USART2, LL_USART_FIFOTHRESHOLD_1_8);
+ LL_USART_DisableFIFO(USART2);
+ LL_USART_ConfigAsyncMode(USART2);
+
+ /* USER CODE BEGIN WKUPType USART2 */
+
+ /* USER CODE END WKUPType USART2 */
+
+ LL_USART_Enable(USART2);
+
+ /* Polling USART2 initialisation */
+ while ((!(LL_USART_IsActiveFlag_TEACK(USART2))) || (!(LL_USART_IsActiveFlag_REACK(USART2)))) {
+ }
+ /* USER CODE BEGIN USART2_Init 2 */
+
+ /* USER CODE END USART2_Init 2 */
}
/**
- * @brief GPIO Initialization Function
- * @param None
- * @retval None
- */
-static void MX_GPIO_Init(void)
-{
- LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
-/* USER CODE BEGIN MX_GPIO_Init_1 */
-/* USER CODE END MX_GPIO_Init_1 */
-
- /* GPIO Ports Clock Enable */
- LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOC);
- LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOF);
- LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA);
-
- /**/
- LL_GPIO_ResetOutputPin(LED_GREEN_GPIO_Port, LED_GREEN_Pin);
-
- /**/
- GPIO_InitStruct.Pin = LED_GREEN_Pin;
- GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
- GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
- GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
- GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
- LL_GPIO_Init(LED_GREEN_GPIO_Port, &GPIO_InitStruct);
-
-/* USER CODE BEGIN MX_GPIO_Init_2 */
-/* USER CODE END MX_GPIO_Init_2 */
+ * @brief GPIO Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_GPIO_Init(void) {
+ LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
+ /* USER CODE BEGIN MX_GPIO_Init_1 */
+ /* USER CODE END MX_GPIO_Init_1 */
+
+ /* GPIO Ports Clock Enable */
+ LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOC);
+ LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOF);
+ LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA);
+
+ /**/
+ LL_GPIO_ResetOutputPin(LED_GREEN_GPIO_Port, LED_GREEN_Pin);
+
+ /**/
+ GPIO_InitStruct.Pin = LED_GREEN_Pin;
+ GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
+ GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
+ GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
+ GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
+ LL_GPIO_Init(LED_GREEN_GPIO_Port, &GPIO_InitStruct);
+
+ /* USER CODE BEGIN MX_GPIO_Init_2 */
+ /* USER CODE END MX_GPIO_Init_2 */
}
/* USER CODE BEGIN 4 */
@@ -336,120 +326,112 @@ static void MX_GPIO_Init(void)
/* USER CODE BEGIN Header_StartDefaultTask */
/**
- * @brief Function implementing the defaultTask thread.
- * @param argument: Not used
- * @retval None
- */
+ * @brief Function implementing the defaultTask thread.
+ * @param argument: Not used
+ * @retval None
+ */
/* USER CODE END Header_StartDefaultTask */
-void StartDefaultTask(void const * argument)
-{
- /* USER CODE BEGIN 5 */
- TRICE_UNUSED(argument)
- TRice("msg:StartDefaultTask\n");
+void StartDefaultTask(void const* argument) {
+ /* USER CODE BEGIN 5 */
+ TRICE_UNUSED(argument)
+ TRice("msg:StartDefaultTask\n");
#if !TRICE_OFF
- SomeExampleTrices(3);
+ SomeExampleTrices(3);
#endif
- /* Infinite loop */
- for(;;)
- {
+ /* Infinite loop */
+ for (;;) {
#if !TRICE_OFF
- static int i = 0;
- if( i++ > 2500 ){
- i = 0;
- }
- TriceCheck( i ); // this generates trice data
+ static int i = 0;
+ if (i++ > 2500) {
+ i = 0;
+ }
+ TriceCheck(i); // this generates trice data
#endif
- osDelay(50);
- }
- /* USER CODE END 5 */
+ osDelay(50);
+ }
+ /* USER CODE END 5 */
}
/* USER CODE BEGIN Header_StartTask02 */
/**
-* @brief Function implementing the myTask02_Diagno thread.
-* @param argument: Not used
-* @retval None
-*/
+ * @brief Function implementing the myTask02_Diagno thread.
+ * @param argument: Not used
+ * @retval None
+ */
/* USER CODE END Header_StartTask02 */
-void StartTask02(void const * argument)
-{
- /* USER CODE BEGIN StartTask02 */
- TRICE_UNUSED(argument)
- TRice("msg:StartTask02:Diagnostics and TriceTransfer\n" );
- /* Infinite loop */
- for(;;)
- {
+void StartTask02(void const* argument) {
+ /* USER CODE BEGIN StartTask02 */
+ TRICE_UNUSED(argument)
+ TRice("msg:StartTask02:Diagnostics and TriceTransfer\n");
+ /* Infinite loop */
+ for (;;) {
#if !TRICE_OFF
#if TRICE_DIAGNOSTICS == 1
- static int i = INT_MAX;
- if( i++ > 100 ){
- i = 0;
- TriceLogDiagnosticData();
- }
+ static int i = INT_MAX;
+ if (i++ > 100) {
+ i = 0;
+ TriceLogDiagnosticData();
+ }
#endif // #if TRICE_DIAGNOSTICS == 1
- TriceTransfer();
- osDelay(100);
+ TriceTransfer();
+ osDelay(100);
#if TRICE_BUFFER == TRICE_RING_BUFFER && TRICE_RING_BUFFER_OVERFLOW_WATCH == 1
- WatchRingBufferMargins();
+ WatchRingBufferMargins();
#endif // #if TRICE_RING_BUFFER_OVERFLOW_WATCH == 1
#endif // #if !TRICE_OFF
- }
- /* USER CODE END StartTask02 */
+ }
+ /* USER CODE END StartTask02 */
}
/**
- * @brief Period elapsed callback in non blocking mode
- * @note This function is called when TIM17 interrupt took place, inside
- * HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment
- * a global variable "uwTick" used as application time base.
- * @param htim : TIM handle
- * @retval None
- */
-void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
-{
- /* USER CODE BEGIN Callback 0 */
-
- /* USER CODE END Callback 0 */
- if (htim->Instance == TIM17) {
- HAL_IncTick();
- }
- /* USER CODE BEGIN Callback 1 */
-
- /* USER CODE END Callback 1 */
+ * @brief Period elapsed callback in non blocking mode
+ * @note This function is called when TIM17 interrupt took place, inside
+ * HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment
+ * a global variable "uwTick" used as application time base.
+ * @param htim : TIM handle
+ * @retval None
+ */
+void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* htim) {
+ /* USER CODE BEGIN Callback 0 */
+
+ /* USER CODE END Callback 0 */
+ if (htim->Instance == TIM17) {
+ HAL_IncTick();
+ }
+ /* USER CODE BEGIN Callback 1 */
+
+ /* USER CODE END Callback 1 */
}
/**
- * @brief This function is executed in case of error occurrence.
- * @retval None
- */
-void Error_Handler(void)
-{
- /* USER CODE BEGIN Error_Handler_Debug */
- /* User can add his own implementation to report the HAL error return state */
- __disable_irq();
- while (1)
- {
- }
- /* USER CODE END Error_Handler_Debug */
+ * @brief This function is executed in case of error occurrence.
+ * @retval None
+ */
+void Error_Handler(void) {
+ /* USER CODE BEGIN Error_Handler_Debug */
+ /* User can add his own implementation to report the HAL error return state */
+ __disable_irq();
+ while (1) {
+ }
+ /* USER CODE END Error_Handler_Debug */
}
-#ifdef USE_FULL_ASSERT
+#ifdef USE_FULL_ASSERT
/**
- * @brief Reports the name of the source file and the source line number
- * where the assert_param error has occurred.
- * @param file: pointer to the source file name
- * @param line: assert_param error line source number
- * @retval None
- */
-void assert_failed(uint8_t *file, uint32_t line)
-{
- /* USER CODE BEGIN 6 */
- /* User can add his own implementation to report the file name and line number,
- ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
- /* USER CODE END 6 */
+ * @brief Reports the name of the source file and the source line number
+ * where the assert_param error has occurred.
+ * @param file: pointer to the source file name
+ * @param line: assert_param error line source number
+ * @retval None
+ */
+void assert_failed(uint8_t* file, uint32_t line) {
+ /* USER CODE BEGIN 6 */
+ /* User can add his own implementation to report the file name and line number,
+ ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
+ /* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */
diff --git a/examples/G0B1_inst/Core/Src/stm32g0xx_it.c b/examples/G0B1_inst/Core/Src/stm32g0xx_it.c
index 83716381d..0846768cb 100644
--- a/examples/G0B1_inst/Core/Src/stm32g0xx_it.c
+++ b/examples/G0B1_inst/Core/Src/stm32g0xx_it.c
@@ -24,6 +24,7 @@
/* USER CODE BEGIN Includes */
#include "trice.h"
#include "triceUart.h"
+#include "trice_stm32g0xx_it_c_KD1A780551E8731F4.h" // trice-bind: keep as last include before this file's Trice calls
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
diff --git a/examples/G0B1_inst/build.sh b/examples/G0B1_inst/build.sh
index 7d4c544a6..9bc274fd1 100755
--- a/examples/G0B1_inst/build.sh
+++ b/examples/G0B1_inst/build.sh
@@ -229,28 +229,19 @@ done
# 4) Run TRICE scripts
# ------------------------------------------------------------------------------
-# Always start from a cleaned state.
-#
-# This pre-clean also helps editors show the Trice IDs cleaned state before the
-# build starts.
-#
-# This pre-clean is intentionally not guarded by ids_inserted. If it fails, the
-# script should fail immediately because the starting state is not trustworthy.
-cd "${ROOT}"
-bash "${ROOT}/trice_cleanIDs_in_examples_and_test_folder.sh"
-
-if [ "${triceOFF}" != "1" ]; then
- # Insert IDs before the normal gcc build.
- #
- # Trice is called here and not within make, to guarantee it is finished before
- # any make job starts.
- #
- # custom aliases should be excluded or without IDs, when translating with
- # TRICE_OFF=1. Therefore insert is skipped in the TRICE_OFF=1 case.
- #
- # After this command succeeds, cleanup must run trice clean on every exit path.
- bash "${ROOT}/trice_insertIDs_in_examples_and_test_folder.sh"
- ids_inserted=1
+# An outer test wrapper owns Insert/Bind preparation and exact restoration. A
+# direct user invocation keeps the historical local Insert/Clean lifecycle.
+if [ "${TRICE_ID_WORKFLOW_OWNER:-0}" = "1" ]; then
+ echo "Trice ID workflow owned by outer wrapper: ${TRICE_ID_WORKFLOW:-unknown}"
+else
+ cd "${ROOT}"
+ bash "${ROOT}/trice_cleanIDs_in_examples_and_test_folder.sh"
+
+ if [ "${triceOFF}" != "1" ]; then
+ # Custom aliases should be excluded or ID-free when TRICE_OFF is selected.
+ bash "${ROOT}/trice_insertIDs_in_examples_and_test_folder.sh"
+ ids_inserted=1
+ fi
fi
# ------------------------------------------------------------------------------
diff --git a/examples/G0B1_inst/build_with_clang.sh b/examples/G0B1_inst/build_with_clang.sh
index 9a2372da5..b36a44262 100755
--- a/examples/G0B1_inst/build_with_clang.sh
+++ b/examples/G0B1_inst/build_with_clang.sh
@@ -124,24 +124,16 @@ trap 'cleanup 143' TERM
# 3) Run TRICE scripts
# ------------------------------------------------------------------------------
-# Always start from a cleaned state.
-#
-# This pre-clean also helps editors show the Trice IDs cleaned state before the
-# build starts.
-#
-# This pre-clean is intentionally not guarded by ids_inserted. If it fails, the
-# script should fail immediately because the starting state is not trustworthy.
-cd "${ROOT}"
-bash "${ROOT}/trice_cleanIDs_in_examples_and_test_folder.sh"
-
-# Insert IDs before the build.
-#
-# Trice is called here and not within make, to guarantee it is finished before
-# any make job starts.
-#
-# After this command succeeds, cleanup must run trice clean on every exit path.
-bash "${ROOT}/trice_insertIDs_in_examples_and_test_folder.sh"
-ids_inserted=1
+# An outer test wrapper owns Insert/Bind preparation and exact restoration. A
+# direct user invocation keeps the historical local Insert/Clean lifecycle.
+if [ "${TRICE_ID_WORKFLOW_OWNER:-0}" = "1" ]; then
+ echo "Trice ID workflow owned by outer wrapper: ${TRICE_ID_WORKFLOW:-unknown}"
+else
+ cd "${ROOT}"
+ bash "${ROOT}/trice_cleanIDs_in_examples_and_test_folder.sh"
+ bash "${ROOT}/trice_insertIDs_in_examples_and_test_folder.sh"
+ ids_inserted=1
+fi
# ------------------------------------------------------------------------------
# 4) Load build environment and build
diff --git a/examples/L432_inst/Core/Inc/triceConfig.h b/examples/L432_inst/Core/Inc/triceConfig.h
index ae68c44f2..1bdbfd56e 100644
--- a/examples/L432_inst/Core/Inc/triceConfig.h
+++ b/examples/L432_inst/Core/Inc/triceConfig.h
@@ -11,7 +11,7 @@ extern "C" {
#define TRICE_LEGACY_RPC_SUPPORT 1
//! TRICE_CLEAN, if found inside triceConfig.h, is modified by the Trice tool to silent editor warnings in the cleaned state.
-#define TRICE_CLEAN 1 // Do not define this at an other place! But you can delete this here.
+#define TRICE_CLEAN 0 // Do not define this at an other place! But you can delete this here.
#include
@@ -26,6 +26,7 @@ extern volatile uint32_t* const LAR; // lock access register
void TriceHeadLine(char* name);
void LogTriceConfiguration(void);
void SomeExampleTrices(int burstCount);
+void L432LogConfigInfo(void);
#define TRICE_FULL_CHECK // enable all code inside triceCheck.c
@@ -41,7 +42,7 @@ void SomeExampleTrices(int burstCount);
#define TRICE_LEAVE_CRITICAL_SECTION } // SEGGER_RTT_UNLOCK() }
#if CONFIGURATION == 0 //////////////////////////////////////////////////////////////
-#define LogConfigInfo() trice8("dbg:CONFIGURATION == %d - An example configuration\n", CONFIGURATION);
+#define LogConfigInfo() L432LogConfigInfo()
// Windows: trice log -p jlink -args "-Device STM32L432KC" -pf none -prefix off -hs off -d16 -showID "deb:%5d" -i ../../demoTIL.json -li ../../demoLI.json
// Unix: ./RTTLogUnix.sh or manually:
@@ -59,7 +60,7 @@ void SomeExampleTrices(int burstCount);
// #undef TRICE_FULL_CHECK // disble additional code inside triceCheck.c
#elif CONFIGURATION == 1 //////////////////////////////////////////////////////////////
-#define LogConfigInfo() trice8("dbg:CONFIGURATION == %d - An example configuration\n", CONFIGURATION);
+#define LogConfigInfo() L432LogConfigInfo()
#define TRICE_DEFERRED_OUTPUT 1
#define TRICE_BUFFER TRICE_DOUBLE_BUFFER
#define TRICE_PROTECT 0
@@ -69,7 +70,7 @@ void SomeExampleTrices(int burstCount);
#define TRICE_CONFIG_WARNINGS 0
#elif CONFIGURATION == 2 //////////////////////////////////////////////////////////////
-#define LogConfigInfo() trice8("dbg:CONFIGURATION == %d - An example configuration\n", CONFIGURATION);
+#define LogConfigInfo() L432LogConfigInfo()
#define TRICE_DEFERRED_OUTPUT 1
#define TRICE_BUFFER TRICE_DOUBLE_BUFFER
#define TRICE_PROTECT 0
@@ -79,7 +80,7 @@ void SomeExampleTrices(int burstCount);
#define TRICE_CONFIG_WARNINGS 0
#elif CONFIGURATION == 3 //////////////////////////////////////////////////////////////
-#define LogConfigInfo() trice8("dbg:CONFIGURATION == %d - An example configuration\n", CONFIGURATION);
+#define LogConfigInfo() L432LogConfigInfo()
#define TRICE_DEFERRED_OUTPUT 1
#define TRICE_BUFFER TRICE_DOUBLE_BUFFER
#define TRICE_PROTECT 1
@@ -89,7 +90,7 @@ void SomeExampleTrices(int burstCount);
#define TRICE_CONFIG_WARNINGS 0
#elif CONFIGURATION == 4 //////////////////////////////////////////////////////////////
-#define LogConfigInfo() trice8("dbg:CONFIGURATION == %d - An example configuration\n", CONFIGURATION);
+#define LogConfigInfo() L432LogConfigInfo()
#define TRICE_DEFERRED_OUTPUT 1
#define TRICE_BUFFER TRICE_DOUBLE_BUFFER
#define TRICE_PROTECT 1
@@ -99,7 +100,7 @@ void SomeExampleTrices(int burstCount);
#define TRICE_CONFIG_WARNINGS 0
#elif CONFIGURATION == 5 //////////////////////////////////////////////////////////////
-#define LogConfigInfo() trice8("dbg:CONFIGURATION == %d - An example configuration\n", CONFIGURATION);
+#define LogConfigInfo() L432LogConfigInfo()
#define TRICE_DEFERRED_OUTPUT 1
#define TRICE_BUFFER TRICE_DOUBLE_BUFFER
#define TRICE_PROTECT 0
@@ -109,7 +110,7 @@ void SomeExampleTrices(int burstCount);
#define TRICE_CONFIG_WARNINGS 0
#elif CONFIGURATION == 6 //////////////////////////////////////////////////////////////
-#define LogConfigInfo() trice8("dbg:CONFIGURATION == %d - An example configuration\n", CONFIGURATION);
+#define LogConfigInfo() L432LogConfigInfo()
#define TRICE_DEFERRED_OUTPUT 1
#define TRICE_BUFFER TRICE_DOUBLE_BUFFER
#define TRICE_PROTECT 0
@@ -119,7 +120,7 @@ void SomeExampleTrices(int burstCount);
#define TRICE_CONFIG_WARNINGS 0
#elif CONFIGURATION == 7 //////////////////////////////////////////////////////////////
-#define LogConfigInfo() trice8("dbg:CONFIGURATION == %d - An example configuration\n", CONFIGURATION);
+#define LogConfigInfo() L432LogConfigInfo()
#define TRICE_DEFERRED_OUTPUT 1
#define TRICE_BUFFER TRICE_DOUBLE_BUFFER
#define TRICE_PROTECT 1
@@ -129,7 +130,7 @@ void SomeExampleTrices(int burstCount);
#define TRICE_CONFIG_WARNINGS 0
#elif CONFIGURATION == 8 //////////////////////////////////////////////////////////////
-#define LogConfigInfo() trice8("dbg:CONFIGURATION == %d - An example configuration\n", CONFIGURATION);
+#define LogConfigInfo() L432LogConfigInfo()
#define TRICE_DEFERRED_OUTPUT 1
#define TRICE_BUFFER TRICE_DOUBLE_BUFFER
#define TRICE_PROTECT 1
@@ -947,7 +948,7 @@ void SomeExampleTrices(int burstCount);
#define TRICE_DEFERRED_OUT_FRAMING TRICE_FRAMING_COBS
#elif CONFIGURATION == 97 /////////////////////////////////////////////////////////////
-#define LogConfigInfo() trice8("dbg:CONFIGURATION == %d - An example configuration with direct RTT output only and optimized for speed\n", CONFIGURATION);
+#define LogConfigInfo() L432LogConfigInfo()
#define TRICE_DIRECT_OUTPUT 1
#define TRICE_BUFFER TRICE_STACK_BUFFER
#define TRICE_PROTECT 0
@@ -957,7 +958,7 @@ void SomeExampleTrices(int burstCount);
#define TRICE_DIRECT_SEGGER_RTT_32BIT_WRITE 1
#elif CONFIGURATION == 98 /////////////////////////////////////////////////////
-#define LogConfigInfo() trice8("dbg:CONFIGURATION == %d - UART, no cycle counter, no critical sections.\n", CONFIGURATION);
+#define LogConfigInfo() L432LogConfigInfo()
#define TRICE_DEFERRED_OUTPUT 1
#define TRICE_BUFFER TRICE_DOUBLE_BUFFER
#define TRICE_PROTECT 0
@@ -974,7 +975,7 @@ void SomeExampleTrices(int burstCount);
#define TRICE_LEAVE_CRITICAL_SECTION }
#elif CONFIGURATION == 99 /////////////////////////////////////////////////////
-#define LogConfigInfo() trice8("dbg:CONFIGURATION == %d - An minimum configuration example.\n", CONFIGURATION);
+#define LogConfigInfo() L432LogConfigInfo()
#define TRICE_DEFERRED_OUTPUT 1
// #undef TriceStamp16
// #undef TriceStamp32
@@ -983,7 +984,7 @@ void SomeExampleTrices(int burstCount);
#define TRICE_BUFFER TRICE_RING_BUFFER
#elif CONFIGURATION == 100 /////////////////////////////////////////////////////
-#define LogConfigInfo() trice8("dbg:CONFIGURATION == %d - An example configuration with direct RTT output and parallel deferred UART output.\n", CONFIGURATION);
+#define LogConfigInfo() L432LogConfigInfo()
#define TRICE_DEFERRED_OUTPUT 1
#define TRICE_BUFFER TRICE_RING_BUFFER
@@ -1000,7 +1001,7 @@ void SomeExampleTrices(int burstCount);
#endif
#ifndef LogConfigInfo
-#define LogConfigInfo() trice8("dbg:CONFIGURATION == %d - An example configuration\n", CONFIGURATION);
+#define LogConfigInfo() L432LogConfigInfo()
#endif
#ifdef __cplusplus
diff --git a/examples/L432_inst/Core/Src/main.c b/examples/L432_inst/Core/Src/main.c
index df9243e10..bfc25ca2c 100644
--- a/examples/L432_inst/Core/Src/main.c
+++ b/examples/L432_inst/Core/Src/main.c
@@ -1,20 +1,20 @@
/* USER CODE BEGIN Header */
/**
- ******************************************************************************
- * @file : main.c
- * @brief : Main program body
- ******************************************************************************
- * @attention
- *
- * Copyright (c) 2023 STMicroelectronics.
- * All rights reserved.
- *
- * This software is licensed under terms that can be found in the LICENSE file
- * in the root directory of this software component.
- * If no LICENSE file comes with this software, it is provided AS-IS.
- *
- ******************************************************************************
- */
+ ******************************************************************************
+ * @file : main.c
+ * @brief : Main program body
+ ******************************************************************************
+ * @attention
+ *
+ * Copyright (c) 2023 STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software is licensed under terms that can be found in the LICENSE file
+ * in the root directory of this software component.
+ * If no LICENSE file comes with this software, it is provided AS-IS.
+ *
+ ******************************************************************************
+ */
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
@@ -23,6 +23,7 @@
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "trice.h"
+#include "trice_main_c_KA62F989E130FBE51.h" // trice-bind: keep as last include before this file's Trice calls
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
@@ -51,8 +52,8 @@ osThreadId myTask02Handle;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART2_UART_Init(void);
-void StartDefaultTask(void const * argument);
-void StartTask02(void const * argument);
+void StartDefaultTask(void const* argument);
+void StartTask02(void const* argument);
/* USER CODE BEGIN PFP */
@@ -60,264 +61,267 @@ void StartTask02(void const * argument);
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
-int _close(void); __weak int _close(void) { return -1; }
-int _lseek(void); __weak int _lseek(void) { return -1; }
-int _read (void); __weak int _read (void) { return -1; }
-int _write(void); __weak int _write(void) { return -1; }
-
-volatile uint32_t * const DWT_CONTROL = (uint32_t *) 0xE0001000;
-volatile uint32_t * const DWT_CYCCNT = (uint32_t *) 0xE0001004;
-volatile uint32_t * const DEMCR = (uint32_t *) 0xE000EDFC;
-volatile uint32_t * const LAR = (uint32_t *) 0xE0001FB0; // lock access register
+int _close(void);
+__weak int _close(void) { return -1; }
+int _lseek(void);
+__weak int _lseek(void) { return -1; }
+int _read(void);
+__weak int _read(void) { return -1; }
+int _write(void);
+__weak int _write(void) { return -1; }
+
+volatile uint32_t* const DWT_CONTROL = (uint32_t*)0xE0001000;
+volatile uint32_t* const DWT_CYCCNT = (uint32_t*)0xE0001004;
+volatile uint32_t* const DEMCR = (uint32_t*)0xE000EDFC;
+volatile uint32_t* const LAR = (uint32_t*)0xE0001FB0; // lock access register
+
+// L432LogConfigInfo keeps configuration logging in ordinary source code so
+// both inserted IDs and generated sidecar IDs use the same direct Trice sites.
+void L432LogConfigInfo(void) {
+#if CONFIGURATION == 97
+ trice8("dbg:CONFIGURATION == %d - An example configuration with direct RTT output only and optimized for speed\n", CONFIGURATION);
+#elif CONFIGURATION == 98
+ trice8("dbg:CONFIGURATION == %d - UART, no cycle counter, no critical sections.\n", CONFIGURATION);
+#elif CONFIGURATION == 99
+ trice8("dbg:CONFIGURATION == %d - An minimum configuration example.\n", CONFIGURATION);
+#elif CONFIGURATION == 100
+ trice8("dbg:CONFIGURATION == %d - An example configuration with direct RTT output and parallel deferred UART output.\n", CONFIGURATION);
+#else
+ trice8("dbg:CONFIGURATION == %d - An example configuration\n", CONFIGURATION);
+#endif
+}
/* USER CODE END 0 */
/**
- * @brief The application entry point.
- * @retval int
- */
-int main(void)
-{
+ * @brief The application entry point.
+ * @retval int
+ */
+int main(void) {
- /* USER CODE BEGIN 1 */
+ /* USER CODE BEGIN 1 */
-*DEMCR = *DEMCR | 0x01000000; // enable trace
-*LAR = 0xC5ACCE55; // <-- added unlock access to DWT (ITM, etc.)registers
-*DWT_CYCCNT = 0; // clear DWT cycle counter
-*DWT_CONTROL = *DWT_CONTROL | 1; // enable DWT cycle counter
+ *DEMCR = *DEMCR | 0x01000000; // enable trace
+ *LAR = 0xC5ACCE55; // <-- added unlock access to DWT (ITM, etc.)registers
+ *DWT_CYCCNT = 0; // clear DWT cycle counter
+ *DWT_CONTROL = *DWT_CONTROL | 1; // enable DWT cycle counter
#if !TRICE_OFF
- TriceInit(); // This so early, to allow trice logs inside interrupts from the beginning.
- TriceHeadLine(" 𝕹𝖀𝕮𝕷𝕰𝕺-L432KC ");
+ TriceInit(); // This so early, to allow trice logs inside interrupts from the beginning.
+ TriceHeadLine(" 𝕹𝖀𝕮𝕷𝕰𝕺-L432KC ");
#endif
- /* USER CODE END 1 */
+ /* USER CODE END 1 */
- /* MCU Configuration--------------------------------------------------------*/
+ /* MCU Configuration--------------------------------------------------------*/
- /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
- HAL_Init();
+ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
+ HAL_Init();
- /* USER CODE BEGIN Init */
+ /* USER CODE BEGIN Init */
- /* USER CODE END Init */
+ /* USER CODE END Init */
- /* Configure the system clock */
- SystemClock_Config();
+ /* Configure the system clock */
+ SystemClock_Config();
- /* USER CODE BEGIN SysInit */
+ /* USER CODE BEGIN SysInit */
- /* USER CODE END SysInit */
+ /* USER CODE END SysInit */
- /* Initialize all configured peripherals */
- MX_GPIO_Init();
- MX_USART2_UART_Init();
- /* USER CODE BEGIN 2 */
-#if !TRICE_OFF
- LogTriceConfiguration();
- SomeExampleTrices(3);
+ /* Initialize all configured peripherals */
+ MX_GPIO_Init();
+ MX_USART2_UART_Init();
+ /* USER CODE BEGIN 2 */
+#if !TRICE_OFF
+ LogTriceConfiguration();
+ SomeExampleTrices(3);
#endif
- /* USER CODE END 2 */
+ /* USER CODE END 2 */
- /* USER CODE BEGIN RTOS_MUTEX */
- /* add mutexes, ... */
- /* USER CODE END RTOS_MUTEX */
+ /* USER CODE BEGIN RTOS_MUTEX */
+ /* add mutexes, ... */
+ /* USER CODE END RTOS_MUTEX */
- /* USER CODE BEGIN RTOS_SEMAPHORES */
- /* add semaphores, ... */
- /* USER CODE END RTOS_SEMAPHORES */
+ /* USER CODE BEGIN RTOS_SEMAPHORES */
+ /* add semaphores, ... */
+ /* USER CODE END RTOS_SEMAPHORES */
- /* USER CODE BEGIN RTOS_TIMERS */
- /* start timers, add new ones, ... */
- /* USER CODE END RTOS_TIMERS */
+ /* USER CODE BEGIN RTOS_TIMERS */
+ /* start timers, add new ones, ... */
+ /* USER CODE END RTOS_TIMERS */
- /* USER CODE BEGIN RTOS_QUEUES */
- /* add queues, ... */
- /* USER CODE END RTOS_QUEUES */
+ /* USER CODE BEGIN RTOS_QUEUES */
+ /* add queues, ... */
+ /* USER CODE END RTOS_QUEUES */
- /* Create the thread(s) */
- /* definition and creation of defaultTask */
- osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);
- defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);
+ /* Create the thread(s) */
+ /* definition and creation of defaultTask */
+ osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);
+ defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);
- /* definition and creation of myTask02 */
- osThreadDef(myTask02, StartTask02, osPriorityIdle, 0, 128);
- myTask02Handle = osThreadCreate(osThread(myTask02), NULL);
+ /* definition and creation of myTask02 */
+ osThreadDef(myTask02, StartTask02, osPriorityIdle, 0, 128);
+ myTask02Handle = osThreadCreate(osThread(myTask02), NULL);
- /* USER CODE BEGIN RTOS_THREADS */
- /* add threads, ... */
- /* USER CODE END RTOS_THREADS */
+ /* USER CODE BEGIN RTOS_THREADS */
+ /* add threads, ... */
+ /* USER CODE END RTOS_THREADS */
- /* Start scheduler */
- osKernelStart();
+ /* Start scheduler */
+ osKernelStart();
- /* We should never get here as control is now taken by the scheduler */
+ /* We should never get here as control is now taken by the scheduler */
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1)
- {
- /* USER CODE END WHILE */
+ /* Infinite loop */
+ /* USER CODE BEGIN WHILE */
+ while (1) {
+ /* USER CODE END WHILE */
- /* USER CODE BEGIN 3 */
- }
- /* USER CODE END 3 */
+ /* USER CODE BEGIN 3 */
+ }
+ /* USER CODE END 3 */
}
/**
- * @brief System Clock Configuration
- * @retval None
- */
-void SystemClock_Config(void)
-{
- LL_FLASH_SetLatency(LL_FLASH_LATENCY_3);
- while(LL_FLASH_GetLatency()!= LL_FLASH_LATENCY_3)
- {
- }
- LL_PWR_SetRegulVoltageScaling(LL_PWR_REGU_VOLTAGE_SCALE1);
- while (LL_PWR_IsActiveFlag_VOS() != 0)
- {
- }
- LL_RCC_MSI_Enable();
-
- /* Wait till MSI is ready */
- while(LL_RCC_MSI_IsReady() != 1)
- {
-
- }
- LL_RCC_MSI_EnableRangeSelection();
- LL_RCC_MSI_SetRange(LL_RCC_MSIRANGE_6);
- LL_RCC_MSI_SetCalibTrimming(0);
- LL_PWR_EnableBkUpAccess();
- LL_RCC_LSE_SetDriveCapability(LL_RCC_LSEDRIVE_LOW);
- LL_RCC_LSE_Enable();
-
- /* Wait till LSE is ready */
- while(LL_RCC_LSE_IsReady() != 1)
- {
-
- }
- LL_RCC_MSI_EnablePLLMode();
- LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_MSI, LL_RCC_PLLM_DIV_1, 32, LL_RCC_PLLR_DIV_2);
- LL_RCC_PLL_EnableDomain_SYS();
- LL_RCC_PLL_Enable();
-
- /* Wait till PLL is ready */
- while(LL_RCC_PLL_IsReady() != 1)
- {
-
- }
- LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL);
-
- /* Wait till System clock is ready */
- while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL)
- {
-
- }
- LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1);
- LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_1);
- LL_RCC_SetAPB2Prescaler(LL_RCC_APB2_DIV_1);
- LL_SetSystemCoreClock(64000000);
-
- /* Update the time base */
- if (HAL_InitTick (TICK_INT_PRIORITY) != HAL_OK)
- {
- Error_Handler();
- }
+ * @brief System Clock Configuration
+ * @retval None
+ */
+void SystemClock_Config(void) {
+ LL_FLASH_SetLatency(LL_FLASH_LATENCY_3);
+ while (LL_FLASH_GetLatency() != LL_FLASH_LATENCY_3) {
+ }
+ LL_PWR_SetRegulVoltageScaling(LL_PWR_REGU_VOLTAGE_SCALE1);
+ while (LL_PWR_IsActiveFlag_VOS() != 0) {
+ }
+ LL_RCC_MSI_Enable();
+
+ /* Wait till MSI is ready */
+ while (LL_RCC_MSI_IsReady() != 1) {
+ }
+ LL_RCC_MSI_EnableRangeSelection();
+ LL_RCC_MSI_SetRange(LL_RCC_MSIRANGE_6);
+ LL_RCC_MSI_SetCalibTrimming(0);
+ LL_PWR_EnableBkUpAccess();
+ LL_RCC_LSE_SetDriveCapability(LL_RCC_LSEDRIVE_LOW);
+ LL_RCC_LSE_Enable();
+
+ /* Wait till LSE is ready */
+ while (LL_RCC_LSE_IsReady() != 1) {
+ }
+ LL_RCC_MSI_EnablePLLMode();
+ LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_MSI, LL_RCC_PLLM_DIV_1, 32, LL_RCC_PLLR_DIV_2);
+ LL_RCC_PLL_EnableDomain_SYS();
+ LL_RCC_PLL_Enable();
+
+ /* Wait till PLL is ready */
+ while (LL_RCC_PLL_IsReady() != 1) {
+ }
+ LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL);
+
+ /* Wait till System clock is ready */
+ while (LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL) {
+ }
+ LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1);
+ LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_1);
+ LL_RCC_SetAPB2Prescaler(LL_RCC_APB2_DIV_1);
+ LL_SetSystemCoreClock(64000000);
+
+ /* Update the time base */
+ if (HAL_InitTick(TICK_INT_PRIORITY) != HAL_OK) {
+ Error_Handler();
+ }
}
/**
- * @brief USART2 Initialization Function
- * @param None
- * @retval None
- */
-static void MX_USART2_UART_Init(void)
-{
-
- /* USER CODE BEGIN USART2_Init 0 */
-
- /* USER CODE END USART2_Init 0 */
-
- LL_USART_InitTypeDef USART_InitStruct = {0};
-
- LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
-
- LL_RCC_SetUSARTClockSource(LL_RCC_USART2_CLKSOURCE_PCLK1);
-
- /* Peripheral clock enable */
- LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_USART2);
-
- LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA);
- /**USART2 GPIO Configuration
- PA2 ------> USART2_TX
- PA15 (JTDI) ------> USART2_RX
- */
- GPIO_InitStruct.Pin = VCP_TX_Pin;
- GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
- GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
- GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
- GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
- GPIO_InitStruct.Alternate = LL_GPIO_AF_7;
- LL_GPIO_Init(VCP_TX_GPIO_Port, &GPIO_InitStruct);
-
- GPIO_InitStruct.Pin = VCP_RX_Pin;
- GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
- GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
- GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
- GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
- GPIO_InitStruct.Alternate = LL_GPIO_AF_3;
- LL_GPIO_Init(VCP_RX_GPIO_Port, &GPIO_InitStruct);
-
- /* USART2 interrupt Init */
- NVIC_SetPriority(USART2_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),5, 0));
- NVIC_EnableIRQ(USART2_IRQn);
-
- /* USER CODE BEGIN USART2_Init 1 */
-
- /* USER CODE END USART2_Init 1 */
- USART_InitStruct.BaudRate = 115200;
- USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_9B;
- USART_InitStruct.StopBits = LL_USART_STOPBITS_1;
- USART_InitStruct.Parity = LL_USART_PARITY_NONE;
- USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX_RX;
- USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE;
- USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16;
- LL_USART_Init(USART2, &USART_InitStruct);
- LL_USART_ConfigAsyncMode(USART2);
- LL_USART_Enable(USART2);
- /* USER CODE BEGIN USART2_Init 2 */
-
- /* USER CODE END USART2_Init 2 */
-
+ * @brief USART2 Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_USART2_UART_Init(void) {
+
+ /* USER CODE BEGIN USART2_Init 0 */
+
+ /* USER CODE END USART2_Init 0 */
+
+ LL_USART_InitTypeDef USART_InitStruct = {0};
+
+ LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
+
+ LL_RCC_SetUSARTClockSource(LL_RCC_USART2_CLKSOURCE_PCLK1);
+
+ /* Peripheral clock enable */
+ LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_USART2);
+
+ LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA);
+ /**USART2 GPIO Configuration
+ PA2 ------> USART2_TX
+ PA15 (JTDI) ------> USART2_RX
+ */
+ GPIO_InitStruct.Pin = VCP_TX_Pin;
+ GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
+ GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
+ GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
+ GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
+ GPIO_InitStruct.Alternate = LL_GPIO_AF_7;
+ LL_GPIO_Init(VCP_TX_GPIO_Port, &GPIO_InitStruct);
+
+ GPIO_InitStruct.Pin = VCP_RX_Pin;
+ GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
+ GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
+ GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
+ GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
+ GPIO_InitStruct.Alternate = LL_GPIO_AF_3;
+ LL_GPIO_Init(VCP_RX_GPIO_Port, &GPIO_InitStruct);
+
+ /* USART2 interrupt Init */
+ NVIC_SetPriority(USART2_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 5, 0));
+ NVIC_EnableIRQ(USART2_IRQn);
+
+ /* USER CODE BEGIN USART2_Init 1 */
+
+ /* USER CODE END USART2_Init 1 */
+ USART_InitStruct.BaudRate = 115200;
+ USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_9B;
+ USART_InitStruct.StopBits = LL_USART_STOPBITS_1;
+ USART_InitStruct.Parity = LL_USART_PARITY_NONE;
+ USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX_RX;
+ USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE;
+ USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16;
+ LL_USART_Init(USART2, &USART_InitStruct);
+ LL_USART_ConfigAsyncMode(USART2);
+ LL_USART_Enable(USART2);
+ /* USER CODE BEGIN USART2_Init 2 */
+
+ /* USER CODE END USART2_Init 2 */
}
/**
- * @brief GPIO Initialization Function
- * @param None
- * @retval None
- */
-static void MX_GPIO_Init(void)
-{
- LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
-/* USER CODE BEGIN MX_GPIO_Init_1 */
-/* USER CODE END MX_GPIO_Init_1 */
-
- /* GPIO Ports Clock Enable */
- LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOC);
- LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA);
- LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB);
-
- /**/
- LL_GPIO_ResetOutputPin(LD3_GPIO_Port, LD3_Pin);
-
- /**/
- GPIO_InitStruct.Pin = LD3_Pin;
- GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
- GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
- GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
- LL_GPIO_Init(LD3_GPIO_Port, &GPIO_InitStruct);
-
-/* USER CODE BEGIN MX_GPIO_Init_2 */
-/* USER CODE END MX_GPIO_Init_2 */
+ * @brief GPIO Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_GPIO_Init(void) {
+ LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
+ /* USER CODE BEGIN MX_GPIO_Init_1 */
+ /* USER CODE END MX_GPIO_Init_1 */
+
+ /* GPIO Ports Clock Enable */
+ LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOC);
+ LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA);
+ LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB);
+
+ /**/
+ LL_GPIO_ResetOutputPin(LD3_GPIO_Port, LD3_Pin);
+
+ /**/
+ GPIO_InitStruct.Pin = LD3_Pin;
+ GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
+ GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
+ GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
+ LL_GPIO_Init(LD3_GPIO_Port, &GPIO_InitStruct);
+
+ /* USER CODE BEGIN MX_GPIO_Init_2 */
+ /* USER CODE END MX_GPIO_Init_2 */
}
/* USER CODE BEGIN 4 */
@@ -326,117 +330,109 @@ static void MX_GPIO_Init(void)
/* USER CODE BEGIN Header_StartDefaultTask */
/**
- * @brief Function implementing the defaultTask thread.
- * @param argument: Not used
- * @retval None
- */
+ * @brief Function implementing the defaultTask thread.
+ * @param argument: Not used
+ * @retval None
+ */
/* USER CODE END Header_StartDefaultTask */
-void StartDefaultTask(void const * argument)
-{
- /* USER CODE BEGIN 5 */
- TRICE_UNUSED(argument)
- TRice("msg:StartDefaultTask\n");
- /* Infinite loop */
- for(;;)
- {
+void StartDefaultTask(void const* argument) {
+ /* USER CODE BEGIN 5 */
+ TRICE_UNUSED(argument)
+ TRice("msg:StartDefaultTask\n");
+ /* Infinite loop */
+ for (;;) {
#if !TRICE_OFF
- static int i = 0;
- if( i++ > 2500 ){
- i = 0;
- }
- TriceCheck( i ); // this generates trice data
+ static int i = 0;
+ if (i++ > 2500) {
+ i = 0;
+ }
+ TriceCheck(i); // this generates trice data
#endif
- osDelay(20);
- }
- /* USER CODE END 5 */
+ osDelay(20);
+ }
+ /* USER CODE END 5 */
}
/* USER CODE BEGIN Header_StartTask02 */
/**
-* @brief Function implementing the myTask02 thread.
-* @param argument: Not used
-* @retval None
-*/
+ * @brief Function implementing the myTask02 thread.
+ * @param argument: Not used
+ * @retval None
+ */
/* USER CODE END Header_StartTask02 */
-void StartTask02(void const * argument)
-{
- /* USER CODE BEGIN StartTask02 */
- TRICE_UNUSED(argument)
- TRice("msg:StartTask02:Diagnostics and TriceTransfer\n" );
- /* Infinite loop */
- for(;;)
- {
+void StartTask02(void const* argument) {
+ /* USER CODE BEGIN StartTask02 */
+ TRICE_UNUSED(argument)
+ TRice("msg:StartTask02:Diagnostics and TriceTransfer\n");
+ /* Infinite loop */
+ for (;;) {
#if !TRICE_OFF
#if TRICE_DIAGNOSTICS == 1
- static int i = 100;
- if( ++i >= 100 ){
- i = 0;
- TriceLogDiagnosticData();
- }
+ static int i = 100;
+ if (++i >= 100) {
+ i = 0;
+ TriceLogDiagnosticData();
+ }
#endif // #if TRICE_DIAGNOSTICS == 1
- TriceTransfer();
- osDelay(10);
+ TriceTransfer();
+ osDelay(10);
#if TRICE_BUFFER == TRICE_RING_BUFFER && TRICE_RING_BUFFER_OVERFLOW_WATCH == 1
- WatchRingBufferMargins();
+ WatchRingBufferMargins();
#endif // #if TRICE_RING_BUFFER_OVERFLOW_WATCH == 1
#endif // #if !TRICE_OFF
- }
- /* USER CODE END StartTask02 */
+ }
+ /* USER CODE END StartTask02 */
}
/**
- * @brief Period elapsed callback in non blocking mode
- * @note This function is called when TIM16 interrupt took place, inside
- * HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment
- * a global variable "uwTick" used as application time base.
- * @param htim : TIM handle
- * @retval None
- */
-void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
-{
- /* USER CODE BEGIN Callback 0 */
-
- /* USER CODE END Callback 0 */
- if (htim->Instance == TIM16) {
- HAL_IncTick();
- }
- /* USER CODE BEGIN Callback 1 */
-
- /* USER CODE END Callback 1 */
+ * @brief Period elapsed callback in non blocking mode
+ * @note This function is called when TIM16 interrupt took place, inside
+ * HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment
+ * a global variable "uwTick" used as application time base.
+ * @param htim : TIM handle
+ * @retval None
+ */
+void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* htim) {
+ /* USER CODE BEGIN Callback 0 */
+
+ /* USER CODE END Callback 0 */
+ if (htim->Instance == TIM16) {
+ HAL_IncTick();
+ }
+ /* USER CODE BEGIN Callback 1 */
+
+ /* USER CODE END Callback 1 */
}
/**
- * @brief This function is executed in case of error occurrence.
- * @retval None
- */
-void Error_Handler(void)
-{
- /* USER CODE BEGIN Error_Handler_Debug */
- /* User can add his own implementation to report the HAL error return state */
- __disable_irq();
- while (1)
- {
- }
- /* USER CODE END Error_Handler_Debug */
+ * @brief This function is executed in case of error occurrence.
+ * @retval None
+ */
+void Error_Handler(void) {
+ /* USER CODE BEGIN Error_Handler_Debug */
+ /* User can add his own implementation to report the HAL error return state */
+ __disable_irq();
+ while (1) {
+ }
+ /* USER CODE END Error_Handler_Debug */
}
-#ifdef USE_FULL_ASSERT
+#ifdef USE_FULL_ASSERT
/**
- * @brief Reports the name of the source file and the source line number
- * where the assert_param error has occurred.
- * @param file: pointer to the source file name
- * @param line: assert_param error line source number
- * @retval None
- */
-void assert_failed(uint8_t *file, uint32_t line)
-{
- /* USER CODE BEGIN 6 */
- /* User can add his own implementation to report the file name and line number,
- ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
- /* USER CODE END 6 */
+ * @brief Reports the name of the source file and the source line number
+ * where the assert_param error has occurred.
+ * @param file: pointer to the source file name
+ * @param line: assert_param error line source number
+ * @retval None
+ */
+void assert_failed(uint8_t* file, uint32_t line) {
+ /* USER CODE BEGIN 6 */
+ /* User can add his own implementation to report the file name and line number,
+ ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
+ /* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */
diff --git a/examples/L432_inst/Core/Src/stm32l4xx_it.c b/examples/L432_inst/Core/Src/stm32l4xx_it.c
index 109107538..9b49f2ecd 100644
--- a/examples/L432_inst/Core/Src/stm32l4xx_it.c
+++ b/examples/L432_inst/Core/Src/stm32l4xx_it.c
@@ -24,6 +24,7 @@
/* USER CODE BEGIN Includes */
#include "trice.h"
#include "triceUart.h"
+#include "trice_stm32l4xx_it_c_K099BA7612893E1E0.h" // trice-bind: keep as last include before this file's Trice calls
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
diff --git a/examples/L432_inst/build.sh b/examples/L432_inst/build.sh
index 26cb2e7a1..bd4a7057c 100755
--- a/examples/L432_inst/build.sh
+++ b/examples/L432_inst/build.sh
@@ -167,24 +167,16 @@ done
# 4) Run TRICE scripts
# ------------------------------------------------------------------------------
-# Always start from a cleaned state.
-#
-# This pre-clean also helps editors show the Trice IDs cleaned state before the
-# build starts.
-#
-# This pre-clean is intentionally not guarded by ids_inserted. If it fails, the
-# script should fail immediately because the starting state is not trustworthy.
-cd "${ROOT}"
-bash "${ROOT}/trice_cleanIDs_in_examples_and_test_folder.sh"
-
-# Insert IDs before the gcc build.
-#
-# Trice is called here and not within make, to guarantee it is finished before
-# any make job starts.
-#
-# After this command succeeds, cleanup must run trice clean on every exit path.
-bash "${ROOT}/trice_insertIDs_in_examples_and_test_folder.sh"
-ids_inserted=1
+# An outer test wrapper owns Insert/Bind preparation and exact restoration. A
+# direct user invocation keeps the historical local Insert/Clean lifecycle.
+if [ "${TRICE_ID_WORKFLOW_OWNER:-0}" = "1" ]; then
+ echo "Trice ID workflow owned by outer wrapper: ${TRICE_ID_WORKFLOW:-unknown}"
+else
+ cd "${ROOT}"
+ bash "${ROOT}/trice_cleanIDs_in_examples_and_test_folder.sh"
+ bash "${ROOT}/trice_insertIDs_in_examples_and_test_folder.sh"
+ ids_inserted=1
+fi
# ------------------------------------------------------------------------------
# 5) Load build environment and build
diff --git a/examples/TriceAbc/BcSim/BcSim.c b/examples/TriceAbc/BcSim/BcSim.c
index 7c65e96e2..49d6eb294 100644
--- a/examples/TriceAbc/BcSim/BcSim.c
+++ b/examples/TriceAbc/BcSim/BcSim.c
@@ -64,14 +64,14 @@
/* Sleep helper used while waiting for the writer lock directory. */
static void bcSimSleepMs(unsigned ms) {
#if defined(_WIN32)
- /* Sleep() takes milliseconds directly. */
- Sleep((DWORD)ms);
+ /* Sleep() takes milliseconds directly. */
+ Sleep((DWORD)ms);
#else
- /* nanosleep() takes seconds plus nanoseconds. */
- struct timespec ts;
- ts.tv_sec = (time_t)(ms / 1000u);
- ts.tv_nsec = (long)((ms % 1000u) * 1000000u);
- (void)nanosleep(&ts, 0);
+ /* nanosleep() takes seconds plus nanoseconds. */
+ struct timespec ts;
+ ts.tv_sec = (time_t)(ms / 1000u);
+ ts.tv_nsec = (long)((ms % 1000u) * 1000000u);
+ (void)nanosleep(&ts, 0);
#endif
}
@@ -83,19 +83,19 @@ static void bcSimSleepMs(unsigned ms) {
* strings guaranteed zero-terminated.
*/
static int bcSimCopyString(char* dst, size_t dstSize, const char* src) {
- size_t n;
- if (dst == 0 || dstSize == 0u) {
- return BCSIM_ERR_ARG;
- }
- if (src == 0) {
- src = "";
- }
- n = strlen(src);
- if (n >= dstSize) {
- return BCSIM_ERR_PATH_TOO_LONG;
- }
- memcpy(dst, src, n + 1u);
- return BCSIM_OK;
+ size_t n;
+ if (dst == 0 || dstSize == 0u) {
+ return BCSIM_ERR_ARG;
+ }
+ if (src == 0) {
+ src = "";
+ }
+ n = strlen(src);
+ if (n >= dstSize) {
+ return BCSIM_ERR_PATH_TOO_LONG;
+ }
+ memcpy(dst, src, n + 1u);
+ return BCSIM_OK;
}
/*
@@ -110,15 +110,15 @@ static int bcSimCopyString(char* dst, size_t dstSize, const char* src) {
* locks.
*/
static int bcSimMakeLockPath(char* dst, size_t dstSize, const char* busPath) {
- int n;
- if (dst == 0 || dstSize == 0u || busPath == 0 || busPath[0] == 0) {
- return BCSIM_ERR_ARG;
- }
- n = snprintf(dst, dstSize, "%s.lock", busPath);
- if (n < 0 || (size_t)n >= dstSize) {
- return BCSIM_ERR_PATH_TOO_LONG;
- }
- return BCSIM_OK;
+ int n;
+ if (dst == 0 || dstSize == 0u || busPath == 0 || busPath[0] == 0) {
+ return BCSIM_ERR_ARG;
+ }
+ n = snprintf(dst, dstSize, "%s.lock", busPath);
+ if (n < 0 || (size_t)n >= dstSize) {
+ return BCSIM_ERR_PATH_TOO_LONG;
+ }
+ return BCSIM_OK;
}
/*
@@ -128,34 +128,34 @@ static int bcSimMakeLockPath(char* dst, size_t dstSize, const char* busPath) {
* work naturally before the first writer has created the bus file.
*/
static int bcSimFileSize(const char* path, uint64_t* size) {
- FILE* f;
- long pos;
-
- if (path == 0 || path[0] == 0 || size == 0) {
- return BCSIM_ERR_ARG;
- }
-
- f = fopen(path, "rb");
- if (f == 0) {
- if (errno == ENOENT) {
- *size = 0u;
- return BCSIM_OK;
- }
- return BCSIM_ERR_IO;
- }
-
- /* Use fseek/ftell to stay simple and portable for local demo files. */
- if (fseek(f, 0, SEEK_END) != 0) {
- (void)fclose(f);
- return BCSIM_ERR_IO;
- }
- pos = ftell(f);
- (void)fclose(f);
- if (pos < 0) {
- return BCSIM_ERR_IO;
- }
- *size = (uint64_t)pos;
- return BCSIM_OK;
+ FILE* f;
+ long pos;
+
+ if (path == 0 || path[0] == 0 || size == 0) {
+ return BCSIM_ERR_ARG;
+ }
+
+ f = fopen(path, "rb");
+ if (f == 0) {
+ if (errno == ENOENT) {
+ *size = 0u;
+ return BCSIM_OK;
+ }
+ return BCSIM_ERR_IO;
+ }
+
+ /* Use fseek/ftell to stay simple and portable for local demo files. */
+ if (fseek(f, 0, SEEK_END) != 0) {
+ (void)fclose(f);
+ return BCSIM_ERR_IO;
+ }
+ pos = ftell(f);
+ (void)fclose(f);
+ if (pos < 0) {
+ return BCSIM_ERR_IO;
+ }
+ *size = (uint64_t)pos;
+ return BCSIM_OK;
}
/*
@@ -165,18 +165,18 @@ static int bcSimFileSize(const char* path, uint64_t* size) {
* bytes are written here.
*/
static int bcSimTouchFile(const char* path) {
- FILE* f;
- if (path == 0 || path[0] == 0) {
- return BCSIM_OK;
- }
- f = fopen(path, "ab");
- if (f == 0) {
- return BCSIM_ERR_IO;
- }
- if (fclose(f) != 0) {
- return BCSIM_ERR_IO;
- }
- return BCSIM_OK;
+ FILE* f;
+ if (path == 0 || path[0] == 0) {
+ return BCSIM_OK;
+ }
+ f = fopen(path, "ab");
+ if (f == 0) {
+ return BCSIM_ERR_IO;
+ }
+ if (fclose(f) != 0) {
+ return BCSIM_ERR_IO;
+ }
+ return BCSIM_OK;
}
/*
@@ -188,25 +188,25 @@ static int bcSimTouchFile(const char* path) {
* Windows locking code in the public design.
*/
static int bcSimLock(const BcSim_t* io) {
- unsigned waited = 0u;
-
- if (io == 0 || io->lockPath[0] == 0) {
- return BCSIM_ERR_ARG;
- }
-
- for (;;) {
- if (BCSIM_MKDIR(io->lockPath) == 0) {
- return BCSIM_OK;
- }
- if (errno != EEXIST) {
- return BCSIM_ERR_LOCK;
- }
- if (waited >= BCSIM_LOCK_WAIT_MS) {
- return BCSIM_ERR_LOCK_TIMEOUT;
- }
- bcSimSleepMs(BCSIM_LOCK_POLL_MS);
- waited += BCSIM_LOCK_POLL_MS;
- }
+ unsigned waited = 0u;
+
+ if (io == 0 || io->lockPath[0] == 0) {
+ return BCSIM_ERR_ARG;
+ }
+
+ for (;;) {
+ if (BCSIM_MKDIR(io->lockPath) == 0) {
+ return BCSIM_OK;
+ }
+ if (errno != EEXIST) {
+ return BCSIM_ERR_LOCK;
+ }
+ if (waited >= BCSIM_LOCK_WAIT_MS) {
+ return BCSIM_ERR_LOCK_TIMEOUT;
+ }
+ bcSimSleepMs(BCSIM_LOCK_POLL_MS);
+ waited += BCSIM_LOCK_POLL_MS;
+ }
}
/*
@@ -217,13 +217,13 @@ static int bcSimLock(const BcSim_t* io) {
* unexpected error.
*/
static int bcSimUnlock(const BcSim_t* io) {
- if (io == 0 || io->lockPath[0] == 0) {
- return BCSIM_ERR_ARG;
- }
- if (BCSIM_RMDIR(io->lockPath) != 0) {
- return BCSIM_ERR_LOCK;
- }
- return BCSIM_OK;
+ if (io == 0 || io->lockPath[0] == 0) {
+ return BCSIM_ERR_ARG;
+ }
+ if (BCSIM_RMDIR(io->lockPath) != 0) {
+ return BCSIM_ERR_LOCK;
+ }
+ return BCSIM_OK;
}
/*
@@ -233,30 +233,30 @@ static int bcSimUnlock(const BcSim_t* io) {
* again for self-echo filtering and can be removed from the fixed table.
*/
static void bcSimPruneOwnRanges(BcSim_t* io) {
- unsigned r = 0u;
- unsigned w = 0u;
-
- while (r < io->ownCount) {
- if (io->own[r].to > io->readOffset) {
- if (w != r) {
- io->own[w] = io->own[r];
- }
- ++w;
- }
- ++r;
- }
- io->ownCount = w;
+ unsigned r = 0u;
+ unsigned w = 0u;
+
+ while (r < io->ownCount) {
+ if (io->own[r].to > io->readOffset) {
+ if (w != r) {
+ io->own[w] = io->own[r];
+ }
+ ++w;
+ }
+ ++r;
+ }
+ io->ownCount = w;
}
/* Find the own range that contains offset, or return -1 if the offset is foreign. */
static int bcSimFindOwnRangeAt(const BcSim_t* io, uint64_t offset) {
- unsigned i;
- for (i = 0u; i < io->ownCount; ++i) {
- if (io->own[i].from <= offset && offset < io->own[i].to) {
- return (int)i;
- }
- }
- return -1;
+ unsigned i;
+ for (i = 0u; i < io->ownCount; ++i) {
+ if (io->own[i].from <= offset && offset < io->own[i].to) {
+ return (int)i;
+ }
+ }
+ return -1;
}
/*
@@ -266,14 +266,14 @@ static int bcSimFindOwnRangeAt(const BcSim_t* io, uint64_t offset) {
* into the next remembered self-written span.
*/
static uint64_t bcSimNextOwnStart(const BcSim_t* io, uint64_t offset, uint64_t fileSize) {
- unsigned i;
- uint64_t next = fileSize;
- for (i = 0u; i < io->ownCount; ++i) {
- if (offset < io->own[i].from && io->own[i].from < next) {
- next = io->own[i].from;
- }
- }
- return next;
+ unsigned i;
+ uint64_t next = fileSize;
+ for (i = 0u; i < io->ownCount; ++i) {
+ if (offset < io->own[i].from && io->own[i].from < next) {
+ next = io->own[i].from;
+ }
+ }
+ return next;
}
/*
@@ -286,17 +286,17 @@ static uint64_t bcSimNextOwnStart(const BcSim_t* io, uint64_t offset, uint64_t f
* rollback path.
*/
static int bcSimRememberOwnRange(BcSim_t* io, uint64_t from, uint64_t to) {
- bcSimPruneOwnRanges(io);
- if (from == to) {
- return BCSIM_OK;
- }
- if (io->ownCount >= BCSIM_MAX_OWN_RANGES) {
- return BCSIM_ERR_RANGE_OVERFLOW;
- }
- io->own[io->ownCount].from = from;
- io->own[io->ownCount].to = to;
- ++io->ownCount;
- return BCSIM_OK;
+ bcSimPruneOwnRanges(io);
+ if (from == to) {
+ return BCSIM_OK;
+ }
+ if (io->ownCount >= BCSIM_MAX_OWN_RANGES) {
+ return BCSIM_ERR_RANGE_OVERFLOW;
+ }
+ io->own[io->ownCount].from = from;
+ io->own[io->ownCount].to = to;
+ ++io->ownCount;
+ return BCSIM_OK;
}
/*
@@ -306,35 +306,35 @@ static int bcSimRememberOwnRange(BcSim_t* io, uint64_t from, uint64_t to) {
* keeps repeated process starts from producing repeated column descriptions.
*/
static int bcSimEnsureLogHeader(const BcSim_t* io) {
- uint64_t size = 0u;
- FILE* f;
- int e;
-
- if (io == 0 || io->logPath[0] == 0) {
- return BCSIM_OK;
- }
-
- e = bcSimFileSize(io->logPath, &size);
- if (e != BCSIM_OK) {
- return e;
- }
- if (size != 0u) {
- return BCSIM_OK;
- }
-
- f = fopen(io->logPath, "ab");
- if (f == 0) {
- return BCSIM_ERR_IO;
- }
- fprintf(f, "# BcSim traffic log\n");
- fprintf(f, "# bc.bus is a pure binary byte stream. This text log is diagnostic only.\n");
- fprintf(f, "# offset and len are decimal values. Bytes are hexadecimal %%02x values.\n");
- fprintf(f, "# %8s %4s %-12s %-3s %-20s %s\n", "offset", "len", "device", "dir", "status", "bytes");
- fprintf(f, "# %8s %4s %-12s %-3s %-20s %s\n", "--------", "----", "------------", "---", "--------------------", "--------------------------------");
- if (fclose(f) != 0) {
- return BCSIM_ERR_IO;
- }
- return BCSIM_OK;
+ uint64_t size = 0u;
+ FILE* f;
+ int e;
+
+ if (io == 0 || io->logPath[0] == 0) {
+ return BCSIM_OK;
+ }
+
+ e = bcSimFileSize(io->logPath, &size);
+ if (e != BCSIM_OK) {
+ return e;
+ }
+ if (size != 0u) {
+ return BCSIM_OK;
+ }
+
+ f = fopen(io->logPath, "ab");
+ if (f == 0) {
+ return BCSIM_ERR_IO;
+ }
+ fprintf(f, "# BcSim traffic log\n");
+ fprintf(f, "# bc.bus is a pure binary byte stream. This text log is diagnostic only.\n");
+ fprintf(f, "# offset and len are decimal values. Bytes are hexadecimal %%02x values.\n");
+ fprintf(f, "# %8s %4s %-12s %-3s %-20s %s\n", "offset", "len", "device", "dir", "status", "bytes");
+ fprintf(f, "# %8s %4s %-12s %-3s %-20s %s\n", "--------", "----", "------------", "---", "--------------------", "--------------------------------");
+ if (fclose(f) != 0) {
+ return BCSIM_ERR_IO;
+ }
+ return BCSIM_OK;
}
/*
@@ -344,325 +344,334 @@ static int bcSimEnsureLogHeader(const BcSim_t* io) {
* demonstration understandable while keeping the binary bus stream clean.
*/
static int bcSimAppendLog(const BcSim_t* io,
- uint64_t offset,
- size_t len,
- const char* dir,
- const char* status,
- const uint8_t* p) {
- FILE* f;
- size_t i;
-
- if (io == 0 || io->logPath[0] == 0) {
- return BCSIM_OK;
- }
- if (status == 0 || status[0] == 0) {
- status = "-";
- }
- if (dir == 0 || dir[0] == 0) {
- dir = "?";
- }
-
- f = fopen(io->logPath, "ab");
- if (f == 0) {
- return BCSIM_ERR_IO;
- }
-
- /* Offset and length are right-aligned. Only byte values keep leading zeros. */
- fprintf(f, "%10llu %4llu %-12s %-3s %-20s",
- (unsigned long long)offset,
- (unsigned long long)len,
- io->deviceName[0] != 0 ? io->deviceName : "?",
- dir,
- status);
- for (i = 0u; i < len; ++i) {
- fprintf(f, " %02x", (unsigned)p[i]);
- }
- fprintf(f, "\n");
-
- if (fclose(f) != 0) {
- return BCSIM_ERR_IO;
- }
- return BCSIM_OK;
+ uint64_t offset,
+ size_t len,
+ const char* dir,
+ const char* status,
+ const uint8_t* p) {
+ FILE* f;
+ size_t i;
+
+ if (io == 0 || io->logPath[0] == 0) {
+ return BCSIM_OK;
+ }
+ if (status == 0 || status[0] == 0) {
+ status = "-";
+ }
+ if (dir == 0 || dir[0] == 0) {
+ dir = "?";
+ }
+
+ f = fopen(io->logPath, "ab");
+ if (f == 0) {
+ return BCSIM_ERR_IO;
+ }
+
+ /* Offset and length are right-aligned. Only byte values keep leading zeros. */
+ fprintf(f, "%10llu %4llu %-12s %-3s %-20s",
+ (unsigned long long)offset,
+ (unsigned long long)len,
+ io->deviceName[0] != 0 ? io->deviceName : "?",
+ dir,
+ status);
+ for (i = 0u; i < len; ++i) {
+ fprintf(f, " %02x", (unsigned)p[i]);
+ }
+ fprintf(f, "\n");
+
+ if (fclose(f) != 0) {
+ return BCSIM_ERR_IO;
+ }
+ return BCSIM_OK;
}
/* Convert a public error code into a stable diagnostic string. */
const char* bcSimErrorString(int err) {
- switch (err) {
- case BCSIM_OK: return "ok";
- case BCSIM_ERR_ARG: return "invalid argument";
- case BCSIM_ERR_IO: return "I/O error";
- case BCSIM_ERR_LOCK: return "lock error";
- case BCSIM_ERR_LOCK_TIMEOUT: return "lock timeout";
- case BCSIM_ERR_RANGE_OVERFLOW: return "own-range table overflow";
- case BCSIM_ERR_PATH_TOO_LONG: return "path or name too long";
- case BCSIM_ERR_NOT_OPEN: return "handle is not open";
- default: return "unknown error";
- }
+ switch (err) {
+ case BCSIM_OK:
+ return "ok";
+ case BCSIM_ERR_ARG:
+ return "invalid argument";
+ case BCSIM_ERR_IO:
+ return "I/O error";
+ case BCSIM_ERR_LOCK:
+ return "lock error";
+ case BCSIM_ERR_LOCK_TIMEOUT:
+ return "lock timeout";
+ case BCSIM_ERR_RANGE_OVERFLOW:
+ return "own-range table overflow";
+ case BCSIM_ERR_PATH_TOO_LONG:
+ return "path or name too long";
+ case BCSIM_ERR_NOT_OPEN:
+ return "handle is not open";
+ default:
+ return "unknown error";
+ }
}
int bcSimOpen(BcSim_t* io,
- const char* busPath,
- const char* logPath,
- const char* deviceName) {
- uint64_t size = 0u;
- int e;
-
- if (io == 0 || busPath == 0 || busPath[0] == 0) {
- return BCSIM_ERR_ARG;
- }
-
- /* Clear all fields first so every later error leaves a defined structure. */
- memset(io, 0, sizeof(*io));
-
- /* Store all user supplied paths/names in fixed fields owned by the handle. */
- e = bcSimCopyString(io->busPath, sizeof(io->busPath), busPath);
- if (e != BCSIM_OK) {
- return e;
- }
- e = bcSimCopyString(io->logPath, sizeof(io->logPath), logPath != 0 ? logPath : "");
- if (e != BCSIM_OK) {
- return e;
- }
- e = bcSimCopyString(io->deviceName, sizeof(io->deviceName),
- deviceName != 0 && deviceName[0] != 0 ? deviceName : "?");
- if (e != BCSIM_OK) {
- return e;
- }
- e = bcSimMakeLockPath(io->lockPath, sizeof(io->lockPath), io->busPath);
- if (e != BCSIM_OK) {
- return e;
- }
-
- /* Ensure the binary stream file exists without truncating old content. */
- e = bcSimTouchFile(io->busPath);
- if (e != BCSIM_OK) {
- return e;
- }
-
- if (io->logPath[0] != 0) {
- e = bcSimTouchFile(io->logPath);
- if (e != BCSIM_OK) {
- return e;
- }
- /* The lock avoids multiple concurrent processes creating duplicate headers. */
- e = bcSimLock(io);
- if (e != BCSIM_OK) {
- return e;
- }
- e = bcSimEnsureLogHeader(io);
- (void)bcSimUnlock(io);
- if (e != BCSIM_OK) {
- return e;
- }
- }
-
- e = bcSimFileSize(io->busPath, &size);
- if (e != BCSIM_OK) {
- return e;
- }
-
- /* Join the live bus at EOF; historical bytes are not replayed by default. */
- io->readOffset = size;
- io->isOpen = 1;
- return BCSIM_OK;
+ const char* busPath,
+ const char* logPath,
+ const char* deviceName) {
+ uint64_t size = 0u;
+ int e;
+
+ if (io == 0 || busPath == 0 || busPath[0] == 0) {
+ return BCSIM_ERR_ARG;
+ }
+
+ /* Clear all fields first so every later error leaves a defined structure. */
+ memset(io, 0, sizeof(*io));
+
+ /* Store all user supplied paths/names in fixed fields owned by the handle. */
+ e = bcSimCopyString(io->busPath, sizeof(io->busPath), busPath);
+ if (e != BCSIM_OK) {
+ return e;
+ }
+ e = bcSimCopyString(io->logPath, sizeof(io->logPath), logPath != 0 ? logPath : "");
+ if (e != BCSIM_OK) {
+ return e;
+ }
+ e = bcSimCopyString(io->deviceName, sizeof(io->deviceName),
+ deviceName != 0 && deviceName[0] != 0 ? deviceName : "?");
+ if (e != BCSIM_OK) {
+ return e;
+ }
+ e = bcSimMakeLockPath(io->lockPath, sizeof(io->lockPath), io->busPath);
+ if (e != BCSIM_OK) {
+ return e;
+ }
+
+ /* Ensure the binary stream file exists without truncating old content. */
+ e = bcSimTouchFile(io->busPath);
+ if (e != BCSIM_OK) {
+ return e;
+ }
+
+ if (io->logPath[0] != 0) {
+ e = bcSimTouchFile(io->logPath);
+ if (e != BCSIM_OK) {
+ return e;
+ }
+ /* The lock avoids multiple concurrent processes creating duplicate headers. */
+ e = bcSimLock(io);
+ if (e != BCSIM_OK) {
+ return e;
+ }
+ e = bcSimEnsureLogHeader(io);
+ (void)bcSimUnlock(io);
+ if (e != BCSIM_OK) {
+ return e;
+ }
+ }
+
+ e = bcSimFileSize(io->busPath, &size);
+ if (e != BCSIM_OK) {
+ return e;
+ }
+
+ /* Join the live bus at EOF; historical bytes are not replayed by default. */
+ io->readOffset = size;
+ io->isOpen = 1;
+ return BCSIM_OK;
}
int bcSimRead(BcSim_t* io,
- uint8_t* p,
- size_t max,
- const char* status) {
- FILE* f;
- uint64_t fileSize = 0u;
- size_t out = 0u;
- int e;
-
- if (io == 0 || p == 0) {
- return BCSIM_ERR_ARG;
- }
- if (!io->isOpen) {
- return BCSIM_ERR_NOT_OPEN;
- }
- if (max == 0u) {
- return 0;
- }
+ uint8_t* p,
+ size_t max,
+ const char* status) {
+ FILE* f;
+ uint64_t fileSize = 0u;
+ size_t out = 0u;
+ int e;
+
+ if (io == 0 || p == 0) {
+ return BCSIM_ERR_ARG;
+ }
+ if (!io->isOpen) {
+ return BCSIM_ERR_NOT_OPEN;
+ }
+ if (max == 0u) {
+ return 0;
+ }
#if BCSIM_READ_USES_LOCK == 1
- /* Optional deterministic mode: do not read while a writer is appending. */
- e = bcSimLock(io);
- if (e != 0) {
- return e;
- }
+ /* Optional deterministic mode: do not read while a writer is appending. */
+ e = bcSimLock(io);
+ if (e != 0) {
+ return e;
+ }
#endif
- e = bcSimFileSize(io->busPath, &fileSize);
- if (e != BCSIM_OK) {
+ e = bcSimFileSize(io->busPath, &fileSize);
+ if (e != BCSIM_OK) {
#if BCSIM_READ_USES_LOCK == 1
- (void)bcSimUnlock(io);
+ (void)bcSimUnlock(io);
#endif
- return e;
- }
+ return e;
+ }
- if (io->readOffset >= fileSize) {
+ if (io->readOffset >= fileSize) {
#if BCSIM_READ_USES_LOCK == 1
- (void)bcSimUnlock(io);
+ (void)bcSimUnlock(io);
#endif
- return 0;
- }
+ return 0;
+ }
- f = fopen(io->busPath, "rb");
- if (f == 0) {
+ f = fopen(io->busPath, "rb");
+ if (f == 0) {
#if BCSIM_READ_USES_LOCK == 1
- (void)bcSimUnlock(io);
+ (void)bcSimUnlock(io);
#endif
- return BCSIM_ERR_IO;
- }
-
- while (io->readOffset < fileSize && out < max) {
- int ownIndex;
- uint64_t foreignEnd;
- uint64_t want64;
- size_t want;
- size_t got;
- uint64_t chunkOffset;
- size_t chunkOutStart;
-
- /* Keep the own-range table small before checking the current offset. */
- bcSimPruneOwnRanges(io);
-
- /* Consume self-written bytes silently. They stay in bc.bus but are not returned. */
- ownIndex = bcSimFindOwnRangeAt(io, io->readOffset);
- if (ownIndex >= 0) {
- uint64_t skipTo = io->own[ownIndex].to;
- if (skipTo > fileSize) {
- skipTo = fileSize;
- }
- io->readOffset = skipTo;
- continue;
- }
-
- /* Copy only up to the next own range, EOF snapshot, or caller buffer limit. */
- foreignEnd = bcSimNextOwnStart(io, io->readOffset, fileSize);
- want64 = foreignEnd - io->readOffset;
- if (want64 > (uint64_t)(max - out)) {
- want64 = (uint64_t)(max - out);
- }
- if (want64 > (uint64_t)SIZE_MAX) {
- want64 = (uint64_t)SIZE_MAX;
- }
- want = (size_t)want64;
- if (want == 0u) {
- break;
- }
-
- if (fseek(f, (long)io->readOffset, SEEK_SET) != 0) {
- (void)fclose(f);
+ return BCSIM_ERR_IO;
+ }
+
+ while (io->readOffset < fileSize && out < max) {
+ int ownIndex;
+ uint64_t foreignEnd;
+ uint64_t want64;
+ size_t want;
+ size_t got;
+ uint64_t chunkOffset;
+ size_t chunkOutStart;
+
+ /* Keep the own-range table small before checking the current offset. */
+ bcSimPruneOwnRanges(io);
+
+ /* Consume self-written bytes silently. They stay in bc.bus but are not returned. */
+ ownIndex = bcSimFindOwnRangeAt(io, io->readOffset);
+ if (ownIndex >= 0) {
+ uint64_t skipTo = io->own[ownIndex].to;
+ if (skipTo > fileSize) {
+ skipTo = fileSize;
+ }
+ io->readOffset = skipTo;
+ continue;
+ }
+
+ /* Copy only up to the next own range, EOF snapshot, or caller buffer limit. */
+ foreignEnd = bcSimNextOwnStart(io, io->readOffset, fileSize);
+ want64 = foreignEnd - io->readOffset;
+ if (want64 > (uint64_t)(max - out)) {
+ want64 = (uint64_t)(max - out);
+ }
+ if (want64 > (uint64_t)SIZE_MAX) {
+ want64 = (uint64_t)SIZE_MAX;
+ }
+ want = (size_t)want64;
+ if (want == 0u) {
+ break;
+ }
+
+ if (fseek(f, (long)io->readOffset, SEEK_SET) != 0) {
+ (void)fclose(f);
#if BCSIM_READ_USES_LOCK == 1
- (void)bcSimUnlock(io);
+ (void)bcSimUnlock(io);
#endif
- return BCSIM_ERR_IO;
- }
-
- chunkOffset = io->readOffset;
- chunkOutStart = out;
- got = fread(p + out, 1u, want, f);
- if (got == 0u) {
- if (ferror(f)) {
- (void)fclose(f);
+ return BCSIM_ERR_IO;
+ }
+
+ chunkOffset = io->readOffset;
+ chunkOutStart = out;
+ got = fread(p + out, 1u, want, f);
+ if (got == 0u) {
+ if (ferror(f)) {
+ (void)fclose(f);
#if BCSIM_READ_USES_LOCK == 1
- (void)bcSimUnlock(io);
+ (void)bcSimUnlock(io);
#endif
- return BCSIM_ERR_IO;
- }
- break;
- }
+ return BCSIM_ERR_IO;
+ }
+ break;
+ }
- out += got;
- io->readOffset += (uint64_t)got;
- (void)bcSimAppendLog(io, chunkOffset, got, "RX", status, p + chunkOutStart);
- }
+ out += got;
+ io->readOffset += (uint64_t)got;
+ (void)bcSimAppendLog(io, chunkOffset, got, "RX", status, p + chunkOutStart);
+ }
- if (fclose(f) != 0) {
+ if (fclose(f) != 0) {
#if BCSIM_READ_USES_LOCK == 1
- (void)bcSimUnlock(io);
+ (void)bcSimUnlock(io);
#endif
- return BCSIM_ERR_IO;
- }
+ return BCSIM_ERR_IO;
+ }
#if BCSIM_READ_USES_LOCK == 1
- e = bcSimUnlock(io);
- if (e != BCSIM_OK) {
- return e;
- }
+ e = bcSimUnlock(io);
+ if (e != BCSIM_OK) {
+ return e;
+ }
#endif
- return (int)out;
+ return (int)out;
}
int bcSimWrite(BcSim_t* io,
- const uint8_t* p,
- size_t n,
- const char* status) {
- FILE* f;
- uint64_t start = 0u;
- int e;
-
- if (io == 0 || (p == 0 && n != 0u)) {
- return BCSIM_ERR_ARG;
- }
- if (!io->isOpen) {
- return BCSIM_ERR_NOT_OPEN;
- }
- if (n == 0u) {
- return 0;
- }
-
- /* Only writers always lock, so one byte chunk is appended as one contiguous span. */
- e = bcSimLock(io);
- if (e != BCSIM_OK) {
- return e;
- }
-
- /* The current EOF becomes the start offset for self-echo filtering and logging. */
- e = bcSimFileSize(io->busPath, &start);
- if (e != BCSIM_OK) {
- (void)bcSimUnlock(io);
- return e;
- }
-
- e = bcSimRememberOwnRange(io, start, start + (uint64_t)n);
- if (e != BCSIM_OK) {
- (void)bcSimUnlock(io);
- return e;
- }
-
- f = fopen(io->busPath, "ab");
- if (f == 0) {
- (void)bcSimUnlock(io);
- return BCSIM_ERR_IO;
- }
- if (fwrite(p, 1u, n, f) != n) {
- (void)fclose(f);
- (void)bcSimUnlock(io);
- return BCSIM_ERR_IO;
- }
- if (fclose(f) != 0) {
- (void)bcSimUnlock(io);
- return BCSIM_ERR_IO;
- }
-
- (void)bcSimAppendLog(io, start, n, "TX", status, p);
-
- e = bcSimUnlock(io);
- if (e != BCSIM_OK) {
- return e;
- }
-
- return (int)n;
+ const uint8_t* p,
+ size_t n,
+ const char* status) {
+ FILE* f;
+ uint64_t start = 0u;
+ int e;
+
+ if (io == 0 || (p == 0 && n != 0u)) {
+ return BCSIM_ERR_ARG;
+ }
+ if (!io->isOpen) {
+ return BCSIM_ERR_NOT_OPEN;
+ }
+ if (n == 0u) {
+ return 0;
+ }
+
+ /* Only writers always lock, so one byte chunk is appended as one contiguous span. */
+ e = bcSimLock(io);
+ if (e != BCSIM_OK) {
+ return e;
+ }
+
+ /* The current EOF becomes the start offset for self-echo filtering and logging. */
+ e = bcSimFileSize(io->busPath, &start);
+ if (e != BCSIM_OK) {
+ (void)bcSimUnlock(io);
+ return e;
+ }
+
+ e = bcSimRememberOwnRange(io, start, start + (uint64_t)n);
+ if (e != BCSIM_OK) {
+ (void)bcSimUnlock(io);
+ return e;
+ }
+
+ f = fopen(io->busPath, "ab");
+ if (f == 0) {
+ (void)bcSimUnlock(io);
+ return BCSIM_ERR_IO;
+ }
+ if (fwrite(p, 1u, n, f) != n) {
+ (void)fclose(f);
+ (void)bcSimUnlock(io);
+ return BCSIM_ERR_IO;
+ }
+ if (fclose(f) != 0) {
+ (void)bcSimUnlock(io);
+ return BCSIM_ERR_IO;
+ }
+
+ (void)bcSimAppendLog(io, start, n, "TX", status, p);
+
+ e = bcSimUnlock(io);
+ if (e != BCSIM_OK) {
+ return e;
+ }
+
+ return (int)n;
}
void bcSimClose(BcSim_t* io) {
- if (io != 0) {
- /* No persistent file handles exist; clearing the state prevents reuse bugs. */
- memset(io, 0, sizeof(*io));
- }
+ if (io != 0) {
+ /* No persistent file handles exist; clearing the state prevents reuse bugs. */
+ memset(io, 0, sizeof(*io));
+ }
}
diff --git a/examples/TriceAbc/BcSim/BcSim.h b/examples/TriceAbc/BcSim/BcSim.h
index fd543863f..635a94ca6 100644
--- a/examples/TriceAbc/BcSim/BcSim.h
+++ b/examples/TriceAbc/BcSim/BcSim.h
@@ -41,14 +41,14 @@ extern "C" {
* stable error codes suitable for switches and diagnostic output.
*/
enum {
- BCSIM_OK = 0, /* Generic success value. */
- BCSIM_ERR_ARG = -1, /* A required pointer or path argument was invalid. */
- BCSIM_ERR_IO = -2, /* fopen/fread/fwrite/fseek/ftell/fclose failed. */
- BCSIM_ERR_LOCK = -3, /* Creating or removing the lock directory failed. */
- BCSIM_ERR_LOCK_TIMEOUT = -4, /* Waiting for the lock directory exceeded the limit. */
- BCSIM_ERR_RANGE_OVERFLOW = -5, /* The own-write range table is full. */
- BCSIM_ERR_PATH_TOO_LONG = -6, /* A path or participant name does not fit the fixed field. */
- BCSIM_ERR_NOT_OPEN = -7 /* The handle was not initialized with bcSimOpen(). */
+ BCSIM_OK = 0, /* Generic success value. */
+ BCSIM_ERR_ARG = -1, /* A required pointer or path argument was invalid. */
+ BCSIM_ERR_IO = -2, /* fopen/fread/fwrite/fseek/ftell/fclose failed. */
+ BCSIM_ERR_LOCK = -3, /* Creating or removing the lock directory failed. */
+ BCSIM_ERR_LOCK_TIMEOUT = -4, /* Waiting for the lock directory exceeded the limit. */
+ BCSIM_ERR_RANGE_OVERFLOW = -5, /* The own-write range table is full. */
+ BCSIM_ERR_PATH_TOO_LONG = -6, /* A path or participant name does not fit the fixed field. */
+ BCSIM_ERR_NOT_OPEN = -7 /* The handle was not initialized with bcSimOpen(). */
};
/*
@@ -59,8 +59,8 @@ enum {
* unambiguous.
*/
typedef struct {
- uint64_t from; /* First byte offset belonging to the range. */
- uint64_t to; /* First byte offset after the range. */
+ uint64_t from; /* First byte offset belonging to the range. */
+ uint64_t to; /* First byte offset after the range. */
} bcSimRange_t;
/*
@@ -73,39 +73,39 @@ typedef struct {
* except where the documentation explicitly states otherwise.
*/
typedef struct {
- char busPath[BCSIM_PATH_MAX]; /* Path of the append-only binary bus file. */
- char logPath[BCSIM_PATH_MAX]; /* Path of the optional human-readable log file. */
- char lockPath[BCSIM_PATH_MAX]; /* Derived path of the writer lock directory. */
- char deviceName[BCSIM_NAME_MAX]; /* Participant name printed in bc.log. */
-
- /*
- * Current read position in the binary bus file.
- *
- * bcSimOpen() initializes this to the current bus file size. Therefore a
- * newly started process does not replay historical bytes by default. It
- * only receives bytes appended after it joined the bus.
- *
- * A special replay/monitor program may set readOffset manually after
- * bcSimOpen(). Normal participants should not casually expose such a mode
- * because historical own writes cannot be recognized after restart.
- */
- uint64_t readOffset;
-
- /*
- * Own write ranges used by bcSimRead() for offset-based self-echo filtering.
- *
- * Each successful bcSimWrite() stores the appended bus-file range here.
- * Later bcSimRead() advances over those ranges internally without returning
- * their bytes to the caller.
- */
- bcSimRange_t own[BCSIM_MAX_OWN_RANGES];
- unsigned ownCount; /* Number of valid entries in own[]. */
-
- /*
- * Set to 1 after a successful bcSimOpen(). Public operations reject handles
- * where this flag is still zero or has been cleared by bcSimClose().
- */
- int isOpen;
+ char busPath[BCSIM_PATH_MAX]; /* Path of the append-only binary bus file. */
+ char logPath[BCSIM_PATH_MAX]; /* Path of the optional human-readable log file. */
+ char lockPath[BCSIM_PATH_MAX]; /* Derived path of the writer lock directory. */
+ char deviceName[BCSIM_NAME_MAX]; /* Participant name printed in bc.log. */
+
+ /*
+ * Current read position in the binary bus file.
+ *
+ * bcSimOpen() initializes this to the current bus file size. Therefore a
+ * newly started process does not replay historical bytes by default. It
+ * only receives bytes appended after it joined the bus.
+ *
+ * A special replay/monitor program may set readOffset manually after
+ * bcSimOpen(). Normal participants should not casually expose such a mode
+ * because historical own writes cannot be recognized after restart.
+ */
+ uint64_t readOffset;
+
+ /*
+ * Own write ranges used by bcSimRead() for offset-based self-echo filtering.
+ *
+ * Each successful bcSimWrite() stores the appended bus-file range here.
+ * Later bcSimRead() advances over those ranges internally without returning
+ * their bytes to the caller.
+ */
+ bcSimRange_t own[BCSIM_MAX_OWN_RANGES];
+ unsigned ownCount; /* Number of valid entries in own[]. */
+
+ /*
+ * Set to 1 after a successful bcSimOpen(). Public operations reject handles
+ * where this flag is still zero or has been cleared by bcSimClose().
+ */
+ int isOpen;
} BcSim_t;
/*
diff --git a/examples/TriceAbc/BcSimChk/main.c b/examples/TriceAbc/BcSimChk/main.c
index 7f3a98347..a0a00f940 100644
--- a/examples/TriceAbc/BcSimChk/main.c
+++ b/examples/TriceAbc/BcSimChk/main.c
@@ -52,21 +52,21 @@
/* Sleep for a small number of milliseconds between read/write iterations. */
static void sleepMs(unsigned ms) {
#if defined(_WIN32)
- Sleep((DWORD)ms);
+ Sleep((DWORD)ms);
#else
- struct timespec ts;
- ts.tv_sec = (time_t)(ms / 1000u);
- ts.tv_nsec = (long)((ms % 1000u) * 1000000u);
- (void)nanosleep(&ts, 0);
+ struct timespec ts;
+ ts.tv_sec = (time_t)(ms / 1000u);
+ ts.tv_nsec = (long)((ms % 1000u) * 1000000u);
+ (void)nanosleep(&ts, 0);
#endif
}
/* Return a process-specific value so parallel instances use different seeds. */
static unsigned processIdForSeed(void) {
#if defined(_WIN32)
- return (unsigned)GetCurrentProcessId();
+ return (unsigned)GetCurrentProcessId();
#else
- return (unsigned)getpid();
+ return (unsigned)getpid();
#endif
}
@@ -77,28 +77,28 @@ static unsigned processIdForSeed(void) {
* between instances even if they start in the same second.
*/
static unsigned nameHash(const char* s) {
- unsigned h = 2166136261u;
- while (s != 0 && *s != 0) {
- h ^= (unsigned char)*s++;
- h *= 16777619u;
- }
- return h;
+ unsigned h = 2166136261u;
+ while (s != 0 && *s != 0) {
+ h ^= (unsigned char)*s++;
+ h *= 16777619u;
+ }
+ return h;
}
/* Print command-line help. */
static void usage(const char* exe) {
- printf("Usage: %s -name NAME [options]\n", exe);
- printf("\nOptions:\n");
- printf(" -bus FILE Binary bus file, default bc.bus\n");
- printf(" -log FILE Human-readable log file, default bc.log\n");
- printf(" -auto N Send N random demo payloads, default 5\n");
- printf(" -interval MS Poll/send interval, default 250\n");
- printf(" -h, --help Show this help\n");
- printf("\nExample:\n");
- printf(" %s -name A -auto 4\n", exe);
- printf("\nNotes:\n");
- printf(" A newly opened participant starts reading at the current end of bc.bus.\n");
- printf(" There is intentionally no -from-start option for normal participants.\n");
+ printf("Usage: %s -name NAME [options]\n", exe);
+ printf("\nOptions:\n");
+ printf(" -bus FILE Binary bus file, default bc.bus\n");
+ printf(" -log FILE Human-readable log file, default bc.log\n");
+ printf(" -auto N Send N random demo payloads, default 5\n");
+ printf(" -interval MS Poll/send interval, default 250\n");
+ printf(" -h, --help Show this help\n");
+ printf("\nExample:\n");
+ printf(" %s -name A -auto 4\n", exe);
+ printf("\nNotes:\n");
+ printf(" A newly opened participant starts reading at the current end of bc.bus.\n");
+ printf(" There is intentionally no -from-start option for normal participants.\n");
}
/*
@@ -108,30 +108,30 @@ static void usage(const char* exe) {
* command-line mistakes do not create extremely long demo runs.
*/
static int parseInt(const char* s, int def) {
- char* end = 0;
- long v;
- if (s == 0) {
- return def;
- }
- v = strtol(s, &end, 10);
- if (end == s || *end != 0) {
- return def;
- }
- if (v < 0) {
- return 0;
- }
- if (v > 1000000L) {
- return 1000000;
- }
- return (int)v;
+ char* end = 0;
+ long v;
+ if (s == 0) {
+ return def;
+ }
+ v = strtol(s, &end, 10);
+ if (end == s || *end != 0) {
+ return def;
+ }
+ if (v < 0) {
+ return 0;
+ }
+ if (v > 1000000L) {
+ return 1000000;
+ }
+ return (int)v;
}
/* Print bytes in the same two-digit lowercase hexadecimal style used in bc.log. */
static void printBytesAsHex(const uint8_t* p, int n) {
- int i;
- for (i = 0; i < n; ++i) {
- printf(" %02x", (unsigned)p[i]);
- }
+ int i;
+ for (i = 0; i < n; ++i) {
+ printf(" %02x", (unsigned)p[i]);
+ }
}
/*
@@ -141,18 +141,18 @@ static void printBytesAsHex(const uint8_t* p, int n) {
* byte-stream demonstration, not like a chat application.
*/
static int buildRandomPayload(uint8_t* dst, size_t dstSize) {
- size_t len;
- size_t i;
+ size_t len;
+ size_t i;
- if (dst == 0 || dstSize < DEMO_PAYLOAD_MAX) {
- return -1;
- }
+ if (dst == 0 || dstSize < DEMO_PAYLOAD_MAX) {
+ return -1;
+ }
- len = DEMO_PAYLOAD_MIN + (size_t)(rand() % (int)(DEMO_PAYLOAD_MAX - DEMO_PAYLOAD_MIN + 1u));
- for (i = 0u; i < len; ++i) {
- dst[i] = (uint8_t)(rand() & 0xffu);
- }
- return (int)len;
+ len = DEMO_PAYLOAD_MIN + (size_t)(rand() % (int)(DEMO_PAYLOAD_MAX - DEMO_PAYLOAD_MIN + 1u));
+ for (i = 0u; i < len; ++i) {
+ dst[i] = (uint8_t)(rand() & 0xffu);
+ }
+ return (int)len;
}
/*
@@ -163,119 +163,119 @@ static int buildRandomPayload(uint8_t* dst, size_t dstSize) {
* returned byte chunk.
*/
static int drainInput(BcSim_t* io, const char* name, const char* status) {
- for (;;) {
- uint8_t rx[DEMO_RX_BUFFER_SIZE];
- int n = bcSimRead(io, rx, sizeof(rx), status);
- if (n < 0) {
- fprintf(stderr, "[%s] bcSimRead failed: %s\n", name, bcSimErrorString(n));
- return n;
- }
- if (n == 0) {
- return 0;
- }
- printf("[%s] RX %d bytes", name, n);
- printBytesAsHex(rx, n);
- printf("\n");
- }
+ for (;;) {
+ uint8_t rx[DEMO_RX_BUFFER_SIZE];
+ int n = bcSimRead(io, rx, sizeof(rx), status);
+ if (n < 0) {
+ fprintf(stderr, "[%s] bcSimRead failed: %s\n", name, bcSimErrorString(n));
+ return n;
+ }
+ if (n == 0) {
+ return 0;
+ }
+ printf("[%s] RX %d bytes", name, n);
+ printBytesAsHex(rx, n);
+ printf("\n");
+ }
}
int main(int argc, char** argv) {
- const char* name = 0;
- const char* busPath = "bc.bus";
- const char* logPath = "bc.log";
- int autoCount = 5;
- int intervalMs = 250;
- int i;
- BcSim_t io;
- int e;
+ const char* name = 0;
+ const char* busPath = "bc.bus";
+ const char* logPath = "bc.log";
+ int autoCount = 5;
+ int intervalMs = 250;
+ int i;
+ BcSim_t io;
+ int e;
- /* Parse a deliberately small option set; this is a check program, not a CLI framework. */
- for (i = 1; i < argc; ++i) {
- if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0) {
- usage(argv[0]);
- return 0;
- } else if (strcmp(argv[i], "-name") == 0 && i + 1 < argc) {
- name = argv[++i];
- } else if (strcmp(argv[i], "-bus") == 0 && i + 1 < argc) {
- busPath = argv[++i];
- } else if (strcmp(argv[i], "-log") == 0 && i + 1 < argc) {
- logPath = argv[++i];
- } else if (strcmp(argv[i], "-auto") == 0 && i + 1 < argc) {
- autoCount = parseInt(argv[++i], autoCount);
- } else if (strcmp(argv[i], "-interval") == 0 && i + 1 < argc) {
- intervalMs = parseInt(argv[++i], intervalMs);
- } else {
- fprintf(stderr, "Unknown or incomplete option: %s\n", argv[i]);
- usage(argv[0]);
- return 2;
- }
- }
+ /* Parse a deliberately small option set; this is a check program, not a CLI framework. */
+ for (i = 1; i < argc; ++i) {
+ if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0) {
+ usage(argv[0]);
+ return 0;
+ } else if (strcmp(argv[i], "-name") == 0 && i + 1 < argc) {
+ name = argv[++i];
+ } else if (strcmp(argv[i], "-bus") == 0 && i + 1 < argc) {
+ busPath = argv[++i];
+ } else if (strcmp(argv[i], "-log") == 0 && i + 1 < argc) {
+ logPath = argv[++i];
+ } else if (strcmp(argv[i], "-auto") == 0 && i + 1 < argc) {
+ autoCount = parseInt(argv[++i], autoCount);
+ } else if (strcmp(argv[i], "-interval") == 0 && i + 1 < argc) {
+ intervalMs = parseInt(argv[++i], intervalMs);
+ } else {
+ fprintf(stderr, "Unknown or incomplete option: %s\n", argv[i]);
+ usage(argv[0]);
+ return 2;
+ }
+ }
- if (name == 0 || name[0] == 0) {
- fprintf(stderr, "Missing -name NAME.\n");
- usage(argv[0]);
- return 2;
- }
+ if (name == 0 || name[0] == 0) {
+ fprintf(stderr, "Missing -name NAME.\n");
+ usage(argv[0]);
+ return 2;
+ }
- /* Mix time, process id, and participant name so parallel instances differ. */
- srand((unsigned)time(0) ^ processIdForSeed() ^ nameHash(name));
+ /* Mix time, process id, and participant name so parallel instances differ. */
+ srand((unsigned)time(0) ^ processIdForSeed() ^ nameHash(name));
- e = bcSimOpen(&io, busPath, logPath, name);
- if (e < 0) {
- fprintf(stderr, "[%s] bcSimOpen failed: %s\n", name, bcSimErrorString(e));
- return 1;
- }
+ e = bcSimOpen(&io, busPath, logPath, name);
+ if (e < 0) {
+ fprintf(stderr, "[%s] bcSimOpen failed: %s\n", name, bcSimErrorString(e));
+ return 1;
+ }
- printf("[%s] opened bus=%s log=%s readOffset=%llu\n",
- name,
- busPath,
- logPath,
- (unsigned long long)io.readOffset);
+ printf("[%s] opened bus=%s log=%s readOffset=%llu\n",
+ name,
+ busPath,
+ logPath,
+ (unsigned long long)io.readOffset);
- for (i = 0; i < autoCount; ++i) {
- char status[DEMO_STATUS_SIZE];
- uint8_t payload[DEMO_PAYLOAD_MAX];
- int payloadLen;
+ for (i = 0; i < autoCount; ++i) {
+ char status[DEMO_STATUS_SIZE];
+ uint8_t payload[DEMO_PAYLOAD_MAX];
+ int payloadLen;
- /* First poll for foreign bytes so each instance visibly receives traffic. */
- snprintf(status, sizeof(status), "poll-%d", i);
- e = drainInput(&io, name, status);
- if (e < 0) {
- bcSimClose(&io);
- return 1;
- }
+ /* First poll for foreign bytes so each instance visibly receives traffic. */
+ snprintf(status, sizeof(status), "poll-%d", i);
+ e = drainInput(&io, name, status);
+ if (e < 0) {
+ bcSimClose(&io);
+ return 1;
+ }
- payloadLen = buildRandomPayload(payload, sizeof(payload));
- if (payloadLen < 0) {
- fprintf(stderr, "[%s] failed to build random payload\n", name);
- bcSimClose(&io);
- return 1;
- }
+ payloadLen = buildRandomPayload(payload, sizeof(payload));
+ if (payloadLen < 0) {
+ fprintf(stderr, "[%s] failed to build random payload\n", name);
+ bcSimClose(&io);
+ return 1;
+ }
- snprintf(status, sizeof(status), "tx-%d", i);
- e = bcSimWrite(&io, payload, (size_t)payloadLen, status);
- if (e < 0) {
- fprintf(stderr, "[%s] bcSimWrite failed: %s\n", name, bcSimErrorString(e));
- bcSimClose(&io);
- return 1;
- }
- printf("[%s] TX %d bytes", name, e);
- printBytesAsHex(payload, e);
- printf("\n");
- sleepMs((unsigned)intervalMs);
- }
+ snprintf(status, sizeof(status), "tx-%d", i);
+ e = bcSimWrite(&io, payload, (size_t)payloadLen, status);
+ if (e < 0) {
+ fprintf(stderr, "[%s] bcSimWrite failed: %s\n", name, bcSimErrorString(e));
+ bcSimClose(&io);
+ return 1;
+ }
+ printf("[%s] TX %d bytes", name, e);
+ printBytesAsHex(payload, e);
+ printf("\n");
+ sleepMs((unsigned)intervalMs);
+ }
- /* Keep polling briefly so late bytes from other instances become visible. */
- for (i = 0; i < 6; ++i) {
- e = drainInput(&io, name, "final-drain");
- if (e < 0) {
- bcSimClose(&io);
- return 1;
- }
- sleepMs((unsigned)intervalMs);
- }
+ /* Keep polling briefly so late bytes from other instances become visible. */
+ for (i = 0; i < 6; ++i) {
+ e = drainInput(&io, name, "final-drain");
+ if (e < 0) {
+ bcSimClose(&io);
+ return 1;
+ }
+ sleepMs((unsigned)intervalMs);
+ }
- printf("[%s] done\n", name);
- bcSimClose(&io);
- return 0;
+ printf("[%s] done\n", name);
+ bcSimClose(&io);
+ return 0;
}
diff --git a/examples/TriceAbc/N1_tx/main.c b/examples/TriceAbc/N1_tx/main.c
index c7ed9acaf..c197396a7 100644
--- a/examples/TriceAbc/N1_tx/main.c
+++ b/examples/TriceAbc/N1_tx/main.c
@@ -12,15 +12,15 @@ static void sendTraffic(unsigned loop) {
/* Show the local TX side because BcSim suppresses self echo on receive. */
trice("log:(from node=N1_tx) tick=%u\n", loop);
- // Demo-only TX trace: make ABC replies visible at the sender as well.
+ // Demo-only TX trace: make ABC replies visible at the sender as well.
nodePrintLineF("N1_tx: TX-> log:tick=%u\n", loop);
trice("log:(from node=N1_tx) from=%u phase=%u\n", 1u, loop & 3u);
- // Demo-only TX trace: make ABC replies visible at the sender as well.
+ // Demo-only TX trace: make ABC replies visible at the sender as well.
nodePrintLineF("N1_tx: TX-> log:from=%u phase=%u\n", 1u, loop & 3u);
triceS("log:(from node=N1_tx) text=%s\n", text);
- // Demo-only TX trace: make ABC replies visible at the sender as well.
+ // Demo-only TX trace: make ABC replies visible at the sender as well.
nodePrintLineF("N1_tx: TX-> log:text=%s\n", text);
for (i = 0u; i < sizeof(x0); ++i) {
@@ -28,39 +28,39 @@ static void sendTraffic(unsigned loop) {
}
triceX0(x0, x0Len);
- // Demo-only TX trace: make ABC replies visible at the sender as well.
+ // Demo-only TX trace: make ABC replies visible at the sender as well.
nodePrintLineF("N1_tx: TX-> x0 %u bytes\n", (unsigned)x0Len);
}
/* Rotate through the broadcast commands that make sense for a TX-only node. */
static void sendCommand(unsigned loop) {
- static const uint8_t key[] = { 'a', 'l', 'p', 'h', 'a' };
+ static const uint8_t key[] = {'a', 'l', 'p', 'h', 'a'};
uint8_t leds = (uint8_t)(1u << (loop & 3u));
- /* Show the local TX side because BcSim suppresses self echo on receive. */
+ /* Show the local TX side because BcSim suppresses self echo on receive. */
switch (loop & 3u) {
case 0u:
Trice8C("cmd:setLeds", 101, &leds, 1);
- // Demo-only TX trace: make ABC replies visible at the sender as well.
+ // Demo-only TX trace: make ABC replies visible at the sender as well.
nodePrintLineF("N1_tx: ABC-> cmd:setLeds(%02x)\n", leds);
break;
case 1u:
TriceC("cmd:getLeds", 101);
- // Demo-only TX trace: make ABC replies visible at the sender as well.
+ // Demo-only TX trace: make ABC replies visible at the sender as well.
nodePrintLineF("N1_tx: ABC-> cmd:getLeds\n");
break;
case 2u:
TriceC("cmd:logState", 101);
- // Demo-only TX trace: make ABC replies visible at the sender as well.
+ // Demo-only TX trace: make ABC replies visible at the sender as well.
nodePrintLineF("N1_tx: ABC-> cmd:logState\n");
break;
default:
Trice8C("cmd:setKey", 101, key, sizeof(key));
- // Demo-only TX trace: make ABC replies visible at the sender as well.
+ // Demo-only TX trace: make ABC replies visible at the sender as well.
nodePrintLineF("N1_tx: ABC-> cmd:setKey(alpha)\n");
break;
}
diff --git a/examples/TriceAbc/N2_tx/main.c b/examples/TriceAbc/N2_tx/main.c
index ffa9b9ddb..21564b1c2 100644
--- a/examples/TriceAbc/N2_tx/main.c
+++ b/examples/TriceAbc/N2_tx/main.c
@@ -18,7 +18,7 @@ static void sendTraffic(unsigned loop) {
trice("log:(from node=N2_tx) from=%u phase=%u\n", 2u, (loop + 1u) & 3u);
// Demo-only TX trace: make ABC replies visible at the sender as well.
nodePrintLineF("N2_tx: TX-> log:from=%u phase=%u\n", 2u, (loop + 1u) & 3u);
-
+
triceS("log:(from node=N2_tx) text=%s\n", text);
// Demo-only TX trace: make ABC replies visible at the sender as well.
nodePrintLineF("N2_tx: TX-> log:text=%s\n", text);
@@ -34,11 +34,11 @@ static void sendTraffic(unsigned loop) {
/* The TX-only nodes never send divide requests because they cannot receive answers. */
static void sendCommand(unsigned loop) {
- static const uint8_t key[] = { 'b', 'r', 'a', 'v', 'o', '7' };
+ static const uint8_t key[] = {'b', 'r', 'a', 'v', 'o', '7'};
uint8_t leds = (uint8_t)(0x80u >> (loop & 3u));
/* Show the local TX side because BcSim suppresses self echo on receive. */
-
+
switch (loop & 3u) {
case 0u:
Trice8C("cmd:setLeds", 102, &leds, 1);
diff --git a/examples/TriceAbc/N3_bi/main.c b/examples/TriceAbc/N3_bi/main.c
index 6473354c6..45dc92286 100644
--- a/examples/TriceAbc/N3_bi/main.c
+++ b/examples/TriceAbc/N3_bi/main.c
@@ -39,12 +39,12 @@ static void sendTraffic(unsigned loop) {
// 0x00000002 -> N8_bi
// 0x00000004 -> N9_bi
static void sendCommand(unsigned loop) {
- static const uint8_t key[] = { 'n', '3', '-', 'k', 'e', 'y' };
+ static const uint8_t key[] = {'n', '3', '-', 'k', 'e', 'y'};
uint32_t args[2];
uint8_t leds = (uint8_t)(0x03u << (loop & 2u));
/* Show the local TX side because BcSim suppresses self echo on receive. */
-
+
switch (loop) {
case 1u:
TriceC("cmd:getLeds", 103);
diff --git a/examples/TriceAbc/N4_rx/main.c b/examples/TriceAbc/N4_rx/main.c
index 0519a22a9..9d3d07b4e 100644
--- a/examples/TriceAbc/N4_rx/main.c
+++ b/examples/TriceAbc/N4_rx/main.c
@@ -5,19 +5,19 @@
#include
int main(void) {
- node_t node;
- unsigned loop;
+ node_t node;
+ unsigned loop;
- if (nodeOpen(&node, "N4_rx", 0, 1, 0) < 0) {
- fprintf(stderr, "N4_rx: unable to open abc.bus\n");
- return 1;
- }
+ if (nodeOpen(&node, "N4_rx", 0, 1, 0) < 0) {
+ fprintf(stderr, "N4_rx: unable to open abc.bus\n");
+ return 1;
+ }
- for (loop = 0u; loop < 30u; ++loop) {
- (void)nodePoll(&node);
- nodeSleepMs(110u);
- }
+ for (loop = 0u; loop < 30u; ++loop) {
+ (void)nodePoll(&node);
+ nodeSleepMs(110u);
+ }
- nodeClose(&node);
- return 0;
+ nodeClose(&node);
+ return 0;
}
diff --git a/examples/TriceAbc/N5_rx/main.c b/examples/TriceAbc/N5_rx/main.c
index 3ca60d6b6..6de281548 100644
--- a/examples/TriceAbc/N5_rx/main.c
+++ b/examples/TriceAbc/N5_rx/main.c
@@ -5,19 +5,19 @@
#include
int main(void) {
- node_t node;
- unsigned loop;
+ node_t node;
+ unsigned loop;
- if (nodeOpen(&node, "N5_rx", 0, 1, 0) < 0) {
- fprintf(stderr, "N5_rx: unable to open abc.bus\n");
- return 1;
- }
+ if (nodeOpen(&node, "N5_rx", 0, 1, 0) < 0) {
+ fprintf(stderr, "N5_rx: unable to open abc.bus\n");
+ return 1;
+ }
- for (loop = 0u; loop < 30u; ++loop) {
- (void)nodePoll(&node);
- nodeSleepMs(130u);
- }
+ for (loop = 0u; loop < 30u; ++loop) {
+ (void)nodePoll(&node);
+ nodeSleepMs(130u);
+ }
- nodeClose(&node);
- return 0;
+ nodeClose(&node);
+ return 0;
}
diff --git a/examples/TriceAbc/N6_rx/main.c b/examples/TriceAbc/N6_rx/main.c
index 7954aad10..f0f18ac01 100644
--- a/examples/TriceAbc/N6_rx/main.c
+++ b/examples/TriceAbc/N6_rx/main.c
@@ -5,19 +5,19 @@
#include
int main(void) {
- node_t node;
- unsigned loop;
+ node_t node;
+ unsigned loop;
- if (nodeOpen(&node, "N6_rx", 0, 1, 1) < 0) {
- fprintf(stderr, "N6_rx: unable to open abc.bus\n");
- return 1;
- }
+ if (nodeOpen(&node, "N6_rx", 0, 1, 1) < 0) {
+ fprintf(stderr, "N6_rx: unable to open abc.bus\n");
+ return 1;
+ }
- for (loop = 0u; loop < 32u; ++loop) {
- (void)nodePoll(&node);
- nodeSleepMs(100u);
- }
+ for (loop = 0u; loop < 32u; ++loop) {
+ (void)nodePoll(&node);
+ nodeSleepMs(100u);
+ }
- nodeClose(&node);
- return 0;
+ nodeClose(&node);
+ return 0;
}
diff --git a/examples/TriceAbc/N7_bi/main.c b/examples/TriceAbc/N7_bi/main.c
index 3f0a2262c..975ef9a8c 100644
--- a/examples/TriceAbc/N7_bi/main.c
+++ b/examples/TriceAbc/N7_bi/main.c
@@ -5,20 +5,20 @@
#include
int main(void) {
- node_t node;
- unsigned loop;
+ node_t node;
+ unsigned loop;
- if (nodeOpen(&node, "N7_bi", 1, 1, 1) < 0) {
- fprintf(stderr, "N7_bi: unable to open abc.bus\n");
- return 1;
- }
- node.replyStampMask = 0x0001u;
+ if (nodeOpen(&node, "N7_bi", 1, 1, 1) < 0) {
+ fprintf(stderr, "N7_bi: unable to open abc.bus\n");
+ return 1;
+ }
+ node.replyStampMask = 0x0001u;
- for (loop = 0u; loop < 34u; ++loop) {
- (void)nodePoll(&node);
- nodeSleepMs(100u);
- }
+ for (loop = 0u; loop < 34u; ++loop) {
+ (void)nodePoll(&node);
+ nodeSleepMs(100u);
+ }
- nodeClose(&node);
- return 0;
+ nodeClose(&node);
+ return 0;
}
diff --git a/examples/TriceAbc/N8_bi/main.c b/examples/TriceAbc/N8_bi/main.c
index 9c34b0aa0..11fee0f8a 100644
--- a/examples/TriceAbc/N8_bi/main.c
+++ b/examples/TriceAbc/N8_bi/main.c
@@ -5,20 +5,20 @@
#include
int main(void) {
- node_t node;
- unsigned loop;
+ node_t node;
+ unsigned loop;
- if (nodeOpen(&node, "N8_bi", 1, 1, 0) < 0) {
- fprintf(stderr, "N8_bi: unable to open abc.bus\n");
- return 1;
- }
- node.replyStampMask = 0x0002u;
+ if (nodeOpen(&node, "N8_bi", 1, 1, 0) < 0) {
+ fprintf(stderr, "N8_bi: unable to open abc.bus\n");
+ return 1;
+ }
+ node.replyStampMask = 0x0002u;
- for (loop = 0u; loop < 34u; ++loop) {
- (void)nodePoll(&node);
- nodeSleepMs(100u);
- }
+ for (loop = 0u; loop < 34u; ++loop) {
+ (void)nodePoll(&node);
+ nodeSleepMs(100u);
+ }
- nodeClose(&node);
- return 0;
+ nodeClose(&node);
+ return 0;
}
diff --git a/examples/TriceAbc/N9_bi/main.c b/examples/TriceAbc/N9_bi/main.c
index e2fbdd6e7..f0fe0056d 100644
--- a/examples/TriceAbc/N9_bi/main.c
+++ b/examples/TriceAbc/N9_bi/main.c
@@ -5,20 +5,20 @@
#include
int main(void) {
- node_t node;
- unsigned loop;
+ node_t node;
+ unsigned loop;
- if (nodeOpen(&node, "N9_bi", 1, 1, 0) < 0) {
- fprintf(stderr, "N9_bi: unable to open abc.bus\n");
- return 1;
- }
- node.replyStampMask = 0x0004u;
+ if (nodeOpen(&node, "N9_bi", 1, 1, 0) < 0) {
+ fprintf(stderr, "N9_bi: unable to open abc.bus\n");
+ return 1;
+ }
+ node.replyStampMask = 0x0004u;
- for (loop = 0u; loop < 34u; ++loop) {
- (void)nodePoll(&node);
- nodeSleepMs(100u);
- }
+ for (loop = 0u; loop < 34u; ++loop) {
+ (void)nodePoll(&node);
+ nodeSleepMs(100u);
+ }
- nodeClose(&node);
- return 0;
+ nodeClose(&node);
+ return 0;
}
diff --git a/examples/TriceAbc/NodeLib/node.c b/examples/TriceAbc/NodeLib/node.c
index 5d9184c5c..733a8f529 100644
--- a/examples/TriceAbc/NodeLib/node.c
+++ b/examples/TriceAbc/NodeLib/node.c
@@ -43,8 +43,8 @@ static void nodePrintLine(const char* text); // Print exactly one already assemb
static void nodePrintResolvedLog(const node_t* node, const triceRx_t* rx); // Print one resolved log record.
// Adapter to call nodePrintResolvedLog() with a generic node pointer.
-static void nodePrintResolvedLog_adapter(const void* node, const triceRx_t* rx){
- nodePrintResolvedLog((const node_t*) node, rx);
+static void nodePrintResolvedLog_adapter(const void* node, const triceRx_t* rx) {
+ nodePrintResolvedLog((const node_t*)node, rx);
}
#endif
@@ -52,15 +52,15 @@ static void nodePrintResolvedLog_adapter(const void* node, const triceRx_t* rx){
static void nodePrintIgnoredID(const node_t* node, const triceRx_t* rx); // Print one unrecognized ID record.
// Adapter to call nodePrintIgnoredID() with a generic node pointer.
-static void nodePrintIgnoredID_adapter(const void* node, const triceRx_t* rx){
- nodePrintIgnoredID((const node_t*) node, rx);
+static void nodePrintIgnoredID_adapter(const void* node, const triceRx_t* rx) {
+ nodePrintIgnoredID((const node_t*)node, rx);
}
#endif
// Keep one full console line together even when several demo processes print.
#define NODE_CONSOLE_LOCK_PATH "abc.console.lock" // Path to a process-shared lock directory for serializing console output.
-#define NODE_CONSOLE_LINE_MAX 512u // Maximum line length for one complete console output line.
-#define NODE_CONSOLE_LOCK_POLL_MS 10u // Milliseconds to wait before retrying the console lock when another process owns it.
+#define NODE_CONSOLE_LINE_MAX 512u // Maximum line length for one complete console output line.
+#define NODE_CONSOLE_LOCK_POLL_MS 10u // Milliseconds to wait before retrying the console lock when another process owns it.
#if TRICE_RX_X0_COUNTED_BUFFER_SUPPORT == 1
@@ -110,8 +110,8 @@ static void nodePrintX0(const node_t* node, const triceRx_t* rx) {
}
// Adapter to call nodePrintX0() with a generic node pointer.
-static void nodePrintX0_adapter(const void* node, const triceRx_t* rx){
- nodePrintX0((const node_t*)node, rx);
+static void nodePrintX0_adapter(const void* node, const triceRx_t* rx) {
+ nodePrintX0((const node_t*)node, rx);
}
#endif // #if TRICE_RX_X0_COUNTED_BUFFER_SUPPORT == 1
@@ -345,7 +345,7 @@ int nodeOpen(node_t* node, const char* name, int canSend, int canReceive, int rx
(void)nodePrintX0_adapter; // fn_TriceHandleTypeX0 = nodePrintX0_adapter;
#endif
#if TRICE_RX_SUPPORT == 1
- (void)nodePrintIgnoredID_adapter; //fn_TricePrintIgnoredID = nodePrintIgnoredID_adapter;
+ (void)nodePrintIgnoredID_adapter; // fn_TricePrintIgnoredID = nodePrintIgnoredID_adapter;
#endif
return BCSIM_OK;
}
@@ -366,13 +366,13 @@ void nodeClose(node_t* node) {
// Send the current LED states to the shared abc.bus broadcast medium.
// void nodeSendLedsState(node_t* node) {
// char bar[11];
-//
+//
// if (node == 0 || node->canSend == 0u) {
// return;
// }
-//
+//
// trice8C("abc:LedsState", &node->leds, 1);
-//
+//
// // Demo-only TX trace: show the local sender, not only remote receivers.
// nodeMakeLedBar(bar, sizeof(bar), node->leds);
// nodePrintLineF("%s: tx:abc:LedsState %s\n", node->name, bar);
@@ -454,19 +454,17 @@ static void nodePrintResolvedLog(const node_t* node, const triceRx_t* rx) {
case 1u:
nodePrintLineF(
- fmt,
- node->name,
- (unsigned)nodeReadUnsigned(rx->payload, widthBytes)
- );
+ fmt,
+ node->name,
+ (unsigned)nodeReadUnsigned(rx->payload, widthBytes));
break;
case 2u:
nodePrintLineF(
- fmt,
- node->name,
- (unsigned)nodeReadUnsigned(rx->payload + 0u * widthBytes, widthBytes),
- (unsigned)nodeReadUnsigned(rx->payload + 1u * widthBytes, widthBytes)
- );
+ fmt,
+ node->name,
+ (unsigned)nodeReadUnsigned(rx->payload + 0u * widthBytes, widthBytes),
+ (unsigned)nodeReadUnsigned(rx->payload + 1u * widthBytes, widthBytes));
break;
default:
@@ -478,7 +476,7 @@ static void nodePrintResolvedLog(const node_t* node, const triceRx_t* rx) {
#if TRICE_RX_SUPPORT == 1
// Print one unrecognized ID record.
-static void nodePrintIgnoredID(const node_t* node, const triceRx_t* rx){
+static void nodePrintIgnoredID(const node_t* node, const triceRx_t* rx) {
char line[NODE_CONSOLE_LINE_MAX];
size_t pos = 0u;
int wrote = snprintf(line, sizeof(line), "%s: ID %u ignored", node->name, (unsigned)rx->id);
@@ -749,7 +747,7 @@ void logState(const triceRx_t* rx) {
// they cannot answer. Division by zero is ignored so the demo stays compact.
void divide(const triceRx_t* rx) {
node_t* node = nodeCurrent();
-
+
if (node == 0) {
return;
}
@@ -797,7 +795,7 @@ void DivideResult(const triceRx_t* rx) {
nodePrintLineF("%s: id=%d, abc:DivideResult%s value=%f\n", node->name, rx->id, nodeStampText(rx, stampStr, sizeof(stampStr)), (double)nodePayloadFloat32(rx, 0u));
}
#endif // TRICE_RX_ABC_SUPPORT == 1
-#else // #if TRICE_RX_SUPPORT == 1
+#else // #if TRICE_RX_SUPPORT == 1
int nodePoll(node_t* node) { // no RX support, so no Trice record handling is possible
(void)node;
return 0;
diff --git a/examples/TriceAbc/NodeLib/node.h b/examples/TriceAbc/NodeLib/node.h
index 7fadc082a..83048b85e 100644
--- a/examples/TriceAbc/NodeLib/node.h
+++ b/examples/TriceAbc/NodeLib/node.h
@@ -42,20 +42,20 @@ extern "C" {
// One process-local node state used by the shared demo runtime.
typedef struct {
- const char* name; // Short node label such as "N3_bi".
- BcSim_t bus; // File-backed broadcast medium handle.
- uint8_t leds; // Eight demo LED states packed into one byte.
- char key[NODE_KEY_MAX + 1u]; // Stored printable key, always zero-terminated.
- uint8_t keyLen; // Number of valid key bytes before the terminating zero.
- uint8_t canSend; // 1 if this node may emit to the bus.
- uint8_t canReceive; // 1 if this node polls and decodes incoming frames.
- uint8_t rxLogEnabled; // 1 if normal Trice log records should be printed.
- uint32_t replyStampMask; // Demo-only responder bit used for stamped routing.
+ const char* name; // Short node label such as "N3_bi".
+ BcSim_t bus; // File-backed broadcast medium handle.
+ uint8_t leds; // Eight demo LED states packed into one byte.
+ char key[NODE_KEY_MAX + 1u]; // Stored printable key, always zero-terminated.
+ uint8_t keyLen; // Number of valid key bytes before the terminating zero.
+ uint8_t canSend; // 1 if this node may emit to the bus.
+ uint8_t canReceive; // 1 if this node polls and decodes incoming frames.
+ uint8_t rxLogEnabled; // 1 if normal Trice log records should be printed.
+ uint32_t replyStampMask; // Demo-only responder bit used for stamped routing.
#if TRICE_RX_SUPPORT == 1
- uint8_t stream[NODE_STREAM_MAX]; // Raw bus bytes waiting for frame scanning.
- size_t streamLen; // Number of valid bytes in stream[].
- uint8_t frame[NODE_FRAME_MAX]; // Decoded single-record buffer.
+ uint8_t stream[NODE_STREAM_MAX]; // Raw bus bytes waiting for frame scanning.
+ size_t streamLen; // Number of valid bytes in stream[].
+ uint8_t frame[NODE_FRAME_MAX]; // Decoded single-record buffer.
#endif
} node_t;
diff --git a/examples/TriceAbc/NodeLib/nodeAbc.c b/examples/TriceAbc/NodeLib/nodeAbc.c
index 93191c569..81452a5b5 100644
--- a/examples/TriceAbc/NodeLib/nodeAbc.c
+++ b/examples/TriceAbc/NodeLib/nodeAbc.c
@@ -4,46 +4,46 @@
#include "nodeAbc.h"
const triceAbc_t triceAbc[] = {
- /* Trice type */ /* id, bitWidth, function pointer */
- /* Trice32C */ { 1490u, 32u, divide },
- /* TRiceC */ { 1512u, 0u, getLeds },
- /* triceC */ { 1716u, 0u, logState },
- /* TRiceC */ { 1737u, 0u, getLeds },
- /* TriceC */ { 2261u, 0u, logState },
- /* Trice8C */ { 2859u, 8u, setLeds },
- /* trice8C */ { 2945u, 8u, LedsState },
- /* TriceC */ { 2968u, 0u, getLeds },
- /* Trice32C */ { 3204u, 32u, DivideResult },
- /* trice32C */ { 3448u, 32u, DivideResult },
- /* triceC */ { 3578u, 0u, logState },
- /* trice8C */ { 3792u, 8u, setKey },
- /* trice8C */ { 3925u, 8u, setKey },
- /* TRiceC */ { 3945u, 0u, getLeds },
- /* triceC */ { 4208u, 0u, logState },
- /* TRice8C */ { 4381u, 8u, LedsState },
- /* trice32C */ { 4499u, 32u, divide },
- /* TRice32C */ { 4502u, 32u, DivideResult },
- /* trice32C */ { 4557u, 32u, DivideResult },
- /* TriceC */ { 4650u, 0u, getLeds },
- /* triceC */ { 4818u, 0u, getLeds },
- /* trice8C */ { 5150u, 8u, setLeds },
- /* Trice8C */ { 5155u, 8u, setKey },
- /* Trice8C */ { 5517u, 8u, setKey },
- /* TRice32C */ { 5642u, 32u, divide },
- /* Trice8C */ { 5749u, 8u, LedsState },
- /* Trice8C */ { 5768u, 8u, setLeds },
- /* Trice32C */ { 6059u, 32u, divide },
- /* TriceC */ { 6227u, 0u, getLeds },
- /* trice8C */ { 6278u, 8u, setLeds },
- /* Trice8C */ { 6603u, 8u, setLeds },
- /* trice8C */ { 6890u, 8u, setKey },
- /* TriceC */ { 7084u, 0u, logState },
- /* trice8C */ { 7145u, 8u, LedsState },
- /* triceC */ { 7171u, 0u, getLeds },
- /* triceC */ { 7313u, 0u, getLeds },
- /* Trice8C */ { 7383u, 8u, setKey },
- /* trice8C */ { 7431u, 8u, setLeds },
- /* TriceC */ { 7522u, 0u, logState },
+ /* Trice type */ /* id, bitWidth, function pointer */
+ /* Trice32C */ {1490u, 32u, divide},
+ /* TRiceC */ {1512u, 0u, getLeds},
+ /* triceC */ {1716u, 0u, logState},
+ /* TRiceC */ {1737u, 0u, getLeds},
+ /* TriceC */ {2261u, 0u, logState},
+ /* Trice8C */ {2859u, 8u, setLeds},
+ /* trice8C */ {2945u, 8u, LedsState},
+ /* TriceC */ {2968u, 0u, getLeds},
+ /* Trice32C */ {3204u, 32u, DivideResult},
+ /* trice32C */ {3448u, 32u, DivideResult},
+ /* triceC */ {3578u, 0u, logState},
+ /* trice8C */ {3792u, 8u, setKey},
+ /* trice8C */ {3925u, 8u, setKey},
+ /* TRiceC */ {3945u, 0u, getLeds},
+ /* triceC */ {4208u, 0u, logState},
+ /* TRice8C */ {4381u, 8u, LedsState},
+ /* trice32C */ {4499u, 32u, divide},
+ /* TRice32C */ {4502u, 32u, DivideResult},
+ /* trice32C */ {4557u, 32u, DivideResult},
+ /* TriceC */ {4650u, 0u, getLeds},
+ /* triceC */ {4818u, 0u, getLeds},
+ /* trice8C */ {5150u, 8u, setLeds},
+ /* Trice8C */ {5155u, 8u, setKey},
+ /* Trice8C */ {5517u, 8u, setKey},
+ /* TRice32C */ {5642u, 32u, divide},
+ /* Trice8C */ {5749u, 8u, LedsState},
+ /* Trice8C */ {5768u, 8u, setLeds},
+ /* Trice32C */ {6059u, 32u, divide},
+ /* TriceC */ {6227u, 0u, getLeds},
+ /* trice8C */ {6278u, 8u, setLeds},
+ /* Trice8C */ {6603u, 8u, setLeds},
+ /* trice8C */ {6890u, 8u, setKey},
+ /* TriceC */ {7084u, 0u, logState},
+ /* trice8C */ {7145u, 8u, LedsState},
+ /* triceC */ {7171u, 0u, getLeds},
+ /* triceC */ {7313u, 0u, getLeds},
+ /* Trice8C */ {7383u, 8u, setKey},
+ /* trice8C */ {7431u, 8u, setLeds},
+ /* TriceC */ {7522u, 0u, logState},
};
const unsigned triceAbcElements = sizeof(triceAbc) / sizeof(triceAbc[0]);
diff --git a/examples/TriceAbc/NodeLib/til.c b/examples/TriceAbc/NodeLib/til.c
index 6b6d2a91e..fd9e53832 100644
--- a/examples/TriceAbc/NodeLib/til.c
+++ b/examples/TriceAbc/NodeLib/til.c
@@ -10,2499 +10,2499 @@
#include "triceRx.h"
const triceLog_t triceLog[] = {
- /* Trice type ( extended ) */ /* id, bitWidth, paramCount, format-string */
- /* TRICE8_B ( TRICE8B ) */ { 13271u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02x\n" },
- /* TRICE8_B ( TRICE8B ) */ { 13274u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02x\n" },
- /* TRICE16_B ( TRICE16B ) */ { 13281u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %04x\n" },
- /* TRICE64_B ( TRICE64B ) */ { 13291u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %016x\n" },
- /* TRice64B ( TRice64B ) */ { 13292u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %016x\n" },
- /* Trice64B ( Trice64B ) */ { 13293u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %016x\n" },
- /* trice64B ( trice64B ) */ { 13294u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %016x\n" },
- /* trice8B ( trice8B ) */ { 13277u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02llx\n" },
- /* Trice8B ( Trice8B ) */ { 13276u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02lx\n" },
- /* TRICE8_B ( TRICE8B ) */ { 15243u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02x " },
- /* TRICE8_B ( TRICE8B ) */ { 15246u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02x " },
- /* TRICE8_B ( TRICE8B ) */ { 15249u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02x " },
- /* trice8B ( trice8B ) */ { 13280u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02x\n" },
- /* TRice8B ( TRice8B ) */ { 13275u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02zx\n" },
- /* TRice16B ( TRice16B ) */ { 13282u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %04x\n" },
- /* Trice16B ( Trice16B ) */ { 13283u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %04x\n" },
- /* trice16B ( trice16B ) */ { 13284u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %04x\n" },
- /* TRICE32_B ( TRICE32B ) */ { 13286u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %08x\n" },
- /* TRice32B ( TRice32B ) */ { 13287u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %08x\n" },
- /* Trice32B ( Trice32B ) */ { 13288u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %08x\n" },
- /* trice32B ( trice32B ) */ { 13289u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %08x\n" },
- /* TRICE ( TRICE32_1 ) */ { 15239u, 32u, 1u, " = %d\n" },
- /* TRICE ( TRICE32_1 ) */ { 15241u, 32u, 1u, " = %d\n" },
- /* TRice8B ( TRice8B ) */ { 15285u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "%3x\n" },
- /* TRice8B ( TRice8B ) */ { 15286u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "%3x\n" },
- /* TRICE8_B ( TRICE8B ) */ { 13273u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "%4ld\n" },
- /* trice ( trice_0 ) */ { 13165u, 32u, 0u, "--------------------------------------------------\n" },
- /* trice ( trice_0 ) */ { 13173u, 32u, 0u, "--------------------------------------------------\n" },
- /* TRICE ( TRICE_0 ) */ { 14695u, 32u, 0u, "--------------------------------------------------\n" },
- /* TRICE ( TRICE_0 ) */ { 14696u, 32u, 0u, "--------------------------------------------------\n" },
- /* TRICE ( TRICE_0 ) */ { 14698u, 32u, 0u, "--------------------------------------------------\n" },
- /* TRICE ( TRICE_0 ) */ { 14700u, 32u, 0u, "--------------------------------------------------\n" },
- /* trice ( trice_0 ) */ { 14806u, 32u, 0u, "1" },
- /* trice ( trice_0 ) */ { 14807u, 32u, 0u, "2" },
- /* trice ( trice_0 ) */ { 14808u, 32u, 0u, "3" },
- /* trice ( trice_0 ) */ { 14809u, 32u, 0u, "4" },
- /* trice ( trice32_4 ) */ { 15278u, 32u, 4u, "A user printi call with integer and float values: %u, %d, %x, %2.1f\n" },
- /* trice ( trice_0 ) */ { 15276u, 32u, 0u, "A user printi call without values.\n" },
- /* TRICE ( TRICE_0 ) */ { 13713u, 32u, 0u, "ALARM:red+i:white+h\n" },
- /* trice ( trice_0 ) */ { 13763u, 32u, 0u, "ALARM:red+i:white+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13813u, 32u, 0u, "ALARM:red+i:white+h\n" },
- /* Trice ( Trice_0 ) */ { 13863u, 32u, 0u, "ALARM:red+i:white+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13913u, 32u, 0u, "ALARM:red+i:white+h\n" },
- /* TRice ( TRice_0 ) */ { 13963u, 32u, 0u, "ALARM:red+i:white+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13711u, 32u, 0u, "ALERT:magenta:magenta+h\n" },
- /* trice ( trice_0 ) */ { 13761u, 32u, 0u, "ALERT:magenta:magenta+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13811u, 32u, 0u, "ALERT:magenta:magenta+h\n" },
- /* Trice ( Trice_0 ) */ { 13861u, 32u, 0u, "ALERT:magenta:magenta+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13911u, 32u, 0u, "ALERT:magenta:magenta+h\n" },
- /* TRice ( TRice_0 ) */ { 13961u, 32u, 0u, "ALERT:magenta:magenta+h\n" },
- /* triceAssertFalse ( ) */ { 13052u, 32u, 0u, "ASSERT:flag not false!\n" },
- /* TriceAssertFalse ( ) */ { 13053u, 32u, 0u, "ASSERT:flag not false!\n" },
- /* TRiceAssertFalse ( ) */ { 13054u, 32u, 0u, "ASSERT:flag not false!\n" },
- /* triceAssertFalse ( ) */ { 13067u, 32u, 0u, "ASSERT:flag not false!\n" },
- /* TriceAssertFalse ( ) */ { 13069u, 32u, 0u, "ASSERT:flag not false!\n" },
- /* TRiceAssertFalse ( ) */ { 13071u, 32u, 0u, "ASSERT:flag not false!\n" },
- /* triceAssertTrue ( ) */ { 13046u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* TriceAssertTrue ( ) */ { 13047u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* TRiceAssertTrue ( ) */ { 13048u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* triceAssert ( ) */ { 13049u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* TriceAssert ( ) */ { 13050u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* TRiceAssert ( ) */ { 13051u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* triceAssertTrue ( ) */ { 13055u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* TriceAssertTrue ( ) */ { 13057u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* TRiceAssertTrue ( ) */ { 13059u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* triceAssert ( ) */ { 13061u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* TriceAssert ( ) */ { 13063u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* TRiceAssert ( ) */ { 13065u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* triceAssertOrReturn ( ) */ { 13073u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* TriceAssertOrReturn ( ) */ { 13075u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* TRiceAssertOrReturn ( ) */ { 13077u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* triceAssertOrReturnValue ( ) */ { 15257u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* TriceAssertOrReturnValue ( ) */ { 15258u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* TRiceAssertOrReturnValue ( ) */ { 15259u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* TRICE ( TRICE_0 ) */ { 13712u, 32u, 0u, "ASSERT:yellow+i:blue\n" },
- /* trice ( trice_0 ) */ { 13762u, 32u, 0u, "ASSERT:yellow+i:blue\n" },
- /* TRICE ( TRICE_0 ) */ { 13812u, 32u, 0u, "ASSERT:yellow+i:blue\n" },
- /* Trice ( Trice_0 ) */ { 13862u, 32u, 0u, "ASSERT:yellow+i:blue\n" },
- /* TRICE ( TRICE_0 ) */ { 13912u, 32u, 0u, "ASSERT:yellow+i:blue\n" },
- /* TRice ( TRice_0 ) */ { 13962u, 32u, 0u, "ASSERT:yellow+i:blue\n" },
- /* TRICE ( TRICE32_1 ) */ { 14703u, 32u, 1u, "ATT:attention message, SysTick is %6u\n" },
- /* TRICE ( TRICE_0 ) */ { 13695u, 32u, 0u, "ATTENTION:11:green\n" },
- /* trice ( trice_0 ) */ { 13745u, 32u, 0u, "ATTENTION:11:green\n" },
- /* TRICE ( TRICE_0 ) */ { 13795u, 32u, 0u, "ATTENTION:11:green\n" },
- /* Trice ( Trice_0 ) */ { 13845u, 32u, 0u, "ATTENTION:11:green\n" },
- /* TRICE ( TRICE_0 ) */ { 13895u, 32u, 0u, "ATTENTION:11:green\n" },
- /* TRice ( TRice_0 ) */ { 13945u, 32u, 0u, "ATTENTION:11:green\n" },
- /* TRICE8_B ( TRICE8B ) */ { 13272u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "BUF: %02x\n" },
- /* TRICE ( TRICE_0 ) */ { 13691u, 32u, 0u, "CRITICAL:red+i:default+h\n" },
- /* trice ( trice_0 ) */ { 13741u, 32u, 0u, "CRITICAL:red+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13791u, 32u, 0u, "CRITICAL:red+i:default+h\n" },
- /* Trice ( Trice_0 ) */ { 13841u, 32u, 0u, "CRITICAL:red+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13891u, 32u, 0u, "CRITICAL:red+i:default+h\n" },
- /* TRice ( TRice_0 ) */ { 13941u, 32u, 0u, "CRITICAL:red+i:default+h\n" },
- /* trice ( trice32_1 ) */ { 13003u, 32u, 1u, "CUSTOM_PRINT example: the right answer is: %d\n" },
- /* trice ( trice32_1 ) */ { 15261u, 32u, 1u, "CUSTOM_PRINT example: the right answer is: %d\n" },
- /* TRICE ( TRICE32_1 ) */ { 14706u, 32u, 1u, "DBG:debug message, SysTick is %6u\n" },
- /* TRICE ( TRICE_0 ) */ { 13697u, 32u, 0u, "DEBUG:130+i\n" },
- /* trice ( trice_0 ) */ { 13747u, 32u, 0u, "DEBUG:130+i\n" },
- /* TRICE ( TRICE_0 ) */ { 13797u, 32u, 0u, "DEBUG:130+i\n" },
- /* Trice ( Trice_0 ) */ { 13847u, 32u, 0u, "DEBUG:130+i\n" },
- /* TRICE ( TRICE_0 ) */ { 13897u, 32u, 0u, "DEBUG:130+i\n" },
- /* TRice ( TRice_0 ) */ { 13947u, 32u, 0u, "DEBUG:130+i\n" },
- /* TRICE ( TRICE_0 ) */ { 13709u, 32u, 0u, "DEFAULT:off\n" },
- /* trice ( trice_0 ) */ { 13759u, 32u, 0u, "DEFAULT:off\n" },
- /* TRICE ( TRICE_0 ) */ { 13809u, 32u, 0u, "DEFAULT:off\n" },
- /* Trice ( Trice_0 ) */ { 13859u, 32u, 0u, "DEFAULT:off\n" },
- /* TRICE ( TRICE_0 ) */ { 13909u, 32u, 0u, "DEFAULT:off\n" },
- /* TRice ( TRice_0 ) */ { 13959u, 32u, 0u, "DEFAULT:off\n" },
- /* TRICE ( TRICE32_1 ) */ { 14704u, 32u, 1u, "DIA:diagnostics message, SysTick is %6u\n" },
- /* TRICE ( TRICE_0 ) */ { 13705u, 32u, 0u, "DIAG:yellow+i:default+h\n" },
- /* trice ( trice_0 ) */ { 13755u, 32u, 0u, "DIAG:yellow+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13805u, 32u, 0u, "DIAG:yellow+i:default+h\n" },
- /* Trice ( Trice_0 ) */ { 13855u, 32u, 0u, "DIAG:yellow+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13905u, 32u, 0u, "DIAG:yellow+i:default+h\n" },
- /* TRice ( TRice_0 ) */ { 13955u, 32u, 0u, "DIAG:yellow+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13692u, 32u, 0u, "EMERGENCY:red+i:blue\n" },
- /* trice ( trice_0 ) */ { 13742u, 32u, 0u, "EMERGENCY:red+i:blue\n" },
- /* TRICE ( TRICE_0 ) */ { 13792u, 32u, 0u, "EMERGENCY:red+i:blue\n" },
- /* Trice ( Trice_0 ) */ { 13842u, 32u, 0u, "EMERGENCY:red+i:blue\n" },
- /* TRICE ( TRICE_0 ) */ { 13892u, 32u, 0u, "EMERGENCY:red+i:blue\n" },
- /* TRice ( TRice_0 ) */ { 13942u, 32u, 0u, "EMERGENCY:red+i:blue\n" },
- /* TRICE ( TRICE32_1 ) */ { 14701u, 32u, 1u, "ERR:error message, SysTick is %6u\n" },
- /* TRICE ( TRICE_0 ) */ { 13693u, 32u, 0u, "ERROR:11:red\n" },
- /* trice ( trice_0 ) */ { 13743u, 32u, 0u, "ERROR:11:red\n" },
- /* TRICE ( TRICE_0 ) */ { 13793u, 32u, 0u, "ERROR:11:red\n" },
- /* Trice ( Trice_0 ) */ { 13843u, 32u, 0u, "ERROR:11:red\n" },
- /* TRICE ( TRICE_0 ) */ { 13893u, 32u, 0u, "ERROR:11:red\n" },
- /* TRice ( TRice_0 ) */ { 13943u, 32u, 0u, "ERROR:11:red\n" },
- /* TRICE ( TRICE_0 ) */ { 13690u, 32u, 0u, "FATAL:magenta+b:red\n" },
- /* trice ( trice_0 ) */ { 13740u, 32u, 0u, "FATAL:magenta+b:red\n" },
- /* TRICE ( TRICE_0 ) */ { 13790u, 32u, 0u, "FATAL:magenta+b:red\n" },
- /* Trice ( Trice_0 ) */ { 13840u, 32u, 0u, "FATAL:magenta+b:red\n" },
- /* TRICE ( TRICE_0 ) */ { 13890u, 32u, 0u, "FATAL:magenta+b:red\n" },
- /* TRice ( TRice_0 ) */ { 13940u, 32u, 0u, "FATAL:magenta+b:red\n" },
- /* trice ( trice32_1 ) */ { 13002u, 32u, 1u, "Fun %x!\n" },
- /* TRice ( TRice_0 ) */ { 15281u, 32u, 0u, "Hello " },
- /* TRice ( TRice_0 ) */ { 15287u, 32u, 0u, "Hello " },
- /* TRice ( TRice_0 ) */ { 13030u, 32u, 0u, "Hello World!\n" },
- /* TRice ( TRice_0 ) */ { 15260u, 32u, 0u, "Hello World!\n" },
- /* TRice ( TRice_0 ) */ { 15262u, 32u, 0u, "Hello World!\n" },
- /* TRice ( TRice_0 ) */ { 15291u, 32u, 0u, "Hello World!\n" },
- /* TRice ( TRice_0 ) */ { 15308u, 32u, 0u, "Hello World!\n" },
- /* trice ( trice_0 ) */ { 15284u, 32u, 0u, "Hello again\n" },
- /* trice ( trice_0 ) */ { 15290u, 32u, 0u, "Hello again\n" },
- /* TRICE ( TRICE_0 ) */ { 13696u, 32u, 0u, "INFO:cyan+b:default+h\n" },
- /* trice ( trice_0 ) */ { 13746u, 32u, 0u, "INFO:cyan+b:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13796u, 32u, 0u, "INFO:cyan+b:default+h\n" },
- /* Trice ( Trice_0 ) */ { 13846u, 32u, 0u, "INFO:cyan+b:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13896u, 32u, 0u, "INFO:cyan+b:default+h\n" },
- /* TRice ( TRice_0 ) */ { 13946u, 32u, 0u, "INFO:cyan+b:default+h\n" },
- /* TRICE ( TRICE32_1 ) */ { 14712u, 32u, 1u, "INFO:informal message, SysTick is %6u\n" },
- /* TRICE ( TRICE_0 ) */ { 13706u, 32u, 0u, "INTERRUPT:magenta+i:default+h\n" },
- /* trice ( trice_0 ) */ { 13756u, 32u, 0u, "INTERRUPT:magenta+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13806u, 32u, 0u, "INTERRUPT:magenta+i:default+h\n" },
- /* Trice ( Trice_0 ) */ { 13856u, 32u, 0u, "INTERRUPT:magenta+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13906u, 32u, 0u, "INTERRUPT:magenta+i:default+h\n" },
- /* TRice ( TRice_0 ) */ { 13956u, 32u, 0u, "INTERRUPT:magenta+i:default+h\n" },
- /* TRICE ( TRICE32_1 ) */ { 14710u, 32u, 1u, "ISR:interrupt message, SysTick is %6u\n" },
- /* TRICE ( TRICE_0 ) */ { 13700u, 32u, 0u, "MESSAGE:green+h:black\n" },
- /* trice ( trice_0 ) */ { 13750u, 32u, 0u, "MESSAGE:green+h:black\n" },
- /* TRICE ( TRICE_0 ) */ { 13800u, 32u, 0u, "MESSAGE:green+h:black\n" },
- /* Trice ( Trice_0 ) */ { 13850u, 32u, 0u, "MESSAGE:green+h:black\n" },
- /* TRICE ( TRICE_0 ) */ { 13900u, 32u, 0u, "MESSAGE:green+h:black\n" },
- /* TRice ( TRice_0 ) */ { 13950u, 32u, 0u, "MESSAGE:green+h:black\n" },
- /* TRICE ( TRICE32_1 ) */ { 13331u, 32u, 1u, "MSG:1/11 = %g\n" },
- /* TRICE ( TRICE32_1 ) */ { 14711u, 32u, 1u, "MSG:normal message, SysTick is %6u\n" },
- /* TRICE ( TRICE_0 ) */ { 13710u, 32u, 0u, "NOTICE:blue:white+h\n" },
- /* trice ( trice_0 ) */ { 13760u, 32u, 0u, "NOTICE:blue:white+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13810u, 32u, 0u, "NOTICE:blue:white+h\n" },
- /* Trice ( Trice_0 ) */ { 13860u, 32u, 0u, "NOTICE:blue:white+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13910u, 32u, 0u, "NOTICE:blue:white+h\n" },
- /* TRice ( TRice_0 ) */ { 13960u, 32u, 0u, "NOTICE:blue:white+h\n" },
- /* TRICE ( TRICE32_1 ) */ { 14708u, 32u, 1u, "RD:read message, SysTick is %6u\n" },
- /* TRICE ( TRICE_0 ) */ { 13701u, 32u, 0u, "READ:black+i:yellow+h\n" },
- /* trice ( trice_0 ) */ { 13751u, 32u, 0u, "READ:black+i:yellow+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13801u, 32u, 0u, "READ:black+i:yellow+h\n" },
- /* Trice ( Trice_0 ) */ { 13851u, 32u, 0u, "READ:black+i:yellow+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13901u, 32u, 0u, "READ:black+i:yellow+h\n" },
- /* TRice ( TRice_0 ) */ { 13951u, 32u, 0u, "READ:black+i:yellow+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13703u, 32u, 0u, "RECEIVE:black+h:black\n" },
- /* trice ( trice_0 ) */ { 13753u, 32u, 0u, "RECEIVE:black+h:black\n" },
- /* TRICE ( TRICE_0 ) */ { 13803u, 32u, 0u, "RECEIVE:black+h:black\n" },
- /* Trice ( Trice_0 ) */ { 13853u, 32u, 0u, "RECEIVE:black+h:black\n" },
- /* TRICE ( TRICE_0 ) */ { 13903u, 32u, 0u, "RECEIVE:black+h:black\n" },
- /* TRice ( TRice_0 ) */ { 13953u, 32u, 0u, "RECEIVE:black+h:black\n" },
- /* Trice64F ( Trice64F ) */ { 13310u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZc" },
- /* Trice64F ( Trice64F ) */ { 15306u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZc" },
- /* Trice64C ( Trice64C ) */ { 15779u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZc" },
- /* trice64F ( trice64F ) */ { 13311u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZd" },
- /* trice64C ( trice64C ) */ { 15312u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZd" },
- /* trice64C ( trice64C ) */ { 15313u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZd" },
- /* trice64C ( trice64C ) */ { 15314u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZd" },
- /* trice64C ( trice64C ) */ { 16110u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZd" },
- /* trice64C ( trice64C ) */ { 16155u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZd" },
- /* trice64F ( trice64F ) */ { 15307u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "Rpc:FunctionNameZd" },
- /* triceS ( triceS ) */ { 15280u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"A user ... with string, integer and float values: %u, %d, %x, %2.1f, %s and %s\n\"')SAlias_Strg" },
- /* triceS ( triceS ) */ { 15279u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"A user prints call with integer and float values: %u, %d, %x, %2.1f\n\"')SAlias_Strg" },
- /* triceS ( triceS ) */ { 15277u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"A user prints call without values.\n\"')SAlias_Strg" },
- /* triceS ( triceS ) */ { 15274u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s....\n\"')SAlias_Strg" },
- /* triceS ( triceS ) */ { 15273u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s...\n\"')SAlias_Strg" },
- /* triceS ( triceS ) */ { 15271u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s..\n\"')SAlias_Strg" },
- /* triceS ( triceS ) */ { 15264u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s.\n\"')SAlias_Strg" },
- /* triceS ( triceS ) */ { 15265u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s.\n\"')SAlias_Strg" },
- /* triceS ( triceS ) */ { 15266u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s.\n\"')SAlias_Strg" },
- /* triceS ( triceS ) */ { 15267u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s.\n\"')SAlias_Strg" },
- /* triceS ( triceS ) */ { 15269u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s.\n\"')SAlias_Strg" },
- /* triceS ( triceS ) */ { 15270u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s.\n\"')SAlias_Strg" },
- /* triceS ( triceS ) */ { 15275u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:'-alias' & '-salias' contributor is %s.\n\"')SAlias_Strg" },
- /* triceS ( triceS ) */ { 13004u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('theFastFoundAnswer == theRightAnswer')SAlias_Strg" },
- /* triceS ( triceS ) */ { 15263u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('theFastFoundAnswer == theRightAnswer')SAlias_Strg" },
- /* triceS ( triceS ) */ { 13006u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('theFastFoundAnswer == theRightAnswer, (char*)\"'%s' Am, it is %d\"')SAlias_Strg" },
- /* triceS ( triceS ) */ { 15272u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('theFastFoundAnswer == theRightAnswer, (char*)\"'%s' Am, it is %d\"')SAlias_Strg" },
- /* triceS ( triceS ) */ { 13005u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('theFastFoundAnswer == theRightAnswer, (char*)theQuestion ')SAlias_Strg" },
- /* triceS ( triceS ) */ { 15268u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('theFastFoundAnswer == theRightAnswer, (char*)theQuestion ')SAlias_Strg" },
- /* trice64B ( trice64B ) */ { 13295u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SIG: %016x\n" },
- /* TRICE ( TRICE32_1 ) */ { 14707u, 32u, 1u, "SIG:signal message, SysTick is %6u\n" },
- /* TRICE ( TRICE_0 ) */ { 13707u, 32u, 0u, "SIGNAL:118+i\n" },
- /* trice ( trice_0 ) */ { 13757u, 32u, 0u, "SIGNAL:118+i\n" },
- /* TRICE ( TRICE_0 ) */ { 13807u, 32u, 0u, "SIGNAL:118+i\n" },
- /* Trice ( Trice_0 ) */ { 13857u, 32u, 0u, "SIGNAL:118+i\n" },
- /* TRICE ( TRICE_0 ) */ { 13907u, 32u, 0u, "SIGNAL:118+i\n" },
- /* TRice ( TRice_0 ) */ { 13957u, 32u, 0u, "SIGNAL:118+i\n" },
- /* TRICE ( TRICE_0 ) */ { 13708u, 32u, 0u, "TEST:yellow+h:black\n" },
- /* trice ( trice_0 ) */ { 13758u, 32u, 0u, "TEST:yellow+h:black\n" },
- /* TRICE ( TRICE_0 ) */ { 13808u, 32u, 0u, "TEST:yellow+h:black\n" },
- /* Trice ( Trice_0 ) */ { 13858u, 32u, 0u, "TEST:yellow+h:black\n" },
- /* TRICE ( TRICE_0 ) */ { 13908u, 32u, 0u, "TEST:yellow+h:black\n" },
- /* TRice ( TRice_0 ) */ { 13958u, 32u, 0u, "TEST:yellow+h:black\n" },
- /* TRICE ( TRICE32_1 ) */ { 14705u, 32u, 1u, "TIM:timing message, SysTick is %6u\n" },
- /* TRICE ( TRICE_0 ) */ { 13699u, 32u, 0u, "TIME:blue+i:blue+h\n" },
- /* trice ( trice_0 ) */ { 13749u, 32u, 0u, "TIME:blue+i:blue+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13799u, 32u, 0u, "TIME:blue+i:blue+h\n" },
- /* Trice ( Trice_0 ) */ { 13849u, 32u, 0u, "TIME:blue+i:blue+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13899u, 32u, 0u, "TIME:blue+i:blue+h\n" },
- /* TRice ( TRice_0 ) */ { 13949u, 32u, 0u, "TIME:blue+i:blue+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13698u, 32u, 0u, "TRACE:default+i:default+h\n" },
- /* trice ( trice_0 ) */ { 13748u, 32u, 0u, "TRACE:default+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13798u, 32u, 0u, "TRACE:default+i:default+h\n" },
- /* Trice ( Trice_0 ) */ { 13848u, 32u, 0u, "TRACE:default+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13898u, 32u, 0u, "TRACE:default+i:default+h\n" },
- /* TRice ( TRice_0 ) */ { 13948u, 32u, 0u, "TRACE:default+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13704u, 32u, 0u, "TRANSMIT:black:black+h\n" },
- /* trice ( trice_0 ) */ { 13754u, 32u, 0u, "TRANSMIT:black:black+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13804u, 32u, 0u, "TRANSMIT:black:black+h\n" },
- /* Trice ( Trice_0 ) */ { 13854u, 32u, 0u, "TRANSMIT:black:black+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13904u, 32u, 0u, "TRANSMIT:black:black+h\n" },
- /* TRice ( TRice_0 ) */ { 13954u, 32u, 0u, "TRANSMIT:black:black+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13714u, 32u, 0u, "VERBOSE:blue:default\n" },
- /* trice ( trice_0 ) */ { 13764u, 32u, 0u, "VERBOSE:blue:default\n" },
- /* TRICE ( TRICE_0 ) */ { 13814u, 32u, 0u, "VERBOSE:blue:default\n" },
- /* Trice ( Trice_0 ) */ { 13864u, 32u, 0u, "VERBOSE:blue:default\n" },
- /* TRICE ( TRICE_0 ) */ { 13914u, 32u, 0u, "VERBOSE:blue:default\n" },
- /* TRice ( TRice_0 ) */ { 13964u, 32u, 0u, "VERBOSE:blue:default\n" },
- /* TRICE ( TRICE_0 ) */ { 13694u, 32u, 0u, "WARNING:11+i:red\n" },
- /* trice ( trice_0 ) */ { 13744u, 32u, 0u, "WARNING:11+i:red\n" },
- /* TRICE ( TRICE_0 ) */ { 13794u, 32u, 0u, "WARNING:11+i:red\n" },
- /* Trice ( Trice_0 ) */ { 13844u, 32u, 0u, "WARNING:11+i:red\n" },
- /* TRICE ( TRICE_0 ) */ { 13894u, 32u, 0u, "WARNING:11+i:red\n" },
- /* TRice ( TRice_0 ) */ { 13944u, 32u, 0u, "WARNING:11+i:red\n" },
- /* trice16 ( trice16_2 ) */ { 16383u, 16u, 2u, "WARNING:RTT0_writeDepthMax=%u (BUFFER_SIZE_UP=%u)\n" },
- /* TRice ( TRice_0 ) */ { 13000u, 32u, 0u, "WARNING:USARTq OverRun Error Flag is set!\n" },
- /* TRice ( TRice_0 ) */ { 13014u, 32u, 0u, "WARNING:USARTq OverRun Error Flag is set!\n" },
- /* TRICE ( TRICE32_1 ) */ { 14709u, 32u, 1u, "WR:write message, SysTick is %6u\n" },
- /* TRICE ( TRICE_0 ) */ { 13702u, 32u, 0u, "WRITE:black+u:yellow+h\n" },
- /* trice ( trice_0 ) */ { 13752u, 32u, 0u, "WRITE:black+u:yellow+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13802u, 32u, 0u, "WRITE:black+u:yellow+h\n" },
- /* Trice ( Trice_0 ) */ { 13852u, 32u, 0u, "WRITE:black+u:yellow+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13902u, 32u, 0u, "WRITE:black+u:yellow+h\n" },
- /* TRice ( TRice_0 ) */ { 13952u, 32u, 0u, "WRITE:black+u:yellow+h\n" },
- /* TRICE ( TRICE32_1 ) */ { 14702u, 32u, 1u, "WRN:warning message, SysTick is %6u\n" },
- /* TRice ( TRice_0 ) */ { 15282u, 32u, 0u, "World!\n" },
- /* TRice ( TRice_0 ) */ { 15288u, 32u, 0u, "World!\n" },
- /* TRICE ( TRICE_0 ) */ { 15244u, 32u, 0u, "\n" },
- /* TRICE ( TRICE_0 ) */ { 15247u, 32u, 0u, "\n" },
- /* TRICE ( TRICE_0 ) */ { 15250u, 32u, 0u, "\n" },
- /* TRice ( TRice32_1 ) */ { 13028u, 32u, 1u, "\rTriceCheck %4d" },
- /* trice ( trice_0 ) */ { 14797u, 32u, 0u, "a:c" },
- /* trice ( trice_0 ) */ { 14815u, 32u, 0u, "a:c" },
- /* Trice32C ( Trice32C ) */ { 3204u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "abc:DivideResult" },
- /* trice32C ( trice32C ) */ { 3448u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "abc:DivideResult" },
- /* TRice32C ( TRice32C ) */ { 4502u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "abc:DivideResult" },
- /* trice32C ( trice32C ) */ { 4557u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "abc:DivideResult" },
- /* trice8C ( trice8C ) */ { 2945u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "abc:LedsState" },
- /* TRice8C ( TRice8C ) */ { 4381u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "abc:LedsState" },
- /* Trice8C ( Trice8C ) */ { 5749u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "abc:LedsState" },
- /* trice8C ( trice8C ) */ { 7145u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "abc:LedsState" },
- /* TRIce_C ( TRIce_C ) */ { 15371u, 0u, 0u, "abc:all:GetState" },
- /* TRICe_C ( TRICe_C ) */ { 15849u, 0u, 0u, "abc:all:GetState" },
- /* TRICE_C ( TRICE_C ) */ { 15917u, 0u, 0u, "abc:all:GetState" },
- /* triceC ( triceC ) */ { 16005u, 0u, 0u, "abc:all:GetState" },
- /* TriceC ( TriceC ) */ { 16014u, 0u, 0u, "abc:all:GetState" },
- /* TRiceC ( TRiceC ) */ { 16241u, 0u, 0u, "abc:all:GetState" },
- /* TRICE ( TRICE_0 ) */ { 13738u, 32u, 0u, "alarm:red+i:white+h\n" },
- /* trice ( trice_0 ) */ { 13788u, 32u, 0u, "alarm:red+i:white+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13838u, 32u, 0u, "alarm:red+i:white+h\n" },
- /* Trice ( Trice_0 ) */ { 13888u, 32u, 0u, "alarm:red+i:white+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13938u, 32u, 0u, "alarm:red+i:white+h\n" },
- /* TRice ( TRice_0 ) */ { 13988u, 32u, 0u, "alarm:red+i:white+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13736u, 32u, 0u, "alert:magenta:magenta+h\n" },
- /* trice ( trice_0 ) */ { 13786u, 32u, 0u, "alert:magenta:magenta+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13836u, 32u, 0u, "alert:magenta:magenta+h\n" },
- /* Trice ( Trice_0 ) */ { 13886u, 32u, 0u, "alert:magenta:magenta+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13936u, 32u, 0u, "alert:magenta:magenta+h\n" },
- /* TRice ( TRice_0 ) */ { 13986u, 32u, 0u, "alert:magenta:magenta+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13737u, 32u, 0u, "assert:yellow+i:blue\n" },
- /* trice ( trice_0 ) */ { 13787u, 32u, 0u, "assert:yellow+i:blue\n" },
- /* TRICE ( TRICE_0 ) */ { 13837u, 32u, 0u, "assert:yellow+i:blue\n" },
- /* Trice ( Trice_0 ) */ { 13887u, 32u, 0u, "assert:yellow+i:blue\n" },
- /* TRICE ( TRICE_0 ) */ { 13937u, 32u, 0u, "assert:yellow+i:blue\n" },
- /* TRice ( TRice_0 ) */ { 13987u, 32u, 0u, "assert:yellow+i:blue\n" },
- /* trice8B ( trice8B ) */ { 13278u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "att: %02x\n" },
- /* trice32B ( trice32B ) */ { 13290u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "att: %08x\n" },
- /* TRice16 ( TRice16_1 ) */ { 13238u, 16u, 1u, "att: 0x8888 == %04xh\n" },
- /* Trice16 ( Trice16_1 ) */ { 13239u, 16u, 1u, "att: 0x8888 == %04xh\n" },
- /* trice16 ( trice16_1 ) */ { 13240u, 16u, 1u, "att: 0x8888 == %04xh\n" },
- /* trice32 ( trice32_6 ) */ { 13169u, 32u, 6u, "att: TriceEncrypted = %08x %08x %08x %08x %08x %08x\n" },
- /* trice16 ( trice16_1 ) */ { 13029u, 16u, 1u, "att: line %u\n" },
- /* trice16 ( trice16_1 ) */ { 13164u, 16u, 1u, "att: line %u\n" },
- /* trice16 ( trice16_1 ) */ { 13174u, 16u, 1u, "att: line %u\n" },
- /* trice16 ( trice16_1 ) */ { 13237u, 16u, 1u, "att: line %u\n" },
- /* trice16 ( trice16_1 ) */ { 13241u, 16u, 1u, "att: line %u\n" },
- /* trice16 ( trice16_1 ) */ { 13258u, 16u, 1u, "att: line %u\n" },
- /* trice16 ( trice16_1 ) */ { 13330u, 16u, 1u, "att: line %u\n" },
- /* trice16 ( trice16_1 ) */ { 13333u, 16u, 1u, "att: line %u\n" },
- /* trice16 ( trice16_1 ) */ { 13345u, 16u, 1u, "att: line %u\n" },
- /* trice16 ( trice16_1 ) */ { 13359u, 16u, 1u, "att: line %u\n" },
- /* trice16 ( trice16_1 ) */ { 13379u, 16u, 1u, "att: line %u\n" },
- /* trice16 ( trice16_1 ) */ { 13386u, 16u, 1u, "att: line %u\n" },
- /* Trice16F ( Trice16F ) */ { 16337u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "att:ARemoteFunctionName" },
- /* Trice ( Trice32_3 ) */ { 15254u, 32u, 3u, "att:MyStructEvaluationFunction(json:ExA{Apple:%d, Birn:%u, Fisch:%f})\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 14729u, 32u, 1u, "att:TRICE32 %40b\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 14732u, 64u, 1u, "att:TRICE64 %70b\n" },
- /* TRICE ( TRICE_0 ) */ { 15018u, 32u, 0u, "att:Various single arguments\n" },
- /* TRICE ( TRICE_0 ) */ { 15011u, 32u, 0u, "att:formatted double\n" },
- /* TRICE ( TRICE_0 ) */ { 15004u, 32u, 0u, "att:formatted float\n" },
- /* trice ( trice_0 ) */ { 13244u, 32u, 0u, "att:mixed int & float & double & bits\n" },
- /* trice ( trice_0 ) */ { 14991u, 32u, 0u, "att:negative float & double\n" },
- /* trice ( trice_0 ) */ { 14929u, 32u, 0u, "att:positive and negative float in format variants\n" },
- /* trice ( trice_0 ) */ { 14960u, 32u, 0u, "att:positive float & double in variants\n" },
- /* TRICE32_0 ( TRICE_0 ) */ { 16368u, 32u, 0u, "att:🐁 Speedy Gonzales A 32-bit time stamp\n" },
- /* TRICE32_0 ( TRICE_0 ) */ { 16367u, 32u, 0u, "att:🐁 Speedy Gonzales B 32-bit time stamp\n" },
- /* TRICE32_0 ( TRICE_0 ) */ { 16366u, 32u, 0u, "att:🐁 Speedy Gonzales C 32-bit time stamp\n" },
- /* TRICE32_0 ( TRICE_0 ) */ { 16365u, 32u, 0u, "att:🐁 Speedy Gonzales D 32-bit time stamp\n" },
- /* TRICE32_0 ( TRICE_0 ) */ { 16364u, 32u, 0u, "att:🐁 Speedy Gonzales E 16-bit time stamp\n" },
- /* TRICE32_0 ( TRICE_0 ) */ { 16363u, 32u, 0u, "att:🐁 Speedy Gonzales F 16-bit time stamp\n" },
- /* TRICE32_0 ( TRICE_0 ) */ { 16362u, 32u, 0u, "att:🐁 Speedy Gonzales G 16-bit time stamp\n" },
- /* TRICE32_0 ( TRICE_0 ) */ { 16361u, 32u, 0u, "att:🐁 Speedy Gonzales H 16-bit time stamp\n" },
- /* TRICE32_0 ( TRICE_0 ) */ { 16360u, 32u, 0u, "att:🐁 Speedy Gonzales I without time stamp\n" },
- /* TRICE32_0 ( TRICE_0 ) */ { 16359u, 32u, 0u, "att:🐁 Speedy Gonzales J without time stamp\n" },
- /* TRICE32_0 ( TRICE_0 ) */ { 16358u, 32u, 0u, "att:🐁 Speedy Gonzales K without time stamp\n" },
- /* TRICE32_0 ( TRICE_0 ) */ { 16357u, 32u, 0u, "att:🐁 Speedy Gonzales L without time stamp\n" },
- /* TRice ( TRice_0 ) */ { 16356u, 32u, 0u, "att:🐁 Speedy Gonzales a 32-bit time stamp\n" },
- /* TRice ( TRice_0 ) */ { 16355u, 32u, 0u, "att:🐁 Speedy Gonzales b 32-bit time stamp\n" },
- /* TRice ( TRice_0 ) */ { 16354u, 32u, 0u, "att:🐁 Speedy Gonzales c 32-bit time stamp\n" },
- /* TRice ( TRice_0 ) */ { 16353u, 32u, 0u, "att:🐁 Speedy Gonzales d 32-bit time stamp\n" },
- /* Trice ( Trice_0 ) */ { 16352u, 32u, 0u, "att:🐁 Speedy Gonzales e 16-bit time stamp\n" },
- /* Trice ( Trice_0 ) */ { 16351u, 32u, 0u, "att:🐁 Speedy Gonzales f 16-bit time stamp\n" },
- /* Trice ( Trice_0 ) */ { 16350u, 32u, 0u, "att:🐁 Speedy Gonzales g 16-bit time stamp\n" },
- /* Trice ( Trice_0 ) */ { 16349u, 32u, 0u, "att:🐁 Speedy Gonzales h 16-bit time stamp\n" },
- /* trice ( trice_0 ) */ { 16348u, 32u, 0u, "att:🐁 Speedy Gonzales i without time stamp\n" },
- /* trice ( trice_0 ) */ { 16347u, 32u, 0u, "att:🐁 Speedy Gonzales j without time stamp\n" },
- /* trice ( trice_0 ) */ { 16346u, 32u, 0u, "att:🐁 Speedy Gonzales k without time stamp\n" },
- /* trice ( trice_0 ) */ { 16345u, 32u, 0u, "att:🐁 Speedy Gonzales l without time stamp\n" },
- /* TRICE ( TRICE_0 ) */ { 13720u, 32u, 0u, "attention:11:green\n" },
- /* trice ( trice_0 ) */ { 13770u, 32u, 0u, "attention:11:green\n" },
- /* TRICE ( TRICE_0 ) */ { 13820u, 32u, 0u, "attention:11:green\n" },
- /* Trice ( Trice_0 ) */ { 13870u, 32u, 0u, "attention:11:green\n" },
- /* TRICE ( TRICE_0 ) */ { 13920u, 32u, 0u, "attention:11:green\n" },
- /* TRice ( TRice_0 ) */ { 13970u, 32u, 0u, "attention:11:green\n" },
- /* TRice8F ( TRice8F ) */ { 13297u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWb" },
- /* TRice8C ( TRice8C ) */ { 15344u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWb" },
- /* Trice8F ( Trice8F ) */ { 13298u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWc" },
- /* Trice8C ( Trice8C ) */ { 15739u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWc" },
- /* trice8F ( trice8F ) */ { 13299u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWd" },
- /* trice8C ( trice8C ) */ { 15310u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWd" },
- /* trice8C ( trice8C ) */ { 15647u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWd" },
- /* trice8C ( trice8C ) */ { 15815u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWd" },
- /* trice8C ( trice8C ) */ { 15827u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWd" },
- /* trice8C ( trice8C ) */ { 16089u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWd" },
- /* TRice16F ( TRice16F ) */ { 13301u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXb" },
- /* TRice16C ( TRice16C ) */ { 15976u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXb" },
- /* Trice16F ( Trice16F ) */ { 13302u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXc" },
- /* Trice16C ( Trice16C ) */ { 15339u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXc" },
- /* trice16F ( trice16F ) */ { 13303u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXd" },
- /* trice16C ( trice16C ) */ { 15618u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXd" },
- /* trice16C ( trice16C ) */ { 15650u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXd" },
- /* trice16C ( trice16C ) */ { 15893u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXd" },
- /* trice16C ( trice16C ) */ { 16098u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXd" },
- /* trice16C ( trice16C ) */ { 16268u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXd" },
- /* trice32F ( trice32F ) */ { 13307u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameYd" },
- /* trice32F ( trice32F ) */ { 15303u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameYd" },
- /* trice32C ( trice32C ) */ { 15837u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameYd" },
- /* TRice64F ( TRice64F ) */ { 13309u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameZb" },
- /* TRice64F ( TRice64F ) */ { 15305u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameZb" },
- /* TRice64C ( TRice64C ) */ { 15559u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameZb" },
- /* Trice32C ( Trice32C ) */ { 1490u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:divide" },
- /* trice32C ( trice32C ) */ { 4499u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:divide" },
- /* TRice32C ( TRice32C ) */ { 5642u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:divide" },
- /* Trice32C ( Trice32C ) */ { 6059u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:divide" },
- /* TRiceC ( TRiceC ) */ { 1512u, 0u, 0u, "cmd:getLeds" },
- /* TRiceC ( TRiceC ) */ { 1737u, 0u, 0u, "cmd:getLeds" },
- /* TriceC ( TriceC ) */ { 2968u, 0u, 0u, "cmd:getLeds" },
- /* TRiceC ( TRiceC ) */ { 3945u, 0u, 0u, "cmd:getLeds" },
- /* TriceC ( TriceC ) */ { 4650u, 0u, 0u, "cmd:getLeds" },
- /* triceC ( triceC ) */ { 4818u, 0u, 0u, "cmd:getLeds" },
- /* TriceC ( TriceC ) */ { 6227u, 0u, 0u, "cmd:getLeds" },
- /* triceC ( triceC ) */ { 7171u, 0u, 0u, "cmd:getLeds" },
- /* triceC ( triceC ) */ { 7313u, 0u, 0u, "cmd:getLeds" },
- /* triceC ( triceC ) */ { 1716u, 0u, 0u, "cmd:logState" },
- /* TriceC ( TriceC ) */ { 2261u, 0u, 0u, "cmd:logState" },
- /* triceC ( triceC ) */ { 3578u, 0u, 0u, "cmd:logState" },
- /* triceC ( triceC ) */ { 4208u, 0u, 0u, "cmd:logState" },
- /* TriceC ( TriceC ) */ { 7084u, 0u, 0u, "cmd:logState" },
- /* TriceC ( TriceC ) */ { 7522u, 0u, 0u, "cmd:logState" },
- /* trice8C ( trice8C ) */ { 3792u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setKey" },
- /* trice8C ( trice8C ) */ { 3925u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setKey" },
- /* Trice8C ( Trice8C ) */ { 5155u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setKey" },
- /* Trice8C ( Trice8C ) */ { 5517u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setKey" },
- /* trice8C ( trice8C ) */ { 6890u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setKey" },
- /* Trice8C ( Trice8C ) */ { 7383u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setKey" },
- /* Trice8C ( Trice8C ) */ { 2859u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setLeds" },
- /* trice8C ( trice8C ) */ { 5150u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setLeds" },
- /* Trice8C ( Trice8C ) */ { 5768u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setLeds" },
- /* trice8C ( trice8C ) */ { 6278u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setLeds" },
- /* Trice8C ( Trice8C ) */ { 6603u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setLeds" },
- /* trice8C ( trice8C ) */ { 7431u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setLeds" },
- /* TRICE ( TRICE_0 ) */ { 13716u, 32u, 0u, "critical:red+i:default+h\n" },
- /* trice ( trice_0 ) */ { 13766u, 32u, 0u, "critical:red+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13816u, 32u, 0u, "critical:red+i:default+h\n" },
- /* Trice ( Trice_0 ) */ { 13866u, 32u, 0u, "critical:red+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13916u, 32u, 0u, "critical:red+i:default+h\n" },
- /* TRice ( TRice_0 ) */ { 13966u, 32u, 0u, "critical:red+i:default+h\n" },
- /* trice ( trice_0 ) */ { 14801u, 32u, 0u, "d:G" },
- /* trice ( trice32_3 ) */ { 16326u, 32u, 3u, "d:_SINGLE_MAX_SIZE=%d, _BUFFER_SIZE=%d, _DEFERRED_BUFFER_SIZE=%d\n" },
- /* trice ( trice_0 ) */ { 13176u, 32u, 0u, "dbg:\tHi!\n" },
- /* TRICE ( TRICE32_1 ) */ { 14697u, 32u, 1u, "dbg:12345 as 16bit is %016b\n" },
- /* trice8 ( trice8_1 ) */ { 13026u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration with direct RTT output and parallel deferred UART output.\n" },
- /* trice8 ( trice8_1 ) */ { 13023u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration with direct RTT output only and optimized for speed\n" },
- /* trice8 ( trice8_1 ) */ { 13010u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n" },
- /* trice8 ( trice8_1 ) */ { 13011u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n" },
- /* trice8 ( trice8_1 ) */ { 13012u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n" },
- /* trice8 ( trice8_1 ) */ { 13013u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n" },
- /* trice8 ( trice8_1 ) */ { 13016u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n" },
- /* trice8 ( trice8_1 ) */ { 13017u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n" },
- /* trice8 ( trice8_1 ) */ { 13018u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n" },
- /* trice8 ( trice8_1 ) */ { 13020u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n" },
- /* trice8 ( trice8_1 ) */ { 13021u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n" },
- /* trice8 ( trice8_1 ) */ { 13027u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n" },
- /* trice8 ( trice8_1 ) */ { 13025u, 8u, 1u, "dbg:CONFIGURATION == %d - An minimum configuration example.\n" },
- /* trice8 ( trice8_1 ) */ { 13024u, 8u, 1u, "dbg:CONFIGURATION == %d - UART, no cycle counter, no critical sections.\n" },
- /* trice ( trice_0 ) */ { 13175u, 32u, 0u, "dbg:Hi!\n" },
- /* trice ( trice_0 ) */ { 14805u, 32u, 0u, "dbg:k\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 13388u, 32u, 1u, "dbg:len=%u:" },
- /* TRICE32 ( TRICE32_1 ) */ { 13390u, 32u, 1u, "dbg:len=%u:" },
- /* TRICE32 ( TRICE32_1 ) */ { 13392u, 32u, 1u, "dbg:len=%u: " },
- /* TRICE32 ( TRICE32_1 ) */ { 13394u, 32u, 1u, "dbg:len=%u: " },
- /* TRICE32 ( TRICE32_1 ) */ { 13396u, 32u, 1u, "dbg:len=%u: " },
- /* trice ( trice32_2 ) */ { 16334u, 32u, 2u, "deb:TRICE_DIRECT_OUTPUT == %d, TRICE_DEFERRED_OUTPUT == %d\n" },
- /* trice ( trice_0 ) */ { 16331u, 32u, 0u, "deb:TRICE_DOUBLE_BUFFER, " },
- /* trice ( trice_0 ) */ { 16328u, 32u, 0u, "deb:TRICE_MULTI_PACK_MODE\n" },
- /* trice ( trice_0 ) */ { 16330u, 32u, 0u, "deb:TRICE_RING_BUFFER, " },
- /* trice ( trice_0 ) */ { 16329u, 32u, 0u, "deb:TRICE_SINGLE_PACK_MODE\n" },
- /* trice ( trice_0 ) */ { 16333u, 32u, 0u, "deb:TRICE_STACK_BUFFER, " },
- /* trice ( trice_0 ) */ { 16332u, 32u, 0u, "deb:TRICE_STATIC_BUFFER, " },
- /* trice ( trice32_4 ) */ { 16327u, 32u, 4u, "deb:_CYCLE == %d, _PROTECT == %d, _DIAG == %d, XTEA == %d\n" },
- /* TRICE ( TRICE_0 ) */ { 13722u, 32u, 0u, "debug:130+i\n" },
- /* trice ( trice_0 ) */ { 13772u, 32u, 0u, "debug:130+i\n" },
- /* TRICE ( TRICE_0 ) */ { 13822u, 32u, 0u, "debug:130+i\n" },
- /* Trice ( Trice_0 ) */ { 13872u, 32u, 0u, "debug:130+i\n" },
- /* TRICE ( TRICE_0 ) */ { 13922u, 32u, 0u, "debug:130+i\n" },
- /* TRice ( TRice_0 ) */ { 13972u, 32u, 0u, "debug:130+i\n" },
- /* TRICE ( TRICE_0 ) */ { 13734u, 32u, 0u, "default:off\n" },
- /* trice ( trice_0 ) */ { 13784u, 32u, 0u, "default:off\n" },
- /* TRICE ( TRICE_0 ) */ { 13834u, 32u, 0u, "default:off\n" },
- /* Trice ( Trice_0 ) */ { 13884u, 32u, 0u, "default:off\n" },
- /* TRICE ( TRICE_0 ) */ { 13934u, 32u, 0u, "default:off\n" },
- /* TRice ( TRice_0 ) */ { 13984u, 32u, 0u, "default:off\n" },
- /* trice16 ( trice16_2 ) */ { 16382u, 16u, 2u, "diag:RTT0_writeDepthMax=%u (BUFFER_SIZE_UP=%u)\n" },
- /* trice16 ( trice16_2 ) */ { 16375u, 16u, 2u, "diag:TriceDataOffsetDepthMax = %d of %d (TRICE_DATA_OFFSET)\n" },
- /* trice16 ( trice16_2 ) */ { 16373u, 16u, 2u, "diag:TriceHalfBufferDepthMax =%4u of%5d\n" },
- /* trice ( trice_0 ) */ { 14800u, 32u, 0u, "diag:f" },
- /* trice ( trice_0 ) */ { 14818u, 32u, 0u, "diag:f" },
- /* trice16 ( trice16_2 ) */ { 16371u, 16u, 2u, "diag:triceRingBufferDepthMax =%4u of%5d\n" },
- /* trice16 ( trice16_2 ) */ { 16378u, 16u, 2u, "diag:triceSingleDepthMax =%4u of %d (TRICE_BUFFER_SIZE)\n" },
- /* TRICE ( TRICE_0 ) */ { 13730u, 32u, 0u, "diag:yellow+i:default+h\n" },
- /* trice ( trice_0 ) */ { 13780u, 32u, 0u, "diag:yellow+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13830u, 32u, 0u, "diag:yellow+i:default+h\n" },
- /* Trice ( Trice_0 ) */ { 13880u, 32u, 0u, "diag:yellow+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13930u, 32u, 0u, "diag:yellow+i:default+h\n" },
- /* TRice ( TRice_0 ) */ { 13980u, 32u, 0u, "diag:yellow+i:default+h\n" },
- /* trice ( trice_0 ) */ { 14810u, 32u, 0u, "e:7" },
- /* trice ( trice_0 ) */ { 14795u, 32u, 0u, "e:A" },
- /* trice ( trice_0 ) */ { 14813u, 32u, 0u, "e:A" },
- /* TRICE ( TRICE_0 ) */ { 13717u, 32u, 0u, "emergency:red+i:blue\n" },
- /* trice ( trice_0 ) */ { 13767u, 32u, 0u, "emergency:red+i:blue\n" },
- /* TRICE ( TRICE_0 ) */ { 13817u, 32u, 0u, "emergency:red+i:blue\n" },
- /* Trice ( Trice_0 ) */ { 13867u, 32u, 0u, "emergency:red+i:blue\n" },
- /* TRICE ( TRICE_0 ) */ { 13917u, 32u, 0u, "emergency:red+i:blue\n" },
- /* TRice ( TRice_0 ) */ { 13967u, 32u, 0u, "emergency:red+i:blue\n" },
- /* trice16 ( trice16_2 ) */ { 16376u, 16u, 2u, "err:TriceDataOffsetDepthMax = %d of %d (TRICE_DATA_OFFSET)\n" },
- /* trice16 ( trice16_1 ) */ { 16379u, 16u, 1u, "err:TriceDeferredOverflowCount = %u\n" },
- /* trice16 ( trice16_1 ) */ { 16380u, 16u, 1u, "err:TriceDirectOverflowCount = %u\n" },
- /* trice16 ( trice16_1 ) */ { 16381u, 16u, 1u, "err:TriceErrorCount = %u\n" },
- /* trice16 ( trice16_2 ) */ { 16372u, 16u, 2u, "err:TriceHalfBufferDepthMax =%4u of%5d (overflow!)\n" },
- /* trice16 ( trice16_2 ) */ { 16370u, 16u, 2u, "err:triceRingBufferDepthMax =%4u of%5d (overflow!)\n" },
- /* trice16 ( trice16_2 ) */ { 16377u, 16u, 2u, "err:triceSingleDepthMax =%4u of %d (TRICE_BUFFER_SIZE overflow!)\n" },
- /* TRICE ( TRICE_0 ) */ { 13718u, 32u, 0u, "error:11:red\n" },
- /* trice ( trice_0 ) */ { 13768u, 32u, 0u, "error:11:red\n" },
- /* TRICE ( TRICE_0 ) */ { 13818u, 32u, 0u, "error:11:red\n" },
- /* Trice ( Trice_0 ) */ { 13868u, 32u, 0u, "error:11:red\n" },
- /* TRICE ( TRICE_0 ) */ { 13918u, 32u, 0u, "error:11:red\n" },
- /* TRice ( TRice_0 ) */ { 13968u, 32u, 0u, "error:11:red\n" },
- /* TRICE ( TRICE_0 ) */ { 13715u, 32u, 0u, "fatal:magenta+b:red\n" },
- /* trice ( trice_0 ) */ { 13765u, 32u, 0u, "fatal:magenta+b:red\n" },
- /* TRICE ( TRICE_0 ) */ { 13815u, 32u, 0u, "fatal:magenta+b:red\n" },
- /* Trice ( Trice_0 ) */ { 13865u, 32u, 0u, "fatal:magenta+b:red\n" },
- /* TRICE ( TRICE_0 ) */ { 13915u, 32u, 0u, "fatal:magenta+b:red\n" },
- /* TRice ( TRice_0 ) */ { 13965u, 32u, 0u, "fatal:magenta+b:red\n" },
- /* Trice ( Trice32_2 ) */ { 16335u, 32u, 2u, "i=%x %x\n" },
- /* TRICE ( TRICE_0 ) */ { 15245u, 32u, 0u, "inf: Tryout buffer:" },
- /* TRICE ( TRICE_0 ) */ { 15248u, 32u, 0u, "inf: Tryout rx struct:" },
- /* TRICE ( TRICE_0 ) */ { 15242u, 32u, 0u, "inf: Tryout tx struct:" },
- /* TRICE ( TRICE32_2 ) */ { 15251u, 32u, 2u, "inf:sizeOf(Trypout) = %d, buffer length = %d\n" },
- /* trice ( trice32_1 ) */ { 16336u, 32u, 1u, "info:%d times a 16 byte long Trice messages, which may not be written all if the buffer is too small:\n" },
- /* Trice8 ( Trice8_12 ) */ { 13235u, 8u, 12u, "info:12 8-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and a 16-bit stamp.\n" },
- /* TRice8 ( TRice8_12 ) */ { 13234u, 8u, 12u, "info:12 8-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and a 32-bit stamp.\n" },
- /* trice8 ( trice8_12 ) */ { 13236u, 8u, 12u, "info:12 8-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and without stamp.\n" },
- /* Trice16 ( Trice16_12 ) */ { 13232u, 16u, 12u, "info:12 16-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and a 16-bit stamp.\n" },
- /* TRice16 ( TRice16_12 ) */ { 13231u, 16u, 12u, "info:12 16-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and a 32-bit stamp.\n" },
- /* trice16 ( trice16_12 ) */ { 13233u, 16u, 12u, "info:12 16-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and without stamp.\n" },
- /* Trice32 ( Trice32_12 ) */ { 13229u, 32u, 12u, "info:12 32-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and a 16-bit stamp.\n" },
- /* TRice32 ( TRice32_12 ) */ { 13228u, 32u, 12u, "info:12 32-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and a 32-bit stamp.\n" },
- /* trice32 ( trice32_12 ) */ { 13230u, 32u, 12u, "info:12 32-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and without stamp.\n" },
- /* Trice64 ( Trice64_12 ) */ { 13223u, 64u, 12u, "info:12 64-bit values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 16-bit stamp.\n" },
- /* TRice64 ( TRice64_12 ) */ { 13222u, 64u, 12u, "info:12 64-bit values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 32-bit stamp.\n" },
- /* trice64 ( trice64_12 ) */ { 13224u, 64u, 12u, "info:12 64-bit values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and without stamp.\n" },
- /* Trice64 ( Trice64_12 ) */ { 13226u, 64u, 12u, "info:12 64-bit values %d, %zu, %x, %lX, %t, %e, %Lf, %g, %E, %F, %G, 0xb%08b and a 16-bit stamp.\n" },
- /* TRice64 ( TRice64_12 ) */ { 13225u, 64u, 12u, "info:12 64-bit values %d, %zu, %x, %lX, %t, %e, %Lf, %g, %E, %F, %G, 0xb%08b and a 32-bit stamp.\n" },
- /* trice64 ( trice64_12 ) */ { 13227u, 64u, 12u, "info:12 64-bit values %d, %zu, %x, %lX, %t, %e, %Lf, %g, %E, %F, %G, 0xb%08b and without stamp.\n" },
- /* trice ( trice32_12 ) */ { 13385u, 32u, 12u, "info:12 default bit width values %d, %llu, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and without stamp.\n" },
- /* Trice ( Trice32_12 ) */ { 13384u, 32u, 12u, "info:12 default bit width values %d, %lu, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 16-bit stamp.\n" },
- /* Trice ( Trice32_12 ) */ { 13381u, 32u, 12u, "info:12 default bit width values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 16-bit stamp.\n" },
- /* TRice ( TRice32_12 ) */ { 13380u, 32u, 12u, "info:12 default bit width values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 32-bit stamp.\n" },
- /* trice ( trice32_12 ) */ { 13382u, 32u, 12u, "info:12 default bit width values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and without stamp.\n" },
- /* TRice ( TRice32_12 ) */ { 13383u, 32u, 12u, "info:12 default bit width values %d, %zu, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 32-bit stamp.\n" },
- /* TRICE ( TRICE32_12 ) */ { 13499u, 32u, 12u, "info:12 values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 16-bit stamp.\n" },
- /* TRICE32 ( TRICE32_12 ) */ { 13502u, 32u, 12u, "info:12 values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 16-bit stamp.\n" },
- /* TRICE ( TRICE32_12 ) */ { 13498u, 32u, 12u, "info:12 values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 32-bit stamp.\n" },
- /* TRICE32 ( TRICE32_12 ) */ { 13501u, 32u, 12u, "info:12 values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 32-bit stamp.\n" },
- /* TRICE ( TRICE32_12 ) */ { 13500u, 32u, 12u, "info:12 values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and without stamp.\n" },
- /* TRICE32 ( TRICE32_12 ) */ { 13503u, 32u, 12u, "info:12 values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and without stamp.\n" },
- /* Trice ( Trice_0 ) */ { 16340u, 32u, 0u, "info:A Buffer:\n" },
- /* TRICE8_F ( TRICE8F ) */ { 13296u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameWa" },
- /* TRICE8_F ( TRICE8F ) */ { 15292u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameWa" },
- /* TRICe8_C ( TRICe8_C ) */ { 15689u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameWa" },
- /* TRIce8_C ( TRIce8_C ) */ { 16111u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameWa" },
- /* TRICE8_C ( TRICE8_C ) */ { 16176u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameWa" },
- /* TRice8F ( TRice8F ) */ { 15293u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameWb" },
- /* Trice8F ( Trice8F ) */ { 15294u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameWc" },
- /* trice8F ( trice8F ) */ { 15295u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameWd" },
- /* TRICE16_F ( TRICE16F ) */ { 13300u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameXa" },
- /* TRICE16_F ( TRICE16F ) */ { 15296u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameXa" },
- /* TRICe16_C ( TRICe16_C ) */ { 15547u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameXa" },
- /* TRICE16_C ( TRICE16_C ) */ { 15754u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameXa" },
- /* TRIce16_C ( TRIce16_C ) */ { 15996u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameXa" },
- /* TRice16F ( TRice16F ) */ { 15297u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameXb" },
- /* Trice16F ( Trice16F ) */ { 15298u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameXc" },
- /* trice16F ( trice16F ) */ { 15299u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameXd" },
- /* TRICE32_F ( TRICE32F ) */ { 13304u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa" },
- /* TRICE32_F ( TRICE32F ) */ { 15300u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa" },
- /* TRIce32_C ( TRIce32_C ) */ { 15311u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa" },
- /* TRIce32_C ( TRIce32_C ) */ { 15374u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa" },
- /* TRIce32_C ( TRIce32_C ) */ { 15519u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa" },
- /* TRICe32_C ( TRICe32_C ) */ { 15578u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa" },
- /* TRICE32_C ( TRICE32_C ) */ { 15606u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa" },
- /* TRIce32_C ( TRIce32_C ) */ { 15698u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa" },
- /* TRIce32_C ( TRIce32_C ) */ { 16246u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa" },
- /* TRICE64_F ( TRICE64F ) */ { 13308u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameZa" },
- /* TRICE64_F ( TRICE64F ) */ { 15304u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameZa" },
- /* TRIce64_C ( TRIce64_C ) */ { 15354u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameZa" },
- /* TRICE64_C ( TRICE64_C ) */ { 15607u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameZa" },
- /* TRICe64_C ( TRICe64_C ) */ { 15657u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameZa" },
- /* Trice ( Trice32_1 ) */ { 13490u, 32u, 1u, "info:This is a message with one value %d and a 16-bit stamp.\n" },
- /* TRICE ( TRICE32_1 ) */ { 13496u, 32u, 1u, "info:This is a message with one value %d and a 16-bit stamp.\n" },
- /* TRice ( TRice32_1 ) */ { 13489u, 32u, 1u, "info:This is a message with one value %d and a 32-bit stamp.\n" },
- /* TRICE ( TRICE32_1 ) */ { 13495u, 32u, 1u, "info:This is a message with one value %d and a 32-bit stamp.\n" },
- /* trice ( trice32_1 ) */ { 13491u, 32u, 1u, "info:This is a message with one value %d and without stamp.\n" },
- /* TRICE ( TRICE32_1 ) */ { 13497u, 32u, 1u, "info:This is a message with one value %d and without stamp.\n" },
- /* Trice ( Trice_0 ) */ { 13032u, 32u, 0u, "info:This is a message without values and a 16-bit stamp.\n" },
- /* TRICE ( TRICE_0 ) */ { 13493u, 32u, 0u, "info:This is a message without values and a 16-bit stamp.\n" },
- /* TRice ( TRice_0 ) */ { 13031u, 32u, 0u, "info:This is a message without values and a 32-bit stamp.\n" },
- /* TRICE ( TRICE_0 ) */ { 13492u, 32u, 0u, "info:This is a message without values and a 32-bit stamp.\n" },
- /* trice ( trice_0 ) */ { 13033u, 32u, 0u, "info:This is a message without values and without stamp.\n" },
- /* TRICE ( TRICE_0 ) */ { 13494u, 32u, 0u, "info:This is a message without values and without stamp.\n" },
- /* TRICE8_F ( TRICE8F ) */ { 15253u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:TryoutBufferFunction" },
- /* TRICE8_F ( TRICE8F ) */ { 15252u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:TryoutStructFunction" },
- /* TRICE ( TRICE_0 ) */ { 13721u, 32u, 0u, "info:cyan+b:default+h\n" },
- /* trice ( trice_0 ) */ { 13771u, 32u, 0u, "info:cyan+b:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13821u, 32u, 0u, "info:cyan+b:default+h\n" },
- /* Trice ( Trice_0 ) */ { 13871u, 32u, 0u, "info:cyan+b:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13921u, 32u, 0u, "info:cyan+b:default+h\n" },
- /* TRice ( TRice_0 ) */ { 13971u, 32u, 0u, "info:cyan+b:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13731u, 32u, 0u, "interrupt:magenta+i:default+h\n" },
- /* trice ( trice_0 ) */ { 13781u, 32u, 0u, "interrupt:magenta+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13831u, 32u, 0u, "interrupt:magenta+i:default+h\n" },
- /* Trice ( Trice_0 ) */ { 13881u, 32u, 0u, "interrupt:magenta+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13931u, 32u, 0u, "interrupt:magenta+i:default+h\n" },
- /* TRice ( TRice_0 ) */ { 13981u, 32u, 0u, "interrupt:magenta+i:default+h\n" },
- /* trice ( trice32_1 ) */ { 13007u, 32u, 1u, "isr:TIM17_FDCAN_IT1_IRQHandler! (%u ms)\n" },
- /* TRICE ( TRICE32_1 ) */ { 13194u, 32u, 1u, "isr:TRICE isr message, SysTick is %6d\n" },
- /* TRICE ( TRICE32_1 ) */ { 13195u, 32u, 1u, "isr:TRICE isr message, SysTick is %6d\n" },
- /* TRICE ( TRICE32_1 ) */ { 13196u, 32u, 1u, "isr:TRICE isr message, SysTick is %6d\n" },
- /* TRICE ( TRICE32_1 ) */ { 13197u, 32u, 1u, "isr:TRICE isr message, SysTick is %6d\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 13186u, 16u, 1u, "isr:TRICE16_1 isr message, SysTick is %6d\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 13187u, 16u, 1u, "isr:TRICE16_1 isr message, SysTick is %6d\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 13188u, 16u, 1u, "isr:TRICE16_1 isr message, SysTick is %6d\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 13189u, 16u, 1u, "isr:TRICE16_1 isr message, SysTick is %6d\n" },
- /* TRICE_1 ( TRICE32_1 ) */ { 13190u, 32u, 1u, "isr:TRICE_1 isr message, SysTick is %6d\n" },
- /* TRICE_1 ( TRICE32_1 ) */ { 13191u, 32u, 1u, "isr:TRICE_1 isr message, SysTick is %6d\n" },
- /* TRICE_1 ( TRICE32_1 ) */ { 13192u, 32u, 1u, "isr:TRICE_1 isr message, SysTick is %6d\n" },
- /* TRICE_1 ( TRICE32_1 ) */ { 13193u, 32u, 1u, "isr:TRICE_1 isr message, SysTick is %6d\n" },
- /* trice ( trice32_1 ) */ { 13178u, 32u, 1u, "isr:trice isr message, SysTick is %6d\n" },
- /* trice ( trice32_1 ) */ { 13179u, 32u, 1u, "isr:trice isr message, SysTick is %6ld\n" },
- /* trice ( trice32_1 ) */ { 13180u, 32u, 1u, "isr:trice isr message, SysTick is %6lld\n" },
- /* trice ( trice32_1 ) */ { 13181u, 32u, 1u, "isr:trice isr message, SysTick is %6zd\n" },
- /* trice_1 ( trice32_1 ) */ { 13182u, 32u, 1u, "isr:trice_1 isr message, SysTick is %6d\n" },
- /* trice_1 ( trice32_1 ) */ { 13183u, 32u, 1u, "isr:trice_1 isr message, SysTick is %6d\n" },
- /* trice_1 ( trice32_1 ) */ { 13184u, 32u, 1u, "isr:trice_1 isr message, SysTick is %6d\n" },
- /* trice_1 ( trice32_1 ) */ { 13185u, 32u, 1u, "isr:trice_1 isr message, SysTick is %6d\n" },
- /* trice64 ( trice64_6 ) */ { 13091u, 64u, 6u, "len:float-L %Le %Lf %Lg %LE %LF %LG\n" },
- /* trice64 ( trice64_6 ) */ { 13090u, 64u, 6u, "len:float-l %le %lf %lg %lE %lF %lG\n" },
- /* trice16 ( trice16_8 ) */ { 13084u, 16u, 8u, "len:h %hd %hi %hu %ho %hO %hx %hX %hb\n" },
- /* trice8 ( trice8_8 ) */ { 13083u, 8u, 8u, "len:hh %hhd %hhi %hhu %hho %hhO %hhx %hhX %hhb\n" },
- /* trice64 ( trice64_8 ) */ { 13087u, 64u, 8u, "len:j %jd %ji %ju %jo %jO %jx %jX %jb\n" },
- /* trice32 ( trice32_8 ) */ { 13085u, 32u, 8u, "len:l %ld %li %lu %lo %lO %lx %lX %lb\n" },
- /* trice64 ( trice64_8 ) */ { 13086u, 64u, 8u, "len:ll %lld %lli %llu %llo %llO %llx %llX %llb\n" },
- /* trice64 ( trice64_8 ) */ { 13089u, 64u, 8u, "len:t %td %ti %tu %to %tO %tx %tX %tb\n" },
- /* trice64 ( trice64_8 ) */ { 13088u, 64u, 8u, "len:z %zd %zi %zu %zo %zO %zx %zX %zb\n" },
- /* trice ( trice32_2 ) */ { 1101u, 32u, 2u, "log:(from node=N1_tx) from=%u phase=%u\n" },
- /* triceS ( triceS ) */ { 6812u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "log:(from node=N1_tx) text=%s\n" },
- /* trice ( trice32_1 ) */ { 5054u, 32u, 1u, "log:(from node=N1_tx) tick=%u\n" },
- /* trice ( trice32_2 ) */ { 7672u, 32u, 2u, "log:(from node=N2_tx) from=%u phase=%u\n" },
- /* triceS ( triceS ) */ { 1578u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "log:(from node=N2_tx) text=%s\n" },
- /* trice ( trice32_1 ) */ { 5937u, 32u, 1u, "log:(from node=N2_tx) tick=%u\n" },
- /* trice ( trice32_2 ) */ { 1071u, 32u, 2u, "log:(from node=N3_bi) from=%u phase=%u\n" },
- /* triceS ( triceS ) */ { 6394u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "log:(from node=N3_bi) text=%s\n" },
- /* trice ( trice32_1 ) */ { 2001u, 32u, 1u, "log:(from node=N3_bi) tick=%u\n" },
- /* trice ( trice32_2 ) */ { 1126u, 32u, 2u, "log:from=%u phase=%u\n" },
- /* trice ( trice32_2 ) */ { 1219u, 32u, 2u, "log:from=%u phase=%u\n" },
- /* trice ( trice32_2 ) */ { 3310u, 32u, 2u, "log:from=%u phase=%u\n" },
- /* trice ( trice32_2 ) */ { 5460u, 32u, 2u, "log:from=%u phase=%u\n" },
- /* trice ( trice32_2 ) */ { 2100u, 32u, 2u, "log:node=N1_tx, from=%u phase=%u\n" },
- /* trice ( trice32_1 ) */ { 7794u, 32u, 1u, "log:node=N1_tx, tick=%u\n" },
- /* trice ( trice32_2 ) */ { 6365u, 32u, 2u, "log:node=N2_tx, from=%u phase=%u\n" },
- /* triceS ( triceS ) */ { 4972u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "log:node=N2_tx, text=%s\n" },
- /* trice ( trice32_1 ) */ { 6962u, 32u, 1u, "log:node=N2_tx, tick=%u\n" },
- /* trice ( trice32_2 ) */ { 6779u, 32u, 2u, "log:node=N3_bi, from=%u phase=%u\n" },
- /* triceS ( triceS ) */ { 7709u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "log:node=N3_bi, text=%s\n" },
- /* trice ( trice32_1 ) */ { 4017u, 32u, 1u, "log:node=N3_bi, tick=%u\n" },
- /* triceS ( triceS ) */ { 1861u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "log:text=%s\n" },
- /* triceS ( triceS ) */ { 4470u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "log:text=%s\n" },
- /* triceS ( triceS ) */ { 5017u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "log:text=%s\n" },
- /* triceS ( triceS ) */ { 7615u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "log:text=%s\n" },
- /* trice ( trice32_1 ) */ { 2034u, 32u, 1u, "log:tick=%u\n" },
- /* trice ( trice32_1 ) */ { 4364u, 32u, 1u, "log:tick=%u\n" },
- /* trice ( trice32_1 ) */ { 5074u, 32u, 1u, "log:tick=%u\n" },
- /* trice ( trice32_1 ) */ { 6949u, 32u, 1u, "log:tick=%u\n" },
- /* trice ( trice_0 ) */ { 14811u, 32u, 0u, "m:12" },
- /* trice ( trice_0 ) */ { 14812u, 32u, 0u, "m:123\n" },
- /* trice ( trice_0 ) */ { 14804u, 32u, 0u, "message:J" },
- /* TRICE ( TRICE_0 ) */ { 13725u, 32u, 0u, "message:green+h:black\n" },
- /* trice ( trice_0 ) */ { 13775u, 32u, 0u, "message:green+h:black\n" },
- /* TRICE ( TRICE_0 ) */ { 13825u, 32u, 0u, "message:green+h:black\n" },
- /* Trice ( Trice_0 ) */ { 13875u, 32u, 0u, "message:green+h:black\n" },
- /* TRICE ( TRICE_0 ) */ { 13925u, 32u, 0u, "message:green+h:black\n" },
- /* TRice ( TRice_0 ) */ { 13975u, 32u, 0u, "message:green+h:black\n" },
- /* trice16B ( trice16B ) */ { 13285u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg: %04x\n" },
- /* trice32 ( trice32_6 ) */ { 13166u, 32u, 6u, "msg: message = %08x %08x %08x %08x %08x %08x\n" },
- /* trice32 ( trice32_6 ) */ { 13172u, 32u, 6u, "msg: messge = %08x %08x %08x %08x %08x %08x\n" },
- /* Trice64 ( Trice64_1 ) */ { 16343u, 64u, 1u, "msg:%.20f (double with more ciphers than precision)\n" },
- /* Trice ( Trice32_1 ) */ { 16342u, 32u, 1u, "msg:%.20f (float with more ciphers than precision)\n" },
- /* Trice8B ( Trice8B ) */ { 16339u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%02x \n" },
- /* Trice32B ( Trice32B ) */ { 16338u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%08x \n" },
- /* trice32 ( trice32_1 ) */ { 13413u, 32u, 1u, "msg:%O (%%O)\n" },
- /* trice64 ( trice64_1 ) */ { 13420u, 64u, 1u, "msg:%O (%%O)\n" },
- /* trice32 ( trice32_1 ) */ { 13414u, 32u, 1u, "msg:%X (%%X)\n" },
- /* trice64 ( trice64_1 ) */ { 13421u, 64u, 1u, "msg:%X (%%X)\n" },
- /* trice32 ( trice32_1 ) */ { 13411u, 32u, 1u, "msg:%b (%%b)\n" },
- /* trice64 ( trice64_1 ) */ { 13418u, 64u, 1u, "msg:%b (%%b)\n" },
- /* trice32 ( trice32_1 ) */ { 13416u, 32u, 1u, "msg:%d (%%d)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 13990u, 64u, 1u, "msg:%d (%%d)\n" },
- /* Trice ( Trice32_1 ) */ { 16341u, 32u, 1u, "msg:%f (default rounded float)\n" },
- /* trice32 ( trice32_1 ) */ { 13412u, 32u, 1u, "msg:%o (%%o)\n" },
- /* trice64 ( trice64_1 ) */ { 13419u, 64u, 1u, "msg:%o (%%o)\n" },
- /* TRICE_N ( TRICE_N ) */ { 15042u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15043u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15044u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15045u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15046u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15047u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15048u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15049u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15050u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15051u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15052u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15053u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15054u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15055u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15056u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15057u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15058u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15059u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15060u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15061u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15062u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15063u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15064u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15065u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15066u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15067u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15068u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15069u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15070u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15071u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15072u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15073u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15074u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15075u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15076u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15077u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15078u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15079u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15080u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15081u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15082u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15083u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15084u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15085u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15086u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15087u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15088u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15089u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15090u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15091u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15092u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15093u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15094u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15095u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15096u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15097u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15098u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15099u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15100u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15101u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* trice32 ( trice32_1 ) */ { 13410u, 32u, 1u, "msg:%u (%%u)\n" },
- /* trice64 ( trice64_1 ) */ { 13417u, 64u, 1u, "msg:%u (%%u)\n" },
- /* trice32 ( trice32_1 ) */ { 13415u, 32u, 1u, "msg:%x (%%x)\n" },
- /* trice64 ( trice64_1 ) */ { 13422u, 64u, 1u, "msg:%x (%%x)\n" },
- /* trice ( trice_0 ) */ { 15963u, 32u, 0u, "msg:Hello LabPlot!\n" },
- /* trice ( trice_0 ) */ { 16011u, 32u, 0u, "msg:Hello LabPlot!\n" },
- /* TRiceS ( TRiceS ) */ { 13312u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:Hi %s!\n" },
- /* TriceS ( TriceS ) */ { 13313u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:Hi %s!\n" },
- /* triceS ( triceS ) */ { 13314u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:Hi %s!\n" },
- /* TRiceN ( TRiceN ) */ { 13315u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:Hi %s!\n" },
- /* TriceN ( TriceN ) */ { 13316u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:Hi %s!\n" },
- /* triceN ( triceN ) */ { 13317u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:Hi %s!\n" },
- /* TRice ( TRice_0 ) */ { 13008u, 32u, 0u, "msg:StartDefaultTask\n" },
- /* TRice ( TRice_0 ) */ { 13019u, 32u, 0u, "msg:StartDefaultTask\n" },
- /* TRice ( TRice_0 ) */ { 13009u, 32u, 0u, "msg:StartTask02:Diagnostics and TriceTransfer\n" },
- /* TRice ( TRice_0 ) */ { 13022u, 32u, 0u, "msg:StartTask02:Diagnostics and TriceTransfer\n" },
- /* TRice64 ( TRice64_12 ) */ { 15283u, 64u, 12u, "msg:Twelve 64-bit values: %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n" },
- /* TRice64 ( TRice64_12 ) */ { 15289u, 64u, 12u, "msg:Twelve 64-bit values: %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n" },
- /* TRICE_S ( TRICE_S ) */ { 13265u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:With TRICE_S:%s\n" },
- /* TRICE_S ( TRICE_S ) */ { 13267u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:With TRICE_S:%s\n" },
- /* TRICE_S ( TRICE_S ) */ { 13269u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:With TRICE_S:%s\n" },
- /* TRiceS ( TRiceS ) */ { 13263u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:With TRiceS:%s\n" },
- /* TriceS ( TriceS ) */ { 13261u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:With TriceS:%s\n" },
- /* triceS ( triceS ) */ { 13259u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:With triceS:%s\n" },
- /* trice ( trice_0 ) */ { 15396u, 32u, 0u, "msg:time_s,x,y,z\n" },
- /* trice8 ( trice8_12 ) */ { 13563u, 8u, 12u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_12 ) */ { 13575u, 16u, 12u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice32 ( trice32_12 ) */ { 13587u, 32u, 12u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice64 ( trice64_12 ) */ { 13599u, 64u, 12u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice8_12 ( trice8_12 ) */ { 13611u, 8u, 12u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16_12 ( trice16_12 ) */ { 13623u, 16u, 12u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice32_12 ( trice32_12 ) */ { 13635u, 32u, 12u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice64_12 ( trice64_12 ) */ { 13647u, 64u, 12u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice8 ( Trice8_11 ) */ { 13562u, 8u, 11u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice16 ( Trice16_11 ) */ { 13574u, 16u, 11u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice32 ( Trice32_11 ) */ { 13586u, 32u, 11u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice64 ( Trice64_11 ) */ { 13598u, 64u, 11u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice8_11 ( Trice8_11 ) */ { 13610u, 8u, 11u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice16_11 ( Trice16_11 ) */ { 13622u, 16u, 11u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice32_11 ( Trice32_11 ) */ { 13634u, 32u, 11u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice64_11 ( Trice64_11 ) */ { 13646u, 64u, 11u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice8 ( TRice8_10 ) */ { 13561u, 8u, 10u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice16 ( TRice16_10 ) */ { 13573u, 16u, 10u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice32 ( TRice32_10 ) */ { 13585u, 32u, 10u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice64 ( TRice64_10 ) */ { 13597u, 64u, 10u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice8_10 ( TRice8_10 ) */ { 13609u, 8u, 10u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice16_10 ( TRice16_10 ) */ { 13621u, 16u, 10u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice32_10 ( TRice32_10 ) */ { 13633u, 32u, 10u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice64_10 ( TRice64_10 ) */ { 13645u, 64u, 10u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice8 ( trice8_9 ) */ { 13560u, 8u, 9u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_9 ) */ { 13572u, 16u, 9u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice32 ( trice32_9 ) */ { 13584u, 32u, 9u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice64 ( trice64_9 ) */ { 13596u, 64u, 9u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice8_9 ( trice8_9 ) */ { 13608u, 8u, 9u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16_9 ( trice16_9 ) */ { 13620u, 16u, 9u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice32_9 ( trice32_9 ) */ { 13632u, 32u, 9u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice64_9 ( trice64_9 ) */ { 13644u, 64u, 9u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice8 ( Trice8_8 ) */ { 13559u, 8u, 8u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice16 ( Trice16_8 ) */ { 13571u, 16u, 8u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice32 ( Trice32_8 ) */ { 13583u, 32u, 8u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice64 ( Trice64_8 ) */ { 13595u, 64u, 8u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice8_8 ( Trice8_8 ) */ { 13607u, 8u, 8u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice16_8 ( Trice16_8 ) */ { 13619u, 16u, 8u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice32_8 ( Trice32_8 ) */ { 13631u, 32u, 8u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice64_8 ( Trice64_8 ) */ { 13643u, 64u, 8u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice8 ( TRice8_7 ) */ { 13558u, 8u, 7u, "msg:value=%d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice16 ( TRice16_7 ) */ { 13570u, 16u, 7u, "msg:value=%d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice32 ( TRice32_7 ) */ { 13582u, 32u, 7u, "msg:value=%d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice64 ( TRice64_7 ) */ { 13594u, 64u, 7u, "msg:value=%d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice8_7 ( TRice8_7 ) */ { 13606u, 8u, 7u, "msg:value=%d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice16_7 ( TRice16_7 ) */ { 13618u, 16u, 7u, "msg:value=%d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice32_7 ( TRice32_7 ) */ { 13630u, 32u, 7u, "msg:value=%d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice64_7 ( TRice64_7 ) */ { 13642u, 64u, 7u, "msg:value=%d, %d, %d, %d, %d, %d, %d\n" },
- /* trice8 ( trice8_6 ) */ { 13557u, 8u, 6u, "msg:value=%d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_6 ) */ { 13569u, 16u, 6u, "msg:value=%d, %d, %d, %d, %d, %d\n" },
- /* trice32 ( trice32_6 ) */ { 13581u, 32u, 6u, "msg:value=%d, %d, %d, %d, %d, %d\n" },
- /* trice64 ( trice64_6 ) */ { 13593u, 64u, 6u, "msg:value=%d, %d, %d, %d, %d, %d\n" },
- /* trice8_6 ( trice8_6 ) */ { 13605u, 8u, 6u, "msg:value=%d, %d, %d, %d, %d, %d\n" },
- /* trice16_6 ( trice16_6 ) */ { 13617u, 16u, 6u, "msg:value=%d, %d, %d, %d, %d, %d\n" },
- /* trice32_6 ( trice32_6 ) */ { 13629u, 32u, 6u, "msg:value=%d, %d, %d, %d, %d, %d\n" },
- /* trice64_6 ( trice64_6 ) */ { 13641u, 64u, 6u, "msg:value=%d, %d, %d, %d, %d, %d\n" },
- /* Trice8 ( Trice8_5 ) */ { 13556u, 8u, 5u, "msg:value=%d, %d, %d, %d, %d\n" },
- /* Trice16 ( Trice16_5 ) */ { 13568u, 16u, 5u, "msg:value=%d, %d, %d, %d, %d\n" },
- /* Trice32 ( Trice32_5 ) */ { 13580u, 32u, 5u, "msg:value=%d, %d, %d, %d, %d\n" },
- /* Trice64 ( Trice64_5 ) */ { 13592u, 64u, 5u, "msg:value=%d, %d, %d, %d, %d\n" },
- /* Trice8_5 ( Trice8_5 ) */ { 13604u, 8u, 5u, "msg:value=%d, %d, %d, %d, %d\n" },
- /* Trice16_5 ( Trice16_5 ) */ { 13616u, 16u, 5u, "msg:value=%d, %d, %d, %d, %d\n" },
- /* Trice32_5 ( Trice32_5 ) */ { 13628u, 32u, 5u, "msg:value=%d, %d, %d, %d, %d\n" },
- /* Trice64_5 ( Trice64_5 ) */ { 13640u, 64u, 5u, "msg:value=%d, %d, %d, %d, %d\n" },
- /* TRice8 ( TRice8_4 ) */ { 13555u, 8u, 4u, "msg:value=%d, %d, %d, %d\n" },
- /* TRice16 ( TRice16_4 ) */ { 13567u, 16u, 4u, "msg:value=%d, %d, %d, %d\n" },
- /* TRice32 ( TRice32_4 ) */ { 13579u, 32u, 4u, "msg:value=%d, %d, %d, %d\n" },
- /* TRice64 ( TRice64_4 ) */ { 13591u, 64u, 4u, "msg:value=%d, %d, %d, %d\n" },
- /* TRice8_4 ( TRice8_4 ) */ { 13603u, 8u, 4u, "msg:value=%d, %d, %d, %d\n" },
- /* TRice16_4 ( TRice16_4 ) */ { 13615u, 16u, 4u, "msg:value=%d, %d, %d, %d\n" },
- /* TRice32_4 ( TRice32_4 ) */ { 13627u, 32u, 4u, "msg:value=%d, %d, %d, %d\n" },
- /* TRice64_4 ( TRice64_4 ) */ { 13639u, 64u, 4u, "msg:value=%d, %d, %d, %d\n" },
- /* trice8 ( trice8_3 ) */ { 13554u, 8u, 3u, "msg:value=%d, %d, %d\n" },
- /* trice16 ( trice16_3 ) */ { 13566u, 16u, 3u, "msg:value=%d, %d, %d\n" },
- /* trice32 ( trice32_3 ) */ { 13578u, 32u, 3u, "msg:value=%d, %d, %d\n" },
- /* trice64 ( trice64_3 ) */ { 13590u, 64u, 3u, "msg:value=%d, %d, %d\n" },
- /* trice8_3 ( trice8_3 ) */ { 13602u, 8u, 3u, "msg:value=%d, %d, %d\n" },
- /* trice16_3 ( trice16_3 ) */ { 13614u, 16u, 3u, "msg:value=%d, %d, %d\n" },
- /* trice32_3 ( trice32_3 ) */ { 13626u, 32u, 3u, "msg:value=%d, %d, %d\n" },
- /* trice64_3 ( trice64_3 ) */ { 13638u, 64u, 3u, "msg:value=%d, %d, %d\n" },
- /* Trice8 ( Trice8_2 ) */ { 13553u, 8u, 2u, "msg:value=%d, %d\n" },
- /* Trice16 ( Trice16_2 ) */ { 13565u, 16u, 2u, "msg:value=%d, %d\n" },
- /* Trice32 ( Trice32_2 ) */ { 13577u, 32u, 2u, "msg:value=%d, %d\n" },
- /* Trice64 ( Trice64_2 ) */ { 13589u, 64u, 2u, "msg:value=%d, %d\n" },
- /* Trice8_2 ( Trice8_2 ) */ { 13601u, 8u, 2u, "msg:value=%d, %d\n" },
- /* Trice16_2 ( Trice16_2 ) */ { 13613u, 16u, 2u, "msg:value=%d, %d\n" },
- /* Trice32_2 ( Trice32_2 ) */ { 13625u, 32u, 2u, "msg:value=%d, %d\n" },
- /* Trice64_2 ( Trice64_2 ) */ { 13637u, 64u, 2u, "msg:value=%d, %d\n" },
- /* TRice8 ( TRice8_1 ) */ { 13552u, 8u, 1u, "msg:value=%d\n" },
- /* TRice16 ( TRice16_1 ) */ { 13564u, 16u, 1u, "msg:value=%d\n" },
- /* TRice32 ( TRice32_1 ) */ { 13576u, 32u, 1u, "msg:value=%d\n" },
- /* TRice64 ( TRice64_1 ) */ { 13588u, 64u, 1u, "msg:value=%d\n" },
- /* TRice8_1 ( TRice8_1 ) */ { 13600u, 8u, 1u, "msg:value=%d\n" },
- /* TRice16_1 ( TRice16_1 ) */ { 13612u, 16u, 1u, "msg:value=%d\n" },
- /* TRice32_1 ( TRice32_1 ) */ { 13624u, 32u, 1u, "msg:value=%d\n" },
- /* TRice64_1 ( TRice64_1 ) */ { 13636u, 64u, 1u, "msg:value=%d\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 13504u, 8u, 1u, "msg:value=%u\n" },
- /* TRICE8_1 ( TRICE8_1 ) */ { 13505u, 8u, 1u, "msg:value=%u\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 13506u, 8u, 1u, "msg:value=%u\n" },
- /* TRICE8_1 ( TRICE8_1 ) */ { 13507u, 8u, 1u, "msg:value=%u\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 13508u, 8u, 1u, "msg:value=%u\n" },
- /* TRICE8_1 ( TRICE8_1 ) */ { 13509u, 8u, 1u, "msg:value=%u\n" },
- /* trice8 ( trice8_1 ) */ { 13510u, 8u, 1u, "msg:value=%u\n" },
- /* trice8_1 ( trice8_1 ) */ { 13511u, 8u, 1u, "msg:value=%u\n" },
- /* Trice8 ( Trice8_1 ) */ { 13512u, 8u, 1u, "msg:value=%u\n" },
- /* Trice8_1 ( Trice8_1 ) */ { 13513u, 8u, 1u, "msg:value=%u\n" },
- /* TRice8 ( TRice8_1 ) */ { 13514u, 8u, 1u, "msg:value=%u\n" },
- /* TRice8_1 ( TRice8_1 ) */ { 13515u, 8u, 1u, "msg:value=%u\n" },
- /* TRICE16 ( TRICE16_1 ) */ { 13516u, 16u, 1u, "msg:value=%u\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 13517u, 16u, 1u, "msg:value=%u\n" },
- /* TRICE16 ( TRICE16_1 ) */ { 13518u, 16u, 1u, "msg:value=%u\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 13519u, 16u, 1u, "msg:value=%u\n" },
- /* TRICE16 ( TRICE16_1 ) */ { 13520u, 16u, 1u, "msg:value=%u\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 13521u, 16u, 1u, "msg:value=%u\n" },
- /* trice16 ( trice16_1 ) */ { 13522u, 16u, 1u, "msg:value=%u\n" },
- /* trice16_1 ( trice16_1 ) */ { 13523u, 16u, 1u, "msg:value=%u\n" },
- /* Trice16 ( Trice16_1 ) */ { 13524u, 16u, 1u, "msg:value=%u\n" },
- /* Trice16_1 ( Trice16_1 ) */ { 13525u, 16u, 1u, "msg:value=%u\n" },
- /* TRice16 ( TRice16_1 ) */ { 13526u, 16u, 1u, "msg:value=%u\n" },
- /* TRice16_1 ( TRice16_1 ) */ { 13527u, 16u, 1u, "msg:value=%u\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 13528u, 32u, 1u, "msg:value=%u\n" },
- /* TRICE32_1 ( TRICE32_1 ) */ { 13529u, 32u, 1u, "msg:value=%u\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 13530u, 32u, 1u, "msg:value=%u\n" },
- /* TRICE32_1 ( TRICE32_1 ) */ { 13531u, 32u, 1u, "msg:value=%u\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 13532u, 32u, 1u, "msg:value=%u\n" },
- /* TRICE32_1 ( TRICE32_1 ) */ { 13533u, 32u, 1u, "msg:value=%u\n" },
- /* trice32 ( trice32_1 ) */ { 13534u, 32u, 1u, "msg:value=%u\n" },
- /* trice32_1 ( trice32_1 ) */ { 13535u, 32u, 1u, "msg:value=%u\n" },
- /* Trice32 ( Trice32_1 ) */ { 13536u, 32u, 1u, "msg:value=%u\n" },
- /* Trice32_1 ( Trice32_1 ) */ { 13537u, 32u, 1u, "msg:value=%u\n" },
- /* TRice32 ( TRice32_1 ) */ { 13538u, 32u, 1u, "msg:value=%u\n" },
- /* TRice32_1 ( TRice32_1 ) */ { 13539u, 32u, 1u, "msg:value=%u\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 13540u, 64u, 1u, "msg:value=%u\n" },
- /* TRICE64_1 ( TRICE64_1 ) */ { 13541u, 64u, 1u, "msg:value=%u\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 13542u, 64u, 1u, "msg:value=%u\n" },
- /* TRICE64_1 ( TRICE64_1 ) */ { 13543u, 64u, 1u, "msg:value=%u\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 13544u, 64u, 1u, "msg:value=%u\n" },
- /* TRICE64_1 ( TRICE64_1 ) */ { 13545u, 64u, 1u, "msg:value=%u\n" },
- /* trice64 ( trice64_1 ) */ { 13546u, 64u, 1u, "msg:value=%u\n" },
- /* trice64_1 ( trice64_1 ) */ { 13547u, 64u, 1u, "msg:value=%u\n" },
- /* Trice64 ( Trice64_1 ) */ { 13548u, 64u, 1u, "msg:value=%u\n" },
- /* Trice64_1 ( Trice64_1 ) */ { 13549u, 64u, 1u, "msg:value=%u\n" },
- /* TRice64 ( TRice64_1 ) */ { 13550u, 64u, 1u, "msg:value=%u\n" },
- /* TRice64_1 ( TRice64_1 ) */ { 13551u, 64u, 1u, "msg:value=%u\n" },
- /* TRice ( TRice32_5 ) */ { 13332u, 32u, 5u, "msg:x = %g = %d.%03d, %d.%03d\n" },
- /* TRice ( TRice_0 ) */ { 13453u, 32u, 0u, "no value\n" },
- /* Trice ( Trice_0 ) */ { 13454u, 32u, 0u, "no value\n" },
- /* trice ( trice_0 ) */ { 13455u, 32u, 0u, "no value\n" },
- /* TRice8 ( TRice_0 ) */ { 13456u, 32u, 0u, "no value\n" },
- /* Trice8 ( Trice_0 ) */ { 13457u, 32u, 0u, "no value\n" },
- /* trice8 ( trice_0 ) */ { 13458u, 32u, 0u, "no value\n" },
- /* TRice16 ( TRice_0 ) */ { 13459u, 32u, 0u, "no value\n" },
- /* Trice16 ( Trice_0 ) */ { 13460u, 32u, 0u, "no value\n" },
- /* trice16 ( trice_0 ) */ { 13461u, 32u, 0u, "no value\n" },
- /* TRice32 ( TRice_0 ) */ { 13462u, 32u, 0u, "no value\n" },
- /* Trice32 ( Trice_0 ) */ { 13463u, 32u, 0u, "no value\n" },
- /* trice32 ( trice_0 ) */ { 13464u, 32u, 0u, "no value\n" },
- /* TRice64 ( TRice_0 ) */ { 13465u, 32u, 0u, "no value\n" },
- /* Trice64 ( Trice_0 ) */ { 13466u, 32u, 0u, "no value\n" },
- /* trice64 ( trice_0 ) */ { 13467u, 32u, 0u, "no value\n" },
- /* TRice_0 ( TRice_0 ) */ { 13468u, 32u, 0u, "no value\n" },
- /* Trice_0 ( Trice_0 ) */ { 13469u, 32u, 0u, "no value\n" },
- /* trice_0 ( trice_0 ) */ { 13470u, 32u, 0u, "no value\n" },
- /* TRice8_0 ( TRice_0 ) */ { 13471u, 32u, 0u, "no value\n" },
- /* Trice8_0 ( Trice_0 ) */ { 13472u, 32u, 0u, "no value\n" },
- /* trice8_0 ( trice_0 ) */ { 13473u, 32u, 0u, "no value\n" },
- /* TRice16_0 ( TRice_0 ) */ { 13474u, 32u, 0u, "no value\n" },
- /* Trice16_0 ( Trice_0 ) */ { 13475u, 32u, 0u, "no value\n" },
- /* trice16_0 ( trice_0 ) */ { 13476u, 32u, 0u, "no value\n" },
- /* TRice32_0 ( TRice_0 ) */ { 13477u, 32u, 0u, "no value\n" },
- /* Trice32_0 ( Trice_0 ) */ { 13478u, 32u, 0u, "no value\n" },
- /* trice32_0 ( trice_0 ) */ { 13479u, 32u, 0u, "no value\n" },
- /* TRice64_0 ( TRice_0 ) */ { 13480u, 32u, 0u, "no value\n" },
- /* Trice64_0 ( Trice_0 ) */ { 13481u, 32u, 0u, "no value\n" },
- /* trice64_0 ( trice_0 ) */ { 13482u, 32u, 0u, "no value\n" },
- /* TRice0 ( TRice_0 ) */ { 13483u, 32u, 0u, "no value\n" },
- /* Trice0 ( Trice_0 ) */ { 13484u, 32u, 0u, "no value\n" },
- /* trice0 ( trice_0 ) */ { 13485u, 32u, 0u, "no value\n" },
- /* TRice ( TRice_0 ) */ { 13486u, 32u, 0u, "no value\n" },
- /* Trice ( Trice_0 ) */ { 13487u, 32u, 0u, "no value\n" },
- /* trice ( trice_0 ) */ { 13488u, 32u, 0u, "no value\n" },
- /* TRICE ( TRICE_0 ) */ { 13735u, 32u, 0u, "notice:blue:white+h\n" },
- /* trice ( trice_0 ) */ { 13785u, 32u, 0u, "notice:blue:white+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13835u, 32u, 0u, "notice:blue:white+h\n" },
- /* Trice ( Trice_0 ) */ { 13885u, 32u, 0u, "notice:blue:white+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13935u, 32u, 0u, "notice:blue:white+h\n" },
- /* TRice ( TRice_0 ) */ { 13985u, 32u, 0u, "notice:blue:white+h\n" },
- /* Trice ( Trice_0 ) */ { 15309u, 32u, 0u, "ok!\n" },
- /* TRice ( TRice_0 ) */ { 13056u, 32u, 0u, "ok\n" },
- /* TRice ( TRice_0 ) */ { 13058u, 32u, 0u, "ok\n" },
- /* TRice ( TRice_0 ) */ { 13060u, 32u, 0u, "ok\n" },
- /* TRice ( TRice_0 ) */ { 13062u, 32u, 0u, "ok\n" },
- /* TRice ( TRice_0 ) */ { 13064u, 32u, 0u, "ok\n" },
- /* TRice ( TRice_0 ) */ { 13066u, 32u, 0u, "ok\n" },
- /* TRice ( TRice_0 ) */ { 13068u, 32u, 0u, "ok\n" },
- /* TRice ( TRice_0 ) */ { 13070u, 32u, 0u, "ok\n" },
- /* TRice ( TRice_0 ) */ { 13072u, 32u, 0u, "ok\n" },
- /* TRice ( TRice_0 ) */ { 13074u, 32u, 0u, "ok\n" },
- /* TRice ( TRice_0 ) */ { 13076u, 32u, 0u, "ok\n" },
- /* TRice ( TRice_0 ) */ { 13078u, 32u, 0u, "ok\n" },
- /* TRice ( TRice_0 ) */ { 13079u, 32u, 0u, "ok\n" },
- /* TRice ( TRice_0 ) */ { 13080u, 32u, 0u, "ok\n" },
- /* TRice ( TRice_0 ) */ { 13081u, 32u, 0u, "ok\n" },
- /* TRice ( TRice32_1 ) */ { 13338u, 32u, 1u, "rd: 15\t%-4d\tPad with spaces (width 4, left justified)\n" },
- /* TRice ( TRice32_1 ) */ { 13337u, 32u, 1u, "rd: 15\t%4d \tPad with spaces (width 4, right justified)\n" },
- /* trice8B ( trice8B ) */ { 13279u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd: %02x\n" },
- /* trice ( trice32_1 ) */ { 13348u, 32u, 1u, "rd: 'A' \t%q \tQuoted character\n" },
- /* TRice ( TRice32_1 ) */ { 13336u, 32u, 1u, "rd: +15 \t%+d \tAlways show sign\n" },
- /* TRice ( TRice32_1 ) */ { 13339u, 32u, 1u, "rd: 0015\t%04d\tPad with zeroes (width 4)\n" },
- /* TRice ( TRice32_1 ) */ { 13344u, 32u, 1u, "rd: 0xf \t%#x \tBase 16, with leading 0x\n" },
- /* trice ( trice32_1 ) */ { 13361u, 32u, 1u, "rd: 1.234560e+02\t\t%e \t%%e Scientific notation\n" },
- /* trice64 ( trice64_1 ) */ { 13367u, 64u, 1u, "rd: 1.234560e+02\t\t%e \t%%e Scientific notation\n" },
- /* TRice ( TRice32_1 ) */ { 13340u, 32u, 1u, "rd: 1111 \t%b \tBase 2\n" },
- /* trice ( trice32_1 ) */ { 13365u, 32u, 1u, "rd: 123.456\t\t%g\t\t%%g Exponent as needed, necessary digits only\n" },
- /* trice64 ( trice64_1 ) */ { 13371u, 64u, 1u, "rd: 123.456\t\t%g\t\t%%g Exponent as needed, necessary digits only\n" },
- /* trice ( trice32_1 ) */ { 13362u, 32u, 1u, "rd: 123.456000\t\t%f \t%%f Decimal point, no exponent\n" },
- /* trice64 ( trice64_1 ) */ { 13368u, 64u, 1u, "rd: 123.456000\t\t%f \t%%f Decimal point, no exponent\n" },
- /* trice ( trice32_1 ) */ { 13363u, 32u, 1u, "rd: 123.46\t\t\t%.2f\t\t%%.2f Default width, precision 2\n" },
- /* trice64 ( trice64_1 ) */ { 13369u, 64u, 1u, "rd: 123.46\t\t\t%.2f \t%%.2f Default width, precision 2\n" },
- /* TRice ( TRice32_1 ) */ { 13335u, 32u, 1u, "rd: 15 \t%d \tBase 10\n" },
- /* TRice ( TRice32_1 ) */ { 13341u, 32u, 1u, "rd: 17 \t%o \tBase 8\n" },
- /* triceS ( triceS ) */ { 13378u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd: 63 61 66 c3 a9 \t% x\tHex dump with spaces\n" },
- /* triceS ( triceS ) */ { 13377u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd: 636166c3a9 \t\t%x\tHex dump of byte values\n" },
- /* trice ( trice32_1 ) */ { 13347u, 32u, 1u, "rd: A \t%c \tCharacter\n" },
- /* TRice ( TRice32_1 ) */ { 13343u, 32u, 1u, "rd: F \t%X \tBase 16, uppercase\n" },
- /* trice ( trice32_1 ) */ { 13349u, 32u, 1u, "rd: U+0041 \t%U \tUnicode\n" },
- /* trice ( trice32_1 ) */ { 13350u, 32u, 1u, "rd: U+0041 'A' \t%#U \tUnicode with character\n" },
- /* triceS ( triceS ) */ { 13376u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd: \"café\" \t\t%q\t\tQuoted string\n" },
- /* triceS ( triceS ) */ { 13373u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd: café \t\t\t%s\t\tPlain string\n" },
- /* triceS ( triceS ) */ { 13375u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd: café␣␣ \t\t%-6s \t\tWidth 6, left justify\n" },
- /* TRice ( TRice32_1 ) */ { 13342u, 32u, 1u, "rd: f \t%x \tBase 16, lowercase\n" },
- /* trice ( trice32_1 ) */ { 13364u, 32u, 1u, "rd: ␣␣123.46\t\t%8.2f\t%%8.2f Width 8, precision 2\n" },
- /* trice64 ( trice64_1 ) */ { 13370u, 64u, 1u, "rd: ␣␣123.46\t\t%8.2f \t%%8.2f Width 8, precision 2\n" },
- /* triceS ( triceS ) */ { 13374u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd: ␣␣café \t\t%6s \t\tWidth 6, right justify\n" },
- /* trice ( trice32_1 ) */ { 13398u, 32u, 1u, "rd:%E (%%E)\n" },
- /* trice64 ( trice64_1 ) */ { 13401u, 64u, 1u, "rd:%E (%%E)\n" },
- /* trice ( trice32_1 ) */ { 13399u, 32u, 1u, "rd:%F (%%F)\n" },
- /* trice64 ( trice64_1 ) */ { 13402u, 64u, 1u, "rd:%F (%%F)\n" },
- /* trice ( trice32_1 ) */ { 13400u, 32u, 1u, "rd:%G (%%G)\n" },
- /* trice64 ( trice64_1 ) */ { 13403u, 64u, 1u, "rd:%G (%%G)\n" },
- /* trice ( trice32_1 ) */ { 13404u, 32u, 1u, "rd:%e (%%e)\n" },
- /* trice64 ( trice64_1 ) */ { 13407u, 64u, 1u, "rd:%e (%%e)\n" },
- /* trice ( trice32_1 ) */ { 13405u, 32u, 1u, "rd:%f (%%f)\n" },
- /* trice64 ( trice64_1 ) */ { 13408u, 64u, 1u, "rd:%f (%%f)\n" },
- /* trice ( trice32_1 ) */ { 13406u, 32u, 1u, "rd:%g (%%g)\n" },
- /* trice64 ( trice64_1 ) */ { 13409u, 64u, 1u, "rd:%g (%%g)\n" },
- /* TriceS ( TriceS ) */ { 16344u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd:%s <- float number as string\n" },
- /* trice ( trice32_12 ) */ { 14003u, 32u, 12u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_12 ) */ { 14015u, 32u, 12u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_12 ) */ { 14027u, 32u, 12u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_12 ) */ { 15114u, 32u, 12u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_11 ) */ { 14002u, 32u, 11u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_11 ) */ { 14014u, 32u, 11u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_11 ) */ { 14026u, 32u, 11u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_11 ) */ { 15113u, 32u, 11u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_10 ) */ { 14001u, 32u, 10u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_10 ) */ { 14013u, 32u, 10u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_10 ) */ { 14025u, 32u, 10u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_10 ) */ { 15112u, 32u, 10u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_9 ) */ { 14000u, 32u, 9u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_9 ) */ { 14012u, 32u, 9u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_9 ) */ { 14024u, 32u, 9u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_9 ) */ { 15111u, 32u, 9u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_8 ) */ { 13999u, 32u, 8u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_8 ) */ { 14011u, 32u, 8u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_8 ) */ { 14023u, 32u, 8u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_8 ) */ { 15110u, 32u, 8u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_7 ) */ { 13998u, 32u, 7u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_7 ) */ { 14010u, 32u, 7u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_7 ) */ { 14022u, 32u, 7u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_7 ) */ { 15109u, 32u, 7u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_6 ) */ { 13997u, 32u, 6u, "rd:TRICE %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_6 ) */ { 14009u, 32u, 6u, "rd:TRICE %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_6 ) */ { 14021u, 32u, 6u, "rd:TRICE %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_6 ) */ { 15108u, 32u, 6u, "rd:TRICE %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_5 ) */ { 13996u, 32u, 5u, "rd:TRICE %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_5 ) */ { 14008u, 32u, 5u, "rd:TRICE %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_5 ) */ { 14020u, 32u, 5u, "rd:TRICE %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_5 ) */ { 15107u, 32u, 5u, "rd:TRICE %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_4 ) */ { 13995u, 32u, 4u, "rd:TRICE %d, %d, %d, %d\n" },
- /* trice ( trice32_4 ) */ { 14007u, 32u, 4u, "rd:TRICE %d, %d, %d, %d\n" },
- /* trice ( trice32_4 ) */ { 14019u, 32u, 4u, "rd:TRICE %d, %d, %d, %d\n" },
- /* trice ( trice32_4 ) */ { 15106u, 32u, 4u, "rd:TRICE %d, %d, %d, %d\n" },
- /* trice ( trice32_3 ) */ { 13994u, 32u, 3u, "rd:TRICE %d, %d, %d\n" },
- /* trice ( trice32_3 ) */ { 14006u, 32u, 3u, "rd:TRICE %d, %d, %d\n" },
- /* trice ( trice32_3 ) */ { 14018u, 32u, 3u, "rd:TRICE %d, %d, %d\n" },
- /* trice ( trice32_3 ) */ { 15105u, 32u, 3u, "rd:TRICE %d, %d, %d\n" },
- /* trice ( trice32_2 ) */ { 13993u, 32u, 2u, "rd:TRICE %d, %d\n" },
- /* trice ( trice32_2 ) */ { 14005u, 32u, 2u, "rd:TRICE %d, %d\n" },
- /* trice ( trice32_2 ) */ { 14017u, 32u, 2u, "rd:TRICE %d, %d\n" },
- /* trice ( trice32_2 ) */ { 15104u, 32u, 2u, "rd:TRICE %d, %d\n" },
- /* trice ( trice32_1 ) */ { 13992u, 32u, 1u, "rd:TRICE %d\n" },
- /* trice ( trice32_1 ) */ { 14004u, 32u, 1u, "rd:TRICE %d\n" },
- /* trice ( trice32_1 ) */ { 14016u, 32u, 1u, "rd:TRICE %d\n" },
- /* trice ( trice32_1 ) */ { 15103u, 32u, 1u, "rd:TRICE %d\n" },
- /* trice ( trice32_1 ) */ { 14942u, 32u, 1u, "rd:TRICE float %+.9f (%%.9f)\n" },
- /* trice ( trice32_1 ) */ { 14947u, 32u, 1u, "rd:TRICE float %+.9f (%%.9f)\n" },
- /* trice ( trice32_1 ) */ { 14944u, 32u, 1u, "rd:TRICE float %+9.6f (%%9.6f)\n" },
- /* trice ( trice32_1 ) */ { 14949u, 32u, 1u, "rd:TRICE float %+9.6f (%%9.6f)\n" },
- /* trice ( trice32_1 ) */ { 14943u, 32u, 1u, "rd:TRICE float %+9.f (%%9.f)\n" },
- /* trice ( trice32_1 ) */ { 14948u, 32u, 1u, "rd:TRICE float %+9.f (%%9.f)\n" },
- /* trice ( trice32_1 ) */ { 14941u, 32u, 1u, "rd:TRICE float %+9f (%%9f)\n" },
- /* trice ( trice32_1 ) */ { 14946u, 32u, 1u, "rd:TRICE float %+9f (%%9f)\n" },
- /* trice ( trice32_1 ) */ { 14940u, 32u, 1u, "rd:TRICE float %+f (%%f)\n" },
- /* trice ( trice32_1 ) */ { 14945u, 32u, 1u, "rd:TRICE float %+f (%%f)\n" },
- /* trice ( trice32_1 ) */ { 14952u, 32u, 1u, "rd:TRICE float %-.9f (%%.9f)\n" },
- /* trice ( trice32_1 ) */ { 14957u, 32u, 1u, "rd:TRICE float %-.9f (%%.9f)\n" },
- /* trice ( trice32_1 ) */ { 14954u, 32u, 1u, "rd:TRICE float %-9.6f (%%9.6f)\n" },
- /* trice ( trice32_1 ) */ { 14959u, 32u, 1u, "rd:TRICE float %-9.6f (%%9.6f)\n" },
- /* trice ( trice32_1 ) */ { 14953u, 32u, 1u, "rd:TRICE float %-9.f (%%9.f)\n" },
- /* trice ( trice32_1 ) */ { 14958u, 32u, 1u, "rd:TRICE float %-9.f (%%9.f)\n" },
- /* trice ( trice32_1 ) */ { 14951u, 32u, 1u, "rd:TRICE float %-9f (%%9f)\n" },
- /* trice ( trice32_1 ) */ { 14956u, 32u, 1u, "rd:TRICE float %-9f (%%9f)\n" },
- /* trice ( trice32_1 ) */ { 14950u, 32u, 1u, "rd:TRICE float %-f (%%f)\n" },
- /* trice ( trice32_1 ) */ { 14955u, 32u, 1u, "rd:TRICE float %-f (%%f)\n" },
- /* trice ( trice32_1 ) */ { 14932u, 32u, 1u, "rd:TRICE float %.9f (%%.9f)\n" },
- /* trice ( trice32_1 ) */ { 14937u, 32u, 1u, "rd:TRICE float %.9f (%%.9f)\n" },
- /* trice ( trice32_1 ) */ { 14934u, 32u, 1u, "rd:TRICE float %9.6f (%%9.6f)\n" },
- /* trice ( trice32_1 ) */ { 14939u, 32u, 1u, "rd:TRICE float %9.6f (%%9.6f)\n" },
- /* trice ( trice32_1 ) */ { 14933u, 32u, 1u, "rd:TRICE float %9.f (%%9.f)\n" },
- /* trice ( trice32_1 ) */ { 14938u, 32u, 1u, "rd:TRICE float %9.f (%%9.f)\n" },
- /* trice ( trice32_1 ) */ { 14931u, 32u, 1u, "rd:TRICE float %9f (%%9f)\n" },
- /* trice ( trice32_1 ) */ { 14936u, 32u, 1u, "rd:TRICE float %9f (%%9f)\n" },
- /* TRICE ( TRICE32_1 ) */ { 14976u, 32u, 1u, "rd:TRICE float %E (%%E)\n" },
- /* trice ( trice32_1 ) */ { 14995u, 32u, 1u, "rd:TRICE float %E (%%E)\n" },
- /* TRICE ( TRICE32_1 ) */ { 14977u, 32u, 1u, "rd:TRICE float %F (%%F)\n" },
- /* trice ( trice32_1 ) */ { 14996u, 32u, 1u, "rd:TRICE float %F (%%F)\n" },
- /* TRICE ( TRICE32_1 ) */ { 14978u, 32u, 1u, "rd:TRICE float %G (%%G)\n" },
- /* trice ( trice32_1 ) */ { 14997u, 32u, 1u, "rd:TRICE float %G (%%G)\n" },
- /* TRICE ( TRICE32_1 ) */ { 14973u, 32u, 1u, "rd:TRICE float %e (%%e)\n" },
- /* trice ( trice32_1 ) */ { 14992u, 32u, 1u, "rd:TRICE float %e (%%e)\n" },
- /* trice ( trice32_1 ) */ { 14930u, 32u, 1u, "rd:TRICE float %f (%%f)\n" },
- /* trice ( trice32_1 ) */ { 14935u, 32u, 1u, "rd:TRICE float %f (%%f)\n" },
- /* TRICE ( TRICE32_1 ) */ { 14974u, 32u, 1u, "rd:TRICE float %f (%%f)\n" },
- /* trice ( trice32_1 ) */ { 14993u, 32u, 1u, "rd:TRICE float %f (%%f)\n" },
- /* TRICE ( TRICE32_1 ) */ { 14975u, 32u, 1u, "rd:TRICE float %g (%%g)\n" },
- /* trice ( trice32_1 ) */ { 14994u, 32u, 1u, "rd:TRICE float %g (%%g)\n" },
- /* trice16 ( trice16_12 ) */ { 14262u, 16u, 12u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_12 ) */ { 14274u, 16u, 12u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_12 ) */ { 14286u, 16u, 12u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_11 ) */ { 14261u, 16u, 11u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_11 ) */ { 14273u, 16u, 11u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_11 ) */ { 14285u, 16u, 11u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_10 ) */ { 14260u, 16u, 10u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_10 ) */ { 14272u, 16u, 10u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_10 ) */ { 14284u, 16u, 10u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_9 ) */ { 14259u, 16u, 9u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_9 ) */ { 14271u, 16u, 9u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_9 ) */ { 14283u, 16u, 9u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_8 ) */ { 14258u, 16u, 8u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_8 ) */ { 14270u, 16u, 8u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_8 ) */ { 14282u, 16u, 8u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_7 ) */ { 14257u, 16u, 7u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_7 ) */ { 14269u, 16u, 7u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_7 ) */ { 14281u, 16u, 7u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_6 ) */ { 14256u, 16u, 6u, "rd:TRICE16 %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_6 ) */ { 14268u, 16u, 6u, "rd:TRICE16 %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_6 ) */ { 14280u, 16u, 6u, "rd:TRICE16 %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_5 ) */ { 14255u, 16u, 5u, "rd:TRICE16 %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_5 ) */ { 14267u, 16u, 5u, "rd:TRICE16 %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_5 ) */ { 14279u, 16u, 5u, "rd:TRICE16 %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_4 ) */ { 14254u, 16u, 4u, "rd:TRICE16 %d, %d, %d, %d\n" },
- /* trice16 ( trice16_4 ) */ { 14266u, 16u, 4u, "rd:TRICE16 %d, %d, %d, %d\n" },
- /* trice16 ( trice16_4 ) */ { 14278u, 16u, 4u, "rd:TRICE16 %d, %d, %d, %d\n" },
- /* trice16 ( trice16_3 ) */ { 14253u, 16u, 3u, "rd:TRICE16 %d, %d, %d\n" },
- /* trice16 ( trice16_3 ) */ { 14265u, 16u, 3u, "rd:TRICE16 %d, %d, %d\n" },
- /* trice16 ( trice16_3 ) */ { 14277u, 16u, 3u, "rd:TRICE16 %d, %d, %d\n" },
- /* trice16 ( trice16_2 ) */ { 14252u, 16u, 2u, "rd:TRICE16 %d, %d\n" },
- /* trice16 ( trice16_2 ) */ { 14264u, 16u, 2u, "rd:TRICE16 %d, %d\n" },
- /* trice16 ( trice16_2 ) */ { 14276u, 16u, 2u, "rd:TRICE16 %d, %d\n" },
- /* trice16 ( trice16_1 ) */ { 14251u, 16u, 1u, "rd:TRICE16 %d\n" },
- /* trice16 ( trice16_1 ) */ { 14263u, 16u, 1u, "rd:TRICE16 %d\n" },
- /* trice16 ( trice16_1 ) */ { 14275u, 16u, 1u, "rd:TRICE16 %d\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 14288u, 16u, 1u, "rd:TRICE16_1 %d\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 14300u, 16u, 1u, "rd:TRICE16_1 %d\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 14312u, 16u, 1u, "rd:TRICE16_1 %d\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 15031u, 16u, 1u, "rd:TRICE16_1 line %b (%%b -1)\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 15034u, 16u, 1u, "rd:TRICE16_1 line %d (%%d -1)\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 15032u, 16u, 1u, "rd:TRICE16_1 line %o (%%o -1)\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 15028u, 16u, 1u, "rd:TRICE16_1 line %t (%%t ,0)\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 15029u, 16u, 1u, "rd:TRICE16_1 line %t (%%t ,2)\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 15030u, 16u, 1u, "rd:TRICE16_1 line %u (%%u -1)\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 15033u, 16u, 1u, "rd:TRICE16_1 line %x (%%x -1)\n" },
- /* TRICE16_10 ( TRICE16_10 ) */ { 14297u, 16u, 10u, "rd:TRICE16_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_10 ( TRICE16_10 ) */ { 14309u, 16u, 10u, "rd:TRICE16_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_10 ( TRICE16_10 ) */ { 14321u, 16u, 10u, "rd:TRICE16_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_11 ( TRICE16_11 ) */ { 14298u, 16u, 11u, "rd:TRICE16_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_11 ( TRICE16_11 ) */ { 14310u, 16u, 11u, "rd:TRICE16_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_11 ( TRICE16_11 ) */ { 14322u, 16u, 11u, "rd:TRICE16_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_12 ( TRICE16_12 ) */ { 14299u, 16u, 12u, "rd:TRICE16_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_12 ( TRICE16_12 ) */ { 14311u, 16u, 12u, "rd:TRICE16_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_12 ( TRICE16_12 ) */ { 14323u, 16u, 12u, "rd:TRICE16_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_2 ( TRICE16_2 ) */ { 14289u, 16u, 2u, "rd:TRICE16_2 %d, %d\n" },
- /* TRICE16_2 ( TRICE16_2 ) */ { 14301u, 16u, 2u, "rd:TRICE16_2 %d, %d\n" },
- /* TRICE16_2 ( TRICE16_2 ) */ { 14313u, 16u, 2u, "rd:TRICE16_2 %d, %d\n" },
- /* TRICE16_3 ( TRICE16_3 ) */ { 14290u, 16u, 3u, "rd:TRICE16_3 %d, %d, %d\n" },
- /* TRICE16_3 ( TRICE16_3 ) */ { 14302u, 16u, 3u, "rd:TRICE16_3 %d, %d, %d\n" },
- /* TRICE16_3 ( TRICE16_3 ) */ { 14314u, 16u, 3u, "rd:TRICE16_3 %d, %d, %d\n" },
- /* TRICE16_4 ( TRICE16_4 ) */ { 14291u, 16u, 4u, "rd:TRICE16_4 %d, %d, %d, %d\n" },
- /* TRICE16_4 ( TRICE16_4 ) */ { 14303u, 16u, 4u, "rd:TRICE16_4 %d, %d, %d, %d\n" },
- /* TRICE16_4 ( TRICE16_4 ) */ { 14315u, 16u, 4u, "rd:TRICE16_4 %d, %d, %d, %d\n" },
- /* TRICE16_5 ( TRICE16_5 ) */ { 14292u, 16u, 5u, "rd:TRICE16_5 %d, %d, %d, %d, %d\n" },
- /* TRICE16_5 ( TRICE16_5 ) */ { 14304u, 16u, 5u, "rd:TRICE16_5 %d, %d, %d, %d, %d\n" },
- /* TRICE16_5 ( TRICE16_5 ) */ { 14316u, 16u, 5u, "rd:TRICE16_5 %d, %d, %d, %d, %d\n" },
- /* TRICE16_6 ( TRICE16_6 ) */ { 14293u, 16u, 6u, "rd:TRICE16_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_6 ( TRICE16_6 ) */ { 14305u, 16u, 6u, "rd:TRICE16_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_6 ( TRICE16_6 ) */ { 14317u, 16u, 6u, "rd:TRICE16_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_7 ( TRICE16_7 ) */ { 14294u, 16u, 7u, "rd:TRICE16_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_7 ( TRICE16_7 ) */ { 14306u, 16u, 7u, "rd:TRICE16_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_7 ( TRICE16_7 ) */ { 14318u, 16u, 7u, "rd:TRICE16_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_8 ( TRICE16_8 ) */ { 14295u, 16u, 8u, "rd:TRICE16_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_8 ( TRICE16_8 ) */ { 14307u, 16u, 8u, "rd:TRICE16_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_8 ( TRICE16_8 ) */ { 14319u, 16u, 8u, "rd:TRICE16_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_9 ( TRICE16_9 ) */ { 14296u, 16u, 9u, "rd:TRICE16_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_9 ( TRICE16_9 ) */ { 14308u, 16u, 9u, "rd:TRICE16_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_9 ( TRICE16_9 ) */ { 14320u, 16u, 9u, "rd:TRICE16_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_12 ) */ { 14410u, 32u, 12u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_12 ) */ { 14422u, 32u, 12u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_12 ) */ { 14434u, 32u, 12u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_11 ) */ { 14409u, 32u, 11u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_11 ) */ { 14421u, 32u, 11u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_11 ) */ { 14433u, 32u, 11u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_10 ) */ { 14408u, 32u, 10u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_10 ) */ { 14420u, 32u, 10u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_10 ) */ { 14432u, 32u, 10u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_9 ) */ { 14407u, 32u, 9u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_9 ) */ { 14419u, 32u, 9u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_9 ) */ { 14431u, 32u, 9u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_8 ) */ { 14406u, 32u, 8u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_8 ) */ { 14418u, 32u, 8u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_8 ) */ { 14430u, 32u, 8u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_7 ) */ { 14405u, 32u, 7u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_7 ) */ { 14417u, 32u, 7u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_7 ) */ { 14429u, 32u, 7u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_6 ) */ { 14404u, 32u, 6u, "rd:TRICE32 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_6 ) */ { 14416u, 32u, 6u, "rd:TRICE32 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_6 ) */ { 14428u, 32u, 6u, "rd:TRICE32 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_5 ) */ { 14403u, 32u, 5u, "rd:TRICE32 %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_5 ) */ { 14415u, 32u, 5u, "rd:TRICE32 %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_5 ) */ { 14427u, 32u, 5u, "rd:TRICE32 %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_4 ) */ { 14402u, 32u, 4u, "rd:TRICE32 %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_4 ) */ { 14414u, 32u, 4u, "rd:TRICE32 %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_4 ) */ { 14426u, 32u, 4u, "rd:TRICE32 %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_3 ) */ { 14401u, 32u, 3u, "rd:TRICE32 %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_3 ) */ { 14413u, 32u, 3u, "rd:TRICE32 %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_3 ) */ { 14425u, 32u, 3u, "rd:TRICE32 %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_2 ) */ { 14400u, 32u, 2u, "rd:TRICE32 %d, %d\n" },
- /* TRICE32 ( TRICE32_2 ) */ { 14412u, 32u, 2u, "rd:TRICE32 %d, %d\n" },
- /* TRICE32 ( TRICE32_2 ) */ { 14424u, 32u, 2u, "rd:TRICE32 %d, %d\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 14399u, 32u, 1u, "rd:TRICE32 %d\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 14411u, 32u, 1u, "rd:TRICE32 %d\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 14423u, 32u, 1u, "rd:TRICE32 %d\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 15008u, 32u, 1u, "rd:TRICE32 float %12.6E (%%12.6E)\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 15009u, 32u, 1u, "rd:TRICE32 float %12.6F (%%12.6F)\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 15010u, 32u, 1u, "rd:TRICE32 float %12.6G (%%12.6G)\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 15005u, 32u, 1u, "rd:TRICE32 float %12.6e (%%12.6e)\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 15006u, 32u, 1u, "rd:TRICE32 float %12.6f (%%12.6f)\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 15007u, 32u, 1u, "rd:TRICE32 float %12.6g (%%12.6g)\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 14970u, 32u, 1u, "rd:TRICE32 float %E (%%E)\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 14971u, 32u, 1u, "rd:TRICE32 float %F (%%F)\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 14972u, 32u, 1u, "rd:TRICE32 float %G (%%G)\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 14967u, 32u, 1u, "rd:TRICE32 float %e (%%e)\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 14968u, 32u, 1u, "rd:TRICE32 float %f (%%f)\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 14969u, 32u, 1u, "rd:TRICE32 float %g (%%g)\n" },
- /* TRICE32_1 ( TRICE32_1 ) */ { 14436u, 32u, 1u, "rd:TRICE32_1 %d\n" },
- /* TRICE32_1 ( TRICE32_1 ) */ { 14448u, 32u, 1u, "rd:TRICE32_1 %d\n" },
- /* TRICE32_1 ( TRICE32_1 ) */ { 14460u, 32u, 1u, "rd:TRICE32_1 %d\n" },
- /* TRICE32_1 ( TRICE32_1 ) */ { 14964u, 32u, 1u, "rd:TRICE32_1 float %E (%%E)\n" },
- /* TRICE32_1 ( TRICE32_1 ) */ { 14965u, 32u, 1u, "rd:TRICE32_1 float %F (%%F)\n" },
- /* TRICE32_1 ( TRICE32_1 ) */ { 14966u, 32u, 1u, "rd:TRICE32_1 float %G (%%G)\n" },
- /* TRICE32_1 ( TRICE32_1 ) */ { 14961u, 32u, 1u, "rd:TRICE32_1 float %e (%%e)\n" },
- /* TRICE32_1 ( TRICE32_1 ) */ { 14962u, 32u, 1u, "rd:TRICE32_1 float %f (%%f)\n" },
- /* TRICE32_1 ( TRICE32_1 ) */ { 14963u, 32u, 1u, "rd:TRICE32_1 float %g (%%g)\n" },
- /* TRICE32_10 ( TRICE32_10 ) */ { 14445u, 32u, 10u, "rd:TRICE32_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_10 ( TRICE32_10 ) */ { 14457u, 32u, 10u, "rd:TRICE32_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_10 ( TRICE32_10 ) */ { 14469u, 32u, 10u, "rd:TRICE32_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_11 ( TRICE32_11 ) */ { 14446u, 32u, 11u, "rd:TRICE32_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_11 ( TRICE32_11 ) */ { 14458u, 32u, 11u, "rd:TRICE32_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_11 ( TRICE32_11 ) */ { 14470u, 32u, 11u, "rd:TRICE32_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_12 ( TRICE32_12 ) */ { 14447u, 32u, 12u, "rd:TRICE32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_12 ( TRICE32_12 ) */ { 14459u, 32u, 12u, "rd:TRICE32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_12 ( TRICE32_12 ) */ { 14471u, 32u, 12u, "rd:TRICE32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_2 ( TRICE32_2 ) */ { 14437u, 32u, 2u, "rd:TRICE32_2 %d, %d\n" },
- /* TRICE32_2 ( TRICE32_2 ) */ { 14449u, 32u, 2u, "rd:TRICE32_2 %d, %d\n" },
- /* TRICE32_2 ( TRICE32_2 ) */ { 14461u, 32u, 2u, "rd:TRICE32_2 %d, %d\n" },
- /* TRICE32_3 ( TRICE32_3 ) */ { 14438u, 32u, 3u, "rd:TRICE32_3 %d, %d, %d\n" },
- /* TRICE32_3 ( TRICE32_3 ) */ { 14450u, 32u, 3u, "rd:TRICE32_3 %d, %d, %d\n" },
- /* TRICE32_3 ( TRICE32_3 ) */ { 14462u, 32u, 3u, "rd:TRICE32_3 %d, %d, %d\n" },
- /* TRICE32_4 ( TRICE32_4 ) */ { 14439u, 32u, 4u, "rd:TRICE32_4 %d, %d, %d, %d\n" },
- /* TRICE32_4 ( TRICE32_4 ) */ { 14451u, 32u, 4u, "rd:TRICE32_4 %d, %d, %d, %d\n" },
- /* TRICE32_4 ( TRICE32_4 ) */ { 14463u, 32u, 4u, "rd:TRICE32_4 %d, %d, %d, %d\n" },
- /* TRICE32_5 ( TRICE32_5 ) */ { 14440u, 32u, 5u, "rd:TRICE32_5 %d, %d, %d, %d, %d\n" },
- /* TRICE32_5 ( TRICE32_5 ) */ { 14452u, 32u, 5u, "rd:TRICE32_5 %d, %d, %d, %d, %d\n" },
- /* TRICE32_5 ( TRICE32_5 ) */ { 14464u, 32u, 5u, "rd:TRICE32_5 %d, %d, %d, %d, %d\n" },
- /* TRICE32_6 ( TRICE32_6 ) */ { 14441u, 32u, 6u, "rd:TRICE32_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_6 ( TRICE32_6 ) */ { 14453u, 32u, 6u, "rd:TRICE32_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_6 ( TRICE32_6 ) */ { 14465u, 32u, 6u, "rd:TRICE32_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_7 ( TRICE32_7 ) */ { 14442u, 32u, 7u, "rd:TRICE32_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_7 ( TRICE32_7 ) */ { 14454u, 32u, 7u, "rd:TRICE32_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_7 ( TRICE32_7 ) */ { 14466u, 32u, 7u, "rd:TRICE32_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_8 ( TRICE32_8 ) */ { 14443u, 32u, 8u, "rd:TRICE32_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_8 ( TRICE32_8 ) */ { 14455u, 32u, 8u, "rd:TRICE32_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_8 ( TRICE32_8 ) */ { 14467u, 32u, 8u, "rd:TRICE32_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_9 ( TRICE32_9 ) */ { 14444u, 32u, 9u, "rd:TRICE32_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_9 ( TRICE32_9 ) */ { 14456u, 32u, 9u, "rd:TRICE32_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_9 ( TRICE32_9 ) */ { 14468u, 32u, 9u, "rd:TRICE32_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_12 ) */ { 14558u, 64u, 12u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_12 ) */ { 14570u, 64u, 12u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_12 ) */ { 14582u, 64u, 12u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_11 ) */ { 14557u, 64u, 11u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_11 ) */ { 14569u, 64u, 11u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_11 ) */ { 14581u, 64u, 11u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_10 ) */ { 14556u, 64u, 10u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_10 ) */ { 14568u, 64u, 10u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_10 ) */ { 14580u, 64u, 10u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_9 ) */ { 14555u, 64u, 9u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_9 ) */ { 14567u, 64u, 9u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_9 ) */ { 14579u, 64u, 9u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_8 ) */ { 14554u, 64u, 8u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_8 ) */ { 14566u, 64u, 8u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_8 ) */ { 14578u, 64u, 8u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_7 ) */ { 14553u, 64u, 7u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_7 ) */ { 14565u, 64u, 7u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_7 ) */ { 14577u, 64u, 7u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_6 ) */ { 14552u, 64u, 6u, "rd:TRICE64 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_6 ) */ { 14564u, 64u, 6u, "rd:TRICE64 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_6 ) */ { 14576u, 64u, 6u, "rd:TRICE64 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_5 ) */ { 14551u, 64u, 5u, "rd:TRICE64 %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_5 ) */ { 14563u, 64u, 5u, "rd:TRICE64 %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_5 ) */ { 14575u, 64u, 5u, "rd:TRICE64 %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_4 ) */ { 14550u, 64u, 4u, "rd:TRICE64 %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_4 ) */ { 14562u, 64u, 4u, "rd:TRICE64 %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_4 ) */ { 14574u, 64u, 4u, "rd:TRICE64 %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_3 ) */ { 14549u, 64u, 3u, "rd:TRICE64 %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_3 ) */ { 14561u, 64u, 3u, "rd:TRICE64 %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_3 ) */ { 14573u, 64u, 3u, "rd:TRICE64 %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_2 ) */ { 13210u, 64u, 2u, "rd:TRICE64 %d, %d\n" },
- /* TRICE64 ( TRICE64_2 ) */ { 14548u, 64u, 2u, "rd:TRICE64 %d, %d\n" },
- /* TRICE64 ( TRICE64_2 ) */ { 14560u, 64u, 2u, "rd:TRICE64 %d, %d\n" },
- /* TRICE64 ( TRICE64_2 ) */ { 14572u, 64u, 2u, "rd:TRICE64 %d, %d\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 14547u, 64u, 1u, "rd:TRICE64 %d\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 14559u, 64u, 1u, "rd:TRICE64 %d\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 14571u, 64u, 1u, "rd:TRICE64 %d\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 15015u, 64u, 1u, "rd:TRICE64 double %12.6E (%%12.6E), aDouble(y)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 15016u, 64u, 1u, "rd:TRICE64 double %12.6F (%%12.6F), aDouble(y)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 15017u, 64u, 1u, "rd:TRICE64 double %12.6G (%%12.6G), aDouble(y)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 15012u, 64u, 1u, "rd:TRICE64 double %12.6e (%%12.6e), aDouble(y)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 15013u, 64u, 1u, "rd:TRICE64 double %12.6f (%%12.6f), aDouble(y)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 15014u, 64u, 1u, "rd:TRICE64 double %12.6g (%%12.6g), aDouble(y)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 14982u, 64u, 1u, "rd:TRICE64 double %E (%%E), aDouble(y)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 15001u, 64u, 1u, "rd:TRICE64 double %E (%%E), aDouble(y)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 14983u, 64u, 1u, "rd:TRICE64 double %F (%%F), aDouble(y)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 15002u, 64u, 1u, "rd:TRICE64 double %F (%%F), aDouble(y)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 14984u, 64u, 1u, "rd:TRICE64 double %G (%%G), aDouble(y)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 15003u, 64u, 1u, "rd:TRICE64 double %G (%%G), aDouble(y)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 14979u, 64u, 1u, "rd:TRICE64 double %e (%%e), aDouble(y)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 14998u, 64u, 1u, "rd:TRICE64 double %e (%%e), aDouble(y)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 14980u, 64u, 1u, "rd:TRICE64 double %f (%%f), aDouble(y)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 14999u, 64u, 1u, "rd:TRICE64 double %f (%%f), aDouble(y)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 14981u, 64u, 1u, "rd:TRICE64 double %g (%%g), aDouble(y)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 15000u, 64u, 1u, "rd:TRICE64 double %g (%%g), aDouble(y)\n" },
- /* TRICE64_1 ( TRICE64_1 ) */ { 14584u, 64u, 1u, "rd:TRICE64_1 %d\n" },
- /* TRICE64_1 ( TRICE64_1 ) */ { 14596u, 64u, 1u, "rd:TRICE64_1 %d\n" },
- /* TRICE64_1 ( TRICE64_1 ) */ { 14608u, 64u, 1u, "rd:TRICE64_1 %d\n" },
- /* TRICE64_1 ( TRICE64_1 ) */ { 14988u, 64u, 1u, "rd:TRICE64_1 double %E (%%E), aDouble(y)\n" },
- /* TRICE64_1 ( TRICE64_1 ) */ { 14989u, 64u, 1u, "rd:TRICE64_1 double %F (%%F), aDouble(y)\n" },
- /* TRICE64_1 ( TRICE64_1 ) */ { 14990u, 64u, 1u, "rd:TRICE64_1 double %G (%%G), aDouble(y)\n" },
- /* TRICE64_1 ( TRICE64_1 ) */ { 14985u, 64u, 1u, "rd:TRICE64_1 double %e (%%e), aDouble(y)\n" },
- /* TRICE64_1 ( TRICE64_1 ) */ { 14986u, 64u, 1u, "rd:TRICE64_1 double %f (%%f), aDouble(y)\n" },
- /* TRICE64_1 ( TRICE64_1 ) */ { 14987u, 64u, 1u, "rd:TRICE64_1 double %g (%%g), aDouble(y)\n" },
- /* TRICE64_10 ( TRICE64_10 ) */ { 14593u, 64u, 10u, "rd:TRICE64_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_10 ( TRICE64_10 ) */ { 14605u, 64u, 10u, "rd:TRICE64_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_10 ( TRICE64_10 ) */ { 14617u, 64u, 10u, "rd:TRICE64_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_11 ( TRICE64_11 ) */ { 14594u, 64u, 11u, "rd:TRICE64_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_11 ( TRICE64_11 ) */ { 14606u, 64u, 11u, "rd:TRICE64_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_11 ( TRICE64_11 ) */ { 14618u, 64u, 11u, "rd:TRICE64_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_12 ( TRICE64_12 ) */ { 14595u, 64u, 12u, "rd:TRICE64_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_12 ( TRICE64_12 ) */ { 14607u, 64u, 12u, "rd:TRICE64_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_12 ( TRICE64_12 ) */ { 14619u, 64u, 12u, "rd:TRICE64_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_2 ( TRICE64_2 ) */ { 14585u, 64u, 2u, "rd:TRICE64_2 %d, %d\n" },
- /* TRICE64_2 ( TRICE64_2 ) */ { 14597u, 64u, 2u, "rd:TRICE64_2 %d, %d\n" },
- /* TRICE64_2 ( TRICE64_2 ) */ { 14609u, 64u, 2u, "rd:TRICE64_2 %d, %d\n" },
- /* TRICE64_3 ( TRICE64_3 ) */ { 14586u, 64u, 3u, "rd:TRICE64_3 %d, %d, %d\n" },
- /* TRICE64_3 ( TRICE64_3 ) */ { 14598u, 64u, 3u, "rd:TRICE64_3 %d, %d, %d\n" },
- /* TRICE64_3 ( TRICE64_3 ) */ { 14610u, 64u, 3u, "rd:TRICE64_3 %d, %d, %d\n" },
- /* TRICE64_4 ( TRICE64_4 ) */ { 14587u, 64u, 4u, "rd:TRICE64_4 %d, %d, %d, %d\n" },
- /* TRICE64_4 ( TRICE64_4 ) */ { 14599u, 64u, 4u, "rd:TRICE64_4 %d, %d, %d, %d\n" },
- /* TRICE64_4 ( TRICE64_4 ) */ { 14611u, 64u, 4u, "rd:TRICE64_4 %d, %d, %d, %d\n" },
- /* TRICE64_5 ( TRICE64_5 ) */ { 14588u, 64u, 5u, "rd:TRICE64_5 %d, %d, %d, %d, %d\n" },
- /* TRICE64_5 ( TRICE64_5 ) */ { 14600u, 64u, 5u, "rd:TRICE64_5 %d, %d, %d, %d, %d\n" },
- /* TRICE64_5 ( TRICE64_5 ) */ { 14612u, 64u, 5u, "rd:TRICE64_5 %d, %d, %d, %d, %d\n" },
- /* TRICE64_6 ( TRICE64_6 ) */ { 14589u, 64u, 6u, "rd:TRICE64_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_6 ( TRICE64_6 ) */ { 14601u, 64u, 6u, "rd:TRICE64_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_6 ( TRICE64_6 ) */ { 14613u, 64u, 6u, "rd:TRICE64_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_7 ( TRICE64_7 ) */ { 14590u, 64u, 7u, "rd:TRICE64_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_7 ( TRICE64_7 ) */ { 14602u, 64u, 7u, "rd:TRICE64_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_7 ( TRICE64_7 ) */ { 14614u, 64u, 7u, "rd:TRICE64_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_8 ( TRICE64_8 ) */ { 14591u, 64u, 8u, "rd:TRICE64_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_8 ( TRICE64_8 ) */ { 14603u, 64u, 8u, "rd:TRICE64_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_8 ( TRICE64_8 ) */ { 14615u, 64u, 8u, "rd:TRICE64_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_9 ( TRICE64_9 ) */ { 14592u, 64u, 9u, "rd:TRICE64_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_9 ( TRICE64_9 ) */ { 14604u, 64u, 9u, "rd:TRICE64_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_9 ( TRICE64_9 ) */ { 14616u, 64u, 9u, "rd:TRICE64_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_12 ) */ { 14114u, 8u, 12u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_12 ) */ { 14126u, 8u, 12u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_12 ) */ { 14138u, 8u, 12u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_11 ) */ { 14113u, 8u, 11u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_11 ) */ { 14125u, 8u, 11u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_11 ) */ { 14137u, 8u, 11u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_10 ) */ { 14112u, 8u, 10u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_10 ) */ { 14124u, 8u, 10u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_10 ) */ { 14136u, 8u, 10u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_9 ) */ { 14111u, 8u, 9u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_9 ) */ { 14123u, 8u, 9u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_9 ) */ { 14135u, 8u, 9u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_8 ) */ { 14110u, 8u, 8u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_8 ) */ { 14122u, 8u, 8u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_8 ) */ { 14134u, 8u, 8u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_7 ) */ { 14109u, 8u, 7u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_7 ) */ { 14121u, 8u, 7u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_7 ) */ { 14133u, 8u, 7u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_6 ) */ { 14108u, 8u, 6u, "rd:TRICE8 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_6 ) */ { 14120u, 8u, 6u, "rd:TRICE8 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_6 ) */ { 14132u, 8u, 6u, "rd:TRICE8 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_5 ) */ { 14107u, 8u, 5u, "rd:TRICE8 %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_5 ) */ { 14119u, 8u, 5u, "rd:TRICE8 %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_5 ) */ { 14131u, 8u, 5u, "rd:TRICE8 %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_4 ) */ { 14106u, 8u, 4u, "rd:TRICE8 %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_4 ) */ { 14118u, 8u, 4u, "rd:TRICE8 %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_4 ) */ { 14130u, 8u, 4u, "rd:TRICE8 %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_3 ) */ { 14105u, 8u, 3u, "rd:TRICE8 %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_3 ) */ { 14117u, 8u, 3u, "rd:TRICE8 %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_3 ) */ { 14129u, 8u, 3u, "rd:TRICE8 %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_2 ) */ { 14104u, 8u, 2u, "rd:TRICE8 %d, %d\n" },
- /* TRICE8 ( TRICE8_2 ) */ { 14116u, 8u, 2u, "rd:TRICE8 %d, %d\n" },
- /* TRICE8 ( TRICE8_2 ) */ { 14128u, 8u, 2u, "rd:TRICE8 %d, %d\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 14103u, 8u, 1u, "rd:TRICE8 %d\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 14115u, 8u, 1u, "rd:TRICE8 %d\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 14127u, 8u, 1u, "rd:TRICE8 %d\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 15024u, 8u, 1u, "rd:TRICE8 line %O (%%O ,-1)\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 15025u, 8u, 1u, "rd:TRICE8 line %X (%%X ,-1)\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 15022u, 8u, 1u, "rd:TRICE8 line %b (%%b ,-1)\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 15027u, 8u, 1u, "rd:TRICE8 line %d (%%d ,-1)\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 15023u, 8u, 1u, "rd:TRICE8 line %o (%%o ,-1)\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 15019u, 8u, 1u, "rd:TRICE8 line %t (%%t ,0)\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 15020u, 8u, 1u, "rd:TRICE8 line %t (%%t ,2)\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 15021u, 8u, 1u, "rd:TRICE8 line %u (%%u ,-1)\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 15026u, 8u, 1u, "rd:TRICE8 line %x (%%x ,-1)\n" },
- /* TRICE8_1 ( TRICE8_1 ) */ { 14140u, 8u, 1u, "rd:TRICE8_1 %d\n" },
- /* TRICE8_1 ( TRICE8_1 ) */ { 14152u, 8u, 1u, "rd:TRICE8_1 %d\n" },
- /* TRICE8_1 ( TRICE8_1 ) */ { 14164u, 8u, 1u, "rd:TRICE8_1 %d\n" },
- /* TRICE8_10 ( TRICE8_10 ) */ { 14149u, 8u, 10u, "rd:TRICE8_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_10 ( TRICE8_10 ) */ { 14161u, 8u, 10u, "rd:TRICE8_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_10 ( TRICE8_10 ) */ { 14173u, 8u, 10u, "rd:TRICE8_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_11 ( TRICE8_11 ) */ { 14150u, 8u, 11u, "rd:TRICE8_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_11 ( TRICE8_11 ) */ { 14162u, 8u, 11u, "rd:TRICE8_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_11 ( TRICE8_11 ) */ { 14174u, 8u, 11u, "rd:TRICE8_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_12 ( TRICE8_12 ) */ { 14151u, 8u, 12u, "rd:TRICE8_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_12 ( TRICE8_12 ) */ { 14163u, 8u, 12u, "rd:TRICE8_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_12 ( TRICE8_12 ) */ { 14175u, 8u, 12u, "rd:TRICE8_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_2 ( TRICE8_2 ) */ { 14141u, 8u, 2u, "rd:TRICE8_2 %d, %d\n" },
- /* TRICE8_2 ( TRICE8_2 ) */ { 14153u, 8u, 2u, "rd:TRICE8_2 %d, %d\n" },
- /* TRICE8_2 ( TRICE8_2 ) */ { 14165u, 8u, 2u, "rd:TRICE8_2 %d, %d\n" },
- /* TRICE8_3 ( TRICE8_3 ) */ { 14142u, 8u, 3u, "rd:TRICE8_3 %d, %d, %d\n" },
- /* TRICE8_3 ( TRICE8_3 ) */ { 14154u, 8u, 3u, "rd:TRICE8_3 %d, %d, %d\n" },
- /* TRICE8_3 ( TRICE8_3 ) */ { 14166u, 8u, 3u, "rd:TRICE8_3 %d, %d, %d\n" },
- /* TRICE8_4 ( TRICE8_4 ) */ { 14143u, 8u, 4u, "rd:TRICE8_4 %d, %d, %d, %d\n" },
- /* TRICE8_4 ( TRICE8_4 ) */ { 14155u, 8u, 4u, "rd:TRICE8_4 %d, %d, %d, %d\n" },
- /* TRICE8_4 ( TRICE8_4 ) */ { 14167u, 8u, 4u, "rd:TRICE8_4 %d, %d, %d, %d\n" },
- /* TRICE8_5 ( TRICE8_5 ) */ { 14144u, 8u, 5u, "rd:TRICE8_5 %d, %d, %d, %d, %d\n" },
- /* TRICE8_5 ( TRICE8_5 ) */ { 14156u, 8u, 5u, "rd:TRICE8_5 %d, %d, %d, %d, %d\n" },
- /* TRICE8_5 ( TRICE8_5 ) */ { 14168u, 8u, 5u, "rd:TRICE8_5 %d, %d, %d, %d, %d\n" },
- /* TRICE8_6 ( TRICE8_6 ) */ { 14145u, 8u, 6u, "rd:TRICE8_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_6 ( TRICE8_6 ) */ { 14157u, 8u, 6u, "rd:TRICE8_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_6 ( TRICE8_6 ) */ { 14169u, 8u, 6u, "rd:TRICE8_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_7 ( TRICE8_7 ) */ { 14146u, 8u, 7u, "rd:TRICE8_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_7 ( TRICE8_7 ) */ { 14158u, 8u, 7u, "rd:TRICE8_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_7 ( TRICE8_7 ) */ { 14170u, 8u, 7u, "rd:TRICE8_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_8 ( TRICE8_8 ) */ { 14147u, 8u, 8u, "rd:TRICE8_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_8 ( TRICE8_8 ) */ { 14159u, 8u, 8u, "rd:TRICE8_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_8 ( TRICE8_8 ) */ { 14171u, 8u, 8u, "rd:TRICE8_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_9 ( TRICE8_9 ) */ { 14148u, 8u, 9u, "rd:TRICE8_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_9 ( TRICE8_9 ) */ { 14160u, 8u, 9u, "rd:TRICE8_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_9 ( TRICE8_9 ) */ { 14172u, 8u, 9u, "rd:TRICE8_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_1 ( TRICE32_1 ) */ { 14029u, 32u, 1u, "rd:TRICE_1 %d\n" },
- /* TRICE_1 ( TRICE32_1 ) */ { 14041u, 32u, 1u, "rd:TRICE_1 %d\n" },
- /* TRICE_1 ( TRICE32_1 ) */ { 14053u, 32u, 1u, "rd:TRICE_1 %d\n" },
- /* trice ( trice32_1 ) */ { 15116u, 32u, 1u, "rd:TRICE_1 %d\n" },
- /* TRICE_10 ( TRICE32_10 ) */ { 14038u, 32u, 10u, "rd:TRICE_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_10 ( TRICE32_10 ) */ { 14050u, 32u, 10u, "rd:TRICE_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_10 ( TRICE32_10 ) */ { 14062u, 32u, 10u, "rd:TRICE_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_10 ) */ { 15125u, 32u, 10u, "rd:TRICE_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_11 ( TRICE32_11 ) */ { 14039u, 32u, 11u, "rd:TRICE_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_11 ( TRICE32_11 ) */ { 14051u, 32u, 11u, "rd:TRICE_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_11 ( TRICE32_11 ) */ { 14063u, 32u, 11u, "rd:TRICE_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_11 ) */ { 15126u, 32u, 11u, "rd:TRICE_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_12 ( TRICE32_12 ) */ { 14040u, 32u, 12u, "rd:TRICE_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_12 ( TRICE32_12 ) */ { 14052u, 32u, 12u, "rd:TRICE_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_12 ( TRICE32_12 ) */ { 14064u, 32u, 12u, "rd:TRICE_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_12 ) */ { 15127u, 32u, 12u, "rd:TRICE_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_2 ( TRICE32_2 ) */ { 14030u, 32u, 2u, "rd:TRICE_2 %d, %d\n" },
- /* TRICE_2 ( TRICE32_2 ) */ { 14042u, 32u, 2u, "rd:TRICE_2 %d, %d\n" },
- /* TRICE_2 ( TRICE32_2 ) */ { 14054u, 32u, 2u, "rd:TRICE_2 %d, %d\n" },
- /* trice ( trice32_2 ) */ { 15117u, 32u, 2u, "rd:TRICE_2 %d, %d\n" },
- /* TRICE_3 ( TRICE32_3 ) */ { 14031u, 32u, 3u, "rd:TRICE_3 %d, %d, %d\n" },
- /* TRICE_3 ( TRICE32_3 ) */ { 14043u, 32u, 3u, "rd:TRICE_3 %d, %d, %d\n" },
- /* TRICE_3 ( TRICE32_3 ) */ { 14055u, 32u, 3u, "rd:TRICE_3 %d, %d, %d\n" },
- /* trice ( trice32_3 ) */ { 15118u, 32u, 3u, "rd:TRICE_3 %d, %d, %d\n" },
- /* TRICE_4 ( TRICE32_4 ) */ { 14032u, 32u, 4u, "rd:TRICE_4 %d, %d, %d, %d\n" },
- /* TRICE_4 ( TRICE32_4 ) */ { 14044u, 32u, 4u, "rd:TRICE_4 %d, %d, %d, %d\n" },
- /* TRICE_4 ( TRICE32_4 ) */ { 14056u, 32u, 4u, "rd:TRICE_4 %d, %d, %d, %d\n" },
- /* trice ( trice32_4 ) */ { 15119u, 32u, 4u, "rd:TRICE_4 %d, %d, %d, %d\n" },
- /* TRICE_5 ( TRICE32_5 ) */ { 14033u, 32u, 5u, "rd:TRICE_5 %d, %d, %d, %d, %d\n" },
- /* TRICE_5 ( TRICE32_5 ) */ { 14045u, 32u, 5u, "rd:TRICE_5 %d, %d, %d, %d, %d\n" },
- /* TRICE_5 ( TRICE32_5 ) */ { 14057u, 32u, 5u, "rd:TRICE_5 %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_5 ) */ { 15120u, 32u, 5u, "rd:TRICE_5 %d, %d, %d, %d, %d\n" },
- /* TRICE_6 ( TRICE32_6 ) */ { 14034u, 32u, 6u, "rd:TRICE_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_6 ( TRICE32_6 ) */ { 14046u, 32u, 6u, "rd:TRICE_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_6 ( TRICE32_6 ) */ { 14058u, 32u, 6u, "rd:TRICE_6 %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_6 ) */ { 15121u, 32u, 6u, "rd:TRICE_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_7 ( TRICE32_7 ) */ { 14035u, 32u, 7u, "rd:TRICE_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_7 ( TRICE32_7 ) */ { 14047u, 32u, 7u, "rd:TRICE_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_7 ( TRICE32_7 ) */ { 14059u, 32u, 7u, "rd:TRICE_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_7 ) */ { 15122u, 32u, 7u, "rd:TRICE_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_8 ( TRICE32_8 ) */ { 14036u, 32u, 8u, "rd:TRICE_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_8 ( TRICE32_8 ) */ { 14048u, 32u, 8u, "rd:TRICE_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_8 ( TRICE32_8 ) */ { 14060u, 32u, 8u, "rd:TRICE_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_8 ) */ { 15123u, 32u, 8u, "rd:TRICE_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_9 ( TRICE32_9 ) */ { 14037u, 32u, 9u, "rd:TRICE_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_9 ( TRICE32_9 ) */ { 14049u, 32u, 9u, "rd:TRICE_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_9 ( TRICE32_9 ) */ { 14061u, 32u, 9u, "rd:TRICE_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_9 ) */ { 15124u, 32u, 9u, "rd:TRICE_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice ( TRice32_12 ) */ { 13133u, 32u, 12u, "rd:TRice %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice ( TRice32_11 ) */ { 13132u, 32u, 11u, "rd:TRice %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice ( TRice32_10 ) */ { 13131u, 32u, 10u, "rd:TRice %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice ( TRice32_9 ) */ { 13130u, 32u, 9u, "rd:TRice %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice ( TRice32_8 ) */ { 13129u, 32u, 8u, "rd:TRice %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice ( TRice32_7 ) */ { 13128u, 32u, 7u, "rd:TRice %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice ( TRice32_6 ) */ { 13127u, 32u, 6u, "rd:TRice %d, %d, %d, %d, %d, %d\n" },
- /* TRice ( TRice32_5 ) */ { 13126u, 32u, 5u, "rd:TRice %d, %d, %d, %d, %d\n" },
- /* TRice ( TRice32_4 ) */ { 13125u, 32u, 4u, "rd:TRice %d, %d, %d, %d\n" },
- /* TRice ( TRice32_3 ) */ { 13124u, 32u, 3u, "rd:TRice %d, %d, %d\n" },
- /* TRice ( TRice32_2 ) */ { 13123u, 32u, 2u, "rd:TRice %d, %d\n" },
- /* TRice ( TRice32_1 ) */ { 13122u, 32u, 1u, "rd:TRice %d\n" },
- /* TRice16 ( TRice16_12 ) */ { 14360u, 16u, 12u, "rd:TRice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice16 ( TRice16_11 ) */ { 14359u, 16u, 11u, "rd:TRice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice16 ( TRice16_10 ) */ { 14358u, 16u, 10u, "rd:TRice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice16 ( TRice16_9 ) */ { 14357u, 16u, 9u, "rd:TRice16 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice16 ( TRice16_8 ) */ { 14356u, 16u, 8u, "rd:TRice16 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice16 ( TRice16_7 ) */ { 14355u, 16u, 7u, "rd:TRice16 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice16 ( TRice16_6 ) */ { 14354u, 16u, 6u, "rd:TRice16 %d, %d, %d, %d, %d, %d\n" },
- /* TRice16 ( TRice16_5 ) */ { 14353u, 16u, 5u, "rd:TRice16 %d, %d, %d, %d, %d\n" },
- /* TRice16 ( TRice16_4 ) */ { 14352u, 16u, 4u, "rd:TRice16 %d, %d, %d, %d\n" },
- /* TRice16 ( TRice16_3 ) */ { 14351u, 16u, 3u, "rd:TRice16 %d, %d, %d\n" },
- /* TRice16 ( TRice16_2 ) */ { 14350u, 16u, 2u, "rd:TRice16 %d, %d\n" },
- /* TRice16 ( TRice16_1 ) */ { 14349u, 16u, 1u, "rd:TRice16 %d\n" },
- /* TRice16_1 ( TRice16_1 ) */ { 14386u, 16u, 1u, "rd:TRice16_1 %d\n" },
- /* TRice16_10 ( TRice16_10 ) */ { 14395u, 16u, 10u, "rd:TRice16_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice16_11 ( TRice16_11 ) */ { 14396u, 16u, 11u, "rd:TRice16_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice16_12 ( TRice16_12 ) */ { 14397u, 16u, 12u, "rd:TRice16_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice16_2 ( TRice16_2 ) */ { 14387u, 16u, 2u, "rd:TRice16_2 %d, %d\n" },
- /* TRice16_3 ( TRice16_3 ) */ { 14388u, 16u, 3u, "rd:TRice16_3 %d, %d, %d\n" },
- /* TRice16_4 ( TRice16_4 ) */ { 14389u, 16u, 4u, "rd:TRice16_4 %d, %d, %d, %d\n" },
- /* TRice16_5 ( TRice16_5 ) */ { 14390u, 16u, 5u, "rd:TRice16_5 %d, %d, %d, %d, %d\n" },
- /* TRice16_6 ( TRice16_6 ) */ { 14391u, 16u, 6u, "rd:TRice16_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRice16_7 ( TRice16_7 ) */ { 14392u, 16u, 7u, "rd:TRice16_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice16_8 ( TRice16_8 ) */ { 14393u, 16u, 8u, "rd:TRice16_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice16_9 ( TRice16_9 ) */ { 14394u, 16u, 9u, "rd:TRice16_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice32 ( TRice32_12 ) */ { 14508u, 32u, 12u, "rd:TRice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice32 ( TRice32_11 ) */ { 14507u, 32u, 11u, "rd:TRice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice32 ( TRice32_10 ) */ { 14506u, 32u, 10u, "rd:TRice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice32 ( TRice32_9 ) */ { 14505u, 32u, 9u, "rd:TRice32 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice32 ( TRice32_8 ) */ { 14504u, 32u, 8u, "rd:TRice32 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice32 ( TRice32_7 ) */ { 14503u, 32u, 7u, "rd:TRice32 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice32 ( TRice32_6 ) */ { 14502u, 32u, 6u, "rd:TRice32 %d, %d, %d, %d, %d, %d\n" },
- /* TRice32 ( TRice32_5 ) */ { 14501u, 32u, 5u, "rd:TRice32 %d, %d, %d, %d, %d\n" },
- /* TRice32 ( TRice32_4 ) */ { 14500u, 32u, 4u, "rd:TRice32 %d, %d, %d, %d\n" },
- /* TRice32 ( TRice32_3 ) */ { 14499u, 32u, 3u, "rd:TRice32 %d, %d, %d\n" },
- /* TRice32 ( TRice32_2 ) */ { 14498u, 32u, 2u, "rd:TRice32 %d, %d\n" },
- /* TRice32 ( TRice32_1 ) */ { 14497u, 32u, 1u, "rd:TRice32 %d\n" },
- /* TRice32 ( TRice32_4 ) */ { 13251u, 32u, 4u, "rd:TRice32 int %X, float %f (%%f), %08x, %032b\n" },
- /* TRice32 ( TRice32_4 ) */ { 13245u, 32u, 4u, "rd:TRice32 int %d, float %f (%%f), %08x, %032b\n" },
- /* TRice32 ( TRice32_4 ) */ { 13246u, 32u, 4u, "rd:TRice32 int %d, float %f (%%f), %08x, %032b\n" },
- /* TRice32 ( TRice32_4 ) */ { 13248u, 32u, 4u, "rd:TRice32 int %d, float %f (%%f), %08x, %032b\n" },
- /* TRice32 ( TRice32_4 ) */ { 13249u, 32u, 4u, "rd:TRice32 int %d, float %f (%%f), %08x, %032b\n" },
- /* TRice32 ( TRice32_4 ) */ { 13250u, 32u, 4u, "rd:TRice32 int %d, float %f (%%f), %08x, %032b\n" },
- /* TRice32 ( TRice32_4 ) */ { 13247u, 32u, 4u, "rd:TRice32 int %x, float %f (%%f), %08x, %032b\n" },
- /* TRice32_1 ( TRice32_1 ) */ { 14534u, 32u, 1u, "rd:TRice32_1 %d\n" },
- /* TRice32_10 ( TRice32_10 ) */ { 14543u, 32u, 10u, "rd:TRice32_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice32_11 ( TRice32_11 ) */ { 14544u, 32u, 11u, "rd:TRice32_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice32_12 ( TRice32_12 ) */ { 14545u, 32u, 12u, "rd:TRice32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice32_12 ( TRice32_12 ) */ { 14693u, 32u, 12u, "rd:TRice32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice32_2 ( TRice32_2 ) */ { 14535u, 32u, 2u, "rd:TRice32_2 %d, %d\n" },
- /* TRice32_3 ( TRice32_3 ) */ { 14536u, 32u, 3u, "rd:TRice32_3 %d, %d, %d\n" },
- /* TRice32_4 ( TRice32_4 ) */ { 14537u, 32u, 4u, "rd:TRice32_4 %d, %d, %d, %d\n" },
- /* TRice32_5 ( TRice32_5 ) */ { 14538u, 32u, 5u, "rd:TRice32_5 %d, %d, %d, %d, %d\n" },
- /* TRice32_6 ( TRice32_6 ) */ { 14539u, 32u, 6u, "rd:TRice32_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRice32_7 ( TRice32_7 ) */ { 14540u, 32u, 7u, "rd:TRice32_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice32_8 ( TRice32_8 ) */ { 14541u, 32u, 8u, "rd:TRice32_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice32_9 ( TRice32_9 ) */ { 14542u, 32u, 9u, "rd:TRice32_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice64 ( TRice64_12 ) */ { 14656u, 64u, 12u, "rd:TRice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice64 ( TRice64_11 ) */ { 14655u, 64u, 11u, "rd:TRice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice64 ( TRice64_10 ) */ { 14654u, 64u, 10u, "rd:TRice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice64 ( TRice64_9 ) */ { 14653u, 64u, 9u, "rd:TRice64 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice64 ( TRice64_8 ) */ { 14652u, 64u, 8u, "rd:TRice64 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice64 ( TRice64_7 ) */ { 14651u, 64u, 7u, "rd:TRice64 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice64 ( TRice64_6 ) */ { 14650u, 64u, 6u, "rd:TRice64 %d, %d, %d, %d, %d, %d\n" },
- /* TRice64 ( TRice64_5 ) */ { 14649u, 64u, 5u, "rd:TRice64 %d, %d, %d, %d, %d\n" },
- /* TRice64 ( TRice64_4 ) */ { 14648u, 64u, 4u, "rd:TRice64 %d, %d, %d, %d\n" },
- /* TRice64 ( TRice64_3 ) */ { 14647u, 64u, 3u, "rd:TRice64 %d, %d, %d\n" },
- /* TRice64 ( TRice64_2 ) */ { 14646u, 64u, 2u, "rd:TRice64 %d, %d\n" },
- /* TRice64 ( TRice64_1 ) */ { 14645u, 64u, 1u, "rd:TRice64 %d\n" },
- /* TRice64 ( TRice64_4 ) */ { 13257u, 64u, 4u, "rd:TRice64 int %X, double %f (%%f), %016x, %064b\n" },
- /* TRice64 ( TRice64_4 ) */ { 13252u, 64u, 4u, "rd:TRice64 int %d, double %f (%%f), %016x, %064b\n" },
- /* TRice64 ( TRice64_4 ) */ { 13253u, 64u, 4u, "rd:TRice64 int %d, double %f (%%f), %016x, %064b\n" },
- /* TRice64 ( TRice64_4 ) */ { 13254u, 64u, 4u, "rd:TRice64 int %d, double %f (%%f), %016x, %064b\n" },
- /* TRice64 ( TRice64_4 ) */ { 13255u, 64u, 4u, "rd:TRice64 int %d, double %f (%%f), %016x, %064b\n" },
- /* TRice64 ( TRice64_4 ) */ { 13256u, 64u, 4u, "rd:TRice64 int %d, double %f (%%f), %016x, %064b\n" },
- /* TRice64_1 ( TRice64_1 ) */ { 14682u, 64u, 1u, "rd:TRice64_1 %d\n" },
- /* TRice64_10 ( TRice64_10 ) */ { 14691u, 64u, 10u, "rd:TRice64_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice64_11 ( TRice64_11 ) */ { 14692u, 64u, 11u, "rd:TRice64_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice64_2 ( TRice64_2 ) */ { 14683u, 64u, 2u, "rd:TRice64_2 %d, %d\n" },
- /* TRice64_3 ( TRice64_3 ) */ { 14684u, 64u, 3u, "rd:TRice64_3 %d, %d, %d\n" },
- /* TRice64_4 ( TRice64_4 ) */ { 14685u, 64u, 4u, "rd:TRice64_4 %d, %d, %d, %d\n" },
- /* TRice64_5 ( TRice64_5 ) */ { 14686u, 64u, 5u, "rd:TRice64_5 %d, %d, %d, %d, %d\n" },
- /* TRice64_6 ( TRice64_6 ) */ { 14687u, 64u, 6u, "rd:TRice64_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRice64_7 ( TRice64_7 ) */ { 14688u, 64u, 7u, "rd:TRice64_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice64_8 ( TRice64_8 ) */ { 14689u, 64u, 8u, "rd:TRice64_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice64_9 ( TRice64_9 ) */ { 14690u, 64u, 9u, "rd:TRice64_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice8 ( TRice8_12 ) */ { 14212u, 8u, 12u, "rd:TRice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice8 ( TRice8_11 ) */ { 14211u, 8u, 11u, "rd:TRice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice8 ( TRice8_10 ) */ { 14210u, 8u, 10u, "rd:TRice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice8 ( TRice8_9 ) */ { 14209u, 8u, 9u, "rd:TRice8 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice8 ( TRice8_8 ) */ { 14208u, 8u, 8u, "rd:TRice8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice8 ( TRice8_7 ) */ { 14207u, 8u, 7u, "rd:TRice8 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice8 ( TRice8_6 ) */ { 14206u, 8u, 6u, "rd:TRice8 %d, %d, %d, %d, %d, %d\n" },
- /* TRice8 ( TRice8_5 ) */ { 14205u, 8u, 5u, "rd:TRice8 %d, %d, %d, %d, %d\n" },
- /* TRice8 ( TRice8_4 ) */ { 14204u, 8u, 4u, "rd:TRice8 %d, %d, %d, %d\n" },
- /* TRice8 ( TRice8_3 ) */ { 14203u, 8u, 3u, "rd:TRice8 %d, %d, %d\n" },
- /* TRice8 ( TRice8_2 ) */ { 14202u, 8u, 2u, "rd:TRice8 %d, %d\n" },
- /* TRice8 ( TRice8_1 ) */ { 14201u, 8u, 1u, "rd:TRice8 %d\n" },
- /* TRice8_1 ( TRice8_1 ) */ { 14238u, 8u, 1u, "rd:TRice8_1 %d\n" },
- /* TRice8_10 ( TRice8_10 ) */ { 14247u, 8u, 10u, "rd:TRice8_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice8_11 ( TRice8_11 ) */ { 14248u, 8u, 11u, "rd:TRice8_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice8_12 ( TRice8_12 ) */ { 14249u, 8u, 12u, "rd:TRice8_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice8_2 ( TRice8_2 ) */ { 14239u, 8u, 2u, "rd:TRice8_2 %d, %d\n" },
- /* TRice8_3 ( TRice8_3 ) */ { 14240u, 8u, 3u, "rd:TRice8_3 %d, %d, %d\n" },
- /* TRice8_4 ( TRice8_4 ) */ { 14241u, 8u, 4u, "rd:TRice8_4 %d, %d, %d, %d\n" },
- /* TRice8_5 ( TRice8_5 ) */ { 14242u, 8u, 5u, "rd:TRice8_5 %d, %d, %d, %d, %d\n" },
- /* TRice8_6 ( TRice8_6 ) */ { 14243u, 8u, 6u, "rd:TRice8_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRice8_7 ( TRice8_7 ) */ { 14244u, 8u, 7u, "rd:TRice8_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice8_8 ( TRice8_8 ) */ { 14245u, 8u, 8u, "rd:TRice8_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice8_9 ( TRice8_9 ) */ { 14246u, 8u, 9u, "rd:TRice8_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice ( TRice_0 ) */ { 13121u, 32u, 0u, "rd:TRice\n" },
- /* TRice_1 ( TRice32_1 ) */ { 14090u, 32u, 1u, "rd:TRice_1 %d\n" },
- /* TRice_10 ( TRice32_10 ) */ { 14099u, 32u, 10u, "rd:TRice_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice_11 ( TRice32_11 ) */ { 14100u, 32u, 11u, "rd:TRice_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice_12 ( TRice32_12 ) */ { 14101u, 32u, 12u, "rd:TRice_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice_2 ( TRice32_2 ) */ { 14091u, 32u, 2u, "rd:TRice_2 %d, %d\n" },
- /* TRice_3 ( TRice32_3 ) */ { 14092u, 32u, 3u, "rd:TRice_3 %d, %d, %d\n" },
- /* TRice_4 ( TRice32_4 ) */ { 14093u, 32u, 4u, "rd:TRice_4 %d, %d, %d, %d\n" },
- /* TRice_5 ( TRice32_5 ) */ { 14094u, 32u, 5u, "rd:TRice_5 %d, %d, %d, %d, %d\n" },
- /* TRice_6 ( TRice32_6 ) */ { 14095u, 32u, 6u, "rd:TRice_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRice_7 ( TRice32_7 ) */ { 14096u, 32u, 7u, "rd:TRice_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice_8 ( TRice32_8 ) */ { 14097u, 32u, 8u, "rd:TRice_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice_9 ( TRice32_9 ) */ { 14098u, 32u, 9u, "rd:TRice_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice ( Trice32_12 ) */ { 13119u, 32u, 12u, "rd:Trice %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice ( Trice32_11 ) */ { 13118u, 32u, 11u, "rd:Trice %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice ( Trice32_10 ) */ { 13117u, 32u, 10u, "rd:Trice %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice ( Trice32_9 ) */ { 13116u, 32u, 9u, "rd:Trice %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice ( Trice32_8 ) */ { 13115u, 32u, 8u, "rd:Trice %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice ( Trice32_7 ) */ { 13114u, 32u, 7u, "rd:Trice %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice ( Trice32_6 ) */ { 13113u, 32u, 6u, "rd:Trice %d, %d, %d, %d, %d, %d\n" },
- /* Trice ( Trice32_5 ) */ { 13112u, 32u, 5u, "rd:Trice %d, %d, %d, %d, %d\n" },
- /* Trice ( Trice32_4 ) */ { 13111u, 32u, 4u, "rd:Trice %d, %d, %d, %d\n" },
- /* Trice ( Trice32_3 ) */ { 13110u, 32u, 3u, "rd:Trice %d, %d, %d\n" },
- /* Trice ( Trice32_2 ) */ { 13109u, 32u, 2u, "rd:Trice %d, %d\n" },
- /* Trice ( Trice32_1 ) */ { 13108u, 32u, 1u, "rd:Trice %d\n" },
- /* Trice ( Trice32_1 ) */ { 15038u, 32u, 1u, "rd:Trice line %b (%%b)\n" },
- /* Trice ( Trice32_1 ) */ { 15041u, 32u, 1u, "rd:Trice line %d (%%d)\n" },
- /* Trice ( Trice32_1 ) */ { 15039u, 32u, 1u, "rd:Trice line %o (%%o)\n" },
- /* Trice ( Trice32_1 ) */ { 15035u, 32u, 1u, "rd:Trice line %t (%%t -1)\n" },
- /* Trice ( Trice32_1 ) */ { 15036u, 32u, 1u, "rd:Trice line %t (%%t -1)\n" },
- /* Trice ( Trice32_1 ) */ { 15037u, 32u, 1u, "rd:Trice line %u (%%u)\n" },
- /* Trice ( Trice32_1 ) */ { 15040u, 32u, 1u, "rd:Trice line %x (%%x)\n" },
- /* Trice16 ( Trice16_12 ) */ { 15153u, 16u, 12u, "rd:Trice16 %X, %X, %X, %X, %X, %X, %X, %X, %X, %X, %X, %X\n" },
- /* Trice16 ( Trice16_11 ) */ { 15152u, 16u, 11u, "rd:Trice16 %X, %X, %X, %X, %X, %X, %X, %X, %X, %X, %X\n" },
- /* Trice16 ( Trice16_10 ) */ { 15151u, 16u, 10u, "rd:Trice16 %X, %X, %X, %X, %X, %X, %X, %X, %X, %X\n" },
- /* Trice16 ( Trice16_9 ) */ { 15150u, 16u, 9u, "rd:Trice16 %X, %X, %X, %X, %X, %X, %X, %X, %X\n" },
- /* Trice16 ( Trice16_8 ) */ { 15149u, 16u, 8u, "rd:Trice16 %X, %X, %X, %X, %X, %X, %X, %X\n" },
- /* Trice16 ( Trice16_7 ) */ { 15148u, 16u, 7u, "rd:Trice16 %X, %X, %X, %X, %X, %X, %X\n" },
- /* Trice16 ( Trice16_6 ) */ { 15147u, 16u, 6u, "rd:Trice16 %X, %X, %X, %X, %X, %X\n" },
- /* Trice16 ( Trice16_5 ) */ { 15146u, 16u, 5u, "rd:Trice16 %X, %X, %X, %X, %X\n" },
- /* Trice16 ( Trice16_4 ) */ { 15145u, 16u, 4u, "rd:Trice16 %X, %X, %X, %X\n" },
- /* Trice16 ( Trice16_3 ) */ { 15144u, 16u, 3u, "rd:Trice16 %X, %X, %X\n" },
- /* Trice16 ( Trice16_2 ) */ { 15143u, 16u, 2u, "rd:Trice16 %X, %X\n" },
- /* Trice16 ( Trice16_1 ) */ { 15142u, 16u, 1u, "rd:Trice16 %X\n" },
- /* Trice16 ( Trice16_12 ) */ { 14348u, 16u, 12u, "rd:Trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice16 ( Trice16_11 ) */ { 14347u, 16u, 11u, "rd:Trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice16 ( Trice16_10 ) */ { 14346u, 16u, 10u, "rd:Trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice16 ( Trice16_9 ) */ { 14345u, 16u, 9u, "rd:Trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice16 ( Trice16_8 ) */ { 14344u, 16u, 8u, "rd:Trice16 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice16 ( Trice16_7 ) */ { 14343u, 16u, 7u, "rd:Trice16 %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice16 ( Trice16_6 ) */ { 14342u, 16u, 6u, "rd:Trice16 %d, %d, %d, %d, %d, %d\n" },
- /* Trice16 ( Trice16_5 ) */ { 14341u, 16u, 5u, "rd:Trice16 %d, %d, %d, %d, %d\n" },
- /* Trice16 ( Trice16_4 ) */ { 14340u, 16u, 4u, "rd:Trice16 %d, %d, %d, %d\n" },
- /* Trice16 ( Trice16_3 ) */ { 14339u, 16u, 3u, "rd:Trice16 %d, %d, %d\n" },
- /* Trice16 ( Trice16_2 ) */ { 14338u, 16u, 2u, "rd:Trice16 %d, %d\n" },
- /* Trice16 ( Trice16_1 ) */ { 14337u, 16u, 1u, "rd:Trice16 %d\n" },
- /* Trice16 ( Trice16_12 ) */ { 15140u, 16u, 12u, "rd:Trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\n" },
- /* Trice16 ( Trice16_11 ) */ { 15139u, 16u, 11u, "rd:Trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\n" },
- /* Trice16 ( Trice16_10 ) */ { 15138u, 16u, 10u, "rd:Trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\n" },
- /* Trice16 ( Trice16_9 ) */ { 15137u, 16u, 9u, "rd:Trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p\n" },
- /* Trice16 ( Trice16_8 ) */ { 15136u, 16u, 8u, "rd:Trice16 %p, %p, %p, %p, %p, %p, %p, %p\n" },
- /* Trice16 ( Trice16_7 ) */ { 15135u, 16u, 7u, "rd:Trice16 %p, %p, %p, %p, %p, %p, %p\n" },
- /* Trice16 ( Trice16_6 ) */ { 15134u, 16u, 6u, "rd:Trice16 %p, %p, %p, %p, %p, %p\n" },
- /* Trice16 ( Trice16_5 ) */ { 15133u, 16u, 5u, "rd:Trice16 %p, %p, %p, %p, %p\n" },
- /* Trice16 ( Trice16_4 ) */ { 15132u, 16u, 4u, "rd:Trice16 %p, %p, %p, %p\n" },
- /* Trice16 ( Trice16_3 ) */ { 15131u, 16u, 3u, "rd:Trice16 %p, %p, %p\n" },
- /* Trice16 ( Trice16_2 ) */ { 15130u, 16u, 2u, "rd:Trice16 %p, %p\n" },
- /* Trice16 ( Trice16_1 ) */ { 15129u, 16u, 1u, "rd:Trice16 %p\n" },
- /* Trice16_1 ( Trice16_1 ) */ { 14374u, 16u, 1u, "rd:Trice16_1 %d\n" },
- /* Trice16_10 ( Trice16_10 ) */ { 14383u, 16u, 10u, "rd:Trice16_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice16_11 ( Trice16_11 ) */ { 14384u, 16u, 11u, "rd:Trice16_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice16_12 ( Trice16_12 ) */ { 14385u, 16u, 12u, "rd:Trice16_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice16_2 ( Trice16_2 ) */ { 14375u, 16u, 2u, "rd:Trice16_2 %d, %d\n" },
- /* Trice16_3 ( Trice16_3 ) */ { 14376u, 16u, 3u, "rd:Trice16_3 %d, %d, %d\n" },
- /* Trice16_4 ( Trice16_4 ) */ { 14377u, 16u, 4u, "rd:Trice16_4 %d, %d, %d, %d\n" },
- /* Trice16_5 ( Trice16_5 ) */ { 14378u, 16u, 5u, "rd:Trice16_5 %d, %d, %d, %d, %d\n" },
- /* Trice16_6 ( Trice16_6 ) */ { 14379u, 16u, 6u, "rd:Trice16_6 %d, %d, %d, %d, %d, %d\n" },
- /* Trice16_7 ( Trice16_7 ) */ { 14380u, 16u, 7u, "rd:Trice16_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice16_8 ( Trice16_8 ) */ { 14381u, 16u, 8u, "rd:Trice16_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice16_9 ( Trice16_9 ) */ { 14382u, 16u, 9u, "rd:Trice16_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice32 ( Trice32_12 ) */ { 14496u, 32u, 12u, "rd:Trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice32 ( Trice32_11 ) */ { 14495u, 32u, 11u, "rd:Trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice32 ( Trice32_10 ) */ { 14494u, 32u, 10u, "rd:Trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice32 ( Trice32_9 ) */ { 14493u, 32u, 9u, "rd:Trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice32 ( Trice32_8 ) */ { 14492u, 32u, 8u, "rd:Trice32 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice32 ( Trice32_7 ) */ { 14491u, 32u, 7u, "rd:Trice32 %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice32 ( Trice32_6 ) */ { 14490u, 32u, 6u, "rd:Trice32 %d, %d, %d, %d, %d, %d\n" },
- /* Trice32 ( Trice32_5 ) */ { 14489u, 32u, 5u, "rd:Trice32 %d, %d, %d, %d, %d\n" },
- /* Trice32 ( Trice32_4 ) */ { 14488u, 32u, 4u, "rd:Trice32 %d, %d, %d, %d\n" },
- /* Trice32 ( Trice32_3 ) */ { 14487u, 32u, 3u, "rd:Trice32 %d, %d, %d\n" },
- /* Trice32 ( Trice32_2 ) */ { 14486u, 32u, 2u, "rd:Trice32 %d, %d\n" },
- /* Trice32 ( Trice32_1 ) */ { 14485u, 32u, 1u, "rd:Trice32 %d\n" },
- /* Trice32_1 ( Trice32_1 ) */ { 14522u, 32u, 1u, "rd:Trice32_1 %d\n" },
- /* Trice32_10 ( Trice32_10 ) */ { 14531u, 32u, 10u, "rd:Trice32_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice32_11 ( Trice32_11 ) */ { 14532u, 32u, 11u, "rd:Trice32_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice32_12 ( Trice32_12 ) */ { 14533u, 32u, 12u, "rd:Trice32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice32_2 ( Trice32_2 ) */ { 14523u, 32u, 2u, "rd:Trice32_2 %d, %d\n" },
- /* Trice32_3 ( Trice32_3 ) */ { 14524u, 32u, 3u, "rd:Trice32_3 %d, %d, %d\n" },
- /* Trice32_4 ( Trice32_4 ) */ { 14525u, 32u, 4u, "rd:Trice32_4 %d, %d, %d, %d\n" },
- /* Trice32_5 ( Trice32_5 ) */ { 14526u, 32u, 5u, "rd:Trice32_5 %d, %d, %d, %d, %d\n" },
- /* Trice32_6 ( Trice32_6 ) */ { 14527u, 32u, 6u, "rd:Trice32_6 %d, %d, %d, %d, %d, %d\n" },
- /* Trice32_7 ( Trice32_7 ) */ { 14528u, 32u, 7u, "rd:Trice32_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice32_8 ( Trice32_8 ) */ { 14529u, 32u, 8u, "rd:Trice32_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice32_9 ( Trice32_9 ) */ { 14530u, 32u, 9u, "rd:Trice32_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice64 ( Trice64_12 ) */ { 14644u, 64u, 12u, "rd:Trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice64 ( Trice64_11 ) */ { 14643u, 64u, 11u, "rd:Trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice64 ( Trice64_10 ) */ { 14642u, 64u, 10u, "rd:Trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice64 ( Trice64_9 ) */ { 14641u, 64u, 9u, "rd:Trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice64 ( Trice64_8 ) */ { 14640u, 64u, 8u, "rd:Trice64 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice64 ( Trice64_7 ) */ { 14639u, 64u, 7u, "rd:Trice64 %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice64 ( Trice64_6 ) */ { 14638u, 64u, 6u, "rd:Trice64 %d, %d, %d, %d, %d, %d\n" },
- /* Trice64 ( Trice64_5 ) */ { 14637u, 64u, 5u, "rd:Trice64 %d, %d, %d, %d, %d\n" },
- /* Trice64 ( Trice64_4 ) */ { 14636u, 64u, 4u, "rd:Trice64 %d, %d, %d, %d\n" },
- /* Trice64 ( Trice64_3 ) */ { 14635u, 64u, 3u, "rd:Trice64 %d, %d, %d\n" },
- /* Trice64 ( Trice64_2 ) */ { 14634u, 64u, 2u, "rd:Trice64 %d, %d\n" },
- /* Trice64 ( Trice64_1 ) */ { 14633u, 64u, 1u, "rd:Trice64 %d\n" },
- /* Trice64_1 ( Trice64_1 ) */ { 14670u, 64u, 1u, "rd:Trice64_1 %d\n" },
- /* Trice64_10 ( Trice64_10 ) */ { 14679u, 64u, 10u, "rd:Trice64_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice64_11 ( Trice64_11 ) */ { 14680u, 64u, 11u, "rd:Trice64_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice64_12 ( Trice64_12 ) */ { 14681u, 64u, 12u, "rd:Trice64_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice64_2 ( Trice64_2 ) */ { 14671u, 64u, 2u, "rd:Trice64_2 %d, %d\n" },
- /* Trice64_3 ( Trice64_3 ) */ { 14672u, 64u, 3u, "rd:Trice64_3 %d, %d, %d\n" },
- /* Trice64_4 ( Trice64_4 ) */ { 14673u, 64u, 4u, "rd:Trice64_4 %d, %d, %d, %d\n" },
- /* Trice64_5 ( Trice64_5 ) */ { 14674u, 64u, 5u, "rd:Trice64_5 %d, %d, %d, %d, %d\n" },
- /* Trice64_6 ( Trice64_6 ) */ { 14675u, 64u, 6u, "rd:Trice64_6 %d, %d, %d, %d, %d, %d\n" },
- /* Trice64_7 ( Trice64_7 ) */ { 14676u, 64u, 7u, "rd:Trice64_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice64_8 ( Trice64_8 ) */ { 14677u, 64u, 8u, "rd:Trice64_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice64_9 ( Trice64_9 ) */ { 14678u, 64u, 9u, "rd:Trice64_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice8 ( Trice8_12 ) */ { 14200u, 8u, 12u, "rd:Trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice8 ( Trice8_11 ) */ { 14199u, 8u, 11u, "rd:Trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice8 ( Trice8_10 ) */ { 14198u, 8u, 10u, "rd:Trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice8 ( Trice8_9 ) */ { 14197u, 8u, 9u, "rd:Trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice8 ( Trice8_8 ) */ { 14196u, 8u, 8u, "rd:Trice8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice8 ( Trice8_7 ) */ { 14195u, 8u, 7u, "rd:Trice8 %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice8 ( Trice8_6 ) */ { 14194u, 8u, 6u, "rd:Trice8 %d, %d, %d, %d, %d, %d\n" },
- /* Trice8 ( Trice8_5 ) */ { 14193u, 8u, 5u, "rd:Trice8 %d, %d, %d, %d, %d\n" },
- /* Trice8 ( Trice8_4 ) */ { 14192u, 8u, 4u, "rd:Trice8 %d, %d, %d, %d\n" },
- /* Trice8 ( Trice8_3 ) */ { 14191u, 8u, 3u, "rd:Trice8 %d, %d, %d\n" },
- /* Trice8 ( Trice8_2 ) */ { 14190u, 8u, 2u, "rd:Trice8 %d, %d\n" },
- /* Trice8 ( Trice8_1 ) */ { 14189u, 8u, 1u, "rd:Trice8 %d\n" },
- /* Trice8_1 ( Trice8_1 ) */ { 14226u, 8u, 1u, "rd:Trice8_1 %d\n" },
- /* Trice8_10 ( Trice8_10 ) */ { 14235u, 8u, 10u, "rd:Trice8_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice8_11 ( Trice8_11 ) */ { 14236u, 8u, 11u, "rd:Trice8_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice8_12 ( Trice8_12 ) */ { 14237u, 8u, 12u, "rd:Trice8_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice8_2 ( Trice8_2 ) */ { 14227u, 8u, 2u, "rd:Trice8_2 %d, %d\n" },
- /* Trice8_3 ( Trice8_3 ) */ { 14228u, 8u, 3u, "rd:Trice8_3 %d, %d, %d\n" },
- /* Trice8_4 ( Trice8_4 ) */ { 14229u, 8u, 4u, "rd:Trice8_4 %d, %d, %d, %d\n" },
- /* Trice8_5 ( Trice8_5 ) */ { 14230u, 8u, 5u, "rd:Trice8_5 %d, %d, %d, %d, %d\n" },
- /* Trice8_6 ( Trice8_6 ) */ { 14231u, 8u, 6u, "rd:Trice8_6 %d, %d, %d, %d, %d, %d\n" },
- /* Trice8_7 ( Trice8_7 ) */ { 14232u, 8u, 7u, "rd:Trice8_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice8_8 ( Trice8_8 ) */ { 14233u, 8u, 8u, "rd:Trice8_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice8_9 ( Trice8_9 ) */ { 14234u, 8u, 9u, "rd:Trice8_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice ( Trice_0 ) */ { 13107u, 32u, 0u, "rd:Trice\n" },
- /* Trice_1 ( Trice32_1 ) */ { 14078u, 32u, 1u, "rd:Trice_1 %d\n" },
- /* Trice_10 ( Trice32_10 ) */ { 14087u, 32u, 10u, "rd:Trice_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice_11 ( Trice32_11 ) */ { 14088u, 32u, 11u, "rd:Trice_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice_12 ( Trice32_12 ) */ { 14089u, 32u, 12u, "rd:Trice_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice_2 ( Trice32_2 ) */ { 14079u, 32u, 2u, "rd:Trice_2 %d, %d\n" },
- /* Trice_3 ( Trice32_3 ) */ { 14080u, 32u, 3u, "rd:Trice_3 %d, %d, %d\n" },
- /* Trice_4 ( Trice32_4 ) */ { 14081u, 32u, 4u, "rd:Trice_4 %d, %d, %d, %d\n" },
- /* Trice_5 ( Trice32_5 ) */ { 14082u, 32u, 5u, "rd:Trice_5 %d, %d, %d, %d, %d\n" },
- /* Trice_6 ( Trice32_6 ) */ { 14083u, 32u, 6u, "rd:Trice_6 %d, %d, %d, %d, %d, %d\n" },
- /* Trice_7 ( Trice32_7 ) */ { 14084u, 32u, 7u, "rd:Trice_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice_8 ( Trice32_8 ) */ { 14085u, 32u, 8u, "rd:Trice_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice_9 ( Trice32_9 ) */ { 14086u, 32u, 9u, "rd:Trice_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice8 ( trice8_1 ) */ { 13354u, 8u, 1u, "rd:Use %%p to format a pointer in base 16 notation with leading 0x. (%p)\n" },
- /* trice16 ( trice16_1 ) */ { 13355u, 16u, 1u, "rd:Use %%p to format a pointer in base 16 notation with leading 0x. (%p)\n" },
- /* trice32 ( trice32_1 ) */ { 13356u, 32u, 1u, "rd:Use %%p to format a pointer in base 16 notation with leading 0x. (%p)\n" },
- /* trice64 ( trice64_1 ) */ { 13357u, 64u, 1u, "rd:Use %%p to format a pointer in base 16 notation with leading 0x. (%p)\n" },
- /* trice ( trice32_1 ) */ { 13358u, 32u, 1u, "rd:Use %%p to format a pointer in base 16 notation with leading 0x. (%p)\n" },
- /* trice ( trice32_2 ) */ { 13352u, 32u, 2u, "rd:Use %%t to format a boolean as true (%t) or false (%t).\n" },
- /* trice ( trice_0 ) */ { 14799u, 32u, 0u, "rd:e\n" },
- /* trice ( trice_0 ) */ { 14817u, 32u, 0u, "rd:e\n" },
- /* TRICE_S ( TRICE_S ) */ { 15238u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd:sizeof(%8s)" },
- /* TRICE_S ( TRICE_S ) */ { 15240u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd:sizeof(%8s)" },
- /* trice ( trice32_12 ) */ { 13105u, 32u, 12u, "rd:trice %d, %ld, %d, %lld, %d, %zd, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_11 ) */ { 13104u, 32u, 11u, "rd:trice %d, %ld, %d, %lld, %d, %zd, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_10 ) */ { 13103u, 32u, 10u, "rd:trice %d, %ld, %d, %lld, %d, %zd, %d, %d, %d, %d\n" },
- /* trice ( trice32_9 ) */ { 13102u, 32u, 9u, "rd:trice %d, %ld, %d, %lld, %d, %zd, %d, %d, %d\n" },
- /* trice ( trice32_8 ) */ { 13101u, 32u, 8u, "rd:trice %d, %ld, %d, %lld, %d, %zd, %d, %d\n" },
- /* trice ( trice32_7 ) */ { 13100u, 32u, 7u, "rd:trice %d, %ld, %d, %lld, %d, %zd, %d\n" },
- /* trice ( trice32_6 ) */ { 13099u, 32u, 6u, "rd:trice %d, %ld, %d, %lld, %d, %zd\n" },
- /* trice ( trice32_5 ) */ { 13098u, 32u, 5u, "rd:trice %d, %ld, %d, %lld, %d\n" },
- /* trice ( trice32_4 ) */ { 13097u, 32u, 4u, "rd:trice %d, %ld, %d, %lld\n" },
- /* trice ( trice32_3 ) */ { 13096u, 32u, 3u, "rd:trice %d, %ld, %d\n" },
- /* trice ( trice32_2 ) */ { 13095u, 32u, 2u, "rd:trice %d, %ld\n" },
- /* trice ( trice32_1 ) */ { 13094u, 32u, 1u, "rd:trice %d\n" },
- /* trice16 ( trice16_12 ) */ { 13161u, 16u, 12u, "rd:trice16 %X, %lX, %X, %llX, %X, %zX, %X, %X, %X, %X, %X, %X\n" },
- /* trice16 ( trice16_11 ) */ { 13160u, 16u, 11u, "rd:trice16 %X, %lX, %X, %llX, %X, %zX, %X, %X, %X, %X, %X\n" },
- /* trice16 ( trice16_10 ) */ { 13159u, 16u, 10u, "rd:trice16 %X, %lX, %X, %llX, %X, %zX, %X, %X, %X, %X\n" },
- /* trice16 ( trice16_9 ) */ { 13158u, 16u, 9u, "rd:trice16 %X, %lX, %X, %llX, %X, %zX, %X, %X, %X\n" },
- /* trice16 ( trice16_8 ) */ { 13157u, 16u, 8u, "rd:trice16 %X, %lX, %X, %llX, %X, %zX, %X, %X\n" },
- /* trice16 ( trice16_7 ) */ { 13156u, 16u, 7u, "rd:trice16 %X, %lX, %X, %llX, %X, %zX, %X\n" },
- /* trice16 ( trice16_6 ) */ { 13155u, 16u, 6u, "rd:trice16 %X, %lX, %X, %llX, %X, %zX\n" },
- /* trice16 ( trice16_5 ) */ { 13154u, 16u, 5u, "rd:trice16 %X, %lX, %X, %llX, %X\n" },
- /* trice16 ( trice16_4 ) */ { 13153u, 16u, 4u, "rd:trice16 %X, %lX, %X, %llX\n" },
- /* trice16 ( trice16_3 ) */ { 13152u, 16u, 3u, "rd:trice16 %X, %lX, %X\n" },
- /* trice16 ( trice16_2 ) */ { 13151u, 16u, 2u, "rd:trice16 %X, %lX\n" },
- /* trice16 ( trice16_1 ) */ { 13150u, 16u, 1u, "rd:trice16 %X\n" },
- /* trice16 ( trice16_12 ) */ { 14336u, 16u, 12u, "rd:trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_11 ) */ { 14335u, 16u, 11u, "rd:trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_10 ) */ { 14334u, 16u, 10u, "rd:trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_9 ) */ { 14333u, 16u, 9u, "rd:trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_8 ) */ { 14332u, 16u, 8u, "rd:trice16 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_7 ) */ { 14331u, 16u, 7u, "rd:trice16 %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_6 ) */ { 14330u, 16u, 6u, "rd:trice16 %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_5 ) */ { 14329u, 16u, 5u, "rd:trice16 %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_4 ) */ { 14328u, 16u, 4u, "rd:trice16 %d, %d, %d, %d\n" },
- /* trice16 ( trice16_3 ) */ { 14327u, 16u, 3u, "rd:trice16 %d, %d, %d\n" },
- /* trice16 ( trice16_2 ) */ { 14326u, 16u, 2u, "rd:trice16 %d, %d\n" },
- /* trice16 ( trice16_1 ) */ { 14325u, 16u, 1u, "rd:trice16 %d\n" },
- /* trice16 ( trice16_12 ) */ { 13146u, 16u, 12u, "rd:trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\n" },
- /* trice16 ( trice16_11 ) */ { 13145u, 16u, 11u, "rd:trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\n" },
- /* trice16 ( trice16_10 ) */ { 13144u, 16u, 10u, "rd:trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\n" },
- /* trice16 ( trice16_9 ) */ { 13143u, 16u, 9u, "rd:trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p\n" },
- /* trice16 ( trice16_8 ) */ { 13142u, 16u, 8u, "rd:trice16 %p, %p, %p, %p, %p, %p, %p, %p\n" },
- /* trice16 ( trice16_7 ) */ { 13141u, 16u, 7u, "rd:trice16 %p, %p, %p, %p, %p, %p, %p\n" },
- /* trice16 ( trice16_6 ) */ { 13140u, 16u, 6u, "rd:trice16 %p, %p, %p, %p, %p, %p\n" },
- /* trice16 ( trice16_5 ) */ { 13139u, 16u, 5u, "rd:trice16 %p, %p, %p, %p, %p\n" },
- /* trice16 ( trice16_4 ) */ { 13138u, 16u, 4u, "rd:trice16 %p, %p, %p, %p\n" },
- /* trice16 ( trice16_3 ) */ { 13137u, 16u, 3u, "rd:trice16 %p, %p, %p\n" },
- /* trice16 ( trice16_2 ) */ { 13136u, 16u, 2u, "rd:trice16 %p, %p\n" },
- /* trice16 ( trice16_1 ) */ { 13135u, 16u, 1u, "rd:trice16 %p\n" },
- /* trice16_1 ( trice16_1 ) */ { 14362u, 16u, 1u, "rd:trice16_1 %d\n" },
- /* trice16_10 ( trice16_10 ) */ { 14371u, 16u, 10u, "rd:trice16_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16_11 ( trice16_11 ) */ { 14372u, 16u, 11u, "rd:trice16_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16_12 ( trice16_12 ) */ { 14373u, 16u, 12u, "rd:trice16_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16_2 ( trice16_2 ) */ { 14363u, 16u, 2u, "rd:trice16_2 %d, %d\n" },
- /* trice16_3 ( trice16_3 ) */ { 14364u, 16u, 3u, "rd:trice16_3 %d, %d, %d\n" },
- /* trice16_4 ( trice16_4 ) */ { 14365u, 16u, 4u, "rd:trice16_4 %d, %d, %d, %d\n" },
- /* trice16_5 ( trice16_5 ) */ { 14366u, 16u, 5u, "rd:trice16_5 %d, %d, %d, %d, %d\n" },
- /* trice16_6 ( trice16_6 ) */ { 14367u, 16u, 6u, "rd:trice16_6 %d, %d, %d, %d, %d, %d\n" },
- /* trice16_7 ( trice16_7 ) */ { 14368u, 16u, 7u, "rd:trice16_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16_8 ( trice16_8 ) */ { 14369u, 16u, 8u, "rd:trice16_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16_9 ( trice16_9 ) */ { 14370u, 16u, 9u, "rd:trice16_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice32 ( trice32_12 ) */ { 13163u, 32u, 12u, "rd:trice32 %X, %lX, %X, %llX, %X, %zX, %X, %X, %X, %X, %X, %X\n" },
- /* trice32 ( trice32_12 ) */ { 14484u, 32u, 12u, "rd:trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice32 ( trice32_11 ) */ { 14483u, 32u, 11u, "rd:trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice32 ( trice32_10 ) */ { 14482u, 32u, 10u, "rd:trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice32 ( trice32_9 ) */ { 14481u, 32u, 9u, "rd:trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice32 ( trice32_8 ) */ { 14480u, 32u, 8u, "rd:trice32 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice32 ( trice32_7 ) */ { 14479u, 32u, 7u, "rd:trice32 %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice32 ( trice32_6 ) */ { 14478u, 32u, 6u, "rd:trice32 %d, %d, %d, %d, %d, %d\n" },
- /* trice32 ( trice32_5 ) */ { 14477u, 32u, 5u, "rd:trice32 %d, %d, %d, %d, %d\n" },
- /* trice32 ( trice32_4 ) */ { 14476u, 32u, 4u, "rd:trice32 %d, %d, %d, %d\n" },
- /* trice32 ( trice32_3 ) */ { 14475u, 32u, 3u, "rd:trice32 %d, %d, %d\n" },
- /* trice32 ( trice32_2 ) */ { 14474u, 32u, 2u, "rd:trice32 %d, %d\n" },
- /* trice32 ( trice32_1 ) */ { 14473u, 32u, 1u, "rd:trice32 %d\n" },
- /* trice32 ( trice32_12 ) */ { 13148u, 32u, 12u, "rd:trice32 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\n" },
- /* trice32_1 ( trice32_1 ) */ { 14510u, 32u, 1u, "rd:trice32_1 %d\n" },
- /* trice32_1 ( trice32_1 ) */ { 13218u, 32u, 1u, "rd:trice32_1 %d\n" },
- /* trice32_10 ( trice32_10 ) */ { 14519u, 32u, 10u, "rd:trice32_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice32_11 ( trice32_11 ) */ { 14520u, 32u, 11u, "rd:trice32_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice32_12 ( trice32_12 ) */ { 14521u, 32u, 12u, "rd:trice32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice32_2 ( trice32_2 ) */ { 14511u, 32u, 2u, "rd:trice32_2 %d, %d\n" },
- /* trice32_2 ( trice32_2 ) */ { 13220u, 32u, 2u, "rd:trice32_2 %d,%d\n" },
- /* trice32_3 ( trice32_3 ) */ { 14512u, 32u, 3u, "rd:trice32_3 %d, %d, %d\n" },
- /* trice32_4 ( trice32_4 ) */ { 14513u, 32u, 4u, "rd:trice32_4 %d, %d, %d, %d\n" },
- /* trice32_5 ( trice32_5 ) */ { 14514u, 32u, 5u, "rd:trice32_5 %d, %d, %d, %d, %d\n" },
- /* trice32_6 ( trice32_6 ) */ { 14515u, 32u, 6u, "rd:trice32_6 %d, %d, %d, %d, %d, %d\n" },
- /* trice32_7 ( trice32_7 ) */ { 14516u, 32u, 7u, "rd:trice32_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice32_8 ( trice32_8 ) */ { 14517u, 32u, 8u, "rd:trice32_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice32_9 ( trice32_9 ) */ { 14518u, 32u, 9u, "rd:trice32_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice64 ( trice64_12 ) */ { 14632u, 64u, 12u, "rd:trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice64 ( trice64_11 ) */ { 14631u, 64u, 11u, "rd:trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice64 ( trice64_10 ) */ { 14630u, 64u, 10u, "rd:trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice64 ( trice64_9 ) */ { 14629u, 64u, 9u, "rd:trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice64 ( trice64_8 ) */ { 14628u, 64u, 8u, "rd:trice64 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice64 ( trice64_7 ) */ { 14627u, 64u, 7u, "rd:trice64 %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice64 ( trice64_6 ) */ { 14626u, 64u, 6u, "rd:trice64 %d, %d, %d, %d, %d, %d\n" },
- /* trice64 ( trice64_5 ) */ { 14625u, 64u, 5u, "rd:trice64 %d, %d, %d, %d, %d\n" },
- /* trice64 ( trice64_4 ) */ { 14624u, 64u, 4u, "rd:trice64 %d, %d, %d, %d\n" },
- /* trice64 ( trice64_3 ) */ { 14623u, 64u, 3u, "rd:trice64 %d, %d, %d\n" },
- /* trice64 ( trice64_2 ) */ { 13203u, 64u, 2u, "rd:trice64 %d, %d\n" },
- /* trice64 ( trice64_2 ) */ { 13214u, 64u, 2u, "rd:trice64 %d, %d\n" },
- /* trice64 ( trice64_2 ) */ { 13217u, 64u, 2u, "rd:trice64 %d, %d\n" },
- /* trice64 ( trice64_2 ) */ { 14622u, 64u, 2u, "rd:trice64 %d, %d\n" },
- /* trice64 ( trice64_1 ) */ { 14621u, 64u, 1u, "rd:trice64 %d\n" },
- /* trice64_1 ( trice64_1 ) */ { 14658u, 64u, 1u, "rd:trice64_1 %d\n" },
- /* trice64_1 ( trice64_1 ) */ { 13219u, 64u, 1u, "rd:trice64_1 %d\n" },
- /* trice64_10 ( trice64_10 ) */ { 14667u, 64u, 10u, "rd:trice64_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice64_11 ( trice64_11 ) */ { 14668u, 64u, 11u, "rd:trice64_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice64_12 ( trice64_12 ) */ { 14669u, 64u, 12u, "rd:trice64_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice64_2 ( trice64_2 ) */ { 14659u, 64u, 2u, "rd:trice64_2 %d, %d\n" },
- /* trice64_2 ( trice64_2 ) */ { 13221u, 64u, 2u, "rd:trice64_2 %d,%d\n" },
- /* trice64_3 ( trice64_3 ) */ { 14660u, 64u, 3u, "rd:trice64_3 %d, %d, %d\n" },
- /* trice64_4 ( trice64_4 ) */ { 14661u, 64u, 4u, "rd:trice64_4 %d, %d, %d, %d\n" },
- /* trice64_5 ( trice64_5 ) */ { 14662u, 64u, 5u, "rd:trice64_5 %d, %d, %d, %d, %d\n" },
- /* trice64_6 ( trice64_6 ) */ { 14663u, 64u, 6u, "rd:trice64_6 %d, %d, %d, %d, %d, %d\n" },
- /* trice64_7 ( trice64_7 ) */ { 14664u, 64u, 7u, "rd:trice64_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice64_8 ( trice64_8 ) */ { 14665u, 64u, 8u, "rd:trice64_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice64_9 ( trice64_9 ) */ { 14666u, 64u, 9u, "rd:trice64_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice8 ( trice8_12 ) */ { 13162u, 8u, 12u, "rd:trice8 %X, %lX, %X, %llX, %X, %zX, %X, %X, %X, %X, %X, %X\n" },
- /* trice8 ( trice8_12 ) */ { 13147u, 8u, 12u, "rd:trice8 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\n" },
- /* trice8 ( trice8_12 ) */ { 14188u, 8u, 12u, "rd:trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice8 ( trice8_11 ) */ { 14187u, 8u, 11u, "rd:trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice8 ( trice8_10 ) */ { 14186u, 8u, 10u, "rd:trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice8 ( trice8_9 ) */ { 14185u, 8u, 9u, "rd:trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice8 ( trice8_8 ) */ { 14184u, 8u, 8u, "rd:trice8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice8 ( trice8_7 ) */ { 14183u, 8u, 7u, "rd:trice8 %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice8 ( trice8_6 ) */ { 14182u, 8u, 6u, "rd:trice8 %d, %d, %d, %d, %d, %d\n" },
- /* trice8 ( trice8_5 ) */ { 14181u, 8u, 5u, "rd:trice8 %d, %d, %d, %d, %d\n" },
- /* trice8 ( trice8_4 ) */ { 14180u, 8u, 4u, "rd:trice8 %d, %d, %d, %d\n" },
- /* trice8 ( trice8_3 ) */ { 14179u, 8u, 3u, "rd:trice8 %d, %d, %d\n" },
- /* trice8 ( trice8_2 ) */ { 14178u, 8u, 2u, "rd:trice8 %d, %d\n" },
- /* trice8 ( trice8_1 ) */ { 14177u, 8u, 1u, "rd:trice8 %d\n" },
- /* trice8_1 ( trice8_1 ) */ { 14214u, 8u, 1u, "rd:trice8_1 %d\n" },
- /* trice8_10 ( trice8_10 ) */ { 14223u, 8u, 10u, "rd:trice8_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice8_11 ( trice8_11 ) */ { 14224u, 8u, 11u, "rd:trice8_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice8_12 ( trice8_12 ) */ { 14225u, 8u, 12u, "rd:trice8_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice8_2 ( trice8_2 ) */ { 14215u, 8u, 2u, "rd:trice8_2 %d, %d\n" },
- /* trice8_3 ( trice8_3 ) */ { 14216u, 8u, 3u, "rd:trice8_3 %d, %d, %d\n" },
- /* trice8_4 ( trice8_4 ) */ { 14217u, 8u, 4u, "rd:trice8_4 %d, %d, %d, %d\n" },
- /* trice8_5 ( trice8_5 ) */ { 14218u, 8u, 5u, "rd:trice8_5 %d, %d, %d, %d, %d\n" },
- /* trice8_6 ( trice8_6 ) */ { 14219u, 8u, 6u, "rd:trice8_6 %d, %d, %d, %d, %d, %d\n" },
- /* trice8_7 ( trice8_7 ) */ { 14220u, 8u, 7u, "rd:trice8_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice8_8 ( trice8_8 ) */ { 14221u, 8u, 8u, "rd:trice8_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice8_9 ( trice8_9 ) */ { 14222u, 8u, 9u, "rd:trice8_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice_0 ) */ { 13093u, 32u, 0u, "rd:trice\n" },
- /* trice_1 ( trice32_1 ) */ { 14066u, 32u, 1u, "rd:trice_1 %d\n" },
- /* trice_10 ( trice32_10 ) */ { 14075u, 32u, 10u, "rd:trice_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice_11 ( trice32_11 ) */ { 14076u, 32u, 11u, "rd:trice_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice_12 ( trice32_12 ) */ { 14077u, 32u, 12u, "rd:trice_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice_2 ( trice32_2 ) */ { 14067u, 32u, 2u, "rd:trice_2 %d, %d\n" },
- /* trice_3 ( trice32_3 ) */ { 14068u, 32u, 3u, "rd:trice_3 %d, %d, %d\n" },
- /* trice_4 ( trice32_4 ) */ { 14069u, 32u, 4u, "rd:trice_4 %d, %d, %d, %d\n" },
- /* trice_5 ( trice32_5 ) */ { 14070u, 32u, 5u, "rd:trice_5 %d, %d, %d, %d, %d\n" },
- /* trice_6 ( trice32_6 ) */ { 14071u, 32u, 6u, "rd:trice_6 %d, %d, %d, %d, %d, %d\n" },
- /* trice_7 ( trice32_7 ) */ { 14072u, 32u, 7u, "rd:trice_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice_8 ( trice32_8 ) */ { 14073u, 32u, 8u, "rd:trice_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice_9 ( trice32_9 ) */ { 14074u, 32u, 9u, "rd:trice_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE ( TRICE_0 ) */ { 13726u, 32u, 0u, "read:black+i:yellow+h\n" },
- /* trice ( trice_0 ) */ { 13776u, 32u, 0u, "read:black+i:yellow+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13826u, 32u, 0u, "read:black+i:yellow+h\n" },
- /* Trice ( Trice_0 ) */ { 13876u, 32u, 0u, "read:black+i:yellow+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13926u, 32u, 0u, "read:black+i:yellow+h\n" },
- /* TRice ( TRice_0 ) */ { 13976u, 32u, 0u, "read:black+i:yellow+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13728u, 32u, 0u, "receive:black+h:black\n" },
- /* trice ( trice_0 ) */ { 13778u, 32u, 0u, "receive:black+h:black\n" },
- /* TRICE ( TRICE_0 ) */ { 13828u, 32u, 0u, "receive:black+h:black\n" },
- /* Trice ( Trice_0 ) */ { 13878u, 32u, 0u, "receive:black+h:black\n" },
- /* TRICE ( TRICE_0 ) */ { 13928u, 32u, 0u, "receive:black+h:black\n" },
- /* TRice ( TRice_0 ) */ { 13978u, 32u, 0u, "receive:black+h:black\n" },
- /* TRice32F ( TRice32F ) */ { 13305u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rpc:FunctionNameYb" },
- /* TRice32F ( TRice32F ) */ { 15301u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rpc:FunctionNameYb" },
- /* TRice32C ( TRice32C ) */ { 15644u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rpc:FunctionNameYb" },
- /* Trice32F ( Trice32F ) */ { 13306u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rpc:FunctionNameYc" },
- /* Trice32F ( Trice32F ) */ { 15302u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rpc:FunctionNameYc" },
- /* Trice32C ( Trice32C ) */ { 15496u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rpc:FunctionNameYc" },
- /* TRICE_S ( TRICE_S ) */ { 13001u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rx:received command:%s\n" },
- /* TRICE_S ( TRICE_S ) */ { 13015u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rx:received command:%s\n" },
- /* TRice ( TRice32_1 ) */ { 15383u, 32u, 1u, "sig:%.1f s\n" },
- /* TRice64 ( TRice64_1 ) */ { 15671u, 64u, 1u, "sig:%.1f s\n" },
- /* TRice64 ( TRice64_1 ) */ { 15711u, 64u, 1u, "sig:%.1f s\n" },
- /* trice ( trice32_1 ) */ { 15255u, 32u, 1u, "sig:%3d:" },
- /* TRICE_S ( TRICE_S ) */ { 13389u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:%s\n" },
- /* TRICE_S ( TRICE_S ) */ { 13391u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:%s\n" },
- /* TRICE_S ( TRICE_S ) */ { 13393u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:%s\n" },
- /* TRICE_S ( TRICE_S ) */ { 13395u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:%s\n" },
- /* TRICE_S ( TRICE_S ) */ { 13397u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:%s\n" },
- /* trice ( trice_0 ) */ { 13351u, 32u, 0u, "sig:Boolean (true/false)\n" },
- /* trice ( trice_0 ) */ { 13346u, 32u, 0u, "sig:Character (quoted, Unicode)\n" },
- /* TRICE ( TRICE_0 ) */ { 14694u, 32u, 0u, "sig:Colors and ticks\n" },
- /* trice ( trice_0 ) */ { 13366u, 32u, 0u, "sig:Double (indent, precision, scientific notation)\n" },
- /* trice ( trice_0 ) */ { 13360u, 32u, 0u, "sig:Float (indent, precision, scientific notation)\n" },
- /* TRice ( TRice_0 ) */ { 13334u, 32u, 0u, "sig:Integer (indent, base, sign) - see https://yourbasic.org/golang/fmt-printf-reference-cheat-sheet/\n" },
- /* TRICE ( TRICE_0 ) */ { 14767u, 32u, 0u, "sig:Legacy TRICE16-64\n" },
- /* TRICE ( TRICE_0 ) */ { 14733u, 32u, 0u, "sig:Legacy TRICE8\n" },
- /* trice ( trice_0 ) */ { 13353u, 32u, 0u, "sig:Pointer (hex)\n" },
- /* trice ( trice_0 ) */ { 13387u, 32u, 0u, "sig:Runtime generated strings\n" },
- /* trice ( trice_0 ) */ { 13177u, 32u, 0u, "sig:Some time measurements\n" },
- /* trice ( trice_0 ) */ { 13372u, 32u, 0u, "sig:String or byte slice (quote, indent, hex)\n" },
- /* trice ( trice_0 ) */ { 15102u, 32u, 0u, "sig:TRICE with 1 to 12 values\n" },
- /* TRice ( TRice_0 ) */ { 15141u, 32u, 0u, "sig:TRICE16 with 1 to 12 hex\n" },
- /* trice ( trice32_1 ) */ { 14250u, 32u, 1u, "sig:TRICE16 with 1 to 12 values (line %d)\n" },
- /* trice ( trice_0 ) */ { 14847u, 32u, 0u, "sig:TRICE16 with variable param count 1 to 12\n" },
- /* trice ( trice32_1 ) */ { 14287u, 32u, 1u, "sig:TRICE16_n with 1 to 12 values (line %d)\n" },
- /* trice ( trice32_1 ) */ { 14398u, 32u, 1u, "sig:TRICE32 with 1 to 12 values (line %d)\n" },
- /* trice ( trice_0 ) */ { 14874u, 32u, 0u, "sig:TRICE32 with variable param count 1 to 12\n" },
- /* trice ( trice32_1 ) */ { 14546u, 32u, 1u, "sig:TRICE64 with 1 to 12 values (line %d)\n" },
- /* trice ( trice_0 ) */ { 14902u, 32u, 0u, "sig:TRICE64 with variable param count 1 to 12\n" },
- /* trice ( trice_0 ) */ { 13991u, 32u, 0u, "sig:TRICE8 with 1 to 12 values\n" },
- /* trice ( trice_0 ) */ { 14102u, 32u, 0u, "sig:TRICE8 with 1 to 12 values\n" },
- /* trice ( trice_0 ) */ { 14819u, 32u, 0u, "sig:TRICE8 with variable param count 1 to 12\n" },
- /* trice ( trice_0 ) */ { 14139u, 32u, 0u, "sig:TRICE8_n with 1 to 12 values\n" },
- /* TRICE_N ( TRICE_N ) */ { 13319u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TRICE_N=%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 13321u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TRICE_N=%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 13323u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TRICE_N=%s\n" },
- /* TRICE_S ( TRICE_S ) */ { 13318u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TRICE_S=%s\n" },
- /* TRICE_S ( TRICE_S ) */ { 13320u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TRICE_S=%s\n" },
- /* TRICE_S ( TRICE_S ) */ { 13322u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TRICE_S=%s\n" },
- /* trice ( trice_0 ) */ { 14028u, 32u, 0u, "sig:TRICE_n with 1 to 12 values\n" },
- /* trice ( trice_0 ) */ { 15115u, 32u, 0u, "sig:TRICE_n with 1 to 12 values\n" },
- /* TRice ( TRice_0 ) */ { 13120u, 32u, 0u, "sig:TRice with 32-bit stamp and with 0 to 12 values (common use cases)\n" },
- /* TRiceN ( TRiceN ) */ { 13329u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TRiceN=%s\n" },
- /* TRiceS ( TRiceS ) */ { 13328u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TRiceS=%s\n" },
- /* TRICE ( TRICE_0 ) */ { 14699u, 32u, 0u, "sig:This ASSERT error is just a demo and no real error:\n" },
- /* Trice ( Trice_0 ) */ { 13106u, 32u, 0u, "sig:Trice with 16-bit stamp and with 0 to 12 values (common use cases)\n" },
- /* TRice ( TRice_0 ) */ { 15128u, 32u, 0u, "sig:Trice16 with 1 to 12 pointer\n" },
- /* TriceN ( TriceN ) */ { 13327u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TriceN=%s\n" },
- /* TriceS ( TriceS ) */ { 13326u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TriceS=%s\n" },
- /* TRICE ( TRICE_0 ) */ { 14714u, 32u, 0u, "sig:Various ranges and formats\n" },
- /* TRICE_N ( TRICE_N ) */ { 13266u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:With TRICE_N:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 13268u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:With TRICE_N:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 13270u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:With TRICE_N:%s\n" },
- /* TRiceN ( TRiceN ) */ { 13264u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:With TRiceN:%s\n" },
- /* TriceN ( TriceN ) */ { 13262u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:With TriceN:%s\n" },
- /* triceN ( triceN ) */ { 13260u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:With triceN:%s\n" },
- /* trice ( trice_0 ) */ { 14794u, 32u, 0u, "sig:colored single letters and several TRICE macros in one line\n" },
- /* trice ( trice_0 ) */ { 13082u, 32u, 0u, "sig:length modifier coverage for supported combinations\n" },
- /* trice ( trice_0 ) */ { 13092u, 32u, 0u, "sig:trice without stamp and with 0 to 12 values (most common use cases)\n" },
- /* trice ( trice_0 ) */ { 13149u, 32u, 0u, "sig:trice16 with 1 to 12 hex\n" },
- /* trice ( trice_0 ) */ { 13134u, 32u, 0u, "sig:trice16 with 1 to 12 pointer\n" },
- /* trice ( trice32_1 ) */ { 14324u, 32u, 1u, "sig:trice16 with 1 to 12 values (line %d)\n" },
- /* trice ( trice32_1 ) */ { 14361u, 32u, 1u, "sig:trice16_n with 1 to 12 values (line %d)\n" },
- /* trice ( trice32_1 ) */ { 14472u, 32u, 1u, "sig:trice32 with 1 to 12 values (line %d)\n" },
- /* trice ( trice32_1 ) */ { 14620u, 32u, 1u, "sig:trice64 with 1 to 12 values (line %d)\n" },
- /* trice ( trice_0 ) */ { 14176u, 32u, 0u, "sig:trice8 with 1 to 12 values\n" },
- /* TRICE ( TRICE_0 ) */ { 14213u, 32u, 0u, "sig:trice8_n with 1 to 12 values\n" },
- /* triceN ( triceN ) */ { 13325u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:triceN=%s\n" },
- /* triceS ( triceS ) */ { 13324u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:triceS=%s\n" },
- /* TRICE ( TRICE_0 ) */ { 14065u, 32u, 0u, "sig:trice_n with 1 to 12 values\n" },
- /* TRICE ( TRICE_0 ) */ { 13732u, 32u, 0u, "signal:118+i\n" },
- /* trice ( trice_0 ) */ { 13782u, 32u, 0u, "signal:118+i\n" },
- /* TRICE ( TRICE_0 ) */ { 13832u, 32u, 0u, "signal:118+i\n" },
- /* Trice ( Trice_0 ) */ { 13882u, 32u, 0u, "signal:118+i\n" },
- /* TRICE ( TRICE_0 ) */ { 13932u, 32u, 0u, "signal:118+i\n" },
- /* TRice ( TRice_0 ) */ { 13982u, 32u, 0u, "signal:118+i\n" },
- /* trice ( trice32_1 ) */ { 14435u, 32u, 1u, "signal:TRICE32_n with 1 to 12 values (line %d)\n" },
- /* trice ( trice32_1 ) */ { 14583u, 32u, 1u, "signal:TRICE64_n with 1 to 12 values (line %d)\n" },
- /* trice ( trice32_1 ) */ { 14509u, 32u, 1u, "signal:trice32_n with 1 to 12 values (line %d)\n" },
- /* trice ( trice32_1 ) */ { 14657u, 32u, 1u, "signal:trice64_n with 1 to 12 values (line %d)\n" },
- /* trice ( trice_0 ) */ { 14802u, 32u, 0u, "t:H" },
- /* TRICE ( TRICE_0 ) */ { 13733u, 32u, 0u, "test:yellow+h:black\n" },
- /* trice ( trice_0 ) */ { 13783u, 32u, 0u, "test:yellow+h:black\n" },
- /* TRICE ( TRICE_0 ) */ { 13833u, 32u, 0u, "test:yellow+h:black\n" },
- /* Trice ( Trice_0 ) */ { 13883u, 32u, 0u, "test:yellow+h:black\n" },
- /* TRICE ( TRICE_0 ) */ { 13933u, 32u, 0u, "test:yellow+h:black\n" },
- /* TRice ( TRice_0 ) */ { 13983u, 32u, 0u, "test:yellow+h:black\n" },
- /* trice16_1 ( trice16_1 ) */ { 13171u, 16u, 1u, "tim: post TriceDecryption SysTick=%d\n" },
- /* trice32 ( trice32_1 ) */ { 13168u, 32u, 1u, "tim: post TriceEncryption SysTick=%d\n" },
- /* trice16_1 ( trice16_1 ) */ { 13170u, 16u, 1u, "tim: pre TriceDecryption SysTick=%d\n" },
- /* trice32 ( trice32_1 ) */ { 13167u, 32u, 1u, "tim: pre TriceEncryption SysTick=%d\n" },
- /* TRICE ( TRICE_0 ) */ { 13205u, 32u, 0u, "tim:TRICE START time message\n" },
- /* TRICE ( TRICE_0 ) */ { 13207u, 32u, 0u, "tim:TRICE START time message\n" },
- /* TRICE ( TRICE_0 ) */ { 13209u, 32u, 0u, "tim:TRICE START time message\n" },
- /* TRICE ( TRICE_0 ) */ { 13206u, 32u, 0u, "tim:TRICE STOP time message\n" },
- /* TRICE ( TRICE_0 ) */ { 13208u, 32u, 0u, "tim:TRICE STOP time message\n" },
- /* TRICE ( TRICE_0 ) */ { 13211u, 32u, 0u, "tim:TRICE STOP time message\n" },
- /* trice ( trice_0 ) */ { 13212u, 32u, 0u, "tim:trice --------------------------------------------------\n" },
- /* trice ( trice_0 ) */ { 13213u, 32u, 0u, "tim:trice --------------------------------------------------\n" },
- /* trice ( trice_0 ) */ { 13215u, 32u, 0u, "tim:trice --------------------------------------------------\n" },
- /* trice ( trice_0 ) */ { 13216u, 32u, 0u, "tim:trice --------------------------------------------------\n" },
- /* trice ( trice_0 ) */ { 13198u, 32u, 0u, "tim:trice START time message\n" },
- /* trice ( trice_0 ) */ { 13200u, 32u, 0u, "tim:trice START time message\n" },
- /* trice ( trice_0 ) */ { 13202u, 32u, 0u, "tim:trice START time message\n" },
- /* trice ( trice_0 ) */ { 13199u, 32u, 0u, "tim:trice STOP time message\n" },
- /* trice ( trice_0 ) */ { 13201u, 32u, 0u, "tim:trice STOP time message\n" },
- /* trice ( trice_0 ) */ { 13204u, 32u, 0u, "tim:trice STOP time message\n" },
- /* TRice ( TRice32_1 ) */ { 15352u, 32u, 1u, "time:%.1f s\n" },
- /* TRICE ( TRICE32_1 ) */ { 14713u, 32u, 1u, "time:TRICE32_1 message, SysTick is %6u\n" },
- /* TRICE ( TRICE_0 ) */ { 13724u, 32u, 0u, "time:blue+i:blue+h\n" },
- /* trice ( trice_0 ) */ { 13774u, 32u, 0u, "time:blue+i:blue+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13824u, 32u, 0u, "time:blue+i:blue+h\n" },
- /* Trice ( Trice_0 ) */ { 13874u, 32u, 0u, "time:blue+i:blue+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13924u, 32u, 0u, "time:blue+i:blue+h\n" },
- /* TRice ( TRice_0 ) */ { 13974u, 32u, 0u, "time:blue+i:blue+h\n" },
- /* trice ( trice_0 ) */ { 14803u, 32u, 0u, "time:i" },
- /* TRICE ( TRICE_0 ) */ { 13723u, 32u, 0u, "trace:default+i:default+h\n" },
- /* trice ( trice_0 ) */ { 13773u, 32u, 0u, "trace:default+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13823u, 32u, 0u, "trace:default+i:default+h\n" },
- /* Trice ( Trice_0 ) */ { 13873u, 32u, 0u, "trace:default+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13923u, 32u, 0u, "trace:default+i:default+h\n" },
- /* TRice ( TRice_0 ) */ { 13973u, 32u, 0u, "trace:default+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13729u, 32u, 0u, "transmit:black:black+h\n" },
- /* trice ( trice_0 ) */ { 13779u, 32u, 0u, "transmit:black:black+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13829u, 32u, 0u, "transmit:black:black+h\n" },
- /* Trice ( Trice_0 ) */ { 13879u, 32u, 0u, "transmit:black:black+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13929u, 32u, 0u, "transmit:black:black+h\n" },
- /* TRice ( TRice_0 ) */ { 13979u, 32u, 0u, "transmit:black:black+h\n" },
- /* TRICE16 ( TRICE16_4 ) */ { 14725u, 16u, 4u, "tst:TRICE16 %%6d -> %6d %6d %6d %6d\n" },
- /* TRICE16 ( TRICE16_4 ) */ { 14726u, 16u, 4u, "tst:TRICE16 %%7o -> %7o %7o %7o %7o\n" },
- /* TRICE16 ( TRICE16_4 ) */ { 14724u, 16u, 4u, "tst:TRICE16 %%05x -> %05x %05x %05x %05x\n" },
- /* TRICE16 ( TRICE16_12 ) */ { 14859u, 16u, 12u, "tst:TRICE16 %d %d %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE16 ( TRICE16_11 ) */ { 14858u, 16u, 11u, "tst:TRICE16 %d %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE16 ( TRICE16_10 ) */ { 14857u, 16u, 10u, "tst:TRICE16 %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE16 ( TRICE16_9 ) */ { 14856u, 16u, 9u, "tst:TRICE16 %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE16 ( TRICE16_8 ) */ { 14855u, 16u, 8u, "tst:TRICE16 %d %d %d %d %d %d %d %d\n" },
- /* TRICE16 ( TRICE16_7 ) */ { 14854u, 16u, 7u, "tst:TRICE16 %d %d %d %d %d %d %d\n" },
- /* TRICE16 ( TRICE16_6 ) */ { 14853u, 16u, 6u, "tst:TRICE16 %d %d %d %d %d %d\n" },
- /* TRICE16 ( TRICE16_5 ) */ { 14852u, 16u, 5u, "tst:TRICE16 %d %d %d %d %d\n" },
- /* TRICE16 ( TRICE16_4 ) */ { 14851u, 16u, 4u, "tst:TRICE16 %d %d %d %d\n" },
- /* TRICE16 ( TRICE16_3 ) */ { 14850u, 16u, 3u, "tst:TRICE16 %d %d %d\n" },
- /* TRICE16 ( TRICE16_2 ) */ { 14849u, 16u, 2u, "tst:TRICE16 %d %d\n" },
- /* TRICE16 ( TRICE16_1 ) */ { 14848u, 16u, 1u, "tst:TRICE16 %d\n" },
- /* TRICE16 ( TRICE16_9 ) */ { 14860u, 16u, 9u, "tst:TRICE16 %t %b %x %X %d %u %o %O %p\n" },
- /* TRICE16_9 ( TRICE16_9 ) */ { 14873u, 16u, 9u, "tst:TRICE16 %t %b %x %X %d %u %o %O %p\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 14861u, 16u, 1u, "tst:TRICE16_1 %d\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 14768u, 16u, 1u, "tst:TRICE16_1 %d\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 14782u, 16u, 1u, "tst:TRICE16_1 %u\n" },
- /* TRICE16_10 ( TRICE16_10 ) */ { 14870u, 16u, 10u, "tst:TRICE16_10 %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE16_11 ( TRICE16_11 ) */ { 14871u, 16u, 11u, "tst:TRICE16_11 %d %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE16_12 ( TRICE16_12 ) */ { 14872u, 16u, 12u, "tst:TRICE16_12 %d %d %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE16_2 ( TRICE16_2 ) */ { 14862u, 16u, 2u, "tst:TRICE16_2 %d %d\n" },
- /* TRICE16_2 ( TRICE16_2 ) */ { 14769u, 16u, 2u, "tst:TRICE16_2 %d %d\n" },
- /* TRICE16_2 ( TRICE16_2 ) */ { 14783u, 16u, 2u, "tst:TRICE16_2 %u %u\n" },
- /* TRICE16_3 ( TRICE16_3 ) */ { 14863u, 16u, 3u, "tst:TRICE16_3 %d %d %d\n" },
- /* TRICE16_3 ( TRICE16_3 ) */ { 14770u, 16u, 3u, "tst:TRICE16_3 %d %d %d\n" },
- /* TRICE16_3 ( TRICE16_3 ) */ { 14784u, 16u, 3u, "tst:TRICE16_3 %u %u %u\n" },
- /* TRICE16_4 ( TRICE16_4 ) */ { 14864u, 16u, 4u, "tst:TRICE16_4 %d %d %d %d\n" },
- /* TRICE16_4 ( TRICE16_4 ) */ { 14771u, 16u, 4u, "tst:TRICE16_4 %d %d %d %d\n" },
- /* TRICE16_4 ( TRICE16_4 ) */ { 14785u, 16u, 4u, "tst:TRICE16_4 %u %u %u %u\n" },
- /* TRICE16_5 ( TRICE16_5 ) */ { 14865u, 16u, 5u, "tst:TRICE16_5 %d %d %d %d %d\n" },
- /* TRICE16_6 ( TRICE16_6 ) */ { 14866u, 16u, 6u, "tst:TRICE16_6 %d %d %d %d %d %d\n" },
- /* TRICE16_7 ( TRICE16_7 ) */ { 14867u, 16u, 7u, "tst:TRICE16_7 %d %d %d %d %d %d %d\n" },
- /* TRICE16_8 ( TRICE16_8 ) */ { 14868u, 16u, 8u, "tst:TRICE16_8 %d %d %d %d %d %d %d %d\n" },
- /* TRICE16_9 ( TRICE16_9 ) */ { 14869u, 16u, 9u, "tst:TRICE16_9 %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE32 ( TRICE32_12 ) */ { 14900u, 32u, 12u, "tst:TRICE32 %t %b %x %X %d %u %o %O %p %e %f %g\n" },
- /* TRICE32 ( TRICE32_4 ) */ { 14727u, 32u, 4u, "tst:TRICE32 %%09x -> %09x %09x %09x %09x\n" },
- /* TRICE32 ( TRICE32_4 ) */ { 14728u, 32u, 4u, "tst:TRICE32 %%10d -> %10d %10d %10d %10x\n" },
- /* TRICE32 ( TRICE32_12 ) */ { 14886u, 32u, 12u, "tst:TRICE32 %d %d %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE32 ( TRICE32_11 ) */ { 14885u, 32u, 11u, "tst:TRICE32 %d %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE32 ( TRICE32_10 ) */ { 14884u, 32u, 10u, "tst:TRICE32 %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE32 ( TRICE32_9 ) */ { 14883u, 32u, 9u, "tst:TRICE32 %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE32 ( TRICE32_8 ) */ { 14882u, 32u, 8u, "tst:TRICE32 %d %d %d %d %d %d %d %d\n" },
- /* TRICE32 ( TRICE32_7 ) */ { 14881u, 32u, 7u, "tst:TRICE32 %d %d %d %d %d %d %d\n" },
- /* TRICE32 ( TRICE32_6 ) */ { 14880u, 32u, 6u, "tst:TRICE32 %d %d %d %d %d %d\n" },
- /* TRICE32 ( TRICE32_5 ) */ { 14879u, 32u, 5u, "tst:TRICE32 %d %d %d %d %d\n" },
- /* TRICE32 ( TRICE32_4 ) */ { 14878u, 32u, 4u, "tst:TRICE32 %d %d %d %d\n" },
- /* TRICE32 ( TRICE32_3 ) */ { 14877u, 32u, 3u, "tst:TRICE32 %d %d %d\n" },
- /* TRICE32 ( TRICE32_2 ) */ { 14876u, 32u, 2u, "tst:TRICE32 %d %d\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 14875u, 32u, 1u, "tst:TRICE32 %d\n" },
- /* TRICE32 ( TRICE32_12 ) */ { 14887u, 32u, 12u, "tst:TRICE32 %t %b %x %X %d %u %o %O %p %e %f %g\n" },
- /* TRICE32_1 ( TRICE32_1 ) */ { 14888u, 32u, 1u, "tst:TRICE32_1 %d\n" },
- /* TRICE32_1 ( TRICE32_1 ) */ { 14772u, 32u, 1u, "tst:TRICE32_1 %08x\n" },
- /* TRICE32_1 ( TRICE32_1 ) */ { 14773u, 32u, 1u, "tst:TRICE32_1 %d\n" },
- /* TRICE32_1 ( TRICE32_1 ) */ { 14786u, 32u, 1u, "tst:TRICE32_1 %u\n" },
- /* TRICE32_10 ( TRICE32_10 ) */ { 14897u, 32u, 10u, "tst:TRICE32_10 %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE32_11 ( TRICE32_11 ) */ { 14898u, 32u, 11u, "tst:TRICE32_11 %d %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE32_12 ( TRICE32_12 ) */ { 14899u, 32u, 12u, "tst:TRICE32_12 %d %d %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE32_12 ( TRICE32_12 ) */ { 14901u, 32u, 12u, "tst:TRICE32_12 %t %b %x %X %d %u %o %O %p %e %f %g\n" },
- /* TRICE32_2 ( TRICE32_2 ) */ { 14889u, 32u, 2u, "tst:TRICE32_2 %d %d\n" },
- /* TRICE32_2 ( TRICE32_2 ) */ { 14775u, 32u, 2u, "tst:TRICE32_2 %d %d\n" },
- /* TRICE32_2 ( TRICE32_2 ) */ { 14787u, 32u, 2u, "tst:TRICE32_2 %u %u\n" },
- /* TRICE32_2 ( TRICE32_2 ) */ { 14774u, 32u, 2u, "tst:TRICE32_2 %x %x\n" },
- /* TRICE32_3 ( TRICE32_3 ) */ { 14890u, 32u, 3u, "tst:TRICE32_3 %d %d %d\n" },
- /* TRICE32_3 ( TRICE32_3 ) */ { 14777u, 32u, 3u, "tst:TRICE32_3 %d %d %d\n" },
- /* TRICE32_3 ( TRICE32_3 ) */ { 14788u, 32u, 3u, "tst:TRICE32_3 %u %u %u\n" },
- /* TRICE32_3 ( TRICE32_3 ) */ { 14776u, 32u, 3u, "tst:TRICE32_3 %x %x %x\n" },
- /* TRICE32_4 ( TRICE32_4 ) */ { 14891u, 32u, 4u, "tst:TRICE32_4 %d %d %d %d\n" },
- /* TRICE32_4 ( TRICE32_4 ) */ { 14779u, 32u, 4u, "tst:TRICE32_4 %d %d %d %d\n" },
- /* TRICE32_4 ( TRICE32_4 ) */ { 14789u, 32u, 4u, "tst:TRICE32_4 %u %u %u %u\n" },
- /* TRICE32_4 ( TRICE32_4 ) */ { 14778u, 32u, 4u, "tst:TRICE32_4 %x %x %x %x\n" },
- /* TRICE32_5 ( TRICE32_5 ) */ { 14892u, 32u, 5u, "tst:TRICE32_5 %d %d %d %d %d\n" },
- /* TRICE32_6 ( TRICE32_6 ) */ { 14893u, 32u, 6u, "tst:TRICE32_6 %d %d %d %d %d %d\n" },
- /* TRICE32_7 ( TRICE32_7 ) */ { 14894u, 32u, 7u, "tst:TRICE32_7 %d %d %d %d %d %d %d\n" },
- /* TRICE32_8 ( TRICE32_8 ) */ { 14895u, 32u, 8u, "tst:TRICE32_8 %d %d %d %d %d %d %d %d\n" },
- /* TRICE32_9 ( TRICE32_9 ) */ { 14896u, 32u, 9u, "tst:TRICE32_9 %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE64 ( TRICE64_4 ) */ { 14730u, 64u, 4u, "tst:TRICE64 %%09x -> %09x %09x %09x %09x\n" },
- /* TRICE64 ( TRICE64_4 ) */ { 14731u, 64u, 4u, "tst:TRICE64 %%10d -> %10d %10d %10d %10x\n" },
- /* TRICE64 ( TRICE64_12 ) */ { 14914u, 64u, 12u, "tst:TRICE64 %d %d %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE64 ( TRICE64_11 ) */ { 14913u, 64u, 11u, "tst:TRICE64 %d %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE64 ( TRICE64_10 ) */ { 14912u, 64u, 10u, "tst:TRICE64 %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE64 ( TRICE64_9 ) */ { 14911u, 64u, 9u, "tst:TRICE64 %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE64 ( TRICE64_8 ) */ { 14910u, 64u, 8u, "tst:TRICE64 %d %d %d %d %d %d %d %d\n" },
- /* TRICE64 ( TRICE64_7 ) */ { 14909u, 64u, 7u, "tst:TRICE64 %d %d %d %d %d %d %d\n" },
- /* TRICE64 ( TRICE64_6 ) */ { 14908u, 64u, 6u, "tst:TRICE64 %d %d %d %d %d %d\n" },
- /* TRICE64 ( TRICE64_5 ) */ { 14907u, 64u, 5u, "tst:TRICE64 %d %d %d %d %d\n" },
- /* TRICE64 ( TRICE64_4 ) */ { 14906u, 64u, 4u, "tst:TRICE64 %d %d %d %d\n" },
- /* TRICE64 ( TRICE64_3 ) */ { 14905u, 64u, 3u, "tst:TRICE64 %d %d %d\n" },
- /* TRICE64 ( TRICE64_2 ) */ { 14904u, 64u, 2u, "tst:TRICE64 %d %d\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 14903u, 64u, 1u, "tst:TRICE64 %d\n" },
- /* TRICE64 ( TRICE64_12 ) */ { 14915u, 64u, 12u, "tst:TRICE64 %t %b %x %X %d %u %o %O %p %e %f %g\n" },
- /* TRICE64_1 ( TRICE64_1 ) */ { 14916u, 64u, 1u, "tst:TRICE64_1 %d\n" },
- /* TRICE64_1 ( TRICE64_1 ) */ { 14780u, 64u, 1u, "tst:TRICE64_1 %d\n" },
- /* TRICE64_1 ( TRICE64_1 ) */ { 14792u, 64u, 1u, "tst:TRICE64_1 %u\n" },
- /* TRICE64_1 ( TRICE64_1 ) */ { 14790u, 64u, 1u, "tst:TRICE64_1 %x\n" },
- /* TRICE64_10 ( TRICE64_10 ) */ { 14925u, 64u, 10u, "tst:TRICE64_10 %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE64_11 ( TRICE64_11 ) */ { 14926u, 64u, 11u, "tst:TRICE64_11 %d %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE64_12 ( TRICE64_12 ) */ { 14927u, 64u, 12u, "tst:TRICE64_12 %d %d %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE64_12 ( TRICE64_12 ) */ { 14928u, 64u, 12u, "tst:TRICE64_12 %t %b %x %X %d %u %o %O %p %e %f %g\n" },
- /* TRICE64_2 ( TRICE64_2 ) */ { 14917u, 64u, 2u, "tst:TRICE64_2 %d %d\n" },
- /* TRICE64_2 ( TRICE64_2 ) */ { 14781u, 64u, 2u, "tst:TRICE64_2 %d %d\n" },
- /* TRICE64_2 ( TRICE64_2 ) */ { 14793u, 64u, 2u, "tst:TRICE64_2 %u %u\n" },
- /* TRICE64_2 ( TRICE64_2 ) */ { 14791u, 64u, 2u, "tst:TRICE64_2 %x %x\n" },
- /* TRICE64_3 ( TRICE64_3 ) */ { 14918u, 64u, 3u, "tst:TRICE64_3 %d %d %d\n" },
- /* TRICE64_4 ( TRICE64_4 ) */ { 14919u, 64u, 4u, "tst:TRICE64_4 %d %d %d %d\n" },
- /* TRICE64_5 ( TRICE64_5 ) */ { 14920u, 64u, 5u, "tst:TRICE64_5 %d %d %d %d %d\n" },
- /* TRICE64_6 ( TRICE64_6 ) */ { 14921u, 64u, 6u, "tst:TRICE64_6 %d %d %d %d %d %d\n" },
- /* TRICE64_7 ( TRICE64_7 ) */ { 14922u, 64u, 7u, "tst:TRICE64_7 %d %d %d %d %d %d %d\n" },
- /* TRICE64_8 ( TRICE64_8 ) */ { 14923u, 64u, 8u, "tst:TRICE64_8 %d %d %d %d %d %d %d %d\n" },
- /* TRICE64_9 ( TRICE64_9 ) */ { 14924u, 64u, 9u, "tst:TRICE64_9 %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE8 ( TRICE8_4 ) */ { 14719u, 8u, 4u, "tst:TRICE8 %%4O -> %4O %4O %4O %4O\n" },
- /* TRICE8 ( TRICE8_4 ) */ { 14720u, 8u, 4u, "tst:TRICE8 %%4X -> %4X %4X %4X %4X\n" },
- /* TRICE8 ( TRICE8_4 ) */ { 14716u, 8u, 4u, "tst:TRICE8 %%4d -> %4d %4d %4d %4d\n" },
- /* TRICE8 ( TRICE8_4 ) */ { 14718u, 8u, 4u, "tst:TRICE8 %%4o -> %4o %4o %4o %4o\n" },
- /* TRICE8 ( TRICE8_4 ) */ { 14717u, 8u, 4u, "tst:TRICE8 %%4u -> %4u %4u %4u %4u\n" },
- /* TRICE8 ( TRICE8_4 ) */ { 14721u, 8u, 4u, "tst:TRICE8 %%4x -> %4x %4x %4x %4x\n" },
- /* TRICE8 ( TRICE8_4 ) */ { 14722u, 8u, 4u, "tst:TRICE8 %%8b -> %8b %8b %8b %8b\n" },
- /* TRICE8 ( TRICE8_9 ) */ { 14845u, 8u, 9u, "tst:TRICE8 %t %b %x %X %d %u %o %O %p\n" },
- /* TRICE8 ( TRICE8_4 ) */ { 14715u, 8u, 4u, "tst:TRICE8 %%03x -> %03x %03x %03x %03x\n" },
- /* TRICE8 ( TRICE8_4 ) */ { 14723u, 8u, 4u, "tst:TRICE8 %%08b -> %08b %08b %08b %08b\n" },
- /* TRICE8 ( TRICE8_12 ) */ { 14831u, 8u, 12u, "tst:TRICE8 %d %d %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE8 ( TRICE8_11 ) */ { 14830u, 8u, 11u, "tst:TRICE8 %d %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE8 ( TRICE8_10 ) */ { 14829u, 8u, 10u, "tst:TRICE8 %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE8 ( TRICE8_9 ) */ { 14828u, 8u, 9u, "tst:TRICE8 %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE8 ( TRICE8_8 ) */ { 14827u, 8u, 8u, "tst:TRICE8 %d %d %d %d %d %d %d %d\n" },
- /* TRICE8 ( TRICE8_7 ) */ { 14826u, 8u, 7u, "tst:TRICE8 %d %d %d %d %d %d %d\n" },
- /* TRICE8 ( TRICE8_6 ) */ { 14825u, 8u, 6u, "tst:TRICE8 %d %d %d %d %d %d\n" },
- /* TRICE8 ( TRICE8_5 ) */ { 14824u, 8u, 5u, "tst:TRICE8 %d %d %d %d %d\n" },
- /* TRICE8 ( TRICE8_4 ) */ { 14823u, 8u, 4u, "tst:TRICE8 %d %d %d %d\n" },
- /* TRICE8 ( TRICE8_3 ) */ { 14822u, 8u, 3u, "tst:TRICE8 %d %d %d\n" },
- /* TRICE8 ( TRICE8_2 ) */ { 14821u, 8u, 2u, "tst:TRICE8 %d %d\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 14820u, 8u, 1u, "tst:TRICE8 %d\n" },
- /* TRICE8 ( TRICE8_9 ) */ { 14832u, 8u, 9u, "tst:TRICE8 %t %b %x %X %d %u %o %O %p\n" },
- /* TRICE8_1 ( TRICE8_1 ) */ { 14833u, 8u, 1u, "tst:TRICE8_1 %d\n" },
- /* TRICE8_8 ( TRICE8_8 ) */ { 14766u, 8u, 8u, "tst:TRICE8_1 %%d=%d, %%u=%u, 0x%%x=0x%x, 0x%%2x=0x%2x, 0x%%02x=0x%02x, 0x%%3x=0x%3x, 0x%%03x=0x%03x, %%b=%b\n" },
- /* TRICE8_1 ( TRICE8_1 ) */ { 14734u, 8u, 1u, "tst:TRICE8_1 %02x\n" },
- /* TRICE8_1 ( TRICE8_1 ) */ { 14742u, 8u, 1u, "tst:TRICE8_1 %d\n" },
- /* TRICE8_1 ( TRICE8_1 ) */ { 14750u, 8u, 1u, "tst:TRICE8_1 %d\n" },
- /* TRICE8_1 ( TRICE8_1 ) */ { 14758u, 8u, 1u, "tst:TRICE8_1 %u\n" },
- /* TRICE8_10 ( TRICE8_10 ) */ { 14842u, 8u, 10u, "tst:TRICE8_10 %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE8_11 ( TRICE8_11 ) */ { 14843u, 8u, 11u, "tst:TRICE8_11 %d %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE8_12 ( TRICE8_12 ) */ { 14844u, 8u, 12u, "tst:TRICE8_12 %d %d %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE8_2 ( TRICE8_2 ) */ { 14834u, 8u, 2u, "tst:TRICE8_2 %d %d\n" },
- /* TRICE8_2 ( TRICE8_2 ) */ { 14735u, 8u, 2u, "tst:TRICE8_2 %02x %02x\n" },
- /* TRICE8_2 ( TRICE8_2 ) */ { 14743u, 8u, 2u, "tst:TRICE8_2 %d %d\n" },
- /* TRICE8_2 ( TRICE8_2 ) */ { 14751u, 8u, 2u, "tst:TRICE8_2 %d %d\n" },
- /* TRICE8_2 ( TRICE8_2 ) */ { 14759u, 8u, 2u, "tst:TRICE8_2 %u %u\n" },
- /* TRICE8_3 ( TRICE8_3 ) */ { 14835u, 8u, 3u, "tst:TRICE8_3 %d %d %d\n" },
- /* TRICE8_3 ( TRICE8_3 ) */ { 14736u, 8u, 3u, "tst:TRICE8_3 %02x %02x %02x\n" },
- /* TRICE8_3 ( TRICE8_3 ) */ { 14744u, 8u, 3u, "tst:TRICE8_3 %d %d %d\n" },
- /* TRICE8_3 ( TRICE8_3 ) */ { 14752u, 8u, 3u, "tst:TRICE8_3 %d %d %d\n" },
- /* TRICE8_3 ( TRICE8_3 ) */ { 14760u, 8u, 3u, "tst:TRICE8_3 %u %u %u\n" },
- /* TRICE8_4 ( TRICE8_4 ) */ { 14836u, 8u, 4u, "tst:TRICE8_4 %d %d %d %d\n" },
- /* TRICE8_4 ( TRICE8_4 ) */ { 14737u, 8u, 4u, "tst:TRICE8_4 %02x %02x %02x %02x\n" },
- /* TRICE8_4 ( TRICE8_4 ) */ { 14745u, 8u, 4u, "tst:TRICE8_4 %d %d %d %d\n" },
- /* TRICE8_4 ( TRICE8_4 ) */ { 14753u, 8u, 4u, "tst:TRICE8_4 %d %d %d %d\n" },
- /* TRICE8_4 ( TRICE8_4 ) */ { 14761u, 8u, 4u, "tst:TRICE8_4 %u %u %u %u\n" },
- /* TRICE8_5 ( TRICE8_5 ) */ { 14837u, 8u, 5u, "tst:TRICE8_5 %d %d %d %d %d\n" },
- /* TRICE8_5 ( TRICE8_5 ) */ { 14738u, 8u, 5u, "tst:TRICE8_5 %02x %02x %02x %02x %02x\n" },
- /* TRICE8_5 ( TRICE8_5 ) */ { 14746u, 8u, 5u, "tst:TRICE8_5 %d %d %d %d %d\n" },
- /* TRICE8_5 ( TRICE8_5 ) */ { 14754u, 8u, 5u, "tst:TRICE8_5 %d %d %d %d %d\n" },
- /* TRICE8_5 ( TRICE8_5 ) */ { 14762u, 8u, 5u, "tst:TRICE8_5 %u %u %u %u %u\n" },
- /* TRICE8_6 ( TRICE8_6 ) */ { 14838u, 8u, 6u, "tst:TRICE8_6 %d %d %d %d %d %d\n" },
- /* TRICE8_6 ( TRICE8_6 ) */ { 14739u, 8u, 6u, "tst:TRICE8_6 %02x %02x %02x %02x %02x %02x\n" },
- /* TRICE8_6 ( TRICE8_6 ) */ { 14747u, 8u, 6u, "tst:TRICE8_6 %d %d %d %d %d %d\n" },
- /* TRICE8_6 ( TRICE8_6 ) */ { 14755u, 8u, 6u, "tst:TRICE8_6 %d %d %d %d %d %d\n" },
- /* TRICE8_6 ( TRICE8_6 ) */ { 14763u, 8u, 6u, "tst:TRICE8_6 %u %u %u %u %u %u\n" },
- /* TRICE8_7 ( TRICE8_7 ) */ { 14839u, 8u, 7u, "tst:TRICE8_7 %d %d %d %d %d %d %d\n" },
- /* TRICE8_7 ( TRICE8_7 ) */ { 14740u, 8u, 7u, "tst:TRICE8_7 %02x %02x %02x %02x %02x %02x %02x\n" },
- /* TRICE8_7 ( TRICE8_7 ) */ { 14748u, 8u, 7u, "tst:TRICE8_7 %d %d %d %d %d %d %d\n" },
- /* TRICE8_7 ( TRICE8_7 ) */ { 14756u, 8u, 7u, "tst:TRICE8_7 %d %d %d %d %d %d %d\n" },
- /* TRICE8_7 ( TRICE8_7 ) */ { 14764u, 8u, 7u, "tst:TRICE8_7 %u %u %u %u %u %u %u\n" },
- /* TRICE8_8 ( TRICE8_8 ) */ { 14840u, 8u, 8u, "tst:TRICE8_8 %d %d %d %d %d %d %d %d\n" },
- /* TRICE8_8 ( TRICE8_8 ) */ { 14741u, 8u, 8u, "tst:TRICE8_8 %02X %02X %02X %02X %02x %02x %02x %02x\n" },
- /* TRICE8_8 ( TRICE8_8 ) */ { 14749u, 8u, 8u, "tst:TRICE8_8 %d %d %d %d %d %d %d %d\n" },
- /* TRICE8_8 ( TRICE8_8 ) */ { 14757u, 8u, 8u, "tst:TRICE8_8 %d %d %d %d %d %d %d %d\n" },
- /* TRICE8_8 ( TRICE8_8 ) */ { 14765u, 8u, 8u, "tst:TRICE8_8 %u %u %u %u %u %u %u %u\n" },
- /* TRICE8_9 ( TRICE8_9 ) */ { 14841u, 8u, 9u, "tst:TRICE8_9 %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE8_9 ( TRICE8_9 ) */ { 14846u, 8u, 9u, "tst:TRICE8_9 %t %b %x %X %d %u %o %O %p\n" },
- /* TRice ( TRice32_1 ) */ { 13423u, 32u, 1u, "value=%d\n" },
- /* Trice ( Trice32_1 ) */ { 13424u, 32u, 1u, "value=%d\n" },
- /* trice ( trice32_1 ) */ { 13425u, 32u, 1u, "value=%d\n" },
- /* TRice8 ( TRice8_1 ) */ { 13426u, 8u, 1u, "value=%d\n" },
- /* Trice8 ( Trice8_1 ) */ { 13427u, 8u, 1u, "value=%d\n" },
- /* trice8 ( trice8_1 ) */ { 13428u, 8u, 1u, "value=%d\n" },
- /* TRice16 ( TRice16_1 ) */ { 13429u, 16u, 1u, "value=%d\n" },
- /* Trice16 ( Trice16_1 ) */ { 13430u, 16u, 1u, "value=%d\n" },
- /* trice16 ( trice16_1 ) */ { 13431u, 16u, 1u, "value=%d\n" },
- /* TRice32 ( TRice32_1 ) */ { 13432u, 32u, 1u, "value=%d\n" },
- /* Trice32 ( Trice32_1 ) */ { 13433u, 32u, 1u, "value=%d\n" },
- /* trice32 ( trice32_1 ) */ { 13434u, 32u, 1u, "value=%d\n" },
- /* TRice64 ( TRice64_1 ) */ { 13435u, 64u, 1u, "value=%d\n" },
- /* Trice64 ( Trice64_1 ) */ { 13436u, 64u, 1u, "value=%d\n" },
- /* trice64 ( trice64_1 ) */ { 13437u, 64u, 1u, "value=%d\n" },
- /* TRice_1 ( TRice32_1 ) */ { 13438u, 32u, 1u, "value=%d\n" },
- /* Trice_1 ( Trice32_1 ) */ { 13439u, 32u, 1u, "value=%d\n" },
- /* trice_1 ( trice32_1 ) */ { 13440u, 32u, 1u, "value=%d\n" },
- /* TRice8_1 ( TRice8_1 ) */ { 13441u, 8u, 1u, "value=%d\n" },
- /* Trice8_1 ( Trice8_1 ) */ { 13442u, 8u, 1u, "value=%d\n" },
- /* trice8_1 ( trice8_1 ) */ { 13443u, 8u, 1u, "value=%d\n" },
- /* TRice16_1 ( TRice16_1 ) */ { 13444u, 16u, 1u, "value=%d\n" },
- /* Trice16_1 ( Trice16_1 ) */ { 13445u, 16u, 1u, "value=%d\n" },
- /* trice16_1 ( trice16_1 ) */ { 13446u, 16u, 1u, "value=%d\n" },
- /* TRice32_1 ( TRice32_1 ) */ { 13447u, 32u, 1u, "value=%d\n" },
- /* Trice32_1 ( Trice32_1 ) */ { 13448u, 32u, 1u, "value=%d\n" },
- /* trice32_1 ( trice32_1 ) */ { 13449u, 32u, 1u, "value=%d\n" },
- /* TRice64_1 ( TRice64_1 ) */ { 13450u, 64u, 1u, "value=%d\n" },
- /* Trice64_1 ( Trice64_1 ) */ { 13451u, 64u, 1u, "value=%d\n" },
- /* trice64_1 ( trice64_1 ) */ { 13452u, 64u, 1u, "value=%d\n" },
- /* trice8 ( trice8_1 ) */ { 13648u, 8u, 1u, "value=%d\n" },
- /* Trice8 ( Trice8_1 ) */ { 13649u, 8u, 1u, "value=%d\n" },
- /* TRice8 ( TRice8_1 ) */ { 13650u, 8u, 1u, "value=%d\n" },
- /* trice8_1 ( trice8_1 ) */ { 13651u, 8u, 1u, "value=%d\n" },
- /* Trice8_1 ( Trice8_1 ) */ { 13652u, 8u, 1u, "value=%d\n" },
- /* TRice8_1 ( TRice8_1 ) */ { 13653u, 8u, 1u, "value=%d\n" },
- /* trice16 ( trice16_1 ) */ { 13654u, 16u, 1u, "value=%d\n" },
- /* Trice16 ( Trice16_1 ) */ { 13655u, 16u, 1u, "value=%d\n" },
- /* TRice16 ( TRice16_1 ) */ { 13656u, 16u, 1u, "value=%d\n" },
- /* trice16_1 ( trice16_1 ) */ { 13657u, 16u, 1u, "value=%d\n" },
- /* Trice16_1 ( Trice16_1 ) */ { 13658u, 16u, 1u, "value=%d\n" },
- /* TRice16_1 ( TRice16_1 ) */ { 13659u, 16u, 1u, "value=%d\n" },
- /* trice32 ( trice32_1 ) */ { 13660u, 32u, 1u, "value=%d\n" },
- /* Trice32 ( Trice32_1 ) */ { 13661u, 32u, 1u, "value=%d\n" },
- /* TRice32 ( TRice32_1 ) */ { 13662u, 32u, 1u, "value=%d\n" },
- /* trice32_1 ( trice32_1 ) */ { 13663u, 32u, 1u, "value=%d\n" },
- /* Trice32_1 ( Trice32_1 ) */ { 13664u, 32u, 1u, "value=%d\n" },
- /* TRice32_1 ( TRice32_1 ) */ { 13665u, 32u, 1u, "value=%d\n" },
- /* trice64 ( trice64_1 ) */ { 13666u, 64u, 1u, "value=%d\n" },
- /* Trice64 ( Trice64_1 ) */ { 13667u, 64u, 1u, "value=%d\n" },
- /* TRice64 ( TRice64_1 ) */ { 13668u, 64u, 1u, "value=%d\n" },
- /* trice64_1 ( trice64_1 ) */ { 13669u, 64u, 1u, "value=%d\n" },
- /* Trice64_1 ( Trice64_1 ) */ { 13670u, 64u, 1u, "value=%d\n" },
- /* TRice64_1 ( TRice64_1 ) */ { 13671u, 64u, 1u, "value=%d\n" },
- /* TRICE ( TRICE32_1 ) */ { 13672u, 32u, 1u, "value=%d\n" },
- /* TRICE ( TRICE32_1 ) */ { 13673u, 32u, 1u, "value=%d\n" },
- /* TRICE ( TRICE32_1 ) */ { 13674u, 32u, 1u, "value=%d\n" },
- /* TRICE ( TRICE32_1 ) */ { 13675u, 32u, 1u, "value=%d\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 13676u, 8u, 1u, "value=%d\n" },
- /* TRICE8_1 ( TRICE8_1 ) */ { 13677u, 8u, 1u, "value=%d\n" },
- /* trice8 ( trice8_1 ) */ { 13678u, 8u, 1u, "value=%d\n" },
- /* trice8_1 ( trice8_1 ) */ { 13679u, 8u, 1u, "value=%d\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 13680u, 8u, 1u, "value=%d\n" },
- /* TRICE8_1 ( TRICE8_1 ) */ { 13681u, 8u, 1u, "value=%d\n" },
- /* Trice8 ( Trice8_1 ) */ { 13682u, 8u, 1u, "value=%d\n" },
- /* Trice8_1 ( Trice8_1 ) */ { 13683u, 8u, 1u, "value=%d\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 13684u, 8u, 1u, "value=%d\n" },
- /* TRICE8_1 ( TRICE8_1 ) */ { 13685u, 8u, 1u, "value=%d\n" },
- /* TRice8 ( TRice8_1 ) */ { 13686u, 8u, 1u, "value=%d\n" },
- /* TRice8_1 ( TRice8_1 ) */ { 13687u, 8u, 1u, "value=%d\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 13688u, 8u, 1u, "value=%d\n" },
- /* TRICE8_1 ( TRICE8_1 ) */ { 13689u, 8u, 1u, "value=%d\n" },
- /* trice8 ( trice8_1 ) */ { 13242u, 8u, 1u, "value=%x\n" },
- /* trice8 ( trice8_1 ) */ { 13243u, 8u, 1u, "value=%x\n" },
- /* TRICE ( TRICE_0 ) */ { 13739u, 32u, 0u, "verbose:blue:default\n" },
- /* trice ( trice_0 ) */ { 13789u, 32u, 0u, "verbose:blue:default\n" },
- /* TRICE ( TRICE_0 ) */ { 13839u, 32u, 0u, "verbose:blue:default\n" },
- /* Trice ( Trice_0 ) */ { 13889u, 32u, 0u, "verbose:blue:default\n" },
- /* TRICE ( TRICE_0 ) */ { 13939u, 32u, 0u, "verbose:blue:default\n" },
- /* TRice ( TRice_0 ) */ { 13989u, 32u, 0u, "verbose:blue:default\n" },
- /* TRice ( TRice32_3 ) */ { 1000u, 32u, 3u, "vis_demo:%f,%f,%f\n" },
- /* TRice ( TRice32_3 ) */ { 15910u, 32u, 3u, "vis_demo:%f,%f,%f\n" },
- /* trice ( trice_0 ) */ { 15959u, 32u, 0u, "vis_demo:time_s,x,y,z\n" },
- /* TRICE ( TRICE_0 ) */ { 15154u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE ( TRICE_0 ) */ { 15155u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE ( TRICE_0 ) */ { 15156u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE ( TRICE_0 ) */ { 15157u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* trice ( trice_0 ) */ { 15158u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* Trice ( Trice_0 ) */ { 15159u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRice ( TRice_0 ) */ { 15160u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE_0 ( TRICE_0 ) */ { 15161u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE_0 ( TRICE_0 ) */ { 15162u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE_0 ( TRICE_0 ) */ { 15163u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE_0 ( TRICE_0 ) */ { 15164u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* trice_0 ( trice_0 ) */ { 15165u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* Trice_0 ( Trice_0 ) */ { 15166u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRice_0 ( TRice_0 ) */ { 15167u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE0 ( TRICE_0 ) */ { 15168u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE0 ( TRICE_0 ) */ { 15169u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE0 ( TRICE_0 ) */ { 15170u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE0 ( TRICE_0 ) */ { 15171u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* trice0 ( trice_0 ) */ { 15172u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* Trice0 ( Trice_0 ) */ { 15173u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRice0 ( TRice_0 ) */ { 15174u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE_0 ( TRICE_0 ) */ { 15175u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE_0 ( TRICE_0 ) */ { 15176u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE_0 ( TRICE_0 ) */ { 15177u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE_0 ( TRICE_0 ) */ { 15178u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* trice_0 ( trice_0 ) */ { 15179u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* Trice_0 ( Trice_0 ) */ { 15180u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRice_0 ( TRice_0 ) */ { 15181u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE8 ( TRICE_0 ) */ { 15182u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE8 ( TRICE_0 ) */ { 15183u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE8 ( TRICE_0 ) */ { 15184u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE8 ( TRICE_0 ) */ { 15185u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* trice8 ( trice_0 ) */ { 15186u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* Trice8 ( Trice_0 ) */ { 15187u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRice8 ( TRice_0 ) */ { 15188u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE8_0 ( TRICE_0 ) */ { 15189u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE8_0 ( TRICE_0 ) */ { 15190u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE8_0 ( TRICE_0 ) */ { 15191u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE8_0 ( TRICE_0 ) */ { 15192u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* trice8_0 ( trice_0 ) */ { 15193u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* Trice8_0 ( Trice_0 ) */ { 15194u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRice8_0 ( TRice_0 ) */ { 15195u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* trice16 ( trice_0 ) */ { 15196u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* trice16 ( trice_0 ) */ { 15197u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* trice16 ( trice_0 ) */ { 15198u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* trice16 ( trice_0 ) */ { 15199u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* trice16 ( trice_0 ) */ { 15200u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* Trice16 ( Trice_0 ) */ { 15201u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRice16 ( TRice_0 ) */ { 15202u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE16_0 ( TRICE_0 ) */ { 15203u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE16_0 ( TRICE_0 ) */ { 15204u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE16_0 ( TRICE_0 ) */ { 15205u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE16_0 ( TRICE_0 ) */ { 15206u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* trice16_0 ( trice_0 ) */ { 15207u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* Trice16_0 ( Trice_0 ) */ { 15208u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRice16_0 ( TRice_0 ) */ { 15209u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE32 ( TRICE_0 ) */ { 15210u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE32 ( TRICE_0 ) */ { 15211u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE32 ( TRICE_0 ) */ { 15212u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE32 ( TRICE_0 ) */ { 15213u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* trice32 ( trice_0 ) */ { 15214u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* Trice32 ( Trice_0 ) */ { 15215u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRice32 ( TRice_0 ) */ { 15216u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE32_0 ( TRICE_0 ) */ { 15217u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE32_0 ( TRICE_0 ) */ { 15218u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE32_0 ( TRICE_0 ) */ { 15219u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE32_0 ( TRICE_0 ) */ { 15220u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* trice32_0 ( trice_0 ) */ { 15221u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* Trice32_0 ( Trice_0 ) */ { 15222u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRice32_0 ( TRice_0 ) */ { 15223u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE64 ( TRICE_0 ) */ { 15224u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE64 ( TRICE_0 ) */ { 15225u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE64 ( TRICE_0 ) */ { 15226u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE64 ( TRICE_0 ) */ { 15227u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* trice64 ( trice_0 ) */ { 15228u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* Trice64 ( Trice_0 ) */ { 15229u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRice64 ( TRice_0 ) */ { 15230u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE64_0 ( TRICE_0 ) */ { 15231u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE64_0 ( TRICE_0 ) */ { 15232u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE64_0 ( TRICE_0 ) */ { 15233u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE64_0 ( TRICE_0 ) */ { 15234u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* trice64_0 ( trice_0 ) */ { 15235u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* Trice64_0 ( Trice_0 ) */ { 15236u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRice64_0 ( TRice_0 ) */ { 15237u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* triceS ( triceS ) */ { 16369u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "w: Hello! 👋🙂 \n\n ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ \n 🎈🎈🎈🎈%s🎈🎈🎈🎈\n 🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃 \n\n\n" },
- /* trice ( trice_0 ) */ { 14796u, 32u, 0u, "w:B" },
- /* trice ( trice_0 ) */ { 14814u, 32u, 0u, "w:B" },
- /* TRICE ( TRICE_0 ) */ { 13719u, 32u, 0u, "warning:11+i:red\n" },
- /* trice ( trice_0 ) */ { 13769u, 32u, 0u, "warning:11+i:red\n" },
- /* TRICE ( TRICE_0 ) */ { 13819u, 32u, 0u, "warning:11+i:red\n" },
- /* Trice ( Trice_0 ) */ { 13869u, 32u, 0u, "warning:11+i:red\n" },
- /* TRICE ( TRICE_0 ) */ { 13919u, 32u, 0u, "warning:11+i:red\n" },
- /* TRice ( TRice_0 ) */ { 13969u, 32u, 0u, "warning:11+i:red\n" },
- /* TRICE_N ( TRICE_N ) */ { 15256u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:%s\n" },
- /* trice ( trice_0 ) */ { 13034u, 32u, 0u, "wr:X0 after 1\n" },
- /* trice ( trice_0 ) */ { 13035u, 32u, 0u, "wr:X0 before 2\n" },
- /* trice ( trice_0 ) */ { 13045u, 32u, 0u, "wr:X0 tail\n" },
- /* trice8B ( trice8B ) */ { 13038u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-B: %02x\n" },
- /* trice8B ( trice8B ) */ { 13039u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-B: %02x\n" },
- /* trice8B ( trice8B ) */ { 13044u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-B: %02x\n" },
- /* triceS ( triceS ) */ { 13036u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-S:%s\n" },
- /* triceS ( triceS ) */ { 13037u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-S:%s\n" },
- /* triceS ( triceS ) */ { 13043u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-S:%s\n" },
- /* TRice8B ( TRice8B ) */ { 13041u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-TRiceB: %02x\n" },
- /* Trice8B ( Trice8B ) */ { 13042u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-TriceB: %02x\n" },
- /* TriceS ( TriceS ) */ { 13040u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-TriceS:%s\n" },
- /* trice ( trice_0 ) */ { 14798u, 32u, 0u, "wr:d" },
- /* trice ( trice_0 ) */ { 14816u, 32u, 0u, "wr:d" },
- /* TRICE ( TRICE_0 ) */ { 13727u, 32u, 0u, "write:black+u:yellow+h\n" },
- /* trice ( trice_0 ) */ { 13777u, 32u, 0u, "write:black+u:yellow+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13827u, 32u, 0u, "write:black+u:yellow+h\n" },
- /* Trice ( Trice_0 ) */ { 13877u, 32u, 0u, "write:black+u:yellow+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13927u, 32u, 0u, "write:black+u:yellow+h\n" },
- /* TRice ( TRice_0 ) */ { 13977u, 32u, 0u, "write:black+u:yellow+h\n" },
- /* trice16 ( trice16_1 ) */ { 16374u, 16u, 1u, "wrn:TriceDynStringBufTruncateCount = %u\n" },
+ /* Trice type ( extended ) */ /* id, bitWidth, paramCount, format-string */
+ /* TRICE8_B ( TRICE8B ) */ {13271u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02x\n"},
+ /* TRICE8_B ( TRICE8B ) */ {13274u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02x\n"},
+ /* TRICE16_B ( TRICE16B ) */ {13281u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %04x\n"},
+ /* TRICE64_B ( TRICE64B ) */ {13291u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %016x\n"},
+ /* TRice64B ( TRice64B ) */ {13292u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %016x\n"},
+ /* Trice64B ( Trice64B ) */ {13293u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %016x\n"},
+ /* trice64B ( trice64B ) */ {13294u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %016x\n"},
+ /* trice8B ( trice8B ) */ {13277u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02llx\n"},
+ /* Trice8B ( Trice8B ) */ {13276u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02lx\n"},
+ /* TRICE8_B ( TRICE8B ) */ {15243u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02x "},
+ /* TRICE8_B ( TRICE8B ) */ {15246u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02x "},
+ /* TRICE8_B ( TRICE8B ) */ {15249u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02x "},
+ /* trice8B ( trice8B ) */ {13280u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02x\n"},
+ /* TRice8B ( TRice8B ) */ {13275u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02zx\n"},
+ /* TRice16B ( TRice16B ) */ {13282u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %04x\n"},
+ /* Trice16B ( Trice16B ) */ {13283u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %04x\n"},
+ /* trice16B ( trice16B ) */ {13284u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %04x\n"},
+ /* TRICE32_B ( TRICE32B ) */ {13286u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %08x\n"},
+ /* TRice32B ( TRice32B ) */ {13287u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %08x\n"},
+ /* Trice32B ( Trice32B ) */ {13288u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %08x\n"},
+ /* trice32B ( trice32B ) */ {13289u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %08x\n"},
+ /* TRICE ( TRICE32_1 ) */ {15239u, 32u, 1u, " = %d\n"},
+ /* TRICE ( TRICE32_1 ) */ {15241u, 32u, 1u, " = %d\n"},
+ /* TRice8B ( TRice8B ) */ {15285u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "%3x\n"},
+ /* TRice8B ( TRice8B ) */ {15286u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "%3x\n"},
+ /* TRICE8_B ( TRICE8B ) */ {13273u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "%4ld\n"},
+ /* trice ( trice_0 ) */ {13165u, 32u, 0u, "--------------------------------------------------\n"},
+ /* trice ( trice_0 ) */ {13173u, 32u, 0u, "--------------------------------------------------\n"},
+ /* TRICE ( TRICE_0 ) */ {14695u, 32u, 0u, "--------------------------------------------------\n"},
+ /* TRICE ( TRICE_0 ) */ {14696u, 32u, 0u, "--------------------------------------------------\n"},
+ /* TRICE ( TRICE_0 ) */ {14698u, 32u, 0u, "--------------------------------------------------\n"},
+ /* TRICE ( TRICE_0 ) */ {14700u, 32u, 0u, "--------------------------------------------------\n"},
+ /* trice ( trice_0 ) */ {14806u, 32u, 0u, "1"},
+ /* trice ( trice_0 ) */ {14807u, 32u, 0u, "2"},
+ /* trice ( trice_0 ) */ {14808u, 32u, 0u, "3"},
+ /* trice ( trice_0 ) */ {14809u, 32u, 0u, "4"},
+ /* trice ( trice32_4 ) */ {15278u, 32u, 4u, "A user printi call with integer and float values: %u, %d, %x, %2.1f\n"},
+ /* trice ( trice_0 ) */ {15276u, 32u, 0u, "A user printi call without values.\n"},
+ /* TRICE ( TRICE_0 ) */ {13713u, 32u, 0u, "ALARM:red+i:white+h\n"},
+ /* trice ( trice_0 ) */ {13763u, 32u, 0u, "ALARM:red+i:white+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13813u, 32u, 0u, "ALARM:red+i:white+h\n"},
+ /* Trice ( Trice_0 ) */ {13863u, 32u, 0u, "ALARM:red+i:white+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13913u, 32u, 0u, "ALARM:red+i:white+h\n"},
+ /* TRice ( TRice_0 ) */ {13963u, 32u, 0u, "ALARM:red+i:white+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13711u, 32u, 0u, "ALERT:magenta:magenta+h\n"},
+ /* trice ( trice_0 ) */ {13761u, 32u, 0u, "ALERT:magenta:magenta+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13811u, 32u, 0u, "ALERT:magenta:magenta+h\n"},
+ /* Trice ( Trice_0 ) */ {13861u, 32u, 0u, "ALERT:magenta:magenta+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13911u, 32u, 0u, "ALERT:magenta:magenta+h\n"},
+ /* TRice ( TRice_0 ) */ {13961u, 32u, 0u, "ALERT:magenta:magenta+h\n"},
+ /* triceAssertFalse ( ) */ {13052u, 32u, 0u, "ASSERT:flag not false!\n"},
+ /* TriceAssertFalse ( ) */ {13053u, 32u, 0u, "ASSERT:flag not false!\n"},
+ /* TRiceAssertFalse ( ) */ {13054u, 32u, 0u, "ASSERT:flag not false!\n"},
+ /* triceAssertFalse ( ) */ {13067u, 32u, 0u, "ASSERT:flag not false!\n"},
+ /* TriceAssertFalse ( ) */ {13069u, 32u, 0u, "ASSERT:flag not false!\n"},
+ /* TRiceAssertFalse ( ) */ {13071u, 32u, 0u, "ASSERT:flag not false!\n"},
+ /* triceAssertTrue ( ) */ {13046u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* TriceAssertTrue ( ) */ {13047u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* TRiceAssertTrue ( ) */ {13048u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* triceAssert ( ) */ {13049u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* TriceAssert ( ) */ {13050u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* TRiceAssert ( ) */ {13051u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* triceAssertTrue ( ) */ {13055u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* TriceAssertTrue ( ) */ {13057u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* TRiceAssertTrue ( ) */ {13059u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* triceAssert ( ) */ {13061u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* TriceAssert ( ) */ {13063u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* TRiceAssert ( ) */ {13065u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* triceAssertOrReturn ( ) */ {13073u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* TriceAssertOrReturn ( ) */ {13075u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* TRiceAssertOrReturn ( ) */ {13077u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* triceAssertOrReturnValue ( ) */ {15257u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* TriceAssertOrReturnValue ( ) */ {15258u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* TRiceAssertOrReturnValue ( ) */ {15259u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* TRICE ( TRICE_0 ) */ {13712u, 32u, 0u, "ASSERT:yellow+i:blue\n"},
+ /* trice ( trice_0 ) */ {13762u, 32u, 0u, "ASSERT:yellow+i:blue\n"},
+ /* TRICE ( TRICE_0 ) */ {13812u, 32u, 0u, "ASSERT:yellow+i:blue\n"},
+ /* Trice ( Trice_0 ) */ {13862u, 32u, 0u, "ASSERT:yellow+i:blue\n"},
+ /* TRICE ( TRICE_0 ) */ {13912u, 32u, 0u, "ASSERT:yellow+i:blue\n"},
+ /* TRice ( TRice_0 ) */ {13962u, 32u, 0u, "ASSERT:yellow+i:blue\n"},
+ /* TRICE ( TRICE32_1 ) */ {14703u, 32u, 1u, "ATT:attention message, SysTick is %6u\n"},
+ /* TRICE ( TRICE_0 ) */ {13695u, 32u, 0u, "ATTENTION:11:green\n"},
+ /* trice ( trice_0 ) */ {13745u, 32u, 0u, "ATTENTION:11:green\n"},
+ /* TRICE ( TRICE_0 ) */ {13795u, 32u, 0u, "ATTENTION:11:green\n"},
+ /* Trice ( Trice_0 ) */ {13845u, 32u, 0u, "ATTENTION:11:green\n"},
+ /* TRICE ( TRICE_0 ) */ {13895u, 32u, 0u, "ATTENTION:11:green\n"},
+ /* TRice ( TRice_0 ) */ {13945u, 32u, 0u, "ATTENTION:11:green\n"},
+ /* TRICE8_B ( TRICE8B ) */ {13272u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "BUF: %02x\n"},
+ /* TRICE ( TRICE_0 ) */ {13691u, 32u, 0u, "CRITICAL:red+i:default+h\n"},
+ /* trice ( trice_0 ) */ {13741u, 32u, 0u, "CRITICAL:red+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13791u, 32u, 0u, "CRITICAL:red+i:default+h\n"},
+ /* Trice ( Trice_0 ) */ {13841u, 32u, 0u, "CRITICAL:red+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13891u, 32u, 0u, "CRITICAL:red+i:default+h\n"},
+ /* TRice ( TRice_0 ) */ {13941u, 32u, 0u, "CRITICAL:red+i:default+h\n"},
+ /* trice ( trice32_1 ) */ {13003u, 32u, 1u, "CUSTOM_PRINT example: the right answer is: %d\n"},
+ /* trice ( trice32_1 ) */ {15261u, 32u, 1u, "CUSTOM_PRINT example: the right answer is: %d\n"},
+ /* TRICE ( TRICE32_1 ) */ {14706u, 32u, 1u, "DBG:debug message, SysTick is %6u\n"},
+ /* TRICE ( TRICE_0 ) */ {13697u, 32u, 0u, "DEBUG:130+i\n"},
+ /* trice ( trice_0 ) */ {13747u, 32u, 0u, "DEBUG:130+i\n"},
+ /* TRICE ( TRICE_0 ) */ {13797u, 32u, 0u, "DEBUG:130+i\n"},
+ /* Trice ( Trice_0 ) */ {13847u, 32u, 0u, "DEBUG:130+i\n"},
+ /* TRICE ( TRICE_0 ) */ {13897u, 32u, 0u, "DEBUG:130+i\n"},
+ /* TRice ( TRice_0 ) */ {13947u, 32u, 0u, "DEBUG:130+i\n"},
+ /* TRICE ( TRICE_0 ) */ {13709u, 32u, 0u, "DEFAULT:off\n"},
+ /* trice ( trice_0 ) */ {13759u, 32u, 0u, "DEFAULT:off\n"},
+ /* TRICE ( TRICE_0 ) */ {13809u, 32u, 0u, "DEFAULT:off\n"},
+ /* Trice ( Trice_0 ) */ {13859u, 32u, 0u, "DEFAULT:off\n"},
+ /* TRICE ( TRICE_0 ) */ {13909u, 32u, 0u, "DEFAULT:off\n"},
+ /* TRice ( TRice_0 ) */ {13959u, 32u, 0u, "DEFAULT:off\n"},
+ /* TRICE ( TRICE32_1 ) */ {14704u, 32u, 1u, "DIA:diagnostics message, SysTick is %6u\n"},
+ /* TRICE ( TRICE_0 ) */ {13705u, 32u, 0u, "DIAG:yellow+i:default+h\n"},
+ /* trice ( trice_0 ) */ {13755u, 32u, 0u, "DIAG:yellow+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13805u, 32u, 0u, "DIAG:yellow+i:default+h\n"},
+ /* Trice ( Trice_0 ) */ {13855u, 32u, 0u, "DIAG:yellow+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13905u, 32u, 0u, "DIAG:yellow+i:default+h\n"},
+ /* TRice ( TRice_0 ) */ {13955u, 32u, 0u, "DIAG:yellow+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13692u, 32u, 0u, "EMERGENCY:red+i:blue\n"},
+ /* trice ( trice_0 ) */ {13742u, 32u, 0u, "EMERGENCY:red+i:blue\n"},
+ /* TRICE ( TRICE_0 ) */ {13792u, 32u, 0u, "EMERGENCY:red+i:blue\n"},
+ /* Trice ( Trice_0 ) */ {13842u, 32u, 0u, "EMERGENCY:red+i:blue\n"},
+ /* TRICE ( TRICE_0 ) */ {13892u, 32u, 0u, "EMERGENCY:red+i:blue\n"},
+ /* TRice ( TRice_0 ) */ {13942u, 32u, 0u, "EMERGENCY:red+i:blue\n"},
+ /* TRICE ( TRICE32_1 ) */ {14701u, 32u, 1u, "ERR:error message, SysTick is %6u\n"},
+ /* TRICE ( TRICE_0 ) */ {13693u, 32u, 0u, "ERROR:11:red\n"},
+ /* trice ( trice_0 ) */ {13743u, 32u, 0u, "ERROR:11:red\n"},
+ /* TRICE ( TRICE_0 ) */ {13793u, 32u, 0u, "ERROR:11:red\n"},
+ /* Trice ( Trice_0 ) */ {13843u, 32u, 0u, "ERROR:11:red\n"},
+ /* TRICE ( TRICE_0 ) */ {13893u, 32u, 0u, "ERROR:11:red\n"},
+ /* TRice ( TRice_0 ) */ {13943u, 32u, 0u, "ERROR:11:red\n"},
+ /* TRICE ( TRICE_0 ) */ {13690u, 32u, 0u, "FATAL:magenta+b:red\n"},
+ /* trice ( trice_0 ) */ {13740u, 32u, 0u, "FATAL:magenta+b:red\n"},
+ /* TRICE ( TRICE_0 ) */ {13790u, 32u, 0u, "FATAL:magenta+b:red\n"},
+ /* Trice ( Trice_0 ) */ {13840u, 32u, 0u, "FATAL:magenta+b:red\n"},
+ /* TRICE ( TRICE_0 ) */ {13890u, 32u, 0u, "FATAL:magenta+b:red\n"},
+ /* TRice ( TRice_0 ) */ {13940u, 32u, 0u, "FATAL:magenta+b:red\n"},
+ /* trice ( trice32_1 ) */ {13002u, 32u, 1u, "Fun %x!\n"},
+ /* TRice ( TRice_0 ) */ {15281u, 32u, 0u, "Hello "},
+ /* TRice ( TRice_0 ) */ {15287u, 32u, 0u, "Hello "},
+ /* TRice ( TRice_0 ) */ {13030u, 32u, 0u, "Hello World!\n"},
+ /* TRice ( TRice_0 ) */ {15260u, 32u, 0u, "Hello World!\n"},
+ /* TRice ( TRice_0 ) */ {15262u, 32u, 0u, "Hello World!\n"},
+ /* TRice ( TRice_0 ) */ {15291u, 32u, 0u, "Hello World!\n"},
+ /* TRice ( TRice_0 ) */ {15308u, 32u, 0u, "Hello World!\n"},
+ /* trice ( trice_0 ) */ {15284u, 32u, 0u, "Hello again\n"},
+ /* trice ( trice_0 ) */ {15290u, 32u, 0u, "Hello again\n"},
+ /* TRICE ( TRICE_0 ) */ {13696u, 32u, 0u, "INFO:cyan+b:default+h\n"},
+ /* trice ( trice_0 ) */ {13746u, 32u, 0u, "INFO:cyan+b:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13796u, 32u, 0u, "INFO:cyan+b:default+h\n"},
+ /* Trice ( Trice_0 ) */ {13846u, 32u, 0u, "INFO:cyan+b:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13896u, 32u, 0u, "INFO:cyan+b:default+h\n"},
+ /* TRice ( TRice_0 ) */ {13946u, 32u, 0u, "INFO:cyan+b:default+h\n"},
+ /* TRICE ( TRICE32_1 ) */ {14712u, 32u, 1u, "INFO:informal message, SysTick is %6u\n"},
+ /* TRICE ( TRICE_0 ) */ {13706u, 32u, 0u, "INTERRUPT:magenta+i:default+h\n"},
+ /* trice ( trice_0 ) */ {13756u, 32u, 0u, "INTERRUPT:magenta+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13806u, 32u, 0u, "INTERRUPT:magenta+i:default+h\n"},
+ /* Trice ( Trice_0 ) */ {13856u, 32u, 0u, "INTERRUPT:magenta+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13906u, 32u, 0u, "INTERRUPT:magenta+i:default+h\n"},
+ /* TRice ( TRice_0 ) */ {13956u, 32u, 0u, "INTERRUPT:magenta+i:default+h\n"},
+ /* TRICE ( TRICE32_1 ) */ {14710u, 32u, 1u, "ISR:interrupt message, SysTick is %6u\n"},
+ /* TRICE ( TRICE_0 ) */ {13700u, 32u, 0u, "MESSAGE:green+h:black\n"},
+ /* trice ( trice_0 ) */ {13750u, 32u, 0u, "MESSAGE:green+h:black\n"},
+ /* TRICE ( TRICE_0 ) */ {13800u, 32u, 0u, "MESSAGE:green+h:black\n"},
+ /* Trice ( Trice_0 ) */ {13850u, 32u, 0u, "MESSAGE:green+h:black\n"},
+ /* TRICE ( TRICE_0 ) */ {13900u, 32u, 0u, "MESSAGE:green+h:black\n"},
+ /* TRice ( TRice_0 ) */ {13950u, 32u, 0u, "MESSAGE:green+h:black\n"},
+ /* TRICE ( TRICE32_1 ) */ {13331u, 32u, 1u, "MSG:1/11 = %g\n"},
+ /* TRICE ( TRICE32_1 ) */ {14711u, 32u, 1u, "MSG:normal message, SysTick is %6u\n"},
+ /* TRICE ( TRICE_0 ) */ {13710u, 32u, 0u, "NOTICE:blue:white+h\n"},
+ /* trice ( trice_0 ) */ {13760u, 32u, 0u, "NOTICE:blue:white+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13810u, 32u, 0u, "NOTICE:blue:white+h\n"},
+ /* Trice ( Trice_0 ) */ {13860u, 32u, 0u, "NOTICE:blue:white+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13910u, 32u, 0u, "NOTICE:blue:white+h\n"},
+ /* TRice ( TRice_0 ) */ {13960u, 32u, 0u, "NOTICE:blue:white+h\n"},
+ /* TRICE ( TRICE32_1 ) */ {14708u, 32u, 1u, "RD:read message, SysTick is %6u\n"},
+ /* TRICE ( TRICE_0 ) */ {13701u, 32u, 0u, "READ:black+i:yellow+h\n"},
+ /* trice ( trice_0 ) */ {13751u, 32u, 0u, "READ:black+i:yellow+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13801u, 32u, 0u, "READ:black+i:yellow+h\n"},
+ /* Trice ( Trice_0 ) */ {13851u, 32u, 0u, "READ:black+i:yellow+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13901u, 32u, 0u, "READ:black+i:yellow+h\n"},
+ /* TRice ( TRice_0 ) */ {13951u, 32u, 0u, "READ:black+i:yellow+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13703u, 32u, 0u, "RECEIVE:black+h:black\n"},
+ /* trice ( trice_0 ) */ {13753u, 32u, 0u, "RECEIVE:black+h:black\n"},
+ /* TRICE ( TRICE_0 ) */ {13803u, 32u, 0u, "RECEIVE:black+h:black\n"},
+ /* Trice ( Trice_0 ) */ {13853u, 32u, 0u, "RECEIVE:black+h:black\n"},
+ /* TRICE ( TRICE_0 ) */ {13903u, 32u, 0u, "RECEIVE:black+h:black\n"},
+ /* TRice ( TRice_0 ) */ {13953u, 32u, 0u, "RECEIVE:black+h:black\n"},
+ /* Trice64F ( Trice64F ) */ {13310u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZc"},
+ /* Trice64F ( Trice64F ) */ {15306u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZc"},
+ /* Trice64C ( Trice64C ) */ {15779u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZc"},
+ /* trice64F ( trice64F ) */ {13311u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZd"},
+ /* trice64C ( trice64C ) */ {15312u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZd"},
+ /* trice64C ( trice64C ) */ {15313u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZd"},
+ /* trice64C ( trice64C ) */ {15314u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZd"},
+ /* trice64C ( trice64C ) */ {16110u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZd"},
+ /* trice64C ( trice64C ) */ {16155u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZd"},
+ /* trice64F ( trice64F ) */ {15307u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "Rpc:FunctionNameZd"},
+ /* triceS ( triceS ) */ {15280u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"A user ... with string, integer and float values: %u, %d, %x, %2.1f, %s and %s\n\"')SAlias_Strg"},
+ /* triceS ( triceS ) */ {15279u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"A user prints call with integer and float values: %u, %d, %x, %2.1f\n\"')SAlias_Strg"},
+ /* triceS ( triceS ) */ {15277u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"A user prints call without values.\n\"')SAlias_Strg"},
+ /* triceS ( triceS ) */ {15274u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s....\n\"')SAlias_Strg"},
+ /* triceS ( triceS ) */ {15273u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s...\n\"')SAlias_Strg"},
+ /* triceS ( triceS ) */ {15271u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s..\n\"')SAlias_Strg"},
+ /* triceS ( triceS ) */ {15264u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s.\n\"')SAlias_Strg"},
+ /* triceS ( triceS ) */ {15265u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s.\n\"')SAlias_Strg"},
+ /* triceS ( triceS ) */ {15266u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s.\n\"')SAlias_Strg"},
+ /* triceS ( triceS ) */ {15267u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s.\n\"')SAlias_Strg"},
+ /* triceS ( triceS ) */ {15269u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s.\n\"')SAlias_Strg"},
+ /* triceS ( triceS ) */ {15270u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s.\n\"')SAlias_Strg"},
+ /* triceS ( triceS ) */ {15275u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:'-alias' & '-salias' contributor is %s.\n\"')SAlias_Strg"},
+ /* triceS ( triceS ) */ {13004u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('theFastFoundAnswer == theRightAnswer')SAlias_Strg"},
+ /* triceS ( triceS ) */ {15263u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('theFastFoundAnswer == theRightAnswer')SAlias_Strg"},
+ /* triceS ( triceS ) */ {13006u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('theFastFoundAnswer == theRightAnswer, (char*)\"'%s' Am, it is %d\"')SAlias_Strg"},
+ /* triceS ( triceS ) */ {15272u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('theFastFoundAnswer == theRightAnswer, (char*)\"'%s' Am, it is %d\"')SAlias_Strg"},
+ /* triceS ( triceS ) */ {13005u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('theFastFoundAnswer == theRightAnswer, (char*)theQuestion ')SAlias_Strg"},
+ /* triceS ( triceS ) */ {15268u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('theFastFoundAnswer == theRightAnswer, (char*)theQuestion ')SAlias_Strg"},
+ /* trice64B ( trice64B ) */ {13295u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SIG: %016x\n"},
+ /* TRICE ( TRICE32_1 ) */ {14707u, 32u, 1u, "SIG:signal message, SysTick is %6u\n"},
+ /* TRICE ( TRICE_0 ) */ {13707u, 32u, 0u, "SIGNAL:118+i\n"},
+ /* trice ( trice_0 ) */ {13757u, 32u, 0u, "SIGNAL:118+i\n"},
+ /* TRICE ( TRICE_0 ) */ {13807u, 32u, 0u, "SIGNAL:118+i\n"},
+ /* Trice ( Trice_0 ) */ {13857u, 32u, 0u, "SIGNAL:118+i\n"},
+ /* TRICE ( TRICE_0 ) */ {13907u, 32u, 0u, "SIGNAL:118+i\n"},
+ /* TRice ( TRice_0 ) */ {13957u, 32u, 0u, "SIGNAL:118+i\n"},
+ /* TRICE ( TRICE_0 ) */ {13708u, 32u, 0u, "TEST:yellow+h:black\n"},
+ /* trice ( trice_0 ) */ {13758u, 32u, 0u, "TEST:yellow+h:black\n"},
+ /* TRICE ( TRICE_0 ) */ {13808u, 32u, 0u, "TEST:yellow+h:black\n"},
+ /* Trice ( Trice_0 ) */ {13858u, 32u, 0u, "TEST:yellow+h:black\n"},
+ /* TRICE ( TRICE_0 ) */ {13908u, 32u, 0u, "TEST:yellow+h:black\n"},
+ /* TRice ( TRice_0 ) */ {13958u, 32u, 0u, "TEST:yellow+h:black\n"},
+ /* TRICE ( TRICE32_1 ) */ {14705u, 32u, 1u, "TIM:timing message, SysTick is %6u\n"},
+ /* TRICE ( TRICE_0 ) */ {13699u, 32u, 0u, "TIME:blue+i:blue+h\n"},
+ /* trice ( trice_0 ) */ {13749u, 32u, 0u, "TIME:blue+i:blue+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13799u, 32u, 0u, "TIME:blue+i:blue+h\n"},
+ /* Trice ( Trice_0 ) */ {13849u, 32u, 0u, "TIME:blue+i:blue+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13899u, 32u, 0u, "TIME:blue+i:blue+h\n"},
+ /* TRice ( TRice_0 ) */ {13949u, 32u, 0u, "TIME:blue+i:blue+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13698u, 32u, 0u, "TRACE:default+i:default+h\n"},
+ /* trice ( trice_0 ) */ {13748u, 32u, 0u, "TRACE:default+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13798u, 32u, 0u, "TRACE:default+i:default+h\n"},
+ /* Trice ( Trice_0 ) */ {13848u, 32u, 0u, "TRACE:default+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13898u, 32u, 0u, "TRACE:default+i:default+h\n"},
+ /* TRice ( TRice_0 ) */ {13948u, 32u, 0u, "TRACE:default+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13704u, 32u, 0u, "TRANSMIT:black:black+h\n"},
+ /* trice ( trice_0 ) */ {13754u, 32u, 0u, "TRANSMIT:black:black+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13804u, 32u, 0u, "TRANSMIT:black:black+h\n"},
+ /* Trice ( Trice_0 ) */ {13854u, 32u, 0u, "TRANSMIT:black:black+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13904u, 32u, 0u, "TRANSMIT:black:black+h\n"},
+ /* TRice ( TRice_0 ) */ {13954u, 32u, 0u, "TRANSMIT:black:black+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13714u, 32u, 0u, "VERBOSE:blue:default\n"},
+ /* trice ( trice_0 ) */ {13764u, 32u, 0u, "VERBOSE:blue:default\n"},
+ /* TRICE ( TRICE_0 ) */ {13814u, 32u, 0u, "VERBOSE:blue:default\n"},
+ /* Trice ( Trice_0 ) */ {13864u, 32u, 0u, "VERBOSE:blue:default\n"},
+ /* TRICE ( TRICE_0 ) */ {13914u, 32u, 0u, "VERBOSE:blue:default\n"},
+ /* TRice ( TRice_0 ) */ {13964u, 32u, 0u, "VERBOSE:blue:default\n"},
+ /* TRICE ( TRICE_0 ) */ {13694u, 32u, 0u, "WARNING:11+i:red\n"},
+ /* trice ( trice_0 ) */ {13744u, 32u, 0u, "WARNING:11+i:red\n"},
+ /* TRICE ( TRICE_0 ) */ {13794u, 32u, 0u, "WARNING:11+i:red\n"},
+ /* Trice ( Trice_0 ) */ {13844u, 32u, 0u, "WARNING:11+i:red\n"},
+ /* TRICE ( TRICE_0 ) */ {13894u, 32u, 0u, "WARNING:11+i:red\n"},
+ /* TRice ( TRice_0 ) */ {13944u, 32u, 0u, "WARNING:11+i:red\n"},
+ /* trice16 ( trice16_2 ) */ {16383u, 16u, 2u, "WARNING:RTT0_writeDepthMax=%u (BUFFER_SIZE_UP=%u)\n"},
+ /* TRice ( TRice_0 ) */ {13000u, 32u, 0u, "WARNING:USARTq OverRun Error Flag is set!\n"},
+ /* TRice ( TRice_0 ) */ {13014u, 32u, 0u, "WARNING:USARTq OverRun Error Flag is set!\n"},
+ /* TRICE ( TRICE32_1 ) */ {14709u, 32u, 1u, "WR:write message, SysTick is %6u\n"},
+ /* TRICE ( TRICE_0 ) */ {13702u, 32u, 0u, "WRITE:black+u:yellow+h\n"},
+ /* trice ( trice_0 ) */ {13752u, 32u, 0u, "WRITE:black+u:yellow+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13802u, 32u, 0u, "WRITE:black+u:yellow+h\n"},
+ /* Trice ( Trice_0 ) */ {13852u, 32u, 0u, "WRITE:black+u:yellow+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13902u, 32u, 0u, "WRITE:black+u:yellow+h\n"},
+ /* TRice ( TRice_0 ) */ {13952u, 32u, 0u, "WRITE:black+u:yellow+h\n"},
+ /* TRICE ( TRICE32_1 ) */ {14702u, 32u, 1u, "WRN:warning message, SysTick is %6u\n"},
+ /* TRice ( TRice_0 ) */ {15282u, 32u, 0u, "World!\n"},
+ /* TRice ( TRice_0 ) */ {15288u, 32u, 0u, "World!\n"},
+ /* TRICE ( TRICE_0 ) */ {15244u, 32u, 0u, "\n"},
+ /* TRICE ( TRICE_0 ) */ {15247u, 32u, 0u, "\n"},
+ /* TRICE ( TRICE_0 ) */ {15250u, 32u, 0u, "\n"},
+ /* TRice ( TRice32_1 ) */ {13028u, 32u, 1u, "\rTriceCheck %4d"},
+ /* trice ( trice_0 ) */ {14797u, 32u, 0u, "a:c"},
+ /* trice ( trice_0 ) */ {14815u, 32u, 0u, "a:c"},
+ /* Trice32C ( Trice32C ) */ {3204u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "abc:DivideResult"},
+ /* trice32C ( trice32C ) */ {3448u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "abc:DivideResult"},
+ /* TRice32C ( TRice32C ) */ {4502u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "abc:DivideResult"},
+ /* trice32C ( trice32C ) */ {4557u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "abc:DivideResult"},
+ /* trice8C ( trice8C ) */ {2945u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "abc:LedsState"},
+ /* TRice8C ( TRice8C ) */ {4381u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "abc:LedsState"},
+ /* Trice8C ( Trice8C ) */ {5749u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "abc:LedsState"},
+ /* trice8C ( trice8C ) */ {7145u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "abc:LedsState"},
+ /* TRIce_C ( TRIce_C ) */ {15371u, 0u, 0u, "abc:all:GetState"},
+ /* TRICe_C ( TRICe_C ) */ {15849u, 0u, 0u, "abc:all:GetState"},
+ /* TRICE_C ( TRICE_C ) */ {15917u, 0u, 0u, "abc:all:GetState"},
+ /* triceC ( triceC ) */ {16005u, 0u, 0u, "abc:all:GetState"},
+ /* TriceC ( TriceC ) */ {16014u, 0u, 0u, "abc:all:GetState"},
+ /* TRiceC ( TRiceC ) */ {16241u, 0u, 0u, "abc:all:GetState"},
+ /* TRICE ( TRICE_0 ) */ {13738u, 32u, 0u, "alarm:red+i:white+h\n"},
+ /* trice ( trice_0 ) */ {13788u, 32u, 0u, "alarm:red+i:white+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13838u, 32u, 0u, "alarm:red+i:white+h\n"},
+ /* Trice ( Trice_0 ) */ {13888u, 32u, 0u, "alarm:red+i:white+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13938u, 32u, 0u, "alarm:red+i:white+h\n"},
+ /* TRice ( TRice_0 ) */ {13988u, 32u, 0u, "alarm:red+i:white+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13736u, 32u, 0u, "alert:magenta:magenta+h\n"},
+ /* trice ( trice_0 ) */ {13786u, 32u, 0u, "alert:magenta:magenta+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13836u, 32u, 0u, "alert:magenta:magenta+h\n"},
+ /* Trice ( Trice_0 ) */ {13886u, 32u, 0u, "alert:magenta:magenta+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13936u, 32u, 0u, "alert:magenta:magenta+h\n"},
+ /* TRice ( TRice_0 ) */ {13986u, 32u, 0u, "alert:magenta:magenta+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13737u, 32u, 0u, "assert:yellow+i:blue\n"},
+ /* trice ( trice_0 ) */ {13787u, 32u, 0u, "assert:yellow+i:blue\n"},
+ /* TRICE ( TRICE_0 ) */ {13837u, 32u, 0u, "assert:yellow+i:blue\n"},
+ /* Trice ( Trice_0 ) */ {13887u, 32u, 0u, "assert:yellow+i:blue\n"},
+ /* TRICE ( TRICE_0 ) */ {13937u, 32u, 0u, "assert:yellow+i:blue\n"},
+ /* TRice ( TRice_0 ) */ {13987u, 32u, 0u, "assert:yellow+i:blue\n"},
+ /* trice8B ( trice8B ) */ {13278u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "att: %02x\n"},
+ /* trice32B ( trice32B ) */ {13290u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "att: %08x\n"},
+ /* TRice16 ( TRice16_1 ) */ {13238u, 16u, 1u, "att: 0x8888 == %04xh\n"},
+ /* Trice16 ( Trice16_1 ) */ {13239u, 16u, 1u, "att: 0x8888 == %04xh\n"},
+ /* trice16 ( trice16_1 ) */ {13240u, 16u, 1u, "att: 0x8888 == %04xh\n"},
+ /* trice32 ( trice32_6 ) */ {13169u, 32u, 6u, "att: TriceEncrypted = %08x %08x %08x %08x %08x %08x\n"},
+ /* trice16 ( trice16_1 ) */ {13029u, 16u, 1u, "att: line %u\n"},
+ /* trice16 ( trice16_1 ) */ {13164u, 16u, 1u, "att: line %u\n"},
+ /* trice16 ( trice16_1 ) */ {13174u, 16u, 1u, "att: line %u\n"},
+ /* trice16 ( trice16_1 ) */ {13237u, 16u, 1u, "att: line %u\n"},
+ /* trice16 ( trice16_1 ) */ {13241u, 16u, 1u, "att: line %u\n"},
+ /* trice16 ( trice16_1 ) */ {13258u, 16u, 1u, "att: line %u\n"},
+ /* trice16 ( trice16_1 ) */ {13330u, 16u, 1u, "att: line %u\n"},
+ /* trice16 ( trice16_1 ) */ {13333u, 16u, 1u, "att: line %u\n"},
+ /* trice16 ( trice16_1 ) */ {13345u, 16u, 1u, "att: line %u\n"},
+ /* trice16 ( trice16_1 ) */ {13359u, 16u, 1u, "att: line %u\n"},
+ /* trice16 ( trice16_1 ) */ {13379u, 16u, 1u, "att: line %u\n"},
+ /* trice16 ( trice16_1 ) */ {13386u, 16u, 1u, "att: line %u\n"},
+ /* Trice16F ( Trice16F ) */ {16337u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "att:ARemoteFunctionName"},
+ /* Trice ( Trice32_3 ) */ {15254u, 32u, 3u, "att:MyStructEvaluationFunction(json:ExA{Apple:%d, Birn:%u, Fisch:%f})\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {14729u, 32u, 1u, "att:TRICE32 %40b\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {14732u, 64u, 1u, "att:TRICE64 %70b\n"},
+ /* TRICE ( TRICE_0 ) */ {15018u, 32u, 0u, "att:Various single arguments\n"},
+ /* TRICE ( TRICE_0 ) */ {15011u, 32u, 0u, "att:formatted double\n"},
+ /* TRICE ( TRICE_0 ) */ {15004u, 32u, 0u, "att:formatted float\n"},
+ /* trice ( trice_0 ) */ {13244u, 32u, 0u, "att:mixed int & float & double & bits\n"},
+ /* trice ( trice_0 ) */ {14991u, 32u, 0u, "att:negative float & double\n"},
+ /* trice ( trice_0 ) */ {14929u, 32u, 0u, "att:positive and negative float in format variants\n"},
+ /* trice ( trice_0 ) */ {14960u, 32u, 0u, "att:positive float & double in variants\n"},
+ /* TRICE32_0 ( TRICE_0 ) */ {16368u, 32u, 0u, "att:🐁 Speedy Gonzales A 32-bit time stamp\n"},
+ /* TRICE32_0 ( TRICE_0 ) */ {16367u, 32u, 0u, "att:🐁 Speedy Gonzales B 32-bit time stamp\n"},
+ /* TRICE32_0 ( TRICE_0 ) */ {16366u, 32u, 0u, "att:🐁 Speedy Gonzales C 32-bit time stamp\n"},
+ /* TRICE32_0 ( TRICE_0 ) */ {16365u, 32u, 0u, "att:🐁 Speedy Gonzales D 32-bit time stamp\n"},
+ /* TRICE32_0 ( TRICE_0 ) */ {16364u, 32u, 0u, "att:🐁 Speedy Gonzales E 16-bit time stamp\n"},
+ /* TRICE32_0 ( TRICE_0 ) */ {16363u, 32u, 0u, "att:🐁 Speedy Gonzales F 16-bit time stamp\n"},
+ /* TRICE32_0 ( TRICE_0 ) */ {16362u, 32u, 0u, "att:🐁 Speedy Gonzales G 16-bit time stamp\n"},
+ /* TRICE32_0 ( TRICE_0 ) */ {16361u, 32u, 0u, "att:🐁 Speedy Gonzales H 16-bit time stamp\n"},
+ /* TRICE32_0 ( TRICE_0 ) */ {16360u, 32u, 0u, "att:🐁 Speedy Gonzales I without time stamp\n"},
+ /* TRICE32_0 ( TRICE_0 ) */ {16359u, 32u, 0u, "att:🐁 Speedy Gonzales J without time stamp\n"},
+ /* TRICE32_0 ( TRICE_0 ) */ {16358u, 32u, 0u, "att:🐁 Speedy Gonzales K without time stamp\n"},
+ /* TRICE32_0 ( TRICE_0 ) */ {16357u, 32u, 0u, "att:🐁 Speedy Gonzales L without time stamp\n"},
+ /* TRice ( TRice_0 ) */ {16356u, 32u, 0u, "att:🐁 Speedy Gonzales a 32-bit time stamp\n"},
+ /* TRice ( TRice_0 ) */ {16355u, 32u, 0u, "att:🐁 Speedy Gonzales b 32-bit time stamp\n"},
+ /* TRice ( TRice_0 ) */ {16354u, 32u, 0u, "att:🐁 Speedy Gonzales c 32-bit time stamp\n"},
+ /* TRice ( TRice_0 ) */ {16353u, 32u, 0u, "att:🐁 Speedy Gonzales d 32-bit time stamp\n"},
+ /* Trice ( Trice_0 ) */ {16352u, 32u, 0u, "att:🐁 Speedy Gonzales e 16-bit time stamp\n"},
+ /* Trice ( Trice_0 ) */ {16351u, 32u, 0u, "att:🐁 Speedy Gonzales f 16-bit time stamp\n"},
+ /* Trice ( Trice_0 ) */ {16350u, 32u, 0u, "att:🐁 Speedy Gonzales g 16-bit time stamp\n"},
+ /* Trice ( Trice_0 ) */ {16349u, 32u, 0u, "att:🐁 Speedy Gonzales h 16-bit time stamp\n"},
+ /* trice ( trice_0 ) */ {16348u, 32u, 0u, "att:🐁 Speedy Gonzales i without time stamp\n"},
+ /* trice ( trice_0 ) */ {16347u, 32u, 0u, "att:🐁 Speedy Gonzales j without time stamp\n"},
+ /* trice ( trice_0 ) */ {16346u, 32u, 0u, "att:🐁 Speedy Gonzales k without time stamp\n"},
+ /* trice ( trice_0 ) */ {16345u, 32u, 0u, "att:🐁 Speedy Gonzales l without time stamp\n"},
+ /* TRICE ( TRICE_0 ) */ {13720u, 32u, 0u, "attention:11:green\n"},
+ /* trice ( trice_0 ) */ {13770u, 32u, 0u, "attention:11:green\n"},
+ /* TRICE ( TRICE_0 ) */ {13820u, 32u, 0u, "attention:11:green\n"},
+ /* Trice ( Trice_0 ) */ {13870u, 32u, 0u, "attention:11:green\n"},
+ /* TRICE ( TRICE_0 ) */ {13920u, 32u, 0u, "attention:11:green\n"},
+ /* TRice ( TRice_0 ) */ {13970u, 32u, 0u, "attention:11:green\n"},
+ /* TRice8F ( TRice8F ) */ {13297u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWb"},
+ /* TRice8C ( TRice8C ) */ {15344u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWb"},
+ /* Trice8F ( Trice8F ) */ {13298u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWc"},
+ /* Trice8C ( Trice8C ) */ {15739u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWc"},
+ /* trice8F ( trice8F ) */ {13299u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWd"},
+ /* trice8C ( trice8C ) */ {15310u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWd"},
+ /* trice8C ( trice8C ) */ {15647u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWd"},
+ /* trice8C ( trice8C ) */ {15815u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWd"},
+ /* trice8C ( trice8C ) */ {15827u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWd"},
+ /* trice8C ( trice8C ) */ {16089u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWd"},
+ /* TRice16F ( TRice16F ) */ {13301u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXb"},
+ /* TRice16C ( TRice16C ) */ {15976u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXb"},
+ /* Trice16F ( Trice16F ) */ {13302u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXc"},
+ /* Trice16C ( Trice16C ) */ {15339u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXc"},
+ /* trice16F ( trice16F ) */ {13303u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXd"},
+ /* trice16C ( trice16C ) */ {15618u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXd"},
+ /* trice16C ( trice16C ) */ {15650u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXd"},
+ /* trice16C ( trice16C ) */ {15893u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXd"},
+ /* trice16C ( trice16C ) */ {16098u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXd"},
+ /* trice16C ( trice16C ) */ {16268u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXd"},
+ /* trice32F ( trice32F ) */ {13307u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameYd"},
+ /* trice32F ( trice32F ) */ {15303u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameYd"},
+ /* trice32C ( trice32C ) */ {15837u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameYd"},
+ /* TRice64F ( TRice64F ) */ {13309u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameZb"},
+ /* TRice64F ( TRice64F ) */ {15305u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameZb"},
+ /* TRice64C ( TRice64C ) */ {15559u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameZb"},
+ /* Trice32C ( Trice32C ) */ {1490u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:divide"},
+ /* trice32C ( trice32C ) */ {4499u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:divide"},
+ /* TRice32C ( TRice32C ) */ {5642u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:divide"},
+ /* Trice32C ( Trice32C ) */ {6059u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:divide"},
+ /* TRiceC ( TRiceC ) */ {1512u, 0u, 0u, "cmd:getLeds"},
+ /* TRiceC ( TRiceC ) */ {1737u, 0u, 0u, "cmd:getLeds"},
+ /* TriceC ( TriceC ) */ {2968u, 0u, 0u, "cmd:getLeds"},
+ /* TRiceC ( TRiceC ) */ {3945u, 0u, 0u, "cmd:getLeds"},
+ /* TriceC ( TriceC ) */ {4650u, 0u, 0u, "cmd:getLeds"},
+ /* triceC ( triceC ) */ {4818u, 0u, 0u, "cmd:getLeds"},
+ /* TriceC ( TriceC ) */ {6227u, 0u, 0u, "cmd:getLeds"},
+ /* triceC ( triceC ) */ {7171u, 0u, 0u, "cmd:getLeds"},
+ /* triceC ( triceC ) */ {7313u, 0u, 0u, "cmd:getLeds"},
+ /* triceC ( triceC ) */ {1716u, 0u, 0u, "cmd:logState"},
+ /* TriceC ( TriceC ) */ {2261u, 0u, 0u, "cmd:logState"},
+ /* triceC ( triceC ) */ {3578u, 0u, 0u, "cmd:logState"},
+ /* triceC ( triceC ) */ {4208u, 0u, 0u, "cmd:logState"},
+ /* TriceC ( TriceC ) */ {7084u, 0u, 0u, "cmd:logState"},
+ /* TriceC ( TriceC ) */ {7522u, 0u, 0u, "cmd:logState"},
+ /* trice8C ( trice8C ) */ {3792u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setKey"},
+ /* trice8C ( trice8C ) */ {3925u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setKey"},
+ /* Trice8C ( Trice8C ) */ {5155u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setKey"},
+ /* Trice8C ( Trice8C ) */ {5517u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setKey"},
+ /* trice8C ( trice8C ) */ {6890u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setKey"},
+ /* Trice8C ( Trice8C ) */ {7383u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setKey"},
+ /* Trice8C ( Trice8C ) */ {2859u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setLeds"},
+ /* trice8C ( trice8C ) */ {5150u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setLeds"},
+ /* Trice8C ( Trice8C ) */ {5768u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setLeds"},
+ /* trice8C ( trice8C ) */ {6278u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setLeds"},
+ /* Trice8C ( Trice8C ) */ {6603u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setLeds"},
+ /* trice8C ( trice8C ) */ {7431u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setLeds"},
+ /* TRICE ( TRICE_0 ) */ {13716u, 32u, 0u, "critical:red+i:default+h\n"},
+ /* trice ( trice_0 ) */ {13766u, 32u, 0u, "critical:red+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13816u, 32u, 0u, "critical:red+i:default+h\n"},
+ /* Trice ( Trice_0 ) */ {13866u, 32u, 0u, "critical:red+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13916u, 32u, 0u, "critical:red+i:default+h\n"},
+ /* TRice ( TRice_0 ) */ {13966u, 32u, 0u, "critical:red+i:default+h\n"},
+ /* trice ( trice_0 ) */ {14801u, 32u, 0u, "d:G"},
+ /* trice ( trice32_3 ) */ {16326u, 32u, 3u, "d:_SINGLE_MAX_SIZE=%d, _BUFFER_SIZE=%d, _DEFERRED_BUFFER_SIZE=%d\n"},
+ /* trice ( trice_0 ) */ {13176u, 32u, 0u, "dbg:\tHi!\n"},
+ /* TRICE ( TRICE32_1 ) */ {14697u, 32u, 1u, "dbg:12345 as 16bit is %016b\n"},
+ /* trice8 ( trice8_1 ) */ {13026u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration with direct RTT output and parallel deferred UART output.\n"},
+ /* trice8 ( trice8_1 ) */ {13023u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration with direct RTT output only and optimized for speed\n"},
+ /* trice8 ( trice8_1 ) */ {13010u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n"},
+ /* trice8 ( trice8_1 ) */ {13011u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n"},
+ /* trice8 ( trice8_1 ) */ {13012u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n"},
+ /* trice8 ( trice8_1 ) */ {13013u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n"},
+ /* trice8 ( trice8_1 ) */ {13016u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n"},
+ /* trice8 ( trice8_1 ) */ {13017u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n"},
+ /* trice8 ( trice8_1 ) */ {13018u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n"},
+ /* trice8 ( trice8_1 ) */ {13020u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n"},
+ /* trice8 ( trice8_1 ) */ {13021u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n"},
+ /* trice8 ( trice8_1 ) */ {13027u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n"},
+ /* trice8 ( trice8_1 ) */ {13025u, 8u, 1u, "dbg:CONFIGURATION == %d - An minimum configuration example.\n"},
+ /* trice8 ( trice8_1 ) */ {13024u, 8u, 1u, "dbg:CONFIGURATION == %d - UART, no cycle counter, no critical sections.\n"},
+ /* trice ( trice_0 ) */ {13175u, 32u, 0u, "dbg:Hi!\n"},
+ /* trice ( trice_0 ) */ {14805u, 32u, 0u, "dbg:k\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {13388u, 32u, 1u, "dbg:len=%u:"},
+ /* TRICE32 ( TRICE32_1 ) */ {13390u, 32u, 1u, "dbg:len=%u:"},
+ /* TRICE32 ( TRICE32_1 ) */ {13392u, 32u, 1u, "dbg:len=%u: "},
+ /* TRICE32 ( TRICE32_1 ) */ {13394u, 32u, 1u, "dbg:len=%u: "},
+ /* TRICE32 ( TRICE32_1 ) */ {13396u, 32u, 1u, "dbg:len=%u: "},
+ /* trice ( trice32_2 ) */ {16334u, 32u, 2u, "deb:TRICE_DIRECT_OUTPUT == %d, TRICE_DEFERRED_OUTPUT == %d\n"},
+ /* trice ( trice_0 ) */ {16331u, 32u, 0u, "deb:TRICE_DOUBLE_BUFFER, "},
+ /* trice ( trice_0 ) */ {16328u, 32u, 0u, "deb:TRICE_MULTI_PACK_MODE\n"},
+ /* trice ( trice_0 ) */ {16330u, 32u, 0u, "deb:TRICE_RING_BUFFER, "},
+ /* trice ( trice_0 ) */ {16329u, 32u, 0u, "deb:TRICE_SINGLE_PACK_MODE\n"},
+ /* trice ( trice_0 ) */ {16333u, 32u, 0u, "deb:TRICE_STACK_BUFFER, "},
+ /* trice ( trice_0 ) */ {16332u, 32u, 0u, "deb:TRICE_STATIC_BUFFER, "},
+ /* trice ( trice32_4 ) */ {16327u, 32u, 4u, "deb:_CYCLE == %d, _PROTECT == %d, _DIAG == %d, XTEA == %d\n"},
+ /* TRICE ( TRICE_0 ) */ {13722u, 32u, 0u, "debug:130+i\n"},
+ /* trice ( trice_0 ) */ {13772u, 32u, 0u, "debug:130+i\n"},
+ /* TRICE ( TRICE_0 ) */ {13822u, 32u, 0u, "debug:130+i\n"},
+ /* Trice ( Trice_0 ) */ {13872u, 32u, 0u, "debug:130+i\n"},
+ /* TRICE ( TRICE_0 ) */ {13922u, 32u, 0u, "debug:130+i\n"},
+ /* TRice ( TRice_0 ) */ {13972u, 32u, 0u, "debug:130+i\n"},
+ /* TRICE ( TRICE_0 ) */ {13734u, 32u, 0u, "default:off\n"},
+ /* trice ( trice_0 ) */ {13784u, 32u, 0u, "default:off\n"},
+ /* TRICE ( TRICE_0 ) */ {13834u, 32u, 0u, "default:off\n"},
+ /* Trice ( Trice_0 ) */ {13884u, 32u, 0u, "default:off\n"},
+ /* TRICE ( TRICE_0 ) */ {13934u, 32u, 0u, "default:off\n"},
+ /* TRice ( TRice_0 ) */ {13984u, 32u, 0u, "default:off\n"},
+ /* trice16 ( trice16_2 ) */ {16382u, 16u, 2u, "diag:RTT0_writeDepthMax=%u (BUFFER_SIZE_UP=%u)\n"},
+ /* trice16 ( trice16_2 ) */ {16375u, 16u, 2u, "diag:TriceDataOffsetDepthMax = %d of %d (TRICE_DATA_OFFSET)\n"},
+ /* trice16 ( trice16_2 ) */ {16373u, 16u, 2u, "diag:TriceHalfBufferDepthMax =%4u of%5d\n"},
+ /* trice ( trice_0 ) */ {14800u, 32u, 0u, "diag:f"},
+ /* trice ( trice_0 ) */ {14818u, 32u, 0u, "diag:f"},
+ /* trice16 ( trice16_2 ) */ {16371u, 16u, 2u, "diag:triceRingBufferDepthMax =%4u of%5d\n"},
+ /* trice16 ( trice16_2 ) */ {16378u, 16u, 2u, "diag:triceSingleDepthMax =%4u of %d (TRICE_BUFFER_SIZE)\n"},
+ /* TRICE ( TRICE_0 ) */ {13730u, 32u, 0u, "diag:yellow+i:default+h\n"},
+ /* trice ( trice_0 ) */ {13780u, 32u, 0u, "diag:yellow+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13830u, 32u, 0u, "diag:yellow+i:default+h\n"},
+ /* Trice ( Trice_0 ) */ {13880u, 32u, 0u, "diag:yellow+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13930u, 32u, 0u, "diag:yellow+i:default+h\n"},
+ /* TRice ( TRice_0 ) */ {13980u, 32u, 0u, "diag:yellow+i:default+h\n"},
+ /* trice ( trice_0 ) */ {14810u, 32u, 0u, "e:7"},
+ /* trice ( trice_0 ) */ {14795u, 32u, 0u, "e:A"},
+ /* trice ( trice_0 ) */ {14813u, 32u, 0u, "e:A"},
+ /* TRICE ( TRICE_0 ) */ {13717u, 32u, 0u, "emergency:red+i:blue\n"},
+ /* trice ( trice_0 ) */ {13767u, 32u, 0u, "emergency:red+i:blue\n"},
+ /* TRICE ( TRICE_0 ) */ {13817u, 32u, 0u, "emergency:red+i:blue\n"},
+ /* Trice ( Trice_0 ) */ {13867u, 32u, 0u, "emergency:red+i:blue\n"},
+ /* TRICE ( TRICE_0 ) */ {13917u, 32u, 0u, "emergency:red+i:blue\n"},
+ /* TRice ( TRice_0 ) */ {13967u, 32u, 0u, "emergency:red+i:blue\n"},
+ /* trice16 ( trice16_2 ) */ {16376u, 16u, 2u, "err:TriceDataOffsetDepthMax = %d of %d (TRICE_DATA_OFFSET)\n"},
+ /* trice16 ( trice16_1 ) */ {16379u, 16u, 1u, "err:TriceDeferredOverflowCount = %u\n"},
+ /* trice16 ( trice16_1 ) */ {16380u, 16u, 1u, "err:TriceDirectOverflowCount = %u\n"},
+ /* trice16 ( trice16_1 ) */ {16381u, 16u, 1u, "err:TriceErrorCount = %u\n"},
+ /* trice16 ( trice16_2 ) */ {16372u, 16u, 2u, "err:TriceHalfBufferDepthMax =%4u of%5d (overflow!)\n"},
+ /* trice16 ( trice16_2 ) */ {16370u, 16u, 2u, "err:triceRingBufferDepthMax =%4u of%5d (overflow!)\n"},
+ /* trice16 ( trice16_2 ) */ {16377u, 16u, 2u, "err:triceSingleDepthMax =%4u of %d (TRICE_BUFFER_SIZE overflow!)\n"},
+ /* TRICE ( TRICE_0 ) */ {13718u, 32u, 0u, "error:11:red\n"},
+ /* trice ( trice_0 ) */ {13768u, 32u, 0u, "error:11:red\n"},
+ /* TRICE ( TRICE_0 ) */ {13818u, 32u, 0u, "error:11:red\n"},
+ /* Trice ( Trice_0 ) */ {13868u, 32u, 0u, "error:11:red\n"},
+ /* TRICE ( TRICE_0 ) */ {13918u, 32u, 0u, "error:11:red\n"},
+ /* TRice ( TRice_0 ) */ {13968u, 32u, 0u, "error:11:red\n"},
+ /* TRICE ( TRICE_0 ) */ {13715u, 32u, 0u, "fatal:magenta+b:red\n"},
+ /* trice ( trice_0 ) */ {13765u, 32u, 0u, "fatal:magenta+b:red\n"},
+ /* TRICE ( TRICE_0 ) */ {13815u, 32u, 0u, "fatal:magenta+b:red\n"},
+ /* Trice ( Trice_0 ) */ {13865u, 32u, 0u, "fatal:magenta+b:red\n"},
+ /* TRICE ( TRICE_0 ) */ {13915u, 32u, 0u, "fatal:magenta+b:red\n"},
+ /* TRice ( TRice_0 ) */ {13965u, 32u, 0u, "fatal:magenta+b:red\n"},
+ /* Trice ( Trice32_2 ) */ {16335u, 32u, 2u, "i=%x %x\n"},
+ /* TRICE ( TRICE_0 ) */ {15245u, 32u, 0u, "inf: Tryout buffer:"},
+ /* TRICE ( TRICE_0 ) */ {15248u, 32u, 0u, "inf: Tryout rx struct:"},
+ /* TRICE ( TRICE_0 ) */ {15242u, 32u, 0u, "inf: Tryout tx struct:"},
+ /* TRICE ( TRICE32_2 ) */ {15251u, 32u, 2u, "inf:sizeOf(Trypout) = %d, buffer length = %d\n"},
+ /* trice ( trice32_1 ) */ {16336u, 32u, 1u, "info:%d times a 16 byte long Trice messages, which may not be written all if the buffer is too small:\n"},
+ /* Trice8 ( Trice8_12 ) */ {13235u, 8u, 12u, "info:12 8-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and a 16-bit stamp.\n"},
+ /* TRice8 ( TRice8_12 ) */ {13234u, 8u, 12u, "info:12 8-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and a 32-bit stamp.\n"},
+ /* trice8 ( trice8_12 ) */ {13236u, 8u, 12u, "info:12 8-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and without stamp.\n"},
+ /* Trice16 ( Trice16_12 ) */ {13232u, 16u, 12u, "info:12 16-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and a 16-bit stamp.\n"},
+ /* TRice16 ( TRice16_12 ) */ {13231u, 16u, 12u, "info:12 16-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and a 32-bit stamp.\n"},
+ /* trice16 ( trice16_12 ) */ {13233u, 16u, 12u, "info:12 16-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and without stamp.\n"},
+ /* Trice32 ( Trice32_12 ) */ {13229u, 32u, 12u, "info:12 32-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and a 16-bit stamp.\n"},
+ /* TRice32 ( TRice32_12 ) */ {13228u, 32u, 12u, "info:12 32-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and a 32-bit stamp.\n"},
+ /* trice32 ( trice32_12 ) */ {13230u, 32u, 12u, "info:12 32-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and without stamp.\n"},
+ /* Trice64 ( Trice64_12 ) */ {13223u, 64u, 12u, "info:12 64-bit values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 16-bit stamp.\n"},
+ /* TRice64 ( TRice64_12 ) */ {13222u, 64u, 12u, "info:12 64-bit values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 32-bit stamp.\n"},
+ /* trice64 ( trice64_12 ) */ {13224u, 64u, 12u, "info:12 64-bit values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and without stamp.\n"},
+ /* Trice64 ( Trice64_12 ) */ {13226u, 64u, 12u, "info:12 64-bit values %d, %zu, %x, %lX, %t, %e, %Lf, %g, %E, %F, %G, 0xb%08b and a 16-bit stamp.\n"},
+ /* TRice64 ( TRice64_12 ) */ {13225u, 64u, 12u, "info:12 64-bit values %d, %zu, %x, %lX, %t, %e, %Lf, %g, %E, %F, %G, 0xb%08b and a 32-bit stamp.\n"},
+ /* trice64 ( trice64_12 ) */ {13227u, 64u, 12u, "info:12 64-bit values %d, %zu, %x, %lX, %t, %e, %Lf, %g, %E, %F, %G, 0xb%08b and without stamp.\n"},
+ /* trice ( trice32_12 ) */ {13385u, 32u, 12u, "info:12 default bit width values %d, %llu, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and without stamp.\n"},
+ /* Trice ( Trice32_12 ) */ {13384u, 32u, 12u, "info:12 default bit width values %d, %lu, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 16-bit stamp.\n"},
+ /* Trice ( Trice32_12 ) */ {13381u, 32u, 12u, "info:12 default bit width values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 16-bit stamp.\n"},
+ /* TRice ( TRice32_12 ) */ {13380u, 32u, 12u, "info:12 default bit width values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 32-bit stamp.\n"},
+ /* trice ( trice32_12 ) */ {13382u, 32u, 12u, "info:12 default bit width values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and without stamp.\n"},
+ /* TRice ( TRice32_12 ) */ {13383u, 32u, 12u, "info:12 default bit width values %d, %zu, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 32-bit stamp.\n"},
+ /* TRICE ( TRICE32_12 ) */ {13499u, 32u, 12u, "info:12 values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 16-bit stamp.\n"},
+ /* TRICE32 ( TRICE32_12 ) */ {13502u, 32u, 12u, "info:12 values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 16-bit stamp.\n"},
+ /* TRICE ( TRICE32_12 ) */ {13498u, 32u, 12u, "info:12 values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 32-bit stamp.\n"},
+ /* TRICE32 ( TRICE32_12 ) */ {13501u, 32u, 12u, "info:12 values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 32-bit stamp.\n"},
+ /* TRICE ( TRICE32_12 ) */ {13500u, 32u, 12u, "info:12 values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and without stamp.\n"},
+ /* TRICE32 ( TRICE32_12 ) */ {13503u, 32u, 12u, "info:12 values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and without stamp.\n"},
+ /* Trice ( Trice_0 ) */ {16340u, 32u, 0u, "info:A Buffer:\n"},
+ /* TRICE8_F ( TRICE8F ) */ {13296u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameWa"},
+ /* TRICE8_F ( TRICE8F ) */ {15292u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameWa"},
+ /* TRICe8_C ( TRICe8_C ) */ {15689u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameWa"},
+ /* TRIce8_C ( TRIce8_C ) */ {16111u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameWa"},
+ /* TRICE8_C ( TRICE8_C ) */ {16176u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameWa"},
+ /* TRice8F ( TRice8F ) */ {15293u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameWb"},
+ /* Trice8F ( Trice8F ) */ {15294u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameWc"},
+ /* trice8F ( trice8F ) */ {15295u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameWd"},
+ /* TRICE16_F ( TRICE16F ) */ {13300u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameXa"},
+ /* TRICE16_F ( TRICE16F ) */ {15296u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameXa"},
+ /* TRICe16_C ( TRICe16_C ) */ {15547u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameXa"},
+ /* TRICE16_C ( TRICE16_C ) */ {15754u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameXa"},
+ /* TRIce16_C ( TRIce16_C ) */ {15996u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameXa"},
+ /* TRice16F ( TRice16F ) */ {15297u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameXb"},
+ /* Trice16F ( Trice16F ) */ {15298u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameXc"},
+ /* trice16F ( trice16F ) */ {15299u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameXd"},
+ /* TRICE32_F ( TRICE32F ) */ {13304u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa"},
+ /* TRICE32_F ( TRICE32F ) */ {15300u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa"},
+ /* TRIce32_C ( TRIce32_C ) */ {15311u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa"},
+ /* TRIce32_C ( TRIce32_C ) */ {15374u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa"},
+ /* TRIce32_C ( TRIce32_C ) */ {15519u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa"},
+ /* TRICe32_C ( TRICe32_C ) */ {15578u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa"},
+ /* TRICE32_C ( TRICE32_C ) */ {15606u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa"},
+ /* TRIce32_C ( TRIce32_C ) */ {15698u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa"},
+ /* TRIce32_C ( TRIce32_C ) */ {16246u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa"},
+ /* TRICE64_F ( TRICE64F ) */ {13308u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameZa"},
+ /* TRICE64_F ( TRICE64F ) */ {15304u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameZa"},
+ /* TRIce64_C ( TRIce64_C ) */ {15354u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameZa"},
+ /* TRICE64_C ( TRICE64_C ) */ {15607u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameZa"},
+ /* TRICe64_C ( TRICe64_C ) */ {15657u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameZa"},
+ /* Trice ( Trice32_1 ) */ {13490u, 32u, 1u, "info:This is a message with one value %d and a 16-bit stamp.\n"},
+ /* TRICE ( TRICE32_1 ) */ {13496u, 32u, 1u, "info:This is a message with one value %d and a 16-bit stamp.\n"},
+ /* TRice ( TRice32_1 ) */ {13489u, 32u, 1u, "info:This is a message with one value %d and a 32-bit stamp.\n"},
+ /* TRICE ( TRICE32_1 ) */ {13495u, 32u, 1u, "info:This is a message with one value %d and a 32-bit stamp.\n"},
+ /* trice ( trice32_1 ) */ {13491u, 32u, 1u, "info:This is a message with one value %d and without stamp.\n"},
+ /* TRICE ( TRICE32_1 ) */ {13497u, 32u, 1u, "info:This is a message with one value %d and without stamp.\n"},
+ /* Trice ( Trice_0 ) */ {13032u, 32u, 0u, "info:This is a message without values and a 16-bit stamp.\n"},
+ /* TRICE ( TRICE_0 ) */ {13493u, 32u, 0u, "info:This is a message without values and a 16-bit stamp.\n"},
+ /* TRice ( TRice_0 ) */ {13031u, 32u, 0u, "info:This is a message without values and a 32-bit stamp.\n"},
+ /* TRICE ( TRICE_0 ) */ {13492u, 32u, 0u, "info:This is a message without values and a 32-bit stamp.\n"},
+ /* trice ( trice_0 ) */ {13033u, 32u, 0u, "info:This is a message without values and without stamp.\n"},
+ /* TRICE ( TRICE_0 ) */ {13494u, 32u, 0u, "info:This is a message without values and without stamp.\n"},
+ /* TRICE8_F ( TRICE8F ) */ {15253u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:TryoutBufferFunction"},
+ /* TRICE8_F ( TRICE8F ) */ {15252u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:TryoutStructFunction"},
+ /* TRICE ( TRICE_0 ) */ {13721u, 32u, 0u, "info:cyan+b:default+h\n"},
+ /* trice ( trice_0 ) */ {13771u, 32u, 0u, "info:cyan+b:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13821u, 32u, 0u, "info:cyan+b:default+h\n"},
+ /* Trice ( Trice_0 ) */ {13871u, 32u, 0u, "info:cyan+b:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13921u, 32u, 0u, "info:cyan+b:default+h\n"},
+ /* TRice ( TRice_0 ) */ {13971u, 32u, 0u, "info:cyan+b:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13731u, 32u, 0u, "interrupt:magenta+i:default+h\n"},
+ /* trice ( trice_0 ) */ {13781u, 32u, 0u, "interrupt:magenta+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13831u, 32u, 0u, "interrupt:magenta+i:default+h\n"},
+ /* Trice ( Trice_0 ) */ {13881u, 32u, 0u, "interrupt:magenta+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13931u, 32u, 0u, "interrupt:magenta+i:default+h\n"},
+ /* TRice ( TRice_0 ) */ {13981u, 32u, 0u, "interrupt:magenta+i:default+h\n"},
+ /* trice ( trice32_1 ) */ {13007u, 32u, 1u, "isr:TIM17_FDCAN_IT1_IRQHandler! (%u ms)\n"},
+ /* TRICE ( TRICE32_1 ) */ {13194u, 32u, 1u, "isr:TRICE isr message, SysTick is %6d\n"},
+ /* TRICE ( TRICE32_1 ) */ {13195u, 32u, 1u, "isr:TRICE isr message, SysTick is %6d\n"},
+ /* TRICE ( TRICE32_1 ) */ {13196u, 32u, 1u, "isr:TRICE isr message, SysTick is %6d\n"},
+ /* TRICE ( TRICE32_1 ) */ {13197u, 32u, 1u, "isr:TRICE isr message, SysTick is %6d\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {13186u, 16u, 1u, "isr:TRICE16_1 isr message, SysTick is %6d\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {13187u, 16u, 1u, "isr:TRICE16_1 isr message, SysTick is %6d\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {13188u, 16u, 1u, "isr:TRICE16_1 isr message, SysTick is %6d\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {13189u, 16u, 1u, "isr:TRICE16_1 isr message, SysTick is %6d\n"},
+ /* TRICE_1 ( TRICE32_1 ) */ {13190u, 32u, 1u, "isr:TRICE_1 isr message, SysTick is %6d\n"},
+ /* TRICE_1 ( TRICE32_1 ) */ {13191u, 32u, 1u, "isr:TRICE_1 isr message, SysTick is %6d\n"},
+ /* TRICE_1 ( TRICE32_1 ) */ {13192u, 32u, 1u, "isr:TRICE_1 isr message, SysTick is %6d\n"},
+ /* TRICE_1 ( TRICE32_1 ) */ {13193u, 32u, 1u, "isr:TRICE_1 isr message, SysTick is %6d\n"},
+ /* trice ( trice32_1 ) */ {13178u, 32u, 1u, "isr:trice isr message, SysTick is %6d\n"},
+ /* trice ( trice32_1 ) */ {13179u, 32u, 1u, "isr:trice isr message, SysTick is %6ld\n"},
+ /* trice ( trice32_1 ) */ {13180u, 32u, 1u, "isr:trice isr message, SysTick is %6lld\n"},
+ /* trice ( trice32_1 ) */ {13181u, 32u, 1u, "isr:trice isr message, SysTick is %6zd\n"},
+ /* trice_1 ( trice32_1 ) */ {13182u, 32u, 1u, "isr:trice_1 isr message, SysTick is %6d\n"},
+ /* trice_1 ( trice32_1 ) */ {13183u, 32u, 1u, "isr:trice_1 isr message, SysTick is %6d\n"},
+ /* trice_1 ( trice32_1 ) */ {13184u, 32u, 1u, "isr:trice_1 isr message, SysTick is %6d\n"},
+ /* trice_1 ( trice32_1 ) */ {13185u, 32u, 1u, "isr:trice_1 isr message, SysTick is %6d\n"},
+ /* trice64 ( trice64_6 ) */ {13091u, 64u, 6u, "len:float-L %Le %Lf %Lg %LE %LF %LG\n"},
+ /* trice64 ( trice64_6 ) */ {13090u, 64u, 6u, "len:float-l %le %lf %lg %lE %lF %lG\n"},
+ /* trice16 ( trice16_8 ) */ {13084u, 16u, 8u, "len:h %hd %hi %hu %ho %hO %hx %hX %hb\n"},
+ /* trice8 ( trice8_8 ) */ {13083u, 8u, 8u, "len:hh %hhd %hhi %hhu %hho %hhO %hhx %hhX %hhb\n"},
+ /* trice64 ( trice64_8 ) */ {13087u, 64u, 8u, "len:j %jd %ji %ju %jo %jO %jx %jX %jb\n"},
+ /* trice32 ( trice32_8 ) */ {13085u, 32u, 8u, "len:l %ld %li %lu %lo %lO %lx %lX %lb\n"},
+ /* trice64 ( trice64_8 ) */ {13086u, 64u, 8u, "len:ll %lld %lli %llu %llo %llO %llx %llX %llb\n"},
+ /* trice64 ( trice64_8 ) */ {13089u, 64u, 8u, "len:t %td %ti %tu %to %tO %tx %tX %tb\n"},
+ /* trice64 ( trice64_8 ) */ {13088u, 64u, 8u, "len:z %zd %zi %zu %zo %zO %zx %zX %zb\n"},
+ /* trice ( trice32_2 ) */ {1101u, 32u, 2u, "log:(from node=N1_tx) from=%u phase=%u\n"},
+ /* triceS ( triceS ) */ {6812u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "log:(from node=N1_tx) text=%s\n"},
+ /* trice ( trice32_1 ) */ {5054u, 32u, 1u, "log:(from node=N1_tx) tick=%u\n"},
+ /* trice ( trice32_2 ) */ {7672u, 32u, 2u, "log:(from node=N2_tx) from=%u phase=%u\n"},
+ /* triceS ( triceS ) */ {1578u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "log:(from node=N2_tx) text=%s\n"},
+ /* trice ( trice32_1 ) */ {5937u, 32u, 1u, "log:(from node=N2_tx) tick=%u\n"},
+ /* trice ( trice32_2 ) */ {1071u, 32u, 2u, "log:(from node=N3_bi) from=%u phase=%u\n"},
+ /* triceS ( triceS ) */ {6394u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "log:(from node=N3_bi) text=%s\n"},
+ /* trice ( trice32_1 ) */ {2001u, 32u, 1u, "log:(from node=N3_bi) tick=%u\n"},
+ /* trice ( trice32_2 ) */ {1126u, 32u, 2u, "log:from=%u phase=%u\n"},
+ /* trice ( trice32_2 ) */ {1219u, 32u, 2u, "log:from=%u phase=%u\n"},
+ /* trice ( trice32_2 ) */ {3310u, 32u, 2u, "log:from=%u phase=%u\n"},
+ /* trice ( trice32_2 ) */ {5460u, 32u, 2u, "log:from=%u phase=%u\n"},
+ /* trice ( trice32_2 ) */ {2100u, 32u, 2u, "log:node=N1_tx, from=%u phase=%u\n"},
+ /* trice ( trice32_1 ) */ {7794u, 32u, 1u, "log:node=N1_tx, tick=%u\n"},
+ /* trice ( trice32_2 ) */ {6365u, 32u, 2u, "log:node=N2_tx, from=%u phase=%u\n"},
+ /* triceS ( triceS ) */ {4972u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "log:node=N2_tx, text=%s\n"},
+ /* trice ( trice32_1 ) */ {6962u, 32u, 1u, "log:node=N2_tx, tick=%u\n"},
+ /* trice ( trice32_2 ) */ {6779u, 32u, 2u, "log:node=N3_bi, from=%u phase=%u\n"},
+ /* triceS ( triceS ) */ {7709u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "log:node=N3_bi, text=%s\n"},
+ /* trice ( trice32_1 ) */ {4017u, 32u, 1u, "log:node=N3_bi, tick=%u\n"},
+ /* triceS ( triceS ) */ {1861u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "log:text=%s\n"},
+ /* triceS ( triceS ) */ {4470u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "log:text=%s\n"},
+ /* triceS ( triceS ) */ {5017u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "log:text=%s\n"},
+ /* triceS ( triceS ) */ {7615u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "log:text=%s\n"},
+ /* trice ( trice32_1 ) */ {2034u, 32u, 1u, "log:tick=%u\n"},
+ /* trice ( trice32_1 ) */ {4364u, 32u, 1u, "log:tick=%u\n"},
+ /* trice ( trice32_1 ) */ {5074u, 32u, 1u, "log:tick=%u\n"},
+ /* trice ( trice32_1 ) */ {6949u, 32u, 1u, "log:tick=%u\n"},
+ /* trice ( trice_0 ) */ {14811u, 32u, 0u, "m:12"},
+ /* trice ( trice_0 ) */ {14812u, 32u, 0u, "m:123\n"},
+ /* trice ( trice_0 ) */ {14804u, 32u, 0u, "message:J"},
+ /* TRICE ( TRICE_0 ) */ {13725u, 32u, 0u, "message:green+h:black\n"},
+ /* trice ( trice_0 ) */ {13775u, 32u, 0u, "message:green+h:black\n"},
+ /* TRICE ( TRICE_0 ) */ {13825u, 32u, 0u, "message:green+h:black\n"},
+ /* Trice ( Trice_0 ) */ {13875u, 32u, 0u, "message:green+h:black\n"},
+ /* TRICE ( TRICE_0 ) */ {13925u, 32u, 0u, "message:green+h:black\n"},
+ /* TRice ( TRice_0 ) */ {13975u, 32u, 0u, "message:green+h:black\n"},
+ /* trice16B ( trice16B ) */ {13285u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg: %04x\n"},
+ /* trice32 ( trice32_6 ) */ {13166u, 32u, 6u, "msg: message = %08x %08x %08x %08x %08x %08x\n"},
+ /* trice32 ( trice32_6 ) */ {13172u, 32u, 6u, "msg: messge = %08x %08x %08x %08x %08x %08x\n"},
+ /* Trice64 ( Trice64_1 ) */ {16343u, 64u, 1u, "msg:%.20f (double with more ciphers than precision)\n"},
+ /* Trice ( Trice32_1 ) */ {16342u, 32u, 1u, "msg:%.20f (float with more ciphers than precision)\n"},
+ /* Trice8B ( Trice8B ) */ {16339u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%02x \n"},
+ /* Trice32B ( Trice32B ) */ {16338u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%08x \n"},
+ /* trice32 ( trice32_1 ) */ {13413u, 32u, 1u, "msg:%O (%%O)\n"},
+ /* trice64 ( trice64_1 ) */ {13420u, 64u, 1u, "msg:%O (%%O)\n"},
+ /* trice32 ( trice32_1 ) */ {13414u, 32u, 1u, "msg:%X (%%X)\n"},
+ /* trice64 ( trice64_1 ) */ {13421u, 64u, 1u, "msg:%X (%%X)\n"},
+ /* trice32 ( trice32_1 ) */ {13411u, 32u, 1u, "msg:%b (%%b)\n"},
+ /* trice64 ( trice64_1 ) */ {13418u, 64u, 1u, "msg:%b (%%b)\n"},
+ /* trice32 ( trice32_1 ) */ {13416u, 32u, 1u, "msg:%d (%%d)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {13990u, 64u, 1u, "msg:%d (%%d)\n"},
+ /* Trice ( Trice32_1 ) */ {16341u, 32u, 1u, "msg:%f (default rounded float)\n"},
+ /* trice32 ( trice32_1 ) */ {13412u, 32u, 1u, "msg:%o (%%o)\n"},
+ /* trice64 ( trice64_1 ) */ {13419u, 64u, 1u, "msg:%o (%%o)\n"},
+ /* TRICE_N ( TRICE_N ) */ {15042u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15043u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15044u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15045u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15046u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15047u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15048u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15049u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15050u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15051u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15052u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15053u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15054u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15055u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15056u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15057u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15058u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15059u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15060u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15061u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15062u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15063u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15064u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15065u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15066u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15067u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15068u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15069u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15070u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15071u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15072u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15073u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15074u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15075u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15076u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15077u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15078u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15079u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15080u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15081u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15082u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15083u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15084u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15085u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15086u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15087u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15088u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15089u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15090u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15091u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15092u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15093u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15094u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15095u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15096u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15097u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15098u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15099u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15100u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15101u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* trice32 ( trice32_1 ) */ {13410u, 32u, 1u, "msg:%u (%%u)\n"},
+ /* trice64 ( trice64_1 ) */ {13417u, 64u, 1u, "msg:%u (%%u)\n"},
+ /* trice32 ( trice32_1 ) */ {13415u, 32u, 1u, "msg:%x (%%x)\n"},
+ /* trice64 ( trice64_1 ) */ {13422u, 64u, 1u, "msg:%x (%%x)\n"},
+ /* trice ( trice_0 ) */ {15963u, 32u, 0u, "msg:Hello LabPlot!\n"},
+ /* trice ( trice_0 ) */ {16011u, 32u, 0u, "msg:Hello LabPlot!\n"},
+ /* TRiceS ( TRiceS ) */ {13312u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:Hi %s!\n"},
+ /* TriceS ( TriceS ) */ {13313u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:Hi %s!\n"},
+ /* triceS ( triceS ) */ {13314u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:Hi %s!\n"},
+ /* TRiceN ( TRiceN ) */ {13315u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:Hi %s!\n"},
+ /* TriceN ( TriceN ) */ {13316u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:Hi %s!\n"},
+ /* triceN ( triceN ) */ {13317u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:Hi %s!\n"},
+ /* TRice ( TRice_0 ) */ {13008u, 32u, 0u, "msg:StartDefaultTask\n"},
+ /* TRice ( TRice_0 ) */ {13019u, 32u, 0u, "msg:StartDefaultTask\n"},
+ /* TRice ( TRice_0 ) */ {13009u, 32u, 0u, "msg:StartTask02:Diagnostics and TriceTransfer\n"},
+ /* TRice ( TRice_0 ) */ {13022u, 32u, 0u, "msg:StartTask02:Diagnostics and TriceTransfer\n"},
+ /* TRice64 ( TRice64_12 ) */ {15283u, 64u, 12u, "msg:Twelve 64-bit values: %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n"},
+ /* TRice64 ( TRice64_12 ) */ {15289u, 64u, 12u, "msg:Twelve 64-bit values: %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n"},
+ /* TRICE_S ( TRICE_S ) */ {13265u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:With TRICE_S:%s\n"},
+ /* TRICE_S ( TRICE_S ) */ {13267u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:With TRICE_S:%s\n"},
+ /* TRICE_S ( TRICE_S ) */ {13269u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:With TRICE_S:%s\n"},
+ /* TRiceS ( TRiceS ) */ {13263u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:With TRiceS:%s\n"},
+ /* TriceS ( TriceS ) */ {13261u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:With TriceS:%s\n"},
+ /* triceS ( triceS ) */ {13259u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:With triceS:%s\n"},
+ /* trice ( trice_0 ) */ {15396u, 32u, 0u, "msg:time_s,x,y,z\n"},
+ /* trice8 ( trice8_12 ) */ {13563u, 8u, 12u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_12 ) */ {13575u, 16u, 12u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice32 ( trice32_12 ) */ {13587u, 32u, 12u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice64 ( trice64_12 ) */ {13599u, 64u, 12u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice8_12 ( trice8_12 ) */ {13611u, 8u, 12u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16_12 ( trice16_12 ) */ {13623u, 16u, 12u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice32_12 ( trice32_12 ) */ {13635u, 32u, 12u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice64_12 ( trice64_12 ) */ {13647u, 64u, 12u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8 ( Trice8_11 ) */ {13562u, 8u, 11u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice16 ( Trice16_11 ) */ {13574u, 16u, 11u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32 ( Trice32_11 ) */ {13586u, 32u, 11u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64 ( Trice64_11 ) */ {13598u, 64u, 11u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8_11 ( Trice8_11 ) */ {13610u, 8u, 11u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice16_11 ( Trice16_11 ) */ {13622u, 16u, 11u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32_11 ( Trice32_11 ) */ {13634u, 32u, 11u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64_11 ( Trice64_11 ) */ {13646u, 64u, 11u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8 ( TRice8_10 ) */ {13561u, 8u, 10u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice16 ( TRice16_10 ) */ {13573u, 16u, 10u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32 ( TRice32_10 ) */ {13585u, 32u, 10u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice64 ( TRice64_10 ) */ {13597u, 64u, 10u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8_10 ( TRice8_10 ) */ {13609u, 8u, 10u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice16_10 ( TRice16_10 ) */ {13621u, 16u, 10u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32_10 ( TRice32_10 ) */ {13633u, 32u, 10u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice64_10 ( TRice64_10 ) */ {13645u, 64u, 10u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice8 ( trice8_9 ) */ {13560u, 8u, 9u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_9 ) */ {13572u, 16u, 9u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice32 ( trice32_9 ) */ {13584u, 32u, 9u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice64 ( trice64_9 ) */ {13596u, 64u, 9u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice8_9 ( trice8_9 ) */ {13608u, 8u, 9u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16_9 ( trice16_9 ) */ {13620u, 16u, 9u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice32_9 ( trice32_9 ) */ {13632u, 32u, 9u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice64_9 ( trice64_9 ) */ {13644u, 64u, 9u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8 ( Trice8_8 ) */ {13559u, 8u, 8u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice16 ( Trice16_8 ) */ {13571u, 16u, 8u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32 ( Trice32_8 ) */ {13583u, 32u, 8u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64 ( Trice64_8 ) */ {13595u, 64u, 8u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8_8 ( Trice8_8 ) */ {13607u, 8u, 8u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice16_8 ( Trice16_8 ) */ {13619u, 16u, 8u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32_8 ( Trice32_8 ) */ {13631u, 32u, 8u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64_8 ( Trice64_8 ) */ {13643u, 64u, 8u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8 ( TRice8_7 ) */ {13558u, 8u, 7u, "msg:value=%d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice16 ( TRice16_7 ) */ {13570u, 16u, 7u, "msg:value=%d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32 ( TRice32_7 ) */ {13582u, 32u, 7u, "msg:value=%d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice64 ( TRice64_7 ) */ {13594u, 64u, 7u, "msg:value=%d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8_7 ( TRice8_7 ) */ {13606u, 8u, 7u, "msg:value=%d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice16_7 ( TRice16_7 ) */ {13618u, 16u, 7u, "msg:value=%d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32_7 ( TRice32_7 ) */ {13630u, 32u, 7u, "msg:value=%d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice64_7 ( TRice64_7 ) */ {13642u, 64u, 7u, "msg:value=%d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice8 ( trice8_6 ) */ {13557u, 8u, 6u, "msg:value=%d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_6 ) */ {13569u, 16u, 6u, "msg:value=%d, %d, %d, %d, %d, %d\n"},
+ /* trice32 ( trice32_6 ) */ {13581u, 32u, 6u, "msg:value=%d, %d, %d, %d, %d, %d\n"},
+ /* trice64 ( trice64_6 ) */ {13593u, 64u, 6u, "msg:value=%d, %d, %d, %d, %d, %d\n"},
+ /* trice8_6 ( trice8_6 ) */ {13605u, 8u, 6u, "msg:value=%d, %d, %d, %d, %d, %d\n"},
+ /* trice16_6 ( trice16_6 ) */ {13617u, 16u, 6u, "msg:value=%d, %d, %d, %d, %d, %d\n"},
+ /* trice32_6 ( trice32_6 ) */ {13629u, 32u, 6u, "msg:value=%d, %d, %d, %d, %d, %d\n"},
+ /* trice64_6 ( trice64_6 ) */ {13641u, 64u, 6u, "msg:value=%d, %d, %d, %d, %d, %d\n"},
+ /* Trice8 ( Trice8_5 ) */ {13556u, 8u, 5u, "msg:value=%d, %d, %d, %d, %d\n"},
+ /* Trice16 ( Trice16_5 ) */ {13568u, 16u, 5u, "msg:value=%d, %d, %d, %d, %d\n"},
+ /* Trice32 ( Trice32_5 ) */ {13580u, 32u, 5u, "msg:value=%d, %d, %d, %d, %d\n"},
+ /* Trice64 ( Trice64_5 ) */ {13592u, 64u, 5u, "msg:value=%d, %d, %d, %d, %d\n"},
+ /* Trice8_5 ( Trice8_5 ) */ {13604u, 8u, 5u, "msg:value=%d, %d, %d, %d, %d\n"},
+ /* Trice16_5 ( Trice16_5 ) */ {13616u, 16u, 5u, "msg:value=%d, %d, %d, %d, %d\n"},
+ /* Trice32_5 ( Trice32_5 ) */ {13628u, 32u, 5u, "msg:value=%d, %d, %d, %d, %d\n"},
+ /* Trice64_5 ( Trice64_5 ) */ {13640u, 64u, 5u, "msg:value=%d, %d, %d, %d, %d\n"},
+ /* TRice8 ( TRice8_4 ) */ {13555u, 8u, 4u, "msg:value=%d, %d, %d, %d\n"},
+ /* TRice16 ( TRice16_4 ) */ {13567u, 16u, 4u, "msg:value=%d, %d, %d, %d\n"},
+ /* TRice32 ( TRice32_4 ) */ {13579u, 32u, 4u, "msg:value=%d, %d, %d, %d\n"},
+ /* TRice64 ( TRice64_4 ) */ {13591u, 64u, 4u, "msg:value=%d, %d, %d, %d\n"},
+ /* TRice8_4 ( TRice8_4 ) */ {13603u, 8u, 4u, "msg:value=%d, %d, %d, %d\n"},
+ /* TRice16_4 ( TRice16_4 ) */ {13615u, 16u, 4u, "msg:value=%d, %d, %d, %d\n"},
+ /* TRice32_4 ( TRice32_4 ) */ {13627u, 32u, 4u, "msg:value=%d, %d, %d, %d\n"},
+ /* TRice64_4 ( TRice64_4 ) */ {13639u, 64u, 4u, "msg:value=%d, %d, %d, %d\n"},
+ /* trice8 ( trice8_3 ) */ {13554u, 8u, 3u, "msg:value=%d, %d, %d\n"},
+ /* trice16 ( trice16_3 ) */ {13566u, 16u, 3u, "msg:value=%d, %d, %d\n"},
+ /* trice32 ( trice32_3 ) */ {13578u, 32u, 3u, "msg:value=%d, %d, %d\n"},
+ /* trice64 ( trice64_3 ) */ {13590u, 64u, 3u, "msg:value=%d, %d, %d\n"},
+ /* trice8_3 ( trice8_3 ) */ {13602u, 8u, 3u, "msg:value=%d, %d, %d\n"},
+ /* trice16_3 ( trice16_3 ) */ {13614u, 16u, 3u, "msg:value=%d, %d, %d\n"},
+ /* trice32_3 ( trice32_3 ) */ {13626u, 32u, 3u, "msg:value=%d, %d, %d\n"},
+ /* trice64_3 ( trice64_3 ) */ {13638u, 64u, 3u, "msg:value=%d, %d, %d\n"},
+ /* Trice8 ( Trice8_2 ) */ {13553u, 8u, 2u, "msg:value=%d, %d\n"},
+ /* Trice16 ( Trice16_2 ) */ {13565u, 16u, 2u, "msg:value=%d, %d\n"},
+ /* Trice32 ( Trice32_2 ) */ {13577u, 32u, 2u, "msg:value=%d, %d\n"},
+ /* Trice64 ( Trice64_2 ) */ {13589u, 64u, 2u, "msg:value=%d, %d\n"},
+ /* Trice8_2 ( Trice8_2 ) */ {13601u, 8u, 2u, "msg:value=%d, %d\n"},
+ /* Trice16_2 ( Trice16_2 ) */ {13613u, 16u, 2u, "msg:value=%d, %d\n"},
+ /* Trice32_2 ( Trice32_2 ) */ {13625u, 32u, 2u, "msg:value=%d, %d\n"},
+ /* Trice64_2 ( Trice64_2 ) */ {13637u, 64u, 2u, "msg:value=%d, %d\n"},
+ /* TRice8 ( TRice8_1 ) */ {13552u, 8u, 1u, "msg:value=%d\n"},
+ /* TRice16 ( TRice16_1 ) */ {13564u, 16u, 1u, "msg:value=%d\n"},
+ /* TRice32 ( TRice32_1 ) */ {13576u, 32u, 1u, "msg:value=%d\n"},
+ /* TRice64 ( TRice64_1 ) */ {13588u, 64u, 1u, "msg:value=%d\n"},
+ /* TRice8_1 ( TRice8_1 ) */ {13600u, 8u, 1u, "msg:value=%d\n"},
+ /* TRice16_1 ( TRice16_1 ) */ {13612u, 16u, 1u, "msg:value=%d\n"},
+ /* TRice32_1 ( TRice32_1 ) */ {13624u, 32u, 1u, "msg:value=%d\n"},
+ /* TRice64_1 ( TRice64_1 ) */ {13636u, 64u, 1u, "msg:value=%d\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {13504u, 8u, 1u, "msg:value=%u\n"},
+ /* TRICE8_1 ( TRICE8_1 ) */ {13505u, 8u, 1u, "msg:value=%u\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {13506u, 8u, 1u, "msg:value=%u\n"},
+ /* TRICE8_1 ( TRICE8_1 ) */ {13507u, 8u, 1u, "msg:value=%u\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {13508u, 8u, 1u, "msg:value=%u\n"},
+ /* TRICE8_1 ( TRICE8_1 ) */ {13509u, 8u, 1u, "msg:value=%u\n"},
+ /* trice8 ( trice8_1 ) */ {13510u, 8u, 1u, "msg:value=%u\n"},
+ /* trice8_1 ( trice8_1 ) */ {13511u, 8u, 1u, "msg:value=%u\n"},
+ /* Trice8 ( Trice8_1 ) */ {13512u, 8u, 1u, "msg:value=%u\n"},
+ /* Trice8_1 ( Trice8_1 ) */ {13513u, 8u, 1u, "msg:value=%u\n"},
+ /* TRice8 ( TRice8_1 ) */ {13514u, 8u, 1u, "msg:value=%u\n"},
+ /* TRice8_1 ( TRice8_1 ) */ {13515u, 8u, 1u, "msg:value=%u\n"},
+ /* TRICE16 ( TRICE16_1 ) */ {13516u, 16u, 1u, "msg:value=%u\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {13517u, 16u, 1u, "msg:value=%u\n"},
+ /* TRICE16 ( TRICE16_1 ) */ {13518u, 16u, 1u, "msg:value=%u\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {13519u, 16u, 1u, "msg:value=%u\n"},
+ /* TRICE16 ( TRICE16_1 ) */ {13520u, 16u, 1u, "msg:value=%u\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {13521u, 16u, 1u, "msg:value=%u\n"},
+ /* trice16 ( trice16_1 ) */ {13522u, 16u, 1u, "msg:value=%u\n"},
+ /* trice16_1 ( trice16_1 ) */ {13523u, 16u, 1u, "msg:value=%u\n"},
+ /* Trice16 ( Trice16_1 ) */ {13524u, 16u, 1u, "msg:value=%u\n"},
+ /* Trice16_1 ( Trice16_1 ) */ {13525u, 16u, 1u, "msg:value=%u\n"},
+ /* TRice16 ( TRice16_1 ) */ {13526u, 16u, 1u, "msg:value=%u\n"},
+ /* TRice16_1 ( TRice16_1 ) */ {13527u, 16u, 1u, "msg:value=%u\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {13528u, 32u, 1u, "msg:value=%u\n"},
+ /* TRICE32_1 ( TRICE32_1 ) */ {13529u, 32u, 1u, "msg:value=%u\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {13530u, 32u, 1u, "msg:value=%u\n"},
+ /* TRICE32_1 ( TRICE32_1 ) */ {13531u, 32u, 1u, "msg:value=%u\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {13532u, 32u, 1u, "msg:value=%u\n"},
+ /* TRICE32_1 ( TRICE32_1 ) */ {13533u, 32u, 1u, "msg:value=%u\n"},
+ /* trice32 ( trice32_1 ) */ {13534u, 32u, 1u, "msg:value=%u\n"},
+ /* trice32_1 ( trice32_1 ) */ {13535u, 32u, 1u, "msg:value=%u\n"},
+ /* Trice32 ( Trice32_1 ) */ {13536u, 32u, 1u, "msg:value=%u\n"},
+ /* Trice32_1 ( Trice32_1 ) */ {13537u, 32u, 1u, "msg:value=%u\n"},
+ /* TRice32 ( TRice32_1 ) */ {13538u, 32u, 1u, "msg:value=%u\n"},
+ /* TRice32_1 ( TRice32_1 ) */ {13539u, 32u, 1u, "msg:value=%u\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {13540u, 64u, 1u, "msg:value=%u\n"},
+ /* TRICE64_1 ( TRICE64_1 ) */ {13541u, 64u, 1u, "msg:value=%u\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {13542u, 64u, 1u, "msg:value=%u\n"},
+ /* TRICE64_1 ( TRICE64_1 ) */ {13543u, 64u, 1u, "msg:value=%u\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {13544u, 64u, 1u, "msg:value=%u\n"},
+ /* TRICE64_1 ( TRICE64_1 ) */ {13545u, 64u, 1u, "msg:value=%u\n"},
+ /* trice64 ( trice64_1 ) */ {13546u, 64u, 1u, "msg:value=%u\n"},
+ /* trice64_1 ( trice64_1 ) */ {13547u, 64u, 1u, "msg:value=%u\n"},
+ /* Trice64 ( Trice64_1 ) */ {13548u, 64u, 1u, "msg:value=%u\n"},
+ /* Trice64_1 ( Trice64_1 ) */ {13549u, 64u, 1u, "msg:value=%u\n"},
+ /* TRice64 ( TRice64_1 ) */ {13550u, 64u, 1u, "msg:value=%u\n"},
+ /* TRice64_1 ( TRice64_1 ) */ {13551u, 64u, 1u, "msg:value=%u\n"},
+ /* TRice ( TRice32_5 ) */ {13332u, 32u, 5u, "msg:x = %g = %d.%03d, %d.%03d\n"},
+ /* TRice ( TRice_0 ) */ {13453u, 32u, 0u, "no value\n"},
+ /* Trice ( Trice_0 ) */ {13454u, 32u, 0u, "no value\n"},
+ /* trice ( trice_0 ) */ {13455u, 32u, 0u, "no value\n"},
+ /* TRice8 ( TRice_0 ) */ {13456u, 32u, 0u, "no value\n"},
+ /* Trice8 ( Trice_0 ) */ {13457u, 32u, 0u, "no value\n"},
+ /* trice8 ( trice_0 ) */ {13458u, 32u, 0u, "no value\n"},
+ /* TRice16 ( TRice_0 ) */ {13459u, 32u, 0u, "no value\n"},
+ /* Trice16 ( Trice_0 ) */ {13460u, 32u, 0u, "no value\n"},
+ /* trice16 ( trice_0 ) */ {13461u, 32u, 0u, "no value\n"},
+ /* TRice32 ( TRice_0 ) */ {13462u, 32u, 0u, "no value\n"},
+ /* Trice32 ( Trice_0 ) */ {13463u, 32u, 0u, "no value\n"},
+ /* trice32 ( trice_0 ) */ {13464u, 32u, 0u, "no value\n"},
+ /* TRice64 ( TRice_0 ) */ {13465u, 32u, 0u, "no value\n"},
+ /* Trice64 ( Trice_0 ) */ {13466u, 32u, 0u, "no value\n"},
+ /* trice64 ( trice_0 ) */ {13467u, 32u, 0u, "no value\n"},
+ /* TRice_0 ( TRice_0 ) */ {13468u, 32u, 0u, "no value\n"},
+ /* Trice_0 ( Trice_0 ) */ {13469u, 32u, 0u, "no value\n"},
+ /* trice_0 ( trice_0 ) */ {13470u, 32u, 0u, "no value\n"},
+ /* TRice8_0 ( TRice_0 ) */ {13471u, 32u, 0u, "no value\n"},
+ /* Trice8_0 ( Trice_0 ) */ {13472u, 32u, 0u, "no value\n"},
+ /* trice8_0 ( trice_0 ) */ {13473u, 32u, 0u, "no value\n"},
+ /* TRice16_0 ( TRice_0 ) */ {13474u, 32u, 0u, "no value\n"},
+ /* Trice16_0 ( Trice_0 ) */ {13475u, 32u, 0u, "no value\n"},
+ /* trice16_0 ( trice_0 ) */ {13476u, 32u, 0u, "no value\n"},
+ /* TRice32_0 ( TRice_0 ) */ {13477u, 32u, 0u, "no value\n"},
+ /* Trice32_0 ( Trice_0 ) */ {13478u, 32u, 0u, "no value\n"},
+ /* trice32_0 ( trice_0 ) */ {13479u, 32u, 0u, "no value\n"},
+ /* TRice64_0 ( TRice_0 ) */ {13480u, 32u, 0u, "no value\n"},
+ /* Trice64_0 ( Trice_0 ) */ {13481u, 32u, 0u, "no value\n"},
+ /* trice64_0 ( trice_0 ) */ {13482u, 32u, 0u, "no value\n"},
+ /* TRice0 ( TRice_0 ) */ {13483u, 32u, 0u, "no value\n"},
+ /* Trice0 ( Trice_0 ) */ {13484u, 32u, 0u, "no value\n"},
+ /* trice0 ( trice_0 ) */ {13485u, 32u, 0u, "no value\n"},
+ /* TRice ( TRice_0 ) */ {13486u, 32u, 0u, "no value\n"},
+ /* Trice ( Trice_0 ) */ {13487u, 32u, 0u, "no value\n"},
+ /* trice ( trice_0 ) */ {13488u, 32u, 0u, "no value\n"},
+ /* TRICE ( TRICE_0 ) */ {13735u, 32u, 0u, "notice:blue:white+h\n"},
+ /* trice ( trice_0 ) */ {13785u, 32u, 0u, "notice:blue:white+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13835u, 32u, 0u, "notice:blue:white+h\n"},
+ /* Trice ( Trice_0 ) */ {13885u, 32u, 0u, "notice:blue:white+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13935u, 32u, 0u, "notice:blue:white+h\n"},
+ /* TRice ( TRice_0 ) */ {13985u, 32u, 0u, "notice:blue:white+h\n"},
+ /* Trice ( Trice_0 ) */ {15309u, 32u, 0u, "ok!\n"},
+ /* TRice ( TRice_0 ) */ {13056u, 32u, 0u, "ok\n"},
+ /* TRice ( TRice_0 ) */ {13058u, 32u, 0u, "ok\n"},
+ /* TRice ( TRice_0 ) */ {13060u, 32u, 0u, "ok\n"},
+ /* TRice ( TRice_0 ) */ {13062u, 32u, 0u, "ok\n"},
+ /* TRice ( TRice_0 ) */ {13064u, 32u, 0u, "ok\n"},
+ /* TRice ( TRice_0 ) */ {13066u, 32u, 0u, "ok\n"},
+ /* TRice ( TRice_0 ) */ {13068u, 32u, 0u, "ok\n"},
+ /* TRice ( TRice_0 ) */ {13070u, 32u, 0u, "ok\n"},
+ /* TRice ( TRice_0 ) */ {13072u, 32u, 0u, "ok\n"},
+ /* TRice ( TRice_0 ) */ {13074u, 32u, 0u, "ok\n"},
+ /* TRice ( TRice_0 ) */ {13076u, 32u, 0u, "ok\n"},
+ /* TRice ( TRice_0 ) */ {13078u, 32u, 0u, "ok\n"},
+ /* TRice ( TRice_0 ) */ {13079u, 32u, 0u, "ok\n"},
+ /* TRice ( TRice_0 ) */ {13080u, 32u, 0u, "ok\n"},
+ /* TRice ( TRice_0 ) */ {13081u, 32u, 0u, "ok\n"},
+ /* TRice ( TRice32_1 ) */ {13338u, 32u, 1u, "rd: 15\t%-4d\tPad with spaces (width 4, left justified)\n"},
+ /* TRice ( TRice32_1 ) */ {13337u, 32u, 1u, "rd: 15\t%4d \tPad with spaces (width 4, right justified)\n"},
+ /* trice8B ( trice8B ) */ {13279u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd: %02x\n"},
+ /* trice ( trice32_1 ) */ {13348u, 32u, 1u, "rd: 'A' \t%q \tQuoted character\n"},
+ /* TRice ( TRice32_1 ) */ {13336u, 32u, 1u, "rd: +15 \t%+d \tAlways show sign\n"},
+ /* TRice ( TRice32_1 ) */ {13339u, 32u, 1u, "rd: 0015\t%04d\tPad with zeroes (width 4)\n"},
+ /* TRice ( TRice32_1 ) */ {13344u, 32u, 1u, "rd: 0xf \t%#x \tBase 16, with leading 0x\n"},
+ /* trice ( trice32_1 ) */ {13361u, 32u, 1u, "rd: 1.234560e+02\t\t%e \t%%e Scientific notation\n"},
+ /* trice64 ( trice64_1 ) */ {13367u, 64u, 1u, "rd: 1.234560e+02\t\t%e \t%%e Scientific notation\n"},
+ /* TRice ( TRice32_1 ) */ {13340u, 32u, 1u, "rd: 1111 \t%b \tBase 2\n"},
+ /* trice ( trice32_1 ) */ {13365u, 32u, 1u, "rd: 123.456\t\t%g\t\t%%g Exponent as needed, necessary digits only\n"},
+ /* trice64 ( trice64_1 ) */ {13371u, 64u, 1u, "rd: 123.456\t\t%g\t\t%%g Exponent as needed, necessary digits only\n"},
+ /* trice ( trice32_1 ) */ {13362u, 32u, 1u, "rd: 123.456000\t\t%f \t%%f Decimal point, no exponent\n"},
+ /* trice64 ( trice64_1 ) */ {13368u, 64u, 1u, "rd: 123.456000\t\t%f \t%%f Decimal point, no exponent\n"},
+ /* trice ( trice32_1 ) */ {13363u, 32u, 1u, "rd: 123.46\t\t\t%.2f\t\t%%.2f Default width, precision 2\n"},
+ /* trice64 ( trice64_1 ) */ {13369u, 64u, 1u, "rd: 123.46\t\t\t%.2f \t%%.2f Default width, precision 2\n"},
+ /* TRice ( TRice32_1 ) */ {13335u, 32u, 1u, "rd: 15 \t%d \tBase 10\n"},
+ /* TRice ( TRice32_1 ) */ {13341u, 32u, 1u, "rd: 17 \t%o \tBase 8\n"},
+ /* triceS ( triceS ) */ {13378u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd: 63 61 66 c3 a9 \t% x\tHex dump with spaces\n"},
+ /* triceS ( triceS ) */ {13377u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd: 636166c3a9 \t\t%x\tHex dump of byte values\n"},
+ /* trice ( trice32_1 ) */ {13347u, 32u, 1u, "rd: A \t%c \tCharacter\n"},
+ /* TRice ( TRice32_1 ) */ {13343u, 32u, 1u, "rd: F \t%X \tBase 16, uppercase\n"},
+ /* trice ( trice32_1 ) */ {13349u, 32u, 1u, "rd: U+0041 \t%U \tUnicode\n"},
+ /* trice ( trice32_1 ) */ {13350u, 32u, 1u, "rd: U+0041 'A' \t%#U \tUnicode with character\n"},
+ /* triceS ( triceS ) */ {13376u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd: \"café\" \t\t%q\t\tQuoted string\n"},
+ /* triceS ( triceS ) */ {13373u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd: café \t\t\t%s\t\tPlain string\n"},
+ /* triceS ( triceS ) */ {13375u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd: café␣␣ \t\t%-6s \t\tWidth 6, left justify\n"},
+ /* TRice ( TRice32_1 ) */ {13342u, 32u, 1u, "rd: f \t%x \tBase 16, lowercase\n"},
+ /* trice ( trice32_1 ) */ {13364u, 32u, 1u, "rd: ␣␣123.46\t\t%8.2f\t%%8.2f Width 8, precision 2\n"},
+ /* trice64 ( trice64_1 ) */ {13370u, 64u, 1u, "rd: ␣␣123.46\t\t%8.2f \t%%8.2f Width 8, precision 2\n"},
+ /* triceS ( triceS ) */ {13374u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd: ␣␣café \t\t%6s \t\tWidth 6, right justify\n"},
+ /* trice ( trice32_1 ) */ {13398u, 32u, 1u, "rd:%E (%%E)\n"},
+ /* trice64 ( trice64_1 ) */ {13401u, 64u, 1u, "rd:%E (%%E)\n"},
+ /* trice ( trice32_1 ) */ {13399u, 32u, 1u, "rd:%F (%%F)\n"},
+ /* trice64 ( trice64_1 ) */ {13402u, 64u, 1u, "rd:%F (%%F)\n"},
+ /* trice ( trice32_1 ) */ {13400u, 32u, 1u, "rd:%G (%%G)\n"},
+ /* trice64 ( trice64_1 ) */ {13403u, 64u, 1u, "rd:%G (%%G)\n"},
+ /* trice ( trice32_1 ) */ {13404u, 32u, 1u, "rd:%e (%%e)\n"},
+ /* trice64 ( trice64_1 ) */ {13407u, 64u, 1u, "rd:%e (%%e)\n"},
+ /* trice ( trice32_1 ) */ {13405u, 32u, 1u, "rd:%f (%%f)\n"},
+ /* trice64 ( trice64_1 ) */ {13408u, 64u, 1u, "rd:%f (%%f)\n"},
+ /* trice ( trice32_1 ) */ {13406u, 32u, 1u, "rd:%g (%%g)\n"},
+ /* trice64 ( trice64_1 ) */ {13409u, 64u, 1u, "rd:%g (%%g)\n"},
+ /* TriceS ( TriceS ) */ {16344u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd:%s <- float number as string\n"},
+ /* trice ( trice32_12 ) */ {14003u, 32u, 12u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_12 ) */ {14015u, 32u, 12u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_12 ) */ {14027u, 32u, 12u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_12 ) */ {15114u, 32u, 12u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_11 ) */ {14002u, 32u, 11u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_11 ) */ {14014u, 32u, 11u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_11 ) */ {14026u, 32u, 11u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_11 ) */ {15113u, 32u, 11u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_10 ) */ {14001u, 32u, 10u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_10 ) */ {14013u, 32u, 10u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_10 ) */ {14025u, 32u, 10u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_10 ) */ {15112u, 32u, 10u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_9 ) */ {14000u, 32u, 9u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_9 ) */ {14012u, 32u, 9u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_9 ) */ {14024u, 32u, 9u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_9 ) */ {15111u, 32u, 9u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_8 ) */ {13999u, 32u, 8u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_8 ) */ {14011u, 32u, 8u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_8 ) */ {14023u, 32u, 8u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_8 ) */ {15110u, 32u, 8u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_7 ) */ {13998u, 32u, 7u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_7 ) */ {14010u, 32u, 7u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_7 ) */ {14022u, 32u, 7u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_7 ) */ {15109u, 32u, 7u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_6 ) */ {13997u, 32u, 6u, "rd:TRICE %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_6 ) */ {14009u, 32u, 6u, "rd:TRICE %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_6 ) */ {14021u, 32u, 6u, "rd:TRICE %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_6 ) */ {15108u, 32u, 6u, "rd:TRICE %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_5 ) */ {13996u, 32u, 5u, "rd:TRICE %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_5 ) */ {14008u, 32u, 5u, "rd:TRICE %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_5 ) */ {14020u, 32u, 5u, "rd:TRICE %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_5 ) */ {15107u, 32u, 5u, "rd:TRICE %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_4 ) */ {13995u, 32u, 4u, "rd:TRICE %d, %d, %d, %d\n"},
+ /* trice ( trice32_4 ) */ {14007u, 32u, 4u, "rd:TRICE %d, %d, %d, %d\n"},
+ /* trice ( trice32_4 ) */ {14019u, 32u, 4u, "rd:TRICE %d, %d, %d, %d\n"},
+ /* trice ( trice32_4 ) */ {15106u, 32u, 4u, "rd:TRICE %d, %d, %d, %d\n"},
+ /* trice ( trice32_3 ) */ {13994u, 32u, 3u, "rd:TRICE %d, %d, %d\n"},
+ /* trice ( trice32_3 ) */ {14006u, 32u, 3u, "rd:TRICE %d, %d, %d\n"},
+ /* trice ( trice32_3 ) */ {14018u, 32u, 3u, "rd:TRICE %d, %d, %d\n"},
+ /* trice ( trice32_3 ) */ {15105u, 32u, 3u, "rd:TRICE %d, %d, %d\n"},
+ /* trice ( trice32_2 ) */ {13993u, 32u, 2u, "rd:TRICE %d, %d\n"},
+ /* trice ( trice32_2 ) */ {14005u, 32u, 2u, "rd:TRICE %d, %d\n"},
+ /* trice ( trice32_2 ) */ {14017u, 32u, 2u, "rd:TRICE %d, %d\n"},
+ /* trice ( trice32_2 ) */ {15104u, 32u, 2u, "rd:TRICE %d, %d\n"},
+ /* trice ( trice32_1 ) */ {13992u, 32u, 1u, "rd:TRICE %d\n"},
+ /* trice ( trice32_1 ) */ {14004u, 32u, 1u, "rd:TRICE %d\n"},
+ /* trice ( trice32_1 ) */ {14016u, 32u, 1u, "rd:TRICE %d\n"},
+ /* trice ( trice32_1 ) */ {15103u, 32u, 1u, "rd:TRICE %d\n"},
+ /* trice ( trice32_1 ) */ {14942u, 32u, 1u, "rd:TRICE float %+.9f (%%.9f)\n"},
+ /* trice ( trice32_1 ) */ {14947u, 32u, 1u, "rd:TRICE float %+.9f (%%.9f)\n"},
+ /* trice ( trice32_1 ) */ {14944u, 32u, 1u, "rd:TRICE float %+9.6f (%%9.6f)\n"},
+ /* trice ( trice32_1 ) */ {14949u, 32u, 1u, "rd:TRICE float %+9.6f (%%9.6f)\n"},
+ /* trice ( trice32_1 ) */ {14943u, 32u, 1u, "rd:TRICE float %+9.f (%%9.f)\n"},
+ /* trice ( trice32_1 ) */ {14948u, 32u, 1u, "rd:TRICE float %+9.f (%%9.f)\n"},
+ /* trice ( trice32_1 ) */ {14941u, 32u, 1u, "rd:TRICE float %+9f (%%9f)\n"},
+ /* trice ( trice32_1 ) */ {14946u, 32u, 1u, "rd:TRICE float %+9f (%%9f)\n"},
+ /* trice ( trice32_1 ) */ {14940u, 32u, 1u, "rd:TRICE float %+f (%%f)\n"},
+ /* trice ( trice32_1 ) */ {14945u, 32u, 1u, "rd:TRICE float %+f (%%f)\n"},
+ /* trice ( trice32_1 ) */ {14952u, 32u, 1u, "rd:TRICE float %-.9f (%%.9f)\n"},
+ /* trice ( trice32_1 ) */ {14957u, 32u, 1u, "rd:TRICE float %-.9f (%%.9f)\n"},
+ /* trice ( trice32_1 ) */ {14954u, 32u, 1u, "rd:TRICE float %-9.6f (%%9.6f)\n"},
+ /* trice ( trice32_1 ) */ {14959u, 32u, 1u, "rd:TRICE float %-9.6f (%%9.6f)\n"},
+ /* trice ( trice32_1 ) */ {14953u, 32u, 1u, "rd:TRICE float %-9.f (%%9.f)\n"},
+ /* trice ( trice32_1 ) */ {14958u, 32u, 1u, "rd:TRICE float %-9.f (%%9.f)\n"},
+ /* trice ( trice32_1 ) */ {14951u, 32u, 1u, "rd:TRICE float %-9f (%%9f)\n"},
+ /* trice ( trice32_1 ) */ {14956u, 32u, 1u, "rd:TRICE float %-9f (%%9f)\n"},
+ /* trice ( trice32_1 ) */ {14950u, 32u, 1u, "rd:TRICE float %-f (%%f)\n"},
+ /* trice ( trice32_1 ) */ {14955u, 32u, 1u, "rd:TRICE float %-f (%%f)\n"},
+ /* trice ( trice32_1 ) */ {14932u, 32u, 1u, "rd:TRICE float %.9f (%%.9f)\n"},
+ /* trice ( trice32_1 ) */ {14937u, 32u, 1u, "rd:TRICE float %.9f (%%.9f)\n"},
+ /* trice ( trice32_1 ) */ {14934u, 32u, 1u, "rd:TRICE float %9.6f (%%9.6f)\n"},
+ /* trice ( trice32_1 ) */ {14939u, 32u, 1u, "rd:TRICE float %9.6f (%%9.6f)\n"},
+ /* trice ( trice32_1 ) */ {14933u, 32u, 1u, "rd:TRICE float %9.f (%%9.f)\n"},
+ /* trice ( trice32_1 ) */ {14938u, 32u, 1u, "rd:TRICE float %9.f (%%9.f)\n"},
+ /* trice ( trice32_1 ) */ {14931u, 32u, 1u, "rd:TRICE float %9f (%%9f)\n"},
+ /* trice ( trice32_1 ) */ {14936u, 32u, 1u, "rd:TRICE float %9f (%%9f)\n"},
+ /* TRICE ( TRICE32_1 ) */ {14976u, 32u, 1u, "rd:TRICE float %E (%%E)\n"},
+ /* trice ( trice32_1 ) */ {14995u, 32u, 1u, "rd:TRICE float %E (%%E)\n"},
+ /* TRICE ( TRICE32_1 ) */ {14977u, 32u, 1u, "rd:TRICE float %F (%%F)\n"},
+ /* trice ( trice32_1 ) */ {14996u, 32u, 1u, "rd:TRICE float %F (%%F)\n"},
+ /* TRICE ( TRICE32_1 ) */ {14978u, 32u, 1u, "rd:TRICE float %G (%%G)\n"},
+ /* trice ( trice32_1 ) */ {14997u, 32u, 1u, "rd:TRICE float %G (%%G)\n"},
+ /* TRICE ( TRICE32_1 ) */ {14973u, 32u, 1u, "rd:TRICE float %e (%%e)\n"},
+ /* trice ( trice32_1 ) */ {14992u, 32u, 1u, "rd:TRICE float %e (%%e)\n"},
+ /* trice ( trice32_1 ) */ {14930u, 32u, 1u, "rd:TRICE float %f (%%f)\n"},
+ /* trice ( trice32_1 ) */ {14935u, 32u, 1u, "rd:TRICE float %f (%%f)\n"},
+ /* TRICE ( TRICE32_1 ) */ {14974u, 32u, 1u, "rd:TRICE float %f (%%f)\n"},
+ /* trice ( trice32_1 ) */ {14993u, 32u, 1u, "rd:TRICE float %f (%%f)\n"},
+ /* TRICE ( TRICE32_1 ) */ {14975u, 32u, 1u, "rd:TRICE float %g (%%g)\n"},
+ /* trice ( trice32_1 ) */ {14994u, 32u, 1u, "rd:TRICE float %g (%%g)\n"},
+ /* trice16 ( trice16_12 ) */ {14262u, 16u, 12u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_12 ) */ {14274u, 16u, 12u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_12 ) */ {14286u, 16u, 12u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_11 ) */ {14261u, 16u, 11u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_11 ) */ {14273u, 16u, 11u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_11 ) */ {14285u, 16u, 11u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_10 ) */ {14260u, 16u, 10u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_10 ) */ {14272u, 16u, 10u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_10 ) */ {14284u, 16u, 10u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_9 ) */ {14259u, 16u, 9u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_9 ) */ {14271u, 16u, 9u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_9 ) */ {14283u, 16u, 9u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_8 ) */ {14258u, 16u, 8u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_8 ) */ {14270u, 16u, 8u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_8 ) */ {14282u, 16u, 8u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_7 ) */ {14257u, 16u, 7u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_7 ) */ {14269u, 16u, 7u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_7 ) */ {14281u, 16u, 7u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_6 ) */ {14256u, 16u, 6u, "rd:TRICE16 %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_6 ) */ {14268u, 16u, 6u, "rd:TRICE16 %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_6 ) */ {14280u, 16u, 6u, "rd:TRICE16 %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_5 ) */ {14255u, 16u, 5u, "rd:TRICE16 %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_5 ) */ {14267u, 16u, 5u, "rd:TRICE16 %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_5 ) */ {14279u, 16u, 5u, "rd:TRICE16 %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_4 ) */ {14254u, 16u, 4u, "rd:TRICE16 %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_4 ) */ {14266u, 16u, 4u, "rd:TRICE16 %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_4 ) */ {14278u, 16u, 4u, "rd:TRICE16 %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_3 ) */ {14253u, 16u, 3u, "rd:TRICE16 %d, %d, %d\n"},
+ /* trice16 ( trice16_3 ) */ {14265u, 16u, 3u, "rd:TRICE16 %d, %d, %d\n"},
+ /* trice16 ( trice16_3 ) */ {14277u, 16u, 3u, "rd:TRICE16 %d, %d, %d\n"},
+ /* trice16 ( trice16_2 ) */ {14252u, 16u, 2u, "rd:TRICE16 %d, %d\n"},
+ /* trice16 ( trice16_2 ) */ {14264u, 16u, 2u, "rd:TRICE16 %d, %d\n"},
+ /* trice16 ( trice16_2 ) */ {14276u, 16u, 2u, "rd:TRICE16 %d, %d\n"},
+ /* trice16 ( trice16_1 ) */ {14251u, 16u, 1u, "rd:TRICE16 %d\n"},
+ /* trice16 ( trice16_1 ) */ {14263u, 16u, 1u, "rd:TRICE16 %d\n"},
+ /* trice16 ( trice16_1 ) */ {14275u, 16u, 1u, "rd:TRICE16 %d\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {14288u, 16u, 1u, "rd:TRICE16_1 %d\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {14300u, 16u, 1u, "rd:TRICE16_1 %d\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {14312u, 16u, 1u, "rd:TRICE16_1 %d\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {15031u, 16u, 1u, "rd:TRICE16_1 line %b (%%b -1)\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {15034u, 16u, 1u, "rd:TRICE16_1 line %d (%%d -1)\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {15032u, 16u, 1u, "rd:TRICE16_1 line %o (%%o -1)\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {15028u, 16u, 1u, "rd:TRICE16_1 line %t (%%t ,0)\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {15029u, 16u, 1u, "rd:TRICE16_1 line %t (%%t ,2)\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {15030u, 16u, 1u, "rd:TRICE16_1 line %u (%%u -1)\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {15033u, 16u, 1u, "rd:TRICE16_1 line %x (%%x -1)\n"},
+ /* TRICE16_10 ( TRICE16_10 ) */ {14297u, 16u, 10u, "rd:TRICE16_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_10 ( TRICE16_10 ) */ {14309u, 16u, 10u, "rd:TRICE16_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_10 ( TRICE16_10 ) */ {14321u, 16u, 10u, "rd:TRICE16_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_11 ( TRICE16_11 ) */ {14298u, 16u, 11u, "rd:TRICE16_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_11 ( TRICE16_11 ) */ {14310u, 16u, 11u, "rd:TRICE16_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_11 ( TRICE16_11 ) */ {14322u, 16u, 11u, "rd:TRICE16_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_12 ( TRICE16_12 ) */ {14299u, 16u, 12u, "rd:TRICE16_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_12 ( TRICE16_12 ) */ {14311u, 16u, 12u, "rd:TRICE16_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_12 ( TRICE16_12 ) */ {14323u, 16u, 12u, "rd:TRICE16_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_2 ( TRICE16_2 ) */ {14289u, 16u, 2u, "rd:TRICE16_2 %d, %d\n"},
+ /* TRICE16_2 ( TRICE16_2 ) */ {14301u, 16u, 2u, "rd:TRICE16_2 %d, %d\n"},
+ /* TRICE16_2 ( TRICE16_2 ) */ {14313u, 16u, 2u, "rd:TRICE16_2 %d, %d\n"},
+ /* TRICE16_3 ( TRICE16_3 ) */ {14290u, 16u, 3u, "rd:TRICE16_3 %d, %d, %d\n"},
+ /* TRICE16_3 ( TRICE16_3 ) */ {14302u, 16u, 3u, "rd:TRICE16_3 %d, %d, %d\n"},
+ /* TRICE16_3 ( TRICE16_3 ) */ {14314u, 16u, 3u, "rd:TRICE16_3 %d, %d, %d\n"},
+ /* TRICE16_4 ( TRICE16_4 ) */ {14291u, 16u, 4u, "rd:TRICE16_4 %d, %d, %d, %d\n"},
+ /* TRICE16_4 ( TRICE16_4 ) */ {14303u, 16u, 4u, "rd:TRICE16_4 %d, %d, %d, %d\n"},
+ /* TRICE16_4 ( TRICE16_4 ) */ {14315u, 16u, 4u, "rd:TRICE16_4 %d, %d, %d, %d\n"},
+ /* TRICE16_5 ( TRICE16_5 ) */ {14292u, 16u, 5u, "rd:TRICE16_5 %d, %d, %d, %d, %d\n"},
+ /* TRICE16_5 ( TRICE16_5 ) */ {14304u, 16u, 5u, "rd:TRICE16_5 %d, %d, %d, %d, %d\n"},
+ /* TRICE16_5 ( TRICE16_5 ) */ {14316u, 16u, 5u, "rd:TRICE16_5 %d, %d, %d, %d, %d\n"},
+ /* TRICE16_6 ( TRICE16_6 ) */ {14293u, 16u, 6u, "rd:TRICE16_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_6 ( TRICE16_6 ) */ {14305u, 16u, 6u, "rd:TRICE16_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_6 ( TRICE16_6 ) */ {14317u, 16u, 6u, "rd:TRICE16_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_7 ( TRICE16_7 ) */ {14294u, 16u, 7u, "rd:TRICE16_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_7 ( TRICE16_7 ) */ {14306u, 16u, 7u, "rd:TRICE16_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_7 ( TRICE16_7 ) */ {14318u, 16u, 7u, "rd:TRICE16_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_8 ( TRICE16_8 ) */ {14295u, 16u, 8u, "rd:TRICE16_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_8 ( TRICE16_8 ) */ {14307u, 16u, 8u, "rd:TRICE16_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_8 ( TRICE16_8 ) */ {14319u, 16u, 8u, "rd:TRICE16_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_9 ( TRICE16_9 ) */ {14296u, 16u, 9u, "rd:TRICE16_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_9 ( TRICE16_9 ) */ {14308u, 16u, 9u, "rd:TRICE16_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_9 ( TRICE16_9 ) */ {14320u, 16u, 9u, "rd:TRICE16_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_12 ) */ {14410u, 32u, 12u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_12 ) */ {14422u, 32u, 12u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_12 ) */ {14434u, 32u, 12u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_11 ) */ {14409u, 32u, 11u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_11 ) */ {14421u, 32u, 11u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_11 ) */ {14433u, 32u, 11u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_10 ) */ {14408u, 32u, 10u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_10 ) */ {14420u, 32u, 10u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_10 ) */ {14432u, 32u, 10u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_9 ) */ {14407u, 32u, 9u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_9 ) */ {14419u, 32u, 9u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_9 ) */ {14431u, 32u, 9u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_8 ) */ {14406u, 32u, 8u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_8 ) */ {14418u, 32u, 8u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_8 ) */ {14430u, 32u, 8u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_7 ) */ {14405u, 32u, 7u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_7 ) */ {14417u, 32u, 7u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_7 ) */ {14429u, 32u, 7u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_6 ) */ {14404u, 32u, 6u, "rd:TRICE32 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_6 ) */ {14416u, 32u, 6u, "rd:TRICE32 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_6 ) */ {14428u, 32u, 6u, "rd:TRICE32 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_5 ) */ {14403u, 32u, 5u, "rd:TRICE32 %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_5 ) */ {14415u, 32u, 5u, "rd:TRICE32 %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_5 ) */ {14427u, 32u, 5u, "rd:TRICE32 %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_4 ) */ {14402u, 32u, 4u, "rd:TRICE32 %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_4 ) */ {14414u, 32u, 4u, "rd:TRICE32 %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_4 ) */ {14426u, 32u, 4u, "rd:TRICE32 %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_3 ) */ {14401u, 32u, 3u, "rd:TRICE32 %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_3 ) */ {14413u, 32u, 3u, "rd:TRICE32 %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_3 ) */ {14425u, 32u, 3u, "rd:TRICE32 %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_2 ) */ {14400u, 32u, 2u, "rd:TRICE32 %d, %d\n"},
+ /* TRICE32 ( TRICE32_2 ) */ {14412u, 32u, 2u, "rd:TRICE32 %d, %d\n"},
+ /* TRICE32 ( TRICE32_2 ) */ {14424u, 32u, 2u, "rd:TRICE32 %d, %d\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {14399u, 32u, 1u, "rd:TRICE32 %d\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {14411u, 32u, 1u, "rd:TRICE32 %d\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {14423u, 32u, 1u, "rd:TRICE32 %d\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {15008u, 32u, 1u, "rd:TRICE32 float %12.6E (%%12.6E)\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {15009u, 32u, 1u, "rd:TRICE32 float %12.6F (%%12.6F)\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {15010u, 32u, 1u, "rd:TRICE32 float %12.6G (%%12.6G)\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {15005u, 32u, 1u, "rd:TRICE32 float %12.6e (%%12.6e)\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {15006u, 32u, 1u, "rd:TRICE32 float %12.6f (%%12.6f)\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {15007u, 32u, 1u, "rd:TRICE32 float %12.6g (%%12.6g)\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {14970u, 32u, 1u, "rd:TRICE32 float %E (%%E)\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {14971u, 32u, 1u, "rd:TRICE32 float %F (%%F)\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {14972u, 32u, 1u, "rd:TRICE32 float %G (%%G)\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {14967u, 32u, 1u, "rd:TRICE32 float %e (%%e)\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {14968u, 32u, 1u, "rd:TRICE32 float %f (%%f)\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {14969u, 32u, 1u, "rd:TRICE32 float %g (%%g)\n"},
+ /* TRICE32_1 ( TRICE32_1 ) */ {14436u, 32u, 1u, "rd:TRICE32_1 %d\n"},
+ /* TRICE32_1 ( TRICE32_1 ) */ {14448u, 32u, 1u, "rd:TRICE32_1 %d\n"},
+ /* TRICE32_1 ( TRICE32_1 ) */ {14460u, 32u, 1u, "rd:TRICE32_1 %d\n"},
+ /* TRICE32_1 ( TRICE32_1 ) */ {14964u, 32u, 1u, "rd:TRICE32_1 float %E (%%E)\n"},
+ /* TRICE32_1 ( TRICE32_1 ) */ {14965u, 32u, 1u, "rd:TRICE32_1 float %F (%%F)\n"},
+ /* TRICE32_1 ( TRICE32_1 ) */ {14966u, 32u, 1u, "rd:TRICE32_1 float %G (%%G)\n"},
+ /* TRICE32_1 ( TRICE32_1 ) */ {14961u, 32u, 1u, "rd:TRICE32_1 float %e (%%e)\n"},
+ /* TRICE32_1 ( TRICE32_1 ) */ {14962u, 32u, 1u, "rd:TRICE32_1 float %f (%%f)\n"},
+ /* TRICE32_1 ( TRICE32_1 ) */ {14963u, 32u, 1u, "rd:TRICE32_1 float %g (%%g)\n"},
+ /* TRICE32_10 ( TRICE32_10 ) */ {14445u, 32u, 10u, "rd:TRICE32_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_10 ( TRICE32_10 ) */ {14457u, 32u, 10u, "rd:TRICE32_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_10 ( TRICE32_10 ) */ {14469u, 32u, 10u, "rd:TRICE32_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_11 ( TRICE32_11 ) */ {14446u, 32u, 11u, "rd:TRICE32_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_11 ( TRICE32_11 ) */ {14458u, 32u, 11u, "rd:TRICE32_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_11 ( TRICE32_11 ) */ {14470u, 32u, 11u, "rd:TRICE32_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_12 ( TRICE32_12 ) */ {14447u, 32u, 12u, "rd:TRICE32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_12 ( TRICE32_12 ) */ {14459u, 32u, 12u, "rd:TRICE32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_12 ( TRICE32_12 ) */ {14471u, 32u, 12u, "rd:TRICE32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_2 ( TRICE32_2 ) */ {14437u, 32u, 2u, "rd:TRICE32_2 %d, %d\n"},
+ /* TRICE32_2 ( TRICE32_2 ) */ {14449u, 32u, 2u, "rd:TRICE32_2 %d, %d\n"},
+ /* TRICE32_2 ( TRICE32_2 ) */ {14461u, 32u, 2u, "rd:TRICE32_2 %d, %d\n"},
+ /* TRICE32_3 ( TRICE32_3 ) */ {14438u, 32u, 3u, "rd:TRICE32_3 %d, %d, %d\n"},
+ /* TRICE32_3 ( TRICE32_3 ) */ {14450u, 32u, 3u, "rd:TRICE32_3 %d, %d, %d\n"},
+ /* TRICE32_3 ( TRICE32_3 ) */ {14462u, 32u, 3u, "rd:TRICE32_3 %d, %d, %d\n"},
+ /* TRICE32_4 ( TRICE32_4 ) */ {14439u, 32u, 4u, "rd:TRICE32_4 %d, %d, %d, %d\n"},
+ /* TRICE32_4 ( TRICE32_4 ) */ {14451u, 32u, 4u, "rd:TRICE32_4 %d, %d, %d, %d\n"},
+ /* TRICE32_4 ( TRICE32_4 ) */ {14463u, 32u, 4u, "rd:TRICE32_4 %d, %d, %d, %d\n"},
+ /* TRICE32_5 ( TRICE32_5 ) */ {14440u, 32u, 5u, "rd:TRICE32_5 %d, %d, %d, %d, %d\n"},
+ /* TRICE32_5 ( TRICE32_5 ) */ {14452u, 32u, 5u, "rd:TRICE32_5 %d, %d, %d, %d, %d\n"},
+ /* TRICE32_5 ( TRICE32_5 ) */ {14464u, 32u, 5u, "rd:TRICE32_5 %d, %d, %d, %d, %d\n"},
+ /* TRICE32_6 ( TRICE32_6 ) */ {14441u, 32u, 6u, "rd:TRICE32_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_6 ( TRICE32_6 ) */ {14453u, 32u, 6u, "rd:TRICE32_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_6 ( TRICE32_6 ) */ {14465u, 32u, 6u, "rd:TRICE32_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_7 ( TRICE32_7 ) */ {14442u, 32u, 7u, "rd:TRICE32_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_7 ( TRICE32_7 ) */ {14454u, 32u, 7u, "rd:TRICE32_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_7 ( TRICE32_7 ) */ {14466u, 32u, 7u, "rd:TRICE32_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_8 ( TRICE32_8 ) */ {14443u, 32u, 8u, "rd:TRICE32_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_8 ( TRICE32_8 ) */ {14455u, 32u, 8u, "rd:TRICE32_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_8 ( TRICE32_8 ) */ {14467u, 32u, 8u, "rd:TRICE32_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_9 ( TRICE32_9 ) */ {14444u, 32u, 9u, "rd:TRICE32_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_9 ( TRICE32_9 ) */ {14456u, 32u, 9u, "rd:TRICE32_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_9 ( TRICE32_9 ) */ {14468u, 32u, 9u, "rd:TRICE32_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_12 ) */ {14558u, 64u, 12u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_12 ) */ {14570u, 64u, 12u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_12 ) */ {14582u, 64u, 12u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_11 ) */ {14557u, 64u, 11u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_11 ) */ {14569u, 64u, 11u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_11 ) */ {14581u, 64u, 11u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_10 ) */ {14556u, 64u, 10u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_10 ) */ {14568u, 64u, 10u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_10 ) */ {14580u, 64u, 10u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_9 ) */ {14555u, 64u, 9u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_9 ) */ {14567u, 64u, 9u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_9 ) */ {14579u, 64u, 9u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_8 ) */ {14554u, 64u, 8u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_8 ) */ {14566u, 64u, 8u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_8 ) */ {14578u, 64u, 8u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_7 ) */ {14553u, 64u, 7u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_7 ) */ {14565u, 64u, 7u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_7 ) */ {14577u, 64u, 7u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_6 ) */ {14552u, 64u, 6u, "rd:TRICE64 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_6 ) */ {14564u, 64u, 6u, "rd:TRICE64 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_6 ) */ {14576u, 64u, 6u, "rd:TRICE64 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_5 ) */ {14551u, 64u, 5u, "rd:TRICE64 %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_5 ) */ {14563u, 64u, 5u, "rd:TRICE64 %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_5 ) */ {14575u, 64u, 5u, "rd:TRICE64 %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_4 ) */ {14550u, 64u, 4u, "rd:TRICE64 %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_4 ) */ {14562u, 64u, 4u, "rd:TRICE64 %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_4 ) */ {14574u, 64u, 4u, "rd:TRICE64 %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_3 ) */ {14549u, 64u, 3u, "rd:TRICE64 %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_3 ) */ {14561u, 64u, 3u, "rd:TRICE64 %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_3 ) */ {14573u, 64u, 3u, "rd:TRICE64 %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_2 ) */ {13210u, 64u, 2u, "rd:TRICE64 %d, %d\n"},
+ /* TRICE64 ( TRICE64_2 ) */ {14548u, 64u, 2u, "rd:TRICE64 %d, %d\n"},
+ /* TRICE64 ( TRICE64_2 ) */ {14560u, 64u, 2u, "rd:TRICE64 %d, %d\n"},
+ /* TRICE64 ( TRICE64_2 ) */ {14572u, 64u, 2u, "rd:TRICE64 %d, %d\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {14547u, 64u, 1u, "rd:TRICE64 %d\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {14559u, 64u, 1u, "rd:TRICE64 %d\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {14571u, 64u, 1u, "rd:TRICE64 %d\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {15015u, 64u, 1u, "rd:TRICE64 double %12.6E (%%12.6E), aDouble(y)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {15016u, 64u, 1u, "rd:TRICE64 double %12.6F (%%12.6F), aDouble(y)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {15017u, 64u, 1u, "rd:TRICE64 double %12.6G (%%12.6G), aDouble(y)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {15012u, 64u, 1u, "rd:TRICE64 double %12.6e (%%12.6e), aDouble(y)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {15013u, 64u, 1u, "rd:TRICE64 double %12.6f (%%12.6f), aDouble(y)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {15014u, 64u, 1u, "rd:TRICE64 double %12.6g (%%12.6g), aDouble(y)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {14982u, 64u, 1u, "rd:TRICE64 double %E (%%E), aDouble(y)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {15001u, 64u, 1u, "rd:TRICE64 double %E (%%E), aDouble(y)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {14983u, 64u, 1u, "rd:TRICE64 double %F (%%F), aDouble(y)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {15002u, 64u, 1u, "rd:TRICE64 double %F (%%F), aDouble(y)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {14984u, 64u, 1u, "rd:TRICE64 double %G (%%G), aDouble(y)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {15003u, 64u, 1u, "rd:TRICE64 double %G (%%G), aDouble(y)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {14979u, 64u, 1u, "rd:TRICE64 double %e (%%e), aDouble(y)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {14998u, 64u, 1u, "rd:TRICE64 double %e (%%e), aDouble(y)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {14980u, 64u, 1u, "rd:TRICE64 double %f (%%f), aDouble(y)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {14999u, 64u, 1u, "rd:TRICE64 double %f (%%f), aDouble(y)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {14981u, 64u, 1u, "rd:TRICE64 double %g (%%g), aDouble(y)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {15000u, 64u, 1u, "rd:TRICE64 double %g (%%g), aDouble(y)\n"},
+ /* TRICE64_1 ( TRICE64_1 ) */ {14584u, 64u, 1u, "rd:TRICE64_1 %d\n"},
+ /* TRICE64_1 ( TRICE64_1 ) */ {14596u, 64u, 1u, "rd:TRICE64_1 %d\n"},
+ /* TRICE64_1 ( TRICE64_1 ) */ {14608u, 64u, 1u, "rd:TRICE64_1 %d\n"},
+ /* TRICE64_1 ( TRICE64_1 ) */ {14988u, 64u, 1u, "rd:TRICE64_1 double %E (%%E), aDouble(y)\n"},
+ /* TRICE64_1 ( TRICE64_1 ) */ {14989u, 64u, 1u, "rd:TRICE64_1 double %F (%%F), aDouble(y)\n"},
+ /* TRICE64_1 ( TRICE64_1 ) */ {14990u, 64u, 1u, "rd:TRICE64_1 double %G (%%G), aDouble(y)\n"},
+ /* TRICE64_1 ( TRICE64_1 ) */ {14985u, 64u, 1u, "rd:TRICE64_1 double %e (%%e), aDouble(y)\n"},
+ /* TRICE64_1 ( TRICE64_1 ) */ {14986u, 64u, 1u, "rd:TRICE64_1 double %f (%%f), aDouble(y)\n"},
+ /* TRICE64_1 ( TRICE64_1 ) */ {14987u, 64u, 1u, "rd:TRICE64_1 double %g (%%g), aDouble(y)\n"},
+ /* TRICE64_10 ( TRICE64_10 ) */ {14593u, 64u, 10u, "rd:TRICE64_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_10 ( TRICE64_10 ) */ {14605u, 64u, 10u, "rd:TRICE64_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_10 ( TRICE64_10 ) */ {14617u, 64u, 10u, "rd:TRICE64_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_11 ( TRICE64_11 ) */ {14594u, 64u, 11u, "rd:TRICE64_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_11 ( TRICE64_11 ) */ {14606u, 64u, 11u, "rd:TRICE64_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_11 ( TRICE64_11 ) */ {14618u, 64u, 11u, "rd:TRICE64_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_12 ( TRICE64_12 ) */ {14595u, 64u, 12u, "rd:TRICE64_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_12 ( TRICE64_12 ) */ {14607u, 64u, 12u, "rd:TRICE64_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_12 ( TRICE64_12 ) */ {14619u, 64u, 12u, "rd:TRICE64_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_2 ( TRICE64_2 ) */ {14585u, 64u, 2u, "rd:TRICE64_2 %d, %d\n"},
+ /* TRICE64_2 ( TRICE64_2 ) */ {14597u, 64u, 2u, "rd:TRICE64_2 %d, %d\n"},
+ /* TRICE64_2 ( TRICE64_2 ) */ {14609u, 64u, 2u, "rd:TRICE64_2 %d, %d\n"},
+ /* TRICE64_3 ( TRICE64_3 ) */ {14586u, 64u, 3u, "rd:TRICE64_3 %d, %d, %d\n"},
+ /* TRICE64_3 ( TRICE64_3 ) */ {14598u, 64u, 3u, "rd:TRICE64_3 %d, %d, %d\n"},
+ /* TRICE64_3 ( TRICE64_3 ) */ {14610u, 64u, 3u, "rd:TRICE64_3 %d, %d, %d\n"},
+ /* TRICE64_4 ( TRICE64_4 ) */ {14587u, 64u, 4u, "rd:TRICE64_4 %d, %d, %d, %d\n"},
+ /* TRICE64_4 ( TRICE64_4 ) */ {14599u, 64u, 4u, "rd:TRICE64_4 %d, %d, %d, %d\n"},
+ /* TRICE64_4 ( TRICE64_4 ) */ {14611u, 64u, 4u, "rd:TRICE64_4 %d, %d, %d, %d\n"},
+ /* TRICE64_5 ( TRICE64_5 ) */ {14588u, 64u, 5u, "rd:TRICE64_5 %d, %d, %d, %d, %d\n"},
+ /* TRICE64_5 ( TRICE64_5 ) */ {14600u, 64u, 5u, "rd:TRICE64_5 %d, %d, %d, %d, %d\n"},
+ /* TRICE64_5 ( TRICE64_5 ) */ {14612u, 64u, 5u, "rd:TRICE64_5 %d, %d, %d, %d, %d\n"},
+ /* TRICE64_6 ( TRICE64_6 ) */ {14589u, 64u, 6u, "rd:TRICE64_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_6 ( TRICE64_6 ) */ {14601u, 64u, 6u, "rd:TRICE64_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_6 ( TRICE64_6 ) */ {14613u, 64u, 6u, "rd:TRICE64_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_7 ( TRICE64_7 ) */ {14590u, 64u, 7u, "rd:TRICE64_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_7 ( TRICE64_7 ) */ {14602u, 64u, 7u, "rd:TRICE64_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_7 ( TRICE64_7 ) */ {14614u, 64u, 7u, "rd:TRICE64_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_8 ( TRICE64_8 ) */ {14591u, 64u, 8u, "rd:TRICE64_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_8 ( TRICE64_8 ) */ {14603u, 64u, 8u, "rd:TRICE64_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_8 ( TRICE64_8 ) */ {14615u, 64u, 8u, "rd:TRICE64_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_9 ( TRICE64_9 ) */ {14592u, 64u, 9u, "rd:TRICE64_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_9 ( TRICE64_9 ) */ {14604u, 64u, 9u, "rd:TRICE64_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_9 ( TRICE64_9 ) */ {14616u, 64u, 9u, "rd:TRICE64_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_12 ) */ {14114u, 8u, 12u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_12 ) */ {14126u, 8u, 12u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_12 ) */ {14138u, 8u, 12u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_11 ) */ {14113u, 8u, 11u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_11 ) */ {14125u, 8u, 11u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_11 ) */ {14137u, 8u, 11u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_10 ) */ {14112u, 8u, 10u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_10 ) */ {14124u, 8u, 10u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_10 ) */ {14136u, 8u, 10u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_9 ) */ {14111u, 8u, 9u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_9 ) */ {14123u, 8u, 9u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_9 ) */ {14135u, 8u, 9u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_8 ) */ {14110u, 8u, 8u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_8 ) */ {14122u, 8u, 8u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_8 ) */ {14134u, 8u, 8u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_7 ) */ {14109u, 8u, 7u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_7 ) */ {14121u, 8u, 7u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_7 ) */ {14133u, 8u, 7u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_6 ) */ {14108u, 8u, 6u, "rd:TRICE8 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_6 ) */ {14120u, 8u, 6u, "rd:TRICE8 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_6 ) */ {14132u, 8u, 6u, "rd:TRICE8 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_5 ) */ {14107u, 8u, 5u, "rd:TRICE8 %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_5 ) */ {14119u, 8u, 5u, "rd:TRICE8 %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_5 ) */ {14131u, 8u, 5u, "rd:TRICE8 %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_4 ) */ {14106u, 8u, 4u, "rd:TRICE8 %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_4 ) */ {14118u, 8u, 4u, "rd:TRICE8 %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_4 ) */ {14130u, 8u, 4u, "rd:TRICE8 %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_3 ) */ {14105u, 8u, 3u, "rd:TRICE8 %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_3 ) */ {14117u, 8u, 3u, "rd:TRICE8 %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_3 ) */ {14129u, 8u, 3u, "rd:TRICE8 %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_2 ) */ {14104u, 8u, 2u, "rd:TRICE8 %d, %d\n"},
+ /* TRICE8 ( TRICE8_2 ) */ {14116u, 8u, 2u, "rd:TRICE8 %d, %d\n"},
+ /* TRICE8 ( TRICE8_2 ) */ {14128u, 8u, 2u, "rd:TRICE8 %d, %d\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {14103u, 8u, 1u, "rd:TRICE8 %d\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {14115u, 8u, 1u, "rd:TRICE8 %d\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {14127u, 8u, 1u, "rd:TRICE8 %d\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {15024u, 8u, 1u, "rd:TRICE8 line %O (%%O ,-1)\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {15025u, 8u, 1u, "rd:TRICE8 line %X (%%X ,-1)\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {15022u, 8u, 1u, "rd:TRICE8 line %b (%%b ,-1)\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {15027u, 8u, 1u, "rd:TRICE8 line %d (%%d ,-1)\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {15023u, 8u, 1u, "rd:TRICE8 line %o (%%o ,-1)\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {15019u, 8u, 1u, "rd:TRICE8 line %t (%%t ,0)\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {15020u, 8u, 1u, "rd:TRICE8 line %t (%%t ,2)\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {15021u, 8u, 1u, "rd:TRICE8 line %u (%%u ,-1)\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {15026u, 8u, 1u, "rd:TRICE8 line %x (%%x ,-1)\n"},
+ /* TRICE8_1 ( TRICE8_1 ) */ {14140u, 8u, 1u, "rd:TRICE8_1 %d\n"},
+ /* TRICE8_1 ( TRICE8_1 ) */ {14152u, 8u, 1u, "rd:TRICE8_1 %d\n"},
+ /* TRICE8_1 ( TRICE8_1 ) */ {14164u, 8u, 1u, "rd:TRICE8_1 %d\n"},
+ /* TRICE8_10 ( TRICE8_10 ) */ {14149u, 8u, 10u, "rd:TRICE8_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_10 ( TRICE8_10 ) */ {14161u, 8u, 10u, "rd:TRICE8_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_10 ( TRICE8_10 ) */ {14173u, 8u, 10u, "rd:TRICE8_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_11 ( TRICE8_11 ) */ {14150u, 8u, 11u, "rd:TRICE8_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_11 ( TRICE8_11 ) */ {14162u, 8u, 11u, "rd:TRICE8_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_11 ( TRICE8_11 ) */ {14174u, 8u, 11u, "rd:TRICE8_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_12 ( TRICE8_12 ) */ {14151u, 8u, 12u, "rd:TRICE8_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_12 ( TRICE8_12 ) */ {14163u, 8u, 12u, "rd:TRICE8_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_12 ( TRICE8_12 ) */ {14175u, 8u, 12u, "rd:TRICE8_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_2 ( TRICE8_2 ) */ {14141u, 8u, 2u, "rd:TRICE8_2 %d, %d\n"},
+ /* TRICE8_2 ( TRICE8_2 ) */ {14153u, 8u, 2u, "rd:TRICE8_2 %d, %d\n"},
+ /* TRICE8_2 ( TRICE8_2 ) */ {14165u, 8u, 2u, "rd:TRICE8_2 %d, %d\n"},
+ /* TRICE8_3 ( TRICE8_3 ) */ {14142u, 8u, 3u, "rd:TRICE8_3 %d, %d, %d\n"},
+ /* TRICE8_3 ( TRICE8_3 ) */ {14154u, 8u, 3u, "rd:TRICE8_3 %d, %d, %d\n"},
+ /* TRICE8_3 ( TRICE8_3 ) */ {14166u, 8u, 3u, "rd:TRICE8_3 %d, %d, %d\n"},
+ /* TRICE8_4 ( TRICE8_4 ) */ {14143u, 8u, 4u, "rd:TRICE8_4 %d, %d, %d, %d\n"},
+ /* TRICE8_4 ( TRICE8_4 ) */ {14155u, 8u, 4u, "rd:TRICE8_4 %d, %d, %d, %d\n"},
+ /* TRICE8_4 ( TRICE8_4 ) */ {14167u, 8u, 4u, "rd:TRICE8_4 %d, %d, %d, %d\n"},
+ /* TRICE8_5 ( TRICE8_5 ) */ {14144u, 8u, 5u, "rd:TRICE8_5 %d, %d, %d, %d, %d\n"},
+ /* TRICE8_5 ( TRICE8_5 ) */ {14156u, 8u, 5u, "rd:TRICE8_5 %d, %d, %d, %d, %d\n"},
+ /* TRICE8_5 ( TRICE8_5 ) */ {14168u, 8u, 5u, "rd:TRICE8_5 %d, %d, %d, %d, %d\n"},
+ /* TRICE8_6 ( TRICE8_6 ) */ {14145u, 8u, 6u, "rd:TRICE8_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_6 ( TRICE8_6 ) */ {14157u, 8u, 6u, "rd:TRICE8_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_6 ( TRICE8_6 ) */ {14169u, 8u, 6u, "rd:TRICE8_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_7 ( TRICE8_7 ) */ {14146u, 8u, 7u, "rd:TRICE8_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_7 ( TRICE8_7 ) */ {14158u, 8u, 7u, "rd:TRICE8_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_7 ( TRICE8_7 ) */ {14170u, 8u, 7u, "rd:TRICE8_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_8 ( TRICE8_8 ) */ {14147u, 8u, 8u, "rd:TRICE8_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_8 ( TRICE8_8 ) */ {14159u, 8u, 8u, "rd:TRICE8_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_8 ( TRICE8_8 ) */ {14171u, 8u, 8u, "rd:TRICE8_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_9 ( TRICE8_9 ) */ {14148u, 8u, 9u, "rd:TRICE8_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_9 ( TRICE8_9 ) */ {14160u, 8u, 9u, "rd:TRICE8_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_9 ( TRICE8_9 ) */ {14172u, 8u, 9u, "rd:TRICE8_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_1 ( TRICE32_1 ) */ {14029u, 32u, 1u, "rd:TRICE_1 %d\n"},
+ /* TRICE_1 ( TRICE32_1 ) */ {14041u, 32u, 1u, "rd:TRICE_1 %d\n"},
+ /* TRICE_1 ( TRICE32_1 ) */ {14053u, 32u, 1u, "rd:TRICE_1 %d\n"},
+ /* trice ( trice32_1 ) */ {15116u, 32u, 1u, "rd:TRICE_1 %d\n"},
+ /* TRICE_10 ( TRICE32_10 ) */ {14038u, 32u, 10u, "rd:TRICE_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_10 ( TRICE32_10 ) */ {14050u, 32u, 10u, "rd:TRICE_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_10 ( TRICE32_10 ) */ {14062u, 32u, 10u, "rd:TRICE_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_10 ) */ {15125u, 32u, 10u, "rd:TRICE_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_11 ( TRICE32_11 ) */ {14039u, 32u, 11u, "rd:TRICE_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_11 ( TRICE32_11 ) */ {14051u, 32u, 11u, "rd:TRICE_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_11 ( TRICE32_11 ) */ {14063u, 32u, 11u, "rd:TRICE_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_11 ) */ {15126u, 32u, 11u, "rd:TRICE_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_12 ( TRICE32_12 ) */ {14040u, 32u, 12u, "rd:TRICE_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_12 ( TRICE32_12 ) */ {14052u, 32u, 12u, "rd:TRICE_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_12 ( TRICE32_12 ) */ {14064u, 32u, 12u, "rd:TRICE_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_12 ) */ {15127u, 32u, 12u, "rd:TRICE_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_2 ( TRICE32_2 ) */ {14030u, 32u, 2u, "rd:TRICE_2 %d, %d\n"},
+ /* TRICE_2 ( TRICE32_2 ) */ {14042u, 32u, 2u, "rd:TRICE_2 %d, %d\n"},
+ /* TRICE_2 ( TRICE32_2 ) */ {14054u, 32u, 2u, "rd:TRICE_2 %d, %d\n"},
+ /* trice ( trice32_2 ) */ {15117u, 32u, 2u, "rd:TRICE_2 %d, %d\n"},
+ /* TRICE_3 ( TRICE32_3 ) */ {14031u, 32u, 3u, "rd:TRICE_3 %d, %d, %d\n"},
+ /* TRICE_3 ( TRICE32_3 ) */ {14043u, 32u, 3u, "rd:TRICE_3 %d, %d, %d\n"},
+ /* TRICE_3 ( TRICE32_3 ) */ {14055u, 32u, 3u, "rd:TRICE_3 %d, %d, %d\n"},
+ /* trice ( trice32_3 ) */ {15118u, 32u, 3u, "rd:TRICE_3 %d, %d, %d\n"},
+ /* TRICE_4 ( TRICE32_4 ) */ {14032u, 32u, 4u, "rd:TRICE_4 %d, %d, %d, %d\n"},
+ /* TRICE_4 ( TRICE32_4 ) */ {14044u, 32u, 4u, "rd:TRICE_4 %d, %d, %d, %d\n"},
+ /* TRICE_4 ( TRICE32_4 ) */ {14056u, 32u, 4u, "rd:TRICE_4 %d, %d, %d, %d\n"},
+ /* trice ( trice32_4 ) */ {15119u, 32u, 4u, "rd:TRICE_4 %d, %d, %d, %d\n"},
+ /* TRICE_5 ( TRICE32_5 ) */ {14033u, 32u, 5u, "rd:TRICE_5 %d, %d, %d, %d, %d\n"},
+ /* TRICE_5 ( TRICE32_5 ) */ {14045u, 32u, 5u, "rd:TRICE_5 %d, %d, %d, %d, %d\n"},
+ /* TRICE_5 ( TRICE32_5 ) */ {14057u, 32u, 5u, "rd:TRICE_5 %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_5 ) */ {15120u, 32u, 5u, "rd:TRICE_5 %d, %d, %d, %d, %d\n"},
+ /* TRICE_6 ( TRICE32_6 ) */ {14034u, 32u, 6u, "rd:TRICE_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_6 ( TRICE32_6 ) */ {14046u, 32u, 6u, "rd:TRICE_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_6 ( TRICE32_6 ) */ {14058u, 32u, 6u, "rd:TRICE_6 %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_6 ) */ {15121u, 32u, 6u, "rd:TRICE_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_7 ( TRICE32_7 ) */ {14035u, 32u, 7u, "rd:TRICE_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_7 ( TRICE32_7 ) */ {14047u, 32u, 7u, "rd:TRICE_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_7 ( TRICE32_7 ) */ {14059u, 32u, 7u, "rd:TRICE_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_7 ) */ {15122u, 32u, 7u, "rd:TRICE_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_8 ( TRICE32_8 ) */ {14036u, 32u, 8u, "rd:TRICE_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_8 ( TRICE32_8 ) */ {14048u, 32u, 8u, "rd:TRICE_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_8 ( TRICE32_8 ) */ {14060u, 32u, 8u, "rd:TRICE_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_8 ) */ {15123u, 32u, 8u, "rd:TRICE_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_9 ( TRICE32_9 ) */ {14037u, 32u, 9u, "rd:TRICE_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_9 ( TRICE32_9 ) */ {14049u, 32u, 9u, "rd:TRICE_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_9 ( TRICE32_9 ) */ {14061u, 32u, 9u, "rd:TRICE_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_9 ) */ {15124u, 32u, 9u, "rd:TRICE_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice ( TRice32_12 ) */ {13133u, 32u, 12u, "rd:TRice %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice ( TRice32_11 ) */ {13132u, 32u, 11u, "rd:TRice %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice ( TRice32_10 ) */ {13131u, 32u, 10u, "rd:TRice %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice ( TRice32_9 ) */ {13130u, 32u, 9u, "rd:TRice %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice ( TRice32_8 ) */ {13129u, 32u, 8u, "rd:TRice %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice ( TRice32_7 ) */ {13128u, 32u, 7u, "rd:TRice %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice ( TRice32_6 ) */ {13127u, 32u, 6u, "rd:TRice %d, %d, %d, %d, %d, %d\n"},
+ /* TRice ( TRice32_5 ) */ {13126u, 32u, 5u, "rd:TRice %d, %d, %d, %d, %d\n"},
+ /* TRice ( TRice32_4 ) */ {13125u, 32u, 4u, "rd:TRice %d, %d, %d, %d\n"},
+ /* TRice ( TRice32_3 ) */ {13124u, 32u, 3u, "rd:TRice %d, %d, %d\n"},
+ /* TRice ( TRice32_2 ) */ {13123u, 32u, 2u, "rd:TRice %d, %d\n"},
+ /* TRice ( TRice32_1 ) */ {13122u, 32u, 1u, "rd:TRice %d\n"},
+ /* TRice16 ( TRice16_12 ) */ {14360u, 16u, 12u, "rd:TRice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice16 ( TRice16_11 ) */ {14359u, 16u, 11u, "rd:TRice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice16 ( TRice16_10 ) */ {14358u, 16u, 10u, "rd:TRice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice16 ( TRice16_9 ) */ {14357u, 16u, 9u, "rd:TRice16 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice16 ( TRice16_8 ) */ {14356u, 16u, 8u, "rd:TRice16 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice16 ( TRice16_7 ) */ {14355u, 16u, 7u, "rd:TRice16 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice16 ( TRice16_6 ) */ {14354u, 16u, 6u, "rd:TRice16 %d, %d, %d, %d, %d, %d\n"},
+ /* TRice16 ( TRice16_5 ) */ {14353u, 16u, 5u, "rd:TRice16 %d, %d, %d, %d, %d\n"},
+ /* TRice16 ( TRice16_4 ) */ {14352u, 16u, 4u, "rd:TRice16 %d, %d, %d, %d\n"},
+ /* TRice16 ( TRice16_3 ) */ {14351u, 16u, 3u, "rd:TRice16 %d, %d, %d\n"},
+ /* TRice16 ( TRice16_2 ) */ {14350u, 16u, 2u, "rd:TRice16 %d, %d\n"},
+ /* TRice16 ( TRice16_1 ) */ {14349u, 16u, 1u, "rd:TRice16 %d\n"},
+ /* TRice16_1 ( TRice16_1 ) */ {14386u, 16u, 1u, "rd:TRice16_1 %d\n"},
+ /* TRice16_10 ( TRice16_10 ) */ {14395u, 16u, 10u, "rd:TRice16_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice16_11 ( TRice16_11 ) */ {14396u, 16u, 11u, "rd:TRice16_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice16_12 ( TRice16_12 ) */ {14397u, 16u, 12u, "rd:TRice16_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice16_2 ( TRice16_2 ) */ {14387u, 16u, 2u, "rd:TRice16_2 %d, %d\n"},
+ /* TRice16_3 ( TRice16_3 ) */ {14388u, 16u, 3u, "rd:TRice16_3 %d, %d, %d\n"},
+ /* TRice16_4 ( TRice16_4 ) */ {14389u, 16u, 4u, "rd:TRice16_4 %d, %d, %d, %d\n"},
+ /* TRice16_5 ( TRice16_5 ) */ {14390u, 16u, 5u, "rd:TRice16_5 %d, %d, %d, %d, %d\n"},
+ /* TRice16_6 ( TRice16_6 ) */ {14391u, 16u, 6u, "rd:TRice16_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRice16_7 ( TRice16_7 ) */ {14392u, 16u, 7u, "rd:TRice16_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice16_8 ( TRice16_8 ) */ {14393u, 16u, 8u, "rd:TRice16_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice16_9 ( TRice16_9 ) */ {14394u, 16u, 9u, "rd:TRice16_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32 ( TRice32_12 ) */ {14508u, 32u, 12u, "rd:TRice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32 ( TRice32_11 ) */ {14507u, 32u, 11u, "rd:TRice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32 ( TRice32_10 ) */ {14506u, 32u, 10u, "rd:TRice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32 ( TRice32_9 ) */ {14505u, 32u, 9u, "rd:TRice32 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32 ( TRice32_8 ) */ {14504u, 32u, 8u, "rd:TRice32 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32 ( TRice32_7 ) */ {14503u, 32u, 7u, "rd:TRice32 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32 ( TRice32_6 ) */ {14502u, 32u, 6u, "rd:TRice32 %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32 ( TRice32_5 ) */ {14501u, 32u, 5u, "rd:TRice32 %d, %d, %d, %d, %d\n"},
+ /* TRice32 ( TRice32_4 ) */ {14500u, 32u, 4u, "rd:TRice32 %d, %d, %d, %d\n"},
+ /* TRice32 ( TRice32_3 ) */ {14499u, 32u, 3u, "rd:TRice32 %d, %d, %d\n"},
+ /* TRice32 ( TRice32_2 ) */ {14498u, 32u, 2u, "rd:TRice32 %d, %d\n"},
+ /* TRice32 ( TRice32_1 ) */ {14497u, 32u, 1u, "rd:TRice32 %d\n"},
+ /* TRice32 ( TRice32_4 ) */ {13251u, 32u, 4u, "rd:TRice32 int %X, float %f (%%f), %08x, %032b\n"},
+ /* TRice32 ( TRice32_4 ) */ {13245u, 32u, 4u, "rd:TRice32 int %d, float %f (%%f), %08x, %032b\n"},
+ /* TRice32 ( TRice32_4 ) */ {13246u, 32u, 4u, "rd:TRice32 int %d, float %f (%%f), %08x, %032b\n"},
+ /* TRice32 ( TRice32_4 ) */ {13248u, 32u, 4u, "rd:TRice32 int %d, float %f (%%f), %08x, %032b\n"},
+ /* TRice32 ( TRice32_4 ) */ {13249u, 32u, 4u, "rd:TRice32 int %d, float %f (%%f), %08x, %032b\n"},
+ /* TRice32 ( TRice32_4 ) */ {13250u, 32u, 4u, "rd:TRice32 int %d, float %f (%%f), %08x, %032b\n"},
+ /* TRice32 ( TRice32_4 ) */ {13247u, 32u, 4u, "rd:TRice32 int %x, float %f (%%f), %08x, %032b\n"},
+ /* TRice32_1 ( TRice32_1 ) */ {14534u, 32u, 1u, "rd:TRice32_1 %d\n"},
+ /* TRice32_10 ( TRice32_10 ) */ {14543u, 32u, 10u, "rd:TRice32_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32_11 ( TRice32_11 ) */ {14544u, 32u, 11u, "rd:TRice32_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32_12 ( TRice32_12 ) */ {14545u, 32u, 12u, "rd:TRice32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32_12 ( TRice32_12 ) */ {14693u, 32u, 12u, "rd:TRice32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32_2 ( TRice32_2 ) */ {14535u, 32u, 2u, "rd:TRice32_2 %d, %d\n"},
+ /* TRice32_3 ( TRice32_3 ) */ {14536u, 32u, 3u, "rd:TRice32_3 %d, %d, %d\n"},
+ /* TRice32_4 ( TRice32_4 ) */ {14537u, 32u, 4u, "rd:TRice32_4 %d, %d, %d, %d\n"},
+ /* TRice32_5 ( TRice32_5 ) */ {14538u, 32u, 5u, "rd:TRice32_5 %d, %d, %d, %d, %d\n"},
+ /* TRice32_6 ( TRice32_6 ) */ {14539u, 32u, 6u, "rd:TRice32_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32_7 ( TRice32_7 ) */ {14540u, 32u, 7u, "rd:TRice32_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32_8 ( TRice32_8 ) */ {14541u, 32u, 8u, "rd:TRice32_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32_9 ( TRice32_9 ) */ {14542u, 32u, 9u, "rd:TRice32_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice64 ( TRice64_12 ) */ {14656u, 64u, 12u, "rd:TRice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice64 ( TRice64_11 ) */ {14655u, 64u, 11u, "rd:TRice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice64 ( TRice64_10 ) */ {14654u, 64u, 10u, "rd:TRice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice64 ( TRice64_9 ) */ {14653u, 64u, 9u, "rd:TRice64 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice64 ( TRice64_8 ) */ {14652u, 64u, 8u, "rd:TRice64 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice64 ( TRice64_7 ) */ {14651u, 64u, 7u, "rd:TRice64 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice64 ( TRice64_6 ) */ {14650u, 64u, 6u, "rd:TRice64 %d, %d, %d, %d, %d, %d\n"},
+ /* TRice64 ( TRice64_5 ) */ {14649u, 64u, 5u, "rd:TRice64 %d, %d, %d, %d, %d\n"},
+ /* TRice64 ( TRice64_4 ) */ {14648u, 64u, 4u, "rd:TRice64 %d, %d, %d, %d\n"},
+ /* TRice64 ( TRice64_3 ) */ {14647u, 64u, 3u, "rd:TRice64 %d, %d, %d\n"},
+ /* TRice64 ( TRice64_2 ) */ {14646u, 64u, 2u, "rd:TRice64 %d, %d\n"},
+ /* TRice64 ( TRice64_1 ) */ {14645u, 64u, 1u, "rd:TRice64 %d\n"},
+ /* TRice64 ( TRice64_4 ) */ {13257u, 64u, 4u, "rd:TRice64 int %X, double %f (%%f), %016x, %064b\n"},
+ /* TRice64 ( TRice64_4 ) */ {13252u, 64u, 4u, "rd:TRice64 int %d, double %f (%%f), %016x, %064b\n"},
+ /* TRice64 ( TRice64_4 ) */ {13253u, 64u, 4u, "rd:TRice64 int %d, double %f (%%f), %016x, %064b\n"},
+ /* TRice64 ( TRice64_4 ) */ {13254u, 64u, 4u, "rd:TRice64 int %d, double %f (%%f), %016x, %064b\n"},
+ /* TRice64 ( TRice64_4 ) */ {13255u, 64u, 4u, "rd:TRice64 int %d, double %f (%%f), %016x, %064b\n"},
+ /* TRice64 ( TRice64_4 ) */ {13256u, 64u, 4u, "rd:TRice64 int %d, double %f (%%f), %016x, %064b\n"},
+ /* TRice64_1 ( TRice64_1 ) */ {14682u, 64u, 1u, "rd:TRice64_1 %d\n"},
+ /* TRice64_10 ( TRice64_10 ) */ {14691u, 64u, 10u, "rd:TRice64_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice64_11 ( TRice64_11 ) */ {14692u, 64u, 11u, "rd:TRice64_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice64_2 ( TRice64_2 ) */ {14683u, 64u, 2u, "rd:TRice64_2 %d, %d\n"},
+ /* TRice64_3 ( TRice64_3 ) */ {14684u, 64u, 3u, "rd:TRice64_3 %d, %d, %d\n"},
+ /* TRice64_4 ( TRice64_4 ) */ {14685u, 64u, 4u, "rd:TRice64_4 %d, %d, %d, %d\n"},
+ /* TRice64_5 ( TRice64_5 ) */ {14686u, 64u, 5u, "rd:TRice64_5 %d, %d, %d, %d, %d\n"},
+ /* TRice64_6 ( TRice64_6 ) */ {14687u, 64u, 6u, "rd:TRice64_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRice64_7 ( TRice64_7 ) */ {14688u, 64u, 7u, "rd:TRice64_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice64_8 ( TRice64_8 ) */ {14689u, 64u, 8u, "rd:TRice64_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice64_9 ( TRice64_9 ) */ {14690u, 64u, 9u, "rd:TRice64_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8 ( TRice8_12 ) */ {14212u, 8u, 12u, "rd:TRice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8 ( TRice8_11 ) */ {14211u, 8u, 11u, "rd:TRice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8 ( TRice8_10 ) */ {14210u, 8u, 10u, "rd:TRice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8 ( TRice8_9 ) */ {14209u, 8u, 9u, "rd:TRice8 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8 ( TRice8_8 ) */ {14208u, 8u, 8u, "rd:TRice8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8 ( TRice8_7 ) */ {14207u, 8u, 7u, "rd:TRice8 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8 ( TRice8_6 ) */ {14206u, 8u, 6u, "rd:TRice8 %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8 ( TRice8_5 ) */ {14205u, 8u, 5u, "rd:TRice8 %d, %d, %d, %d, %d\n"},
+ /* TRice8 ( TRice8_4 ) */ {14204u, 8u, 4u, "rd:TRice8 %d, %d, %d, %d\n"},
+ /* TRice8 ( TRice8_3 ) */ {14203u, 8u, 3u, "rd:TRice8 %d, %d, %d\n"},
+ /* TRice8 ( TRice8_2 ) */ {14202u, 8u, 2u, "rd:TRice8 %d, %d\n"},
+ /* TRice8 ( TRice8_1 ) */ {14201u, 8u, 1u, "rd:TRice8 %d\n"},
+ /* TRice8_1 ( TRice8_1 ) */ {14238u, 8u, 1u, "rd:TRice8_1 %d\n"},
+ /* TRice8_10 ( TRice8_10 ) */ {14247u, 8u, 10u, "rd:TRice8_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8_11 ( TRice8_11 ) */ {14248u, 8u, 11u, "rd:TRice8_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8_12 ( TRice8_12 ) */ {14249u, 8u, 12u, "rd:TRice8_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8_2 ( TRice8_2 ) */ {14239u, 8u, 2u, "rd:TRice8_2 %d, %d\n"},
+ /* TRice8_3 ( TRice8_3 ) */ {14240u, 8u, 3u, "rd:TRice8_3 %d, %d, %d\n"},
+ /* TRice8_4 ( TRice8_4 ) */ {14241u, 8u, 4u, "rd:TRice8_4 %d, %d, %d, %d\n"},
+ /* TRice8_5 ( TRice8_5 ) */ {14242u, 8u, 5u, "rd:TRice8_5 %d, %d, %d, %d, %d\n"},
+ /* TRice8_6 ( TRice8_6 ) */ {14243u, 8u, 6u, "rd:TRice8_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8_7 ( TRice8_7 ) */ {14244u, 8u, 7u, "rd:TRice8_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8_8 ( TRice8_8 ) */ {14245u, 8u, 8u, "rd:TRice8_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8_9 ( TRice8_9 ) */ {14246u, 8u, 9u, "rd:TRice8_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice ( TRice_0 ) */ {13121u, 32u, 0u, "rd:TRice\n"},
+ /* TRice_1 ( TRice32_1 ) */ {14090u, 32u, 1u, "rd:TRice_1 %d\n"},
+ /* TRice_10 ( TRice32_10 ) */ {14099u, 32u, 10u, "rd:TRice_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice_11 ( TRice32_11 ) */ {14100u, 32u, 11u, "rd:TRice_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice_12 ( TRice32_12 ) */ {14101u, 32u, 12u, "rd:TRice_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice_2 ( TRice32_2 ) */ {14091u, 32u, 2u, "rd:TRice_2 %d, %d\n"},
+ /* TRice_3 ( TRice32_3 ) */ {14092u, 32u, 3u, "rd:TRice_3 %d, %d, %d\n"},
+ /* TRice_4 ( TRice32_4 ) */ {14093u, 32u, 4u, "rd:TRice_4 %d, %d, %d, %d\n"},
+ /* TRice_5 ( TRice32_5 ) */ {14094u, 32u, 5u, "rd:TRice_5 %d, %d, %d, %d, %d\n"},
+ /* TRice_6 ( TRice32_6 ) */ {14095u, 32u, 6u, "rd:TRice_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRice_7 ( TRice32_7 ) */ {14096u, 32u, 7u, "rd:TRice_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice_8 ( TRice32_8 ) */ {14097u, 32u, 8u, "rd:TRice_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice_9 ( TRice32_9 ) */ {14098u, 32u, 9u, "rd:TRice_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice ( Trice32_12 ) */ {13119u, 32u, 12u, "rd:Trice %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice ( Trice32_11 ) */ {13118u, 32u, 11u, "rd:Trice %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice ( Trice32_10 ) */ {13117u, 32u, 10u, "rd:Trice %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice ( Trice32_9 ) */ {13116u, 32u, 9u, "rd:Trice %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice ( Trice32_8 ) */ {13115u, 32u, 8u, "rd:Trice %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice ( Trice32_7 ) */ {13114u, 32u, 7u, "rd:Trice %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice ( Trice32_6 ) */ {13113u, 32u, 6u, "rd:Trice %d, %d, %d, %d, %d, %d\n"},
+ /* Trice ( Trice32_5 ) */ {13112u, 32u, 5u, "rd:Trice %d, %d, %d, %d, %d\n"},
+ /* Trice ( Trice32_4 ) */ {13111u, 32u, 4u, "rd:Trice %d, %d, %d, %d\n"},
+ /* Trice ( Trice32_3 ) */ {13110u, 32u, 3u, "rd:Trice %d, %d, %d\n"},
+ /* Trice ( Trice32_2 ) */ {13109u, 32u, 2u, "rd:Trice %d, %d\n"},
+ /* Trice ( Trice32_1 ) */ {13108u, 32u, 1u, "rd:Trice %d\n"},
+ /* Trice ( Trice32_1 ) */ {15038u, 32u, 1u, "rd:Trice line %b (%%b)\n"},
+ /* Trice ( Trice32_1 ) */ {15041u, 32u, 1u, "rd:Trice line %d (%%d)\n"},
+ /* Trice ( Trice32_1 ) */ {15039u, 32u, 1u, "rd:Trice line %o (%%o)\n"},
+ /* Trice ( Trice32_1 ) */ {15035u, 32u, 1u, "rd:Trice line %t (%%t -1)\n"},
+ /* Trice ( Trice32_1 ) */ {15036u, 32u, 1u, "rd:Trice line %t (%%t -1)\n"},
+ /* Trice ( Trice32_1 ) */ {15037u, 32u, 1u, "rd:Trice line %u (%%u)\n"},
+ /* Trice ( Trice32_1 ) */ {15040u, 32u, 1u, "rd:Trice line %x (%%x)\n"},
+ /* Trice16 ( Trice16_12 ) */ {15153u, 16u, 12u, "rd:Trice16 %X, %X, %X, %X, %X, %X, %X, %X, %X, %X, %X, %X\n"},
+ /* Trice16 ( Trice16_11 ) */ {15152u, 16u, 11u, "rd:Trice16 %X, %X, %X, %X, %X, %X, %X, %X, %X, %X, %X\n"},
+ /* Trice16 ( Trice16_10 ) */ {15151u, 16u, 10u, "rd:Trice16 %X, %X, %X, %X, %X, %X, %X, %X, %X, %X\n"},
+ /* Trice16 ( Trice16_9 ) */ {15150u, 16u, 9u, "rd:Trice16 %X, %X, %X, %X, %X, %X, %X, %X, %X\n"},
+ /* Trice16 ( Trice16_8 ) */ {15149u, 16u, 8u, "rd:Trice16 %X, %X, %X, %X, %X, %X, %X, %X\n"},
+ /* Trice16 ( Trice16_7 ) */ {15148u, 16u, 7u, "rd:Trice16 %X, %X, %X, %X, %X, %X, %X\n"},
+ /* Trice16 ( Trice16_6 ) */ {15147u, 16u, 6u, "rd:Trice16 %X, %X, %X, %X, %X, %X\n"},
+ /* Trice16 ( Trice16_5 ) */ {15146u, 16u, 5u, "rd:Trice16 %X, %X, %X, %X, %X\n"},
+ /* Trice16 ( Trice16_4 ) */ {15145u, 16u, 4u, "rd:Trice16 %X, %X, %X, %X\n"},
+ /* Trice16 ( Trice16_3 ) */ {15144u, 16u, 3u, "rd:Trice16 %X, %X, %X\n"},
+ /* Trice16 ( Trice16_2 ) */ {15143u, 16u, 2u, "rd:Trice16 %X, %X\n"},
+ /* Trice16 ( Trice16_1 ) */ {15142u, 16u, 1u, "rd:Trice16 %X\n"},
+ /* Trice16 ( Trice16_12 ) */ {14348u, 16u, 12u, "rd:Trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice16 ( Trice16_11 ) */ {14347u, 16u, 11u, "rd:Trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice16 ( Trice16_10 ) */ {14346u, 16u, 10u, "rd:Trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice16 ( Trice16_9 ) */ {14345u, 16u, 9u, "rd:Trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice16 ( Trice16_8 ) */ {14344u, 16u, 8u, "rd:Trice16 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice16 ( Trice16_7 ) */ {14343u, 16u, 7u, "rd:Trice16 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice16 ( Trice16_6 ) */ {14342u, 16u, 6u, "rd:Trice16 %d, %d, %d, %d, %d, %d\n"},
+ /* Trice16 ( Trice16_5 ) */ {14341u, 16u, 5u, "rd:Trice16 %d, %d, %d, %d, %d\n"},
+ /* Trice16 ( Trice16_4 ) */ {14340u, 16u, 4u, "rd:Trice16 %d, %d, %d, %d\n"},
+ /* Trice16 ( Trice16_3 ) */ {14339u, 16u, 3u, "rd:Trice16 %d, %d, %d\n"},
+ /* Trice16 ( Trice16_2 ) */ {14338u, 16u, 2u, "rd:Trice16 %d, %d\n"},
+ /* Trice16 ( Trice16_1 ) */ {14337u, 16u, 1u, "rd:Trice16 %d\n"},
+ /* Trice16 ( Trice16_12 ) */ {15140u, 16u, 12u, "rd:Trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\n"},
+ /* Trice16 ( Trice16_11 ) */ {15139u, 16u, 11u, "rd:Trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\n"},
+ /* Trice16 ( Trice16_10 ) */ {15138u, 16u, 10u, "rd:Trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\n"},
+ /* Trice16 ( Trice16_9 ) */ {15137u, 16u, 9u, "rd:Trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p\n"},
+ /* Trice16 ( Trice16_8 ) */ {15136u, 16u, 8u, "rd:Trice16 %p, %p, %p, %p, %p, %p, %p, %p\n"},
+ /* Trice16 ( Trice16_7 ) */ {15135u, 16u, 7u, "rd:Trice16 %p, %p, %p, %p, %p, %p, %p\n"},
+ /* Trice16 ( Trice16_6 ) */ {15134u, 16u, 6u, "rd:Trice16 %p, %p, %p, %p, %p, %p\n"},
+ /* Trice16 ( Trice16_5 ) */ {15133u, 16u, 5u, "rd:Trice16 %p, %p, %p, %p, %p\n"},
+ /* Trice16 ( Trice16_4 ) */ {15132u, 16u, 4u, "rd:Trice16 %p, %p, %p, %p\n"},
+ /* Trice16 ( Trice16_3 ) */ {15131u, 16u, 3u, "rd:Trice16 %p, %p, %p\n"},
+ /* Trice16 ( Trice16_2 ) */ {15130u, 16u, 2u, "rd:Trice16 %p, %p\n"},
+ /* Trice16 ( Trice16_1 ) */ {15129u, 16u, 1u, "rd:Trice16 %p\n"},
+ /* Trice16_1 ( Trice16_1 ) */ {14374u, 16u, 1u, "rd:Trice16_1 %d\n"},
+ /* Trice16_10 ( Trice16_10 ) */ {14383u, 16u, 10u, "rd:Trice16_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice16_11 ( Trice16_11 ) */ {14384u, 16u, 11u, "rd:Trice16_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice16_12 ( Trice16_12 ) */ {14385u, 16u, 12u, "rd:Trice16_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice16_2 ( Trice16_2 ) */ {14375u, 16u, 2u, "rd:Trice16_2 %d, %d\n"},
+ /* Trice16_3 ( Trice16_3 ) */ {14376u, 16u, 3u, "rd:Trice16_3 %d, %d, %d\n"},
+ /* Trice16_4 ( Trice16_4 ) */ {14377u, 16u, 4u, "rd:Trice16_4 %d, %d, %d, %d\n"},
+ /* Trice16_5 ( Trice16_5 ) */ {14378u, 16u, 5u, "rd:Trice16_5 %d, %d, %d, %d, %d\n"},
+ /* Trice16_6 ( Trice16_6 ) */ {14379u, 16u, 6u, "rd:Trice16_6 %d, %d, %d, %d, %d, %d\n"},
+ /* Trice16_7 ( Trice16_7 ) */ {14380u, 16u, 7u, "rd:Trice16_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice16_8 ( Trice16_8 ) */ {14381u, 16u, 8u, "rd:Trice16_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice16_9 ( Trice16_9 ) */ {14382u, 16u, 9u, "rd:Trice16_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32 ( Trice32_12 ) */ {14496u, 32u, 12u, "rd:Trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32 ( Trice32_11 ) */ {14495u, 32u, 11u, "rd:Trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32 ( Trice32_10 ) */ {14494u, 32u, 10u, "rd:Trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32 ( Trice32_9 ) */ {14493u, 32u, 9u, "rd:Trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32 ( Trice32_8 ) */ {14492u, 32u, 8u, "rd:Trice32 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32 ( Trice32_7 ) */ {14491u, 32u, 7u, "rd:Trice32 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32 ( Trice32_6 ) */ {14490u, 32u, 6u, "rd:Trice32 %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32 ( Trice32_5 ) */ {14489u, 32u, 5u, "rd:Trice32 %d, %d, %d, %d, %d\n"},
+ /* Trice32 ( Trice32_4 ) */ {14488u, 32u, 4u, "rd:Trice32 %d, %d, %d, %d\n"},
+ /* Trice32 ( Trice32_3 ) */ {14487u, 32u, 3u, "rd:Trice32 %d, %d, %d\n"},
+ /* Trice32 ( Trice32_2 ) */ {14486u, 32u, 2u, "rd:Trice32 %d, %d\n"},
+ /* Trice32 ( Trice32_1 ) */ {14485u, 32u, 1u, "rd:Trice32 %d\n"},
+ /* Trice32_1 ( Trice32_1 ) */ {14522u, 32u, 1u, "rd:Trice32_1 %d\n"},
+ /* Trice32_10 ( Trice32_10 ) */ {14531u, 32u, 10u, "rd:Trice32_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32_11 ( Trice32_11 ) */ {14532u, 32u, 11u, "rd:Trice32_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32_12 ( Trice32_12 ) */ {14533u, 32u, 12u, "rd:Trice32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32_2 ( Trice32_2 ) */ {14523u, 32u, 2u, "rd:Trice32_2 %d, %d\n"},
+ /* Trice32_3 ( Trice32_3 ) */ {14524u, 32u, 3u, "rd:Trice32_3 %d, %d, %d\n"},
+ /* Trice32_4 ( Trice32_4 ) */ {14525u, 32u, 4u, "rd:Trice32_4 %d, %d, %d, %d\n"},
+ /* Trice32_5 ( Trice32_5 ) */ {14526u, 32u, 5u, "rd:Trice32_5 %d, %d, %d, %d, %d\n"},
+ /* Trice32_6 ( Trice32_6 ) */ {14527u, 32u, 6u, "rd:Trice32_6 %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32_7 ( Trice32_7 ) */ {14528u, 32u, 7u, "rd:Trice32_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32_8 ( Trice32_8 ) */ {14529u, 32u, 8u, "rd:Trice32_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32_9 ( Trice32_9 ) */ {14530u, 32u, 9u, "rd:Trice32_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64 ( Trice64_12 ) */ {14644u, 64u, 12u, "rd:Trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64 ( Trice64_11 ) */ {14643u, 64u, 11u, "rd:Trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64 ( Trice64_10 ) */ {14642u, 64u, 10u, "rd:Trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64 ( Trice64_9 ) */ {14641u, 64u, 9u, "rd:Trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64 ( Trice64_8 ) */ {14640u, 64u, 8u, "rd:Trice64 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64 ( Trice64_7 ) */ {14639u, 64u, 7u, "rd:Trice64 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64 ( Trice64_6 ) */ {14638u, 64u, 6u, "rd:Trice64 %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64 ( Trice64_5 ) */ {14637u, 64u, 5u, "rd:Trice64 %d, %d, %d, %d, %d\n"},
+ /* Trice64 ( Trice64_4 ) */ {14636u, 64u, 4u, "rd:Trice64 %d, %d, %d, %d\n"},
+ /* Trice64 ( Trice64_3 ) */ {14635u, 64u, 3u, "rd:Trice64 %d, %d, %d\n"},
+ /* Trice64 ( Trice64_2 ) */ {14634u, 64u, 2u, "rd:Trice64 %d, %d\n"},
+ /* Trice64 ( Trice64_1 ) */ {14633u, 64u, 1u, "rd:Trice64 %d\n"},
+ /* Trice64_1 ( Trice64_1 ) */ {14670u, 64u, 1u, "rd:Trice64_1 %d\n"},
+ /* Trice64_10 ( Trice64_10 ) */ {14679u, 64u, 10u, "rd:Trice64_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64_11 ( Trice64_11 ) */ {14680u, 64u, 11u, "rd:Trice64_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64_12 ( Trice64_12 ) */ {14681u, 64u, 12u, "rd:Trice64_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64_2 ( Trice64_2 ) */ {14671u, 64u, 2u, "rd:Trice64_2 %d, %d\n"},
+ /* Trice64_3 ( Trice64_3 ) */ {14672u, 64u, 3u, "rd:Trice64_3 %d, %d, %d\n"},
+ /* Trice64_4 ( Trice64_4 ) */ {14673u, 64u, 4u, "rd:Trice64_4 %d, %d, %d, %d\n"},
+ /* Trice64_5 ( Trice64_5 ) */ {14674u, 64u, 5u, "rd:Trice64_5 %d, %d, %d, %d, %d\n"},
+ /* Trice64_6 ( Trice64_6 ) */ {14675u, 64u, 6u, "rd:Trice64_6 %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64_7 ( Trice64_7 ) */ {14676u, 64u, 7u, "rd:Trice64_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64_8 ( Trice64_8 ) */ {14677u, 64u, 8u, "rd:Trice64_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64_9 ( Trice64_9 ) */ {14678u, 64u, 9u, "rd:Trice64_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8 ( Trice8_12 ) */ {14200u, 8u, 12u, "rd:Trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8 ( Trice8_11 ) */ {14199u, 8u, 11u, "rd:Trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8 ( Trice8_10 ) */ {14198u, 8u, 10u, "rd:Trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8 ( Trice8_9 ) */ {14197u, 8u, 9u, "rd:Trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8 ( Trice8_8 ) */ {14196u, 8u, 8u, "rd:Trice8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8 ( Trice8_7 ) */ {14195u, 8u, 7u, "rd:Trice8 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8 ( Trice8_6 ) */ {14194u, 8u, 6u, "rd:Trice8 %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8 ( Trice8_5 ) */ {14193u, 8u, 5u, "rd:Trice8 %d, %d, %d, %d, %d\n"},
+ /* Trice8 ( Trice8_4 ) */ {14192u, 8u, 4u, "rd:Trice8 %d, %d, %d, %d\n"},
+ /* Trice8 ( Trice8_3 ) */ {14191u, 8u, 3u, "rd:Trice8 %d, %d, %d\n"},
+ /* Trice8 ( Trice8_2 ) */ {14190u, 8u, 2u, "rd:Trice8 %d, %d\n"},
+ /* Trice8 ( Trice8_1 ) */ {14189u, 8u, 1u, "rd:Trice8 %d\n"},
+ /* Trice8_1 ( Trice8_1 ) */ {14226u, 8u, 1u, "rd:Trice8_1 %d\n"},
+ /* Trice8_10 ( Trice8_10 ) */ {14235u, 8u, 10u, "rd:Trice8_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8_11 ( Trice8_11 ) */ {14236u, 8u, 11u, "rd:Trice8_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8_12 ( Trice8_12 ) */ {14237u, 8u, 12u, "rd:Trice8_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8_2 ( Trice8_2 ) */ {14227u, 8u, 2u, "rd:Trice8_2 %d, %d\n"},
+ /* Trice8_3 ( Trice8_3 ) */ {14228u, 8u, 3u, "rd:Trice8_3 %d, %d, %d\n"},
+ /* Trice8_4 ( Trice8_4 ) */ {14229u, 8u, 4u, "rd:Trice8_4 %d, %d, %d, %d\n"},
+ /* Trice8_5 ( Trice8_5 ) */ {14230u, 8u, 5u, "rd:Trice8_5 %d, %d, %d, %d, %d\n"},
+ /* Trice8_6 ( Trice8_6 ) */ {14231u, 8u, 6u, "rd:Trice8_6 %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8_7 ( Trice8_7 ) */ {14232u, 8u, 7u, "rd:Trice8_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8_8 ( Trice8_8 ) */ {14233u, 8u, 8u, "rd:Trice8_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8_9 ( Trice8_9 ) */ {14234u, 8u, 9u, "rd:Trice8_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice ( Trice_0 ) */ {13107u, 32u, 0u, "rd:Trice\n"},
+ /* Trice_1 ( Trice32_1 ) */ {14078u, 32u, 1u, "rd:Trice_1 %d\n"},
+ /* Trice_10 ( Trice32_10 ) */ {14087u, 32u, 10u, "rd:Trice_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice_11 ( Trice32_11 ) */ {14088u, 32u, 11u, "rd:Trice_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice_12 ( Trice32_12 ) */ {14089u, 32u, 12u, "rd:Trice_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice_2 ( Trice32_2 ) */ {14079u, 32u, 2u, "rd:Trice_2 %d, %d\n"},
+ /* Trice_3 ( Trice32_3 ) */ {14080u, 32u, 3u, "rd:Trice_3 %d, %d, %d\n"},
+ /* Trice_4 ( Trice32_4 ) */ {14081u, 32u, 4u, "rd:Trice_4 %d, %d, %d, %d\n"},
+ /* Trice_5 ( Trice32_5 ) */ {14082u, 32u, 5u, "rd:Trice_5 %d, %d, %d, %d, %d\n"},
+ /* Trice_6 ( Trice32_6 ) */ {14083u, 32u, 6u, "rd:Trice_6 %d, %d, %d, %d, %d, %d\n"},
+ /* Trice_7 ( Trice32_7 ) */ {14084u, 32u, 7u, "rd:Trice_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice_8 ( Trice32_8 ) */ {14085u, 32u, 8u, "rd:Trice_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice_9 ( Trice32_9 ) */ {14086u, 32u, 9u, "rd:Trice_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice8 ( trice8_1 ) */ {13354u, 8u, 1u, "rd:Use %%p to format a pointer in base 16 notation with leading 0x. (%p)\n"},
+ /* trice16 ( trice16_1 ) */ {13355u, 16u, 1u, "rd:Use %%p to format a pointer in base 16 notation with leading 0x. (%p)\n"},
+ /* trice32 ( trice32_1 ) */ {13356u, 32u, 1u, "rd:Use %%p to format a pointer in base 16 notation with leading 0x. (%p)\n"},
+ /* trice64 ( trice64_1 ) */ {13357u, 64u, 1u, "rd:Use %%p to format a pointer in base 16 notation with leading 0x. (%p)\n"},
+ /* trice ( trice32_1 ) */ {13358u, 32u, 1u, "rd:Use %%p to format a pointer in base 16 notation with leading 0x. (%p)\n"},
+ /* trice ( trice32_2 ) */ {13352u, 32u, 2u, "rd:Use %%t to format a boolean as true (%t) or false (%t).\n"},
+ /* trice ( trice_0 ) */ {14799u, 32u, 0u, "rd:e\n"},
+ /* trice ( trice_0 ) */ {14817u, 32u, 0u, "rd:e\n"},
+ /* TRICE_S ( TRICE_S ) */ {15238u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd:sizeof(%8s)"},
+ /* TRICE_S ( TRICE_S ) */ {15240u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd:sizeof(%8s)"},
+ /* trice ( trice32_12 ) */ {13105u, 32u, 12u, "rd:trice %d, %ld, %d, %lld, %d, %zd, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_11 ) */ {13104u, 32u, 11u, "rd:trice %d, %ld, %d, %lld, %d, %zd, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_10 ) */ {13103u, 32u, 10u, "rd:trice %d, %ld, %d, %lld, %d, %zd, %d, %d, %d, %d\n"},
+ /* trice ( trice32_9 ) */ {13102u, 32u, 9u, "rd:trice %d, %ld, %d, %lld, %d, %zd, %d, %d, %d\n"},
+ /* trice ( trice32_8 ) */ {13101u, 32u, 8u, "rd:trice %d, %ld, %d, %lld, %d, %zd, %d, %d\n"},
+ /* trice ( trice32_7 ) */ {13100u, 32u, 7u, "rd:trice %d, %ld, %d, %lld, %d, %zd, %d\n"},
+ /* trice ( trice32_6 ) */ {13099u, 32u, 6u, "rd:trice %d, %ld, %d, %lld, %d, %zd\n"},
+ /* trice ( trice32_5 ) */ {13098u, 32u, 5u, "rd:trice %d, %ld, %d, %lld, %d\n"},
+ /* trice ( trice32_4 ) */ {13097u, 32u, 4u, "rd:trice %d, %ld, %d, %lld\n"},
+ /* trice ( trice32_3 ) */ {13096u, 32u, 3u, "rd:trice %d, %ld, %d\n"},
+ /* trice ( trice32_2 ) */ {13095u, 32u, 2u, "rd:trice %d, %ld\n"},
+ /* trice ( trice32_1 ) */ {13094u, 32u, 1u, "rd:trice %d\n"},
+ /* trice16 ( trice16_12 ) */ {13161u, 16u, 12u, "rd:trice16 %X, %lX, %X, %llX, %X, %zX, %X, %X, %X, %X, %X, %X\n"},
+ /* trice16 ( trice16_11 ) */ {13160u, 16u, 11u, "rd:trice16 %X, %lX, %X, %llX, %X, %zX, %X, %X, %X, %X, %X\n"},
+ /* trice16 ( trice16_10 ) */ {13159u, 16u, 10u, "rd:trice16 %X, %lX, %X, %llX, %X, %zX, %X, %X, %X, %X\n"},
+ /* trice16 ( trice16_9 ) */ {13158u, 16u, 9u, "rd:trice16 %X, %lX, %X, %llX, %X, %zX, %X, %X, %X\n"},
+ /* trice16 ( trice16_8 ) */ {13157u, 16u, 8u, "rd:trice16 %X, %lX, %X, %llX, %X, %zX, %X, %X\n"},
+ /* trice16 ( trice16_7 ) */ {13156u, 16u, 7u, "rd:trice16 %X, %lX, %X, %llX, %X, %zX, %X\n"},
+ /* trice16 ( trice16_6 ) */ {13155u, 16u, 6u, "rd:trice16 %X, %lX, %X, %llX, %X, %zX\n"},
+ /* trice16 ( trice16_5 ) */ {13154u, 16u, 5u, "rd:trice16 %X, %lX, %X, %llX, %X\n"},
+ /* trice16 ( trice16_4 ) */ {13153u, 16u, 4u, "rd:trice16 %X, %lX, %X, %llX\n"},
+ /* trice16 ( trice16_3 ) */ {13152u, 16u, 3u, "rd:trice16 %X, %lX, %X\n"},
+ /* trice16 ( trice16_2 ) */ {13151u, 16u, 2u, "rd:trice16 %X, %lX\n"},
+ /* trice16 ( trice16_1 ) */ {13150u, 16u, 1u, "rd:trice16 %X\n"},
+ /* trice16 ( trice16_12 ) */ {14336u, 16u, 12u, "rd:trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_11 ) */ {14335u, 16u, 11u, "rd:trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_10 ) */ {14334u, 16u, 10u, "rd:trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_9 ) */ {14333u, 16u, 9u, "rd:trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_8 ) */ {14332u, 16u, 8u, "rd:trice16 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_7 ) */ {14331u, 16u, 7u, "rd:trice16 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_6 ) */ {14330u, 16u, 6u, "rd:trice16 %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_5 ) */ {14329u, 16u, 5u, "rd:trice16 %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_4 ) */ {14328u, 16u, 4u, "rd:trice16 %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_3 ) */ {14327u, 16u, 3u, "rd:trice16 %d, %d, %d\n"},
+ /* trice16 ( trice16_2 ) */ {14326u, 16u, 2u, "rd:trice16 %d, %d\n"},
+ /* trice16 ( trice16_1 ) */ {14325u, 16u, 1u, "rd:trice16 %d\n"},
+ /* trice16 ( trice16_12 ) */ {13146u, 16u, 12u, "rd:trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\n"},
+ /* trice16 ( trice16_11 ) */ {13145u, 16u, 11u, "rd:trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\n"},
+ /* trice16 ( trice16_10 ) */ {13144u, 16u, 10u, "rd:trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\n"},
+ /* trice16 ( trice16_9 ) */ {13143u, 16u, 9u, "rd:trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p\n"},
+ /* trice16 ( trice16_8 ) */ {13142u, 16u, 8u, "rd:trice16 %p, %p, %p, %p, %p, %p, %p, %p\n"},
+ /* trice16 ( trice16_7 ) */ {13141u, 16u, 7u, "rd:trice16 %p, %p, %p, %p, %p, %p, %p\n"},
+ /* trice16 ( trice16_6 ) */ {13140u, 16u, 6u, "rd:trice16 %p, %p, %p, %p, %p, %p\n"},
+ /* trice16 ( trice16_5 ) */ {13139u, 16u, 5u, "rd:trice16 %p, %p, %p, %p, %p\n"},
+ /* trice16 ( trice16_4 ) */ {13138u, 16u, 4u, "rd:trice16 %p, %p, %p, %p\n"},
+ /* trice16 ( trice16_3 ) */ {13137u, 16u, 3u, "rd:trice16 %p, %p, %p\n"},
+ /* trice16 ( trice16_2 ) */ {13136u, 16u, 2u, "rd:trice16 %p, %p\n"},
+ /* trice16 ( trice16_1 ) */ {13135u, 16u, 1u, "rd:trice16 %p\n"},
+ /* trice16_1 ( trice16_1 ) */ {14362u, 16u, 1u, "rd:trice16_1 %d\n"},
+ /* trice16_10 ( trice16_10 ) */ {14371u, 16u, 10u, "rd:trice16_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16_11 ( trice16_11 ) */ {14372u, 16u, 11u, "rd:trice16_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16_12 ( trice16_12 ) */ {14373u, 16u, 12u, "rd:trice16_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16_2 ( trice16_2 ) */ {14363u, 16u, 2u, "rd:trice16_2 %d, %d\n"},
+ /* trice16_3 ( trice16_3 ) */ {14364u, 16u, 3u, "rd:trice16_3 %d, %d, %d\n"},
+ /* trice16_4 ( trice16_4 ) */ {14365u, 16u, 4u, "rd:trice16_4 %d, %d, %d, %d\n"},
+ /* trice16_5 ( trice16_5 ) */ {14366u, 16u, 5u, "rd:trice16_5 %d, %d, %d, %d, %d\n"},
+ /* trice16_6 ( trice16_6 ) */ {14367u, 16u, 6u, "rd:trice16_6 %d, %d, %d, %d, %d, %d\n"},
+ /* trice16_7 ( trice16_7 ) */ {14368u, 16u, 7u, "rd:trice16_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16_8 ( trice16_8 ) */ {14369u, 16u, 8u, "rd:trice16_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16_9 ( trice16_9 ) */ {14370u, 16u, 9u, "rd:trice16_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice32 ( trice32_12 ) */ {13163u, 32u, 12u, "rd:trice32 %X, %lX, %X, %llX, %X, %zX, %X, %X, %X, %X, %X, %X\n"},
+ /* trice32 ( trice32_12 ) */ {14484u, 32u, 12u, "rd:trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice32 ( trice32_11 ) */ {14483u, 32u, 11u, "rd:trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice32 ( trice32_10 ) */ {14482u, 32u, 10u, "rd:trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice32 ( trice32_9 ) */ {14481u, 32u, 9u, "rd:trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice32 ( trice32_8 ) */ {14480u, 32u, 8u, "rd:trice32 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice32 ( trice32_7 ) */ {14479u, 32u, 7u, "rd:trice32 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice32 ( trice32_6 ) */ {14478u, 32u, 6u, "rd:trice32 %d, %d, %d, %d, %d, %d\n"},
+ /* trice32 ( trice32_5 ) */ {14477u, 32u, 5u, "rd:trice32 %d, %d, %d, %d, %d\n"},
+ /* trice32 ( trice32_4 ) */ {14476u, 32u, 4u, "rd:trice32 %d, %d, %d, %d\n"},
+ /* trice32 ( trice32_3 ) */ {14475u, 32u, 3u, "rd:trice32 %d, %d, %d\n"},
+ /* trice32 ( trice32_2 ) */ {14474u, 32u, 2u, "rd:trice32 %d, %d\n"},
+ /* trice32 ( trice32_1 ) */ {14473u, 32u, 1u, "rd:trice32 %d\n"},
+ /* trice32 ( trice32_12 ) */ {13148u, 32u, 12u, "rd:trice32 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\n"},
+ /* trice32_1 ( trice32_1 ) */ {14510u, 32u, 1u, "rd:trice32_1 %d\n"},
+ /* trice32_1 ( trice32_1 ) */ {13218u, 32u, 1u, "rd:trice32_1 %d\n"},
+ /* trice32_10 ( trice32_10 ) */ {14519u, 32u, 10u, "rd:trice32_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice32_11 ( trice32_11 ) */ {14520u, 32u, 11u, "rd:trice32_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice32_12 ( trice32_12 ) */ {14521u, 32u, 12u, "rd:trice32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice32_2 ( trice32_2 ) */ {14511u, 32u, 2u, "rd:trice32_2 %d, %d\n"},
+ /* trice32_2 ( trice32_2 ) */ {13220u, 32u, 2u, "rd:trice32_2 %d,%d\n"},
+ /* trice32_3 ( trice32_3 ) */ {14512u, 32u, 3u, "rd:trice32_3 %d, %d, %d\n"},
+ /* trice32_4 ( trice32_4 ) */ {14513u, 32u, 4u, "rd:trice32_4 %d, %d, %d, %d\n"},
+ /* trice32_5 ( trice32_5 ) */ {14514u, 32u, 5u, "rd:trice32_5 %d, %d, %d, %d, %d\n"},
+ /* trice32_6 ( trice32_6 ) */ {14515u, 32u, 6u, "rd:trice32_6 %d, %d, %d, %d, %d, %d\n"},
+ /* trice32_7 ( trice32_7 ) */ {14516u, 32u, 7u, "rd:trice32_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice32_8 ( trice32_8 ) */ {14517u, 32u, 8u, "rd:trice32_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice32_9 ( trice32_9 ) */ {14518u, 32u, 9u, "rd:trice32_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice64 ( trice64_12 ) */ {14632u, 64u, 12u, "rd:trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice64 ( trice64_11 ) */ {14631u, 64u, 11u, "rd:trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice64 ( trice64_10 ) */ {14630u, 64u, 10u, "rd:trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice64 ( trice64_9 ) */ {14629u, 64u, 9u, "rd:trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice64 ( trice64_8 ) */ {14628u, 64u, 8u, "rd:trice64 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice64 ( trice64_7 ) */ {14627u, 64u, 7u, "rd:trice64 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice64 ( trice64_6 ) */ {14626u, 64u, 6u, "rd:trice64 %d, %d, %d, %d, %d, %d\n"},
+ /* trice64 ( trice64_5 ) */ {14625u, 64u, 5u, "rd:trice64 %d, %d, %d, %d, %d\n"},
+ /* trice64 ( trice64_4 ) */ {14624u, 64u, 4u, "rd:trice64 %d, %d, %d, %d\n"},
+ /* trice64 ( trice64_3 ) */ {14623u, 64u, 3u, "rd:trice64 %d, %d, %d\n"},
+ /* trice64 ( trice64_2 ) */ {13203u, 64u, 2u, "rd:trice64 %d, %d\n"},
+ /* trice64 ( trice64_2 ) */ {13214u, 64u, 2u, "rd:trice64 %d, %d\n"},
+ /* trice64 ( trice64_2 ) */ {13217u, 64u, 2u, "rd:trice64 %d, %d\n"},
+ /* trice64 ( trice64_2 ) */ {14622u, 64u, 2u, "rd:trice64 %d, %d\n"},
+ /* trice64 ( trice64_1 ) */ {14621u, 64u, 1u, "rd:trice64 %d\n"},
+ /* trice64_1 ( trice64_1 ) */ {14658u, 64u, 1u, "rd:trice64_1 %d\n"},
+ /* trice64_1 ( trice64_1 ) */ {13219u, 64u, 1u, "rd:trice64_1 %d\n"},
+ /* trice64_10 ( trice64_10 ) */ {14667u, 64u, 10u, "rd:trice64_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice64_11 ( trice64_11 ) */ {14668u, 64u, 11u, "rd:trice64_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice64_12 ( trice64_12 ) */ {14669u, 64u, 12u, "rd:trice64_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice64_2 ( trice64_2 ) */ {14659u, 64u, 2u, "rd:trice64_2 %d, %d\n"},
+ /* trice64_2 ( trice64_2 ) */ {13221u, 64u, 2u, "rd:trice64_2 %d,%d\n"},
+ /* trice64_3 ( trice64_3 ) */ {14660u, 64u, 3u, "rd:trice64_3 %d, %d, %d\n"},
+ /* trice64_4 ( trice64_4 ) */ {14661u, 64u, 4u, "rd:trice64_4 %d, %d, %d, %d\n"},
+ /* trice64_5 ( trice64_5 ) */ {14662u, 64u, 5u, "rd:trice64_5 %d, %d, %d, %d, %d\n"},
+ /* trice64_6 ( trice64_6 ) */ {14663u, 64u, 6u, "rd:trice64_6 %d, %d, %d, %d, %d, %d\n"},
+ /* trice64_7 ( trice64_7 ) */ {14664u, 64u, 7u, "rd:trice64_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice64_8 ( trice64_8 ) */ {14665u, 64u, 8u, "rd:trice64_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice64_9 ( trice64_9 ) */ {14666u, 64u, 9u, "rd:trice64_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice8 ( trice8_12 ) */ {13162u, 8u, 12u, "rd:trice8 %X, %lX, %X, %llX, %X, %zX, %X, %X, %X, %X, %X, %X\n"},
+ /* trice8 ( trice8_12 ) */ {13147u, 8u, 12u, "rd:trice8 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\n"},
+ /* trice8 ( trice8_12 ) */ {14188u, 8u, 12u, "rd:trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice8 ( trice8_11 ) */ {14187u, 8u, 11u, "rd:trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice8 ( trice8_10 ) */ {14186u, 8u, 10u, "rd:trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice8 ( trice8_9 ) */ {14185u, 8u, 9u, "rd:trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice8 ( trice8_8 ) */ {14184u, 8u, 8u, "rd:trice8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice8 ( trice8_7 ) */ {14183u, 8u, 7u, "rd:trice8 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice8 ( trice8_6 ) */ {14182u, 8u, 6u, "rd:trice8 %d, %d, %d, %d, %d, %d\n"},
+ /* trice8 ( trice8_5 ) */ {14181u, 8u, 5u, "rd:trice8 %d, %d, %d, %d, %d\n"},
+ /* trice8 ( trice8_4 ) */ {14180u, 8u, 4u, "rd:trice8 %d, %d, %d, %d\n"},
+ /* trice8 ( trice8_3 ) */ {14179u, 8u, 3u, "rd:trice8 %d, %d, %d\n"},
+ /* trice8 ( trice8_2 ) */ {14178u, 8u, 2u, "rd:trice8 %d, %d\n"},
+ /* trice8 ( trice8_1 ) */ {14177u, 8u, 1u, "rd:trice8 %d\n"},
+ /* trice8_1 ( trice8_1 ) */ {14214u, 8u, 1u, "rd:trice8_1 %d\n"},
+ /* trice8_10 ( trice8_10 ) */ {14223u, 8u, 10u, "rd:trice8_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice8_11 ( trice8_11 ) */ {14224u, 8u, 11u, "rd:trice8_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice8_12 ( trice8_12 ) */ {14225u, 8u, 12u, "rd:trice8_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice8_2 ( trice8_2 ) */ {14215u, 8u, 2u, "rd:trice8_2 %d, %d\n"},
+ /* trice8_3 ( trice8_3 ) */ {14216u, 8u, 3u, "rd:trice8_3 %d, %d, %d\n"},
+ /* trice8_4 ( trice8_4 ) */ {14217u, 8u, 4u, "rd:trice8_4 %d, %d, %d, %d\n"},
+ /* trice8_5 ( trice8_5 ) */ {14218u, 8u, 5u, "rd:trice8_5 %d, %d, %d, %d, %d\n"},
+ /* trice8_6 ( trice8_6 ) */ {14219u, 8u, 6u, "rd:trice8_6 %d, %d, %d, %d, %d, %d\n"},
+ /* trice8_7 ( trice8_7 ) */ {14220u, 8u, 7u, "rd:trice8_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice8_8 ( trice8_8 ) */ {14221u, 8u, 8u, "rd:trice8_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice8_9 ( trice8_9 ) */ {14222u, 8u, 9u, "rd:trice8_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice_0 ) */ {13093u, 32u, 0u, "rd:trice\n"},
+ /* trice_1 ( trice32_1 ) */ {14066u, 32u, 1u, "rd:trice_1 %d\n"},
+ /* trice_10 ( trice32_10 ) */ {14075u, 32u, 10u, "rd:trice_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice_11 ( trice32_11 ) */ {14076u, 32u, 11u, "rd:trice_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice_12 ( trice32_12 ) */ {14077u, 32u, 12u, "rd:trice_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice_2 ( trice32_2 ) */ {14067u, 32u, 2u, "rd:trice_2 %d, %d\n"},
+ /* trice_3 ( trice32_3 ) */ {14068u, 32u, 3u, "rd:trice_3 %d, %d, %d\n"},
+ /* trice_4 ( trice32_4 ) */ {14069u, 32u, 4u, "rd:trice_4 %d, %d, %d, %d\n"},
+ /* trice_5 ( trice32_5 ) */ {14070u, 32u, 5u, "rd:trice_5 %d, %d, %d, %d, %d\n"},
+ /* trice_6 ( trice32_6 ) */ {14071u, 32u, 6u, "rd:trice_6 %d, %d, %d, %d, %d, %d\n"},
+ /* trice_7 ( trice32_7 ) */ {14072u, 32u, 7u, "rd:trice_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice_8 ( trice32_8 ) */ {14073u, 32u, 8u, "rd:trice_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice_9 ( trice32_9 ) */ {14074u, 32u, 9u, "rd:trice_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE ( TRICE_0 ) */ {13726u, 32u, 0u, "read:black+i:yellow+h\n"},
+ /* trice ( trice_0 ) */ {13776u, 32u, 0u, "read:black+i:yellow+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13826u, 32u, 0u, "read:black+i:yellow+h\n"},
+ /* Trice ( Trice_0 ) */ {13876u, 32u, 0u, "read:black+i:yellow+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13926u, 32u, 0u, "read:black+i:yellow+h\n"},
+ /* TRice ( TRice_0 ) */ {13976u, 32u, 0u, "read:black+i:yellow+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13728u, 32u, 0u, "receive:black+h:black\n"},
+ /* trice ( trice_0 ) */ {13778u, 32u, 0u, "receive:black+h:black\n"},
+ /* TRICE ( TRICE_0 ) */ {13828u, 32u, 0u, "receive:black+h:black\n"},
+ /* Trice ( Trice_0 ) */ {13878u, 32u, 0u, "receive:black+h:black\n"},
+ /* TRICE ( TRICE_0 ) */ {13928u, 32u, 0u, "receive:black+h:black\n"},
+ /* TRice ( TRice_0 ) */ {13978u, 32u, 0u, "receive:black+h:black\n"},
+ /* TRice32F ( TRice32F ) */ {13305u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rpc:FunctionNameYb"},
+ /* TRice32F ( TRice32F ) */ {15301u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rpc:FunctionNameYb"},
+ /* TRice32C ( TRice32C ) */ {15644u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rpc:FunctionNameYb"},
+ /* Trice32F ( Trice32F ) */ {13306u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rpc:FunctionNameYc"},
+ /* Trice32F ( Trice32F ) */ {15302u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rpc:FunctionNameYc"},
+ /* Trice32C ( Trice32C ) */ {15496u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rpc:FunctionNameYc"},
+ /* TRICE_S ( TRICE_S ) */ {13001u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rx:received command:%s\n"},
+ /* TRICE_S ( TRICE_S ) */ {13015u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rx:received command:%s\n"},
+ /* TRice ( TRice32_1 ) */ {15383u, 32u, 1u, "sig:%.1f s\n"},
+ /* TRice64 ( TRice64_1 ) */ {15671u, 64u, 1u, "sig:%.1f s\n"},
+ /* TRice64 ( TRice64_1 ) */ {15711u, 64u, 1u, "sig:%.1f s\n"},
+ /* trice ( trice32_1 ) */ {15255u, 32u, 1u, "sig:%3d:"},
+ /* TRICE_S ( TRICE_S ) */ {13389u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:%s\n"},
+ /* TRICE_S ( TRICE_S ) */ {13391u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:%s\n"},
+ /* TRICE_S ( TRICE_S ) */ {13393u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:%s\n"},
+ /* TRICE_S ( TRICE_S ) */ {13395u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:%s\n"},
+ /* TRICE_S ( TRICE_S ) */ {13397u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:%s\n"},
+ /* trice ( trice_0 ) */ {13351u, 32u, 0u, "sig:Boolean (true/false)\n"},
+ /* trice ( trice_0 ) */ {13346u, 32u, 0u, "sig:Character (quoted, Unicode)\n"},
+ /* TRICE ( TRICE_0 ) */ {14694u, 32u, 0u, "sig:Colors and ticks\n"},
+ /* trice ( trice_0 ) */ {13366u, 32u, 0u, "sig:Double (indent, precision, scientific notation)\n"},
+ /* trice ( trice_0 ) */ {13360u, 32u, 0u, "sig:Float (indent, precision, scientific notation)\n"},
+ /* TRice ( TRice_0 ) */ {13334u, 32u, 0u, "sig:Integer (indent, base, sign) - see https://yourbasic.org/golang/fmt-printf-reference-cheat-sheet/\n"},
+ /* TRICE ( TRICE_0 ) */ {14767u, 32u, 0u, "sig:Legacy TRICE16-64\n"},
+ /* TRICE ( TRICE_0 ) */ {14733u, 32u, 0u, "sig:Legacy TRICE8\n"},
+ /* trice ( trice_0 ) */ {13353u, 32u, 0u, "sig:Pointer (hex)\n"},
+ /* trice ( trice_0 ) */ {13387u, 32u, 0u, "sig:Runtime generated strings\n"},
+ /* trice ( trice_0 ) */ {13177u, 32u, 0u, "sig:Some time measurements\n"},
+ /* trice ( trice_0 ) */ {13372u, 32u, 0u, "sig:String or byte slice (quote, indent, hex)\n"},
+ /* trice ( trice_0 ) */ {15102u, 32u, 0u, "sig:TRICE with 1 to 12 values\n"},
+ /* TRice ( TRice_0 ) */ {15141u, 32u, 0u, "sig:TRICE16 with 1 to 12 hex\n"},
+ /* trice ( trice32_1 ) */ {14250u, 32u, 1u, "sig:TRICE16 with 1 to 12 values (line %d)\n"},
+ /* trice ( trice_0 ) */ {14847u, 32u, 0u, "sig:TRICE16 with variable param count 1 to 12\n"},
+ /* trice ( trice32_1 ) */ {14287u, 32u, 1u, "sig:TRICE16_n with 1 to 12 values (line %d)\n"},
+ /* trice ( trice32_1 ) */ {14398u, 32u, 1u, "sig:TRICE32 with 1 to 12 values (line %d)\n"},
+ /* trice ( trice_0 ) */ {14874u, 32u, 0u, "sig:TRICE32 with variable param count 1 to 12\n"},
+ /* trice ( trice32_1 ) */ {14546u, 32u, 1u, "sig:TRICE64 with 1 to 12 values (line %d)\n"},
+ /* trice ( trice_0 ) */ {14902u, 32u, 0u, "sig:TRICE64 with variable param count 1 to 12\n"},
+ /* trice ( trice_0 ) */ {13991u, 32u, 0u, "sig:TRICE8 with 1 to 12 values\n"},
+ /* trice ( trice_0 ) */ {14102u, 32u, 0u, "sig:TRICE8 with 1 to 12 values\n"},
+ /* trice ( trice_0 ) */ {14819u, 32u, 0u, "sig:TRICE8 with variable param count 1 to 12\n"},
+ /* trice ( trice_0 ) */ {14139u, 32u, 0u, "sig:TRICE8_n with 1 to 12 values\n"},
+ /* TRICE_N ( TRICE_N ) */ {13319u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TRICE_N=%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {13321u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TRICE_N=%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {13323u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TRICE_N=%s\n"},
+ /* TRICE_S ( TRICE_S ) */ {13318u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TRICE_S=%s\n"},
+ /* TRICE_S ( TRICE_S ) */ {13320u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TRICE_S=%s\n"},
+ /* TRICE_S ( TRICE_S ) */ {13322u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TRICE_S=%s\n"},
+ /* trice ( trice_0 ) */ {14028u, 32u, 0u, "sig:TRICE_n with 1 to 12 values\n"},
+ /* trice ( trice_0 ) */ {15115u, 32u, 0u, "sig:TRICE_n with 1 to 12 values\n"},
+ /* TRice ( TRice_0 ) */ {13120u, 32u, 0u, "sig:TRice with 32-bit stamp and with 0 to 12 values (common use cases)\n"},
+ /* TRiceN ( TRiceN ) */ {13329u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TRiceN=%s\n"},
+ /* TRiceS ( TRiceS ) */ {13328u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TRiceS=%s\n"},
+ /* TRICE ( TRICE_0 ) */ {14699u, 32u, 0u, "sig:This ASSERT error is just a demo and no real error:\n"},
+ /* Trice ( Trice_0 ) */ {13106u, 32u, 0u, "sig:Trice with 16-bit stamp and with 0 to 12 values (common use cases)\n"},
+ /* TRice ( TRice_0 ) */ {15128u, 32u, 0u, "sig:Trice16 with 1 to 12 pointer\n"},
+ /* TriceN ( TriceN ) */ {13327u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TriceN=%s\n"},
+ /* TriceS ( TriceS ) */ {13326u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TriceS=%s\n"},
+ /* TRICE ( TRICE_0 ) */ {14714u, 32u, 0u, "sig:Various ranges and formats\n"},
+ /* TRICE_N ( TRICE_N ) */ {13266u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:With TRICE_N:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {13268u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:With TRICE_N:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {13270u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:With TRICE_N:%s\n"},
+ /* TRiceN ( TRiceN ) */ {13264u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:With TRiceN:%s\n"},
+ /* TriceN ( TriceN ) */ {13262u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:With TriceN:%s\n"},
+ /* triceN ( triceN ) */ {13260u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:With triceN:%s\n"},
+ /* trice ( trice_0 ) */ {14794u, 32u, 0u, "sig:colored single letters and several TRICE macros in one line\n"},
+ /* trice ( trice_0 ) */ {13082u, 32u, 0u, "sig:length modifier coverage for supported combinations\n"},
+ /* trice ( trice_0 ) */ {13092u, 32u, 0u, "sig:trice without stamp and with 0 to 12 values (most common use cases)\n"},
+ /* trice ( trice_0 ) */ {13149u, 32u, 0u, "sig:trice16 with 1 to 12 hex\n"},
+ /* trice ( trice_0 ) */ {13134u, 32u, 0u, "sig:trice16 with 1 to 12 pointer\n"},
+ /* trice ( trice32_1 ) */ {14324u, 32u, 1u, "sig:trice16 with 1 to 12 values (line %d)\n"},
+ /* trice ( trice32_1 ) */ {14361u, 32u, 1u, "sig:trice16_n with 1 to 12 values (line %d)\n"},
+ /* trice ( trice32_1 ) */ {14472u, 32u, 1u, "sig:trice32 with 1 to 12 values (line %d)\n"},
+ /* trice ( trice32_1 ) */ {14620u, 32u, 1u, "sig:trice64 with 1 to 12 values (line %d)\n"},
+ /* trice ( trice_0 ) */ {14176u, 32u, 0u, "sig:trice8 with 1 to 12 values\n"},
+ /* TRICE ( TRICE_0 ) */ {14213u, 32u, 0u, "sig:trice8_n with 1 to 12 values\n"},
+ /* triceN ( triceN ) */ {13325u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:triceN=%s\n"},
+ /* triceS ( triceS ) */ {13324u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:triceS=%s\n"},
+ /* TRICE ( TRICE_0 ) */ {14065u, 32u, 0u, "sig:trice_n with 1 to 12 values\n"},
+ /* TRICE ( TRICE_0 ) */ {13732u, 32u, 0u, "signal:118+i\n"},
+ /* trice ( trice_0 ) */ {13782u, 32u, 0u, "signal:118+i\n"},
+ /* TRICE ( TRICE_0 ) */ {13832u, 32u, 0u, "signal:118+i\n"},
+ /* Trice ( Trice_0 ) */ {13882u, 32u, 0u, "signal:118+i\n"},
+ /* TRICE ( TRICE_0 ) */ {13932u, 32u, 0u, "signal:118+i\n"},
+ /* TRice ( TRice_0 ) */ {13982u, 32u, 0u, "signal:118+i\n"},
+ /* trice ( trice32_1 ) */ {14435u, 32u, 1u, "signal:TRICE32_n with 1 to 12 values (line %d)\n"},
+ /* trice ( trice32_1 ) */ {14583u, 32u, 1u, "signal:TRICE64_n with 1 to 12 values (line %d)\n"},
+ /* trice ( trice32_1 ) */ {14509u, 32u, 1u, "signal:trice32_n with 1 to 12 values (line %d)\n"},
+ /* trice ( trice32_1 ) */ {14657u, 32u, 1u, "signal:trice64_n with 1 to 12 values (line %d)\n"},
+ /* trice ( trice_0 ) */ {14802u, 32u, 0u, "t:H"},
+ /* TRICE ( TRICE_0 ) */ {13733u, 32u, 0u, "test:yellow+h:black\n"},
+ /* trice ( trice_0 ) */ {13783u, 32u, 0u, "test:yellow+h:black\n"},
+ /* TRICE ( TRICE_0 ) */ {13833u, 32u, 0u, "test:yellow+h:black\n"},
+ /* Trice ( Trice_0 ) */ {13883u, 32u, 0u, "test:yellow+h:black\n"},
+ /* TRICE ( TRICE_0 ) */ {13933u, 32u, 0u, "test:yellow+h:black\n"},
+ /* TRice ( TRice_0 ) */ {13983u, 32u, 0u, "test:yellow+h:black\n"},
+ /* trice16_1 ( trice16_1 ) */ {13171u, 16u, 1u, "tim: post TriceDecryption SysTick=%d\n"},
+ /* trice32 ( trice32_1 ) */ {13168u, 32u, 1u, "tim: post TriceEncryption SysTick=%d\n"},
+ /* trice16_1 ( trice16_1 ) */ {13170u, 16u, 1u, "tim: pre TriceDecryption SysTick=%d\n"},
+ /* trice32 ( trice32_1 ) */ {13167u, 32u, 1u, "tim: pre TriceEncryption SysTick=%d\n"},
+ /* TRICE ( TRICE_0 ) */ {13205u, 32u, 0u, "tim:TRICE START time message\n"},
+ /* TRICE ( TRICE_0 ) */ {13207u, 32u, 0u, "tim:TRICE START time message\n"},
+ /* TRICE ( TRICE_0 ) */ {13209u, 32u, 0u, "tim:TRICE START time message\n"},
+ /* TRICE ( TRICE_0 ) */ {13206u, 32u, 0u, "tim:TRICE STOP time message\n"},
+ /* TRICE ( TRICE_0 ) */ {13208u, 32u, 0u, "tim:TRICE STOP time message\n"},
+ /* TRICE ( TRICE_0 ) */ {13211u, 32u, 0u, "tim:TRICE STOP time message\n"},
+ /* trice ( trice_0 ) */ {13212u, 32u, 0u, "tim:trice --------------------------------------------------\n"},
+ /* trice ( trice_0 ) */ {13213u, 32u, 0u, "tim:trice --------------------------------------------------\n"},
+ /* trice ( trice_0 ) */ {13215u, 32u, 0u, "tim:trice --------------------------------------------------\n"},
+ /* trice ( trice_0 ) */ {13216u, 32u, 0u, "tim:trice --------------------------------------------------\n"},
+ /* trice ( trice_0 ) */ {13198u, 32u, 0u, "tim:trice START time message\n"},
+ /* trice ( trice_0 ) */ {13200u, 32u, 0u, "tim:trice START time message\n"},
+ /* trice ( trice_0 ) */ {13202u, 32u, 0u, "tim:trice START time message\n"},
+ /* trice ( trice_0 ) */ {13199u, 32u, 0u, "tim:trice STOP time message\n"},
+ /* trice ( trice_0 ) */ {13201u, 32u, 0u, "tim:trice STOP time message\n"},
+ /* trice ( trice_0 ) */ {13204u, 32u, 0u, "tim:trice STOP time message\n"},
+ /* TRice ( TRice32_1 ) */ {15352u, 32u, 1u, "time:%.1f s\n"},
+ /* TRICE ( TRICE32_1 ) */ {14713u, 32u, 1u, "time:TRICE32_1 message, SysTick is %6u\n"},
+ /* TRICE ( TRICE_0 ) */ {13724u, 32u, 0u, "time:blue+i:blue+h\n"},
+ /* trice ( trice_0 ) */ {13774u, 32u, 0u, "time:blue+i:blue+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13824u, 32u, 0u, "time:blue+i:blue+h\n"},
+ /* Trice ( Trice_0 ) */ {13874u, 32u, 0u, "time:blue+i:blue+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13924u, 32u, 0u, "time:blue+i:blue+h\n"},
+ /* TRice ( TRice_0 ) */ {13974u, 32u, 0u, "time:blue+i:blue+h\n"},
+ /* trice ( trice_0 ) */ {14803u, 32u, 0u, "time:i"},
+ /* TRICE ( TRICE_0 ) */ {13723u, 32u, 0u, "trace:default+i:default+h\n"},
+ /* trice ( trice_0 ) */ {13773u, 32u, 0u, "trace:default+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13823u, 32u, 0u, "trace:default+i:default+h\n"},
+ /* Trice ( Trice_0 ) */ {13873u, 32u, 0u, "trace:default+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13923u, 32u, 0u, "trace:default+i:default+h\n"},
+ /* TRice ( TRice_0 ) */ {13973u, 32u, 0u, "trace:default+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13729u, 32u, 0u, "transmit:black:black+h\n"},
+ /* trice ( trice_0 ) */ {13779u, 32u, 0u, "transmit:black:black+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13829u, 32u, 0u, "transmit:black:black+h\n"},
+ /* Trice ( Trice_0 ) */ {13879u, 32u, 0u, "transmit:black:black+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13929u, 32u, 0u, "transmit:black:black+h\n"},
+ /* TRice ( TRice_0 ) */ {13979u, 32u, 0u, "transmit:black:black+h\n"},
+ /* TRICE16 ( TRICE16_4 ) */ {14725u, 16u, 4u, "tst:TRICE16 %%6d -> %6d %6d %6d %6d\n"},
+ /* TRICE16 ( TRICE16_4 ) */ {14726u, 16u, 4u, "tst:TRICE16 %%7o -> %7o %7o %7o %7o\n"},
+ /* TRICE16 ( TRICE16_4 ) */ {14724u, 16u, 4u, "tst:TRICE16 %%05x -> %05x %05x %05x %05x\n"},
+ /* TRICE16 ( TRICE16_12 ) */ {14859u, 16u, 12u, "tst:TRICE16 %d %d %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE16 ( TRICE16_11 ) */ {14858u, 16u, 11u, "tst:TRICE16 %d %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE16 ( TRICE16_10 ) */ {14857u, 16u, 10u, "tst:TRICE16 %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE16 ( TRICE16_9 ) */ {14856u, 16u, 9u, "tst:TRICE16 %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE16 ( TRICE16_8 ) */ {14855u, 16u, 8u, "tst:TRICE16 %d %d %d %d %d %d %d %d\n"},
+ /* TRICE16 ( TRICE16_7 ) */ {14854u, 16u, 7u, "tst:TRICE16 %d %d %d %d %d %d %d\n"},
+ /* TRICE16 ( TRICE16_6 ) */ {14853u, 16u, 6u, "tst:TRICE16 %d %d %d %d %d %d\n"},
+ /* TRICE16 ( TRICE16_5 ) */ {14852u, 16u, 5u, "tst:TRICE16 %d %d %d %d %d\n"},
+ /* TRICE16 ( TRICE16_4 ) */ {14851u, 16u, 4u, "tst:TRICE16 %d %d %d %d\n"},
+ /* TRICE16 ( TRICE16_3 ) */ {14850u, 16u, 3u, "tst:TRICE16 %d %d %d\n"},
+ /* TRICE16 ( TRICE16_2 ) */ {14849u, 16u, 2u, "tst:TRICE16 %d %d\n"},
+ /* TRICE16 ( TRICE16_1 ) */ {14848u, 16u, 1u, "tst:TRICE16 %d\n"},
+ /* TRICE16 ( TRICE16_9 ) */ {14860u, 16u, 9u, "tst:TRICE16 %t %b %x %X %d %u %o %O %p\n"},
+ /* TRICE16_9 ( TRICE16_9 ) */ {14873u, 16u, 9u, "tst:TRICE16 %t %b %x %X %d %u %o %O %p\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {14861u, 16u, 1u, "tst:TRICE16_1 %d\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {14768u, 16u, 1u, "tst:TRICE16_1 %d\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {14782u, 16u, 1u, "tst:TRICE16_1 %u\n"},
+ /* TRICE16_10 ( TRICE16_10 ) */ {14870u, 16u, 10u, "tst:TRICE16_10 %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE16_11 ( TRICE16_11 ) */ {14871u, 16u, 11u, "tst:TRICE16_11 %d %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE16_12 ( TRICE16_12 ) */ {14872u, 16u, 12u, "tst:TRICE16_12 %d %d %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE16_2 ( TRICE16_2 ) */ {14862u, 16u, 2u, "tst:TRICE16_2 %d %d\n"},
+ /* TRICE16_2 ( TRICE16_2 ) */ {14769u, 16u, 2u, "tst:TRICE16_2 %d %d\n"},
+ /* TRICE16_2 ( TRICE16_2 ) */ {14783u, 16u, 2u, "tst:TRICE16_2 %u %u\n"},
+ /* TRICE16_3 ( TRICE16_3 ) */ {14863u, 16u, 3u, "tst:TRICE16_3 %d %d %d\n"},
+ /* TRICE16_3 ( TRICE16_3 ) */ {14770u, 16u, 3u, "tst:TRICE16_3 %d %d %d\n"},
+ /* TRICE16_3 ( TRICE16_3 ) */ {14784u, 16u, 3u, "tst:TRICE16_3 %u %u %u\n"},
+ /* TRICE16_4 ( TRICE16_4 ) */ {14864u, 16u, 4u, "tst:TRICE16_4 %d %d %d %d\n"},
+ /* TRICE16_4 ( TRICE16_4 ) */ {14771u, 16u, 4u, "tst:TRICE16_4 %d %d %d %d\n"},
+ /* TRICE16_4 ( TRICE16_4 ) */ {14785u, 16u, 4u, "tst:TRICE16_4 %u %u %u %u\n"},
+ /* TRICE16_5 ( TRICE16_5 ) */ {14865u, 16u, 5u, "tst:TRICE16_5 %d %d %d %d %d\n"},
+ /* TRICE16_6 ( TRICE16_6 ) */ {14866u, 16u, 6u, "tst:TRICE16_6 %d %d %d %d %d %d\n"},
+ /* TRICE16_7 ( TRICE16_7 ) */ {14867u, 16u, 7u, "tst:TRICE16_7 %d %d %d %d %d %d %d\n"},
+ /* TRICE16_8 ( TRICE16_8 ) */ {14868u, 16u, 8u, "tst:TRICE16_8 %d %d %d %d %d %d %d %d\n"},
+ /* TRICE16_9 ( TRICE16_9 ) */ {14869u, 16u, 9u, "tst:TRICE16_9 %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE32 ( TRICE32_12 ) */ {14900u, 32u, 12u, "tst:TRICE32 %t %b %x %X %d %u %o %O %p %e %f %g\n"},
+ /* TRICE32 ( TRICE32_4 ) */ {14727u, 32u, 4u, "tst:TRICE32 %%09x -> %09x %09x %09x %09x\n"},
+ /* TRICE32 ( TRICE32_4 ) */ {14728u, 32u, 4u, "tst:TRICE32 %%10d -> %10d %10d %10d %10x\n"},
+ /* TRICE32 ( TRICE32_12 ) */ {14886u, 32u, 12u, "tst:TRICE32 %d %d %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE32 ( TRICE32_11 ) */ {14885u, 32u, 11u, "tst:TRICE32 %d %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE32 ( TRICE32_10 ) */ {14884u, 32u, 10u, "tst:TRICE32 %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE32 ( TRICE32_9 ) */ {14883u, 32u, 9u, "tst:TRICE32 %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE32 ( TRICE32_8 ) */ {14882u, 32u, 8u, "tst:TRICE32 %d %d %d %d %d %d %d %d\n"},
+ /* TRICE32 ( TRICE32_7 ) */ {14881u, 32u, 7u, "tst:TRICE32 %d %d %d %d %d %d %d\n"},
+ /* TRICE32 ( TRICE32_6 ) */ {14880u, 32u, 6u, "tst:TRICE32 %d %d %d %d %d %d\n"},
+ /* TRICE32 ( TRICE32_5 ) */ {14879u, 32u, 5u, "tst:TRICE32 %d %d %d %d %d\n"},
+ /* TRICE32 ( TRICE32_4 ) */ {14878u, 32u, 4u, "tst:TRICE32 %d %d %d %d\n"},
+ /* TRICE32 ( TRICE32_3 ) */ {14877u, 32u, 3u, "tst:TRICE32 %d %d %d\n"},
+ /* TRICE32 ( TRICE32_2 ) */ {14876u, 32u, 2u, "tst:TRICE32 %d %d\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {14875u, 32u, 1u, "tst:TRICE32 %d\n"},
+ /* TRICE32 ( TRICE32_12 ) */ {14887u, 32u, 12u, "tst:TRICE32 %t %b %x %X %d %u %o %O %p %e %f %g\n"},
+ /* TRICE32_1 ( TRICE32_1 ) */ {14888u, 32u, 1u, "tst:TRICE32_1 %d\n"},
+ /* TRICE32_1 ( TRICE32_1 ) */ {14772u, 32u, 1u, "tst:TRICE32_1 %08x\n"},
+ /* TRICE32_1 ( TRICE32_1 ) */ {14773u, 32u, 1u, "tst:TRICE32_1 %d\n"},
+ /* TRICE32_1 ( TRICE32_1 ) */ {14786u, 32u, 1u, "tst:TRICE32_1 %u\n"},
+ /* TRICE32_10 ( TRICE32_10 ) */ {14897u, 32u, 10u, "tst:TRICE32_10 %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE32_11 ( TRICE32_11 ) */ {14898u, 32u, 11u, "tst:TRICE32_11 %d %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE32_12 ( TRICE32_12 ) */ {14899u, 32u, 12u, "tst:TRICE32_12 %d %d %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE32_12 ( TRICE32_12 ) */ {14901u, 32u, 12u, "tst:TRICE32_12 %t %b %x %X %d %u %o %O %p %e %f %g\n"},
+ /* TRICE32_2 ( TRICE32_2 ) */ {14889u, 32u, 2u, "tst:TRICE32_2 %d %d\n"},
+ /* TRICE32_2 ( TRICE32_2 ) */ {14775u, 32u, 2u, "tst:TRICE32_2 %d %d\n"},
+ /* TRICE32_2 ( TRICE32_2 ) */ {14787u, 32u, 2u, "tst:TRICE32_2 %u %u\n"},
+ /* TRICE32_2 ( TRICE32_2 ) */ {14774u, 32u, 2u, "tst:TRICE32_2 %x %x\n"},
+ /* TRICE32_3 ( TRICE32_3 ) */ {14890u, 32u, 3u, "tst:TRICE32_3 %d %d %d\n"},
+ /* TRICE32_3 ( TRICE32_3 ) */ {14777u, 32u, 3u, "tst:TRICE32_3 %d %d %d\n"},
+ /* TRICE32_3 ( TRICE32_3 ) */ {14788u, 32u, 3u, "tst:TRICE32_3 %u %u %u\n"},
+ /* TRICE32_3 ( TRICE32_3 ) */ {14776u, 32u, 3u, "tst:TRICE32_3 %x %x %x\n"},
+ /* TRICE32_4 ( TRICE32_4 ) */ {14891u, 32u, 4u, "tst:TRICE32_4 %d %d %d %d\n"},
+ /* TRICE32_4 ( TRICE32_4 ) */ {14779u, 32u, 4u, "tst:TRICE32_4 %d %d %d %d\n"},
+ /* TRICE32_4 ( TRICE32_4 ) */ {14789u, 32u, 4u, "tst:TRICE32_4 %u %u %u %u\n"},
+ /* TRICE32_4 ( TRICE32_4 ) */ {14778u, 32u, 4u, "tst:TRICE32_4 %x %x %x %x\n"},
+ /* TRICE32_5 ( TRICE32_5 ) */ {14892u, 32u, 5u, "tst:TRICE32_5 %d %d %d %d %d\n"},
+ /* TRICE32_6 ( TRICE32_6 ) */ {14893u, 32u, 6u, "tst:TRICE32_6 %d %d %d %d %d %d\n"},
+ /* TRICE32_7 ( TRICE32_7 ) */ {14894u, 32u, 7u, "tst:TRICE32_7 %d %d %d %d %d %d %d\n"},
+ /* TRICE32_8 ( TRICE32_8 ) */ {14895u, 32u, 8u, "tst:TRICE32_8 %d %d %d %d %d %d %d %d\n"},
+ /* TRICE32_9 ( TRICE32_9 ) */ {14896u, 32u, 9u, "tst:TRICE32_9 %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE64 ( TRICE64_4 ) */ {14730u, 64u, 4u, "tst:TRICE64 %%09x -> %09x %09x %09x %09x\n"},
+ /* TRICE64 ( TRICE64_4 ) */ {14731u, 64u, 4u, "tst:TRICE64 %%10d -> %10d %10d %10d %10x\n"},
+ /* TRICE64 ( TRICE64_12 ) */ {14914u, 64u, 12u, "tst:TRICE64 %d %d %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE64 ( TRICE64_11 ) */ {14913u, 64u, 11u, "tst:TRICE64 %d %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE64 ( TRICE64_10 ) */ {14912u, 64u, 10u, "tst:TRICE64 %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE64 ( TRICE64_9 ) */ {14911u, 64u, 9u, "tst:TRICE64 %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE64 ( TRICE64_8 ) */ {14910u, 64u, 8u, "tst:TRICE64 %d %d %d %d %d %d %d %d\n"},
+ /* TRICE64 ( TRICE64_7 ) */ {14909u, 64u, 7u, "tst:TRICE64 %d %d %d %d %d %d %d\n"},
+ /* TRICE64 ( TRICE64_6 ) */ {14908u, 64u, 6u, "tst:TRICE64 %d %d %d %d %d %d\n"},
+ /* TRICE64 ( TRICE64_5 ) */ {14907u, 64u, 5u, "tst:TRICE64 %d %d %d %d %d\n"},
+ /* TRICE64 ( TRICE64_4 ) */ {14906u, 64u, 4u, "tst:TRICE64 %d %d %d %d\n"},
+ /* TRICE64 ( TRICE64_3 ) */ {14905u, 64u, 3u, "tst:TRICE64 %d %d %d\n"},
+ /* TRICE64 ( TRICE64_2 ) */ {14904u, 64u, 2u, "tst:TRICE64 %d %d\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {14903u, 64u, 1u, "tst:TRICE64 %d\n"},
+ /* TRICE64 ( TRICE64_12 ) */ {14915u, 64u, 12u, "tst:TRICE64 %t %b %x %X %d %u %o %O %p %e %f %g\n"},
+ /* TRICE64_1 ( TRICE64_1 ) */ {14916u, 64u, 1u, "tst:TRICE64_1 %d\n"},
+ /* TRICE64_1 ( TRICE64_1 ) */ {14780u, 64u, 1u, "tst:TRICE64_1 %d\n"},
+ /* TRICE64_1 ( TRICE64_1 ) */ {14792u, 64u, 1u, "tst:TRICE64_1 %u\n"},
+ /* TRICE64_1 ( TRICE64_1 ) */ {14790u, 64u, 1u, "tst:TRICE64_1 %x\n"},
+ /* TRICE64_10 ( TRICE64_10 ) */ {14925u, 64u, 10u, "tst:TRICE64_10 %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE64_11 ( TRICE64_11 ) */ {14926u, 64u, 11u, "tst:TRICE64_11 %d %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE64_12 ( TRICE64_12 ) */ {14927u, 64u, 12u, "tst:TRICE64_12 %d %d %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE64_12 ( TRICE64_12 ) */ {14928u, 64u, 12u, "tst:TRICE64_12 %t %b %x %X %d %u %o %O %p %e %f %g\n"},
+ /* TRICE64_2 ( TRICE64_2 ) */ {14917u, 64u, 2u, "tst:TRICE64_2 %d %d\n"},
+ /* TRICE64_2 ( TRICE64_2 ) */ {14781u, 64u, 2u, "tst:TRICE64_2 %d %d\n"},
+ /* TRICE64_2 ( TRICE64_2 ) */ {14793u, 64u, 2u, "tst:TRICE64_2 %u %u\n"},
+ /* TRICE64_2 ( TRICE64_2 ) */ {14791u, 64u, 2u, "tst:TRICE64_2 %x %x\n"},
+ /* TRICE64_3 ( TRICE64_3 ) */ {14918u, 64u, 3u, "tst:TRICE64_3 %d %d %d\n"},
+ /* TRICE64_4 ( TRICE64_4 ) */ {14919u, 64u, 4u, "tst:TRICE64_4 %d %d %d %d\n"},
+ /* TRICE64_5 ( TRICE64_5 ) */ {14920u, 64u, 5u, "tst:TRICE64_5 %d %d %d %d %d\n"},
+ /* TRICE64_6 ( TRICE64_6 ) */ {14921u, 64u, 6u, "tst:TRICE64_6 %d %d %d %d %d %d\n"},
+ /* TRICE64_7 ( TRICE64_7 ) */ {14922u, 64u, 7u, "tst:TRICE64_7 %d %d %d %d %d %d %d\n"},
+ /* TRICE64_8 ( TRICE64_8 ) */ {14923u, 64u, 8u, "tst:TRICE64_8 %d %d %d %d %d %d %d %d\n"},
+ /* TRICE64_9 ( TRICE64_9 ) */ {14924u, 64u, 9u, "tst:TRICE64_9 %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE8 ( TRICE8_4 ) */ {14719u, 8u, 4u, "tst:TRICE8 %%4O -> %4O %4O %4O %4O\n"},
+ /* TRICE8 ( TRICE8_4 ) */ {14720u, 8u, 4u, "tst:TRICE8 %%4X -> %4X %4X %4X %4X\n"},
+ /* TRICE8 ( TRICE8_4 ) */ {14716u, 8u, 4u, "tst:TRICE8 %%4d -> %4d %4d %4d %4d\n"},
+ /* TRICE8 ( TRICE8_4 ) */ {14718u, 8u, 4u, "tst:TRICE8 %%4o -> %4o %4o %4o %4o\n"},
+ /* TRICE8 ( TRICE8_4 ) */ {14717u, 8u, 4u, "tst:TRICE8 %%4u -> %4u %4u %4u %4u\n"},
+ /* TRICE8 ( TRICE8_4 ) */ {14721u, 8u, 4u, "tst:TRICE8 %%4x -> %4x %4x %4x %4x\n"},
+ /* TRICE8 ( TRICE8_4 ) */ {14722u, 8u, 4u, "tst:TRICE8 %%8b -> %8b %8b %8b %8b\n"},
+ /* TRICE8 ( TRICE8_9 ) */ {14845u, 8u, 9u, "tst:TRICE8 %t %b %x %X %d %u %o %O %p\n"},
+ /* TRICE8 ( TRICE8_4 ) */ {14715u, 8u, 4u, "tst:TRICE8 %%03x -> %03x %03x %03x %03x\n"},
+ /* TRICE8 ( TRICE8_4 ) */ {14723u, 8u, 4u, "tst:TRICE8 %%08b -> %08b %08b %08b %08b\n"},
+ /* TRICE8 ( TRICE8_12 ) */ {14831u, 8u, 12u, "tst:TRICE8 %d %d %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE8 ( TRICE8_11 ) */ {14830u, 8u, 11u, "tst:TRICE8 %d %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE8 ( TRICE8_10 ) */ {14829u, 8u, 10u, "tst:TRICE8 %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE8 ( TRICE8_9 ) */ {14828u, 8u, 9u, "tst:TRICE8 %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE8 ( TRICE8_8 ) */ {14827u, 8u, 8u, "tst:TRICE8 %d %d %d %d %d %d %d %d\n"},
+ /* TRICE8 ( TRICE8_7 ) */ {14826u, 8u, 7u, "tst:TRICE8 %d %d %d %d %d %d %d\n"},
+ /* TRICE8 ( TRICE8_6 ) */ {14825u, 8u, 6u, "tst:TRICE8 %d %d %d %d %d %d\n"},
+ /* TRICE8 ( TRICE8_5 ) */ {14824u, 8u, 5u, "tst:TRICE8 %d %d %d %d %d\n"},
+ /* TRICE8 ( TRICE8_4 ) */ {14823u, 8u, 4u, "tst:TRICE8 %d %d %d %d\n"},
+ /* TRICE8 ( TRICE8_3 ) */ {14822u, 8u, 3u, "tst:TRICE8 %d %d %d\n"},
+ /* TRICE8 ( TRICE8_2 ) */ {14821u, 8u, 2u, "tst:TRICE8 %d %d\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {14820u, 8u, 1u, "tst:TRICE8 %d\n"},
+ /* TRICE8 ( TRICE8_9 ) */ {14832u, 8u, 9u, "tst:TRICE8 %t %b %x %X %d %u %o %O %p\n"},
+ /* TRICE8_1 ( TRICE8_1 ) */ {14833u, 8u, 1u, "tst:TRICE8_1 %d\n"},
+ /* TRICE8_8 ( TRICE8_8 ) */ {14766u, 8u, 8u, "tst:TRICE8_1 %%d=%d, %%u=%u, 0x%%x=0x%x, 0x%%2x=0x%2x, 0x%%02x=0x%02x, 0x%%3x=0x%3x, 0x%%03x=0x%03x, %%b=%b\n"},
+ /* TRICE8_1 ( TRICE8_1 ) */ {14734u, 8u, 1u, "tst:TRICE8_1 %02x\n"},
+ /* TRICE8_1 ( TRICE8_1 ) */ {14742u, 8u, 1u, "tst:TRICE8_1 %d\n"},
+ /* TRICE8_1 ( TRICE8_1 ) */ {14750u, 8u, 1u, "tst:TRICE8_1 %d\n"},
+ /* TRICE8_1 ( TRICE8_1 ) */ {14758u, 8u, 1u, "tst:TRICE8_1 %u\n"},
+ /* TRICE8_10 ( TRICE8_10 ) */ {14842u, 8u, 10u, "tst:TRICE8_10 %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE8_11 ( TRICE8_11 ) */ {14843u, 8u, 11u, "tst:TRICE8_11 %d %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE8_12 ( TRICE8_12 ) */ {14844u, 8u, 12u, "tst:TRICE8_12 %d %d %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE8_2 ( TRICE8_2 ) */ {14834u, 8u, 2u, "tst:TRICE8_2 %d %d\n"},
+ /* TRICE8_2 ( TRICE8_2 ) */ {14735u, 8u, 2u, "tst:TRICE8_2 %02x %02x\n"},
+ /* TRICE8_2 ( TRICE8_2 ) */ {14743u, 8u, 2u, "tst:TRICE8_2 %d %d\n"},
+ /* TRICE8_2 ( TRICE8_2 ) */ {14751u, 8u, 2u, "tst:TRICE8_2 %d %d\n"},
+ /* TRICE8_2 ( TRICE8_2 ) */ {14759u, 8u, 2u, "tst:TRICE8_2 %u %u\n"},
+ /* TRICE8_3 ( TRICE8_3 ) */ {14835u, 8u, 3u, "tst:TRICE8_3 %d %d %d\n"},
+ /* TRICE8_3 ( TRICE8_3 ) */ {14736u, 8u, 3u, "tst:TRICE8_3 %02x %02x %02x\n"},
+ /* TRICE8_3 ( TRICE8_3 ) */ {14744u, 8u, 3u, "tst:TRICE8_3 %d %d %d\n"},
+ /* TRICE8_3 ( TRICE8_3 ) */ {14752u, 8u, 3u, "tst:TRICE8_3 %d %d %d\n"},
+ /* TRICE8_3 ( TRICE8_3 ) */ {14760u, 8u, 3u, "tst:TRICE8_3 %u %u %u\n"},
+ /* TRICE8_4 ( TRICE8_4 ) */ {14836u, 8u, 4u, "tst:TRICE8_4 %d %d %d %d\n"},
+ /* TRICE8_4 ( TRICE8_4 ) */ {14737u, 8u, 4u, "tst:TRICE8_4 %02x %02x %02x %02x\n"},
+ /* TRICE8_4 ( TRICE8_4 ) */ {14745u, 8u, 4u, "tst:TRICE8_4 %d %d %d %d\n"},
+ /* TRICE8_4 ( TRICE8_4 ) */ {14753u, 8u, 4u, "tst:TRICE8_4 %d %d %d %d\n"},
+ /* TRICE8_4 ( TRICE8_4 ) */ {14761u, 8u, 4u, "tst:TRICE8_4 %u %u %u %u\n"},
+ /* TRICE8_5 ( TRICE8_5 ) */ {14837u, 8u, 5u, "tst:TRICE8_5 %d %d %d %d %d\n"},
+ /* TRICE8_5 ( TRICE8_5 ) */ {14738u, 8u, 5u, "tst:TRICE8_5 %02x %02x %02x %02x %02x\n"},
+ /* TRICE8_5 ( TRICE8_5 ) */ {14746u, 8u, 5u, "tst:TRICE8_5 %d %d %d %d %d\n"},
+ /* TRICE8_5 ( TRICE8_5 ) */ {14754u, 8u, 5u, "tst:TRICE8_5 %d %d %d %d %d\n"},
+ /* TRICE8_5 ( TRICE8_5 ) */ {14762u, 8u, 5u, "tst:TRICE8_5 %u %u %u %u %u\n"},
+ /* TRICE8_6 ( TRICE8_6 ) */ {14838u, 8u, 6u, "tst:TRICE8_6 %d %d %d %d %d %d\n"},
+ /* TRICE8_6 ( TRICE8_6 ) */ {14739u, 8u, 6u, "tst:TRICE8_6 %02x %02x %02x %02x %02x %02x\n"},
+ /* TRICE8_6 ( TRICE8_6 ) */ {14747u, 8u, 6u, "tst:TRICE8_6 %d %d %d %d %d %d\n"},
+ /* TRICE8_6 ( TRICE8_6 ) */ {14755u, 8u, 6u, "tst:TRICE8_6 %d %d %d %d %d %d\n"},
+ /* TRICE8_6 ( TRICE8_6 ) */ {14763u, 8u, 6u, "tst:TRICE8_6 %u %u %u %u %u %u\n"},
+ /* TRICE8_7 ( TRICE8_7 ) */ {14839u, 8u, 7u, "tst:TRICE8_7 %d %d %d %d %d %d %d\n"},
+ /* TRICE8_7 ( TRICE8_7 ) */ {14740u, 8u, 7u, "tst:TRICE8_7 %02x %02x %02x %02x %02x %02x %02x\n"},
+ /* TRICE8_7 ( TRICE8_7 ) */ {14748u, 8u, 7u, "tst:TRICE8_7 %d %d %d %d %d %d %d\n"},
+ /* TRICE8_7 ( TRICE8_7 ) */ {14756u, 8u, 7u, "tst:TRICE8_7 %d %d %d %d %d %d %d\n"},
+ /* TRICE8_7 ( TRICE8_7 ) */ {14764u, 8u, 7u, "tst:TRICE8_7 %u %u %u %u %u %u %u\n"},
+ /* TRICE8_8 ( TRICE8_8 ) */ {14840u, 8u, 8u, "tst:TRICE8_8 %d %d %d %d %d %d %d %d\n"},
+ /* TRICE8_8 ( TRICE8_8 ) */ {14741u, 8u, 8u, "tst:TRICE8_8 %02X %02X %02X %02X %02x %02x %02x %02x\n"},
+ /* TRICE8_8 ( TRICE8_8 ) */ {14749u, 8u, 8u, "tst:TRICE8_8 %d %d %d %d %d %d %d %d\n"},
+ /* TRICE8_8 ( TRICE8_8 ) */ {14757u, 8u, 8u, "tst:TRICE8_8 %d %d %d %d %d %d %d %d\n"},
+ /* TRICE8_8 ( TRICE8_8 ) */ {14765u, 8u, 8u, "tst:TRICE8_8 %u %u %u %u %u %u %u %u\n"},
+ /* TRICE8_9 ( TRICE8_9 ) */ {14841u, 8u, 9u, "tst:TRICE8_9 %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE8_9 ( TRICE8_9 ) */ {14846u, 8u, 9u, "tst:TRICE8_9 %t %b %x %X %d %u %o %O %p\n"},
+ /* TRice ( TRice32_1 ) */ {13423u, 32u, 1u, "value=%d\n"},
+ /* Trice ( Trice32_1 ) */ {13424u, 32u, 1u, "value=%d\n"},
+ /* trice ( trice32_1 ) */ {13425u, 32u, 1u, "value=%d\n"},
+ /* TRice8 ( TRice8_1 ) */ {13426u, 8u, 1u, "value=%d\n"},
+ /* Trice8 ( Trice8_1 ) */ {13427u, 8u, 1u, "value=%d\n"},
+ /* trice8 ( trice8_1 ) */ {13428u, 8u, 1u, "value=%d\n"},
+ /* TRice16 ( TRice16_1 ) */ {13429u, 16u, 1u, "value=%d\n"},
+ /* Trice16 ( Trice16_1 ) */ {13430u, 16u, 1u, "value=%d\n"},
+ /* trice16 ( trice16_1 ) */ {13431u, 16u, 1u, "value=%d\n"},
+ /* TRice32 ( TRice32_1 ) */ {13432u, 32u, 1u, "value=%d\n"},
+ /* Trice32 ( Trice32_1 ) */ {13433u, 32u, 1u, "value=%d\n"},
+ /* trice32 ( trice32_1 ) */ {13434u, 32u, 1u, "value=%d\n"},
+ /* TRice64 ( TRice64_1 ) */ {13435u, 64u, 1u, "value=%d\n"},
+ /* Trice64 ( Trice64_1 ) */ {13436u, 64u, 1u, "value=%d\n"},
+ /* trice64 ( trice64_1 ) */ {13437u, 64u, 1u, "value=%d\n"},
+ /* TRice_1 ( TRice32_1 ) */ {13438u, 32u, 1u, "value=%d\n"},
+ /* Trice_1 ( Trice32_1 ) */ {13439u, 32u, 1u, "value=%d\n"},
+ /* trice_1 ( trice32_1 ) */ {13440u, 32u, 1u, "value=%d\n"},
+ /* TRice8_1 ( TRice8_1 ) */ {13441u, 8u, 1u, "value=%d\n"},
+ /* Trice8_1 ( Trice8_1 ) */ {13442u, 8u, 1u, "value=%d\n"},
+ /* trice8_1 ( trice8_1 ) */ {13443u, 8u, 1u, "value=%d\n"},
+ /* TRice16_1 ( TRice16_1 ) */ {13444u, 16u, 1u, "value=%d\n"},
+ /* Trice16_1 ( Trice16_1 ) */ {13445u, 16u, 1u, "value=%d\n"},
+ /* trice16_1 ( trice16_1 ) */ {13446u, 16u, 1u, "value=%d\n"},
+ /* TRice32_1 ( TRice32_1 ) */ {13447u, 32u, 1u, "value=%d\n"},
+ /* Trice32_1 ( Trice32_1 ) */ {13448u, 32u, 1u, "value=%d\n"},
+ /* trice32_1 ( trice32_1 ) */ {13449u, 32u, 1u, "value=%d\n"},
+ /* TRice64_1 ( TRice64_1 ) */ {13450u, 64u, 1u, "value=%d\n"},
+ /* Trice64_1 ( Trice64_1 ) */ {13451u, 64u, 1u, "value=%d\n"},
+ /* trice64_1 ( trice64_1 ) */ {13452u, 64u, 1u, "value=%d\n"},
+ /* trice8 ( trice8_1 ) */ {13648u, 8u, 1u, "value=%d\n"},
+ /* Trice8 ( Trice8_1 ) */ {13649u, 8u, 1u, "value=%d\n"},
+ /* TRice8 ( TRice8_1 ) */ {13650u, 8u, 1u, "value=%d\n"},
+ /* trice8_1 ( trice8_1 ) */ {13651u, 8u, 1u, "value=%d\n"},
+ /* Trice8_1 ( Trice8_1 ) */ {13652u, 8u, 1u, "value=%d\n"},
+ /* TRice8_1 ( TRice8_1 ) */ {13653u, 8u, 1u, "value=%d\n"},
+ /* trice16 ( trice16_1 ) */ {13654u, 16u, 1u, "value=%d\n"},
+ /* Trice16 ( Trice16_1 ) */ {13655u, 16u, 1u, "value=%d\n"},
+ /* TRice16 ( TRice16_1 ) */ {13656u, 16u, 1u, "value=%d\n"},
+ /* trice16_1 ( trice16_1 ) */ {13657u, 16u, 1u, "value=%d\n"},
+ /* Trice16_1 ( Trice16_1 ) */ {13658u, 16u, 1u, "value=%d\n"},
+ /* TRice16_1 ( TRice16_1 ) */ {13659u, 16u, 1u, "value=%d\n"},
+ /* trice32 ( trice32_1 ) */ {13660u, 32u, 1u, "value=%d\n"},
+ /* Trice32 ( Trice32_1 ) */ {13661u, 32u, 1u, "value=%d\n"},
+ /* TRice32 ( TRice32_1 ) */ {13662u, 32u, 1u, "value=%d\n"},
+ /* trice32_1 ( trice32_1 ) */ {13663u, 32u, 1u, "value=%d\n"},
+ /* Trice32_1 ( Trice32_1 ) */ {13664u, 32u, 1u, "value=%d\n"},
+ /* TRice32_1 ( TRice32_1 ) */ {13665u, 32u, 1u, "value=%d\n"},
+ /* trice64 ( trice64_1 ) */ {13666u, 64u, 1u, "value=%d\n"},
+ /* Trice64 ( Trice64_1 ) */ {13667u, 64u, 1u, "value=%d\n"},
+ /* TRice64 ( TRice64_1 ) */ {13668u, 64u, 1u, "value=%d\n"},
+ /* trice64_1 ( trice64_1 ) */ {13669u, 64u, 1u, "value=%d\n"},
+ /* Trice64_1 ( Trice64_1 ) */ {13670u, 64u, 1u, "value=%d\n"},
+ /* TRice64_1 ( TRice64_1 ) */ {13671u, 64u, 1u, "value=%d\n"},
+ /* TRICE ( TRICE32_1 ) */ {13672u, 32u, 1u, "value=%d\n"},
+ /* TRICE ( TRICE32_1 ) */ {13673u, 32u, 1u, "value=%d\n"},
+ /* TRICE ( TRICE32_1 ) */ {13674u, 32u, 1u, "value=%d\n"},
+ /* TRICE ( TRICE32_1 ) */ {13675u, 32u, 1u, "value=%d\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {13676u, 8u, 1u, "value=%d\n"},
+ /* TRICE8_1 ( TRICE8_1 ) */ {13677u, 8u, 1u, "value=%d\n"},
+ /* trice8 ( trice8_1 ) */ {13678u, 8u, 1u, "value=%d\n"},
+ /* trice8_1 ( trice8_1 ) */ {13679u, 8u, 1u, "value=%d\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {13680u, 8u, 1u, "value=%d\n"},
+ /* TRICE8_1 ( TRICE8_1 ) */ {13681u, 8u, 1u, "value=%d\n"},
+ /* Trice8 ( Trice8_1 ) */ {13682u, 8u, 1u, "value=%d\n"},
+ /* Trice8_1 ( Trice8_1 ) */ {13683u, 8u, 1u, "value=%d\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {13684u, 8u, 1u, "value=%d\n"},
+ /* TRICE8_1 ( TRICE8_1 ) */ {13685u, 8u, 1u, "value=%d\n"},
+ /* TRice8 ( TRice8_1 ) */ {13686u, 8u, 1u, "value=%d\n"},
+ /* TRice8_1 ( TRice8_1 ) */ {13687u, 8u, 1u, "value=%d\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {13688u, 8u, 1u, "value=%d\n"},
+ /* TRICE8_1 ( TRICE8_1 ) */ {13689u, 8u, 1u, "value=%d\n"},
+ /* trice8 ( trice8_1 ) */ {13242u, 8u, 1u, "value=%x\n"},
+ /* trice8 ( trice8_1 ) */ {13243u, 8u, 1u, "value=%x\n"},
+ /* TRICE ( TRICE_0 ) */ {13739u, 32u, 0u, "verbose:blue:default\n"},
+ /* trice ( trice_0 ) */ {13789u, 32u, 0u, "verbose:blue:default\n"},
+ /* TRICE ( TRICE_0 ) */ {13839u, 32u, 0u, "verbose:blue:default\n"},
+ /* Trice ( Trice_0 ) */ {13889u, 32u, 0u, "verbose:blue:default\n"},
+ /* TRICE ( TRICE_0 ) */ {13939u, 32u, 0u, "verbose:blue:default\n"},
+ /* TRice ( TRice_0 ) */ {13989u, 32u, 0u, "verbose:blue:default\n"},
+ /* TRice ( TRice32_3 ) */ {1000u, 32u, 3u, "vis_demo:%f,%f,%f\n"},
+ /* TRice ( TRice32_3 ) */ {15910u, 32u, 3u, "vis_demo:%f,%f,%f\n"},
+ /* trice ( trice_0 ) */ {15959u, 32u, 0u, "vis_demo:time_s,x,y,z\n"},
+ /* TRICE ( TRICE_0 ) */ {15154u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE ( TRICE_0 ) */ {15155u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE ( TRICE_0 ) */ {15156u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE ( TRICE_0 ) */ {15157u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* trice ( trice_0 ) */ {15158u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* Trice ( Trice_0 ) */ {15159u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRice ( TRice_0 ) */ {15160u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE_0 ( TRICE_0 ) */ {15161u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE_0 ( TRICE_0 ) */ {15162u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE_0 ( TRICE_0 ) */ {15163u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE_0 ( TRICE_0 ) */ {15164u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* trice_0 ( trice_0 ) */ {15165u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* Trice_0 ( Trice_0 ) */ {15166u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRice_0 ( TRice_0 ) */ {15167u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE0 ( TRICE_0 ) */ {15168u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE0 ( TRICE_0 ) */ {15169u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE0 ( TRICE_0 ) */ {15170u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE0 ( TRICE_0 ) */ {15171u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* trice0 ( trice_0 ) */ {15172u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* Trice0 ( Trice_0 ) */ {15173u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRice0 ( TRice_0 ) */ {15174u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE_0 ( TRICE_0 ) */ {15175u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE_0 ( TRICE_0 ) */ {15176u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE_0 ( TRICE_0 ) */ {15177u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE_0 ( TRICE_0 ) */ {15178u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* trice_0 ( trice_0 ) */ {15179u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* Trice_0 ( Trice_0 ) */ {15180u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRice_0 ( TRice_0 ) */ {15181u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE8 ( TRICE_0 ) */ {15182u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE8 ( TRICE_0 ) */ {15183u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE8 ( TRICE_0 ) */ {15184u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE8 ( TRICE_0 ) */ {15185u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* trice8 ( trice_0 ) */ {15186u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* Trice8 ( Trice_0 ) */ {15187u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRice8 ( TRice_0 ) */ {15188u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE8_0 ( TRICE_0 ) */ {15189u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE8_0 ( TRICE_0 ) */ {15190u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE8_0 ( TRICE_0 ) */ {15191u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE8_0 ( TRICE_0 ) */ {15192u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* trice8_0 ( trice_0 ) */ {15193u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* Trice8_0 ( Trice_0 ) */ {15194u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRice8_0 ( TRice_0 ) */ {15195u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* trice16 ( trice_0 ) */ {15196u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* trice16 ( trice_0 ) */ {15197u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* trice16 ( trice_0 ) */ {15198u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* trice16 ( trice_0 ) */ {15199u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* trice16 ( trice_0 ) */ {15200u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* Trice16 ( Trice_0 ) */ {15201u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRice16 ( TRice_0 ) */ {15202u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE16_0 ( TRICE_0 ) */ {15203u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE16_0 ( TRICE_0 ) */ {15204u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE16_0 ( TRICE_0 ) */ {15205u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE16_0 ( TRICE_0 ) */ {15206u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* trice16_0 ( trice_0 ) */ {15207u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* Trice16_0 ( Trice_0 ) */ {15208u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRice16_0 ( TRice_0 ) */ {15209u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE32 ( TRICE_0 ) */ {15210u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE32 ( TRICE_0 ) */ {15211u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE32 ( TRICE_0 ) */ {15212u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE32 ( TRICE_0 ) */ {15213u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* trice32 ( trice_0 ) */ {15214u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* Trice32 ( Trice_0 ) */ {15215u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRice32 ( TRice_0 ) */ {15216u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE32_0 ( TRICE_0 ) */ {15217u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE32_0 ( TRICE_0 ) */ {15218u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE32_0 ( TRICE_0 ) */ {15219u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE32_0 ( TRICE_0 ) */ {15220u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* trice32_0 ( trice_0 ) */ {15221u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* Trice32_0 ( Trice_0 ) */ {15222u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRice32_0 ( TRice_0 ) */ {15223u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE64 ( TRICE_0 ) */ {15224u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE64 ( TRICE_0 ) */ {15225u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE64 ( TRICE_0 ) */ {15226u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE64 ( TRICE_0 ) */ {15227u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* trice64 ( trice_0 ) */ {15228u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* Trice64 ( Trice_0 ) */ {15229u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRice64 ( TRice_0 ) */ {15230u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE64_0 ( TRICE_0 ) */ {15231u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE64_0 ( TRICE_0 ) */ {15232u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE64_0 ( TRICE_0 ) */ {15233u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE64_0 ( TRICE_0 ) */ {15234u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* trice64_0 ( trice_0 ) */ {15235u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* Trice64_0 ( Trice_0 ) */ {15236u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRice64_0 ( TRice_0 ) */ {15237u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* triceS ( triceS ) */ {16369u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "w: Hello! 👋🙂 \n\n ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ \n 🎈🎈🎈🎈%s🎈🎈🎈🎈\n 🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃 \n\n\n"},
+ /* trice ( trice_0 ) */ {14796u, 32u, 0u, "w:B"},
+ /* trice ( trice_0 ) */ {14814u, 32u, 0u, "w:B"},
+ /* TRICE ( TRICE_0 ) */ {13719u, 32u, 0u, "warning:11+i:red\n"},
+ /* trice ( trice_0 ) */ {13769u, 32u, 0u, "warning:11+i:red\n"},
+ /* TRICE ( TRICE_0 ) */ {13819u, 32u, 0u, "warning:11+i:red\n"},
+ /* Trice ( Trice_0 ) */ {13869u, 32u, 0u, "warning:11+i:red\n"},
+ /* TRICE ( TRICE_0 ) */ {13919u, 32u, 0u, "warning:11+i:red\n"},
+ /* TRice ( TRice_0 ) */ {13969u, 32u, 0u, "warning:11+i:red\n"},
+ /* TRICE_N ( TRICE_N ) */ {15256u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:%s\n"},
+ /* trice ( trice_0 ) */ {13034u, 32u, 0u, "wr:X0 after 1\n"},
+ /* trice ( trice_0 ) */ {13035u, 32u, 0u, "wr:X0 before 2\n"},
+ /* trice ( trice_0 ) */ {13045u, 32u, 0u, "wr:X0 tail\n"},
+ /* trice8B ( trice8B ) */ {13038u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-B: %02x\n"},
+ /* trice8B ( trice8B ) */ {13039u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-B: %02x\n"},
+ /* trice8B ( trice8B ) */ {13044u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-B: %02x\n"},
+ /* triceS ( triceS ) */ {13036u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-S:%s\n"},
+ /* triceS ( triceS ) */ {13037u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-S:%s\n"},
+ /* triceS ( triceS ) */ {13043u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-S:%s\n"},
+ /* TRice8B ( TRice8B ) */ {13041u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-TRiceB: %02x\n"},
+ /* Trice8B ( Trice8B ) */ {13042u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-TriceB: %02x\n"},
+ /* TriceS ( TriceS ) */ {13040u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-TriceS:%s\n"},
+ /* trice ( trice_0 ) */ {14798u, 32u, 0u, "wr:d"},
+ /* trice ( trice_0 ) */ {14816u, 32u, 0u, "wr:d"},
+ /* TRICE ( TRICE_0 ) */ {13727u, 32u, 0u, "write:black+u:yellow+h\n"},
+ /* trice ( trice_0 ) */ {13777u, 32u, 0u, "write:black+u:yellow+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13827u, 32u, 0u, "write:black+u:yellow+h\n"},
+ /* Trice ( Trice_0 ) */ {13877u, 32u, 0u, "write:black+u:yellow+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13927u, 32u, 0u, "write:black+u:yellow+h\n"},
+ /* TRice ( TRice_0 ) */ {13977u, 32u, 0u, "write:black+u:yellow+h\n"},
+ /* trice16 ( trice16_1 ) */ {16374u, 16u, 1u, "wrn:TriceDynStringBufTruncateCount = %u\n"},
};
// triceLogElements is used by the RX resolver to bound the generated table.
diff --git a/examples/TriceAbc/build.sh b/examples/TriceAbc/build.sh
index b418fe068..d67cb6b5a 100755
--- a/examples/TriceAbc/build.sh
+++ b/examples/TriceAbc/build.sh
@@ -17,10 +17,10 @@ set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)"
-# Use the shared ID files while rooting legacy location paths at this example.
+# Use the shared ID files and store paths relative to the repository root.
TRICE_TIL_JSON=${TRICE_TIL_JSON:-"${ROOT}/demoTIL.json"}
TRICE_LI_JSON=${TRICE_LI_JSON:-"${ROOT}/demoLI.json"}
-TRICE_LI_PATH_GENERATION=${TRICE_LI_PATH_GENERATION:-"${SCRIPT_DIR}/relative"}
+TRICE_LI_ROOT=${TRICE_LI_ROOT:-"${ROOT}"}
source "${ROOT}/scripts/_setup_trice_environment.sh"
ids_inserted=0
@@ -60,7 +60,7 @@ cleanup() {
if ! run_trice clean \
-til "${TRICE_TIL_JSON}" \
-li "${TRICE_LI_JSON}" \
- -liPath "${TRICE_LI_PATH_GENERATION}" \
+ -liRoot "${TRICE_LI_ROOT}" \
-src "${SCRIPT_DIR}/NodeLib" \
-src "${SCRIPT_DIR}/N1_tx" \
-src "${SCRIPT_DIR}/N2_tx" \
@@ -136,7 +136,7 @@ echo "prepare: trice insert examples/TriceAbc"
run_trice insert \
-til "${TRICE_TIL_JSON}" \
-li "${TRICE_LI_JSON}" \
- -liPath "${TRICE_LI_PATH_GENERATION}" \
+ -liRoot "${TRICE_LI_ROOT}" \
-src "${SCRIPT_DIR}/NodeLib" \
-src "${SCRIPT_DIR}/N1_tx" \
-src "${SCRIPT_DIR}/N2_tx" \
diff --git a/examples/TriceAbc/tlog.sh b/examples/TriceAbc/tlog.sh
index 43ffb9b31..a13420df4 100755
--- a/examples/TriceAbc/tlog.sh
+++ b/examples/TriceAbc/tlog.sh
@@ -4,7 +4,7 @@ cd "$(dirname "$0")" || exit 1
tlog -port FILEBUFFER -args abc.bus \
-li ../../demoLI.json \
- -liPath legacy \
+ -liMaxDirs 1 \
-til ../../demoTIL.json \
-d16 \
-pf COBS \
diff --git a/examples/buildAllTargets_TRICE_OFF.sh b/examples/buildAllTargets_TRICE_OFF.sh
index fc1b653b2..a6c60730d 100755
--- a/examples/buildAllTargets_TRICE_OFF.sh
+++ b/examples/buildAllTargets_TRICE_OFF.sh
@@ -3,6 +3,13 @@ set -euo pipefail
# Resolve this script's directory (works with symlinks as well)
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"
+REPO_ROOT="$(cd -- "$SCRIPT_DIR/.." && pwd -P)"
+
+# Bound source includes generated headers even when target logging is compiled
+# out. Preparing them here keeps TRICE_OFF builds valid in a fresh checkout.
+# shellcheck source=./prepareTriceBind.sh
+source "$SCRIPT_DIR/prepareTriceBind.sh"
+prepare_trice_bind_build "$REPO_ROOT"
failCount=0
diff --git a/examples/buildAllTargets_TRICE_ON.sh b/examples/buildAllTargets_TRICE_ON.sh
index dcffb1f23..2216d39e2 100755
--- a/examples/buildAllTargets_TRICE_ON.sh
+++ b/examples/buildAllTargets_TRICE_ON.sh
@@ -3,6 +3,11 @@ set -euo pipefail
# Resolve this script's directory (works with symlinks as well)
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"
+REPO_ROOT="$(cd -- "$SCRIPT_DIR/.." && pwd -P)"
+
+# shellcheck source=./prepareTriceBind.sh
+source "$SCRIPT_DIR/prepareTriceBind.sh"
+prepare_trice_bind_build "$REPO_ROOT"
failCount=0
diff --git a/examples/exampleData/triceExamples.c b/examples/exampleData/triceExamples.c
index 28bf80531..68dd9d4b4 100644
--- a/examples/exampleData/triceExamples.c
+++ b/examples/exampleData/triceExamples.c
@@ -3,11 +3,12 @@
//! \file triceExamples.c
#include "trice.h"
+#include "trice_triceExamples_c_K2A55E9986F0B1C24.h" // trice-bind: keep as last include before this file's Trice calls
#if !TRICE_OFF
//! TriceHeadLine emits a decorated name. The name length should be 18 characters.
-void TriceHeadLine(char * name) {
+void TriceHeadLine(char* name) {
//! This is usable as the very first trice sequence after restart. Adapt it. Use a UTF-8 capable editor like VS-Code or use pure ASCII.
triceS("w: Hello! 👋🙂 \n\n ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ \n 🎈🎈🎈🎈%s🎈🎈🎈🎈\n 🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃 \n\n\n", name);
}
diff --git a/examples/exampleData/triceLogDiagData.c b/examples/exampleData/triceLogDiagData.c
index dbe922870..c76ad493f 100644
--- a/examples/exampleData/triceLogDiagData.c
+++ b/examples/exampleData/triceLogDiagData.c
@@ -3,6 +3,7 @@
//! \file triceLogDiagData.c
#include "trice.h"
+#include "trice_triceLogDiagData_c_KA5A58B1312AE3CE2.h" // trice-bind: keep as last include before this file's Trice calls
#ifdef __cplusplus
extern "C" {
diff --git a/examples/prepareTriceBind.sh b/examples/prepareTriceBind.sh
new file mode 100644
index 000000000..78f5905c8
--- /dev/null
+++ b/examples/prepareTriceBind.sh
@@ -0,0 +1,69 @@
+#!/bin/sh
+# SPDX-License-Identifier: MIT
+#
+# Shared pre-build preparation for example projects whose sources are kept in
+# Trice Bind state. Source this file and call prepare_trice_bind_build with the
+# repository root; the exported variables then remain visible to the compiler.
+
+# prepare_trice_bind_build creates missing or stale generated headers for a
+# direct build. A managed test workflow already owns source preparation and is
+# only validated here, so nested builds cannot change its Insert/Clean state.
+prepare_trice_bind_build() {
+ trice_bind_repo_root=$1
+
+ if [ "${TRICE_ID_WORKFLOW_OWNER:-0}" = "1" ]; then
+ if [ "${TRICE_ID_WORKFLOW:-}" = "bind" ]; then
+ if [ -z "${TRICE_BIND_INCLUDE_DIR:-}" ] || [ ! -d "$TRICE_BIND_INCLUDE_DIR" ]; then
+ echo "Generated Trice bind headers are missing for the managed build." >&2
+ echo "The workflow owner must set TRICE_BIND_INCLUDE_DIR to its bind output directory." >&2
+ return 1
+ fi
+ fi
+ return 0
+ fi
+
+ if ! command -v trice >/dev/null 2>&1; then
+ echo "The trice executable is required to generate bind headers." >&2
+ echo "Install trice, put it on PATH, and run this build again." >&2
+ return 1
+ fi
+
+ # The repository helper owns the canonical source list, TIL/LI options, and
+ # bind output location. It is idempotent for already-bound source files.
+ (
+ cd "$trice_bind_repo_root" || exit 1
+ bash ./trice_bindIDs_in_examples_and_test_folder.sh
+ ) || return $?
+
+ trice_bind_include_dir=$trice_bind_repo_root/build/triceIDs
+ if [ ! -d "$trice_bind_include_dir" ]; then
+ echo "trice bind did not create the expected header directory:" >&2
+ echo " $trice_bind_include_dir" >&2
+ return 1
+ fi
+
+ # CMake consumes TRICE_BIND_INCLUDE_DIR explicitly. GCC and Clang-based
+ # Makefiles consume C_INCLUDE_PATH, whose list separator differs on Windows.
+ trice_bind_native_dir=$trice_bind_include_dir
+ trice_bind_path_separator=:
+ case "$(uname -s)" in
+ MINGW* | MSYS* | CYGWIN*)
+ trice_bind_path_separator=';'
+ if command -v cygpath >/dev/null 2>&1; then
+ trice_bind_native_dir=$(cygpath -m "$trice_bind_include_dir")
+ fi
+ ;;
+ esac
+ TRICE_BIND_INCLUDE_DIR=$trice_bind_native_dir
+ if [ -n "${C_INCLUDE_PATH:-}" ]; then
+ C_INCLUDE_PATH=$trice_bind_include_dir$trice_bind_path_separator$C_INCLUDE_PATH
+ else
+ C_INCLUDE_PATH=$trice_bind_include_dir
+ fi
+
+ # Inner example scripts must not start the legacy Insert/Clean lifecycle after
+ # this preparation because that would invalidate the generated line mapping.
+ TRICE_ID_WORKFLOW_OWNER=1
+ TRICE_ID_WORKFLOW=bind
+ export TRICE_BIND_INCLUDE_DIR C_INCLUDE_PATH TRICE_ID_WORKFLOW_OWNER TRICE_ID_WORKFLOW
+}
diff --git a/docs/scratchPad/TriceBind/PoC_bind/.gitignore b/experiments/TriceBind/10_Minimal_Line_Binding/.gitignore
similarity index 100%
rename from docs/scratchPad/TriceBind/PoC_bind/.gitignore
rename to experiments/TriceBind/10_Minimal_Line_Binding/.gitignore
diff --git a/docs/scratchPad/TriceBind/PoC_bind/LICENSE.md b/experiments/TriceBind/10_Minimal_Line_Binding/LICENSE.md
similarity index 100%
rename from docs/scratchPad/TriceBind/PoC_bind/LICENSE.md
rename to experiments/TriceBind/10_Minimal_Line_Binding/LICENSE.md
diff --git a/docs/scratchPad/TriceBind/PoC_bind/README.md b/experiments/TriceBind/10_Minimal_Line_Binding/README.md
similarity index 96%
rename from docs/scratchPad/TriceBind/PoC_bind/README.md
rename to experiments/TriceBind/10_Minimal_Line_Binding/README.md
index 8005dda68..cbaf03fcd 100644
--- a/docs/scratchPad/TriceBind/PoC_bind/README.md
+++ b/experiments/TriceBind/10_Minimal_Line_Binding/README.md
@@ -29,7 +29,7 @@ Der Sidecar enthält nur die Zeilenbindung:
## Bindung im Trice-Makro
-Der PoC enthält unter `trice/src` einen kleinen Ausschnitt der Target-Library-Struktur von [rokath/trice](https://github.com/rokath/trice/tree/main/src).
+Der PoC enthält unter `trice/src` einen kleinen Ausschnitt der [Target-Library-Struktur](../../../src) dieses Repositorys.
`triceOn.h` bildet die aktuelle Sourcezeile auf den Sidecar-Eintrag ab:
diff --git a/experiments/TriceBind/10_Minimal_Line_Binding/app/module.c b/experiments/TriceBind/10_Minimal_Line_Binding/app/module.c
new file mode 100644
index 000000000..ba8fcfc6d
--- /dev/null
+++ b/experiments/TriceBind/10_Minimal_Line_Binding/app/module.c
@@ -0,0 +1,13 @@
+#include "trice.h"
+#include "module.c.triceIDs.h"
+
+int main(void) {
+ if (TriceInit() != 0) {
+ return 1;
+ }
+
+ trice("msg:Hello trice bind world\n");
+
+ TriceClose();
+ return 0;
+}
diff --git a/docs/scratchPad/TriceBind/PoC_bind/app/triceConfig.h b/experiments/TriceBind/10_Minimal_Line_Binding/app/triceConfig.h
similarity index 100%
rename from docs/scratchPad/TriceBind/PoC_bind/app/triceConfig.h
rename to experiments/TriceBind/10_Minimal_Line_Binding/app/triceConfig.h
diff --git a/docs/scratchPad/TriceBind/PoC_bind/cmd/trice/main.go b/experiments/TriceBind/10_Minimal_Line_Binding/cmd/trice/main.go
similarity index 100%
rename from docs/scratchPad/TriceBind/PoC_bind/cmd/trice/main.go
rename to experiments/TriceBind/10_Minimal_Line_Binding/cmd/trice/main.go
diff --git a/docs/scratchPad/TriceBind/PoC_bind/demo.sh b/experiments/TriceBind/10_Minimal_Line_Binding/demo.sh
similarity index 100%
rename from docs/scratchPad/TriceBind/PoC_bind/demo.sh
rename to experiments/TriceBind/10_Minimal_Line_Binding/demo.sh
diff --git a/docs/scratchPad/TriceBind/PoC_bind/go.mod b/experiments/TriceBind/10_Minimal_Line_Binding/go.mod
similarity index 100%
rename from docs/scratchPad/TriceBind/PoC_bind/go.mod
rename to experiments/TriceBind/10_Minimal_Line_Binding/go.mod
diff --git a/docs/scratchPad/TriceBind/PoC_bind/li.json b/experiments/TriceBind/10_Minimal_Line_Binding/li.json
similarity index 100%
rename from docs/scratchPad/TriceBind/PoC_bind/li.json
rename to experiments/TriceBind/10_Minimal_Line_Binding/li.json
diff --git a/docs/scratchPad/TriceBind/PoC_bind/til.json b/experiments/TriceBind/10_Minimal_Line_Binding/til.json
similarity index 100%
rename from docs/scratchPad/TriceBind/PoC_bind/til.json
rename to experiments/TriceBind/10_Minimal_Line_Binding/til.json
diff --git a/experiments/TriceBind/10_Minimal_Line_Binding/trice/src/trice.c b/experiments/TriceBind/10_Minimal_Line_Binding/trice/src/trice.c
new file mode 100644
index 000000000..45c8bf005
--- /dev/null
+++ b/experiments/TriceBind/10_Minimal_Line_Binding/trice/src/trice.c
@@ -0,0 +1,40 @@
+// SPDX-License-Identifier: MIT
+// Minimal host-file backend producing an unframed, little-endian Trice record.
+#include "trice.h"
+
+#include
+
+static FILE* triceOutput;
+
+int TriceInit(void) {
+ triceOutput = fopen(TRICE_OUTPUT_FILE, "wb");
+ return triceOutput == NULL ? -1 : 0;
+}
+
+void TriceClose(void) {
+ if (triceOutput != NULL) {
+ fclose(triceOutput);
+ triceOutput = NULL;
+ }
+}
+
+void trice32fn_0(uint16_t tid) {
+ // Equivalent to the current no-stamp/no-value trice32m_0 record:
+ // bits 15:14 = 01 (no stamp), bits 13:0 = ID,
+ // byte 2 = cycle marker, byte 3 = payload byte count (zero).
+ const uint32_t record =
+ ((uint32_t)0u << 24) |
+ ((uint32_t)TRICE_CYCLE << 16) |
+ (uint32_t)(0x4000u | (tid & 0x3FFFu));
+
+ const unsigned char bytes[4] = {
+ (unsigned char)(record),
+ (unsigned char)(record >> 8),
+ (unsigned char)(record >> 16),
+ (unsigned char)(record >> 24),
+ };
+
+ if (triceOutput != NULL) {
+ (void)fwrite(bytes, 1, sizeof bytes, triceOutput);
+ }
+}
diff --git a/docs/scratchPad/TriceBind/PoC_bind/trice/src/trice.h b/experiments/TriceBind/10_Minimal_Line_Binding/trice/src/trice.h
similarity index 100%
rename from docs/scratchPad/TriceBind/PoC_bind/trice/src/trice.h
rename to experiments/TriceBind/10_Minimal_Line_Binding/trice/src/trice.h
diff --git a/docs/scratchPad/TriceBind/PoC_bind/trice/src/triceOn.h b/experiments/TriceBind/10_Minimal_Line_Binding/trice/src/triceOn.h
similarity index 100%
rename from docs/scratchPad/TriceBind/PoC_bind/trice/src/triceOn.h
rename to experiments/TriceBind/10_Minimal_Line_Binding/trice/src/triceOn.h
diff --git a/experiments/TriceBind/20_Target_Library_Integration/.gitignore b/experiments/TriceBind/20_Target_Library_Integration/.gitignore
new file mode 100644
index 000000000..a796bba5e
--- /dev/null
+++ b/experiments/TriceBind/20_Target_Library_Integration/.gitignore
@@ -0,0 +1,2 @@
+/build/
+/log.bin
diff --git a/experiments/TriceBind/20_Target_Library_Integration/CMakeLists.txt b/experiments/TriceBind/20_Target_Library_Integration/CMakeLists.txt
new file mode 100644
index 000000000..ae8c974e1
--- /dev/null
+++ b/experiments/TriceBind/20_Target_Library_Integration/CMakeLists.txt
@@ -0,0 +1,47 @@
+cmake_minimum_required(VERSION 3.16)
+
+project(PoC_bind_v2
+ VERSION 1.0.0
+ DESCRIPTION "Compiler PoC for source-line Trice ID sidecars"
+ LANGUAGES C
+)
+
+# The example intentionally compiles the repository's target library directly.
+get_filename_component(TRICE_SOURCE_DIR
+ "${CMAKE_CURRENT_SOURCE_DIR}/../../../src"
+ ABSOLUTE
+)
+
+if(NOT EXISTS "${TRICE_SOURCE_DIR}/trice.h")
+ message(FATAL_ERROR
+ "Trice target sources are missing at ${TRICE_SOURCE_DIR}. "
+ "Keep this experiment below the repository experiments/TriceBind directory."
+ )
+endif()
+
+add_executable(PoC_bind_v2
+ main.c
+ device/dev.c
+ components/deep/device/dev.c
+ "${TRICE_SOURCE_DIR}/trice.c"
+ "${TRICE_SOURCE_DIR}/trice32.c"
+ "${TRICE_SOURCE_DIR}/trice64.c"
+ "${TRICE_SOURCE_DIR}/triceStackBuffer.c"
+ "${TRICE_SOURCE_DIR}/cobsEncode.c"
+ "${TRICE_SOURCE_DIR}/tcobsv1Encode.c"
+)
+
+target_compile_features(PoC_bind_v2 PRIVATE c_std_11)
+
+# The project directory must precede src so trice.h finds this triceConfig.h.
+target_include_directories(PoC_bind_v2 PRIVATE
+ "${CMAKE_CURRENT_SOURCE_DIR}"
+ "${CMAKE_CURRENT_SOURCE_DIR}/triceIDs"
+ "${TRICE_SOURCE_DIR}"
+)
+
+if(MSVC)
+ target_compile_options(PoC_bind_v2 PRIVATE /W4)
+else()
+ target_compile_options(PoC_bind_v2 PRIVATE -Wall -Wextra -Wpedantic)
+endif()
diff --git a/experiments/TriceBind/20_Target_Library_Integration/README.md b/experiments/TriceBind/20_Target_Library_Integration/README.md
new file mode 100644
index 000000000..b64bd0a90
--- /dev/null
+++ b/experiments/TriceBind/20_Target_Library_Integration/README.md
@@ -0,0 +1,99 @@
+# PoC_bind_v2
+
+Dieses Beispiel prüft, ob ID-freie `trice(...)`-Aufrufe über dateilokale
+Sidecar-Header ohne Compilerprobleme gegen die echte Target-Library in
+`../../../src` übersetzt werden können.
+
+## Geprüfte Fälle
+
+- `main.c` mit gewöhnlichen Logaufrufen und Aufrufen der Device-Funktionen,
+- `device/dev.c` und `device/dev.h`,
+- ein zweites gleichnamiges Paar unter `components/deep/device/`,
+- `static inline`-Funktionen in beiden Headern,
+- identische Formatstrings an unterschiedlichen Logstellen,
+- unterschiedliche Formatstrings in allen beteiligten Dateien,
+- Wiederherstellung des Source-Dateischlüssels nach Header-Includes.
+
+Identische Formate erhalten im PoC absichtlich getrennte IDs. Damit ist auch
+sichtbar, dass die Bindung die Logstelle und nicht nur den String identifiziert.
+
+## Build und Ausführung
+
+Vom Verzeichnis dieses Beispiels aus:
+
+```sh
+cmake -S . -B build
+cmake --build build
+./build/PoC_bind_v2
+```
+
+Das Programm legt `log.bin` bei jedem Start mit `fopen(..., "wb")` neu an.
+Bei Multi-Configuration-Generatoren liegt das Programm gegebenenfalls unter
+`build/Release/PoC_bind_v2` beziehungsweise `build/Debug/PoC_bind_v2`.
+
+Die TCOBS-gerahmten Daten lassen sich mit den lokalen Listen anzeigen:
+
+```sh
+tlog -p FILEBUFFER -args log.bin -pf TCOBS -prefix off -hs off \
+ -i til.json -li li.json
+```
+
+Alternativ kann das Repository-Kommando verwendet werden:
+
+```sh
+go run ../../../cmd/trice log -p FILEBUFFER -args log.bin -pf TCOBS \
+ -prefix off -hs off -i til.json -li li.json
+```
+
+## Simulierter Bind-Ablauf
+
+Eine echte `trice bind`-Implementierung existiert noch nicht. Für diesen PoC
+wurde das Ergebnis folgendermaßen simuliert:
+
+1. Die ID-freien Quellen und die markierten Sidecar-Includes wurden angelegt.
+2. `trice insert` wurde nur auf dieses Verzeichnis und die lokalen JSON-Dateien
+ angewendet:
+
+ ```sh
+ go run ../../../cmd/trice insert \
+ -src . -i til.json -li li.json -liRoot . \
+ -IDMin 1000 -IDMax 1999 -IDMethod upward
+ ```
+
+3. Die eingefügten IDs wurden in `triceIDs/*.h` als
+ `TRICE_ID__L` übernommen.
+4. Danach wurden die numerischen IDs wieder aus den Userquellen entfernt:
+
+ ```sh
+ go run ../../../cmd/trice clean \
+ -src . -i til.json -li li.json -liRoot .
+ ```
+
+Die eingecheckten Sidecars sind deshalb absichtlich simulierte Buildartefakte.
+Nach Änderungen an den Zeilennummern müssen die Sidecars auf dieselbe Weise
+erneuert werden.
+
+## Library-Erweiterung
+
+`TRICE_BIND` ist ausschließlich in dieser `triceConfig.h` aktiv. In diesem
+Modus setzt das lowercase Makro `trice(...)` intern eine ID aus
+`TRICE_FILE_KEY` und `__LINE__` vor die bestehende Argumentliste. Ohne
+`TRICE_BIND` bleibt die bestehende explizite Schreibweise unverändert.
+
+Der Bind-Modus behandelt den von `trice clean` auf `1` gesetzten Marker
+`TRICE_CLEAN` innerhalb der Library als aktiven Codezustand. Die ID-freien
+Aufrufe sind nach dem simulierten Clean-Lauf daher ausführbar und nicht wie
+gewöhnlicher bereinigter Sourcecode abgeschaltet.
+
+Jeder Sidecar wählt zunächst seinen Dateischlüssel:
+
+```c
+#undef TRICE_FILE_KEY
+#define TRICE_FILE_KEY F5050505050505050
+
+#define TRICE_ID_F5050505050505050_L42 1000u
+```
+
+Der Sidecar eines Headers ist während seiner `static inline`-Definitionen
+aktiv. Nach allen normalen Includes wählt der Sidecar der `.c`-Datei ihren
+eigenen Schlüssel erneut aus.
diff --git a/experiments/TriceBind/20_Target_Library_Integration/Trice_bind_User_Manual_MVP.md b/experiments/TriceBind/20_Target_Library_Integration/Trice_bind_User_Manual_MVP.md
new file mode 100644
index 000000000..c36f129ce
--- /dev/null
+++ b/experiments/TriceBind/20_Target_Library_Integration/Trice_bind_User_Manual_MVP.md
@@ -0,0 +1,194 @@
+# Trice Bind – MVP-Handbuchkopie für `PoC_bind_v2`
+
+Diese Kopie konkretisiert das allgemeine MVP-Konzept für den compilierbaren
+PoC in diesem Verzeichnis. Da `trice bind` noch nicht implementiert ist, sind
+die Sidecars hier aus einem lokalen `trice insert`/`trice clean`-Durchlauf
+abgeleitet.
+
+## Überblick
+
+`trice bind` soll Trice-Logstellen stabile IDs zuordnen, ohne numerische IDs in
+die Trice-Aufrufe des Users einzutragen. Das Werkzeug scannt die
+Projektquellen, aktualisiert `til.json` und `li.json` und erzeugt für jede
+Source- oder Headerdatei mit unterstützten Trice-Anweisungen einen temporären
+ID-Header.
+
+Der Compiler übersetzt weiterhin unmittelbar die Originalquellen. Es werden
+keine Schattenquellen verwendet, und ein nachfolgendes `trice clean` ist im
+späteren echten Bind-Ablauf nicht erforderlich.
+
+```c
+trice("msg:module initialized\n");
+```
+
+## Dauerhafte und generierte Dateien
+
+Dauerhaft sind:
+
+- die Userquellen,
+- `til.json` und `li.json`,
+- jede mit `// trice-bind` markierte Include-Zeile.
+
+Die generierten Sidecars sind normalerweise löschbare Buildartefakte. Im PoC
+liegen sie sichtbar unter `triceIDs/`, damit der simulierte Zustand direkt
+compilierbar und prüfbar ist.
+
+## Dateischlüssel und Sidecar-Namen
+
+Jede Datei mit Trice-Anweisungen erhält einen stabilen 64-Bit-Dateischlüssel.
+Er wird als Präprozessortoken mit führendem `F` dargestellt:
+
+```c
+#include "trice_main_c_F5050505050505050.h" // trice-bind
+```
+
+Der lesbare Basisname ist nur eine Hilfe. Der Schlüssel liefert die
+Dateiidentität und verhindert insbesondere Kollisionen zwischen den beiden
+Paaren namens `dev.c` und `dev.h`. Er wird nicht zum Target übertragen.
+
+## Inhalt eines Sidecars
+
+Ein Sidecar wählt den aktuellen Dateischlüssel und ordnet Sourcezeilen IDs zu:
+
+```c
+#undef TRICE_FILE_KEY
+#define TRICE_FILE_KEY F5050505050505050
+
+#define TRICE_ID_F5050505050505050_L42 1000u
+```
+
+Die Trice-Makros kombinieren `TRICE_FILE_KEY` mit `__LINE__`. Der Compiler
+sieht nach der Präprozessorauflösung eine gewöhnliche Integerkonstante. Ein
+Runtime-Lookup oder zusätzliches Target-Memory ist nicht erforderlich.
+
+## Position des Sidecar-Includes
+
+Für eine `.c`-Datei steht der Sidecar nach allen normalen Includes und vor der
+ersten direkten Trice-Anweisung:
+
+```c
+#include "dev.h"
+
+#include "trice_device_dev_c_F2020202020202020.h" // trice-bind
+
+void primaryDevRun(int value)
+{
+ trice("msg:source shared value=%d\n", value);
+}
+```
+
+Diese Reihenfolge ist erforderlich, weil ein zuvor eingebundener Header seinen
+eigenen Schlüssel ausgewählt haben kann.
+
+## Header und `static inline`
+
+Ein Header mit direkten Trice-Aufrufen besitzt einen eigenen Sidecar innerhalb
+seines Include-Guards:
+
+```c
+#include "trice.h"
+#include "trice_device_dev_h_F1010101010101010.h" // trice-bind
+
+static inline void primaryDevInline(int value)
+{
+ trice("msg:inline shared value=%d\n", value);
+}
+```
+
+Die Sidecar-Makros der Header bleiben im Präprozessornamensraum verfügbar.
+Unterschiedliche Dateischlüssel verhindern Namenskollisionen. Der nachfolgende
+Source-Sidecar setzt lediglich `TRICE_FILE_KEY` auf die einbindende `.c`-Datei
+zurück.
+
+## Identische Logzeilen
+
+Identische Formatstrings können in verschiedenen Dateien oder Zeilen
+auftreten. Der PoC vergibt dafür absichtlich verschiedene IDs:
+
+```c
+trice("msg:inline shared value=%d\n", value);
+```
+
+Diese Anweisung steht in beiden `dev.h`. Dasselbe gilt für
+`msg:source shared value=%d` in beiden `dev.c`. Entscheidend ist die Bindung an
+Datei und Zeile, nicht die textuelle Gleichheit des Formats.
+
+## Vorgesehener echter Bind-Ablauf
+
+Der spätere normale Ablauf ist:
+
+```text
+trice bind
+Build
+```
+
+`trice bind` soll dabei:
+
+1. konfigurierte C-, C++- und Headerdateien scannen,
+2. bestehende IDs aus `til.json` und `li.json` wiederverwenden,
+3. neuen Logstellen stabile IDs geben,
+4. fehlende Dateischlüssel und markierte Includes erzeugen,
+5. Sidecars in das konfigurierte Buildverzeichnis schreiben,
+6. Schlüssel, Include-Positionen und Syntax prüfen,
+7. unveränderte generierte Dateien nicht neu schreiben.
+
+## Simulierter Ablauf dieses PoC
+
+Bis das Kommando existiert, wurde nur für dieses Verzeichnis ausgeführt:
+
+```sh
+go run ../../../cmd/trice insert \
+ -src . -i til.json -li li.json -liRoot . \
+ -IDMin 1000 -IDMax 1999 -IDMethod upward
+```
+
+Die eingefügten IDs wurden in die Sidecars übertragen. Anschließend stellte
+folgender Lauf die ID-freien Userquellen wieder her:
+
+```sh
+go run ../../../cmd/trice clean \
+ -src . -i til.json -li li.json -liRoot .
+```
+
+Dieser Hilfsablauf ist nicht das Zielverhalten von `trice bind`, erzeugt aber
+dieselben compilerrelevanten Makrobedingungen.
+
+`trice clean` setzt den Konfigurationsmarker `TRICE_CLEAN` auf `1`. Für
+`TRICE_BIND == 1` behandelt die Target-Library diesen Marker intern trotzdem
+als aktiven Codezustand, weil die IDs aus Sidecars kommen. Ohne Bind-Modus
+behält `TRICE_CLEAN` seine bisherige abschaltende Wirkung.
+
+## MVP-Einschränkungen
+
+- Pro physischer Sourcezeile ist nur eine Trice-Anweisung erlaubt.
+- Trice-Aufrufe in Präprozessormakrodefinitionen werden nicht unterstützt.
+- Formatstrings müssen statisch im Source erkennbar sein.
+- Ein Sidecar muss vor der ersten direkten Logstelle seiner Datei aktiv sein.
+- Ein späteres normales Include darf den für die Source benötigten Schlüssel
+ nicht unbemerkt ersetzen.
+
+Der Binder muss bei fehlenden, doppelten oder fremden Sidecars, duplizierten
+Dateischlüsseln und widersprüchlichen JSON-Zuordnungen mit einer konkreten
+Datei- und Positionsdiagnose abbrechen.
+
+## Build und Logausgabe
+
+Das CMake-Projekt bindet `../../../src` direkt ein. Die lokale `triceConfig.h`
+wählt Stackbuffer, direkte Ausgabe und TCOBS-Framing. `main.c` implementiert
+den synchron aufgerufenen Auxiliary-Writer und öffnet `log.bin` mit Modus
+`wb`, sodass jeder Programmlauf eine neue Datei erzeugt.
+
+```sh
+cmake -S . -B build
+cmake --build build
+./build/PoC_bind_v2
+tlog -p FILEBUFFER -args log.bin -pf TCOBS -prefix off -hs off \
+ -i til.json -li li.json
+```
+
+## Ergebnis
+
+Der Usercode bleibt ID-frei. Alle fünf Dateien mit Logstellen besitzen einen
+eigenen Schlüssel und Sidecar. Der Compiler löst jede Kombination aus Datei
+und Zeile zu einer konstanten Trice-ID auf; die bestehende Binärcodierung und
+der Decoder bleiben unverändert.
diff --git a/experiments/TriceBind/20_Target_Library_Integration/components/deep/device/dev.c b/experiments/TriceBind/20_Target_Library_Integration/components/deep/device/dev.c
new file mode 100644
index 000000000..1fedfb979
--- /dev/null
+++ b/experiments/TriceBind/20_Target_Library_Integration/components/deep/device/dev.c
@@ -0,0 +1,14 @@
+// SPDX-License-Identifier: MIT
+
+//! \file dev.c
+//! \brief Second source-level logging example at a deeper path.
+
+#include "dev.h"
+
+#include "trice_dev_c_F4040404040404040.h" // trice-bind
+
+// secondaryDevRun repeats one format and adds a distinct deep-source record.
+void secondaryDevRun(int value) {
+ trice("msg:source shared value=%d\n", value);
+ trice("msg:source secondary value=%d\n", value);
+}
diff --git a/experiments/TriceBind/20_Target_Library_Integration/components/deep/device/dev.h b/experiments/TriceBind/20_Target_Library_Integration/components/deep/device/dev.h
new file mode 100644
index 000000000..984db004e
--- /dev/null
+++ b/experiments/TriceBind/20_Target_Library_Integration/components/deep/device/dev.h
@@ -0,0 +1,22 @@
+// SPDX-License-Identifier: MIT
+
+//! \file dev.h
+//! \brief Second header-level static inline logging example at a deeper path.
+
+#ifndef POC_BIND_V2_COMPONENTS_DEEP_DEVICE_DEV_H_
+#define POC_BIND_V2_COMPONENTS_DEEP_DEVICE_DEV_H_
+
+#include "trice.h"
+
+#include "trice_dev_h_F3030303030303030.h" // trice-bind
+
+// secondaryDevInline repeats one format and adds a distinct header log record.
+static inline void secondaryDevInline(int value) {
+ trice("msg:inline shared value=%d\n", value);
+ trice("msg:inline secondary value=%d\n", value);
+}
+
+// secondaryDevRun emits records from the matching deep source file.
+void secondaryDevRun(int value);
+
+#endif // POC_BIND_V2_COMPONENTS_DEEP_DEVICE_DEV_H_
diff --git a/experiments/TriceBind/20_Target_Library_Integration/device/dev.c b/experiments/TriceBind/20_Target_Library_Integration/device/dev.c
new file mode 100644
index 000000000..cb8fa542d
--- /dev/null
+++ b/experiments/TriceBind/20_Target_Library_Integration/device/dev.c
@@ -0,0 +1,14 @@
+// SPDX-License-Identifier: MIT
+
+//! \file dev.c
+//! \brief First source-level logging example.
+
+#include "dev.h"
+
+#include "trice_device_dev_c_F2020202020202020.h" // trice-bind
+
+// primaryDevRun demonstrates ordinary function logging in the shallow folder.
+void primaryDevRun(int value) {
+ trice("msg:source shared value=%d\n", value);
+ trice("msg:source primary value=%d\n", value);
+}
diff --git a/experiments/TriceBind/20_Target_Library_Integration/device/dev.h b/experiments/TriceBind/20_Target_Library_Integration/device/dev.h
new file mode 100644
index 000000000..818c57c16
--- /dev/null
+++ b/experiments/TriceBind/20_Target_Library_Integration/device/dev.h
@@ -0,0 +1,22 @@
+// SPDX-License-Identifier: MIT
+
+//! \file dev.h
+//! \brief First header-level static inline logging example.
+
+#ifndef POC_BIND_V2_DEVICE_DEV_H_
+#define POC_BIND_V2_DEVICE_DEV_H_
+
+#include "trice.h"
+
+#include "trice_device_dev_h_F1010101010101010.h" // trice-bind
+
+// primaryDevInline emits one shared and one file-specific header log record.
+static inline void primaryDevInline(int value) {
+ trice("msg:inline shared value=%d\n", value);
+ trice("msg:inline primary value=%d\n", value);
+}
+
+// primaryDevRun emits records from the matching source file.
+void primaryDevRun(int value);
+
+#endif // POC_BIND_V2_DEVICE_DEV_H_
diff --git a/experiments/TriceBind/20_Target_Library_Integration/li.json b/experiments/TriceBind/20_Target_Library_Integration/li.json
new file mode 100644
index 000000000..4187053d3
--- /dev/null
+++ b/experiments/TriceBind/20_Target_Library_Integration/li.json
@@ -0,0 +1,42 @@
+{
+ "1000": {
+ "File": "main.c",
+ "Line": 42
+ },
+ "1001": {
+ "File": "components/deep/device/dev.h",
+ "Line": 16
+ },
+ "1002": {
+ "File": "device/dev.c",
+ "Line": 13
+ },
+ "1003": {
+ "File": "device/dev.c",
+ "Line": 14
+ },
+ "1004": {
+ "File": "device/dev.h",
+ "Line": 16
+ },
+ "1005": {
+ "File": "main.c",
+ "Line": 47
+ },
+ "1006": {
+ "File": "components/deep/device/dev.c",
+ "Line": 13
+ },
+ "1007": {
+ "File": "components/deep/device/dev.c",
+ "Line": 14
+ },
+ "1008": {
+ "File": "components/deep/device/dev.h",
+ "Line": 17
+ },
+ "1009": {
+ "File": "device/dev.h",
+ "Line": 17
+ }
+}
\ No newline at end of file
diff --git a/experiments/TriceBind/20_Target_Library_Integration/main.c b/experiments/TriceBind/20_Target_Library_Integration/main.c
new file mode 100644
index 000000000..d4587f27d
--- /dev/null
+++ b/experiments/TriceBind/20_Target_Library_Integration/main.c
@@ -0,0 +1,58 @@
+// SPDX-License-Identifier: MIT
+
+//! \file main.c
+//! \brief Host entry point writing bound Trice records into log.bin.
+
+#include
+#include
+#include
+
+#include "components/deep/device/dev.h"
+#include "device/dev.h"
+#include "trice.h"
+
+#include "trice_main_c_F5050505050505050.h" // trice-bind
+
+// logFile owns the binary output stream while the synchronous demo is active.
+static FILE* logFile;
+// logWriteFailed remembers callback failures because the Trice hook returns void.
+static bool logWriteFailed;
+
+// TriceNonBlockingDirectWrite8Auxiliary appends one framed record to log.bin.
+void TriceNonBlockingDirectWrite8Auxiliary(const uint8_t* data, size_t length) {
+ if (logFile == NULL || logWriteFailed) {
+ return;
+ }
+ if (fwrite(data, 1, length, logFile) != length) {
+ logWriteFailed = true;
+ }
+}
+
+// main recreates log.bin, exercises all translation units, and reports I/O errors.
+int main(void) {
+ logFile = fopen("log.bin", "wb");
+ if (logFile == NULL) {
+ perror("log.bin");
+ return 1;
+ }
+
+ TriceInit();
+ trice("msg:main started\n");
+ primaryDevInline(11);
+ secondaryDevInline(22);
+ primaryDevRun(33);
+ secondaryDevRun(44);
+ trice("msg:main completed value=%d\n", 55);
+
+ if (fclose(logFile) != 0) {
+ perror("log.bin");
+ return 1;
+ }
+ logFile = NULL;
+
+ if (logWriteFailed) {
+ fputs("Could not write all Trice records to log.bin\n", stderr);
+ return 1;
+ }
+ return 0;
+}
diff --git a/experiments/TriceBind/20_Target_Library_Integration/til.json b/experiments/TriceBind/20_Target_Library_Integration/til.json
new file mode 100644
index 000000000..1141426e8
--- /dev/null
+++ b/experiments/TriceBind/20_Target_Library_Integration/til.json
@@ -0,0 +1,42 @@
+{
+ "1000": {
+ "Type": "trice",
+ "Strg": "msg:main started\\n"
+ },
+ "1001": {
+ "Type": "trice",
+ "Strg": "msg:inline shared value=%d\\n"
+ },
+ "1002": {
+ "Type": "trice",
+ "Strg": "msg:source shared value=%d\\n"
+ },
+ "1003": {
+ "Type": "trice",
+ "Strg": "msg:source primary value=%d\\n"
+ },
+ "1004": {
+ "Type": "trice",
+ "Strg": "msg:inline shared value=%d\\n"
+ },
+ "1005": {
+ "Type": "trice",
+ "Strg": "msg:main completed value=%d\\n"
+ },
+ "1006": {
+ "Type": "trice",
+ "Strg": "msg:source shared value=%d\\n"
+ },
+ "1007": {
+ "Type": "trice",
+ "Strg": "msg:source secondary value=%d\\n"
+ },
+ "1008": {
+ "Type": "trice",
+ "Strg": "msg:inline secondary value=%d\\n"
+ },
+ "1009": {
+ "Type": "trice",
+ "Strg": "msg:inline primary value=%d\\n"
+ }
+}
\ No newline at end of file
diff --git a/experiments/TriceBind/20_Target_Library_Integration/triceConfig.h b/experiments/TriceBind/20_Target_Library_Integration/triceConfig.h
new file mode 100644
index 000000000..0a6f9a6e0
--- /dev/null
+++ b/experiments/TriceBind/20_Target_Library_Integration/triceConfig.h
@@ -0,0 +1,32 @@
+// SPDX-License-Identifier: MIT
+
+//! \file triceConfig.h
+//! \brief Host configuration for the sidecar binding compiler PoC.
+
+#ifndef TRICE_CONFIG_POC_BIND_V2_H_
+#define TRICE_CONFIG_POC_BIND_V2_H_
+
+// Keep this marker explicit so trice insert and trice clean can toggle it.
+#define TRICE_CLEAN 1
+
+// Enable ID-free lowercase trice(...) calls backed by generated sidecars.
+#define TRICE_BIND 1
+
+// Emit each record synchronously from a small stack buffer.
+#define TRICE_BUFFER TRICE_STACK_BUFFER
+#define TRICE_DIRECT_OUTPUT 1
+#define TRICE_DEFERRED_OUTPUT 0
+#define TRICE_DIRECT_AUXILIARY8 1
+
+// TCOBS framing lets FILEBUFFER recover record boundaries from log.bin.
+#define TRICE_DIRECT_OUT_FRAMING TRICE_FRAMING_TCOBS
+
+// The single-threaded host PoC needs no critical-section implementation.
+#define TRICE_ENTER_CRITICAL_SECTION {
+#define TRICE_LEAVE_CRITICAL_SECTION }
+
+// Disable target diagnostics and use the static no-cycle-counter marker.
+#define TRICE_DIAGNOSTICS 0
+#define TRICE_CYCLE_COUNTER 0
+
+#endif // TRICE_CONFIG_POC_BIND_V2_H_
diff --git a/experiments/TriceBind/20_Target_Library_Integration/triceIDs/trice_dev_c_F4040404040404040.h b/experiments/TriceBind/20_Target_Library_Integration/triceIDs/trice_dev_c_F4040404040404040.h
new file mode 100644
index 000000000..4cda8b669
--- /dev/null
+++ b/experiments/TriceBind/20_Target_Library_Integration/triceIDs/trice_dev_c_F4040404040404040.h
@@ -0,0 +1,8 @@
+// SPDX-License-Identifier: MIT
+// Generated bind PoC sidecar. Do not edit.
+
+#undef TRICE_FILE_KEY
+#define TRICE_FILE_KEY F4040404040404040
+
+#define TRICE_ID_F4040404040404040_L13 1006u // msg:source shared value=%d
+#define TRICE_ID_F4040404040404040_L14 1007u // msg:source secondary value=%d
diff --git a/experiments/TriceBind/20_Target_Library_Integration/triceIDs/trice_dev_h_F3030303030303030.h b/experiments/TriceBind/20_Target_Library_Integration/triceIDs/trice_dev_h_F3030303030303030.h
new file mode 100644
index 000000000..92f7c5f90
--- /dev/null
+++ b/experiments/TriceBind/20_Target_Library_Integration/triceIDs/trice_dev_h_F3030303030303030.h
@@ -0,0 +1,8 @@
+// SPDX-License-Identifier: MIT
+// Generated bind PoC sidecar. Do not edit.
+
+#undef TRICE_FILE_KEY
+#define TRICE_FILE_KEY F3030303030303030
+
+#define TRICE_ID_F3030303030303030_L16 1001u // msg:inline shared value=%d
+#define TRICE_ID_F3030303030303030_L17 1008u // msg:inline secondary value=%d
diff --git a/experiments/TriceBind/20_Target_Library_Integration/triceIDs/trice_device_dev_c_F2020202020202020.h b/experiments/TriceBind/20_Target_Library_Integration/triceIDs/trice_device_dev_c_F2020202020202020.h
new file mode 100644
index 000000000..394830fe1
--- /dev/null
+++ b/experiments/TriceBind/20_Target_Library_Integration/triceIDs/trice_device_dev_c_F2020202020202020.h
@@ -0,0 +1,8 @@
+// SPDX-License-Identifier: MIT
+// Generated bind PoC sidecar. Do not edit.
+
+#undef TRICE_FILE_KEY
+#define TRICE_FILE_KEY F2020202020202020
+
+#define TRICE_ID_F2020202020202020_L13 1002u // msg:source shared value=%d
+#define TRICE_ID_F2020202020202020_L14 1003u // msg:source primary value=%d
diff --git a/experiments/TriceBind/20_Target_Library_Integration/triceIDs/trice_device_dev_h_F1010101010101010.h b/experiments/TriceBind/20_Target_Library_Integration/triceIDs/trice_device_dev_h_F1010101010101010.h
new file mode 100644
index 000000000..08c71481f
--- /dev/null
+++ b/experiments/TriceBind/20_Target_Library_Integration/triceIDs/trice_device_dev_h_F1010101010101010.h
@@ -0,0 +1,8 @@
+// SPDX-License-Identifier: MIT
+// Generated bind PoC sidecar. Do not edit.
+
+#undef TRICE_FILE_KEY
+#define TRICE_FILE_KEY F1010101010101010
+
+#define TRICE_ID_F1010101010101010_L16 1004u // msg:inline shared value=%d
+#define TRICE_ID_F1010101010101010_L17 1009u // msg:inline primary value=%d
diff --git a/experiments/TriceBind/20_Target_Library_Integration/triceIDs/trice_main_c_F5050505050505050.h b/experiments/TriceBind/20_Target_Library_Integration/triceIDs/trice_main_c_F5050505050505050.h
new file mode 100644
index 000000000..739f3e1e4
--- /dev/null
+++ b/experiments/TriceBind/20_Target_Library_Integration/triceIDs/trice_main_c_F5050505050505050.h
@@ -0,0 +1,8 @@
+// SPDX-License-Identifier: MIT
+// Generated bind PoC sidecar. Do not edit.
+
+#undef TRICE_FILE_KEY
+#define TRICE_FILE_KEY F5050505050505050
+
+#define TRICE_ID_F5050505050505050_L42 1000u // msg:main started
+#define TRICE_ID_F5050505050505050_L47 1005u // msg:main completed value=%d
diff --git a/experiments/TriceBind/30_Preprocessor_Verification/10_Local_Dispatch/expected.txt b/experiments/TriceBind/30_Preprocessor_Verification/10_Local_Dispatch/expected.txt
new file mode 100644
index 000000000..c1c828984
--- /dev/null
+++ b/experiments/TriceBind/30_Preprocessor_Verification/10_Local_Dispatch/expected.txt
@@ -0,0 +1,3 @@
+route=INSERT id=1001 text=before sidecar
+route=BIND id=2002 text=with sidecar
+route=INSERT id=3003 text=after undef
diff --git a/experiments/TriceBind/30_Preprocessor_Verification/10_Local_Dispatch/main.c b/experiments/TriceBind/30_Preprocessor_Verification/10_Local_Dispatch/main.c
new file mode 100644
index 000000000..9f40e5b4d
--- /dev/null
+++ b/experiments/TriceBind/30_Preprocessor_Verification/10_Local_Dispatch/main.c
@@ -0,0 +1,18 @@
+#include "trice_sim.h"
+
+int main(void) {
+ /* No sidecar is active: the existing ID is handled by INSERT. */
+ trice(iD(1001u), "before sidecar");
+
+/* The sidecar is intentionally included after trice_sim.h. */
+#include "trice_module_c_K73A915E9C4021B8.h"
+
+ /* Route selection is evaluated now, not when trice_sim.h was read. */
+ trice("with sidecar");
+
+/* A rare hybrid source can explicitly return to INSERT routing. */
+#undef TRICE_BIND_FILE_KEY
+ trice(iD(3003u), "after undef");
+
+ return 0;
+}
diff --git a/experiments/TriceBind/30_Preprocessor_Verification/10_Local_Dispatch/run.sh b/experiments/TriceBind/30_Preprocessor_Verification/10_Local_Dispatch/run.sh
new file mode 100755
index 000000000..510fd9810
--- /dev/null
+++ b/experiments/TriceBind/30_Preprocessor_Verification/10_Local_Dispatch/run.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+set -eu
+
+CC=${CC:-cc}
+OUT=${TMPDIR:-/tmp}/trice_bind_poc1_$$
+PP=${TMPDIR:-/tmp}/trice_bind_poc1_$$.i
+ACTUAL=${TMPDIR:-/tmp}/trice_bind_poc1_$$.out
+trap 'rm -f "$OUT" "$PP" "$ACTUAL"' EXIT HUP INT TERM
+
+"$CC" -std=c11 -Wall -Wextra -Werror -pedantic main.c -o "$OUT"
+"$CC" -std=c11 -E -P main.c >"$PP"
+"$OUT" >"$ACTUAL"
+diff -u expected.txt "$ACTUAL"
+
+printf '%s\n' 'PoC 1 passed.'
+printf '%s\n' 'Relevant preprocessor result:'
+grep -E 'poc1_emit\("(INSERT|BIND)"' "$PP" || true
diff --git a/experiments/TriceBind/30_Preprocessor_Verification/10_Local_Dispatch/trice_module_c_K73A915E9C4021B8.h b/experiments/TriceBind/30_Preprocessor_Verification/10_Local_Dispatch/trice_module_c_K73A915E9C4021B8.h
new file mode 100644
index 000000000..ab55eaa7f
--- /dev/null
+++ b/experiments/TriceBind/30_Preprocessor_Verification/10_Local_Dispatch/trice_module_c_K73A915E9C4021B8.h
@@ -0,0 +1,7 @@
+/// \file trice_module_c_K73A915E9C4021B8.h
+/// \brief Generated test sidecar for PoC 1.
+
+#undef TRICE_BIND_FILE_KEY
+#define TRICE_BIND_FILE_KEY K73A915E9C4021B8
+#define TRICE_BIND_ROUTE_K73A915E9C4021B8 BIND
+#define TRICE_BIND_TID_HERE() iD(2002u)
diff --git a/experiments/TriceBind/30_Preprocessor_Verification/10_Local_Dispatch/trice_sim.h b/experiments/TriceBind/30_Preprocessor_Verification/10_Local_Dispatch/trice_sim.h
new file mode 100644
index 000000000..bb68fa188
--- /dev/null
+++ b/experiments/TriceBind/30_Preprocessor_Verification/10_Local_Dispatch/trice_sim.h
@@ -0,0 +1,37 @@
+#ifndef POC1_TRICE_SIM_H
+#define POC1_TRICE_SIM_H
+
+#include
+#include
+#include
+
+/* Minimal TID encoding used only by this PoC. */
+#define iD(n) (0xA0000000u | (uint32_t)(n))
+
+/*
+ * Expansion-time route selection.
+ * If TRICE_BIND_FILE_KEY is not defined, it remains an identifier token.
+ * The fallback token maps to INSERT.
+ */
+#define TRICE_BIND_ROUTE_TRICE_BIND_FILE_KEY INSERT
+#define TRICE_BIND_ROUTE_I(key) TRICE_BIND_ROUTE_##key
+#define TRICE_BIND_ROUTE(key) TRICE_BIND_ROUTE_I(key)
+
+#define TRICE_DISPATCH_I(route, ...) TRICE_ROUTE_##route(__VA_ARGS__)
+#define TRICE_DISPATCH(route, ...) TRICE_DISPATCH_I(route, __VA_ARGS__)
+
+#define trice(...) TRICE_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), __VA_ARGS__)
+
+#define TRICE_ROUTE_INSERT(tid, ...) poc1_emit("INSERT", (tid), __VA_ARGS__)
+#define TRICE_ROUTE_BIND(...) poc1_emit("BIND", TRICE_BIND_TID_HERE(), __VA_ARGS__)
+
+static inline void poc1_emit(const char* route, uint32_t tid, const char* format, ...) {
+ va_list ap;
+ printf("route=%s id=%u text=", route, (unsigned)(tid & 0x00FFFFFFu));
+ va_start(ap, format);
+ vprintf(format, ap);
+ va_end(ap);
+ putchar('\n');
+}
+
+#endif
diff --git a/experiments/TriceBind/30_Preprocessor_Verification/20_Site_Descriptor/expected.txt b/experiments/TriceBind/30_Preprocessor_Verification/20_Site_Descriptor/expected.txt
new file mode 100644
index 000000000..b7c12e89a
--- /dev/null
+++ b/experiments/TriceBind/30_Preprocessor_Verification/20_Site_Descriptor/expected.txt
@@ -0,0 +1,6 @@
+mode=AUTO stamp=Id id=12345 text=Hello
+mode=REPLACE stamp=id id=12346 text=world
+mode=REPLACE stamp=Id id=12347 text=stamp16
+mode=REPLACE stamp=ID id=12348 text=stamp32
+mode=AUTO stamp=iD id=12349 text=value=7
+mode=REPLACE stamp=ID id=12350 text=value=8
diff --git a/experiments/TriceBind/30_Preprocessor_Verification/20_Site_Descriptor/main.c b/experiments/TriceBind/30_Preprocessor_Verification/20_Site_Descriptor/main.c
new file mode 100644
index 000000000..a9df53820
--- /dev/null
+++ b/experiments/TriceBind/30_Preprocessor_Verification/20_Site_Descriptor/main.c
@@ -0,0 +1,19 @@
+#include "trice_sim.h"
+#include "trice_module_c_K73A915E9C4021B8.h"
+
+int main(void) {
+#line 100 "module.c"
+ TRICE("Hello");
+#line 101 "module.c"
+ TRICE(id(0), "world");
+#line 102 "module.c"
+ TRICE(Id(0), "stamp16");
+#line 103 "module.c"
+ TRICE(ID(0), "stamp32");
+#line 104 "module.c"
+ trice("value=%d", 7);
+#line 105 "module.c"
+ TRICE(ID(0), "value=%d", 8);
+#line 200 "main.c"
+ return 0;
+}
diff --git a/experiments/TriceBind/30_Preprocessor_Verification/20_Site_Descriptor/run.sh b/experiments/TriceBind/30_Preprocessor_Verification/20_Site_Descriptor/run.sh
new file mode 100755
index 000000000..b9418eecc
--- /dev/null
+++ b/experiments/TriceBind/30_Preprocessor_Verification/20_Site_Descriptor/run.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+set -eu
+
+CC=${CC:-cc}
+OUT=${TMPDIR:-/tmp}/trice_bind_poc2_$$
+PP=${TMPDIR:-/tmp}/trice_bind_poc2_$$.i
+ACTUAL=${TMPDIR:-/tmp}/trice_bind_poc2_$$.out
+trap 'rm -f "$OUT" "$PP" "$ACTUAL"' EXIT HUP INT TERM
+
+"$CC" -std=c11 -Wall -Wextra -Werror -pedantic main.c -o "$OUT"
+"$CC" -std=c11 -E -P main.c >"$PP"
+"$OUT" >"$ACTUAL"
+diff -u expected.txt "$ACTUAL"
+
+printf '%s\n' 'PoC 2 passed.'
+printf '%s\n' 'Relevant preprocessor result:'
+grep -E 'poc2_emit\("(AUTO|REPLACE)"' "$PP" || true
diff --git a/experiments/TriceBind/30_Preprocessor_Verification/20_Site_Descriptor/trice_module_c_K73A915E9C4021B8.h b/experiments/TriceBind/30_Preprocessor_Verification/20_Site_Descriptor/trice_module_c_K73A915E9C4021B8.h
new file mode 100644
index 000000000..6261c4b4f
--- /dev/null
+++ b/experiments/TriceBind/30_Preprocessor_Verification/20_Site_Descriptor/trice_module_c_K73A915E9C4021B8.h
@@ -0,0 +1,13 @@
+/// \file trice_module_c_K73A915E9C4021B8.h
+/// \brief Generated test sidecar for PoC 2. Do not edit.
+
+#undef TRICE_BIND_FILE_KEY
+#define TRICE_BIND_FILE_KEY K73A915E9C4021B8
+
+// -defaultStampSize 16
+#define TRICE_BIND_SITE_K73A915E9C4021B8_L100 TRICE_BIND_AUTO, Id(12345u) // TRICE("Hello");
+#define TRICE_BIND_SITE_K73A915E9C4021B8_L101 TRICE_BIND_REPLACE, id(12346u) // TRICE(id(0), "world");
+#define TRICE_BIND_SITE_K73A915E9C4021B8_L102 TRICE_BIND_REPLACE, Id(12347u) // TRICE(Id(0), "stamp16");
+#define TRICE_BIND_SITE_K73A915E9C4021B8_L103 TRICE_BIND_REPLACE, ID(12348u) // TRICE(ID(0), "stamp32");
+#define TRICE_BIND_SITE_K73A915E9C4021B8_L104 TRICE_BIND_AUTO, iD(12349u) // trice("value=%d", 7);
+#define TRICE_BIND_SITE_K73A915E9C4021B8_L105 TRICE_BIND_REPLACE, ID(12350u) // TRICE(ID(0), "value=%d", 8);
diff --git a/experiments/TriceBind/30_Preprocessor_Verification/20_Site_Descriptor/trice_sim.h b/experiments/TriceBind/30_Preprocessor_Verification/20_Site_Descriptor/trice_sim.h
new file mode 100644
index 000000000..520d55194
--- /dev/null
+++ b/experiments/TriceBind/30_Preprocessor_Verification/20_Site_Descriptor/trice_sim.h
@@ -0,0 +1,56 @@
+#ifndef POC2_TRICE_SIM_H
+#define POC2_TRICE_SIM_H
+
+#include
+#include
+#include
+
+/* Minimal TID encoding used only by this PoC. */
+#define iD(n) (0xA0000000u | (uint32_t)(n))
+#define id(n) (0x00000000u | (uint32_t)(n))
+#define Id(n) (0x10000000u | (uint32_t)(n))
+#define ID(n) (0x20000000u | (uint32_t)(n))
+
+#define TRICE_BIND_SITE_I(key, line) TRICE_BIND_SITE_##key##_L##line
+#define TRICE_BIND_SITE(key, line) TRICE_BIND_SITE_I(key, line)
+#define TRICE_BIND_SITE_HERE() TRICE_BIND_SITE(TRICE_BIND_FILE_KEY, __LINE__)
+
+/*
+ * TRICE_BIND_SITE_HERE() expands to two comma-separated tokens:
+ * processing-mode, complete-TID-expression
+ * The extra macro layer makes those tokens arguments of TRICE_BIND_APPLY_I.
+ */
+#define TRICE_BIND_APPLY(...) TRICE_BIND_APPLY_I(__VA_ARGS__)
+#define TRICE_BIND_APPLY_I(mode, tid, ...) mode(tid, __VA_ARGS__)
+
+#define TRICE_BIND_AUTO(tid, ...) poc2_emit("AUTO", (tid), __VA_ARGS__)
+#define TRICE_BIND_REPLACE(tid, ignoredTid, ...) poc2_emit("REPLACE", (tid), __VA_ARGS__)
+
+#define TRICE(...) TRICE_BIND_APPLY(TRICE_BIND_SITE_HERE(), __VA_ARGS__)
+#define trice(...) TRICE_BIND_APPLY(TRICE_BIND_SITE_HERE(), __VA_ARGS__)
+
+static inline const char* poc2_stamp_name(uint32_t tid) {
+ switch (tid & 0xF0000000u) {
+ case 0x00000000u:
+ return "id";
+ case 0x10000000u:
+ return "Id";
+ case 0x20000000u:
+ return "ID";
+ case 0xA0000000u:
+ return "iD";
+ default:
+ return "unknown";
+ }
+}
+
+static inline void poc2_emit(const char* mode, uint32_t tid, const char* format, ...) {
+ va_list ap;
+ printf("mode=%s stamp=%s id=%u text=", mode, poc2_stamp_name(tid), (unsigned)(tid & 0x00FFFFFFu));
+ va_start(ap, format);
+ vprintf(format, ap);
+ va_end(ap);
+ putchar('\n');
+}
+
+#endif
diff --git a/experiments/TriceBind/30_Preprocessor_Verification/README.md b/experiments/TriceBind/30_Preprocessor_Verification/README.md
new file mode 100644
index 000000000..0151879af
--- /dev/null
+++ b/experiments/TriceBind/30_Preprocessor_Verification/README.md
@@ -0,0 +1,76 @@
+# Trice Bind – Verifikations-PoCs
+
+Dieses Paket enthält zwei voneinander unabhängige Präprozessor-PoCs für die beiden vor der Bind-Spezifikation V4 zu verifizierenden Kernmechanismen.
+
+## Inhalt
+
+### `10_Local_Dispatch`
+
+Verifiziert den lokalen Insert-/Bind-Dispatch über `TRICE_BIND_FILE_KEY`.
+
+Nachgewiesen wird:
+
+- `trice.h` kann vor dem Sidecar eingelesen werden.
+- Ohne definierten `TRICE_BIND_FILE_KEY` wird der bestehende Inserted-Pfad gewählt.
+- Ein später inkludierter Sidecar schaltet die nachfolgenden Aufrufe bei der Makroexpansion auf den Bind-Pfad.
+- `#undef TRICE_BIND_FILE_KEY` schaltet in einem seltenen Hybridfall wieder auf den Inserted-Pfad zurück.
+- Ein beim Einlesen von `trice.h` ausgewertetes `#ifdef TRICE_BIND_FILE_KEY` ist nicht erforderlich.
+
+Der PoC verwendet einen tokenbasierten Expansion-Time-Dispatch. Die Laufzeitausgabe und die Präprozessorausgabe werden geprüft.
+
+### `20_Site_Descriptor`
+
+Verifiziert einen einzigen einzeiligen Site-Deskriptor pro Trice-Stelle.
+
+Nachgewiesen wird:
+
+- ID-freier Uppercase-Aufruf mit Default-Stamp:
+ `TRICE("Hello")`
+- Null-Platzhalter mit allen drei Legacy-Stampformen:
+ `id(0)`, `Id(0)` und `ID(0)`
+- ID-freier Lowercase-Aufruf mit `iD(...)`
+- Aufrufe ohne und mit Datenargumenten
+- Ersetzen eines vorhandenen Null-Platzhalters ohne zweite `HAS_TID`-Definition
+
+Ein Sidecar-Eintrag hat die Form:
+
+```c
+#define TRICE_BIND_SITE_K73A915E9C4021B8_L101 TRICE_BIND_REPLACE, id(12346u) // TRICE(id(0), "world");
+```
+
+Der Deskriptor enthält damit in genau einer Zeile:
+
+1. `TRICE_BIND_AUTO` oder `TRICE_BIND_REPLACE`,
+2. den vollständigen TID-Ausdruck.
+
+## Ausführen
+
+Alle verfügbaren GCC-/Clang-C- und C++-Frontends prüfen:
+
+```sh
+./run_all.sh
+```
+
+Einen einzelnen PoC mit dem standardmäßigen C-Compiler prüfen:
+
+```sh
+cd 10_Local_Dispatch
+./run.sh
+```
+
+oder:
+
+```sh
+cd 20_Site_Descriptor
+./run.sh
+```
+
+Ein bestimmter C-Compiler kann über `CC` gewählt werden:
+
+```sh
+CC=clang ./run.sh
+```
+
+## Abgrenzung
+
+Die PoCs verwenden eine minimale simulierte Trice-Library. Sie verifizieren ausschließlich die C/C++-Präprozessormechanik. Sie sind noch keine Integration in die vollständige Trice-Makromatrix und kein Ersatz für die späteren Repositorytests.
diff --git a/experiments/TriceBind/30_Preprocessor_Verification/VERIFICATION.md b/experiments/TriceBind/30_Preprocessor_Verification/VERIFICATION.md
new file mode 100644
index 000000000..ce6218b38
--- /dev/null
+++ b/experiments/TriceBind/30_Preprocessor_Verification/VERIFICATION.md
@@ -0,0 +1,23 @@
+# Verifikationsstatus
+
+Die beiden PoCs wurden in der Erstellungsumgebung erfolgreich getestet mit:
+
+- GCC 14.2.0 als C11-Compiler
+- Clang 17.0.0 als C11-Compiler
+- G++ 14.2.0 als C++17-Compiler
+- Clang++ 17.0.0 als C++17-Compiler
+
+Verwendete Warnoptionen:
+
+```text
+-Wall -Wextra -Werror -pedantic
+```
+
+Zusätzlich vergleichen die C-Testskripte die erzeugte Laufzeitausgabe mit `expected.txt` und zeigen die relevanten vollständig präprozessierten Aufrufe an.
+
+## Ergebnis
+
+- PoC 1: lokaler Expansion-Time-Dispatch erfolgreich
+- PoC 2: einzeiliger Site-Deskriptor für `AUTO` und `REPLACE` erfolgreich
+- C11 und C++17: erfolgreich
+- GCC und Clang: erfolgreich
diff --git a/experiments/TriceBind/30_Preprocessor_Verification/run_all.sh b/experiments/TriceBind/30_Preprocessor_Verification/run_all.sh
new file mode 100755
index 000000000..9c960b3c8
--- /dev/null
+++ b/experiments/TriceBind/30_Preprocessor_Verification/run_all.sh
@@ -0,0 +1,54 @@
+#!/bin/sh
+set -eu
+
+ROOT=$(
+ CDPATH='' cd -- "$(dirname -- "$0")" || exit 1
+ pwd
+)
+TMP=${TMPDIR:-/tmp}/trice_bind_verification_$$
+mkdir -p "$TMP"
+trap 'rm -rf "$TMP"' EXIT HUP INT TERM
+
+found=0
+
+run_c_suite() {
+ compiler=$1
+ found=1
+ printf '\n== C compiler: %s ==\n' "$compiler"
+ (cd "$ROOT/10_Local_Dispatch" && CC="$compiler" ./run.sh)
+ (cd "$ROOT/20_Site_Descriptor" && CC="$compiler" ./run.sh)
+}
+
+run_cpp_suite() {
+ compiler=$1
+ found=1
+ printf '\n== C++ compiler: %s ==\n' "$compiler"
+ for poc in 10_Local_Dispatch 20_Site_Descriptor; do
+ exe="$TMP/${poc}_${compiler##*/}"
+ out="$exe.out"
+ "$compiler" -x c++ -std=c++17 -Wall -Wextra -Werror -pedantic \
+ "$ROOT/$poc/main.c" -I"$ROOT/$poc" -o "$exe"
+ "$exe" >"$out"
+ diff -u "$ROOT/$poc/expected.txt" "$out"
+ printf '%s: passed\n' "$poc"
+ done
+}
+
+for compiler in gcc clang; do
+ if command -v "$compiler" >/dev/null 2>&1; then
+ run_c_suite "$compiler"
+ fi
+done
+
+for compiler in g++ clang++; do
+ if command -v "$compiler" >/dev/null 2>&1; then
+ run_cpp_suite "$compiler"
+ fi
+done
+
+if [ "$found" -eq 0 ]; then
+ printf '%s\n' 'No supported C or C++ compiler found.' >&2
+ exit 1
+fi
+
+printf '\n%s\n' 'All available verification suites passed.'
diff --git a/experiments/TriceBind/40_MVP_Generator/.gitignore b/experiments/TriceBind/40_MVP_Generator/.gitignore
new file mode 100644
index 000000000..a796bba5e
--- /dev/null
+++ b/experiments/TriceBind/40_MVP_Generator/.gitignore
@@ -0,0 +1,2 @@
+/build/
+/log.bin
diff --git a/experiments/TriceBind/40_MVP_Generator/CMakeLists.txt b/experiments/TriceBind/40_MVP_Generator/CMakeLists.txt
new file mode 100644
index 000000000..ea5fd7b12
--- /dev/null
+++ b/experiments/TriceBind/40_MVP_Generator/CMakeLists.txt
@@ -0,0 +1,72 @@
+cmake_minimum_required(VERSION 3.16)
+
+project(PoC_bind_generator
+ VERSION 1.0.0
+ DESCRIPTION "End-to-end compiler PoC for generated Trice bind sidecars"
+ LANGUAGES C
+)
+
+# The PoC deliberately builds the target library directly from the repository.
+get_filename_component(TRICE_REPOSITORY_ROOT
+ "${CMAKE_CURRENT_SOURCE_DIR}/../../.."
+ ABSOLUTE
+)
+set(TRICE_SOURCE_DIR "${TRICE_REPOSITORY_ROOT}/src")
+
+if(NOT EXISTS "${TRICE_SOURCE_DIR}/trice.h")
+ message(FATAL_ERROR
+ "Trice target sources are missing below ${TRICE_SOURCE_DIR}. "
+ "Keep this experiment in the repository experiments/TriceBind directory."
+ )
+endif()
+
+find_program(GO_EXECUTABLE NAMES go REQUIRED)
+
+# Running bind before every compile is intentional because physical source lines
+# are the target-side lookup identity and stale sidecars are not build-safe.
+add_custom_target(PoC_bind_generator_sidecars ALL
+ COMMAND "${GO_EXECUTABLE}" run ../../../cmd/trice bind
+ -src .
+ -exclude ./build
+ -til til.json
+ -li li.json
+ -liRoot .
+ -bindDir ./build/triceIDs
+ -IDMin 1000
+ -IDMax 1999
+ -IDMethod upward
+ -defaultStampSize 16
+ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
+ COMMENT "Generating Trice bind sidecars"
+ VERBATIM
+)
+
+add_executable(PoC_bind_generator
+ main.c
+ device/dev.c
+ components/deep/device/dev.c
+ "${TRICE_SOURCE_DIR}/trice.c"
+ "${TRICE_SOURCE_DIR}/trice8.c"
+ "${TRICE_SOURCE_DIR}/trice16.c"
+ "${TRICE_SOURCE_DIR}/trice32.c"
+ "${TRICE_SOURCE_DIR}/trice64.c"
+ "${TRICE_SOURCE_DIR}/triceStackBuffer.c"
+ "${TRICE_SOURCE_DIR}/cobsEncode.c"
+ "${TRICE_SOURCE_DIR}/tcobsv1Encode.c"
+)
+add_dependencies(PoC_bind_generator PoC_bind_generator_sidecars)
+
+target_compile_features(PoC_bind_generator PRIVATE c_std_11)
+
+# The local config and generated sidecars precede the library include directory.
+target_include_directories(PoC_bind_generator PRIVATE
+ "${CMAKE_CURRENT_SOURCE_DIR}"
+ "${CMAKE_CURRENT_SOURCE_DIR}/build/triceIDs"
+ "${TRICE_SOURCE_DIR}"
+)
+
+if(MSVC)
+ target_compile_options(PoC_bind_generator PRIVATE /W4)
+else()
+ target_compile_options(PoC_bind_generator PRIVATE -Wall -Wextra -Wpedantic)
+endif()
diff --git a/experiments/TriceBind/40_MVP_Generator/README.md b/experiments/TriceBind/40_MVP_Generator/README.md
new file mode 100644
index 000000000..fe97faac6
--- /dev/null
+++ b/experiments/TriceBind/40_MVP_Generator/README.md
@@ -0,0 +1,45 @@
+# PoC_bind_generator
+
+Dieser PoC verwendet den echten `trice bind`-Generator und kompiliert die
+Repository-Library direkt aus `../../../src`. Die Trice-Aufrufe bleiben in den
+Userquellen ID-frei; nur die einmal erzeugten Sidecar-Includes sowie `til.json`
+und `li.json` sind dauerhafte Projektdateien.
+
+Geprüft werden zwei gleichnamige `dev.c`/`dev.h`-Paare in unterschiedlichen
+Verzeichnistiefen, `static inline`-Funktionen in beiden Headern, identische und
+unterschiedliche Logzeilen sowie normale Funktionsaufrufe aus `main.c`.
+Zusätzlich enthalten die Quellen Lower-/Mixed-Case-, Uppercase-, String- und
+Buffer-Makros sowie einen expliziten Null-Platzhalter.
+
+## Generieren, bauen und ausführen
+
+Vom PoC-Verzeichnis aus:
+
+```sh
+cmake -S . -B build
+cmake --build build
+./build/PoC_bind_generator
+```
+
+Das CMake-Target führt `trice bind` vor jedem Build aus. Beim ersten Lauf fügt
+der Generator die stabilen Include-Zeilen in die fünf physischen Userdateien
+ein. Die Sidecars selbst entstehen unter `build/triceIDs` und sind ignorierte
+Buildartefakte. Das Programm legt `log.bin` bei jedem Start neu an.
+
+Die lokale Binärdatei lässt sich mit den lokalen Listen decodieren:
+
+```sh
+tlog -p FILEBUFFER -args log.bin -pf TCOBS -d16 -prefix off -hs off \
+ -i til.json -li li.json
+```
+
+Alternativ:
+
+```sh
+go run ../../../cmd/trice log -p FILEBUFFER -args log.bin -pf TCOBS -d16 \
+ -prefix off -hs off -i til.json -li li.json
+```
+
+Nach jeder Änderung an einer gescannten `.c`- oder `.h`-Datei muss `trice bind`
+vor dem Build erneut laufen. Ein veralteter, aber noch kompilierbarer Sidecar
+ist kein gültiger Aktualitätsnachweis.
diff --git a/experiments/TriceBind/40_MVP_Generator/components/deep/device/dev.c b/experiments/TriceBind/40_MVP_Generator/components/deep/device/dev.c
new file mode 100644
index 000000000..3238c06cb
--- /dev/null
+++ b/experiments/TriceBind/40_MVP_Generator/components/deep/device/dev.c
@@ -0,0 +1,13 @@
+// SPDX-License-Identifier: MIT
+
+//! \file dev.c
+//! \brief Deep source with ordinary bound logging sites.
+
+#include "dev.h"
+#include "trice_dev_c_K8A60DC1F2D42070D.h" // trice-bind: keep as last include before this file's Trice calls
+
+// secondaryDevRun repeats the shared format and adds a deep-specific record.
+void secondaryDevRun(int value) {
+ trice("msg:source shared value=%d\n", value);
+ trice("msg:source secondary value=%d\n", value);
+}
diff --git a/experiments/TriceBind/40_MVP_Generator/components/deep/device/dev.h b/experiments/TriceBind/40_MVP_Generator/components/deep/device/dev.h
new file mode 100644
index 000000000..16053e681
--- /dev/null
+++ b/experiments/TriceBind/40_MVP_Generator/components/deep/device/dev.h
@@ -0,0 +1,21 @@
+// SPDX-License-Identifier: MIT
+
+//! \file dev.h
+//! \brief Deep header with a second set of bound static-inline sites.
+
+#ifndef POC_BIND_GENERATOR_COMPONENTS_DEEP_DEVICE_DEV_H_
+#define POC_BIND_GENERATOR_COMPONENTS_DEEP_DEVICE_DEV_H_
+
+#include "trice.h"
+#include "trice_dev_h_KF740E4CA1ED0340D.h" // trice-bind: keep as last include before this file's Trice calls
+
+// secondaryDevInline repeats the shared format and adds a deep-specific record.
+static inline void secondaryDevInline(int value) {
+ trice("msg:inline shared value=%d\n", value);
+ TRice("msg:inline secondary value=%d\n", value);
+}
+
+// secondaryDevRun emits records from the matching deep source file.
+void secondaryDevRun(int value);
+
+#endif // POC_BIND_GENERATOR_COMPONENTS_DEEP_DEVICE_DEV_H_
diff --git a/experiments/TriceBind/40_MVP_Generator/device/dev.c b/experiments/TriceBind/40_MVP_Generator/device/dev.c
new file mode 100644
index 000000000..0f6588945
--- /dev/null
+++ b/experiments/TriceBind/40_MVP_Generator/device/dev.c
@@ -0,0 +1,13 @@
+// SPDX-License-Identifier: MIT
+
+//! \file dev.c
+//! \brief Shallow source with ordinary bound logging sites.
+
+#include "dev.h"
+#include "trice_dev_c_KE257CF4E5C9BFE98.h" // trice-bind: keep as last include before this file's Trice calls
+
+// primaryDevRun emits a shared and a shallow-source-specific record.
+void primaryDevRun(int value) {
+ trice("msg:source shared value=%d\n", value);
+ trice("msg:source primary value=%d\n", value);
+}
diff --git a/experiments/TriceBind/40_MVP_Generator/device/dev.h b/experiments/TriceBind/40_MVP_Generator/device/dev.h
new file mode 100644
index 000000000..3e584bde3
--- /dev/null
+++ b/experiments/TriceBind/40_MVP_Generator/device/dev.h
@@ -0,0 +1,21 @@
+// SPDX-License-Identifier: MIT
+
+//! \file dev.h
+//! \brief Shallow header with bound static-inline logging sites.
+
+#ifndef POC_BIND_GENERATOR_DEVICE_DEV_H_
+#define POC_BIND_GENERATOR_DEVICE_DEV_H_
+
+#include "trice.h"
+#include "trice_dev_h_KB8F7A5E5F865D5AF.h" // trice-bind: keep as last include before this file's Trice calls
+
+// primaryDevInline emits one shared and one shallow-header-specific record.
+static inline void primaryDevInline(int value) {
+ trice("msg:inline shared value=%d\n", value);
+ Trice("msg:inline primary value=%d\n", value);
+}
+
+// primaryDevRun emits records from the matching shallow source file.
+void primaryDevRun(int value);
+
+#endif // POC_BIND_GENERATOR_DEVICE_DEV_H_
diff --git a/experiments/TriceBind/40_MVP_Generator/li.json b/experiments/TriceBind/40_MVP_Generator/li.json
new file mode 100644
index 000000000..741187752
--- /dev/null
+++ b/experiments/TriceBind/40_MVP_Generator/li.json
@@ -0,0 +1,50 @@
+{
+ "1000": {
+ "File": "components/deep/device/dev.c",
+ "Line": 11
+ },
+ "1001": {
+ "File": "components/deep/device/dev.c",
+ "Line": 12
+ },
+ "1002": {
+ "File": "components/deep/device/dev.h",
+ "Line": 14
+ },
+ "1003": {
+ "File": "components/deep/device/dev.h",
+ "Line": 15
+ },
+ "1004": {
+ "File": "device/dev.c",
+ "Line": 11
+ },
+ "1005": {
+ "File": "device/dev.c",
+ "Line": 12
+ },
+ "1006": {
+ "File": "device/dev.h",
+ "Line": 14
+ },
+ "1007": {
+ "File": "device/dev.h",
+ "Line": 15
+ },
+ "1008": {
+ "File": "main.c",
+ "Line": 40
+ },
+ "1009": {
+ "File": "main.c",
+ "Line": 41
+ },
+ "1010": {
+ "File": "main.c",
+ "Line": 42
+ },
+ "1011": {
+ "File": "main.c",
+ "Line": 43
+ }
+}
\ No newline at end of file
diff --git a/experiments/TriceBind/40_MVP_Generator/main.c b/experiments/TriceBind/40_MVP_Generator/main.c
new file mode 100644
index 000000000..fb4929bf0
--- /dev/null
+++ b/experiments/TriceBind/40_MVP_Generator/main.c
@@ -0,0 +1,59 @@
+// SPDX-License-Identifier: MIT
+
+//! \file main.c
+//! \brief Host entry point that recreates log.bin and exercises bound sites.
+
+#include
+#include
+#include
+
+#include "components/deep/device/dev.h"
+#include "device/dev.h"
+#include "trice.h"
+#include "trice_main_c_KAA795C46633CFF91.h" // trice-bind: keep as last include before this file's Trice calls
+
+// logFile owns the binary destination during the synchronous demonstration.
+static FILE* logFile;
+// logWriteFailed preserves callback errors because the target hook returns void.
+static bool logWriteFailed;
+
+// TriceNonBlockingDirectWrite8Auxiliary appends one framed record to log.bin.
+void TriceNonBlockingDirectWrite8Auxiliary(const uint8_t* data, size_t length) {
+ if (logFile == NULL || logWriteFailed) {
+ return;
+ }
+ if (fwrite(data, 1, length, logFile) != length) {
+ logWriteFailed = true;
+ }
+}
+
+// main recreates the log, calls both directory variants, and reports I/O errors.
+int main(void) {
+ static const uint8_t bytes[] = {0x11u, 0x22u, 0x33u};
+ logFile = fopen("log.bin", "wb");
+ if (logFile == NULL) {
+ perror("log.bin");
+ return 1;
+ }
+
+ TriceInit();
+ trice("msg:main shared value=%d\n", 10);
+ TRICE("msg:main uppercase value=%d\n", 20);
+ triceS("msg:main string=%s\n", "bound");
+ TRICE8_B(id(0), "msg:main byte=%02x\n", bytes, sizeof bytes);
+ primaryDevInline(30);
+ secondaryDevInline(40);
+ primaryDevRun(50);
+ secondaryDevRun(60);
+
+ if (fclose(logFile) != 0) {
+ perror("log.bin");
+ return 1;
+ }
+ logFile = NULL;
+ if (logWriteFailed) {
+ fputs("Could not write all Trice records to log.bin\n", stderr);
+ return 1;
+ }
+ return 0;
+}
diff --git a/experiments/TriceBind/40_MVP_Generator/til.json b/experiments/TriceBind/40_MVP_Generator/til.json
new file mode 100644
index 000000000..d7dd8ec65
--- /dev/null
+++ b/experiments/TriceBind/40_MVP_Generator/til.json
@@ -0,0 +1,50 @@
+{
+ "1000": {
+ "Type": "trice",
+ "Strg": "msg:source shared value=%d\\n"
+ },
+ "1001": {
+ "Type": "trice",
+ "Strg": "msg:source secondary value=%d\\n"
+ },
+ "1002": {
+ "Type": "trice",
+ "Strg": "msg:inline shared value=%d\\n"
+ },
+ "1003": {
+ "Type": "TRice",
+ "Strg": "msg:inline secondary value=%d\\n"
+ },
+ "1004": {
+ "Type": "trice",
+ "Strg": "msg:source shared value=%d\\n"
+ },
+ "1005": {
+ "Type": "trice",
+ "Strg": "msg:source primary value=%d\\n"
+ },
+ "1006": {
+ "Type": "trice",
+ "Strg": "msg:inline shared value=%d\\n"
+ },
+ "1007": {
+ "Type": "Trice",
+ "Strg": "msg:inline primary value=%d\\n"
+ },
+ "1008": {
+ "Type": "trice",
+ "Strg": "msg:main shared value=%d\\n"
+ },
+ "1009": {
+ "Type": "TRICE",
+ "Strg": "msg:main uppercase value=%d\\n"
+ },
+ "1010": {
+ "Type": "triceS",
+ "Strg": "msg:main string=%s\\n"
+ },
+ "1011": {
+ "Type": "TRICE8_B",
+ "Strg": "msg:main byte=%02x\\n"
+ }
+}
\ No newline at end of file
diff --git a/experiments/TriceBind/40_MVP_Generator/triceConfig.h b/experiments/TriceBind/40_MVP_Generator/triceConfig.h
new file mode 100644
index 000000000..ec046706b
--- /dev/null
+++ b/experiments/TriceBind/40_MVP_Generator/triceConfig.h
@@ -0,0 +1,29 @@
+// SPDX-License-Identifier: MIT
+
+//! \file triceConfig.h
+//! \brief Host configuration for the generated Trice bind compiler PoC.
+
+#ifndef POC_BIND_GENERATOR_TRICE_CONFIG_H_
+#define POC_BIND_GENERATOR_TRICE_CONFIG_H_
+
+// Bind keeps an existing clean marker active for normal Trice code generation.
+#define TRICE_CLEAN 0
+
+// Each record is emitted synchronously from a small stack buffer.
+#define TRICE_BUFFER TRICE_STACK_BUFFER
+#define TRICE_DIRECT_OUTPUT 1
+#define TRICE_DEFERRED_OUTPUT 0
+#define TRICE_DIRECT_AUXILIARY8 1
+
+// TCOBS framing allows FILEBUFFER to recover individual records from log.bin.
+#define TRICE_DIRECT_OUT_FRAMING TRICE_FRAMING_TCOBS
+
+// The single-threaded host example does not need critical-section primitives.
+#define TRICE_ENTER_CRITICAL_SECTION {
+#define TRICE_LEAVE_CRITICAL_SECTION }
+
+// Target diagnostics and a dynamic cycle counter are unnecessary in this PoC.
+#define TRICE_DIAGNOSTICS 0
+#define TRICE_CYCLE_COUNTER 0
+
+#endif // POC_BIND_GENERATOR_TRICE_CONFIG_H_
diff --git a/experiments/TriceBind/50_MVP2_Counter_and_Macro_Definitions/README.md b/experiments/TriceBind/50_MVP2_Counter_and_Macro_Definitions/README.md
new file mode 100644
index 000000000..5c3c9d1ef
--- /dev/null
+++ b/experiments/TriceBind/50_MVP2_Counter_and_Macro_Definitions/README.md
@@ -0,0 +1,110 @@
+# Trice bind MVP2 preprocessing PoCs
+
+This directory contains two independent verification prototypes. They do not
+change the current `trice bind` MVP or its generator.
+
+Run both with:
+
+```sh
+./run.sh
+```
+
+Set `CC` to check one compiler explicitly, for example `CC=clang ./run.sh`.
+
+## Multiple Trice sites on one line
+
+`counter_sites.c` uses the production expansion-time dispatch from
+`src/triceBind.h` and changes only the site selector from:
+
+```text
+(file key, physical line)
+```
+
+to:
+
+```text
+(file key, physical line, __COUNTER__ value)
+```
+
+Three `trice` calls share logical line 100 and two calls share logical line
+200. Every call resolves a distinct simulated sidecar descriptor. An unrelated
+`__COUNTER__` expansion deliberately consumes value 3, demonstrating that a
+generator must observe the complete counter stream rather than merely count
+Trice calls.
+
+This mechanism works only when generator and compiler see an identical token
+stream, include order, predefined-macro set, conditional configuration, and
+forced-include configuration. A changed third-party use of `__COUNTER__` shifts
+all later keys. `__COUNTER__` is also a common compiler extension, not a C or
+C++ language guarantee.
+
+The executable also contains two no-`__COUNTER__` controls on same-line calls:
+
+- an unchanged line-only source plus helper descriptor maps both calls to ID
+ 4199, confirming the collision;
+- a simulated generated shadow source carries explicit ordinals `0` and `1`
+ and resolves distinct IDs 4201 and 4202.
+
+## Trice inside a macro definition
+
+`macro_definition.c` contains a real multi-line logging macro of this form:
+
+```c
+#define LOG_ERROR(value) \
+ do { \
+ switch (value) { \
+ case 7: \
+ trice("error=%d", 7); \
+ break; \
+ case 8: \
+ trice("error=%d", 8); \
+ break; \
+ default: \
+ break; \
+ } \
+ } while (0)
+```
+
+The logical macro definition starts at `wrapper_definition.h:50`. Calls at
+`wrapper_owned.c:300` and `wrapper_owned.c:301` each expand both Trice branches
+during preprocessing. The sidecar therefore contains four invocation
+descriptors: the case-7 definition consistently carries ID 5101 and the case-8
+definition consistently carries ID 5102. Runtime switch selection emits only
+the applicable branch. This proves three relevant properties:
+
+- nested expansion evaluates `__LINE__` at the wrapper invocation;
+- separate Trice definitions inside one wrapper can receive separate IDs;
+- a generator can preserve each definition identity by assigning its stable ID
+ to every generated invocation-site descriptor.
+
+This is deliberately stronger than the initial one-Trice wrapper proposal. Two
+inner Trices share the wrapper invocation's `__LINE__`, so this form also needs
+an occurrence key such as `__COUNTER__` or explicit ordinals in generated
+compiler input. A practical generator should still exclude token pasting,
+stringification, nested wrappers, and dynamic format construction initially.
+The current MVP parser rejects Trice calls in ordinary macro definitions; this
+PoC demonstrates target feasibility, not generator support.
+
+## Can helper files replace `__COUNTER__`?
+
+Not while the compiler consumes the original source unchanged. The standard C
+preprocessor exposes a line but no column or occurrence index, and an included
+header cannot mutate macro state once per expansion. Two identical macro calls
+on one physical line therefore present the same lookup key to a plain sidecar.
+
+The executable confirms that pre-generated helper files can work when paired
+with another mechanism that changes or augments the compiler input. Options
+include:
+
+- compile a generated shadow source that gives every site an explicit ordinal;
+- rewrite calls in generated compiler input to an internal `TRICE_BIND_AT(n, …)`
+ form while preserving original files and diagnostic mappings;
+- use a compiler-specific column builtin where one exists;
+- run the exact target preprocessor first and use its observed `__COUNTER__`
+ values, accepting configuration coupling;
+- emit prepared metadata objects and assign IDs during a later link/patch step.
+
+A helper header by itself, including one containing additional `#line`
+directives, cannot distinguish multiple unchanged calls on the same source
+line. The least invasive source-based candidate is therefore `__COUNTER__`, but
+only with a verified and reproducible preprocessing configuration.
diff --git a/experiments/TriceBind/50_MVP2_Counter_and_Macro_Definitions/counter_sites.c b/experiments/TriceBind/50_MVP2_Counter_and_Macro_Definitions/counter_sites.c
new file mode 100644
index 000000000..01bba7957
--- /dev/null
+++ b/experiments/TriceBind/50_MVP2_Counter_and_Macro_Definitions/counter_sites.c
@@ -0,0 +1,156 @@
+// SPDX-License-Identifier: MIT
+
+#include
+#include
+#include
+#include
+
+#ifndef __COUNTER__
+#error "counter_sites.c requires a preprocessor providing __COUNTER__."
+#endif
+
+typedef struct {
+ uint32_t id;
+ unsigned line;
+ const char* text;
+} ExpectedCounterSite;
+
+static const ExpectedCounterSite expectedCounterSites[] = {
+ {4101u, 100u, "first"},
+ {4102u, 100u, "second"},
+ {4103u, 100u, "third"},
+ {4104u, 200u, "fourth"},
+ {4105u, 200u, "fifth"},
+};
+
+static size_t observedCounterSites;
+static int counterSiteFailures;
+static uint32_t lineOnlyIds[2];
+static size_t observedLineOnlySites;
+static uint32_t explicitOrdinalIds[2];
+static size_t observedExplicitOrdinalSites;
+
+// pocCounterEmit verifies that every expansion selected its own generated descriptor.
+static void pocCounterEmit(uint32_t id, unsigned line, const char* text) {
+ const size_t count = sizeof expectedCounterSites / sizeof expectedCounterSites[0];
+
+ if (observedCounterSites >= count) {
+ fprintf(stderr, "unexpected counter site: id=%u line=%u text=%s\n", id, line, text);
+ counterSiteFailures++;
+ return;
+ }
+
+ const ExpectedCounterSite* expected = &expectedCounterSites[observedCounterSites];
+ if (id != expected->id || line != expected->line || strcmp(text, expected->text) != 0) {
+ fprintf(stderr,
+ "counter site mismatch: got id=%u line=%u text=%s, expected id=%u line=%u text=%s\n",
+ id,
+ line,
+ text,
+ expected->id,
+ expected->line,
+ expected->text);
+ counterSiteFailures++;
+ }
+
+ printf("counter-site id=%u line=%u text=%s\n", id, line, text);
+ observedCounterSites++;
+}
+
+// pocLineOnlyEmit records the unavoidable collision of an unchanged line-only lookup.
+static void pocLineOnlyEmit(uint32_t id, unsigned line, const char* text) {
+ if (observedLineOnlySites < sizeof lineOnlyIds / sizeof lineOnlyIds[0]) {
+ lineOnlyIds[observedLineOnlySites] = id;
+ }
+ observedLineOnlySites++;
+ printf("line-only-site id=%u line=%u text=%s\n", id, line, text);
+}
+
+// pocExplicitOrdinalEmit verifies the generated-shadow-source alternative.
+static void pocExplicitOrdinalEmit(uint32_t id, unsigned line, const char* text) {
+ if (observedExplicitOrdinalSites < sizeof explicitOrdinalIds / sizeof explicitOrdinalIds[0]) {
+ explicitOrdinalIds[observedExplicitOrdinalSites] = id;
+ }
+ observedExplicitOrdinalSites++;
+ printf("explicit-ordinal-site id=%u line=%u text=%s\n", id, line, text);
+}
+
+// The real target implementation remains unchanged; only the PoC emitter replaces it.
+#define iD(n) ((uint32_t)(n))
+#define TRICE_INSERT_trice(tid, text) pocCounterEmit((uint32_t)(tid), (unsigned)__LINE__, (text))
+#include "../../../src/triceBind.h"
+
+// This candidate extends the current (file key, line) lookup with one counter component.
+#define POC_BIND_COUNTER_SITE_II(key, line, counter) TRICE_BIND_SITE_##key##_L##line##_C##counter
+#define POC_BIND_COUNTER_SITE_I(key, line, counter) POC_BIND_COUNTER_SITE_II(key, line, counter)
+#define POC_BIND_COUNTER_SITE(key, line, counter) POC_BIND_COUNTER_SITE_I(key, line, counter)
+#undef TRICE_BIND_SITE_HERE
+#define TRICE_BIND_SITE_HERE() POC_BIND_COUNTER_SITE(TRICE_BIND_FILE_KEY, __LINE__, __COUNTER__)
+
+#define POC_COUNTER_DESCRIPTORS
+#include "poc_bind_descriptors.h"
+
+// This negative control is exactly the current helper-header-only line lookup.
+#define POC_LINE_ONLY_IMPLEMENTATION(tid, text) \
+ pocLineOnlyEmit((uint32_t)(tid), (unsigned)__LINE__, (text))
+#define POC_LINE_ONLY_TRICE(text) \
+ TRICE_BIND_APPLY(TRICE_BIND_SITE(TRICE_BIND_FILE_KEY, __LINE__), POC_LINE_ONLY_IMPLEMENTATION, text)
+
+// This positive control needs no counter but requires generated compiler input with ordinals.
+#define POC_BIND_ORDINAL_SITE_II(key, line, ordinal) TRICE_BIND_SITE_##key##_L##line##_O##ordinal
+#define POC_BIND_ORDINAL_SITE_I(key, line, ordinal) POC_BIND_ORDINAL_SITE_II(key, line, ordinal)
+#define POC_BIND_ORDINAL_SITE(key, line, ordinal) POC_BIND_ORDINAL_SITE_I(key, line, ordinal)
+#define POC_EXPLICIT_ORDINAL_IMPLEMENTATION(tid, text) \
+ pocExplicitOrdinalEmit((uint32_t)(tid), (unsigned)__LINE__, (text))
+#define POC_EXPLICIT_ORDINAL_TRICE_I(line, ordinal, text) \
+ TRICE_BIND_APPLY(POC_BIND_ORDINAL_SITE(TRICE_BIND_FILE_KEY, line, ordinal), \
+ POC_EXPLICIT_ORDINAL_IMPLEMENTATION, \
+ text)
+#define POC_EXPLICIT_ORDINAL_TRICE(ordinal, text) \
+ POC_EXPLICIT_ORDINAL_TRICE_I(__LINE__, ordinal, text)
+
+int main(void) {
+#line 100 "counter_owned.c"
+ trice("first");
+ trice("second");
+ trice("third");
+ enum { unrelatedCounterConsumer = __COUNTER__ };
+ (void)unrelatedCounterConsumer;
+#line 200 "counter_owned.c"
+ trice("fourth");
+ trice("fifth");
+
+#line 250 "unchanged_line_only.c"
+ POC_LINE_ONLY_TRICE("collision-a");
+ POC_LINE_ONLY_TRICE("collision-b");
+
+#line 260 "generated_shadow.c"
+ POC_EXPLICIT_ORDINAL_TRICE(0, "shadow-a");
+ POC_EXPLICIT_ORDINAL_TRICE(1, "shadow-b");
+#line 1000 "counter_sites.c"
+
+ const size_t expectedCount = sizeof expectedCounterSites / sizeof expectedCounterSites[0];
+ if (observedCounterSites != expectedCount) {
+ fprintf(stderr, "observed %zu counter sites, expected %zu\n", observedCounterSites, expectedCount);
+ counterSiteFailures++;
+ }
+ if (observedLineOnlySites != 2u || lineOnlyIds[0] != 4199u || lineOnlyIds[1] != 4199u) {
+ fputs("line-only helper did not exhibit the expected same-line collision\n", stderr);
+ counterSiteFailures++;
+ } else {
+ puts("line-only helper collision: confirmed");
+ }
+ if (observedExplicitOrdinalSites != 2u || explicitOrdinalIds[0] != 4201u ||
+ explicitOrdinalIds[1] != 4202u) {
+ fputs("generated explicit ordinals did not select distinct descriptors\n", stderr);
+ counterSiteFailures++;
+ } else {
+ puts("explicit ordinals without __COUNTER__: passed");
+ }
+ if (counterSiteFailures != 0) {
+ return EXIT_FAILURE;
+ }
+
+ puts("counter-sites: passed");
+ return EXIT_SUCCESS;
+}
diff --git a/experiments/TriceBind/50_MVP2_Counter_and_Macro_Definitions/macro_definition.c b/experiments/TriceBind/50_MVP2_Counter_and_Macro_Definitions/macro_definition.c
new file mode 100644
index 000000000..459ea4a06
--- /dev/null
+++ b/experiments/TriceBind/50_MVP2_Counter_and_Macro_Definitions/macro_definition.c
@@ -0,0 +1,101 @@
+// SPDX-License-Identifier: MIT
+
+#include
+#include
+#include
+#include
+
+#ifndef __COUNTER__
+#error "macro_definition.c requires a preprocessor providing __COUNTER__."
+#endif
+
+typedef struct {
+ uint32_t id;
+ unsigned line;
+ int value;
+} ExpectedWrapperSite;
+
+static const ExpectedWrapperSite expectedWrapperSites[] = {
+ {5101u, 300u, 7},
+ {5102u, 301u, 8},
+};
+
+static size_t observedWrapperSites;
+static int wrapperSiteFailures;
+
+// pocWrapperEmit proves that nested macro expansion keeps the outer invocation line.
+static void pocWrapperEmit(uint32_t id, unsigned line, const char* format, int value) {
+ const size_t count = sizeof expectedWrapperSites / sizeof expectedWrapperSites[0];
+
+ if (observedWrapperSites >= count) {
+ fprintf(stderr, "unexpected wrapper site: id=%u line=%u value=%d\n", id, line, value);
+ wrapperSiteFailures++;
+ return;
+ }
+
+ const ExpectedWrapperSite* expected = &expectedWrapperSites[observedWrapperSites];
+ if (id != expected->id || line != expected->line || value != expected->value || strcmp(format, "error=%d") != 0) {
+ fprintf(stderr,
+ "wrapper site mismatch: got id=%u line=%u value=%d, expected id=%u line=%u value=%d\n",
+ id,
+ line,
+ value,
+ expected->id,
+ expected->line,
+ expected->value);
+ wrapperSiteFailures++;
+ }
+
+ printf("wrapper-site id=%u line=%u value=%d\n", id, line, value);
+ observedWrapperSites++;
+}
+
+// The unchanged production dispatch resolves __LINE__ when the public macro expands.
+#define iD(n) ((uint32_t)(n))
+#define TRICE_INSERT_trice(tid, format, value) \
+ pocWrapperEmit((uint32_t)(tid), (unsigned)__LINE__, (format), (value))
+#include "../../../src/triceBind.h"
+
+// Multiple Trice definitions in one wrapper invocation need an occurrence key.
+#define POC_BIND_WRAPPER_SITE_II(key, line, counter) TRICE_BIND_SITE_##key##_L##line##_C##counter
+#define POC_BIND_WRAPPER_SITE_I(key, line, counter) POC_BIND_WRAPPER_SITE_II(key, line, counter)
+#define POC_BIND_WRAPPER_SITE(key, line, counter) POC_BIND_WRAPPER_SITE_I(key, line, counter)
+#undef TRICE_BIND_SITE_HERE
+#define TRICE_BIND_SITE_HERE() POC_BIND_WRAPPER_SITE(TRICE_BIND_FILE_KEY, __LINE__, __COUNTER__)
+
+#define POC_WRAPPER_DESCRIPTORS
+#include "poc_bind_descriptors.h"
+
+#line 50 "wrapper_definition.h"
+#define LOG_ERROR(value) \
+ do { \
+ switch (value) { \
+ case 7: \
+ trice("error=%d", 7); \
+ break; \
+ case 8: \
+ trice("error=%d", 8); \
+ break; \
+ default: \
+ break; \
+ } \
+ } while (0)
+
+int main(void) {
+#line 300 "wrapper_owned.c"
+ LOG_ERROR(7);
+ LOG_ERROR(8);
+#line 1000 "macro_definition.c"
+
+ const size_t expectedCount = sizeof expectedWrapperSites / sizeof expectedWrapperSites[0];
+ if (observedWrapperSites != expectedCount) {
+ fprintf(stderr, "observed %zu wrapper sites, expected %zu\n", observedWrapperSites, expectedCount);
+ wrapperSiteFailures++;
+ }
+ if (wrapperSiteFailures != 0) {
+ return EXIT_FAILURE;
+ }
+
+ puts("macro-definition: passed");
+ return EXIT_SUCCESS;
+}
diff --git a/experiments/TriceBind/50_MVP2_Counter_and_Macro_Definitions/poc_bind_descriptors.h b/experiments/TriceBind/50_MVP2_Counter_and_Macro_Definitions/poc_bind_descriptors.h
new file mode 100644
index 000000000..7083b2147
--- /dev/null
+++ b/experiments/TriceBind/50_MVP2_Counter_and_Macro_Definitions/poc_bind_descriptors.h
@@ -0,0 +1,50 @@
+// SPDX-License-Identifier: MIT
+
+// This header models generator-owned sidecar output for the two independent PoCs.
+#ifndef POC_BIND_MVP2_DESCRIPTORS_H_
+#define POC_BIND_MVP2_DESCRIPTORS_H_
+
+#if defined(POC_COUNTER_DESCRIPTORS) == defined(POC_WRAPPER_DESCRIPTORS)
+#error "Select exactly one PoC descriptor set before including this header."
+#endif
+
+#ifdef POC_COUNTER_DESCRIPTORS
+
+#undef TRICE_BIND_FILE_KEY
+#define TRICE_BIND_FILE_KEY K000000000000C001
+#define TRICE_BIND_ROUTE_K000000000000C001 BIND
+
+// A generator/preprocessor pass observed counter values 0, 1, and 2 on line 100.
+#define TRICE_BIND_SITE_K000000000000C001_L100_C0 TRICE_BIND_AUTO, iD(4101u)
+#define TRICE_BIND_SITE_K000000000000C001_L100_C1 TRICE_BIND_AUTO, iD(4102u)
+#define TRICE_BIND_SITE_K000000000000C001_L100_C2 TRICE_BIND_AUTO, iD(4103u)
+
+// Counter value 3 belongs to an unrelated expansion; the next Trice sites use 4 and 5.
+#define TRICE_BIND_SITE_K000000000000C001_L200_C4 TRICE_BIND_AUTO, iD(4104u)
+#define TRICE_BIND_SITE_K000000000000C001_L200_C5 TRICE_BIND_AUTO, iD(4105u)
+
+// A plain helper has only one descriptor for line 250, so both calls collide.
+#define TRICE_BIND_SITE_K000000000000C001_L250 TRICE_BIND_AUTO, iD(4199u)
+
+// A generated shadow source can carry explicit ordinals without using __COUNTER__.
+#define TRICE_BIND_SITE_K000000000000C001_L260_O0 TRICE_BIND_AUTO, iD(4201u)
+#define TRICE_BIND_SITE_K000000000000C001_L260_O1 TRICE_BIND_AUTO, iD(4202u)
+
+#endif
+
+#ifdef POC_WRAPPER_DESCRIPTORS
+
+#undef TRICE_BIND_FILE_KEY
+#define TRICE_BIND_FILE_KEY K000000000000A001
+#define TRICE_BIND_ROUTE_K000000000000A001 BIND
+
+// Every wrapper invocation expands both switch branches during preprocessing.
+// IDs 5101 and 5102 belong to the two Trice definitions and remain stable.
+#define TRICE_BIND_SITE_K000000000000A001_L300_C0 TRICE_BIND_AUTO, iD(5101u)
+#define TRICE_BIND_SITE_K000000000000A001_L300_C1 TRICE_BIND_AUTO, iD(5102u)
+#define TRICE_BIND_SITE_K000000000000A001_L301_C2 TRICE_BIND_AUTO, iD(5101u)
+#define TRICE_BIND_SITE_K000000000000A001_L301_C3 TRICE_BIND_AUTO, iD(5102u)
+
+#endif
+
+#endif
diff --git a/experiments/TriceBind/50_MVP2_Counter_and_Macro_Definitions/run.sh b/experiments/TriceBind/50_MVP2_Counter_and_Macro_Definitions/run.sh
new file mode 100755
index 000000000..82ed17553
--- /dev/null
+++ b/experiments/TriceBind/50_MVP2_Counter_and_Macro_Definitions/run.sh
@@ -0,0 +1,58 @@
+#!/bin/sh
+# SPDX-License-Identifier: MIT
+
+# Compile and execute both independent bind MVP2 experiments with available C compilers.
+set -eu
+
+ROOT=$(
+ CDPATH='' cd -- "$(dirname -- "$0")" || exit 1
+ pwd
+)
+TMP=$(mktemp -d "${TMPDIR:-/tmp}/trice-bind-mvp2.XXXXXX")
+trap 'rm -rf "$TMP"' EXIT HUP INT TERM
+
+if [ -n "${CC:-}" ]; then
+ set -- "$CC"
+else
+ set -- gcc clang
+fi
+
+compilerFound=0
+counterCompilerFound=0
+
+for compiler; do
+ if ! command -v "$compiler" >/dev/null 2>&1; then
+ continue
+ fi
+ compilerFound=1
+ name=${compiler##*/}
+
+ printf '\n== C compiler: %s ==\n' "$compiler"
+
+ wrapperExe="$TMP/macro_definition_$name"
+ "$compiler" -std=c11 -Wall -Wextra -Werror -pedantic \
+ "$ROOT/macro_definition.c" -I"$ROOT" -o "$wrapperExe"
+ "$wrapperExe"
+
+ if printf '%s\n' '#ifndef __COUNTER__' '#error __COUNTER__ unavailable' '#endif' |
+ "$compiler" -x c -E - >/dev/null 2>&1; then
+ counterCompilerFound=1
+ counterExe="$TMP/counter_sites_$name"
+ "$compiler" -std=c11 -Wall -Wextra -Werror -pedantic \
+ "$ROOT/counter_sites.c" -I"$ROOT" -o "$counterExe"
+ "$counterExe"
+ else
+ printf 'counter-sites: skipped (%s has no __COUNTER__)\n' "$compiler"
+ fi
+done
+
+if [ "$compilerFound" -eq 0 ]; then
+ printf '%s\n' 'No GCC- or Clang-compatible C compiler found.' >&2
+ exit 1
+fi
+if [ "$counterCompilerFound" -eq 0 ]; then
+ printf '%s\n' 'No available compiler supports __COUNTER__; counter PoC not verified.' >&2
+ exit 1
+fi
+
+printf '\n%s\n' 'All available bind MVP2 PoCs passed.'
diff --git a/experiments/TriceBind/60_MVP2_Local_Counter_Rebase/README.md b/experiments/TriceBind/60_MVP2_Local_Counter_Rebase/README.md
new file mode 100644
index 000000000..57a45231e
--- /dev/null
+++ b/experiments/TriceBind/60_MVP2_Local_Counter_Rebase/README.md
@@ -0,0 +1,127 @@
+# PoC: lokaler `__COUNTER__`-Rebase für `trice bind`
+
+Dieses ausführbare PoC konkretisiert Variante 1 aus
+[`Trice_bind_60_MVP2_Implementation_Strategies.md`](../../../docs/TriceBind/Trice_bind_60_MVP2_Implementation_Strategies.md).
+Es verändert weder den aktuellen Generator noch Dateien in [`src`](../../../src/).
+Der produktive Dispatch aus [`triceBind.h`](../../../src/triceBind.h) wird jedoch
+direkt eingebunden.
+
+## Sicht des Anwenders
+
+Der Anwender definiert ein gewöhnliches Statement-Makro und ruft es ohne ID,
+Counterwert oder neue Kommandozeilenoption auf:
+
+```c
+#define LOG_ERROR(value) \
+ do { \
+ switch (value) { \
+ case 0: \
+ break; \
+ case 7: \
+ trice("cannot open file\n"); \
+ break; \
+ default: \
+ trice("error=%d", 8); \
+ break; \
+ } \
+ } while (0)
+
+LOG_ERROR(0); // no log record
+LOG_ERROR(7); // stable ID 6101
+LOG_ERROR(99); // stable ID 6102
+```
+
+`main.c` enthält außerdem zwei Wrapperaufrufe auf derselben physischen Zeile:
+
+```c
+LOG_ERROR(7); LOG_ERROR(99);
+```
+
+Damit prüft ein Segment vier Präprozessor-Expansionen: zwei Trice-Stellen pro
+Wrapper mal zwei Wrapperaufrufe. Die Definitions-IDs bleiben dabei 6101 und
+6102; sie werden nicht pro Wrapperaufruf neu vergeben.
+
+## Was `trice bind` im PoC simuliert
+
+Ein künftiger Generator würde um jede erweiterte Stelle automatisch einen
+lokalen Bereich legen. Der Anwender müsste diese Zeilen weder schreiben noch
+pflegen:
+
+```c
+#define TRICE_BIND_REBASE_SCOPE S_CASE7
+#define TRICE_BIND_REBASE_BEGIN
+#include "trice_bind_rebase_generated.h"
+#undef TRICE_BIND_REBASE_BEGIN
+
+LOG_ERROR(7);
+
+#define TRICE_BIND_REBASE_END
+#include "trice_bind_rebase_generated.h"
+#undef TRICE_BIND_REBASE_END
+```
+
+Der BEGIN-Helper merkt sich den aktuellen `__COUNTER__`-Stand. Jede folgende
+Trice-Expansion verwendet nur ihre Differenz zu diesem lokalen Startwert. Die
+absoluten Werte dürfen sich daher durch Header oder fremde Makros vor dem
+Bereich ändern. `main.c` verbraucht absichtlich unterschiedlich viele
+Counterwerte vor jedem Bereich und beweist dieses Verhalten zur Laufzeit.
+
+Der generierte Helper schaltet den bestehenden file-key-basierten Dispatch nur
+innerhalb des Bereichs von `BIND` auf `REBASE`. Die lokalen Ordinale werden mit
+generierten konstanten Ausdrücken auf stabile IDs abgebildet. Es entstehen
+keine veränderlichen Tabellen, keine dynamische Speicherbelegung und kein
+globaler Laufzeitzustand.
+
+## Robuste Fehler statt stiller Fehlzuordnung
+
+Ein lokaler Start allein wäre nicht ausreichend: Ein fremdes `__COUNTER__`
+zwischen BEGIN und END könnte alle nachfolgenden IDs verschieben. Dieses PoC
+prüft deshalb zwei Invarianten bereits beim Compilieren:
+
+1. Jede einzelne Trice-Expansion muss innerhalb des erzeugten Ordinalbereichs
+ liegen.
+2. Am END muss exakt die erwartete Anzahl Counterwerte verbraucht worden sein.
+
+Schon ein absichtlich eingeschobener fremder Counter führt dadurch zu einer
+`static_assert`- beziehungsweise `_Static_assert`-Diagnose. Es wird niemals
+still eine verschobene reguläre ID akzeptiert. Fehlt `__COUNTER__`, erzeugt der
+Helper eine gezielte `#error`-Meldung mit den Auswegen `trice insert/clean` oder
+einer Anpassung des Makros.
+
+## Ausführen
+
+```sh
+cd experiments/TriceBind/60_MVP2_Local_Counter_Rebase
+./run.sh
+```
+
+Mit `CC` und `CXX` kann jeweils ein Compiler gewählt werden:
+
+```sh
+CC=clang CXX=clang++ ./run.sh
+```
+
+Das Skript prüft mit allen gefundenen GCC-/Clang-kompatiblen C- und
+C++-Compilern:
+
+- den positiven Lauf bei `-O0` und `-O2`;
+- die stabilen IDs bei `LOG_ERROR(0)`, `LOG_ERROR(7)` und einem Defaultwert;
+- zwei `LOG_ERROR`-Aufrufe auf derselben Zeile;
+- den erwarteten Compilefehler bei zusätzlichem Counterverbrauch;
+- den erwarteten Compilefehler bei simuliert fehlendem `__COUNTER__`.
+
+## Aussage und bewusste Grenzen
+
+Das PoC belegt den lokalen Rebase für gewöhnliche Statement-Kontexte, das oben
+gezeigte mehrzeilige Wrappermakro, mehrere Wrapperaufrufe auf einer Zeile, C11
+und C++17. Es belegt außerdem, dass fremde Counterverbräuche **vor** einem
+Bereich unschädlich sind und Verbräuche **innerhalb** des Bereichs erkannt
+werden.
+
+Es implementiert noch keinen Generator. Ein produktives `trice bind` müsste
+die Bereiche automatisch erkennen, erzeugen, bei erneuten Läufen aktualisieren
+und transaktional schreiben. Zunächst weiterhin zurückzuweisen wären
+verschachtelte Logging-Wrapper, Token-Pasting, Stringification, dynamische
+Formatkonstruktion und Sourcekontexte, in denen vor einer Anweisung keine
+Deklaration zulässig ist. Diese Grenzen sollen klar diagnostiziert werden;
+`trice insert`/`trice clean` bleibt der universelle Fallback.
diff --git a/experiments/TriceBind/60_MVP2_Local_Counter_Rebase/main.c b/experiments/TriceBind/60_MVP2_Local_Counter_Rebase/main.c
new file mode 100644
index 000000000..b8196da05
--- /dev/null
+++ b/experiments/TriceBind/60_MVP2_Local_Counter_Rebase/main.c
@@ -0,0 +1,193 @@
+// SPDX-License-Identifier: MIT
+
+#include
+#include
+#include
+#include
+
+// ExpectedEmission describes one runtime-selected Trice definition.
+typedef struct {
+ const char* kind;
+ uint32_t id;
+ const char* format;
+ int hasIntegerValue;
+ int integerValue;
+} ExpectedEmission;
+
+// Every invocation expands both Trice definitions, but the switch executes one.
+static const ExpectedEmission expectedEmissions[] = {
+ {"trice", 6101u, "cannot open file\n", 0, 0},
+ {"trice", 6102u, "error=%d", 1, 8},
+ {"trice", 6101u, "cannot open file\n", 0, 0},
+ {"trice", 6102u, "error=%d", 1, 8},
+};
+
+// These counters collect all mismatches so one run reports more than one error.
+static size_t observedEmissions;
+static int emissionFailures;
+
+// pocEmit verifies that the generated local ordinal selected the stable ID of
+// the definition that actually executes. It has no production-side behavior.
+static void pocEmit(const char* kind,
+ uint32_t id,
+ const char* format,
+ int hasIntegerValue,
+ int integerValue) {
+ const size_t expectedCount = sizeof expectedEmissions / sizeof expectedEmissions[0];
+
+ if (observedEmissions >= expectedCount) {
+ fprintf(stderr, "unexpected emission: kind=%s id=%u\n", kind, (unsigned)id);
+ emissionFailures++;
+ return;
+ }
+
+ const ExpectedEmission* expected = &expectedEmissions[observedEmissions];
+ if (strcmp(kind, expected->kind) != 0 || id != expected->id ||
+ strcmp(format, expected->format) != 0 ||
+ hasIntegerValue != expected->hasIntegerValue ||
+ integerValue != expected->integerValue) {
+ fprintf(stderr,
+ "emission %zu mismatch: got kind=%s id=%u format=%s, "
+ "expected kind=%s id=%u format=%s\n",
+ observedEmissions,
+ kind,
+ (unsigned)id,
+ format,
+ expected->kind,
+ (unsigned)expected->id,
+ expected->format);
+ emissionFailures++;
+ }
+
+ printf("emission[%zu]: kind=%s id=%u\n", observedEmissions, kind, (unsigned)id);
+ observedEmissions++;
+}
+
+// These PoC emitters preserve the relevant zero- and one-value trice shapes.
+#define iD(n) (n)
+#define POC_TRICE_TEXT(tid, format) pocEmit("trice", (uint32_t)(tid), (format), 0, 0)
+#define POC_TRICE_INTEGER(tid, format, integerValue) \
+ pocEmit("trice", (uint32_t)(tid), (format), 1, (int)(integerValue))
+#define POC_TRICE_SELECT(_format, _value, selected, ...) selected
+#define TRICE_INSERT_trice(tid, ...) \
+ POC_TRICE_SELECT(__VA_ARGS__, POC_TRICE_INTEGER, POC_TRICE_TEXT, unused)(tid, __VA_ARGS__)
+#include "../../../src/triceBind.h"
+
+// This setup include models the file-level sidecar installed by `trice bind`.
+#define TRICE_BIND_REBASE_SETUP
+#include "trice_bind_rebase_generated.h"
+#undef TRICE_BIND_REBASE_SETUP
+
+// This is the requested user macro without IDs or bind-specific syntax.
+#define LOG_ERROR(value) \
+ do { \
+ switch (value) { \
+ case 0: \
+ break; \
+ case 7: \
+ trice("cannot open file\n"); \
+ break; \
+ default: \
+ trice("error=%d", 8); \
+ break; \
+ } \
+ } while (0)
+
+#if defined(POC_FORCE_NO_COUNTER) || !defined(__COUNTER__)
+
+// This isolated inclusion keeps the unsupported-compiler diagnostic concise.
+#define TRICE_BIND_REBASE_SCOPE S_CASE0
+#define TRICE_BIND_REBASE_BEGIN
+#include "trice_bind_rebase_generated.h"
+#undef TRICE_BIND_REBASE_BEGIN
+#undef TRICE_BIND_REBASE_SCOPE
+
+int main(void) {
+ return EXIT_FAILURE;
+}
+
+#else
+
+int main(void) {
+ // These unrelated expansions prove that an absolute counter value is not
+ // part of a generated descriptor and may vary before every local scope.
+ enum { unrelatedBeforeCase0A = __COUNTER__,
+ unrelatedBeforeCase0B = __COUNTER__ };
+ (void)unrelatedBeforeCase0A;
+ (void)unrelatedBeforeCase0B;
+
+#define TRICE_BIND_REBASE_SCOPE S_CASE0
+#define TRICE_BIND_REBASE_BEGIN
+#include "trice_bind_rebase_generated.h"
+#undef TRICE_BIND_REBASE_BEGIN
+ LOG_ERROR(0);
+#define TRICE_BIND_REBASE_END
+#include "trice_bind_rebase_generated.h"
+#undef TRICE_BIND_REBASE_END
+
+ enum { unrelatedBeforeCase7 = __COUNTER__ };
+ (void)unrelatedBeforeCase7;
+
+#define TRICE_BIND_REBASE_SCOPE S_CASE7
+#define TRICE_BIND_REBASE_BEGIN
+#include "trice_bind_rebase_generated.h"
+#undef TRICE_BIND_REBASE_BEGIN
+#if defined(POC_INJECT_COUNTER_DRIFT)
+ // The negative test must fail instead of silently selecting shifted IDs.
+ enum { injectedCounterDrift = __COUNTER__ };
+ (void)injectedCounterDrift;
+#endif
+ LOG_ERROR(7);
+#define TRICE_BIND_REBASE_END
+#include "trice_bind_rebase_generated.h"
+#undef TRICE_BIND_REBASE_END
+
+ enum { unrelatedBeforeDefaultA = __COUNTER__,
+ unrelatedBeforeDefaultB = __COUNTER__ };
+ (void)unrelatedBeforeDefaultA;
+ (void)unrelatedBeforeDefaultB;
+
+#define TRICE_BIND_REBASE_SCOPE S_DEFAULT
+#define TRICE_BIND_REBASE_BEGIN
+#include "trice_bind_rebase_generated.h"
+#undef TRICE_BIND_REBASE_BEGIN
+ LOG_ERROR(99);
+#define TRICE_BIND_REBASE_END
+#include "trice_bind_rebase_generated.h"
+#undef TRICE_BIND_REBASE_END
+
+ enum { unrelatedBeforeSameLine = __COUNTER__ };
+ (void)unrelatedBeforeSameLine;
+
+#define TRICE_BIND_REBASE_SCOPE S_SAME_LINE
+#define TRICE_BIND_REBASE_BEGIN
+#include "trice_bind_rebase_generated.h"
+#undef TRICE_BIND_REBASE_BEGIN
+ LOG_ERROR(7);
+ LOG_ERROR(99);
+#define TRICE_BIND_REBASE_END
+#include "trice_bind_rebase_generated.h"
+#undef TRICE_BIND_REBASE_END
+
+ const size_t expectedCount = sizeof expectedEmissions / sizeof expectedEmissions[0];
+ if (observedEmissions != expectedCount) {
+ fprintf(stderr,
+ "observed %zu emissions, expected %zu\n",
+ observedEmissions,
+ expectedCount);
+ emissionFailures++;
+ }
+ if (emissionFailures != 0) {
+ return EXIT_FAILURE;
+ }
+
+ printf("local bases may differ: %d, %d, %d, %d\n",
+ triceBindCounterBase_S_CASE0,
+ triceBindCounterBase_S_CASE7,
+ triceBindCounterBase_S_DEFAULT,
+ triceBindCounterBase_S_SAME_LINE);
+ puts("variant-1 counter rebase: passed");
+ return EXIT_SUCCESS;
+}
+
+#endif
diff --git a/experiments/TriceBind/60_MVP2_Local_Counter_Rebase/run.sh b/experiments/TriceBind/60_MVP2_Local_Counter_Rebase/run.sh
new file mode 100755
index 000000000..3e46f9e08
--- /dev/null
+++ b/experiments/TriceBind/60_MVP2_Local_Counter_Rebase/run.sh
@@ -0,0 +1,127 @@
+#!/bin/sh
+# SPDX-License-Identifier: MIT
+
+# Compile the positive and negative rebase cases with available C/C++ compilers.
+set -eu
+
+# SCRIPT_DIR stabilizes all repository-relative paths used below.
+SCRIPT_DIR=$(
+ CDPATH='' cd -- "$(dirname -- "$0")" || exit 1
+ pwd
+)
+cd "$SCRIPT_DIR"
+
+# TMP honors the host's temporary-directory variables and falls back locally.
+TMP=$(mktemp -d "${TMPDIR:-${TMP:-.}}/trice-bind-rebase.XXXXXX")
+trap 'rm -rf "$TMP"' EXIT HUP INT TERM
+
+# expect_failure accepts a compiler, language, standard, define, and diagnostic.
+# A rejected build counts as success only when it contains the intended guard.
+expect_failure() {
+ compiler=$1
+ language=$2
+ standard=$3
+ define=$4
+ diagnostic=$5
+ label=$6
+ log="$TMP/${label}.log"
+
+ if "$compiler" -x "$language" "-std=$standard" -Wall -Wextra -Werror -pedantic \
+ "-D$define" main.c -I. -o "$TMP/${label}" >"$log" 2>&1; then
+ printf '%s\n' "$label unexpectedly compiled successfully" >&2
+ exit 1
+ fi
+ if ! grep -F "$diagnostic" "$log" >/dev/null 2>&1; then
+ printf '%s\n' "$label failed without the expected diagnostic:" >&2
+ sed -n '1,120p' "$log" >&2
+ exit 1
+ fi
+ printf '%s\n' "$label: expected diagnostic confirmed"
+}
+
+# counter_available probes the selected language mode without relying on a
+# compiler brand or version list.
+counter_available() {
+ compiler=$1
+ language=$2
+ printf '%s\n' '#ifndef __COUNTER__' '#error __COUNTER__ unavailable' '#endif' |
+ "$compiler" -x "$language" -E - >/dev/null 2>&1
+}
+
+cCompilerFound=0
+if [ -n "${CC:-}" ]; then
+ set -- "$CC"
+else
+ set -- gcc clang
+fi
+
+for compiler; do
+ if ! command -v "$compiler" >/dev/null 2>&1; then
+ continue
+ fi
+ if ! counter_available "$compiler" c; then
+ printf 'C compiler %s has no __COUNTER__; positive test skipped.\n' "$compiler"
+ continue
+ fi
+ cCompilerFound=1
+ name=${compiler##*/}
+ printf '\n== C compiler: %s ==\n' "$compiler"
+
+ "$compiler" -x c -std=c11 -O0 -Wall -Wextra -Werror -pedantic \
+ main.c -I. -o "$TMP/c_${name}_o0"
+ "$TMP/c_${name}_o0"
+
+ "$compiler" -x c -std=c11 -O2 -Wall -Wextra -Werror -pedantic \
+ main.c -I. -o "$TMP/c_${name}_o2"
+ "$TMP/c_${name}_o2"
+
+ expect_failure "$compiler" c c11 POC_INJECT_COUNTER_DRIFT=1 \
+ 'unexpected __COUNTER__ expansion inside an advanced scope' "c_${name}_drift"
+ expect_failure "$compiler" c c11 POC_FORCE_NO_COUNTER=1 \
+ 'target preprocessor has no __COUNTER__' "c_${name}_no_counter"
+done
+
+if [ "$cCompilerFound" -eq 0 ]; then
+ printf '%s\n' 'No available GCC- or Clang-compatible C compiler provides __COUNTER__.' >&2
+ exit 1
+fi
+
+cxxCompilerFound=0
+if [ -n "${CXX:-}" ]; then
+ set -- "$CXX"
+else
+ set -- g++ clang++
+fi
+
+for compiler; do
+ if ! command -v "$compiler" >/dev/null 2>&1; then
+ continue
+ fi
+ if ! counter_available "$compiler" c++; then
+ printf 'C++ compiler %s has no __COUNTER__; positive test skipped.\n' "$compiler"
+ continue
+ fi
+ cxxCompilerFound=1
+ name=${compiler##*/}
+ printf '\n== C++ compiler: %s ==\n' "$compiler"
+
+ "$compiler" -x c++ -std=c++17 -O0 -Wall -Wextra -Werror -pedantic \
+ main.c -I. -o "$TMP/cxx_${name}_o0"
+ "$TMP/cxx_${name}_o0"
+
+ "$compiler" -x c++ -std=c++17 -O2 -Wall -Wextra -Werror -pedantic \
+ main.c -I. -o "$TMP/cxx_${name}_o2"
+ "$TMP/cxx_${name}_o2"
+
+ expect_failure "$compiler" c++ c++17 POC_INJECT_COUNTER_DRIFT=1 \
+ 'unexpected __COUNTER__ expansion inside an advanced scope' "cxx_${name}_drift"
+ expect_failure "$compiler" c++ c++17 POC_FORCE_NO_COUNTER=1 \
+ 'target preprocessor has no __COUNTER__' "cxx_${name}_no_counter"
+done
+
+if [ "$cxxCompilerFound" -eq 0 ]; then
+ printf '%s\n' 'No available GCC- or Clang-compatible C++ compiler provides __COUNTER__.' >&2
+ exit 1
+fi
+
+printf '\n%s\n' 'All available variant-1 rebase checks passed.'
diff --git a/experiments/TriceBind/60_MVP2_Local_Counter_Rebase/trice_bind_rebase_generated.h b/experiments/TriceBind/60_MVP2_Local_Counter_Rebase/trice_bind_rebase_generated.h
new file mode 100644
index 000000000..032e7f255
--- /dev/null
+++ b/experiments/TriceBind/60_MVP2_Local_Counter_Rebase/trice_bind_rebase_generated.h
@@ -0,0 +1,120 @@
+// SPDX-License-Identifier: MIT
+
+// This file models output generated and maintained by a future `trice bind`.
+// It intentionally has no include guard because SETUP, BEGIN, and END are
+// separate inclusion modes used at different source positions.
+
+#if (defined(TRICE_BIND_REBASE_SETUP) + defined(TRICE_BIND_REBASE_BEGIN) + \
+ defined(TRICE_BIND_REBASE_END)) != 1
+#error "Select exactly one generated rebase-helper mode."
+#endif
+
+#if defined(TRICE_BIND_REBASE_SETUP)
+
+// The generated file key normally uses the regular line-based bind route.
+#undef TRICE_BIND_FILE_KEY
+#define TRICE_BIND_FILE_KEY K000000000000B101
+#define TRICE_BIND_ROUTE_K000000000000B101 BIND
+
+// These two IDs belong to the two Trice definitions inside LOG_ERROR.
+#define POC_REBASE_COUNT_S_CASE0 2
+#define POC_REBASE_COUNT_S_CASE7 2
+#define POC_REBASE_COUNT_S_DEFAULT 2
+#define POC_REBASE_COUNT_S_SAME_LINE 4
+
+// Generated constant expressions map local expansion ordinals to stable IDs.
+// They require no lookup table, RAM, dynamic allocation, or runtime mutation.
+#define POC_REBASE_PAIR_ID(index) (((index) & 1) == 0 ? 6101u : 6102u)
+#define POC_REBASE_ID_S_CASE0(index) POC_REBASE_PAIR_ID(index)
+#define POC_REBASE_ID_S_CASE7(index) POC_REBASE_PAIR_ID(index)
+#define POC_REBASE_ID_S_DEFAULT(index) POC_REBASE_PAIR_ID(index)
+#define POC_REBASE_ID_S_SAME_LINE(index) POC_REBASE_PAIR_ID(index)
+
+// Two-step concatenation expands a generated scope token before joining it.
+#define POC_REBASE_CAT_I(left, right) left##right
+#define POC_REBASE_CAT(left, right) POC_REBASE_CAT_I(left, right)
+#define POC_REBASE_BASE_NAME(scope) POC_REBASE_CAT(triceBindCounterBase_, scope)
+#define POC_REBASE_END_NAME(scope) POC_REBASE_CAT(triceBindCounterEnd_, scope)
+#define POC_REBASE_COUNT_NAME(scope) POC_REBASE_CAT(POC_REBASE_COUNT_, scope)
+#define POC_REBASE_ID_NAME(scope) POC_REBASE_CAT(POC_REBASE_ID_, scope)
+#define POC_REBASE_SCOPE_COUNT(scope) POC_REBASE_COUNT_NAME(scope)
+#define POC_REBASE_SCOPE_ID(scope, index) POC_REBASE_ID_NAME(scope)(index)
+
+// The assertion spelling is the only C/C++ language difference in the helper.
+#if defined(__cplusplus)
+#define POC_REBASE_STATIC_ASSERT(condition, message) static_assert((condition), message)
+#else
+#define POC_REBASE_STATIC_ASSERT(condition, message) _Static_assert((condition), message)
+#endif
+
+// A captured counter becomes a number before it is reused in several checks.
+#define POC_REBASE_LOCAL_INDEX(counter) ((counter) - POC_REBASE_ACTIVE_BASE - 1)
+#define POC_REBASE_CAPTURE(implementation, counter, ...) \
+ POC_REBASE_APPLY(implementation, counter, __VA_ARGS__)
+#define POC_REBASE_APPLY(implementation, counter, ...) \
+ do { \
+ POC_REBASE_STATIC_ASSERT( \
+ POC_REBASE_LOCAL_INDEX(counter) >= 0 && \
+ POC_REBASE_LOCAL_INDEX(counter) < POC_REBASE_ACTIVE_COUNT, \
+ "trice bind: unexpected __COUNTER__ expansion inside an advanced scope; " \
+ "use trice insert/clean or change the macro"); \
+ implementation(iD(POC_REBASE_ACTIVE_ID(POC_REBASE_LOCAL_INDEX(counter))), \
+ __VA_ARGS__); \
+ } while (0)
+
+// The extra dispatch route is selected only between generated BEGIN and END.
+#define TRICE_BIND_ROUTE_REBASE(implementation, ...) \
+ POC_REBASE_CAPTURE(implementation, __COUNTER__, __VA_ARGS__)
+
+#elif defined(TRICE_BIND_REBASE_BEGIN)
+
+#if defined(POC_FORCE_NO_COUNTER) || !defined(__COUNTER__)
+#error "trice bind: target preprocessor has no __COUNTER__; use trice insert/clean or change the macro"
+#elif !defined(TRICE_BIND_REBASE_SCOPE)
+#error "The generated rebase BEGIN requires TRICE_BIND_REBASE_SCOPE."
+#elif defined(POC_REBASE_ACTIVE)
+#error "Nested generated rebase scopes are not supported."
+#else
+
+// The base absorbs every unrelated counter expansion that happened earlier.
+enum { POC_REBASE_BASE_NAME(TRICE_BIND_REBASE_SCOPE) = __COUNTER__ };
+POC_REBASE_STATIC_ASSERT(POC_REBASE_SCOPE_COUNT(TRICE_BIND_REBASE_SCOPE) > 0,
+ "A generated rebase scope must contain at least one Trice site");
+
+// Active macros deliberately refer to the scope token until the END include.
+#define POC_REBASE_ACTIVE 1
+#define POC_REBASE_ACTIVE_BASE POC_REBASE_BASE_NAME(TRICE_BIND_REBASE_SCOPE)
+#define POC_REBASE_ACTIVE_COUNT POC_REBASE_SCOPE_COUNT(TRICE_BIND_REBASE_SCOPE)
+#define POC_REBASE_ACTIVE_ID(index) POC_REBASE_SCOPE_ID(TRICE_BIND_REBASE_SCOPE, index)
+
+#undef TRICE_BIND_ROUTE_K000000000000B101
+#define TRICE_BIND_ROUTE_K000000000000B101 REBASE
+
+#endif
+
+#elif defined(TRICE_BIND_REBASE_END)
+
+#if !defined(TRICE_BIND_REBASE_SCOPE) || !defined(POC_REBASE_ACTIVE)
+#error "The generated rebase END has no matching active BEGIN."
+#else
+
+// The final snapshot detects missing sites and foreign counter use anywhere
+// in the protected segment, including after its last Trice expansion.
+enum { POC_REBASE_END_NAME(TRICE_BIND_REBASE_SCOPE) = __COUNTER__ };
+POC_REBASE_STATIC_ASSERT(
+ POC_REBASE_END_NAME(TRICE_BIND_REBASE_SCOPE) - POC_REBASE_ACTIVE_BASE - 1 ==
+ POC_REBASE_ACTIVE_COUNT,
+ "trice bind: generated scope consumed an unexpected number of __COUNTER__ values; "
+ "use trice insert/clean or change the macro");
+
+#undef TRICE_BIND_ROUTE_K000000000000B101
+#define TRICE_BIND_ROUTE_K000000000000B101 BIND
+#undef POC_REBASE_ACTIVE_ID
+#undef POC_REBASE_ACTIVE_COUNT
+#undef POC_REBASE_ACTIVE_BASE
+#undef POC_REBASE_ACTIVE
+#undef TRICE_BIND_REBASE_SCOPE
+
+#endif
+
+#endif
diff --git a/internal/args/doc.go b/internal/args/doc.go
index 85dfb1b6c..d4b0db9e0 100644
--- a/internal/args/doc.go
+++ b/internal/args/doc.go
@@ -3,7 +3,7 @@
// Package args defines the Trice command-line interface.
//
// It owns subcommand flag sets, parses command-line arguments, and dispatches
-// to the corresponding runtime actions (log, help, version, add, insert, clean,
+// to the corresponding runtime actions (log, help, version, add, insert, bind, clean,
// generate, scan, display server, and shutdown).
//
// Handler is the package entry point used by cmd/trice.
diff --git a/internal/args/handler.go b/internal/args/handler.go
index 4f3203909..7c37394ad 100644
--- a/internal/args/handler.go
+++ b/internal/args/handler.go
@@ -93,6 +93,22 @@ func Handler(w io.Writer, fSys *afero.Afero, args []string) error {
//fmt.Println(id.StructuredLoggingValuesString)
//return err
return id.SubCmdIdInsert(w, fSys)
+ case "b", "bind":
+ fsScBind.SetOutput(w)
+ if err := fsScBind.Parse(subArgs); err != nil {
+ if errors.Is(err, flag.ErrHelp) {
+ return nil
+ }
+ return err
+ }
+ id.CompactSrcs()
+ id.ProcessAliases()
+ emitter.AddUserLabels()
+ if err := id.EvaluateIDRangeStrings(); err != nil {
+ return err
+ }
+ w = do.DistributeArgs(w, fSys, LogfileName, Verbose)
+ return id.SubCmdIdBind(w, fSys)
case "c", "clean":
msg.OnErr(fsScClean.Parse(subArgs))
id.CompactSrcs()
diff --git a/internal/args/handler_additional_test.go b/internal/args/handler_additional_test.go
index 816877d82..e9a13f451 100644
--- a/internal/args/handler_additional_test.go
+++ b/internal/args/handler_additional_test.go
@@ -4,6 +4,7 @@ package args
import (
"bytes"
+ "flag"
"io"
"strings"
"testing"
@@ -159,6 +160,7 @@ func TestInfoHelpersWriteText(t *testing.T) {
{"displayServerInfo", displayServerInfo, "sub-command 'ds|displayServer'"},
{"shutdownInfo", shutdownInfo, "sub-command 'sd|shutdown'"},
{"insertIDsInfo", insertIDsInfo, "sub-command 'i|insert'"},
+ {"bindIDsInfo", bindIDsInfo, "sub-command 'b|bind'"},
{"cleanIDsInfo", cleanIDsInfo, "sub-command 'c|clean'"},
{"addInfo", addInfo, "sub-command 'a|add'"},
{"generateInfo", generateInfo, "sub-command 'g|gen|generate'"},
@@ -238,6 +240,7 @@ func TestHandlerAddInsertCleanOnMissingSource(t *testing.T) {
tests := [][]string{
{"trice", "add", "-src", "missing-source-tree"},
{"trice", "insert", "-src", "missing-source-tree"},
+ {"trice", "bind", "-src", "missing-source-tree"},
{"trice", "clean", "-src", "missing-source-tree"},
}
for _, args := range tests {
@@ -249,19 +252,77 @@ func TestHandlerAddInsertCleanOnMissingSource(t *testing.T) {
}
}
-// TestLogLocationPathFlags verifies log-specific defaults and root overrides.
+// TestLogLocationPathFlags verifies the log-specific directory display limit.
func TestLogLocationPathFlags(t *testing.T) {
- oldPathKind := id.LIDisplayPathKind
- oldRoot := id.LIRoot
+ oldMaxDirs := id.LIMaxDirs
t.Cleanup(func() {
- id.LIDisplayPathKind = oldPathKind
- id.LIRoot = oldRoot
+ id.LIMaxDirs = oldMaxDirs
})
FlagsInit()
- assert.Equal(t, "legacy", fsScLog.Lookup("liPath").DefValue)
- assert.Equal(t, "", fsScLog.Lookup("liRoot").DefValue)
- assert.NoError(t, fsScLog.Parse([]string{"-liPath", "full", "-liRoot", "checkout"}))
- assert.Equal(t, "full", id.LIDisplayPathKind)
- assert.Equal(t, "checkout", id.LIRoot)
+ assert.Nil(t, fsScLog.Lookup("liPath"))
+ assert.Nil(t, fsScLog.Lookup("liRoot"))
+ assert.Equal(t, "0", fsScLog.Lookup("liMaxDirs").DefValue)
+ assert.NoError(t, fsScLog.Parse([]string{"-liMaxDirs", "3"}))
+ assert.Equal(t, 3, id.LIMaxDirs)
+}
+
+// TestGenerationLocationRootFlags verifies the shared root flag on all ID commands.
+func TestGenerationLocationRootFlags(t *testing.T) {
+ oldRoot := id.LIRoot
+ t.Cleanup(func() { id.LIRoot = oldRoot })
+
+ FlagsInit()
+ for _, flagSet := range []*flag.FlagSet{fsScAdd, fsScInsert, fsScBind, fsScClean} {
+ assert.Nil(t, flagSet.Lookup("liPath"))
+ assert.Equal(t, "", flagSet.Lookup("liRoot").DefValue)
+ }
+ assert.NoError(t, fsScInsert.Parse([]string{"-liRoot", "project"}))
+ assert.Equal(t, "project", id.LIRoot)
+}
+
+// TestHandlerBindGeneratesSidecar exercises the public command and bind-specific directory flag.
+func TestHandlerBindGeneratesSidecar(t *testing.T) {
+ FlagsInit()
+ fSys := &afero.Afero{Fs: afero.NewMemMapFs()}
+ assert.NoError(t, fSys.MkdirAll("project", 0o755))
+ assert.NoError(t, fSys.WriteFile("til.json", []byte("{}\n"), 0o644))
+ assert.NoError(t, fSys.WriteFile("li.json", []byte("{}\n"), 0o644))
+ const source = "trice(\"msg:handler=%d\\n\", 1);\n"
+ assert.NoError(t, fSys.WriteFile("project/module.c", []byte(source), 0o644))
+
+ var output bytes.Buffer
+ err := Handler(&output, fSys, []string{
+ "trice", "bind",
+ "-src", "project/module.c",
+ "-til", "til.json",
+ "-li", "li.json",
+ "-bindDir", "generated/triceIDs",
+ "-IDMin", "100",
+ "-IDMax", "199",
+ "-IDMethod", "upward",
+ "-defaultStampSize", "16",
+ })
+ assert.NoError(t, err)
+ bound, readErr := fSys.ReadFile("project/module.c")
+ assert.NoError(t, readErr)
+ assert.Contains(t, string(bound), `#include "trice_module_c_K`)
+ entries, readErr := fSys.ReadDir("generated/triceIDs")
+ assert.NoError(t, readErr)
+ assert.Len(t, entries, 1)
+}
+
+// TestHandlerBindHelp verifies that both public names and both standard help flags exit cleanly.
+func TestHandlerBindHelp(t *testing.T) {
+ fSys := &afero.Afero{Fs: afero.NewMemMapFs()}
+ for _, subcommand := range []string{"bind", "b"} {
+ for _, helpFlag := range []string{"-h", "--help"} {
+ FlagsInit()
+ var output bytes.Buffer
+ err := Handler(&output, fSys, []string{"trice", subcommand, helpFlag})
+ assert.NoError(t, err)
+ assert.Contains(t, output.String(), "Usage of bind:")
+ assert.NotContains(t, output.String(), "flag: help requested")
+ }
+ }
}
diff --git a/internal/args/helpinfo.go b/internal/args/helpinfo.go
index 3fb60da78..f703867d1 100644
--- a/internal/args/helpinfo.go
+++ b/internal/args/helpinfo.go
@@ -28,6 +28,7 @@ func scHelp(w io.Writer) error {
{allHelp || shutdownHelp, shutdownInfo},
{allHelp || versionHelp, versionInfo},
{allHelp || insertIDsHelp, insertIDsInfo},
+ {allHelp || bindIDsHelp, bindIDsInfo},
{allHelp || cleanIDsHelp, cleanIDsInfo},
}
for _, z := range x {
@@ -116,6 +117,17 @@ func insertIDsInfo(w io.Writer) error {
return e
}
+func bindIDsInfo(w io.Writer) error {
+ _, e := fmt.Fprintln(w, `sub-command 'b|bind': Generate stable Trice ID sidecars while keeping bind-owned source calls ID-free.
+# "trice bind" scans C/C++ source and headers, updates til.json and li.json with insert-compatible semantics,
+# adds a file-local sidecar include where it is safe, and writes generated headers below -bindDir.
+# Insert-owned files remain unchanged; mixed explicit and bind-style sites in one file are rejected.
+# Example: 'trice bind -src ./src -bindDir ./build/triceIDs'`)
+ fsScBind.SetOutput(w)
+ fsScBind.PrintDefaults()
+ return e
+}
+
func cleanIDsInfo(w io.Writer) error {
_, e := fmt.Fprintln(w, `sub-command 'c|clean': Set all [id|Id|ID](n) inside source tree dir to [id|Id|ID](0). Remove all iD(n).
# All in source code found IDs are added to til.json if not already there. Inside til.json differently used IDs are
diff --git a/internal/args/helptext.go b/internal/args/helptext.go
index d066c4da2..2bc33b6b3 100644
--- a/internal/args/helptext.go
+++ b/internal/args/helptext.go
@@ -29,9 +29,11 @@ func RenderHelpText(helpArgs ...string) (string, error) {
// space-before-tab whitespace without reformatting the historical help file.
func normalizeGeneratedHelpWhitespace(s string) string {
replacements := map[string]string{
- " \tCreate or use [path/].h and regenerate [path/].c for Trice ABC receive handling.": " Create or use [path/].h and regenerate [path/].c for Trice ABC receive handling.",
- " \tCreate a deprecated legacy til_rpc.c file. Use -abc= for new command-style communication.": " Create a deprecated legacy til_rpc.c file. Use -abc= for new command-style communication.",
- " \tCreate a deprecated legacy til_rpc.h file. Use -abc= for new command-style communication.": " Create a deprecated legacy til_rpc.h file. Use -abc= for new command-style communication.",
+ " \tCreate or use [path/].h and regenerate [path/].c for Trice ABC receive handling.": " Create or use [path/].h and regenerate [path/].c for Trice ABC receive handling.",
+ " \tCreate a deprecated legacy til_rpc.c file. Use -abc= for new command-style communication.": " Create a deprecated legacy til_rpc.c file. Use -abc= for new command-style communication.",
+ " \tCreate a deprecated legacy til_rpc.h file. Use -abc= for new command-style communication.": " Create a deprecated legacy til_rpc.h file. Use -abc= for new command-style communication.",
+ " \tMaximum number of parent directories displayed before the source filename. The filename is always shown; leading \"..\" components are omitted.": " Maximum number of parent directories displayed before the source filename. The filename is always shown; leading \"..\" components are omitted.",
+ " \tBase directory for File paths stored in li.json. Each File path is stored relative to this directory. A relative -liRoot value is resolved from the current working directory. Examples: when running in project/build, \"-liRoot ..\" stores ../src/main.c as src/main.c; without -liRoot, the directory containing li.json is used as the base.": " Base directory for File paths stored in li.json. Each File path is stored relative to this directory. A relative -liRoot value is resolved from the current working directory. Examples: when running in project/build, \"-liRoot ..\" stores ../src/main.c as src/main.c; without -liRoot, the directory containing li.json is used as the base.",
}
for old, newText := range replacements {
s = strings.ReplaceAll(s, old, newText)
@@ -49,6 +51,7 @@ func resetHelpGenerationDefaults() {
scanHelp = false
shutdownHelp = false
insertIDsHelp = false
+ bindIDsHelp = false
versionHelp = false
cleanIDsHelp = false
Verbose = false
@@ -56,7 +59,9 @@ func resetHelpGenerationDefaults() {
id.FnJSON = "til.json"
id.LIFnJSON = "li.json"
- id.LIPathKind = "base"
+ id.LIRoot = ""
+ id.LIMaxDirs = 0
+ id.BindDir = "./build/triceIDs"
id.Min = id.TriceID(1000)
id.Max = id.TriceID(7999)
id.SearchMethod = "random"
diff --git a/internal/args/init.go b/internal/args/init.go
index 910d80351..300638f39 100644
--- a/internal/args/init.go
+++ b/internal/args/init.go
@@ -46,6 +46,7 @@ func FlagsInit() {
addInit()
generateInit()
insertIDsInit()
+ bindIDsInit()
cleanIDsInit()
versionInit()
dsInit()
@@ -71,6 +72,7 @@ func helpInit() {
fsScHelp.BoolVar(&shutdownHelp, "sd", false, "Show sd|shutdown specific help.")
fsScHelp.BoolVar(&insertIDsHelp, "insert", false, "Show i|insert specific help.")
fsScHelp.BoolVar(&insertIDsHelp, "i", false, "Show i|insert specific help.")
+ fsScHelp.BoolVar(&bindIDsHelp, "bind", false, "Show bind specific help.")
fsScHelp.BoolVar(&versionHelp, "version", false, "Show ver|version specific help.")
fsScHelp.BoolVar(&versionHelp, "ver", false, "Show ver|version specific help.")
fsScHelp.BoolVar(&cleanIDsHelp, "clean", false, "Show c|clean specific help.")
@@ -210,12 +212,7 @@ func generateInit() {
func insertIDsInit() {
fsScInsert = flag.NewFlagSet("insert", flag.ExitOnError) // sub-command
- flagsRefreshAndUpdate(fsScInsert)
- flagTriceIDRange(fsScInsert)
- fsScInsert.Var(&id.Min, "IDMin", "Lower end of ID range for normal trices.")
- fsScInsert.Var(&id.Max, "IDMax", "Upper end of ID range for normal trices.")
- fsScInsert.IntVar(&id.DefaultStampSize, "defaultStampSize", 0, "Default stamp size for written TRICE macros without id(0), Id(0 or ID(0). Valid values are 0, 16 or 32.")
- fsScInsert.StringVar(&id.SearchMethod, "IDMethod", "random", "Search method for new ID's in range- Options are 'upward', 'downward' & 'random'.")
+ flagsInsertAndBind(fsScInsert)
fsScInsert.BoolVar(&id.ExtendMacrosWithParamCount, "addParamCount", false, "Extend TRICE macro names with the parameter count _n to enable compile time checks.")
fsScInsert.BoolVar(&id.TriceCacheEnabled, "cache", false, `Use "~/.trice/cache/" for fast ID insert (EXPERIMENTAL!). The folder must exist.`)
fsScInsert.BoolVar(&id.SpaceInsideParenthesis, "spaceInsideParenthesis", false, "Add space inside Trice braces: `trice(iD(123), \"...);`. Use this if your default code auto-formatting is with space inside braces.")
@@ -223,6 +220,31 @@ func insertIDsInit() {
flagUserLabel(fsScInsert)
}
+// bindIDsInit registers the insert-compatible semantic options plus the sidecar output directory.
+func bindIDsInit() {
+ fsScBind = flag.NewFlagSet("bind", flag.ContinueOnError)
+ flagsInsertAndBind(fsScBind)
+ fsScBind.StringVar(&id.BindDir, "bindDir", "./build/triceIDs", "Output directory for generated Trice bind sidecar headers.")
+ flagUserLabel(fsScBind)
+}
+
+// flagsInsertAndBind registers options whose parser, ID, and list semantics are shared by insert and bind.
+func flagsInsertAndBind(p *flag.FlagSet) {
+ flagsRefreshAndUpdate(p)
+ flagTriceIDRange(p)
+ p.Var(&id.Min, "IDMin", "Lower end of ID range for normal trices.")
+ p.Var(&id.Max, "IDMax", "Upper end of ID range for normal trices.")
+ defaultStampDescription := "Default stamp size for uppercase TRICE macros without id(0), Id(0), or ID(0). Valid values are 0, 16, or 32."
+ searchMethodDescription := "Search method for new IDs in range. Options are 'upward', 'downward', and 'random'."
+ if p.Name() == "insert" {
+ // Preserve the established insert help text byte-for-byte while sharing its flag registration.
+ defaultStampDescription = "Default stamp size for written TRICE macros without id(0), Id(0 or ID(0). Valid values are 0, 16 or 32."
+ searchMethodDescription = "Search method for new ID's in range- Options are 'upward', 'downward' & 'random'."
+ }
+ p.IntVar(&id.DefaultStampSize, "defaultStampSize", 0, defaultStampDescription)
+ p.StringVar(&id.SearchMethod, "IDMethod", "random", searchMethodDescription)
+}
+
func cleanIDsInit() {
fsScClean = flag.NewFlagSet("clean", flag.ContinueOnError) // sub-command
flagsRefreshAndUpdate(fsScClean)
@@ -376,15 +398,13 @@ The specified JSON file is needed to display the ID coded trices during runtime
func flagLIList(p *flag.FlagSet) {
flagLIFile(p)
- p.StringVar(&id.LIPathKind, "liPath", "base", `How to store location information paths inside li.json: base, relative, path/relative or full. When relative is given, the location information is stored relative to the current location. If a path is given additionally, like ../../relative the path is added to the location information.
-`) // flag
+ p.StringVar(&id.LIRoot, "liRoot", "", `Base directory for File paths stored in li.json. Each File path is stored relative to this directory. A relative -liRoot value is resolved from the current working directory. Examples: when running in project/build, "-liRoot .." stores ../src/main.c as src/main.c; without -liRoot, the directory containing li.json is used as the base.`) // flag
}
-// flagLogLIList registers location-file flags with log-specific display semantics.
+// flagLogLIList registers location-file flags with log-specific display limits.
func flagLogLIList(p *flag.FlagSet) {
flagLIFile(p)
- p.StringVar(&id.LIDisplayPathKind, "liPath", "legacy", `How to display location information paths: legacy, base, relative or full. Legacy displays File exactly as stored. Relative uses Path when available. Full resolves Path against -liRoot.`) // flag
- p.StringVar(&id.LIRoot, "liRoot", "", `Root directory used to resolve relative location paths for -liPath full. The default is the directory containing li.json.`) // flag
+ p.IntVar(&id.LIMaxDirs, "liMaxDirs", 0, `Maximum number of parent directories displayed before the source filename. The filename is always shown; leading ".." components are omitted.`) // flag
}
// flagLIFile registers the shared location-information file aliases.
diff --git a/internal/args/tricehelpall_test.go b/internal/args/tricehelpall_test.go
index ce06cbbf1..fa2c8a42f 100644
--- a/internal/args/tricehelpall_test.go
+++ b/internal/args/tricehelpall_test.go
@@ -25,6 +25,7 @@ func TestHelpAll(t *testing.T) {
"sub-command 'sd|shutdown': Ends display server at IPA:IPP, works also on a remote machine.",
"sub-command 'ver|version': For displaying version information.",
"sub-command 'i|insert': For updating til.json and inserting IDs into source files.",
+ "sub-command 'b|bind': Generate stable Trice ID sidecars while keeping bind-owned source calls ID-free.",
} {
if !strings.Contains(got, snippet) {
t.Fatalf("help -all output misses %q\n%s", snippet, got)
diff --git a/internal/args/vars.go b/internal/args/vars.go
index 45ff63cb5..cf1917f10 100644
--- a/internal/args/vars.go
+++ b/internal/args/vars.go
@@ -48,6 +48,9 @@ var (
// fsScInsert is flag set for sub command 'insert' for updating src tree and ID list.
fsScInsert *flag.FlagSet
+ // fsScBind is the flag set for generating stable ID sidecars without instrumenting user sources.
+ fsScBind *flag.FlagSet
+
// fsScHelp is flag set for sub command 'help'.
fsScHelp *flag.FlagSet
@@ -78,6 +81,7 @@ var (
scanHelp bool // flag for partial help
shutdownHelp bool // flag for partial help
insertIDsHelp bool // flag for partial help
+ bindIDsHelp bool // flag for partial help
versionHelp bool // flag for partial help
cleanIDsHelp bool // flag for partial help
)
diff --git a/internal/decoder/decoder_test.go b/internal/decoder/decoder_test.go
index a1cd310d9..a04a3e2c0 100644
--- a/internal/decoder/decoder_test.go
+++ b/internal/decoder/decoder_test.go
@@ -236,11 +236,11 @@ func TestHandleTypeX0(t *testing.T) {
func TestLocationInformation(t *testing.T) {
oldFmt := LocationInformationFormatString
oldVerbose := Verbose
- oldPathKind := id.LIDisplayPathKind
+ oldMaxDirs := id.LIMaxDirs
t.Cleanup(func() {
LocationInformationFormatString = oldFmt
Verbose = oldVerbose
- id.LIDisplayPathKind = oldPathKind
+ id.LIMaxDirs = oldMaxDirs
})
li := id.TriceIDLookUpLI{
@@ -248,7 +248,7 @@ func TestLocationInformation(t *testing.T) {
}
LocationInformationFormatString = "%s:%d "
- id.LIDisplayPathKind = "base"
+ id.LIMaxDirs = 0
assert.Equal(t, "main.c:77 ", LocationInformation(12, li))
assert.Equal(t, ":0 ", LocationInformation(13, li))
diff --git a/internal/emitter/emitter_additional_test.go b/internal/emitter/emitter_additional_test.go
index 804c10d61..e007e1cc2 100644
--- a/internal/emitter/emitter_additional_test.go
+++ b/internal/emitter/emitter_additional_test.go
@@ -70,7 +70,6 @@ type emitterSnapshot struct {
userLabel ArrayFlag
userLabelsAdded bool
tags []tagSnapshot
- exit bool
logFlags int
}
@@ -118,7 +117,6 @@ func snapshotEmitterState() emitterSnapshot {
userLabel: append(ArrayFlag(nil), UserLabel...),
userLabelsAdded: userLabelsAdded,
tags: cloneTags(Tags),
- exit: exit,
logFlags: log.Flags(),
}
}
@@ -141,7 +139,6 @@ func restoreEmitterState(s emitterSnapshot) {
UserLabel = append(ArrayFlag(nil), s.userLabel...)
userLabelsAdded = s.userLabelsAdded
restoreTags(s.tags)
- exit = s.exit
log.SetFlags(s.logFlags)
}
@@ -504,48 +501,51 @@ func TestShowAllColorsSmoke(t *testing.T) {
}
}
-// TestScDisplayServerStartAndShutdown verifies the expected behavior.
+// TestScDisplayServerStartAndShutdown verifies two complete server lifecycles.
+// Running twice in one process guards against accidental use of net/rpc's
+// package-global server registry, which cannot register DisplayServer twice.
func TestScDisplayServerStartAndShutdown(t *testing.T) {
requireWindowsTCPTestsEnabled(t)
s := snapshotEmitterState()
t.Cleanup(func() { restoreEmitterState(s) })
- addr := pickLoopbackAddr(t)
- host, port, err := net.SplitHostPort(addr)
- if err != nil {
- t.Fatalf("SplitHostPort failed: %v", err)
- }
- IPAddr = host
- IPPort = port
- ColorPalette = "none"
- exit = false
+ for cycle := 1; cycle <= 2; cycle++ {
+ addr := pickLoopbackAddr(t)
+ host, port, err := net.SplitHostPort(addr)
+ if err != nil {
+ t.Fatalf("cycle %d: SplitHostPort failed: %v", cycle, err)
+ }
+ IPAddr = host
+ IPPort = port
+ ColorPalette = "none"
- var serverOut bytes.Buffer
- errCh := make(chan error, 1)
- go func() {
- errCh <- ScDisplayServer(&serverOut)
- }()
+ var serverOut bytes.Buffer
+ errCh := make(chan error, 1)
+ go func() {
+ errCh <- ScDisplayServer(&serverOut)
+ }()
- waitForTCPListener(t, addr)
+ waitForTCPListener(t, addr)
- if err := ScShutdownRemoteDisplayServer(io.Discard, 0, host, port); err != nil {
- t.Fatalf("shutdown rpc failed: %v", err)
- }
+ if err := ScShutdownRemoteDisplayServer(io.Discard, 0, host, port); err != nil {
+ t.Fatalf("cycle %d: shutdown rpc failed: %v", cycle, err)
+ }
- select {
- case err := <-errCh:
- if err == nil {
- t.Fatalf("expected listener close error from ScDisplayServer")
+ select {
+ case err := <-errCh:
+ if err == nil {
+ t.Fatalf("cycle %d: expected listener close error from ScDisplayServer", cycle)
+ }
+ case <-time.After(3 * time.Second):
+ t.Fatalf("cycle %d: ScDisplayServer did not return after shutdown", cycle)
}
- case <-time.After(3 * time.Second):
- t.Fatalf("ScDisplayServer did not return after shutdown")
- }
- if !strings.Contains(serverOut.String(), "displayServer @ "+addr) {
- t.Fatalf("missing startup output: %q", serverOut.String())
- }
- if !strings.Contains(serverOut.String(), "displayServer shutdown") {
- t.Fatalf("missing shutdown output: %q", serverOut.String())
+ if !strings.Contains(serverOut.String(), "displayServer @ "+addr) {
+ t.Fatalf("cycle %d: missing startup output: %q", cycle, serverOut.String())
+ }
+ if !strings.Contains(serverOut.String(), "displayServer shutdown") {
+ t.Fatalf("cycle %d: missing shutdown output: %q", cycle, serverOut.String())
+ }
}
}
diff --git a/internal/emitter/server.go b/internal/emitter/server.go
index bdfb2aeea..921ffc345 100644
--- a/internal/emitter/server.go
+++ b/internal/emitter/server.go
@@ -3,6 +3,7 @@
package emitter
import (
+ "errors"
"fmt"
"io"
"log"
@@ -22,6 +23,10 @@ import (
// DisplayServer exposes RPC methods for remote line rendering.
type DisplayServer struct { // must be exported for rpc.Register
Display colorDisplay
+
+ // listener belongs exclusively to this server instance. Shutdown closes it
+ // to unblock the matching accept loop without package-global coordination.
+ listener net.Listener
}
// WriteLine is the exported server method for string display, if trice tool acts as display server.
@@ -60,47 +65,38 @@ func (p *DisplayServer) Shutdown(ts []int64, _ *int64) error {
}
p.Display.WriteLine([]string{""})
p.Display.WriteLine([]string{""})
- defer func() {
- if listener != nil {
- msg.OnErr(listener.Close())
- }
- exit = true // do not set true before closing listener, otherwise panic!
- }()
+ if p.listener != nil {
+ msg.OnErr(p.listener.Close())
+ }
return nil
}
-var (
- // exit terminates ScDisplayServer accept loop after listener close.
- exit = false
-
- // conn stores the last accepted connection.
- conn net.Conn
-
- // listener is closed by Shutdown.
- listener net.Listener
-)
-
// ScDisplayServer serves RPC display requests until the listener is closed.
func ScDisplayServer(w io.Writer) error {
a := fmt.Sprintf("%s:%s", IPAddr, IPPort)
fmt.Fprintln(w, "displayServer @", a)
- srv := new(DisplayServer)
- srv.Display = *newColorDisplay(w, ColorPalette)
- msg.OnErr(rpc.Register(srv))
- var err error
- listener, err = net.Listen("tcp", a)
+ srv := &DisplayServer{Display: *newColorDisplay(w, ColorPalette)}
+ rpcServer := rpc.NewServer()
+ if err := rpcServer.Register(srv); err != nil {
+ fmt.Fprintln(w, err)
+ return err
+ }
+ listener, err := net.Listen("tcp", a)
if nil != err {
fmt.Fprintln(w, err)
return err
}
+ // The listener is assigned before any RPC handler can run and remains
+ // immutable afterwards. net.Listener supports concurrent Accept and Close.
+ srv.listener = listener
for {
- conn, err = listener.Accept()
+ conn, err := listener.Accept()
if nil != err {
- if exit {
+ if errors.Is(err, net.ErrClosed) {
return err
}
continue
}
- go rpc.ServeConn(conn)
+ go rpcServer.ServeConn(conn)
}
}
diff --git a/internal/id/Update.go b/internal/id/Update.go
index 7e6536b48..e92b58adf 100644
--- a/internal/id/Update.go
+++ b/internal/id/Update.go
@@ -160,7 +160,7 @@ func refreshIDs(w io.Writer, fileName, text string, ilu TriceIDLookUp, flu trice
subs := maskTriceInsertDisabledRegions(text) // create a copy of text and assign it to subs
line := 1 // source code lines start with 1 for some reason
var li TriceLI
- li.File = filepath.Base(fileName)
+ li.File = ToLIFile(fileName)
for {
loc := matchTrice(subs) // find the next TRICE location in file
if nil == loc {
diff --git a/internal/id/addIDs.go b/internal/id/addIDs.go
index 45fdf34e7..dc08d769a 100644
--- a/internal/id/addIDs.go
+++ b/internal/id/addIDs.go
@@ -7,9 +7,10 @@ package id
import (
"fmt"
"io"
- "log"
"os"
+ "path"
"path/filepath"
+ "strings"
"github.com/rokath/trice/pkg/ant"
"github.com/spf13/afero"
@@ -20,106 +21,75 @@ func SubCmdIdAdd(w io.Writer, fSys *afero.Afero) error {
return IDData.cmdSwitchTriceIDs(w, fSys, triceIDAdding)
}
-// ToLIPath converts path according to global variable LIPathKind into a base or relative or absolute path.
-func ToLIPath(path string) string {
- liPathK := filepath.Base(LIPathKind) // strip leading path info
- switch liPathK[:1] {
- case "r": // relative
- basePath := LIPathKind[:len(LIPathKind)-len(liPathK)]
- reloc, err := filepath.Rel(basePath, path)
- if err != nil {
- log.Fatal(err)
- }
- reloc = filepath.ToSlash(reloc)
- return reloc //filepath.Clean(reloc + path)
- case "f": // full
- full, err := filepath.Abs(path)
- if err != nil {
- fmt.Println("could not get absolute path of", path, "- using base name")
- return filepath.Base(path)
- }
- return full
- default:
- fmt.Println("ignoring unknown liPath", LIPathKind, "- using base name")
- fallthrough
- case "b": // base
- return filepath.Base(path)
+// ToLIFile returns a portable source path relative to the configured location root.
+// If the source and root cannot be made relative, as on different Windows
+// volumes, the normalized absolute source path is retained.
+func ToLIFile(sourcePath string) string {
+ absoluteSourcePath, err := filepath.Abs(sourcePath)
+ if err != nil {
+ return normalizeLocationPath(sourcePath)
}
-}
-
-// newTriceLI creates location information without losing the complete source path.
-func newTriceLI(sourcePath string, line int) TriceLI {
- return TriceLI{
- File: ToLIPath(sourcePath),
- Path: sourcePathRelativeToLI(sourcePath),
- Line: line,
+ relativePath, err := filepath.Rel(locationRoot(), absoluteSourcePath)
+ if err != nil {
+ return normalizeLocationPath(absoluteSourcePath)
}
+ return normalizeLocationPath(relativePath)
}
-// sourcePathRelativeToLI normalizes sourcePath relative to the directory containing li.json.
-func sourcePathRelativeToLI(sourcePath string) string {
- liRoot, err := filepath.Abs(filepath.Dir(LIFnJSON))
- if err != nil {
- return filepath.ToSlash(filepath.Clean(sourcePath))
- }
- absoluteSourcePath, err := filepath.Abs(sourcePath)
- if err != nil {
- return filepath.ToSlash(filepath.Clean(sourcePath))
+// locationRoot resolves an explicit root from the current working directory.
+// Without an explicit root, the directory containing li.json is the anchor.
+func locationRoot() string {
+ root := LIRoot
+ if root == "" {
+ root = filepath.Dir(LIFnJSON)
}
- relativePath, err := filepath.Rel(liRoot, absoluteSourcePath)
+ absoluteRoot, err := filepath.Abs(root)
if err != nil {
- return filepath.ToSlash(filepath.Clean(sourcePath))
+ return filepath.Clean(root)
}
- return filepath.ToSlash(filepath.Clean(relativePath))
+ return filepath.Clean(absoluteRoot)
}
-// LocationFile selects the source path representation requested for log output.
-func LocationFile(li TriceLI) string {
- switch LIDisplayPathKind {
- case "base":
- if li.Path != "" {
- return filepath.Base(filepath.FromSlash(li.Path))
- }
- return filepath.Base(li.File)
- case "relative":
- if li.Path != "" {
- return li.Path
- }
- return li.File
- case "full":
- return fullLocationFile(li)
- case "legacy":
- fallthrough
- default:
- return li.File
+// normalizeLocationPath makes a cleaned path portable without resolving symlinks.
+func normalizeLocationPath(sourcePath string) string {
+ return filepath.ToSlash(filepath.Clean(sourcePath))
+}
+
+// newTriceLI creates location information with one canonical source path.
+func newTriceLI(sourcePath string, line int) TriceLI {
+ return TriceLI{
+ File: ToLIFile(sourcePath),
+ Line: line,
}
}
-// fullLocationFile resolves portable location paths against the configured local root.
-func fullLocationFile(li TriceLI) string {
- path := li.Path
- if path == "" {
- cleanFile := filepath.Clean(li.File)
- if filepath.IsAbs(cleanFile) {
- return cleanFile
- }
- if cleanFile == filepath.Base(cleanFile) {
- return li.File
+// LocationFile limits the displayed path to the requested trailing directories.
+// Leading parent components only describe the storage root and are never shown.
+func LocationFile(li TriceLI) string {
+ cleanPath := path.Clean(strings.ReplaceAll(li.File, `\`, "/"))
+ parts := strings.Split(cleanPath, "/")
+ components := parts[:0]
+ for _, component := range parts {
+ if component == "" || component == "." {
+ continue
}
- path = filepath.ToSlash(cleanFile)
+ components = append(components, component)
}
- if filepath.IsAbs(filepath.FromSlash(path)) {
- return filepath.Clean(filepath.FromSlash(path))
+ for len(components) > 1 && components[0] == ".." {
+ components = components[1:]
}
- root := LIRoot
- if root == "" {
- root = filepath.Dir(LIFnJSON)
+ if len(components) == 0 {
+ return path.Base(cleanPath)
}
- absoluteRoot, err := filepath.Abs(root)
- if err != nil {
- return li.File
+ maxDirs := LIMaxDirs
+ if maxDirs < 0 {
+ maxDirs = 0
+ }
+ first := len(components) - 1 - maxDirs
+ if first < 0 {
+ first = 0
}
- return filepath.Clean(filepath.Join(absoluteRoot, filepath.FromSlash(path)))
+ return strings.Join(components[first:], "/")
}
// triceIDAdding reads file, processes it and writes it NOT back.
@@ -132,6 +102,6 @@ func triceIDAdding(w io.Writer, fSys *afero.Afero, path string, fileInfo os.File
if Verbose {
fmt.Fprintln(w, path)
}
- _, _, err = zeroTriceIDs(w, ToLIPath(path), path, in, a) // just to get the IDs, no write back
+ _, _, err = zeroTriceIDs(w, ToLIFile(path), path, in, a) // just to get the IDs, no write back
return err
}
diff --git a/internal/id/addIDs_test.go b/internal/id/addIDs_test.go
index e0d07f720..dc39c83d4 100644
--- a/internal/id/addIDs_test.go
+++ b/internal/id/addIDs_test.go
@@ -4,7 +4,10 @@ package id_test
import (
"encoding/json"
+ "os"
"path/filepath"
+ "runtime"
+ "strings"
"testing"
"github.com/rokath/trice/internal/args"
@@ -13,22 +16,29 @@ import (
"github.com/stretchr/testify/require"
)
-// assertLocationJSONEqual compares legacy location fields while allowing generated Path metadata.
+// assertLocationJSONEqual compares generated location entries and rejects obsolete Path fields.
+// Older behavioral fixtures name only the expected source suffix; dedicated
+// Issue 712 tests above verify the complete root-relative path semantics.
func assertLocationJSONEqual(t *testing.T, expected string, actual []byte) {
t.Helper()
var expectedLI TriceIDLookUpLI
var actualLI TriceIDLookUpLI
require.NoError(t, json.Unmarshal([]byte(expected), &expectedLI))
require.NoError(t, json.Unmarshal(actual, &actualLI))
- for triceID, location := range expectedLI {
- location.Path = ""
- expectedLI[triceID] = location
- }
- for triceID, location := range actualLI {
- location.Path = ""
- actualLI[triceID] = location
+ for triceID, expectedLocation := range expectedLI {
+ actualLocation, ok := actualLI[triceID]
+ if !ok || expectedLocation.File == actualLocation.File {
+ continue
+ }
+ expectedFile := strings.TrimPrefix(filepath.ToSlash(expectedLocation.File), "./")
+ actualFile := filepath.ToSlash(actualLocation.File)
+ if strings.HasSuffix(actualFile, "/"+expectedFile) {
+ expectedLocation.File = actualLocation.File
+ expectedLI[triceID] = expectedLocation
+ }
}
assert.Equal(t, expectedLI, actualLI)
+ assert.NotContains(t, string(actual), `"Path"`)
}
// TestAddWithLIExtension verifies the expected behavior.
@@ -54,7 +64,7 @@ func TestAddWithLIExtension(t *testing.T) {
assert.Nil(t, FSys.WriteFile(sFn, []byte(src), 0777))
// action
- assert.Nil(t, args.Handler(W, FSys, []string{"trice", "add", "-v", "-src", sFn, "-til", FnJSON, "-li", LIFnJSON}))
+ assert.Nil(t, args.Handler(W, FSys, []string{"trice", "add", "-v", "-src", sFn, "-til", FnJSON, "-li", LIFnJSON, "-liRoot", "."}))
// check un-modified src file
expSrc := src
@@ -82,27 +92,32 @@ func TestAddWithLIExtension(t *testing.T) {
assertLocationJSONEqual(t, expLI, actLI)
}
-// TestToLIPath verifies the expected behavior.
-func TestToLIPath(t *testing.T) {
+// TestToLIFile verifies default and explicit location roots.
+func TestToLIFile(t *testing.T) {
defer Setup(t)()
- LIPathKind = "base"
- assert.Equal(t, "demo.c", ToLIPath(filepath.Join("dir", "demo.c")))
+ LIFnJSON = filepath.Join(Proj, "build", "demoLI.json")
+ sourcePath := filepath.Join(Proj, "examples", "TriceABC", "src", "main.c")
+ LIRoot = ""
+ assert.Equal(t, "../examples/TriceABC/src/main.c", ToLIFile(sourcePath))
- LIPathKind = filepath.Join("root", "relative")
- assert.Equal(t, filepath.ToSlash(filepath.Join("sub", "demo.c")), ToLIPath(filepath.Join("root", "sub", "demo.c")))
+ LIRoot = Proj
+ assert.Equal(t, "examples/TriceABC/src/main.c", ToLIFile(sourcePath))
- LIPathKind = "full"
- got := ToLIPath("demo.c")
- assert.True(t, filepath.IsAbs(got))
- assert.Equal(t, "demo.c", filepath.Base(got))
+ workingDirectory, err := os.Getwd()
+ require.NoError(t, err)
+ LIRoot = "."
+ assert.Equal(t, "nested/main.c", ToLIFile(filepath.Join(workingDirectory, "nested", ".", "main.c")))
- LIPathKind = "weird"
- assert.Equal(t, "demo.c", ToLIPath(filepath.Join("dir", "demo.c")))
+ if runtime.GOOS == "windows" {
+ LIRoot = `C:\project`
+ assert.Equal(t, "D:/sources/main.c", ToLIFile(`D:\sources\main.c`))
+ assert.Equal(t, "//server/share/sources/main.c", ToLIFile(`\\server\share\sources\main.c`))
+ }
}
-// TestIssue708GeneratedPaths verifies that duplicate basenames retain distinct portable paths.
-func TestIssue708GeneratedPaths(t *testing.T) {
+// TestIssue712GeneratedPaths verifies that all ID commands retain canonical paths.
+func TestIssue712GeneratedPaths(t *testing.T) {
defer Setup(t)()
firstSource := filepath.Join(Proj, "one", "main.c")
@@ -113,14 +128,11 @@ func TestIssue708GeneratedPaths(t *testing.T) {
require.NoError(t, FSys.WriteFile(secondSource, []byte(`trice(iD(102), "two");`), 0o600))
commands := []struct {
- name string
- pathKind string
- firstFile string
- secondFile string
+ name string
}{
- {name: "add", pathKind: "base", firstFile: "main.c", secondFile: "main.c"},
- {name: "clean", pathKind: "base", firstFile: "main.c", secondFile: "main.c"},
- {name: "insert", pathKind: filepath.Join(Proj, "relative"), firstFile: "one/main.c", secondFile: "two/main.c"},
+ {name: "add"},
+ {name: "clean"},
+ {name: "insert"},
}
for _, command := range commands {
require.NoError(t, args.Handler(W, FSys, []string{
@@ -129,40 +141,76 @@ func TestIssue708GeneratedPaths(t *testing.T) {
"-src", secondSource,
"-til", FnJSON,
"-li", LIFnJSON,
- "-liPath", command.pathKind,
+ "-liRoot", Proj,
}))
encodedLocations, err := FSys.ReadFile(LIFnJSON)
require.NoError(t, err)
var locations TriceIDLookUpLI
require.NoError(t, json.Unmarshal(encodedLocations, &locations))
- assert.Equal(t, TriceLI{File: command.firstFile, Path: "one/main.c", Line: 1}, locations[101])
- assert.Equal(t, TriceLI{File: command.secondFile, Path: "two/main.c", Line: 1}, locations[102])
+ assert.Equal(t, TriceLI{File: "one/main.c", Line: 1}, locations[101])
+ assert.Equal(t, TriceLI{File: "two/main.c", Line: 1}, locations[102])
+ assert.NotContains(t, string(encodedLocations), `"Path"`)
}
}
-// TestIssue708LocationFileSelectors verifies new files and backward-compatible old entries.
-func TestIssue708LocationFileSelectors(t *testing.T) {
+// TestIssue712LocationFileLimits verifies trailing-directory selection.
+func TestIssue712LocationFileLimits(t *testing.T) {
defer Setup(t)()
- location := TriceLI{File: "stored/legacy.c", Path: "src/feature/main.c", Line: 7}
- LIDisplayPathKind = "legacy"
- assert.Equal(t, "stored/legacy.c", LocationFile(location))
+ location := TriceLI{File: "examples/TriceABC/src/main.c", Line: 7}
+ expected := []string{
+ "main.c",
+ "src/main.c",
+ "TriceABC/src/main.c",
+ "examples/TriceABC/src/main.c",
+ }
+ for maxDirs, want := range expected {
+ LIMaxDirs = maxDirs
+ assert.Equal(t, want, LocationFile(location))
+ }
+
+ LIMaxDirs = 3
+ assert.Equal(t, "src/main.c", LocationFile(TriceLI{File: "src/main.c"}))
+ assert.Equal(t, "examples/TriceABC/src/main.c", LocationFile(TriceLI{File: "../../../examples/TriceABC/src/main.c"}))
+ assert.Equal(t, "examples/TriceABC/src/main.c", LocationFile(TriceLI{File: "/checkout/examples/TriceABC/src/main.c"}))
+ assert.Equal(t, "examples/TriceABC/src/main.c", LocationFile(TriceLI{File: `D:\checkout\examples\TriceABC\src\main.c`}))
- LIDisplayPathKind = "base"
+ LIMaxDirs = -1
assert.Equal(t, "main.c", LocationFile(location))
+}
- LIDisplayPathKind = "relative"
- assert.Equal(t, "src/feature/main.c", LocationFile(location))
- assert.Equal(t, "old/source.c", LocationFile(TriceLI{File: "old/source.c"}))
+// TestIssue712LocationJSONHasOnlyFileAndLine verifies the serialized schema.
+func TestIssue712LocationJSONHasOnlyFileAndLine(t *testing.T) {
+ encoded, err := json.Marshal(TriceLI{File: "src/main.c", Line: 42})
+ require.NoError(t, err)
+ assert.JSONEq(t, `{"File":"src/main.c","Line":42}`, string(encoded))
+ assert.False(t, strings.Contains(string(encoded), "Path"))
+}
- LIDisplayPathKind = "full"
- LIFnJSON = filepath.Join(Proj, "logs", "li.json")
- LIRoot = ""
- assert.Equal(t, filepath.Join(Proj, "logs", "src", "feature", "main.c"), LocationFile(location))
+// TestIssue712ObsoletePathMigration verifies rewriting without source changes.
+func TestIssue712ObsoletePathMigration(t *testing.T) {
+ defer Setup(t)()
- LIRoot = filepath.Join(Proj, "checkout")
- assert.Equal(t, filepath.Join(Proj, "checkout", "src", "feature", "main.c"), LocationFile(location))
- assert.Equal(t, filepath.Join(Proj, "checkout", "old", "source.c"), LocationFile(TriceLI{File: "old/source.c"}))
- assert.Equal(t, "source.c", LocationFile(TriceLI{File: "source.c"}))
+ const oldLocationJSON = `{
+ "17": {
+ "File": "src/main.c",
+ "Path": "src/main.c",
+ "Line": 42
+ }
+}`
+ require.NoError(t, FSys.WriteFile(LIFnJSON, []byte(oldLocationJSON), 0o600))
+ emptySource := filepath.Join(Proj, "empty.c")
+ require.NoError(t, FSys.WriteFile(emptySource, nil, 0o600))
+
+ require.NoError(t, args.Handler(W, FSys, []string{
+ "trice", "add",
+ "-src", emptySource,
+ "-til", FnJSON,
+ "-li", LIFnJSON,
+ }))
+
+ actual, err := FSys.ReadFile(LIFnJSON)
+ require.NoError(t, err)
+ assertLocationJSONEqual(t, `{"17":{"File":"src/main.c","Line":42}}`, actual)
}
diff --git a/internal/id/bindAdvanced.go b/internal/id/bindAdvanced.go
new file mode 100644
index 000000000..3b387121e
--- /dev/null
+++ b/internal/id/bindAdvanced.go
@@ -0,0 +1,1218 @@
+// SPDX-License-Identifier: MIT
+
+package id
+
+import (
+ "fmt"
+ "regexp"
+ "sort"
+ "strings"
+)
+
+const (
+ bindRebaseBeginMarker = "/* trice-bind: generated rebase begin "
+ bindRebaseEndMarker = "/* trice-bind: generated rebase end "
+ bindRebaseBlockEnd = "/* trice-bind: generated rebase block end */"
+ bindRebaseIncludeMarker = "// trice-bind: generated rebase "
+)
+
+var (
+ // bindRebaseGeneratedInclude recognizes the owner-sidecar line inside the
+ // legacy verbose source representation retained for migration compatibility.
+ // Horizontal directive whitespace may be normalized by C formatters and is
+ // therefore not part of the generated ownership identity.
+ bindRebaseGeneratedInclude = regexp.MustCompile(`^[\t ]*#[\t ]*include[\t ]+"trice_[A-Za-z0-9_]+_(K[0-9A-F]{16})\.h"[\t ]+// trice-bind: generated rebase (begin|end)[\t ]*$`)
+ // bindRebaseCompactInclude recognizes the complete current source boundary
+ // and captures identities that must agree before it may be removed. As with
+ // the legacy form, formatter-controlled horizontal whitespace is ignored.
+ bindRebaseCompactInclude = regexp.MustCompile(`^[\t ]*#[\t ]*include[\t ]+"(trice_[A-Za-z0-9_]+_(K[0-9A-F]{16})_(R[0-9]+)_(begin|end)\.h)"[\t ]+// trice-bind: generated rebase (begin|end) (K[0-9A-F]{16}_R[0-9]+)[\t ]*$`)
+ // bindRebaseHelperInclude catches edited helper includes that no longer
+ // match the exact removable form above.
+ bindRebaseHelperInclude = regexp.MustCompile(`^[\t ]*#[\t ]*include[\t ]+"trice_[A-Za-z0-9_]+_K[0-9A-F]{16}_R[0-9]+_(begin|end)\.h"`)
+ bindRebaseScope = regexp.MustCompile(`^K[0-9A-F]{16}_R[0-9]+$`)
+)
+
+// bindGeneratedBlock identifies one complete generator-owned source artifact,
+// either a legacy verbose block or one current compact include line.
+type bindGeneratedBlock struct {
+ start int
+ end int
+ kind string
+ scope string
+ line int
+ helperName string
+}
+
+// bindOccurrence is one direct Trice call or one supported wrapper invocation.
+type bindOccurrence struct {
+ start int
+ end int
+ line int
+ column int
+ refs []bindSiteReference
+ comment string
+ wrapper bool
+ macroTerminated bool
+}
+
+// stripBindRebaseArtifacts removes only complete, structurally valid blocks
+// emitted by trice bind. Malformed markers remain byte-for-byte untouched and
+// become fatal diagnostics so user text can never be removed heuristically.
+func stripBindRebaseArtifacts(path string, source []byte) ([]byte, []bindGeneratedBlock, []bindDiagnostic, bool) {
+ blocks, diagnostics := scanBindRebaseArtifacts(path, source)
+ if len(diagnostics) > 0 {
+ return source, nil, diagnostics, false
+ }
+ if len(blocks) == 0 {
+ return source, nil, nil, false
+ }
+
+ result := append([]byte(nil), source...)
+ removals := append([]bindGeneratedBlock(nil), blocks...)
+ sort.Slice(removals, func(i, j int) bool { return removals[i].start > removals[j].start })
+ for _, block := range removals {
+ result = append(result[:block.start], result[block.end:]...)
+ }
+ return result, blocks, nil, true
+}
+
+// scanBindRebaseArtifacts validates generator markers and returns their exact
+// source spans. Remigration reuses the spans for precise line relocation.
+func scanBindRebaseArtifacts(path string, source []byte) ([]bindGeneratedBlock, []bindDiagnostic) {
+ text := string(source)
+ var blocks []bindGeneratedBlock
+ var diagnostics []bindDiagnostic
+ for position := 0; position < len(text); {
+ end := lineEndIncludingNewline(text, position)
+ rawLine := strings.TrimRight(text[position:end], "\r\n")
+ if helperName, _, scope, kind, ok := parseBindCompactRebaseInclude(rawLine); ok {
+ blocks = append(blocks, bindGeneratedBlock{
+ start: position,
+ end: end,
+ kind: kind,
+ scope: scope,
+ line: sourceLine(text, position),
+ helperName: helperName,
+ })
+ position = end
+ continue
+ }
+ if strings.Contains(rawLine, bindRebaseIncludeMarker) || bindRebaseHelperInclude.MatchString(rawLine) {
+ diagnostics = append(diagnostics, bindDiagnostic{
+ path: path,
+ line: sourceLine(text, position),
+ message: "generated Trice bind rebase include does not match the generated directive structure",
+ })
+ position = end
+ continue
+ }
+
+ line := strings.TrimSpace(rawLine)
+ kind, scope, ok := parseBindRebaseMarker(line)
+ if !ok {
+ if line == bindRebaseBlockEnd {
+ diagnostics = append(diagnostics, bindDiagnostic{
+ path: path,
+ line: sourceLine(text, position),
+ message: "orphaned generated Trice bind rebase block terminator",
+ })
+ }
+ position = end
+ continue
+ }
+
+ blockEnd := end
+ foundEnd := false
+ for blockEnd < len(text) {
+ next := lineEndIncludingNewline(text, blockEnd)
+ candidate := strings.TrimSpace(strings.TrimRight(text[blockEnd:next], "\r\n"))
+ if candidate == bindRebaseBlockEnd {
+ block := bindGeneratedBlock{
+ start: position,
+ end: next,
+ kind: kind,
+ scope: scope,
+ line: sourceLine(text, position),
+ }
+ blocks = append(blocks, block)
+ if message := validateBindRebaseBlock(text[block.start:block.end], block); message != "" {
+ diagnostics = append(diagnostics, bindDiagnostic{path: path, line: block.line, message: message})
+ }
+ blockEnd = next
+ foundEnd = true
+ break
+ }
+ blockEnd = next
+ }
+ if !foundEnd {
+ diagnostics = append(diagnostics, bindDiagnostic{
+ path: path,
+ line: sourceLine(text, position),
+ message: fmt.Sprintf("generated Trice bind rebase %s block %s has no terminator", kind, scope),
+ })
+ break
+ }
+ position = blockEnd
+ }
+
+ type scopeState struct {
+ begin *bindGeneratedBlock
+ end *bindGeneratedBlock
+ }
+ states := make(map[string]scopeState)
+ for index := range blocks {
+ block := &blocks[index]
+ state := states[block.scope]
+ switch block.kind {
+ case "begin":
+ if state.begin != nil {
+ diagnostics = append(diagnostics, bindDiagnostic{path: path, line: block.line, message: "duplicate generated Trice bind rebase begin for " + block.scope})
+ }
+ state.begin = block
+ case "end":
+ if state.end != nil {
+ diagnostics = append(diagnostics, bindDiagnostic{path: path, line: block.line, message: "duplicate generated Trice bind rebase end for " + block.scope})
+ }
+ state.end = block
+ }
+ states[block.scope] = state
+ }
+ for scope, state := range states {
+ switch {
+ case state.begin == nil:
+ diagnostics = append(diagnostics, bindDiagnostic{path: path, line: state.end.line, message: "generated Trice bind rebase end has no begin for " + scope})
+ case state.end == nil:
+ diagnostics = append(diagnostics, bindDiagnostic{path: path, line: state.begin.line, message: "generated Trice bind rebase begin has no end for " + scope})
+ case state.begin.start >= state.end.start:
+ diagnostics = append(diagnostics, bindDiagnostic{path: path, line: state.end.line, message: "generated Trice bind rebase end precedes its begin for " + scope})
+ }
+ }
+ activeScope := ""
+ for _, block := range blocks {
+ switch block.kind {
+ case "begin":
+ if activeScope != "" {
+ diagnostics = append(diagnostics, bindDiagnostic{path: path, line: block.line, message: "nested generated Trice bind rebase begin for " + block.scope})
+ }
+ activeScope = block.scope
+ case "end":
+ if activeScope != block.scope {
+ diagnostics = append(diagnostics, bindDiagnostic{path: path, line: block.line, message: "generated Trice bind rebase end is out of order for " + block.scope})
+ }
+ activeScope = ""
+ }
+ }
+ if len(diagnostics) > 0 {
+ return nil, diagnostics
+ }
+ return blocks, nil
+}
+
+// parseBindCompactRebaseInclude accepts only a generator-owned helper include
+// whose filename, phase comment, file key, and scope encode the same identity.
+func parseBindCompactRebaseInclude(line string) (name, key, scope, kind string, ok bool) {
+ match := bindRebaseCompactInclude.FindStringSubmatch(line)
+ if len(match) != 7 {
+ return "", "", "", "", false
+ }
+ name, key = match[1], match[2]
+ ordinal, nameKind, commentKind, commentScope := match[3], match[4], match[5], match[6]
+ if nameKind != commentKind || commentScope != key+"_"+ordinal {
+ return "", "", "", "", false
+ }
+ return name, key, commentScope, nameKind, true
+}
+
+// validateBindRebaseBlock accepts only the exact generator-owned directive
+// sequence. Marker-like user comments can therefore never authorize deletion.
+func validateBindRebaseBlock(source string, block bindGeneratedBlock) string {
+ normalized := strings.ReplaceAll(source, "\r\n", "\n")
+ lines := strings.Split(strings.TrimSuffix(normalized, "\n"), "\n")
+ var expected []string
+ if block.kind == "begin" {
+ expected = []string{
+ fmt.Sprintf("%s%s */", bindRebaseBeginMarker, block.scope),
+ "#define TRICE_BIND_REBASE_SCOPE " + block.scope,
+ "#define TRICE_BIND_REBASE_BEGIN",
+ "",
+ "#undef TRICE_BIND_REBASE_BEGIN",
+ bindRebaseBlockEnd,
+ }
+ } else {
+ expected = []string{
+ fmt.Sprintf("%s%s */", bindRebaseEndMarker, block.scope),
+ "#define TRICE_BIND_REBASE_END",
+ "",
+ "#undef TRICE_BIND_REBASE_END",
+ bindRebaseBlockEnd,
+ }
+ }
+ if len(lines) != len(expected) {
+ return fmt.Sprintf("generated Trice bind rebase %s block %s has an unexpected directive count", block.kind, block.scope)
+ }
+ for index := range expected {
+ if expected[index] == "" {
+ match := bindRebaseGeneratedInclude.FindStringSubmatch(lines[index])
+ if len(match) != 3 || match[1] != strings.SplitN(block.scope, "_R", 2)[0] || match[2] != block.kind {
+ return fmt.Sprintf("generated Trice bind rebase %s block %s has an invalid sidecar include", block.kind, block.scope)
+ }
+ continue
+ }
+ if lines[index] != expected[index] {
+ return fmt.Sprintf("generated Trice bind rebase %s block %s does not match the generated directive structure", block.kind, block.scope)
+ }
+ }
+ return ""
+}
+
+// parseBindRebaseMarker recognizes only the exact comments emitted below.
+func parseBindRebaseMarker(line string) (kind, scope string, ok bool) {
+ for _, candidate := range []struct {
+ prefix string
+ kind string
+ }{
+ {prefix: bindRebaseBeginMarker, kind: "begin"},
+ {prefix: bindRebaseEndMarker, kind: "end"},
+ } {
+ if strings.HasPrefix(line, candidate.prefix) && strings.HasSuffix(line, " */") {
+ scope = strings.TrimSuffix(strings.TrimPrefix(line, candidate.prefix), " */")
+ if bindRebaseScope.MatchString(scope) {
+ return candidate.kind, scope, true
+ }
+ }
+ }
+ return "", "", false
+}
+
+// scanBindMacroDefinitions reads complete continued #define directives while
+// leaving all Trice-call recognition to scanBindSites and matchTrice.
+func scanBindMacroDefinitions(source string) []bindMacroDefinition {
+ var definitions []bindMacroDefinition
+ line := 1
+ for start := 0; start < len(source); {
+ end := lineEndIncludingNewline(source, start)
+ logicalEnd := end
+ for bindPhysicalLineContinues(source[start:logicalEnd]) && logicalEnd < len(source) {
+ logicalEnd = lineEndIncludingNewline(source, logicalEnd)
+ }
+ logical := source[start:logicalEnd]
+ masked := stripCComments(logical)
+ position := skipBindSpace(masked, 0)
+ if position >= len(masked) || masked[position] != '#' {
+ line += strings.Count(logical, "\n")
+ start = logicalEnd
+ continue
+ }
+ position = skipBindSpace(masked, position+1)
+ if !bindIdentifierAt(masked, position, "define") {
+ line += strings.Count(logical, "\n")
+ start = logicalEnd
+ continue
+ }
+ position = skipBindSpace(masked, position+len("define"))
+ nameStart := position
+ for position < len(masked) && isCIdentifierByte(masked[position]) {
+ position++
+ }
+ if position == nameStart || !bindIdentifierStart(masked[nameStart]) {
+ line += strings.Count(logical, "\n")
+ start = logicalEnd
+ continue
+ }
+ definition := bindMacroDefinition{
+ name: strings.TrimSpace(masked[nameStart:position]),
+ start: start,
+ end: logicalEnd,
+ line: line,
+ }
+ definition.replacementStart = start + position
+ if position < len(masked) && masked[position] == '(' {
+ definition.functionLike = true
+ closing := findBindClosingParen(logical, position+1)
+ if closing >= 0 {
+ definition.replacementStart = start + closing + 1
+ }
+ }
+ replacement := source[definition.replacementStart:definition.end]
+ code := maskBindCommentsAndLiterals(replacement)
+ definition.hasTokenPaste = strings.Contains(code, "##")
+ definition.hasTerminatingSemicolon = strings.HasSuffix(strings.TrimSpace(code), ";")
+ definition.hasCounter = bindContainsIdentifier(code, "__COUNTER__")
+ definitions = append(definitions, definition)
+ line += strings.Count(logical, "\n")
+ start = logicalEnd
+ }
+ return definitions
+}
+
+// bindPhysicalLineContinues reports a valid backslash continuation at the
+// last non-whitespace byte of one physical line.
+func bindPhysicalLineContinues(line string) bool {
+ line = strings.TrimRight(line, "\r\n")
+ line = strings.TrimRight(line, " \t")
+ return strings.HasSuffix(line, "\\")
+}
+
+// skipBindSpace skips ordinary whitespace and source line continuations.
+func skipBindSpace(source string, position int) int {
+ for position < len(source) {
+ switch source[position] {
+ case ' ', '\t', '\r', '\n', '\f', '\v':
+ position++
+ case '\\':
+ if position+1 < len(source) && source[position+1] == '\n' {
+ position += 2
+ continue
+ }
+ if position+2 < len(source) && source[position+1] == '\r' && source[position+2] == '\n' {
+ position += 3
+ continue
+ }
+ return position
+ default:
+ return position
+ }
+ }
+ return position
+}
+
+// bindIdentifierAt verifies an exact C identifier without accepting a prefix.
+func bindIdentifierAt(source string, position int, identifier string) bool {
+ if !strings.HasPrefix(source[position:], identifier) {
+ return false
+ }
+ end := position + len(identifier)
+ return end == len(source) || !isCIdentifierByte(source[end])
+}
+
+// bindIdentifierStart reports whether a byte may begin a C identifier.
+func bindIdentifierStart(value byte) bool {
+ return value == '_' || 'A' <= value && value <= 'Z' || 'a' <= value && value <= 'z'
+}
+
+// bindContainsIdentifier distinguishes a preprocessor identifier from a
+// longer application name that merely contains the same byte sequence.
+func bindContainsIdentifier(source, identifier string) bool {
+ for position := 0; position < len(source); {
+ if !bindIdentifierStart(source[position]) {
+ position++
+ continue
+ }
+ start := position
+ for position < len(source) && isCIdentifierByte(source[position]) {
+ position++
+ }
+ if source[start:position] == identifier {
+ return true
+ }
+ }
+ return false
+}
+
+// maskBindCommentsAndLiterals blanks non-code bytes while preserving offsets
+// and line endings for wrapper invocation and unsafe-context analysis.
+func maskBindCommentsAndLiterals(source string) string {
+ out := []byte(source)
+ var inBlock, inLine, inString, inChar, escaped bool
+ for index := 0; index < len(source); index++ {
+ value := source[index]
+ switch {
+ case inLine:
+ if value == '\n' {
+ inLine = false
+ } else if value != '\r' {
+ out[index] = ' '
+ }
+ case inBlock:
+ if value != '\n' && value != '\r' {
+ out[index] = ' '
+ }
+ if value == '*' && index+1 < len(source) && source[index+1] == '/' {
+ out[index+1] = ' '
+ inBlock = false
+ index++
+ }
+ case inString:
+ if value != '\n' && value != '\r' {
+ out[index] = ' '
+ }
+ if escaped {
+ escaped = false
+ } else if value == '\\' {
+ escaped = true
+ } else if value == '"' {
+ inString = false
+ }
+ case inChar:
+ if value != '\n' && value != '\r' {
+ out[index] = ' '
+ }
+ if escaped {
+ escaped = false
+ } else if value == '\\' {
+ escaped = true
+ } else if value == '\'' {
+ inChar = false
+ }
+ default:
+ switch {
+ case value == '/' && index+1 < len(source) && source[index+1] == '/':
+ out[index], out[index+1] = ' ', ' '
+ inLine = true
+ index++
+ case value == '/' && index+1 < len(source) && source[index+1] == '*':
+ out[index], out[index+1] = ' ', ' '
+ inBlock = true
+ index++
+ case value == '"':
+ out[index] = ' '
+ inString = true
+ case value == '\'':
+ out[index] = ' '
+ inChar = true
+ }
+ }
+ }
+ return string(out)
+}
+
+// findBindClosingParen matches a call parenthesis while ignoring comments and
+// literals. The scan starts immediately after a known opening parenthesis, so
+// it can track lexical state locally instead of masking the complete source for
+// every Trice site in a large file.
+func findBindClosingParen(source string, position int) int {
+ depth := 1
+ var inBlockComment, inLineComment, inString, inChar, escaped bool
+ for index := position; index < len(source); index++ {
+ value := source[index]
+ switch {
+ case inLineComment:
+ if value == '\n' || value == '\r' {
+ inLineComment = false
+ }
+ continue
+ case inBlockComment:
+ if value == '*' && index+1 < len(source) && source[index+1] == '/' {
+ inBlockComment = false
+ index++
+ }
+ continue
+ case inString:
+ if escaped {
+ escaped = false
+ } else if value == '\\' {
+ escaped = true
+ } else if value == '"' {
+ inString = false
+ }
+ continue
+ case inChar:
+ if escaped {
+ escaped = false
+ } else if value == '\\' {
+ escaped = true
+ } else if value == '\'' {
+ inChar = false
+ }
+ continue
+ }
+
+ switch {
+ case value == '/' && index+1 < len(source) && source[index+1] == '/':
+ inLineComment = true
+ index++
+ case value == '/' && index+1 < len(source) && source[index+1] == '*':
+ inBlockComment = true
+ index++
+ case value == '"':
+ inString = true
+ case value == '\'':
+ inChar = true
+ case value == '(':
+ depth++
+ case value == ')':
+ depth--
+ if depth == 0 {
+ return index
+ }
+ }
+ }
+ return -1
+}
+
+// analyzeBindProject discovers supported wrapper definitions and invocations
+// across the complete sorted source set. It does not allocate any Trice IDs.
+func analyzeBindProject(plans []bindFilePlan, diagnose bool) (bindProjectModel, []bindDiagnostic) {
+ model := bindProjectModel{wrappers: make(map[string]bindWrapperDefinition)}
+ var diagnostics []bindDiagnostic
+ definitionsByName := make(map[string][]bindWrapperDefinition)
+
+ for planIndex := range plans {
+ plan := &plans[planIndex]
+ plan.macroDefinitions = scanBindMacroDefinitions(maskTriceInsertDisabledRegions(string(plan.final)))
+ plan.invocations = nil
+ plan.descriptors = nil
+ plan.regions = nil
+ plan.managedOffset = -1
+ for siteIndex := range plan.sites {
+ plan.sites[siteIndex].definitionName = ""
+ plan.sites[siteIndex].definitionOrdinal = 0
+ plan.sites[siteIndex].sourceOrdinal = 0
+ plan.sites[siteIndex].counterSelected = false
+ }
+
+ for siteIndex := range plan.sites {
+ site := &plan.sites[siteIndex]
+ definitionIndex := bindContainingMacro(plan.macroDefinitions, site.loc[0])
+ if definitionIndex < 0 {
+ if !site.wasExplicit {
+ plan.managedOffset = bindEarlierOffset(plan.managedOffset, site.loc[0])
+ }
+ continue
+ }
+ definition := &plan.macroDefinitions[definitionIndex]
+ site.definitionName = definition.name
+ site.definitionOrdinal = len(definition.siteIndexes)
+ definition.siteIndexes = append(definition.siteIndexes, siteIndex)
+ if bindSiteExtendsFormatWithStringification(string(plan.final), *site) {
+ definition.hasFormatStringify = true
+ }
+ plan.managedOffset = bindEarlierOffset(plan.managedOffset, definition.start)
+ }
+
+ lineOrdinals := make(map[int]int)
+ for siteIndex := range plan.sites {
+ site := &plan.sites[siteIndex]
+ if site.definitionName == "" {
+ site.sourceOrdinal = lineOrdinals[site.line]
+ lineOrdinals[site.line]++
+ }
+ }
+
+ for macroIndex := range plan.macroDefinitions {
+ definition := &plan.macroDefinitions[macroIndex]
+ if bindIsUserTriceName(definition.name) && !bindRegisteredAlias(definition.name) {
+ if diagnose {
+ diagnostics = append(diagnostics, bindDiagnostic{path: plan.path, line: definition.line, message: "indirect redefinition of Trice macro " + definition.name + " is not supported by bind"})
+ }
+ continue
+ }
+ if len(definition.siteIndexes) == 0 {
+ continue
+ }
+ wrapper := bindWrapperDefinition{name: definition.name, plan: planIndex, macro: macroIndex}
+ for _, siteIndex := range definition.siteIndexes {
+ wrapper.siteRefs = append(wrapper.siteRefs, bindSiteReference{plan: planIndex, site: siteIndex})
+ }
+ definitionsByName[definition.name] = append(definitionsByName[definition.name], wrapper)
+ if !diagnose {
+ continue
+ }
+ if !definition.functionLike {
+ diagnostics = append(diagnostics, bindDiagnostic{path: plan.path, line: definition.line, message: "logging wrapper " + definition.name + " must be a function-like statement macro"})
+ }
+ if definition.hasTokenPaste {
+ diagnostics = append(diagnostics, bindDiagnostic{path: plan.path, line: definition.line, message: "logging wrapper " + definition.name + " uses unsupported token pasting"})
+ }
+ if definition.hasFormatStringify {
+ diagnostics = append(diagnostics, bindDiagnostic{path: plan.path, line: definition.line, message: "logging wrapper " + definition.name + " uses unsupported stringification to extend a Trice format string"})
+ }
+ if bindRegisteredAlias(definition.name) {
+ diagnostics = append(diagnostics, bindDiagnostic{path: plan.path, line: definition.line, message: "logging wrapper " + definition.name + " conflicts with a configured Trice alias"})
+ }
+ for _, siteIndex := range definition.siteIndexes {
+ if plan.sites[siteIndex].wasExplicit {
+ diagnostics = append(diagnostics, bindDiagnostic{path: plan.path, line: plan.sites[siteIndex].line, message: "logging wrapper " + definition.name + " contains an explicit non-zero Trice ID; use trice insert/clean or remove the explicit ID"})
+ }
+ }
+ }
+ }
+
+ for name, definitions := range definitionsByName {
+ model.wrappers[name] = definitions[0]
+ if len(definitions) < 2 {
+ continue
+ }
+ wrapper := model.wrappers[name]
+ wrapper.duplicate = true
+ model.wrappers[name] = wrapper
+ if diagnose {
+ locations := make([]string, 0, len(definitions))
+ for _, definition := range definitions {
+ macro := plans[definition.plan].macroDefinitions[definition.macro]
+ locations = append(locations, fmt.Sprintf("%s:%d", plans[definition.plan].path, macro.line))
+ }
+ diagnostics = append(diagnostics, bindDiagnostic{message: fmt.Sprintf("logging wrapper %s has multiple source definitions: %s", name, strings.Join(locations, ", "))})
+ }
+ }
+
+ if diagnose {
+ for _, wrapper := range model.wrappers {
+ plan := &plans[wrapper.plan]
+ definition := plan.macroDefinitions[wrapper.macro]
+ replacement := string(plan.final[definition.replacementStart:definition.end])
+ if nested := bindNestedWrapperName(replacement, model.wrappers); nested != "" {
+ kind := "nested"
+ if nested == wrapper.name {
+ kind = "recursive"
+ }
+ diagnostics = append(diagnostics, bindDiagnostic{path: plan.path, line: definition.line, message: fmt.Sprintf("%s logging wrapper %s invokes %s; nested and recursive wrappers are not supported", kind, wrapper.name, nested)})
+ }
+ }
+ for planIndex := range plans {
+ plan := &plans[planIndex]
+ for macroIndex := range plan.macroDefinitions {
+ definition := plan.macroDefinitions[macroIndex]
+ if len(definition.siteIndexes) != 0 {
+ continue
+ }
+ replacement := string(plan.final[definition.replacementStart:definition.end])
+ if nested := bindNestedWrapperName(replacement, model.wrappers); nested != "" {
+ diagnostics = append(diagnostics, bindDiagnostic{
+ path: plan.path,
+ line: definition.line,
+ message: fmt.Sprintf("nested logging wrapper %s invokes %s; nested and recursive wrappers are not supported", definition.name, nested),
+ })
+ }
+ }
+ }
+ }
+
+ for planIndex := range plans {
+ plan := &plans[planIndex]
+ invocations, invocationDiagnostics := scanBindWrapperInvocations(planIndex, plans, model)
+ plan.invocations = invocations
+ for _, invocation := range invocations {
+ plan.managedOffset = bindEarlierOffset(plan.managedOffset, invocation.start)
+ }
+ if diagnose {
+ diagnostics = append(diagnostics, invocationDiagnostics...)
+ }
+ if len(invocations) == 0 {
+ continue
+ }
+ switch plan.class {
+ case bindFileNone:
+ plan.class = bindFileBound
+ case bindFileInsert:
+ plan.class = bindFileMixed
+ if diagnose {
+ diagnostics = append(diagnostics, bindDiagnostic{path: plan.path, message: "file mixes explicit non-zero IDs with bind-owned logging-wrapper invocations"})
+ }
+ }
+ }
+ return model, diagnostics
+}
+
+// bindSiteExtendsFormatWithStringification distinguishes preprocessing that
+// changes a recognized static format from safe #parameter use in later data
+// arguments or unrelated statements in the same wrapper replacement.
+func bindSiteExtendsFormatWithStringification(source string, site bindSite) bool {
+ closing := findBindClosingParen(source, site.loc[2])
+ if closing < 0 || site.loc[6] < 0 || site.loc[6] >= closing {
+ return false
+ }
+ masked := maskBindCommentsAndLiterals(source)
+ position := skipBindSpace(masked, site.loc[6])
+ return position < closing && masked[position] == '#' && (position+1 >= closing || masked[position+1] != '#')
+}
+
+// bindContainingMacro returns the definition whose replacement owns position.
+func bindContainingMacro(definitions []bindMacroDefinition, position int) int {
+ for index, definition := range definitions {
+ if definition.replacementStart <= position && position < definition.end {
+ return index
+ }
+ }
+ return -1
+}
+
+// bindEarlierOffset keeps the earliest non-negative source position.
+func bindEarlierOffset(current, candidate int) int {
+ if current < 0 || candidate < current {
+ return candidate
+ }
+ return current
+}
+
+// bindIsUserTriceName uses the configured shared matcher for exact macro names.
+func bindIsUserTriceName(name string) bool {
+ location := matchTypNameTRICE.FindStringIndex(name)
+ return location != nil && location[0] == 0 && location[1] == len(name)
+}
+
+// bindRegisteredAlias prevents one token from being both a direct alias and a wrapper.
+func bindRegisteredAlias(name string) bool {
+ for _, alias := range append(append(ArrayFlag(nil), TriceAliases...), TriceSAliases...) {
+ if alias == name {
+ return true
+ }
+ }
+ return false
+}
+
+// bindNestedWrapperName finds a direct call of any project logging wrapper.
+func bindNestedWrapperName(replacement string, wrappers map[string]bindWrapperDefinition) string {
+ masked := maskBindCommentsAndLiterals(replacement)
+ for position := 0; position < len(masked); {
+ if !bindIdentifierStart(masked[position]) {
+ position++
+ continue
+ }
+ start := position
+ for position < len(masked) && isCIdentifierByte(masked[position]) {
+ position++
+ }
+ name := masked[start:position]
+ if _, exists := wrappers[name]; !exists {
+ continue
+ }
+ if next := skipBindSpace(masked, position); next < len(masked) && masked[next] == '(' {
+ return name
+ }
+ }
+ return ""
+}
+
+// scanBindWrapperInvocations finds standalone source-level expansions without
+// attempting to emulate preprocessing or to parse Trice calls independently.
+func scanBindWrapperInvocations(planIndex int, plans []bindFilePlan, model bindProjectModel) ([]bindWrapperInvocation, []bindDiagnostic) {
+ plan := &plans[planIndex]
+ source := string(plan.final)
+ mayContainWrapper := false
+ for name := range model.wrappers {
+ if strings.Contains(source, name) {
+ mayContainWrapper = true
+ break
+ }
+ }
+ if !mayContainWrapper {
+ // An invocation cannot appear after lexical masking when its identifier
+ // bytes are absent from the original source. Avoid allocating two masked
+ // copies for the usual files unrelated to logging wrappers.
+ return nil, nil
+ }
+ masked := maskBindCommentsAndLiterals(maskTriceInsertDisabledRegions(source))
+ var invocations []bindWrapperInvocation
+ var diagnostics []bindDiagnostic
+ for position := 0; position < len(masked); {
+ if !bindIdentifierStart(masked[position]) {
+ position++
+ continue
+ }
+ start := position
+ for position < len(masked) && isCIdentifierByte(masked[position]) {
+ position++
+ }
+ name := masked[start:position]
+ wrapper, exists := model.wrappers[name]
+ if !exists || bindContainingMacro(plan.macroDefinitions, start) >= 0 {
+ continue
+ }
+ definition := plans[wrapper.plan].macroDefinitions[wrapper.macro]
+ if wrapper.plan == planIndex {
+ if start < definition.end {
+ continue
+ }
+ }
+ opening := skipBindSpace(masked, position)
+ if opening >= len(masked) || masked[opening] != '(' {
+ continue
+ }
+ closing := findBindClosingParen(source, opening+1)
+ if closing < 0 {
+ diagnostics = append(diagnostics, bindDiagnostic{path: plan.path, line: sourceLine(source, start), message: "logging wrapper invocation " + name + " has no matching closing parenthesis"})
+ continue
+ }
+ semicolon := skipBindSpace(masked, closing+1)
+ line := sourceLine(source, start)
+ end := closing + 1
+ macroTerminated := false
+ if semicolon < len(masked) && masked[semicolon] == ';' {
+ end = semicolon + 1
+ } else if !definition.hasTerminatingSemicolon {
+ diagnostics = append(diagnostics, bindDiagnostic{path: plan.path, line: line, message: "logging wrapper " + name + " must be used as a standalone statement ending in ';' at the invocation or in the macro replacement"})
+ continue
+ } else {
+ macroTerminated = true
+ }
+ if !bindStandaloneCallContext(masked, start) {
+ diagnostics = append(diagnostics, bindDiagnostic{path: plan.path, line: line, message: "logging wrapper " + name + " is not in a supported standalone statement context"})
+ continue
+ }
+ invocations = append(invocations, bindWrapperInvocation{
+ name: name,
+ start: start,
+ end: end,
+ line: line,
+ column: sourceColumn(source, start),
+ comment: strings.Join(strings.Fields(source[start:end]), " "),
+ macroTerminated: macroTerminated,
+ })
+ position = end
+ }
+ sort.SliceStable(invocations, func(i, j int) bool { return invocations[i].start < invocations[j].start })
+ return invocations, diagnostics
+}
+
+// bindStandaloneCallContext accepts statement starts, labels, and the body of
+// an if/while condition while rejecting arguments, initializers, and returns.
+func bindStandaloneCallContext(masked string, position int) bool {
+ lineStartPosition := lineStart(masked, position)
+ previous := position - 1
+ for previous >= lineStartPosition && (masked[previous] == ' ' || masked[previous] == '\t') {
+ previous--
+ }
+ if previous < lineStartPosition {
+ return true
+ }
+ switch masked[previous] {
+ case ';', '{', '}', ':', ')':
+ return true
+ }
+ if isCIdentifierByte(masked[previous]) {
+ end := previous + 1
+ for previous >= lineStartPosition && isCIdentifierByte(masked[previous]) {
+ previous--
+ }
+ word := masked[previous+1 : end]
+ return word == "else" || word == "do"
+ }
+ return false
+}
+
+// planBindExecution classifies ordinary descriptors and counter-rebase regions.
+func planBindExecution(plans []bindFilePlan, model bindProjectModel, diagnose bool) []bindDiagnostic {
+ var diagnostics []bindDiagnostic
+ for planIndex := range plans {
+ for siteIndex := range plans[planIndex].sites {
+ plans[planIndex].sites[siteIndex].counterSelected = false
+ }
+ }
+ for planIndex := range plans {
+ plan := &plans[planIndex]
+ plan.descriptors = nil
+ plan.regions = nil
+ if plan.class != bindFileBound || plan.key == "" {
+ continue
+ }
+ source := string(plan.final)
+ maskedSource := maskBindCommentsAndLiterals(source)
+
+ var occurrences []bindOccurrence
+ for siteIndex := range plan.sites {
+ site := &plan.sites[siteIndex]
+ if site.wasExplicit || site.definitionName != "" {
+ continue
+ }
+ end := bindDirectCallEnd(source, *site)
+ occurrences = append(occurrences, bindOccurrence{
+ start: site.loc[0],
+ end: end,
+ line: site.line,
+ column: site.column,
+ refs: []bindSiteReference{{plan: planIndex, site: siteIndex}},
+ comment: site.comment,
+ })
+ }
+ for _, invocation := range plan.invocations {
+ wrapper, exists := model.wrappers[invocation.name]
+ if !exists {
+ continue
+ }
+ occurrences = append(occurrences, bindOccurrence{
+ start: invocation.start,
+ end: invocation.end,
+ line: invocation.line,
+ column: invocation.column,
+ refs: append([]bindSiteReference(nil), wrapper.siteRefs...),
+ comment: invocation.comment,
+ wrapper: true,
+ macroTerminated: invocation.macroTerminated,
+ })
+ }
+ sort.SliceStable(occurrences, func(i, j int) bool { return occurrences[i].start < occurrences[j].start })
+ macroTerminatedEnds := make(map[int]bool)
+ for _, occurrence := range occurrences {
+ if occurrence.macroTerminated {
+ macroTerminatedEnds[occurrence.end] = true
+ }
+ }
+ // Overlapping tokens cannot receive independent preprocessor boundaries;
+ // retain the diagnostic while excluding them from in-memory rendering.
+ invalidOccurrences := make(map[int]bool)
+ for index := 1; index < len(occurrences); index++ {
+ previous := occurrences[index-1]
+ current := occurrences[index]
+ if current.start >= previous.end {
+ continue
+ }
+ invalidOccurrences[previous.start] = true
+ invalidOccurrences[current.start] = true
+ if diagnose {
+ diagnostics = append(diagnostics, bindDiagnostic{
+ path: plan.path,
+ line: current.line,
+ message: "overlapping Trice or logging-wrapper invocations cannot be assigned independent bind descriptors",
+ })
+ }
+ }
+
+ byLine := make(map[int][]bindOccurrence)
+ var lines []int
+ for _, occurrence := range occurrences {
+ if invalidOccurrences[occurrence.start] {
+ continue
+ }
+ if _, exists := byLine[occurrence.line]; !exists {
+ lines = append(lines, occurrence.line)
+ }
+ byLine[occurrence.line] = append(byLine[occurrence.line], occurrence)
+ }
+ sort.Ints(lines)
+ regionOrdinal := 0
+ for _, line := range lines {
+ group := byLine[line]
+ requiresCounter := len(group) > 1
+ for _, occurrence := range group {
+ if len(occurrence.refs) > 1 || occurrence.wrapper && sourceLine(source, occurrence.end-1) != occurrence.line {
+ requiresCounter = true
+ }
+ }
+ if !requiresCounter {
+ occurrence := group[0]
+ plan.descriptors = append(plan.descriptors, bindSiteDescriptor{line: line, column: occurrence.column, ref: occurrence.refs[0], comment: occurrence.comment})
+ continue
+ }
+
+ valid := true
+ regionStartPosition := lineStart(source, group[0].start)
+ lastOccurrenceEnd := group[0].end
+ for _, occurrence := range group[1:] {
+ if occurrence.end > lastOccurrenceEnd {
+ lastOccurrenceEnd = occurrence.end
+ }
+ }
+ regionEndPosition := lineEndIncludingNewline(source, lastOccurrenceEnd-1)
+ if regionEndPosition == len(plan.final) && (len(plan.final) == 0 || plan.final[len(plan.final)-1] != '\n') {
+ valid = false
+ if diagnose {
+ diagnostics = append(diagnostics, bindDiagnostic{path: plan.path, line: line, message: "counter-selected Trice statement region must end with a newline so generated rebase includes remain removable"})
+ }
+ }
+ if !bindRebaseLineIsIndependentMasked(source, maskedSource, regionStartPosition, regionEndPosition, group[0].start, macroTerminatedEnds) {
+ valid = false
+ if diagnose {
+ diagnostics = append(diagnostics, bindDiagnostic{path: plan.path, line: line, message: "counter-selected Trice statement region is not an independent block item; generated rebase directives cannot safely surround a control-flow continuation or closing outer scope"})
+ }
+ }
+ regionCode := maskedSource[regionStartPosition:regionEndPosition]
+ if bindContainsIdentifier(regionCode, "__COUNTER__") {
+ valid = false
+ if diagnose {
+ diagnostics = append(diagnostics, bindDiagnostic{path: plan.path, line: line, message: "counter-selected region contains an additional explicit __COUNTER__; use trice insert/clean or remove it"})
+ }
+ }
+ if bindRebaseRegionContainsDirective(regionCode) {
+ valid = false
+ if diagnose {
+ diagnostics = append(diagnostics, bindDiagnostic{path: plan.path, line: line, message: "counter-selected Trice statement region contains a preprocessing directive and cannot be surrounded safely"})
+ }
+ }
+ for _, occurrence := range occurrences {
+ if occurrence.line == line || occurrence.start < regionStartPosition || occurrence.start >= regionEndPosition {
+ continue
+ }
+ valid = false
+ if diagnose {
+ diagnostics = append(diagnostics, bindDiagnostic{
+ path: plan.path,
+ line: occurrence.line,
+ message: "a multi-line logging-wrapper invocation shares its boundary line with another Trice site; place the sites on separate lines",
+ })
+ }
+ }
+
+ var expansions []bindSiteReference
+ for _, occurrence := range group {
+ if occurrence.end <= occurrence.start || occurrence.end > regionEndPosition || !bindStandaloneCallContext(maskedSource, occurrence.start) {
+ valid = false
+ if diagnose {
+ diagnostics = append(diagnostics, bindDiagnostic{path: plan.path, line: line, message: "counter-selected Trice calls and logging wrappers must be complete standalone statements"})
+ }
+ }
+ for _, ref := range occurrence.refs {
+ site := &plans[ref.plan].sites[ref.site]
+ if site.mode != bindSiteAuto || site.wasExplicit {
+ valid = false
+ if diagnose {
+ diagnostics = append(diagnostics, bindDiagnostic{path: plan.path, line: line, message: fmt.Sprintf("counter-selected site %s uses %s; id(0), Id(0), ID(0), and explicit IDs require trice insert/clean or separate statement lines", site.comment, site.mode)})
+ }
+ }
+ if site.definitionName != "" {
+ definitionPlan := &plans[ref.plan]
+ definitionIndex := bindContainingMacro(definitionPlan.macroDefinitions, site.loc[0])
+ if definitionIndex >= 0 && definitionPlan.macroDefinitions[definitionIndex].hasCounter {
+ valid = false
+ if diagnose {
+ diagnostics = append(diagnostics, bindDiagnostic{path: definitionPlan.path, line: site.line, message: "logging wrapper " + site.definitionName + " contains an additional __COUNTER__ inside a required rebase expansion"})
+ }
+ }
+ }
+ expansions = append(expansions, ref)
+ }
+ }
+ if !valid {
+ continue
+ }
+ for _, ref := range expansions {
+ plans[ref.plan].sites[ref.site].counterSelected = true
+ }
+ plan.regions = append(plan.regions, bindRebaseRegion{
+ scope: fmt.Sprintf("%s_R%d", plan.key, regionOrdinal),
+ line: line,
+ column: group[0].column,
+ start: regionStartPosition,
+ end: regionEndPosition,
+ expansions: expansions,
+ })
+ regionOrdinal++
+ }
+ }
+ return diagnostics
+}
+
+// bindRebaseRegionContainsDirective rejects directives inside a multi-line
+// invocation because directive handling within macro arguments is non-portable.
+func bindRebaseRegionContainsDirective(masked string) bool {
+ for start := 0; start < len(masked); {
+ end := lineEndIncludingNewline(masked, start)
+ if strings.HasPrefix(strings.TrimSpace(masked[start:end]), "#") {
+ return true
+ }
+ start = end
+ }
+ return false
+}
+
+// bindRebaseLineIsIndependent rejects candidate regions whose surrounding
+// C/C++ syntax would bind to, or leave the scope of, declarations emitted by
+// BEGIN and END. The generator rejects these cases instead of changing control
+// flow by inserting a declaration between two dependent statements.
+func bindRebaseLineIsIndependent(source string, start, end, firstOccurrence int, macroTerminatedEnds map[int]bool) bool {
+ masked := maskBindCommentsAndLiterals(source)
+ return bindRebaseLineIsIndependentMasked(source, masked, start, end, firstOccurrence, macroTerminatedEnds)
+}
+
+// bindRebaseLineIsIndependentMasked applies the context rules to a reusable
+// lexical view. planBindExecution calls it repeatedly for one source file and
+// must not rebuild that full-size view for every candidate region.
+func bindRebaseLineIsIndependentMasked(source, masked string, start, end, firstOccurrence int, macroTerminatedEnds map[int]bool) bool {
+ lineCode := masked[start:end]
+ depth := 0
+ for index := 0; index < len(lineCode); index++ {
+ switch lineCode[index] {
+ case '{':
+ depth++
+ case '}':
+ depth--
+ if depth < 0 {
+ return false
+ }
+ }
+ }
+
+ prefix := strings.TrimSpace(masked[start:firstOccurrence])
+ if bindIdentifierAt(prefix, 0, "else") || bindIdentifierAt(prefix, 0, "catch") {
+ return false
+ }
+
+ previous := start - 1
+ for {
+ for previous >= 0 && strings.ContainsRune(" \t\r\n\f\v", rune(masked[previous])) {
+ previous--
+ }
+ if previous < 0 {
+ break
+ }
+ previousStart := lineStart(masked, previous)
+ previousEnd := lineEndIncludingNewline(source, previousStart)
+ previousLine := strings.TrimSpace(source[previousStart:previousEnd])
+ _, _, _, _, isRebaseInclude := parseBindCompactRebaseInclude(previousLine)
+ if strings.HasPrefix(previousLine, "#") && (bindSidecarName.MatchString(previousLine) || isRebaseInclude) {
+ previous = previousStart - 1
+ continue
+ }
+ break
+ }
+ if previous < 0 {
+ return true
+ }
+ if macroTerminatedEnds[previous+1] {
+ return true
+ }
+ if isInsideMacroDefinition(source, previous) {
+ return true
+ }
+ previousLine := strings.TrimSpace(masked[lineStart(masked, previous) : previous+1])
+ if strings.HasPrefix(previousLine, "#") {
+ return true
+ }
+ if masked[previous] == '}' && bindIdentifierAt(prefix, 0, "while") {
+ return false
+ }
+ switch masked[previous] {
+ case ';', '{', '}':
+ return true
+ default:
+ return false
+ }
+}
+
+// bindDirectCallEnd returns the byte immediately after an optional statement semicolon.
+func bindDirectCallEnd(source string, site bindSite) int {
+ closing := findBindClosingParen(source, site.loc[2])
+ if closing < 0 {
+ return site.loc[6]
+ }
+ end := closing + 1
+ for end < len(source) && (source[end] == ' ' || source[end] == '\t') {
+ end++
+ }
+ if end < len(source) && source[end] == ';' {
+ end++
+ }
+ return end
+}
+
+// applyBindRebaseRegions inserts compact generated includes in reverse source order so
+// all offsets calculated by the analysis remain valid.
+func applyBindRebaseRegions(plans []bindFilePlan) {
+ for planIndex := range plans {
+ plan := &plans[planIndex]
+ if len(plan.regions) == 0 {
+ continue
+ }
+ regions := append([]bindRebaseRegion(nil), plan.regions...)
+ sort.Slice(regions, func(i, j int) bool { return regions[i].start > regions[j].start })
+ for _, region := range regions {
+ newline := sourceNewline(string(plan.final))
+ beginName := bindRebaseArtifactName(plan.sidecarName, plan.key, region.scope, "begin")
+ endName := bindRebaseArtifactName(plan.sidecarName, plan.key, region.scope, "end")
+ begin := renderBindRebaseSourceInclude("begin", region.scope, beginName, newline)
+ end := renderBindRebaseSourceInclude("end", region.scope, endName, newline)
+ updated := make([]byte, 0, len(plan.final)+len(begin)+len(end))
+ updated = append(updated, plan.final[:region.start]...)
+ updated = append(updated, begin...)
+ updated = append(updated, plan.final[region.start:region.end]...)
+ updated = append(updated, end...)
+ updated = append(updated, plan.final[region.end:]...)
+ plan.final = updated
+ }
+ }
+}
+
+// renderBindRebaseSourceInclude emits one exact, removable phase boundary.
+func renderBindRebaseSourceInclude(kind, scope, helperName, newline string) []byte {
+ return []byte(fmt.Sprintf("#include \"%s\" %s%s %s%s", helperName, bindRebaseIncludeMarker, kind, scope, newline))
+}
diff --git a/internal/id/bindIDs.go b/internal/id/bindIDs.go
new file mode 100644
index 000000000..2c2be43c5
--- /dev/null
+++ b/internal/id/bindIDs.go
@@ -0,0 +1,558 @@
+// SPDX-License-Identifier: MIT
+
+package id
+
+import (
+ "bytes"
+ cryptorand "crypto/rand"
+ "encoding/hex"
+ "errors"
+ "fmt"
+ "io"
+ "os"
+ "path/filepath"
+ "sort"
+ "strings"
+ "sync"
+
+ "github.com/rokath/trice/pkg/ant"
+ "github.com/spf13/afero"
+)
+
+var (
+ // bindRandomReader is replaceable inside package tests while production always uses crypto/rand.Reader.
+ bindRandomReader io.Reader = cryptorand.Reader
+)
+
+// SubCmdIdBind generates stable sidecars while keeping bind-owned user Trice calls ID-free.
+func SubCmdIdBind(w io.Writer, fSys *afero.Afero) error {
+ if w == nil {
+ w = io.Discard
+ }
+ if fSys == nil || fSys.Fs == nil {
+ return errors.New("trice bind: nil filesystem")
+ }
+ if err := validateBindOptions(); err != nil {
+ return err
+ }
+
+ inputs, diagnostics := collectBindInputs(w, fSys)
+ plans := analyzeBindInputs(inputs)
+ for i := range plans {
+ diagnostics = append(diagnostics, plans[i].diagnostics...)
+ plans[i].diagnostics = nil
+ }
+ _, projectDiagnostics := analyzeBindProject(plans, true)
+ diagnostics = append(diagnostics, projectDiagnostics...)
+ diagnostics = append(diagnostics, prepareBindPlans(fSys, plans)...)
+
+ model, _ := analyzeBindProject(plans, false)
+ diagnostics = append(diagnostics, planBindExecution(plans, model, true)...)
+ applyBindRebaseRegions(plans)
+ for i := range plans {
+ if len(plans[i].regions) == 0 {
+ // The first analysis and include planning already describe an
+ // unchanged file. Only inserted rebase boundaries invalidate offsets
+ // and require the comparatively expensive full source rescan.
+ continue
+ }
+ // A formatter owns horizontal spacing around a valid generated include.
+ // Reuse those exact bytes when the regenerated semantic identity agrees.
+ preserveBindRebaseFormatting(&plans[i])
+ plans[i].includes = scanBindIncludes(string(plans[i].final))
+ plans[i].sites, _ = scanBindSites(plans[i].path, string(plans[i].final))
+ }
+ model, _ = analyzeBindProject(plans, false)
+ _ = planBindExecution(plans, model, false)
+ for i := range plans {
+ if plans[i].class == bindFileBound && plans[i].key != "" {
+ validateActiveBindIncludes(&plans[i])
+ }
+ diagnostics = append(diagnostics, plans[i].diagnostics...)
+ plans[i].diagnostics = nil
+ }
+
+ IDData.err = nil
+ IDData.PreProcessing(w, fSys)
+ metadataResolver := newBindMetadataResolver(w, fSys)
+ preferredIDs := preferredBindIDs(w, plans, metadataResolver)
+ initialIDs := make(map[TriceID]struct{}, len(IDData.idToTrice))
+ for id := range IDData.idToTrice {
+ initialIDs[id] = struct{}{}
+ }
+ diagnostics = append(diagnostics, assignBindIDs(w, plans, initialIDs, preferredIDs)...)
+
+ for i := range plans {
+ if plans[i].class == bindFileBound && plans[i].key != "" {
+ plans[i].sidecarContent = renderBindSidecar(plans, i)
+ plans[i].rebaseArtifacts = renderBindRebaseArtifacts(&plans[i])
+ for artifactIndex := range plans[i].rebaseArtifacts {
+ plans[i].rebaseArtifacts[artifactIndex].path = filepath.Join(BindDir, plans[i].rebaseArtifacts[artifactIndex].name)
+ }
+ }
+ }
+ if len(diagnostics) > 0 {
+ return reportBindDiagnostics(w, diagnostics)
+ }
+
+ writes, err := buildBindWrites(fSys, plans)
+ if err != nil {
+ return err
+ }
+ printBindSummary(w, plans, writes)
+ if DryRun {
+ return nil
+ }
+ return commitBindWrites(fSys, writes)
+}
+
+// validateBindOptions rejects invalid semantic choices before any source or generated file can change.
+func validateBindOptions() error {
+ if DefaultStampSize != 0 && DefaultStampSize != 16 && DefaultStampSize != 32 {
+ return fmt.Errorf("trice bind: invalid -defaultStampSize %d; expected 0, 16, or 32", DefaultStampSize)
+ }
+ switch SearchMethod {
+ case "random", "upward", "downward":
+ default:
+ return fmt.Errorf("trice bind: invalid -IDMethod %q; expected random, upward, or downward", SearchMethod)
+ }
+ if strings.TrimSpace(BindDir) == "" {
+ return errors.New("trice bind: -bindDir must not be empty")
+ }
+ return nil
+}
+
+// analyzeBindInputs performs independent classification in parallel and retains sorted plan order.
+func analyzeBindInputs(inputs []bindFileInput) []bindFilePlan {
+ plans := make([]bindFilePlan, len(inputs))
+ var workers sync.WaitGroup
+ workers.Add(len(inputs))
+ for i := range inputs {
+ i := i
+ go func() {
+ defer workers.Done()
+ plans[i] = analyzeBindFile(inputs[i])
+ }()
+ }
+ workers.Wait()
+ return plans
+}
+
+// prepareBindPlans resolves stable keys, plans includes, validates ownership, and reads old sidecars.
+func prepareBindPlans(fSys *afero.Afero, plans []bindFilePlan) []bindDiagnostic {
+ var diagnostics []bindDiagnostic
+ keyOwners := make(map[string][]string)
+ for i := range plans {
+ plan := &plans[i]
+ if plan.key != "" {
+ keyOwners[plan.key] = append(keyOwners[plan.key], plan.path)
+ }
+ }
+ for key, owners := range keyOwners {
+ owners = compactSortedStrings(owners)
+ keyOwners[key] = owners
+ if len(owners) > 1 {
+ diagnostics = append(diagnostics, bindDiagnostic{message: fmt.Sprintf("file key %s belongs to multiple owner files: %s", key, strings.Join(owners, ", "))})
+ }
+ }
+
+ for i := range plans {
+ plan := &plans[i]
+ if plan.class == bindFileBound && plan.key == "" && plan.managedOffset >= 0 {
+ key, err := newBindFileKey(keyOwners)
+ if err != nil {
+ diagnostics = append(diagnostics, bindDiagnostic{path: plan.path, message: "cannot generate file key: " + err.Error()})
+ continue
+ }
+ plan.key = key
+ plan.sidecarName = bindSidecarFilename(plan.path, key)
+ keyOwners[key] = []string{plan.path}
+ }
+ if plan.key != "" {
+ if plan.sidecarName == "" {
+ plan.sidecarName = bindSidecarFilename(plan.path, plan.key)
+ }
+ plan.sidecarPath = filepath.Join(BindDir, plan.sidecarName)
+ addBindInclude(plan)
+ if content, err := fSys.ReadFile(plan.sidecarPath); err == nil {
+ diagnostics = append(diagnostics, validateExistingSidecar(plan.sidecarPath, plan.key, content)...)
+ } else if !errors.Is(err, os.ErrNotExist) {
+ diagnostics = append(diagnostics, bindDiagnostic{path: plan.sidecarPath, message: "cannot read existing sidecar: " + err.Error()})
+ }
+ diagnostics = append(diagnostics, validateExistingBindRebaseArtifacts(fSys, plan)...)
+ }
+ if filepath.Base(plan.path) == "triceConfig.h" {
+ updated := bytes.Replace(plan.final, []byte("#define TRICE_CLEAN 1"), []byte("#define TRICE_CLEAN 0"), 1)
+ if !bytes.Equal(updated, plan.final) {
+ plan.final = updated
+ plan.configChanged = true
+ }
+ }
+ diagnostics = append(diagnostics, plan.diagnostics...)
+ plan.diagnostics = nil
+ }
+ return diagnostics
+}
+
+// validateExistingBindRebaseArtifacts checks source-owned helper identities
+// and refuses to overwrite edited helper content. Missing build artifacts are
+// intentionally repairable by the next successful bind run.
+func validateExistingBindRebaseArtifacts(fSys *afero.Afero, plan *bindFilePlan) []bindDiagnostic {
+ var diagnostics []bindDiagnostic
+ for _, existing := range plan.existingRebaseArtifacts {
+ expected := renderBindRebaseArtifact(plan.sidecarName, plan.key, existing.scope, existing.kind)
+ if expected.name == "" || existing.name != expected.name {
+ diagnostics = append(diagnostics, bindDiagnostic{
+ path: plan.path,
+ message: fmt.Sprintf("generated Trice bind rebase include %s does not belong to owner sidecar %s", existing.name, plan.sidecarName),
+ })
+ continue
+ }
+ path := filepath.Join(BindDir, existing.name)
+ content, err := fSys.ReadFile(path)
+ if errors.Is(err, os.ErrNotExist) {
+ continue
+ }
+ if err != nil {
+ diagnostics = append(diagnostics, bindDiagnostic{path: path, message: "cannot read existing generated rebase helper: " + err.Error()})
+ continue
+ }
+ if !bytes.Equal(content, expected.content) {
+ diagnostics = append(diagnostics, bindDiagnostic{path: path, message: "existing generated Trice bind rebase helper was modified; restore it or remove it together with its generated source include"})
+ }
+ }
+ return diagnostics
+}
+
+// newBindFileKey returns a cryptographically random key that is unique in the current plan set.
+func newBindFileKey(owners map[string][]string) (string, error) {
+ var random [8]byte
+ for attempt := 0; attempt < 128; attempt++ {
+ if _, err := io.ReadFull(bindRandomReader, random[:]); err != nil {
+ return "", err
+ }
+ key := "K" + strings.ToUpper(hex.EncodeToString(random[:]))
+ if _, exists := owners[key]; !exists {
+ return key, nil
+ }
+ }
+ return "", errors.New("128 random file keys collided")
+}
+
+// assignBindIDs runs the established insert pass in memory in deterministic source-path order.
+// Read-only historical candidates are inserted only into this virtual parser
+// view, keeping source files ID-free and retaining the one shared ID engine.
+func assignBindIDs(w io.Writer, plans []bindFilePlan, initialIDs map[TriceID]struct{}, preferred map[bindSiteReference]TriceID) []bindDiagnostic {
+ var diagnostics []bindDiagnostic
+ admin := new(ant.Admin)
+ classes := []bindFileClass{bindFileInsert, bindFileBound}
+ for _, class := range classes {
+ for planIndex := range plans {
+ plan := &plans[planIndex]
+ if plan.class != class {
+ continue
+ }
+ insertInput := plan.final
+ if plan.class == bindFileBound {
+ // Bind's source scanner deliberately ignores commented examples.
+ // Give the reused Insert engine the same byte-aligned view so it
+ // cannot allocate IDs or rewrite location data for non-sites.
+ insertInput = []byte(stripCComments(maskTriceInsertDisabledRegions(string(plan.final))))
+ preferredInput, preferredErr := applyBindPreferredIDs(insertInput, planIndex, plan, preferred)
+ if preferredErr != nil {
+ diagnostics = append(diagnostics, bindDiagnostic{path: plan.path, message: "cannot apply preferred IDs to the in-memory source: " + preferredErr.Error()})
+ continue
+ }
+ insertInput = preferredInput
+ }
+ var assignedIDs []TriceID
+ var insertOutput bytes.Buffer
+ _, modified, err := IDData.insertTriceIDsVisit(&insertOutput, plan.path, ToLIFile(plan.path), insertInput, admin, func(id TriceID) {
+ assignedIDs = append(assignedIDs, id)
+ })
+ if err != nil {
+ message := strings.TrimSpace(insertOutput.String())
+ if message == "" {
+ message = err.Error()
+ }
+ diagnostics = append(diagnostics, bindDiagnostic{path: plan.path, message: message})
+ continue
+ }
+ if plan.class == bindFileInsert {
+ if modified {
+ diagnostics = append(diagnostics, bindDiagnostic{path: plan.path, message: "insert validation would change this insert-owned file; run trice insert and resolve its ID conflicts first"})
+ }
+ continue
+ }
+
+ if len(assignedIDs) != len(plan.sites) {
+ diagnostics = append(diagnostics, bindDiagnostic{path: plan.path, message: fmt.Sprintf("in-memory insert returned %d sites for %d parsed bind sites", len(assignedIDs), len(plan.sites))})
+ continue
+ }
+ for siteIndex := range plan.sites {
+ assignedID := assignedIDs[siteIndex]
+ if assignedID <= 0 || plan.sites[siteIndex].wrapper == "" {
+ diagnostics = append(diagnostics, bindDiagnostic{path: plan.path, line: plan.sites[siteIndex].line, message: "in-memory insert did not produce a valid site ID"})
+ continue
+ }
+ plan.sites[siteIndex].id = assignedID
+ IDData.idToLocNew[assignedID] = newTriceLI(plan.path, plan.sites[siteIndex].line)
+ if _, existed := initialIDs[assignedID]; existed {
+ plan.reusedIDs++
+ } else {
+ plan.newIDs++
+ }
+ }
+ }
+ }
+ return diagnostics
+}
+
+// buildBindWrites renders JSON in memory and omits every destination whose bytes are unchanged.
+func buildBindWrites(fSys *afero.Afero, plans []bindFilePlan) ([]bindWrite, error) {
+ writes := make([]bindWrite, 0, len(plans)*4+2)
+ for i := range plans {
+ plan := &plans[i]
+ if !bytes.Equal(plan.original, plan.final) {
+ writes = append(writes, bindWrite{path: plan.path, data: plan.final, perm: plan.info.Mode(), kind: "source"})
+ }
+ if len(plan.sidecarContent) > 0 {
+ unchanged, err := bindFileHasContent(fSys, plan.sidecarPath, plan.sidecarContent)
+ if err != nil {
+ return nil, err
+ }
+ if !unchanged {
+ writes = append(writes, bindWrite{path: plan.sidecarPath, data: plan.sidecarContent, perm: fileWritePerm(fSys, plan.sidecarPath, 0o644), kind: "sidecar"})
+ }
+ }
+ desiredArtifacts := make(map[string]bool, len(plan.rebaseArtifacts))
+ for _, artifact := range plan.rebaseArtifacts {
+ if artifact.name == "" || artifact.path == "" {
+ return nil, fmt.Errorf("cannot render generated Trice bind rebase helper for %s scope %s", plan.path, artifact.scope)
+ }
+ desiredArtifacts[artifact.path] = true
+ unchanged, err := bindFileHasContent(fSys, artifact.path, artifact.content)
+ if err != nil {
+ return nil, err
+ }
+ if !unchanged {
+ writes = append(writes, bindWrite{path: artifact.path, data: artifact.content, perm: fileWritePerm(fSys, artifact.path, 0o644), kind: "rebase"})
+ }
+ }
+ staleArtifacts, err := findStaleBindRebaseArtifacts(fSys, plan, desiredArtifacts)
+ if err != nil {
+ return nil, err
+ }
+ for _, path := range staleArtifacts {
+ writes = append(writes, bindWrite{path: path, kind: "rebase-delete", remove: true})
+ }
+ }
+
+ if len(IDData.idToTrice) > IDData.idInitialCount {
+ til, err := IDData.idToTrice.toJSON()
+ if err != nil {
+ return nil, fmt.Errorf("cannot render %s: %w", FnJSON, err)
+ }
+ unchanged, err := bindFileHasContent(fSys, FnJSON, til)
+ if err != nil {
+ return nil, err
+ }
+ if !unchanged {
+ writes = append(writes, bindWrite{path: FnJSON, data: til, perm: fileWritePerm(fSys, FnJSON, 0o666), kind: "til"})
+ }
+ }
+
+ if LIFnJSON != "off" && LIFnJSON != "none" && (len(IDData.idToLocNew) > 0 || IDData.liNeedsRewrite) {
+ for id, location := range IDData.idToLocNew {
+ IDData.idToLocRef[id] = location
+ }
+ li, err := IDData.idToLocRef.toJSON()
+ if err != nil {
+ return nil, fmt.Errorf("cannot render %s: %w", LIFnJSON, err)
+ }
+ unchanged, err := bindFileHasContent(fSys, LIFnJSON, li)
+ if err != nil {
+ return nil, err
+ }
+ if !unchanged {
+ writes = append(writes, bindWrite{path: LIFnJSON, data: li, perm: fileWritePerm(fSys, LIFnJSON, 0o666), kind: "li"})
+ }
+ }
+
+ order := map[string]int{"sidecar": 0, "rebase": 0, "til": 1, "li": 2, "source": 3, "rebase-delete": 4}
+ sort.SliceStable(writes, func(i, j int) bool {
+ if order[writes[i].kind] != order[writes[j].kind] {
+ return order[writes[i].kind] < order[writes[j].kind]
+ }
+ return writes[i].path < writes[j].path
+ })
+ return writes, nil
+}
+
+// findStaleBindRebaseArtifacts lists only generated helper names belonging to
+// the exact owner sidecar and leaves unrelated BindDir content untouched.
+func findStaleBindRebaseArtifacts(fSys *afero.Afero, plan *bindFilePlan, desired map[string]bool) ([]string, error) {
+ if plan.sidecarName == "" || plan.key == "" {
+ return nil, nil
+ }
+ entries, err := fSys.ReadDir(BindDir)
+ if errors.Is(err, os.ErrNotExist) {
+ return nil, nil
+ }
+ if err != nil {
+ return nil, fmt.Errorf("cannot inspect bind directory %s for stale rebase helpers: %w", BindDir, err)
+ }
+ var stale []string
+ for _, entry := range entries {
+ if entry.IsDir() {
+ continue
+ }
+ if _, _, ok := parseBindRebaseArtifactName(entry.Name(), plan.sidecarName, plan.key); !ok {
+ continue
+ }
+ path := filepath.Join(BindDir, entry.Name())
+ if !desired[path] {
+ stale = append(stale, path)
+ }
+ }
+ sort.Strings(stale)
+ return stale, nil
+}
+
+// bindFileHasContent compares bytes without treating an absent generated destination as an error.
+func bindFileHasContent(fSys *afero.Afero, path string, expected []byte) (bool, error) {
+ content, err := fSys.ReadFile(path)
+ if errors.Is(err, os.ErrNotExist) {
+ return false, nil
+ }
+ if err != nil {
+ return false, fmt.Errorf("cannot read %s before commit: %w", path, err)
+ }
+ return bytes.Equal(content, expected), nil
+}
+
+// commitBindWrites creates only required parent directories and rolls back earlier replacements on failure.
+func commitBindWrites(fSys *afero.Afero, writes []bindWrite) error {
+ originals, err := snapshotBindWrites(fSys, writes)
+ if err != nil {
+ return err
+ }
+ for index, write := range writes {
+ if write.remove {
+ if err := fSys.Remove(write.path); err != nil {
+ return rollbackBindWrites(fSys, writes[:index], originals[:index], fmt.Errorf("cannot remove %s: %w", write.path, err))
+ }
+ continue
+ }
+ if write.kind == "sidecar" || write.kind == "rebase" {
+ if err := fSys.MkdirAll(filepath.Dir(write.path), 0o755); err != nil {
+ return rollbackBindWrites(fSys, writes[:index], originals[:index], fmt.Errorf("cannot create bind directory for %s: %w", write.path, err))
+ }
+ }
+ if err := atomicWriteFile(fSys, write.path, write.data, write.perm); err != nil {
+ return rollbackBindWrites(fSys, writes[:index], originals[:index], fmt.Errorf("cannot write %s: %w", write.path, err))
+ }
+ }
+ return nil
+}
+
+// snapshotBindWrites captures every old destination before the first regular output is replaced.
+func snapshotBindWrites(fSys *afero.Afero, writes []bindWrite) ([]bindOriginalFile, error) {
+ originals := make([]bindOriginalFile, len(writes))
+ for index, write := range writes {
+ info, err := fSys.Stat(write.path)
+ if errors.Is(err, os.ErrNotExist) {
+ continue
+ }
+ if err != nil {
+ return nil, fmt.Errorf("cannot inspect %s before commit: %w", write.path, err)
+ }
+ content, err := fSys.ReadFile(write.path)
+ if err != nil {
+ return nil, fmt.Errorf("cannot snapshot %s before commit: %w", write.path, err)
+ }
+ originals[index] = bindOriginalFile{existed: true, data: content, perm: info.Mode()}
+ }
+ return originals, nil
+}
+
+// rollbackBindWrites restores every already-applied destination in reverse commit order.
+func rollbackBindWrites(fSys *afero.Afero, writes []bindWrite, originals []bindOriginalFile, cause error) error {
+ var rollbackErrors []error
+ for index := len(writes) - 1; index >= 0; index-- {
+ write := writes[index]
+ original := originals[index]
+ if original.existed {
+ if err := atomicWriteFile(fSys, write.path, original.data, original.perm); err != nil {
+ rollbackErrors = append(rollbackErrors, fmt.Errorf("cannot restore %s: %w", write.path, err))
+ }
+ continue
+ }
+ if err := fSys.Remove(write.path); err != nil && !errors.Is(err, os.ErrNotExist) {
+ rollbackErrors = append(rollbackErrors, fmt.Errorf("cannot remove newly created %s: %w", write.path, err))
+ }
+ }
+ if len(rollbackErrors) == 0 {
+ return cause
+ }
+ return errors.Join(cause, fmt.Errorf("bind commit rollback failed: %w", errors.Join(rollbackErrors...)))
+}
+
+// printBindSummary emits the requested classification and plan details only in verbose mode.
+func printBindSummary(w io.Writer, plans []bindFilePlan, writes []bindWrite) {
+ if !Verbose {
+ return
+ }
+ writeKinds := make(map[string]string, len(writes))
+ for _, write := range writes {
+ writeKinds[write.path] = write.kind
+ }
+ for i := range plans {
+ plan := &plans[i]
+ fmt.Fprintf(w, "%s: %s\n", plan.path, plan.class)
+ if plan.class == bindFileInsert {
+ fmt.Fprintln(w, " skipped: insert-owned")
+ continue
+ }
+ if plan.includeAdded {
+ fmt.Fprintf(w, " include planned: %s\n", plan.sidecarName)
+ } else if plan.sidecarName != "" {
+ fmt.Fprintf(w, " include recognized: %s\n", plan.sidecarName)
+ }
+ if writeKinds[plan.sidecarPath] == "sidecar" {
+ fmt.Fprintf(w, " sidecar generated or updated: %s\n", plan.sidecarPath)
+ }
+ if plan.newIDs+plan.reusedIDs > 0 {
+ fmt.Fprintf(w, " IDs: %d reused, %d new\n", plan.reusedIDs, plan.newIDs)
+ }
+ }
+ if DryRun {
+ fmt.Fprintf(w, "dry-run: %d file write(s) suppressed\n", len(writes))
+ }
+}
+
+// reportBindDiagnostics prints every stable diagnostic and returns one non-zero command error.
+func reportBindDiagnostics(w io.Writer, diagnostics []bindDiagnostic) error {
+ diagnostics = sortedBindDiagnostics(diagnostics)
+ for _, diagnostic := range diagnostics {
+ fmt.Fprintln(w, formatBindDiagnostic(diagnostic))
+ }
+ return fmt.Errorf("trice bind failed with %d error(s)", len(diagnostics))
+}
+
+// compactSortedStrings returns a deterministic unique owner list.
+func compactSortedStrings(values []string) []string {
+ result := append([]string(nil), values...)
+ sort.Strings(result)
+ if len(result) == 0 {
+ return result
+ }
+ write := 1
+ for read := 1; read < len(result); read++ {
+ if result[read] != result[write-1] {
+ result[write] = result[read]
+ write++
+ }
+ }
+ return result[:write]
+}
diff --git a/internal/id/bindIDs_doc.go b/internal/id/bindIDs_doc.go
new file mode 100644
index 000000000..596ce0145
--- /dev/null
+++ b/internal/id/bindIDs_doc.go
@@ -0,0 +1,129 @@
+// SPDX-License-Identifier: MIT
+
+// Package id implements Trice ID management, including hierarchical metadata
+// recovery for trice bind.
+//
+// # Bind Ownership Model
+//
+// One bind invocation has exactly one writable context. FnJSON is the primary
+// TIL, LIFnJSON is the primary LI, and BindDir is the generated output tree.
+// Source files selected through Srcs may name individual files or directory
+// trees. Only the primary TIL, primary LI, current BindDir, and source lines
+// that genuinely require bind instrumentation may be written.
+//
+// Additional JSON documents and generated sidecars are read-only evidence.
+// They help a parent build preserve IDs previously assigned by a nested or
+// differently rooted project, but they never become additional write targets.
+// This distinction allows one source file to retain its File Key while fresh
+// sidecars are generated in a different build/triceIDs directory.
+//
+// # Bounded Discovery
+//
+// For each source file, discovery starts in the file's directory and walks up
+// to the most specific containing Srcs entry. A file-valued -src is anchored at
+// the file's parent directory. At most one further parent directory is added.
+// The directories containing the primary TIL and LI, plus at most one parent
+// of each, are additional bounded anchors. Discovery never performs an
+// unbounded filesystem search and never scans sibling trees recursively.
+//
+// Hidden directories are skipped during source traversal and implicit metadata
+// discovery. A hidden directory is a path component whose name starts with a
+// dot, excluding the navigation elements "." and "..". This makes .git, .trice,
+// and similar obsolete cache trees inert without coupling bind behavior to Git
+// repository boundaries. Explicit primary TIL, LI, and BindDir paths retain
+// their CLI meaning; the hidden-directory rule controls source traversal and
+// implicit discovery.
+//
+// Every immediate *.json file in the bounded directories is inspected by
+// content. A non-empty map with numeric keys and Type/Strg values is a TIL; a
+// non-empty map with numeric keys and File/Line values is an LI. Filenames have
+// no semantic role, so names such as demoIDs.json are supported. Empty
+// secondary maps contain no reusable evidence and are ignored. Malformed,
+// mixed, unreadable, or unrelated secondary JSON is ignored and described only
+// in verbose output. CLI-selected primary metadata remains authoritative and
+// keeps its existing error behavior.
+//
+// # File Keys and Historical Sidecars
+//
+// A valid File Key stored in a source include is stable across source roots,
+// metadata files, and BindDir changes. A bind-owned file without a File Key
+// receives one when required. A duplicate key owned by multiple physical files
+// remains fatal because the original owner cannot be inferred safely.
+//
+// For a source that already owns a File Key, discovery looks for its exact
+// sidecar filename in the current BindDir and in conventional build/triceIDs
+// directories along the bounded search corridor. Historical sidecars are
+// parsed only as ID evidence. They are never copied: their line descriptors may
+// be stale after source edits. Current Trice sites are analyzed again, old IDs
+// are validated through available TIL data, and equal TriceFmt values are
+// aligned in source order. The current BindDir always receives a freshly
+// rendered sidecar and any required rebase helpers.
+//
+// Compact generated rebase lines are also regenerated semantically. When an
+// old and new line have the same helper name, File Key, scope, and boundary
+// kind, formatter-owned horizontal whitespace from the source is restored
+// byte-for-byte. A no-op bind therefore does not rewrite or recompile an
+// otherwise unchanged source merely because clang-format aligned a comment.
+//
+// # ID Candidate Order
+//
+// Trice matching continues to use the established parser and TriceFmt rules.
+// A match is the normalized Trice type together with its exact format string;
+// equal strings with different transport types are not interchangeable.
+// Historical data supplies candidates in this order:
+//
+// - a valid sidecar descriptor for the same File Key and ordered TriceFmt;
+// - a matching TIL entry with LI evidence for the same source file;
+// - an unused exact TriceFmt in the primary TIL without LI ownership;
+// - an unused exact TriceFmt in the nearest read-only TIL;
+// - a newly allocated ID from the primary ID range.
+//
+// Candidate ordering is deterministic by evidence strength, search proximity,
+// line distance, numeric ID, and metadata path. Each numeric ID is claimed by
+// at most one active site in a bind plan. Repeated equal TriceFmt values use
+// sidecar and LI evidence when available and otherwise receive sorted IDs in
+// sorted source order. Without any persistent location evidence, the exact old
+// per-site association of identical formats is unknowable, but decoding remains
+// correct and the fallback remains reproducible.
+//
+// Preferred historical IDs are inserted only into an in-memory copy of the
+// source and then processed by insertTriceIDs. Bind therefore does not maintain
+// an independent parser, allocator, range implementation, or conflict engine.
+// The real source stays ID-free.
+//
+// # Primary Precedence and Recoverable Collisions
+//
+// Existing primary TIL mappings are immutable during conflict resolution. If a
+// read-only project proposes an ID that the primary TIL maps to another type or
+// string, the secondary proposal yields. Bind tries another exact-format ID and
+// finally allocates a new primary ID. This is recoverable and silent by default;
+// verbose output explains the discarded candidate.
+//
+// A conflict-free secondary ID is retained even when it lies outside IDMin and
+// IDMax, provided it is otherwise a valid Trice ID. Those ranges govern only
+// new allocation. The selected mapping is added to the primary TIL, and its
+// current location is written to the primary LI. Only entries used by active
+// scanned sites are imported. Secondary TILs, LIs, sidecars, and helper files
+// remain unchanged.
+//
+// If multiple read-only projects propose the same free number differently,
+// deterministic site processing lets the strongest first proposal claim it;
+// later proposals yield and receive another existing or new ID. Thus a parent
+// product can compile a subproject with a parent-specific ID while the same
+// source continues to use its original ID in the standalone subproject build.
+//
+// # Diagnostics and Transactionality
+//
+// Recoverable secondary-data problems are verbose information, not normal
+// diagnostics. Fatal conditions are limited to states from which no complete
+// safe primary output can be planned, such as malformed primary metadata,
+// duplicate File-Key ownership, unsupported source structure, exhausted ID
+// space, or an output failure.
+//
+// Source analysis, discovery, conflict resolution, ID assignment, JSON
+// rendering, and sidecar rendering complete before the first regular write.
+// Fatal analysis emits sorted actionable diagnostics and writes no source,
+// primary metadata, or generated artifact. The commit phase compares exact
+// bytes, omits unchanged destinations, uses atomic replacement, and rolls back
+// earlier replacements if a later destination fails.
+package id
diff --git a/internal/id/bindIDs_test.go b/internal/id/bindIDs_test.go
new file mode 100644
index 000000000..b37f15e55
--- /dev/null
+++ b/internal/id/bindIDs_test.go
@@ -0,0 +1,773 @@
+// SPDX-License-Identifier: MIT
+
+package id
+
+import (
+ "bytes"
+ "fmt"
+ "io"
+ "os"
+ "path/filepath"
+ "strings"
+ "testing"
+
+ "github.com/spf13/afero"
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+)
+
+// bindRenameCountingFs observes atomic replacements without changing filesystem behavior.
+type bindRenameCountingFs struct {
+ afero.Fs
+ renames int
+}
+
+// Rename records one attempted destination replacement and delegates it unchanged.
+func (f *bindRenameCountingFs) Rename(oldName, newName string) error {
+ f.renames++
+ return f.Fs.Rename(oldName, newName)
+}
+
+// bindFailOnceRenameFs injects one commit-time failure for a specific destination.
+type bindFailOnceRenameFs struct {
+ afero.Fs
+ destination string
+ failed bool
+}
+
+// bindMetadataReadFailFs injects a stable read error for one optional metadata
+// candidate while leaving directory discovery and every primary file intact.
+type bindMetadataReadFailFs struct {
+ afero.Fs
+ path string
+ readAttempts int
+}
+
+// Open records and rejects access to the selected secondary JSON file. The
+// resolver should cache this negative result and therefore call Open only once.
+func (f *bindMetadataReadFailFs) Open(name string) (afero.File, error) {
+ if name == f.path {
+ f.readAttempts++
+ return nil, os.ErrPermission
+ }
+ return f.Fs.Open(name)
+}
+
+// Rename fails the first replacement of destination and delegates every other rename.
+func (f *bindFailOnceRenameFs) Rename(oldName, newName string) error {
+ if newName == f.destination && !f.failed {
+ f.failed = true
+ return fmt.Errorf("injected rename failure for %s", newName)
+ }
+ return f.Fs.Rename(oldName, newName)
+}
+
+// prepareBindTest configures one isolated memory-filesystem project with deterministic IDs and keys.
+func prepareBindTest(t *testing.T, sources map[string]string) func() {
+ t.Helper()
+ teardown := Setup(t)
+ BindDir = filepath.Join(Proj, t.Name(), "build", "triceIDs")
+ Min = 100
+ Max = 199
+ SearchMethod = "upward"
+ DefaultStampSize = 16
+ Srcs = nil
+ ExcludeSrcs = nil
+ TriceAliases = nil
+ TriceSAliases = nil
+ ProcessAliases()
+ require.NoError(t, FSys.MkdirAll(filepath.Join(Proj, t.Name()), 0o755))
+ paths := make([]string, 0, len(sources))
+ for name, source := range sources {
+ path := filepath.Join(Proj, t.Name(), name)
+ require.NoError(t, FSys.MkdirAll(filepath.Dir(path), 0o755))
+ require.NoError(t, FSys.WriteFile(path, []byte(source), 0o644))
+ paths = append(paths, path)
+ }
+ Srcs = paths
+ oldReader := bindRandomReader
+ bindRandomReader = bytes.NewReader(bytes.Repeat([]byte{0x11}, 8*len(sources)+8))
+ return func() {
+ bindRandomReader = oldReader
+ require.NoError(t, FSys.RemoveAll(filepath.Join(Proj, t.Name())))
+ teardown()
+ }
+}
+
+// TestBindGeneratesStableSidecarAndKeepsCallsIDFree covers the ordinary repeated bind workflow.
+func TestBindGeneratesStableSidecarAndKeepsCallsIDFree(t *testing.T) {
+ source := "#include \"trice.h\"\n\nstatic inline void log_value(int value) {\n trice(\"msg:value=%d\\n\", value);\n TRICE8_1(id(0), \"msg:byte=%d\\n\", value);\n}\n"
+ defer prepareBindTest(t, map[string]string{"module.c": source})()
+
+ path := Srcs[0]
+ require.NoError(t, SubCmdIdBind(io.Discard, FSys))
+ bound, err := FSys.ReadFile(path)
+ require.NoError(t, err)
+ assert.Contains(t, string(bound), "#include \"trice_module_c_K1111111111111111.h\" // trice-bind:")
+ assert.Contains(t, string(bound), `trice("msg:value=%d\n", value);`)
+ assert.Contains(t, string(bound), `TRICE8_1(id(0), "msg:byte=%d\n", value);`)
+ assert.NotContains(t, string(bound), "iD(100)")
+
+ sidecarPath := filepath.Join(BindDir, "trice_module_c_K1111111111111111.h")
+ sidecar, err := FSys.ReadFile(sidecarPath)
+ require.NoError(t, err)
+ assert.Contains(t, string(sidecar), "#define TRICE_BIND_SITE_K1111111111111111_L5 TRICE_BIND_AUTO, iD(100u)")
+ assert.Contains(t, string(sidecar), "#define TRICE_BIND_SITE_K1111111111111111_L6 TRICE_BIND_REPLACE, id(101u)")
+
+ firstSource := append([]byte(nil), bound...)
+ firstSidecar := append([]byte(nil), sidecar...)
+ require.NoError(t, SubCmdIdBind(io.Discard, FSys))
+ bound, err = FSys.ReadFile(path)
+ require.NoError(t, err)
+ sidecar, err = FSys.ReadFile(sidecarPath)
+ require.NoError(t, err)
+ assert.Equal(t, firstSource, bound)
+ assert.Equal(t, firstSidecar, sidecar)
+}
+
+// TestBindPreservesUppercaseStampSemantics checks default and explicit stamp wrappers independently.
+func TestBindPreservesUppercaseStampSemantics(t *testing.T) {
+ source := "TRICE(\"zero\");\nTRICE(id(0), \"id\");\nTRICE(Id(0), \"Id\");\nTRICE(ID(0), \"ID\");\ntrice(Id(0), \"lower Id\");\ntrice(ID(0), \"lower ID\");\n"
+ defer prepareBindTest(t, map[string]string{"stamp.c": source})()
+ DefaultStampSize = 32
+
+ require.NoError(t, SubCmdIdBind(io.Discard, FSys))
+ sidecar, err := FSys.ReadFile(filepath.Join(BindDir, "trice_stamp_c_K1111111111111111.h"))
+ require.NoError(t, err)
+ assert.Contains(t, string(sidecar), "TRICE_BIND_AUTO, ID(100u)")
+ assert.Contains(t, string(sidecar), "TRICE_BIND_REPLACE, id(101u)")
+ assert.Contains(t, string(sidecar), "TRICE_BIND_REPLACE, Id(102u)")
+ assert.Contains(t, string(sidecar), "TRICE_BIND_REPLACE, ID(103u)")
+ assert.Contains(t, string(sidecar), "TRICE_BIND_REPLACE, Id(104u)")
+ assert.Contains(t, string(sidecar), "TRICE_BIND_REPLACE, ID(105u)")
+}
+
+// TestBindDefaultWrapperSelection covers every configured uppercase default and the lowercase invariant.
+func TestBindDefaultWrapperSelection(t *testing.T) {
+ defer Setup(t)()
+ tests := []struct {
+ stamp int
+ macro string
+ want string
+ }{
+ {stamp: 0, macro: "TRICE", want: "id"},
+ {stamp: 16, macro: "TRICE", want: "Id"},
+ {stamp: 32, macro: "TRICE", want: "ID"},
+ {stamp: 0, macro: "trice", want: "iD"},
+ {stamp: 32, macro: "TRice", want: "iD"},
+ }
+ for _, test := range tests {
+ DefaultStampSize = test.stamp
+ assert.Equal(t, test.want, bindDefaultWrapper(test.macro))
+ }
+}
+
+// TestBindRecognizesWhitespaceIncludeAndReactivation accepts comment-free repeated owner includes.
+func TestBindRecognizesWhitespaceIncludeAndReactivation(t *testing.T) {
+ key := "K0123456789ABCDEF"
+ name := "trice_renamed_c_" + key + ".h"
+ source := fmt.Sprintf("# include \"%s\"\ntrice(\"first\");\n#include \"late.h\"\n# include \"%s\" // no identity in this comment\ntrice(\"second\");\n", name, name)
+ defer prepareBindTest(t, map[string]string{"renamed-again.c": source})()
+ require.NoError(t, FSys.MkdirAll(BindDir, 0o755))
+ require.NoError(t, FSys.WriteFile(filepath.Join(BindDir, name), []byte("#define TRICE_BIND_FILE_KEY "+key+"\n#define TRICE_BIND_ROUTE_"+key+" BIND\n"), 0o644))
+
+ require.NoError(t, SubCmdIdBind(io.Discard, FSys))
+ bound, err := FSys.ReadFile(Srcs[0])
+ require.NoError(t, err)
+ assert.Equal(t, source, string(bound))
+ sidecar, err := FSys.ReadFile(filepath.Join(BindDir, name))
+ require.NoError(t, err)
+ assert.Contains(t, string(sidecar), "_L2")
+ assert.Contains(t, string(sidecar), "_L5")
+}
+
+// TestBindIgnoresCommentedIncludes keeps non-directive text out of placement and identity analysis.
+func TestBindIgnoresCommentedIncludes(t *testing.T) {
+ source := "/*\n#include \"trice_foreign_c_K0123456789ABCDEF.h\"\n*/\ntrice(\"bound\");\n"
+ defer prepareBindTest(t, map[string]string{"commented.c": source})()
+
+ require.NoError(t, SubCmdIdBind(io.Discard, FSys))
+ after, err := FSys.ReadFile(Srcs[0])
+ require.NoError(t, err)
+ assert.Contains(t, string(after), "#include \"trice_commented_c_K1111111111111111.h\"")
+ assert.Contains(t, string(after), "#include \"trice_foreign_c_K0123456789ABCDEF.h\"")
+}
+
+// TestBindIgnoresCommentedCalls keeps parser-like text in comments out of bind diagnostics and sidecars.
+func TestBindIgnoresCommentedCalls(t *testing.T) {
+ source := "// trice(\"line comment\");\n/* TRICE(ID(0), \"block comment\"); */\ntrice(\"active\");\n"
+ defer prepareBindTest(t, map[string]string{"commented-calls.c": source})()
+
+ require.NoError(t, SubCmdIdBind(io.Discard, FSys))
+ sidecar, err := FSys.ReadFile(filepath.Join(BindDir, "trice_commented_calls_c_K1111111111111111.h"))
+ require.NoError(t, err)
+ assert.Equal(t, 1, strings.Count(string(sidecar), "#define TRICE_BIND_SITE_"))
+ assert.Contains(t, string(sidecar), "active")
+ assert.NotContains(t, string(sidecar), "line comment")
+ assert.NotContains(t, string(sidecar), "block comment")
+ assert.Len(t, IDData.idToTrice, 1)
+ assert.Len(t, IDData.idToLocNew, 1)
+}
+
+// TestBindRejectsUnsafePlacementWithoutWriting protects all regular outputs after analysis failure.
+func TestBindRejectsUnsafePlacementWithoutWriting(t *testing.T) {
+ source := "void f(void) { trice(\"first\"); }\n#include \"later.h\"\n"
+ defer prepareBindTest(t, map[string]string{"unsafe.c": source})()
+ tilBefore, err := FSys.ReadFile(FnJSON)
+ require.NoError(t, err)
+
+ var output bytes.Buffer
+ err = SubCmdIdBind(&output, FSys)
+ require.Error(t, err)
+ assert.Contains(t, output.String(), "cannot place bind include safely")
+ after, readErr := FSys.ReadFile(Srcs[0])
+ require.NoError(t, readErr)
+ assert.Equal(t, source, string(after))
+ _, statErr := FSys.Stat(BindDir)
+ assert.Error(t, statErr)
+ tilAfter, readErr := FSys.ReadFile(FnJSON)
+ require.NoError(t, readErr)
+ assert.Equal(t, tilBefore, tilAfter)
+}
+
+// TestBindRejectsMixedSites verifies deterministic ownership diagnostics.
+func TestBindRejectsMixedSites(t *testing.T) {
+ sources := map[string]string{
+ "z.c": "trice(iD(124), \"insert\");\ntrice(\"bind\");\n",
+ "a.c": "trice(iD(123), \"insert\");\ntrice(\"bind\");\n",
+ }
+ defer prepareBindTest(t, sources)()
+
+ var output bytes.Buffer
+ err := SubCmdIdBind(&output, FSys)
+ require.Error(t, err)
+ text := output.String()
+ assert.Contains(t, text, "file mixes explicit non-zero IDs")
+ assert.Less(t, strings.Index(text, "a.c"), strings.Index(text, "z.c"))
+ for _, path := range Srcs {
+ content, readErr := FSys.ReadFile(path)
+ require.NoError(t, readErr)
+ assert.Equal(t, sources[filepath.Base(path)], string(content))
+ }
+}
+
+// TestBindMarkersAliasesAndMacroDefinitionSupport combines parser sharing with an unused wrapper definition.
+func TestBindMarkersAliasesAndMacroDefinitionSupport(t *testing.T) {
+ source := "// TRICE_INSERT_OFF\ntrice(iD(777), \"ignored\");\n// TRICE_INSERT_ON\nLOG(\"alias=%d\", 1);\n#define BAD() trice(\"bad\")\n"
+ defer prepareBindTest(t, map[string]string{"alias.c": source})()
+ TriceAliases = ArrayFlag{"LOG"}
+ ProcessAliases()
+
+ require.NoError(t, SubCmdIdBind(io.Discard, FSys))
+ after, readErr := FSys.ReadFile(Srcs[0])
+ require.NoError(t, readErr)
+ assert.Contains(t, string(after), "trice-bind: keep as last include")
+ sidecar, readErr := FSys.ReadFile(filepath.Join(BindDir, "trice_alias_c_K1111111111111111.h"))
+ require.NoError(t, readErr)
+ assert.Contains(t, string(sidecar), "TRICE_BIND_DEFINITION_K1111111111111111")
+ assert.NotContains(t, string(sidecar), "777u")
+}
+
+// TestBindMultipleDirectSitesGenerateLocalRebase covers two and three direct sites on one line.
+func TestBindMultipleDirectSitesGenerateLocalRebase(t *testing.T) {
+ source := "#include \"trice.h\"\nvoid f(void) { trice(\"one\"); trice(\"two\"); trice(\"three\"); }\n"
+ defer prepareBindTest(t, map[string]string{"multi.c": source})()
+
+ require.NoError(t, SubCmdIdBind(io.Discard, FSys))
+ bound, err := FSys.ReadFile(Srcs[0])
+ require.NoError(t, err)
+ assert.Contains(t, string(bound), "trice-bind: generated rebase begin K1111111111111111_R0")
+ assert.Contains(t, string(bound), "trice-bind: generated rebase end K1111111111111111_R0")
+ assert.Equal(t, 1, strings.Count(string(bound), bindRebaseIncludeMarker+"begin"))
+ assert.NotContains(t, string(bound), "#define TRICE_BIND_REBASE_BEGIN")
+ assert.NotContains(t, string(bound), "iD(100")
+ assert.Equal(t, strings.Count(source, "\n")+3, strings.Count(string(bound), "\n"), "one owner include and two rebase boundary includes are added")
+
+ sidecarPath := filepath.Join(BindDir, "trice_multi_c_K1111111111111111.h")
+ sidecar, err := FSys.ReadFile(sidecarPath)
+ require.NoError(t, err)
+ assert.Contains(t, string(sidecar), "#define TRICE_BIND_REBASE_COUNT_K1111111111111111_R0 3")
+ assert.Contains(t, string(sidecar), "constructor(TRICE_BIND_ID_LOCATION_K1111111111111111_L4_O0)")
+ assert.Contains(t, string(sidecar), "constructor(TRICE_BIND_ID_LOCATION_K1111111111111111_L4_O1)")
+ assert.Contains(t, string(sidecar), "constructor(TRICE_BIND_ID_LOCATION_K1111111111111111_L4_O2)")
+ assert.Equal(t, 3, strings.Count(string(sidecar), "TRICE_BIND_LOCATION_"))
+ beginHelper, err := FSys.ReadFile(filepath.Join(BindDir, "trice_multi_c_K1111111111111111_R0_begin.h"))
+ require.NoError(t, err)
+ assert.Contains(t, string(beginHelper), "#define TRICE_BIND_REBASE_SCOPE K1111111111111111_R0")
+ assert.Contains(t, string(beginHelper), "#include \"trice_multi_c_K1111111111111111.h\"")
+ endHelper, err := FSys.ReadFile(filepath.Join(BindDir, "trice_multi_c_K1111111111111111_R0_end.h"))
+ require.NoError(t, err)
+ assert.Contains(t, string(endHelper), "#define TRICE_BIND_REBASE_END")
+
+ firstSource := append([]byte(nil), bound...)
+ firstSidecar := append([]byte(nil), sidecar...)
+ require.NoError(t, SubCmdIdBind(io.Discard, FSys))
+ bound, err = FSys.ReadFile(Srcs[0])
+ require.NoError(t, err)
+ sidecar, err = FSys.ReadFile(sidecarPath)
+ require.NoError(t, err)
+ assert.Equal(t, firstSource, bound)
+ assert.Equal(t, firstSidecar, sidecar)
+}
+
+// TestBindWrapperDefinitionsReuseIDsAtAllInvocations covers normal and same-line calls.
+func TestBindWrapperDefinitionsReuseIDsAtAllInvocations(t *testing.T) {
+ source := "#define LOG_ERROR(value) do { trice(\"first\"); trice(\"second=%d\", value); } while (0)\n" +
+ "void a(void) { LOG_ERROR(1); }\n" +
+ "void b(void) { LOG_ERROR(2); LOG_ERROR(3); }\n"
+ defer prepareBindTest(t, map[string]string{"wrapper.c": source})()
+
+ require.NoError(t, SubCmdIdBind(io.Discard, FSys))
+ sidecar, err := FSys.ReadFile(filepath.Join(BindDir, "trice_wrapper_c_K1111111111111111.h"))
+ require.NoError(t, err)
+ text := string(sidecar)
+ assert.Equal(t, 2, strings.Count(text, "#define TRICE_BIND_DEFINITION_"))
+ assert.Contains(t, text, "TRICE_BIND_ID_DEFINITION_K1111111111111111_L")
+ assert.Contains(t, text, " 100u // numeric definition descriptor")
+ assert.Contains(t, text, " 101u // numeric definition descriptor")
+ assert.Contains(t, text, "TRICE_BIND_REBASE_COUNT_K1111111111111111_R0 2")
+ assert.Contains(t, text, "TRICE_BIND_REBASE_COUNT_K1111111111111111_R1 4")
+ assert.Len(t, IDData.idToTrice, 2)
+ assert.Len(t, IDData.idToLocNew, 2)
+ for _, location := range IDData.idToLocNew {
+ assert.Equal(t, ToLIFile(Srcs[0]), normalizeLocationPath(location.File))
+ }
+}
+
+// TestBindSingleSiteWrapperUsesNormalLineDescriptors avoids an unnecessary counter dependency.
+func TestBindSingleSiteWrapperUsesNormalLineDescriptors(t *testing.T) {
+ source := "#define LOG_VALUE(value) trice(\"value=%d\", value)\n" +
+ "void f(void) {\n LOG_VALUE(1);\n LOG_VALUE(2);\n}\n"
+ defer prepareBindTest(t, map[string]string{"single-wrapper.c": source})()
+
+ require.NoError(t, SubCmdIdBind(io.Discard, FSys))
+ bound, err := FSys.ReadFile(Srcs[0])
+ require.NoError(t, err)
+ assert.NotContains(t, string(bound), "TRICE_BIND_REBASE_BEGIN")
+ sidecar, err := FSys.ReadFile(filepath.Join(BindDir, "trice_single_wrapper_c_K1111111111111111.h"))
+ require.NoError(t, err)
+ text := string(sidecar)
+ assert.NotContains(t, text, "__COUNTER__")
+ assert.NotContains(t, text, "TRICE_BIND_REBASE_")
+ assert.Equal(t, 1, strings.Count(text, "#define TRICE_BIND_DEFINITION_"))
+ assert.Equal(t, 2, strings.Count(text, "#define TRICE_BIND_SITE_"))
+ assert.Equal(t, 1, strings.Count(text, " 100u // numeric definition descriptor"), "the wrapper definition has one numeric source of truth")
+ assert.Contains(t, text, "iD(TRICE_BIND_ID_DEFINITION_")
+}
+
+// TestBindDetectsDuplicateFileKey rejects copied owner identity across physical files.
+func TestBindDetectsDuplicateFileKey(t *testing.T) {
+ key := "K0123456789ABCDEF"
+ name := "trice_owner_c_" + key + ".h"
+ source := fmt.Sprintf("#include \"%s\"\ntrice(\"bound\");\n", name)
+ defer prepareBindTest(t, map[string]string{"a.c": source, "b.c": source})()
+ require.NoError(t, FSys.MkdirAll(BindDir, 0o755))
+ require.NoError(t, FSys.WriteFile(filepath.Join(BindDir, name), []byte("#define TRICE_BIND_FILE_KEY "+key+"\n#define TRICE_BIND_ROUTE_"+key+" BIND\n"), 0o644))
+
+ var output bytes.Buffer
+ err := SubCmdIdBind(&output, FSys)
+ require.Error(t, err)
+ assert.Contains(t, output.String(), "belongs to multiple owner files")
+}
+
+// TestBindRejectsConflictingOwnerIncludes detects two distinct identities in one physical file.
+func TestBindRejectsConflictingOwnerIncludes(t *testing.T) {
+ first := "trice_owner_c_K0123456789ABCDEF.h"
+ second := "trice_owner_c_K1111111111111111.h"
+ source := fmt.Sprintf("#include \"%s\"\n#include \"%s\"\ntrice(\"bound\");\n", first, second)
+ defer prepareBindTest(t, map[string]string{"owner.c": source})()
+
+ var output bytes.Buffer
+ err := SubCmdIdBind(&output, FSys)
+ require.Error(t, err)
+ assert.Contains(t, output.String(), "includes conflicting Trice bind sidecars")
+ after, readErr := FSys.ReadFile(Srcs[0])
+ require.NoError(t, readErr)
+ assert.Equal(t, source, string(after))
+}
+
+// TestBindDryRunCalculatesButWritesNothing checks source, list, directory, and sidecar suppression.
+func TestBindDryRunCalculatesButWritesNothing(t *testing.T) {
+ source := "trice(\"dry\");\n"
+ defer prepareBindTest(t, map[string]string{"dry.c": source})()
+ DryRun = true
+ Verbose = true
+
+ var output bytes.Buffer
+ require.NoError(t, SubCmdIdBind(&output, FSys))
+ assert.Contains(t, output.String(), "dry-run:")
+ after, err := FSys.ReadFile(Srcs[0])
+ require.NoError(t, err)
+ assert.Equal(t, source, string(after))
+ _, err = FSys.Stat(BindDir)
+ assert.Error(t, err)
+}
+
+// TestBindAssignmentsAreDeterministicAcrossParallelReadOrder fixes assignment order to sorted paths.
+func TestBindAssignmentsAreDeterministicAcrossParallelReadOrder(t *testing.T) {
+ sources := map[string]string{
+ "z.c": "trice(\"z\");\n",
+ "a.c": "trice(\"a\");\n",
+ }
+ defer prepareBindTest(t, sources)()
+ bindRandomReader = bytes.NewReader(append(bytes.Repeat([]byte{0xAA}, 8), bytes.Repeat([]byte{0xBB}, 8)...))
+
+ require.NoError(t, SubCmdIdBind(io.Discard, FSys))
+ aSidecar, err := FSys.ReadFile(filepath.Join(BindDir, "trice_a_c_KAAAAAAAAAAAAAAAA.h"))
+ require.NoError(t, err)
+ zSidecar, err := FSys.ReadFile(filepath.Join(BindDir, "trice_z_c_KBBBBBBBBBBBBBBBB.h"))
+ require.NoError(t, err)
+ assert.Contains(t, string(aSidecar), "iD(100u)")
+ assert.Contains(t, string(zSidecar), "iD(101u)")
+}
+
+// TestBindUpdatesTriceCleanOnlyAfterSuccessfulAnalysis re-enables an existing clean configuration.
+func TestBindUpdatesTriceCleanOnlyAfterSuccessfulAnalysis(t *testing.T) {
+ source := "#define TRICE_CLEAN 1\n"
+ defer prepareBindTest(t, map[string]string{"triceConfig.h": source})()
+ tilBefore, err := FSys.ReadFile(FnJSON)
+ require.NoError(t, err)
+ liBefore, err := FSys.ReadFile(LIFnJSON)
+ require.NoError(t, err)
+
+ require.NoError(t, SubCmdIdBind(io.Discard, FSys))
+ after, err := FSys.ReadFile(Srcs[0])
+ require.NoError(t, err)
+ assert.Equal(t, "#define TRICE_CLEAN 0\n", string(after))
+ tilAfter, err := FSys.ReadFile(FnJSON)
+ require.NoError(t, err)
+ liAfter, err := FSys.ReadFile(LIFnJSON)
+ require.NoError(t, err)
+ assert.Equal(t, tilBefore, tilAfter)
+ assert.Equal(t, liBefore, liAfter)
+}
+
+// TestBindFileKeyAndSidecarName validates the stable key and readable basename formats directly.
+func TestBindFileKeyAndSidecarName(t *testing.T) {
+ defer Setup(t)()
+ oldReader := bindRandomReader
+ bindRandomReader = bytes.NewReader([]byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF})
+ defer func() { bindRandomReader = oldReader }()
+
+ key, err := newBindFileKey(map[string][]string{})
+ require.NoError(t, err)
+ assert.Equal(t, "K0123456789ABCDEF", key)
+ assert.Equal(t, "trice_module_name_c___K0123456789ABCDEF.h", bindSidecarFilename("dir/module.name-c++", key))
+}
+
+// TestBindClassifiesPhysicalFiles exercises none, insert-owned, bind-owned, and mixed inputs.
+func TestBindClassifiesPhysicalFiles(t *testing.T) {
+ defer Setup(t)()
+ ProcessAliases()
+ tests := []struct {
+ name string
+ source string
+ class bindFileClass
+ }{
+ {name: "none", source: "int value;\n", class: bindFileNone},
+ {name: "insert", source: "trice(iD(123), \"insert\");\n", class: bindFileInsert},
+ {name: "bound", source: "trice(\"bound\");\n", class: bindFileBound},
+ {name: "mixed", source: "trice(iD(123), \"insert\");\ntrice(\"bound\");\n", class: bindFileMixed},
+ }
+ for _, test := range tests {
+ t.Run(test.name, func(t *testing.T) {
+ plan := analyzeBindFile(bindFileInput{path: test.name + ".c", data: []byte(test.source)})
+ assert.Equal(t, test.class, plan.class)
+ })
+ }
+}
+
+// TestBindKeepsRepeatedFormatsDistinctAndStable verifies location-based reuse for identical log text.
+func TestBindKeepsRepeatedFormatsDistinctAndStable(t *testing.T) {
+ source := "trice(\"msg:same\");\ntrice(\"msg:same\");\n"
+ defer prepareBindTest(t, map[string]string{"same.c": source})()
+
+ require.NoError(t, SubCmdIdBind(io.Discard, FSys))
+ sidecarPath := filepath.Join(BindDir, "trice_same_c_K1111111111111111.h")
+ first, err := FSys.ReadFile(sidecarPath)
+ require.NoError(t, err)
+ assert.Contains(t, string(first), "iD(100u)")
+ assert.Contains(t, string(first), "iD(101u)")
+ require.NoError(t, SubCmdIdBind(io.Discard, FSys))
+ second, err := FSys.ReadFile(sidecarPath)
+ require.NoError(t, err)
+ assert.Equal(t, first, second)
+}
+
+// TestBindDoesNotReplaceUnchangedFiles observes that a second successful run performs no rename.
+func TestBindDoesNotReplaceUnchangedFiles(t *testing.T) {
+ source := "trice(\"msg:stable\");\n"
+ defer prepareBindTest(t, map[string]string{"stable.c": source})()
+ counting := &bindRenameCountingFs{Fs: FSys.Fs}
+ countedFileSystem := &afero.Afero{Fs: counting}
+
+ require.NoError(t, SubCmdIdBind(io.Discard, countedFileSystem))
+ assert.Positive(t, counting.renames)
+ counting.renames = 0
+ require.NoError(t, SubCmdIdBind(io.Discard, countedFileSystem))
+ assert.Zero(t, counting.renames)
+}
+
+// TestBindMetadataResolverCachesSecondaryFailures verifies that optional
+// project metadata is identified by content, malformed or unreadable files stay
+// non-fatal, and repeated source corridors do not repeat filesystem work or
+// verbose diagnostics.
+func TestBindMetadataResolverCachesSecondaryFailures(t *testing.T) {
+ teardown := Setup(t)
+ defer teardown()
+
+ metadataDir := filepath.Join(Proj, t.Name(), "nested")
+ defer func() { require.NoError(t, FSys.RemoveAll(metadataDir)) }()
+ require.NoError(t, FSys.MkdirAll(filepath.Join(metadataDir, "directory.json"), 0o755))
+ require.NoError(t, FSys.WriteFile(filepath.Join(metadataDir, "notes.txt"), []byte("not metadata"), 0o644))
+ require.NoError(t, FSys.WriteFile(filepath.Join(metadataDir, "empty.json"), []byte("{}"), 0o644))
+ require.NoError(t, FSys.WriteFile(filepath.Join(metadataDir, "broken.json"), []byte("{"), 0o644))
+ validPath := filepath.Join(metadataDir, "arbitrary-name.json")
+ writeBindTestTIL(t, validPath, TriceIDLookUp{151: {Type: "trice", Strg: "cached"}})
+ unreadablePath := filepath.Join(metadataDir, "unreadable.json")
+ writeBindTestTIL(t, unreadablePath, TriceIDLookUp{152: {Type: "trice", Strg: "unreadable"}})
+
+ failing := &bindMetadataReadFailFs{Fs: FSys.Fs, path: unreadablePath}
+ resolverFS := &afero.Afero{Fs: failing}
+ Verbose = true
+ var output bytes.Buffer
+ resolver := newBindMetadataResolver(&output, resolverFS)
+
+ first := resolver.metadataInDirectory(metadataDir)
+ second := resolver.metadataInDirectory(metadataDir)
+ require.Len(t, first, 1)
+ require.Len(t, second, 1)
+ assert.Same(t, first[0], second[0])
+ assert.Equal(t, validPath, first[0].path)
+ assert.Equal(t, TriceFmt{Type: "trice", Strg: "cached"}, first[0].til[151])
+ assert.Equal(t, 1, failing.readAttempts)
+ assert.Equal(t, 1, strings.Count(output.String(), "ignore unreadable secondary JSON"))
+ assert.Equal(t, 1, strings.Count(output.String(), "ignore secondary JSON"))
+ missingDir := filepath.Join(metadataDir, "missing")
+ assert.Nil(t, resolver.metadataInDirectory(missingDir))
+ assert.Nil(t, resolver.metadataInDirectory(missingDir))
+
+ // Disabling the primary LI is a supported command configuration. A nil
+ // diagnostic writer must remain silent instead of becoming a nil interface.
+ LIFnJSON = "off"
+ silentResolver := newBindMetadataResolver(nil, FSys)
+ assert.Empty(t, silentResolver.primaryLI)
+ assert.Equal(t, io.Discard, silentResolver.w)
+}
+
+// TestClassifyBindMetadataJSONRejectsInvalidFieldTypes covers the explicit
+// schema errors that distinguish a malformed optional catalog from a valid TIL
+// or LI. These errors remain non-fatal when discovery calls this classifier.
+func TestClassifyBindMetadataJSONRejectsInvalidFieldTypes(t *testing.T) {
+ invalidDocuments := []string{
+ `{"not-an-id":{"Type":"trice","Strg":"x"}}`,
+ `{"1":"not an object"}`,
+ `{"1":{"Type":7,"Strg":"x"}}`,
+ `{"1":{"File":"x.c","Line":"seven"}}`,
+ }
+ for _, document := range invalidDocuments {
+ _, _, _, err := classifyBindMetadataJSON([]byte(document))
+ assert.Error(t, err, document)
+ }
+}
+
+// TestCompactBindIDCandidatesKeepsStrongestDeterministicChoice exercises every
+// tie breaker and proves that duplicate numeric IDs retain their strongest,
+// lexically stable occurrence.
+func TestCompactBindIDCandidatesKeepsStrongestDeterministicChoice(t *testing.T) {
+ candidates := []bindIDCandidate{
+ {id: 50, priority: 2, source: "last"},
+ {id: 40, priority: 1, rank: 2, source: "rank"},
+ {id: 30, priority: 1, rank: 1, lineDistance: 3, source: "distance"},
+ {id: 20, priority: 1, rank: 1, lineDistance: 2, source: "id"},
+ {id: 10, priority: 1, rank: 1, lineDistance: 2, source: "weaker duplicate"},
+ {id: 10, priority: 0, rank: 9, lineDistance: 9, source: "strong duplicate"},
+ {id: 80, priority: 1, rank: 1, lineDistance: 2, source: "z-source"},
+ {id: 80, priority: 1, rank: 1, lineDistance: 2, source: "a-source"},
+ }
+
+ result := compactBindIDCandidates(candidates)
+ ids := make([]TriceID, 0, len(result))
+ for _, candidate := range result {
+ ids = append(ids, candidate.id)
+ }
+ assert.Equal(t, []TriceID{10, 20, 80, 30, 40, 50}, ids)
+ assert.Equal(t, "strong duplicate", result[0].source)
+ assert.Equal(t, "a-source", result[2].source)
+}
+
+// TestBindFormatIndexAddMaintainsSortedUniqueIDs verifies the live reverse
+// index update used after importing an ID from secondary read-only metadata.
+func TestBindFormatIndexAddMaintainsSortedUniqueIDs(t *testing.T) {
+ format := TriceFmt{Type: "trice", Strg: "indexed"}
+ index := make(bindFormatIndex)
+ index.add(format, 20)
+ index.add(format, 10)
+ index.add(format, 30)
+ index.add(format, 20)
+ assert.Equal(t, []TriceID{10, 20, 30}, index[format])
+}
+
+// TestBindRollsBackCommitFailure prevents a late metadata error from leaving
+// earlier sidecar or rebase-helper writes behind.
+func TestBindRollsBackCommitFailure(t *testing.T) {
+ source := "trice(\"msg:rollback-a\"); trice(\"msg:rollback-b\");\n"
+ defer prepareBindTest(t, map[string]string{"rollback.c": source})()
+ tilBefore, err := FSys.ReadFile(FnJSON)
+ require.NoError(t, err)
+ failing := &bindFailOnceRenameFs{Fs: FSys.Fs, destination: FnJSON}
+ failingFileSystem := &afero.Afero{Fs: failing}
+
+ err = SubCmdIdBind(io.Discard, failingFileSystem)
+ require.Error(t, err)
+ after, readErr := FSys.ReadFile(Srcs[0])
+ require.NoError(t, readErr)
+ assert.Equal(t, source, string(after))
+ tilAfter, readErr := FSys.ReadFile(FnJSON)
+ require.NoError(t, readErr)
+ assert.Equal(t, tilBefore, tilAfter)
+ entries, readErr := FSys.ReadDir(BindDir)
+ require.NoError(t, readErr)
+ assert.Empty(t, entries)
+}
+
+// TestBindRejectsCorruptSidecarRoute checks every key and route definition before replacing artifacts.
+func TestBindRejectsCorruptSidecarRoute(t *testing.T) {
+ key := "K0123456789ABCDEF"
+ name := "trice_owner_c_" + key + ".h"
+ source := fmt.Sprintf("#include \"%s\"\ntrice(\"bound\");\n", name)
+ defer prepareBindTest(t, map[string]string{"owner.c": source})()
+ require.NoError(t, FSys.MkdirAll(BindDir, 0o755))
+ corrupt := "#define TRICE_BIND_FILE_KEY " + key + "\n#define TRICE_BIND_FILE_KEY K2222222222222222\n#define TRICE_BIND_ROUTE_" + key + " BIND\n#define TRICE_BIND_ROUTE_K1111111111111111 BIND\n"
+ require.NoError(t, FSys.WriteFile(filepath.Join(BindDir, name), []byte(corrupt), 0o644))
+
+ var output bytes.Buffer
+ err := SubCmdIdBind(&output, FSys)
+ require.Error(t, err)
+ assert.Contains(t, output.String(), "declares key K2222222222222222")
+ assert.Contains(t, output.String(), "declares route for key K1111111111111111")
+ after, readErr := FSys.ReadFile(filepath.Join(BindDir, name))
+ require.NoError(t, readErr)
+ assert.Equal(t, corrupt, string(after))
+}
+
+// TestBindPreservesEmptyOwnerIdentity removes stale sites without dropping the include or key.
+func TestBindPreservesEmptyOwnerIdentity(t *testing.T) {
+ key := "K0123456789ABCDEF"
+ name := "trice_empty_c_" + key + ".h"
+ source := "#include \"" + name + "\"\nint value;\n"
+ defer prepareBindTest(t, map[string]string{"empty.c": source})()
+ require.NoError(t, FSys.MkdirAll(BindDir, 0o755))
+ stale := "#define TRICE_BIND_FILE_KEY " + key + "\n#define TRICE_BIND_ROUTE_" + key + " BIND\n#define TRICE_BIND_SITE_" + key + "_L2 TRICE_BIND_AUTO, iD(123u)\n"
+ require.NoError(t, FSys.WriteFile(filepath.Join(BindDir, name), []byte(stale), 0o644))
+
+ require.NoError(t, SubCmdIdBind(io.Discard, FSys))
+ after, err := FSys.ReadFile(Srcs[0])
+ require.NoError(t, err)
+ assert.Equal(t, source, string(after))
+ sidecar, err := FSys.ReadFile(filepath.Join(BindDir, name))
+ require.NoError(t, err)
+ assert.Contains(t, string(sidecar), "#define TRICE_BIND_FILE_KEY "+key)
+ assert.NotContains(t, string(sidecar), "#define TRICE_BIND_SITE_")
+}
+
+// TestBindAutomaticallyExcludesBindDirectory ensures hostile generated-tree input is never classified.
+func TestBindAutomaticallyExcludesBindDirectory(t *testing.T) {
+ sources := map[string]string{
+ "module.c": "trice(\"managed\");\n",
+ "build/triceIDs/hostile.c": "trice(iD(123), \"insert\");\ntrice(\"mixed\");\n",
+ }
+ defer prepareBindTest(t, sources)()
+ project := filepath.Join(Proj, t.Name())
+ Srcs = ArrayFlag{project}
+
+ require.NoError(t, SubCmdIdBind(io.Discard, FSys))
+ hostile, err := FSys.ReadFile(filepath.Join(BindDir, "hostile.c"))
+ require.NoError(t, err)
+ assert.Equal(t, sources["build/triceIDs/hostile.c"], string(hostile))
+}
+
+// TestInsertSkipsRecognizedBindOwner prevents accidental source instrumentation by the legacy command.
+func TestInsertSkipsRecognizedBindOwner(t *testing.T) {
+ key := "K0123456789ABCDEF"
+ source := "#include \"trice_owner_c_" + key + ".h\"\ntrice(\"bound\");\n"
+ defer prepareBindTest(t, map[string]string{"owner.c": source})()
+
+ require.NoError(t, SubCmdIdInsert(io.Discard, FSys))
+ after, err := FSys.ReadFile(Srcs[0])
+ require.NoError(t, err)
+ assert.Equal(t, source, string(after))
+}
+
+// TestBindInvalidOptionsAndOtherErrorsLeaveConfigUntouched checks both early and aggregated failures.
+func TestBindInvalidOptionsAndOtherErrorsLeaveConfigUntouched(t *testing.T) {
+ t.Run("invalid stamp", func(t *testing.T) {
+ source := "trice(\"bound\");\n"
+ defer prepareBindTest(t, map[string]string{"invalid.c": source})()
+ DefaultStampSize = 8
+ require.Error(t, SubCmdIdBind(io.Discard, FSys))
+ after, err := FSys.ReadFile(Srcs[0])
+ require.NoError(t, err)
+ assert.Equal(t, source, string(after))
+ })
+
+ t.Run("aggregated placement error", func(t *testing.T) {
+ sources := map[string]string{
+ "triceConfig.h": "#define TRICE_CLEAN 1\n",
+ "unsafe.c": "trice(\"first\");\n#include \"later.h\"\n",
+ }
+ defer prepareBindTest(t, sources)()
+ require.Error(t, SubCmdIdBind(io.Discard, FSys))
+ config, err := FSys.ReadFile(filepath.Join(Proj, t.Name(), "triceConfig.h"))
+ require.NoError(t, err)
+ assert.Equal(t, sources["triceConfig.h"], string(config))
+ })
+}
+
+// TestBindMultilineCommentStaysOnOnePhysicalLine guards generated preprocessing boundaries.
+func TestBindMultilineCommentStaysOnOnePhysicalLine(t *testing.T) {
+ source := "trice( \\\n \"msg:multiline\"\n);\n"
+ defer prepareBindTest(t, map[string]string{"multiline.c": source})()
+
+ require.NoError(t, SubCmdIdBind(io.Discard, FSys))
+ sidecar, err := FSys.ReadFile(filepath.Join(BindDir, "trice_multiline_c_K1111111111111111.h"))
+ require.NoError(t, err)
+ assert.Contains(t, string(sidecar), "// trice( \\ ...")
+ for _, line := range strings.Split(string(sidecar), "\n") {
+ assert.False(t, strings.HasSuffix(line, "\\"))
+ }
+}
+
+// TestBindRejectsUnresolvedRecognizedSites reports shared-parser failures instead of silently skipping them.
+func TestBindRejectsUnresolvedRecognizedSites(t *testing.T) {
+ sources := map[string]string{
+ "a.c": "trice(value);\n",
+ "b.c": "trice(\"unterminated\";\n",
+ }
+ defer prepareBindTest(t, sources)()
+
+ var output bytes.Buffer
+ err := SubCmdIdBind(&output, FSys)
+ require.Error(t, err)
+ assert.Contains(t, output.String(), "no supported format string")
+ assert.Contains(t, output.String(), "no matching closing parenthesis")
+ for _, path := range Srcs {
+ after, readErr := FSys.ReadFile(path)
+ require.NoError(t, readErr)
+ assert.Equal(t, sources[filepath.Base(path)], string(after))
+ }
+}
+
+// TestBindRejectsCompositeFormatString enforces the shared parser's non-leading literal boundary.
+func TestBindRejectsCompositeFormatString(t *testing.T) {
+ source := "#define PREFIX \"msg:\"\ntrice(PREFIX \"value=%d\\n\", 1);\n"
+ defer prepareBindTest(t, map[string]string{"composite.c": source})()
+
+ var output bytes.Buffer
+ err := SubCmdIdBind(&output, FSys)
+ require.Error(t, err)
+ assert.Contains(t, output.String(), "unsupported composite or non-leading format string")
+ after, readErr := FSys.ReadFile(Srcs[0])
+ require.NoError(t, readErr)
+ assert.Equal(t, source, string(after))
+}
diff --git a/internal/id/bindIntegration_test.go b/internal/id/bindIntegration_test.go
new file mode 100644
index 000000000..616cdd947
--- /dev/null
+++ b/internal/id/bindIntegration_test.go
@@ -0,0 +1,674 @@
+// SPDX-License-Identifier: MIT
+
+package id
+
+import (
+ "bytes"
+ "fmt"
+ "os"
+ "os/exec"
+ "path/filepath"
+ "regexp"
+ "runtime"
+ "strings"
+ "testing"
+
+ "github.com/spf13/afero"
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+)
+
+// bindIntegrationEnabled keeps compiler-dependent checks in the dedicated repository script.
+func bindIntegrationEnabled(t *testing.T) {
+ t.Helper()
+ if os.Getenv("TRICE_BIND_INTEGRATION") != "1" {
+ t.Skip("set TRICE_BIND_INTEGRATION=1 to run compiler and canonical-source checks")
+ }
+}
+
+// bindRepositoryRoot resolves repository fixtures without embedding a machine-specific path.
+func bindRepositoryRoot(t *testing.T) string {
+ t.Helper()
+ _, filename, _, ok := runtime.Caller(0)
+ require.True(t, ok)
+ return filepath.Clean(filepath.Join(filepath.Dir(filename), "..", ".."))
+}
+
+// prepareOSBindProject gives an integration test isolated lists, paths, and global ID state.
+func prepareOSBindProject(t *testing.T, project string) (*afero.Afero, func()) {
+ t.Helper()
+ teardown := Setup(t)
+ fileSystem := &afero.Afero{Fs: afero.NewOsFs()}
+ FnJSON = filepath.Join(project, "til.json")
+ LIFnJSON = filepath.Join(project, "li.json")
+ LIRoot = project
+ BindDir = filepath.Join(project, "build", "triceIDs")
+ Srcs = ArrayFlag{project}
+ ExcludeSrcs = nil
+ Min = 1000
+ Max = 7999
+ SearchMethod = "upward"
+ DefaultStampSize = 16
+ TriceAliases = nil
+ TriceSAliases = nil
+ IDData.TagList = nil
+ ProcessAliases()
+ require.NoError(t, os.WriteFile(FnJSON, []byte("{}\n"), 0o644))
+ require.NoError(t, os.WriteFile(LIFnJSON, []byte("{}\n"), 0o644))
+ return fileSystem, teardown
+}
+
+// writeBindIntegrationFile creates one documented test fixture below the temporary project.
+func writeBindIntegrationFile(t *testing.T, root, name, content string) string {
+ t.Helper()
+ path := filepath.Join(root, filepath.FromSlash(name))
+ require.NoError(t, os.MkdirAll(filepath.Dir(path), 0o755))
+ require.NoError(t, os.WriteFile(path, []byte(content), 0o644))
+ return path
+}
+
+// firstAvailableCompiler returns the first requested GCC- or Clang-compatible frontend.
+func firstAvailableCompiler(candidates ...string) string {
+ for _, candidate := range candidates {
+ if path, err := exec.LookPath(candidate); err == nil {
+ return path
+ }
+ }
+ return ""
+}
+
+// availableBindCompilers resolves every installed candidate once so the MVP2
+// matrix covers GCC- and Clang-compatible commands whenever both are present.
+func availableBindCompilers(candidates ...string) []string {
+ seen := make(map[string]bool)
+ var result []string
+ for _, candidate := range candidates {
+ path, err := exec.LookPath(candidate)
+ if err == nil && !seen[path] {
+ seen[path] = true
+ result = append(result, path)
+ }
+ }
+ return result
+}
+
+// compileBindFixture compiles without linking so target macro expansion is checked in isolation.
+func compileBindFixture(t *testing.T, compiler, standard, source, object string, includeDirs ...string) {
+ compileBindFixtureWithPedantry(t, compiler, standard, source, object, true, includeDirs...)
+}
+
+// compileBindFixtureWithPedantry optionally tolerates the established pre-C23 empty variadic slot in triceOff.h.
+func compileBindFixtureWithPedantry(t *testing.T, compiler, standard, source, object string, pedantic bool, includeDirs ...string) {
+ t.Helper()
+ args := []string{"-std=" + standard, "-Wall", "-Wextra", "-Werror"}
+ if pedantic {
+ args = append(args, "-pedantic")
+ }
+ for _, includeDir := range includeDirs {
+ args = append(args, "-I", includeDir)
+ }
+ args = append(args, "-c", source, "-o", object)
+ command := exec.Command(compiler, args...)
+ output, err := command.CombinedOutput()
+ require.NoErrorf(t, err, "%s %s\n%s", compiler, strings.Join(args, " "), output)
+}
+
+// compileBindFixtureOptimized compiles one target fixture at an explicit optimization level.
+func compileBindFixtureOptimized(t *testing.T, compiler, standard, optimization, source, object string, includeDirs ...string) {
+ t.Helper()
+ args := []string{"-std=" + standard, optimization, "-Wall", "-Wextra", "-Werror", "-pedantic"}
+ for _, includeDir := range includeDirs {
+ args = append(args, "-I", includeDir)
+ }
+ args = append(args, "-c", source, "-o", object)
+ command := exec.Command(compiler, args...)
+ output, err := command.CombinedOutput()
+ require.NoErrorf(t, err, "%s %s\n%s", compiler, strings.Join(args, " "), output)
+}
+
+// runBindFixtureCompiler exposes diagnostics for negative capability and
+// generated-invariant tests while retaining the normal warning policy.
+func runBindFixtureCompiler(compiler, standard, source, object string, extraFlags []string, includeDirs ...string) ([]byte, error) {
+ args := []string{"-std=" + standard, "-O0", "-Wall", "-Wextra", "-Werror", "-pedantic"}
+ args = append(args, extraFlags...)
+ for _, includeDir := range includeDirs {
+ args = append(args, "-I", includeDir)
+ }
+ args = append(args, "-c", source, "-o", object)
+ return exec.Command(compiler, args...).CombinedOutput()
+}
+
+// assertBindRebaseConstructorCoverage keeps the constructor metadata in sync
+// with every legacy public dispatch macro without changing that public API.
+func assertBindRebaseConstructorCoverage(t *testing.T, root string) {
+ t.Helper()
+ header, err := os.ReadFile(filepath.Join(root, "src", "triceBind.h"))
+ require.NoError(t, err)
+ publicPattern := regexp.MustCompile(`(?m)^#define ([A-Za-z_0-9]+)\(\.\.\.\) TRICE_BIND_DISPATCH\(TRICE_BIND_ROUTE\(TRICE_BIND_FILE_KEY\), (TRICE_INSERT_[A-Za-z_0-9]+), __VA_ARGS__\)$`)
+ mappingPattern := regexp.MustCompile(`(?m)^#define TRICE_BIND_REBASE_CONSTRUCTOR_(TRICE_INSERT_[A-Za-z_0-9]+) (iD|TRICE_BIND_REBASE_DEFAULT_TID)$`)
+ mappings := make(map[string]string)
+ for _, match := range mappingPattern.FindAllSubmatch(header, -1) {
+ mappings[string(match[1])] = string(match[2])
+ }
+ public := publicPattern.FindAllSubmatch(header, -1)
+ require.NotEmpty(t, public)
+ assert.Len(t, mappings, len(public))
+ for _, match := range public {
+ name := string(match[1])
+ expected := "TRICE_BIND_REBASE_DEFAULT_TID"
+ if len(name) > 2 && name[2] == 'i' {
+ expected = "iD"
+ }
+ assert.Equal(t, expected, mappings[string(match[2])], name)
+ }
+}
+
+// TestBindGeneratedTargetCompilesCAndCPP exercises real generated sidecars against the target headers.
+func TestBindGeneratedTargetCompilesCAndCPP(t *testing.T) {
+ bindIntegrationEnabled(t)
+ root := bindRepositoryRoot(t)
+ project := t.TempDir()
+ fileSystem, teardown := prepareOSBindProject(t, project)
+ defer teardown()
+
+ config := `// SPDX-License-Identifier: MIT
+#ifndef TRICE_CONFIG_H_
+#define TRICE_CONFIG_H_
+#define TRICE_CLEAN 0
+#define TRICE_BUFFER TRICE_STACK_BUFFER
+#define TRICE_DIRECT_OUTPUT 1
+#define TRICE_DEFERRED_OUTPUT 0
+#define TRICE_DIRECT_AUXILIARY8 1
+#define TRICE_DIRECT_OUT_FRAMING TRICE_FRAMING_TCOBS
+#define TRICE_ENTER_CRITICAL_SECTION {
+#define TRICE_LEAVE_CRITICAL_SECTION }
+#define TRICE_DIAGNOSTICS 0
+#define TRICE_CYCLE_COUNTER 0
+#define BIND_ALIAS trice
+#define BIND_SALIAS triceS
+#endif
+`
+ header := `// SPDX-License-Identifier: MIT
+#ifndef BIND_TARGET_FIXTURE_H_
+#define BIND_TARGET_FIXTURE_H_
+#include "trice.h"
+static inline int bind_inline(int value) {
+ trice("msg:inline=%d\n", value);
+ Trice("msg:inline16=%d\n", value);
+ return value;
+}
+#endif
+`
+ cSource := `// SPDX-License-Identifier: MIT
+#include
+#include "bound.h"
+#include "trice.h"
+int bind_c(int value) {
+ static const uint8_t bytes[] = {1u, 2u};
+ trice("msg:lower=%d\n", value);
+ TRICE("msg:upper=%d\n", value);
+ triceS("msg:string=%s\n", "c");
+ BIND_ALIAS("msg:alias=%d\n", value);
+ BIND_SALIAS("msg:salias=%s\n", "c");
+ TRICE_B(id(0), "msg:byte=%02x\n", bytes, sizeof bytes);
+ triceAssertOrReturnValue("err:value must be positive\n", value > 0, -1);
+ return bind_inline(value);
+}
+`
+ cppSource := `// SPDX-License-Identifier: MIT
+#include
+#include "bound.h"
+#include "trice.h"
+int bind_cpp(int value) {
+ static const std::uint8_t bytes[] = {3u, 4u};
+ TRice("msg:mixed=%d\n", value);
+ TRICE8_B(ID(0), "msg:cpp-byte=%02x\n", bytes, sizeof bytes);
+ return bind_inline(value);
+}
+`
+ hybridSource := `// SPDX-License-Identifier: MIT
+#include "bound.h"
+#undef TRICE_BIND_FILE_KEY
+void bind_hybrid(void) {
+ trice(iD(1500), "msg:insert-owned after bound header\n");
+}
+`
+ writeBindIntegrationFile(t, project, "triceConfig.h", config)
+ writeBindIntegrationFile(t, project, "bound.h", header)
+ cPath := writeBindIntegrationFile(t, project, "module.c", cSource)
+ cppPath := writeBindIntegrationFile(t, project, "module.cpp", cppSource)
+ hybridPath := writeBindIntegrationFile(t, project, "hybrid.c", hybridSource)
+ TriceAliases = ArrayFlag{"BIND_ALIAS"}
+ TriceSAliases = ArrayFlag{"BIND_SALIAS"}
+ ProcessAliases()
+
+ require.NoError(t, SubCmdIdBind(os.Stdout, fileSystem))
+ hybridAfter, err := os.ReadFile(hybridPath)
+ require.NoError(t, err)
+ assert.Equal(t, hybridSource, string(hybridAfter), "insert-owned source must not receive a sidecar")
+ assert.DirExists(t, BindDir)
+
+ cCompiler := firstAvailableCompiler("cc", "gcc", "clang")
+ cppCompiler := firstAvailableCompiler("c++", "g++", "clang++")
+ if cCompiler == "" || cppCompiler == "" {
+ t.Fatalf("bind target integration requires a GCC- or Clang-compatible C and C++ frontend")
+ }
+ includes := []string{BindDir, project, filepath.Join(root, "src")}
+ compileBindFixture(t, cCompiler, "c11", cPath, filepath.Join(project, "module.o"), includes...)
+ compileBindFixture(t, cCompiler, "c11", hybridPath, filepath.Join(project, "hybrid.o"), includes...)
+ compileBindFixture(t, cppCompiler, "c++17", cppPath, filepath.Join(project, "module_cpp.o"), includes...)
+
+ // Bound ID-free sources must also stay valid when clean or off selects the existing no-output macros.
+ cleanConfigDir := filepath.Join(project, "clean-config")
+ offConfigDir := filepath.Join(project, "off-config")
+ writeBindIntegrationFile(t, cleanConfigDir, "triceConfig.h", strings.Replace(config, "#define TRICE_CLEAN 0", "#define TRICE_CLEAN 1", 1))
+ writeBindIntegrationFile(t, offConfigDir, "triceConfig.h", strings.Replace(config, "#define TRICE_CLEAN 0", "#define TRICE_CLEAN 0\n#define TRICE_OFF 1", 1))
+ compileBindFixtureWithPedantry(t, cCompiler, "c11", cPath, filepath.Join(project, "module_clean.o"), false, BindDir, cleanConfigDir, project, filepath.Join(root, "src"))
+ compileBindFixtureWithPedantry(t, cCompiler, "c11", cPath, filepath.Join(project, "module_off.o"), false, BindDir, offConfigDir, project, filepath.Join(root, "src"))
+}
+
+// TestBindMVP2RebaseCompilesCAndCPP exercises generated direct, wrapper,
+// same-line, source, and header regions against the production target macros.
+func TestBindMVP2RebaseCompilesCAndCPP(t *testing.T) {
+ bindIntegrationEnabled(t)
+ root := bindRepositoryRoot(t)
+ assertBindRebaseConstructorCoverage(t, root)
+ project := t.TempDir()
+ fileSystem, teardown := prepareOSBindProject(t, project)
+ defer teardown()
+
+ config := `// SPDX-License-Identifier: MIT
+#ifndef TRICE_CONFIG_H_
+#define TRICE_CONFIG_H_
+#define TRICE_CLEAN 0
+#define TRICE_BUFFER TRICE_STACK_BUFFER
+#define TRICE_DIRECT_OUTPUT 1
+#define TRICE_DEFERRED_OUTPUT 0
+#define TRICE_DIRECT_AUXILIARY8 1
+#define TRICE_DIRECT_OUT_FRAMING TRICE_FRAMING_TCOBS
+#define TRICE_ENTER_CRITICAL_SECTION {
+#define TRICE_LEAVE_CRITICAL_SECTION }
+#define TRICE_DIAGNOSTICS 0
+#define TRICE_CYCLE_COUNTER 0
+#endif
+`
+ header := `// SPDX-License-Identifier: MIT
+#ifndef BIND_MVP2_FIXTURE_H_
+#define BIND_MVP2_FIXTURE_H_
+#include "trice.h"
+#define LOG_ERROR(value) \
+ do { \
+ switch (value) { \
+ case 7: \
+ trice("cannot open file\n"); \
+ break; \
+ default: \
+ TRICE("error=%d", value); \
+ break; \
+ } \
+ } while (0)
+#define STRINGIFIED_LOG(value) do { const char *bindName = #value; triceS("name=%s", bindName); TRICE("value=%d", value); } while (0);
+static inline void bind_header_direct(void) { trice("header-a"); trice("header-b"); }
+static inline void bind_header_wrapper(int value) { LOG_ERROR(value); }
+#endif
+`
+ sharedHeader := `// SPDX-License-Identifier: MIT
+#ifndef BIND_MVP2_SHARED_H_
+#define BIND_MVP2_SHARED_H_
+#include "trice.h"
+#define SHARED_LOG(value) do { trice("shared-first"); trice("shared-second=%d", value); } while (0)
+#endif
+`
+ cSource := `// SPDX-License-Identifier: MIT
+#include "logging.h"
+#include "shared.h"
+void bind_mvp2_c(int value) {
+ enum { unrelatedBefore = __COUNTER__ };
+ (void)unrelatedBefore;
+ LOG_ERROR(value);
+ STRINGIFIED_LOG(value)
+ trice("direct-a"); trice("direct-b"); trice("direct-c");
+ LOG_ERROR(7); LOG_ERROR(8);
+ bind_header_direct();
+ bind_header_wrapper(value);
+ SHARED_LOG(value);
+}
+
+`
+ cppSource := `// SPDX-License-Identifier: MIT
+#include "logging.h"
+void bind_mvp2_cpp(int value) {
+ LOG_ERROR(value);
+ STRINGIFIED_LOG(value)
+ trice("cpp-a"); trice("cpp-b");
+ bind_header_direct();
+ bind_header_wrapper(value);
+}
+`
+ secondCSource := `// SPDX-License-Identifier: MIT
+#include "logging.h"
+#include "shared.h"
+void bind_mvp2_second_c(int value) {
+ LOG_ERROR(value);
+ STRINGIFIED_LOG(value)
+ bind_header_direct();
+ bind_header_wrapper(value);
+ SHARED_LOG(value);
+}
+`
+ writeBindIntegrationFile(t, project, "triceConfig.h", config)
+ writeBindIntegrationFile(t, project, "logging.h", header)
+ writeBindIntegrationFile(t, project, "shared.h", sharedHeader)
+ cPath := writeBindIntegrationFile(t, project, "module.c", cSource)
+ secondCPath := writeBindIntegrationFile(t, project, "module_second.c", secondCSource)
+ cppPath := writeBindIntegrationFile(t, project, "module.cpp", cppSource)
+
+ require.NoError(t, SubCmdIdBind(os.Stdout, fileSystem))
+ boundHeader, err := os.ReadFile(filepath.Join(project, "logging.h"))
+ require.NoError(t, err)
+ assert.Contains(t, string(boundHeader), "trice-bind: generated rebase begin")
+ assert.Equal(t, 2, strings.Count(string(boundHeader), bindRebaseIncludeMarker+"begin"))
+ assert.NotContains(t, string(boundHeader), "#define TRICE_BIND_REBASE_BEGIN")
+ assert.Len(t, IDData.idToTrice, 13, "wrapper definitions are allocated once across all invocation sites")
+
+ cCompilers := availableBindCompilers("gcc", "clang", "cc")
+ cppCompilers := availableBindCompilers("g++", "clang++", "c++")
+ if len(cCompilers) == 0 || len(cppCompilers) == 0 {
+ t.Fatal("MVP2 bind integration requires GCC- or Clang-compatible C and C++ frontends")
+ }
+ includes := []string{BindDir, project, filepath.Join(root, "src")}
+ for compilerIndex, compiler := range cCompilers {
+ compileBindFixtureOptimized(t, compiler, "c99", "-O0", cPath, filepath.Join(project, fmt.Sprintf("module_c%d_o0.o", compilerIndex)), includes...)
+ compileBindFixtureOptimized(t, compiler, "c99", "-O2", cPath, filepath.Join(project, fmt.Sprintf("module_c%d_o2.o", compilerIndex)), includes...)
+ compileBindFixtureOptimized(t, compiler, "c99", "-O0", secondCPath, filepath.Join(project, fmt.Sprintf("module_second_c%d_o0.o", compilerIndex)), includes...)
+ compileBindFixtureOptimized(t, compiler, "c99", "-O2", secondCPath, filepath.Join(project, fmt.Sprintf("module_second_c%d_o2.o", compilerIndex)), includes...)
+ }
+ for compilerIndex, compiler := range cppCompilers {
+ compileBindFixtureOptimized(t, compiler, "c++11", "-O0", cppPath, filepath.Join(project, fmt.Sprintf("module_cpp%d_o0.o", compilerIndex)), includes...)
+ compileBindFixtureOptimized(t, compiler, "c++11", "-O2", cppPath, filepath.Join(project, fmt.Sprintf("module_cpp%d_o2.o", compilerIndex)), includes...)
+ }
+}
+
+// TestBindMVP2CounterGuardsAndGeneratedInvariants checks the local capability
+// boundary, counter drift, expected expansion count, and descriptor presence.
+func TestBindMVP2CounterGuardsAndGeneratedInvariants(t *testing.T) {
+ bindIntegrationEnabled(t)
+ root := bindRepositoryRoot(t)
+ project := t.TempDir()
+ fileSystem, teardown := prepareOSBindProject(t, project)
+ defer teardown()
+
+ config := `// SPDX-License-Identifier: MIT
+#ifndef TRICE_CONFIG_H_
+#define TRICE_CONFIG_H_
+#define TRICE_CLEAN 0
+#define TRICE_BUFFER TRICE_STACK_BUFFER
+#define TRICE_DIRECT_OUTPUT 1
+#define TRICE_DEFERRED_OUTPUT 0
+#define TRICE_DIRECT_AUXILIARY8 1
+#define TRICE_DIRECT_OUT_FRAMING TRICE_FRAMING_TCOBS
+#define TRICE_ENTER_CRITICAL_SECTION {
+#define TRICE_LEAVE_CRITICAL_SECTION }
+#define TRICE_DIAGNOSTICS 0
+#define TRICE_CYCLE_COUNTER 0
+#endif
+`
+ advancedSource := `// SPDX-License-Identifier: MIT
+#include "trice.h"
+void advanced(void) { trice("first"); trice("second"); }
+`
+ normalSource := `// SPDX-License-Identifier: MIT
+#include "trice.h"
+void normal(void) {
+ trice("normal");
+}
+`
+ writeBindIntegrationFile(t, project, "triceConfig.h", config)
+ advancedPath := writeBindIntegrationFile(t, project, "advanced.c", advancedSource)
+ normalPath := writeBindIntegrationFile(t, project, "normal.c", normalSource)
+ require.NoError(t, SubCmdIdBind(os.Stdout, fileSystem))
+
+ compiler := firstAvailableCompiler("cc", "gcc", "clang")
+ if compiler == "" {
+ t.Fatal("MVP2 negative integration requires a GCC- or Clang-compatible C frontend")
+ }
+ includes := []string{BindDir, project, filepath.Join(root, "src")}
+ // Some GCC versions emit an unclassified warning for -U__COUNTER__. Keep
+ // that deliberate simulation warning visible without letting the common
+ // -Werror policy hide the Trice capability-guard result under test.
+ noCounterFlags := []string{"-U__COUNTER__", "-Wno-error"}
+ output, err := runBindFixtureCompiler(compiler, "c99", advancedPath, filepath.Join(project, "advanced_no_counter.o"), noCounterFlags, includes...)
+ require.Error(t, err)
+ assert.Contains(t, string(output), "this advanced source construct requires __COUNTER__")
+ output, err = runBindFixtureCompiler(compiler, "c99", normalPath, filepath.Join(project, "normal_no_counter.o"), noCounterFlags, includes...)
+ require.NoErrorf(t, err, "%s", output)
+
+ cleanConfigDir := filepath.Join(project, "clean-config")
+ offConfigDir := filepath.Join(project, "off-config")
+ writeBindIntegrationFile(t, cleanConfigDir, "triceConfig.h", strings.Replace(config, "#define TRICE_CLEAN 0", "#define TRICE_CLEAN 1", 1))
+ writeBindIntegrationFile(t, offConfigDir, "triceConfig.h", strings.Replace(config, "#define TRICE_CLEAN 0", "#define TRICE_CLEAN 0\n#define TRICE_OFF 1", 1))
+ for _, disabledConfigDir := range []string{cleanConfigDir, offConfigDir} {
+ disabledIncludes := []string{BindDir, disabledConfigDir, project, filepath.Join(root, "src")}
+ output, err = runBindFixtureCompiler(compiler, "c99", advancedPath, filepath.Join(disabledConfigDir, "advanced_no_counter.o"), noCounterFlags, disabledIncludes...)
+ require.NoErrorf(t, err, "%s", output)
+ }
+
+ boundSource, err := os.ReadFile(advancedPath)
+ require.NoError(t, err)
+ owner := scanBindIncludes(string(boundSource))
+ var sidecarPath string
+ for _, include := range owner {
+ if include.isSidecar {
+ sidecarPath = filepath.Join(BindDir, include.name)
+ break
+ }
+ }
+ require.NotEmpty(t, sidecarPath)
+ sidecar, err := os.ReadFile(sidecarPath)
+ require.NoError(t, err)
+
+ t.Run("foreign counter drift", func(t *testing.T) {
+ beginPosition := strings.Index(string(boundSource), bindRebaseIncludeMarker+"begin")
+ require.GreaterOrEqual(t, beginPosition, 0)
+ insertPosition := lineEndIncludingNewline(string(boundSource), beginPosition)
+ drifted := string(boundSource[:insertPosition]) + "enum { triceBindForeignCounter = __COUNTER__ };\n" + string(boundSource[insertPosition:])
+ require.NoError(t, os.WriteFile(advancedPath, []byte(drifted), 0o644))
+ output, compileErr := runBindFixtureCompiler(compiler, "c99", advancedPath, filepath.Join(project, "advanced_drift.o"), nil, includes...)
+ require.Error(t, compileErr)
+ assert.Contains(t, string(output), "triceBindRebase")
+ require.NoError(t, os.WriteFile(advancedPath, boundSource, 0o644))
+ })
+
+ for _, replacement := range []string{" 1\n", " 3\n"} {
+ t.Run("wrong expansion count"+strings.TrimSpace(replacement), func(t *testing.T) {
+ modified := regexp.MustCompile(`(?m)(^#define TRICE_BIND_REBASE_COUNT_[^ ]+) 2$`).ReplaceAll(sidecar, []byte("${1}"+replacement))
+ require.NotEqual(t, sidecar, modified)
+ require.NoError(t, os.WriteFile(sidecarPath, modified, 0o644))
+ output, compileErr := runBindFixtureCompiler(compiler, "c99", advancedPath, filepath.Join(project, "advanced_count_"+strings.TrimSpace(replacement)+".o"), nil, includes...)
+ require.Error(t, compileErr)
+ assert.Contains(t, string(output), "TRICE_BIND_REBASE_STATIC_ASSERT")
+ require.NoError(t, os.WriteFile(sidecarPath, sidecar, 0o644))
+ })
+ }
+
+ t.Run("missing descriptor", func(t *testing.T) {
+ lines := strings.Split(string(sidecar), "\n")
+ removed := false
+ for index, line := range lines {
+ if strings.HasPrefix(line, "#define TRICE_BIND_ID_LOCATION_") {
+ lines = append(lines[:index], lines[index+1:]...)
+ removed = true
+ break
+ }
+ }
+ require.True(t, removed)
+ require.NoError(t, os.WriteFile(sidecarPath, []byte(strings.Join(lines, "\n")), 0o644))
+ output, compileErr := runBindFixtureCompiler(compiler, "c99", advancedPath, filepath.Join(project, "advanced_missing_descriptor.o"), nil, includes...)
+ require.Error(t, compileErr)
+ assert.Contains(t, string(output), "TRICE_BIND_ID_LOCATION_")
+ require.NoError(t, os.WriteFile(sidecarPath, sidecar, 0o644))
+ })
+}
+
+// TestBindMVP2RebaseEmitsStableRuntimeIDs executes a small target adapter at
+// both optimization levels and checks the ID sequence selected at expansion
+// time, including both runtime branches of a two-site logging wrapper.
+func TestBindMVP2RebaseEmitsStableRuntimeIDs(t *testing.T) {
+ bindIntegrationEnabled(t)
+ root := bindRepositoryRoot(t)
+ project := t.TempDir()
+ fileSystem, teardown := prepareOSBindProject(t, project)
+ defer teardown()
+
+ target := `// SPDX-License-Identifier: MIT
+#ifndef BIND_RUNTIME_TARGET_H_
+#define BIND_RUNTIME_TARGET_H_
+void bind_emit(unsigned id);
+#define iD(n) (n)
+#define id(n) (n)
+#define Id(n) (n)
+#define ID(n) (n)
+#define TRICE_INSERT_trice(tid, ...) bind_emit((unsigned)(tid))
+#define TRICE_INSERT_TRICE(tid, ...) bind_emit((unsigned)(tid))
+#include "triceBind.h"
+#define CUSTOM_WITH_ID(tid, ...) bind_emit((unsigned)(tid))
+#define CUSTOM(...) TRICE_BIND_DISPATCH_AUTO(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), iD, CUSTOM_WITH_ID, __VA_ARGS__)
+#endif
+`
+ source := `// SPDX-License-Identifier: MIT
+#include
+#include "target.h"
+#define LOG_ERROR(value) do { switch (value) { case 7: trice("case-seven"); break; default: TRICE("default=%d", value); break; } } while (0)
+static unsigned emitted[6];
+static unsigned emittedCount;
+void bind_emit(unsigned id) { emitted[emittedCount++] = id; }
+int main(void) {
+ enum { foreignBefore = __COUNTER__ };
+ (void)foreignBefore;
+ trice("direct-first"); TRICE("direct-second");
+ LOG_ERROR(
+ 7
+ );
+ LOG_ERROR(8);
+ CUSTOM("custom-first"); CUSTOM("custom-second");
+ if (emittedCount != 6u) { return 1; }
+ if (emitted[0] != 1002u || emitted[1] != 1003u || emitted[2] != 1000u || emitted[3] != 1001u || emitted[4] != 1004u || emitted[5] != 1005u) {
+ printf("%u %u %u %u %u %u\n", emitted[0], emitted[1], emitted[2], emitted[3], emitted[4], emitted[5]);
+ return 2;
+ }
+ return 0;
+}
+`
+ writeBindIntegrationFile(t, project, "target.h", target)
+ sourcePath := writeBindIntegrationFile(t, project, "runtime.c", source)
+ Srcs = ArrayFlag{sourcePath}
+ TriceAliases = ArrayFlag{"CUSTOM"}
+ ProcessAliases()
+ require.NoError(t, SubCmdIdBind(os.Stdout, fileSystem))
+ assert.Len(t, IDData.idToTrice, 6)
+
+ compiler := firstAvailableCompiler("cc", "gcc", "clang")
+ if compiler == "" {
+ t.Fatal("MVP2 runtime integration requires a GCC- or Clang-compatible C frontend")
+ }
+ for _, optimization := range []string{"-O0", "-O2"} {
+ executable := filepath.Join(project, "runtime_"+strings.TrimPrefix(optimization, "-"))
+ if runtime.GOOS == "windows" {
+ executable += ".exe"
+ }
+ args := []string{"-std=c99", optimization, "-Wall", "-Wextra", "-Werror", "-pedantic", "-I", BindDir, "-I", project, "-I", filepath.Join(root, "src"), sourcePath, "-o", executable}
+ output, err := exec.Command(compiler, args...).CombinedOutput()
+ require.NoErrorf(t, err, "%s %s\n%s", compiler, strings.Join(args, " "), output)
+ output, err = exec.Command(executable).CombinedOutput()
+ require.NoErrorf(t, err, "%s\n%s", executable, output)
+ }
+}
+
+// TestBindCanonicalTriceCheckGeneratesCompleteSidecar uses the canonical macro matrix in a temporary bind tree.
+func TestBindCanonicalTriceCheckGeneratesCompleteSidecar(t *testing.T) {
+ bindIntegrationEnabled(t)
+ root := bindRepositoryRoot(t)
+ canonical, err := os.ReadFile(filepath.Join(root, "_test", "testdata", "triceCheck.c"))
+ require.NoError(t, err)
+
+ // The repository fixture may intentionally be committed Bound. Normalize
+ // only this temporary copy so the test always exercises include insertion.
+ canonical, _, artifactDiagnostics, _ := stripBindRebaseArtifacts("triceCheck.c", canonical)
+ require.Empty(t, artifactDiagnostics)
+ canonicalSource := string(canonical)
+ canonicalSource = string(removeBindSidecarIncludes(canonical, scanBindIncludes(canonicalSource)))
+ source := canonicalSource
+ sites, diagnostics := scanBindSites("triceCheck.c", source)
+ require.Empty(t, diagnostics)
+ require.Greater(t, len(sites), 500, "canonical source should exercise the broad public macro matrix")
+
+ project := t.TempDir()
+ fileSystem, teardown := prepareOSBindProject(t, project)
+ defer teardown()
+ config := `// SPDX-License-Identifier: MIT
+#ifndef TRICE_CONFIG_H_
+#define TRICE_CONFIG_H_
+#define TRICE_CLEAN 0
+#define TRICE_LEGACY_RPC_SUPPORT 1
+#define TRICE_BUFFER TRICE_STACK_BUFFER
+#define TRICE_DIRECT_OUTPUT 1
+#define TRICE_DEFERRED_OUTPUT 0
+#define TRICE_DIRECT_AUXILIARY8 1
+#define TRICE_DIRECT_OUT_FRAMING TRICE_FRAMING_TCOBS
+#define TRICE_ENTER_CRITICAL_SECTION {
+#define TRICE_LEAVE_CRITICAL_SECTION }
+#define TRICE_DIAGNOSTICS 0
+#define TRICE_CYCLE_COUNTER 0
+#define TRICE_CGO 1
+#endif
+`
+ writeBindIntegrationFile(t, project, "triceConfig.h", config)
+ sourcePath := writeBindIntegrationFile(t, project, "triceCheck.c", source)
+ require.NoError(t, SubCmdIdBind(os.Stdout, fileSystem))
+
+ bound, err := os.ReadFile(sourcePath)
+ require.NoError(t, err)
+ assert.Contains(t, string(bound), "trice-bind: keep as last include")
+ entries, err := os.ReadDir(BindDir)
+ require.NoError(t, err)
+ rebaseRegionCount := strings.Count(string(bound), bindRebaseIncludeMarker+"begin")
+ require.Len(t, entries, 1+2*rebaseRegionCount)
+ var ownerName string
+ for _, include := range scanBindIncludes(string(bound)) {
+ if include.isSidecar {
+ ownerName = include.name
+ break
+ }
+ }
+ require.NotEmpty(t, ownerName)
+ sidecar, err := os.ReadFile(filepath.Join(BindDir, ownerName))
+ require.NoError(t, err)
+ ordinarySites := bytes.Count(sidecar, []byte("#define TRICE_BIND_SITE_"))
+ definitionSites := bytes.Count(sidecar, []byte("#define TRICE_BIND_DEFINITION_"))
+ definitionIDs := bytes.Count(sidecar, []byte("#define TRICE_BIND_ID_DEFINITION_"))
+ locationSites := bytes.Count(sidecar, []byte("#define TRICE_BIND_LOCATION_"))
+ locationIDs := bytes.Count(sidecar, []byte("#define TRICE_BIND_ID_LOCATION_"))
+ require.Equal(t, definitionSites, definitionIDs, "each wrapper definition site has one numeric descriptor")
+ require.Equal(t, locationSites, locationIDs, "each counter-selected site has one numeric descriptor")
+ assert.Equal(t, len(sites), ordinarySites+definitionSites+locationSites)
+ assert.Positive(t, definitionSites, "canonical source should exercise logging wrapper definitions")
+ assert.Positive(t, locationSites, "canonical source should exercise counter-selected locations")
+ for _, line := range strings.Split(string(sidecar), "\n") {
+ assert.Falsef(t, strings.HasSuffix(line, "\\"), "sidecar line must not continue physically: %s", line)
+ }
+
+ cCompiler := firstAvailableCompiler("cc", "gcc", "clang")
+ if cCompiler == "" {
+ t.Fatal("canonical bind integration requires a GCC- or Clang-compatible C frontend")
+ }
+ compileBindFixture(
+ t,
+ cCompiler,
+ "c11",
+ sourcePath,
+ filepath.Join(project, "triceCheck.o"),
+ BindDir,
+ project,
+ filepath.Join(root, "src"),
+ )
+}
diff --git a/internal/id/bindMVP2_test.go b/internal/id/bindMVP2_test.go
new file mode 100644
index 000000000..09fc8e27f
--- /dev/null
+++ b/internal/id/bindMVP2_test.go
@@ -0,0 +1,684 @@
+// SPDX-License-Identifier: MIT
+
+package id
+
+import (
+ "bytes"
+ "io"
+ "path/filepath"
+ "sort"
+ "strings"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+)
+
+// useDistinctBindTestKeys supplies one deterministic, collision-free key per
+// sorted physical file in a multi-file memory project.
+func useDistinctBindTestKeys(fileCount int) {
+ data := make([]byte, 0, fileCount*8)
+ for index := 0; index < fileCount; index++ {
+ data = append(data, bytes.Repeat([]byte{byte(index + 1)}, 8)...)
+ }
+ bindRandomReader = bytes.NewReader(data)
+}
+
+// readOwnedBindSidecar resolves the generated identity from one bound source
+// instead of coupling tests to the key-assignment order.
+func readOwnedBindSidecar(t *testing.T, sourcePath string) (bindInclude, []byte) {
+ t.Helper()
+ source, err := FSys.ReadFile(sourcePath)
+ require.NoError(t, err)
+ for _, include := range scanBindIncludes(string(source)) {
+ if include.isSidecar {
+ content, readErr := FSys.ReadFile(filepath.Join(BindDir, include.name))
+ require.NoError(t, readErr)
+ return include, content
+ }
+ }
+ t.Fatalf("%s has no generated bind sidecar include", sourcePath)
+ return bindInclude{}, nil
+}
+
+// writeBindTestTIL writes one deterministic lookup and returns the exact bytes
+// so tests can prove that read-only metadata remains untouched.
+func writeBindTestTIL(t *testing.T, path string, lookup TriceIDLookUp) []byte {
+ t.Helper()
+ content, err := lookup.toJSON()
+ require.NoError(t, err)
+ require.NoError(t, FSys.WriteFile(path, content, 0o644))
+ return content
+}
+
+// writeBindTestLI is the location-list counterpart of writeBindTestTIL.
+func writeBindTestLI(t *testing.T, path string, lookup TriceIDLookUpLI) []byte {
+ t.Helper()
+ content, err := lookup.toJSON()
+ require.NoError(t, err)
+ require.NoError(t, FSys.WriteFile(path, content, 0o644))
+ return content
+}
+
+// TestBindRebaseLineContextRejectsGeneratedIncludeAfterIf verifies that the
+// safety check looks through the automatically inserted owner include and
+// still sees the control-flow dependency in the original source.
+func TestBindRebaseLineContextRejectsGeneratedIncludeAfterIf(t *testing.T) {
+ source := "void f(int value) {\n if (value)\n#include \"trice_invalid_c_K1111111111111111.h\" // trice-bind: keep as last include\n trice(\"first\"); trice(\"second\");\n}\n"
+ occurrence := strings.Index(source, "trice(\"first\")")
+ require.NotEqual(t, -1, occurrence)
+ start := lineStart(source, occurrence)
+ end := lineEndIncludingNewline(source, occurrence)
+ assert.False(t, bindRebaseLineIsIndependent(source, start, end, occurrence, nil))
+
+ safe := "static inline void direct(void) { trice(\"first\"); trice(\"second\"); }\nstatic inline void wrapper(int value) { LOG_ERROR(value); }\n"
+ occurrence = strings.Index(safe, "LOG_ERROR")
+ require.NotEqual(t, -1, occurrence)
+ start = lineStart(safe, occurrence)
+ end = lineEndIncludingNewline(safe, occurrence)
+ assert.True(t, bindRebaseLineIsIndependent(safe, start, end, occurrence, nil))
+
+ safe = "#define LOG_ERROR(value) \\\n do { trice(\"inside\"); } while (0)\nstatic inline void direct(void) { trice(\"first\"); trice(\"second\"); }\n"
+ occurrence = strings.Index(safe, "trice(\"first\")")
+ require.NotEqual(t, -1, occurrence)
+ start = lineStart(safe, occurrence)
+ end = lineEndIncludingNewline(safe, occurrence)
+ assert.True(t, bindRebaseLineIsIndependent(safe, start, end, occurrence, nil))
+}
+
+// TestBindCounterIdentifierDetection prevents application identifiers that
+// merely contain the built-in name from being diagnosed as counter use.
+func TestBindCounterIdentifierDetection(t *testing.T) {
+ assert.True(t, bindContainsIdentifier("enum { value = __COUNTER__ };", "__COUNTER__"))
+ assert.False(t, bindContainsIdentifier("unsigned MY__COUNTER__VALUE;", "__COUNTER__"))
+}
+
+// TestBindMVP2HeaderWrapperIdentityAndIdempotence proves that two source
+// owners reuse the two definition IDs from one header and that a second bind
+// writes no semantic changes.
+func TestBindMVP2HeaderWrapperIdentityAndIdempotence(t *testing.T) {
+ sources := map[string]string{
+ "logging.h": "#ifndef LOGGING_H\n#define LOGGING_H\n#define LOG_ERROR(value) do { trice(\"first\"); TRICE(\"second=%d\", value); } while (0)\n#endif\n",
+ "a.c": "#include \"logging.h\"\nvoid a(int value) { LOG_ERROR(value); }\n",
+ "b.c": "#include \"logging.h\"\nvoid b(void) { LOG_ERROR(1); LOG_ERROR(2); }\n",
+ }
+ defer prepareBindTest(t, sources)()
+ useDistinctBindTestKeys(len(sources))
+
+ require.NoError(t, SubCmdIdBind(io.Discard, FSys))
+ headerPath := filepath.Join(Proj, t.Name(), "logging.h")
+ headerInclude, headerSidecar := readOwnedBindSidecar(t, headerPath)
+ assert.Equal(t, 2, strings.Count(string(headerSidecar), "#define TRICE_BIND_DEFINITION_"))
+ assert.Equal(t, 2, strings.Count(string(headerSidecar), "#define TRICE_BIND_ID_DEFINITION_"))
+ assert.Len(t, IDData.idToTrice, 2)
+
+ for _, name := range []string{"a.c", "b.c"} {
+ path := filepath.Join(Proj, t.Name(), name)
+ _, sidecar := readOwnedBindSidecar(t, path)
+ assert.Contains(t, string(sidecar), "TRICE_BIND_ID_DEFINITION_"+headerInclude.key)
+ assert.Contains(t, string(sidecar), "TRICE_BIND_REBASE_COUNT_")
+ }
+
+ locations, _ := readBindRemigrationLocations(t)
+ require.Len(t, locations, 2)
+ for _, location := range locations {
+ assert.Equal(t, ToLIFile(headerPath), normalizeLocationPath(location.File))
+ }
+
+ paths := []string{FnJSON, LIFnJSON}
+ paths = append(paths, Srcs...)
+ entries, err := FSys.ReadDir(BindDir)
+ require.NoError(t, err)
+ for _, entry := range entries {
+ paths = append(paths, filepath.Join(BindDir, entry.Name()))
+ }
+ snapshots := make(map[string][]byte, len(paths))
+ for _, path := range paths {
+ content, readErr := FSys.ReadFile(path)
+ require.NoError(t, readErr)
+ snapshots[path] = content
+ }
+
+ require.NoError(t, SubCmdIdBind(io.Discard, FSys))
+ for path, expected := range snapshots {
+ actual, readErr := FSys.ReadFile(path)
+ require.NoError(t, readErr)
+ assert.Equal(t, expected, actual, path)
+ }
+}
+
+// TestBindMVP2SourceMoveUpdatesDescriptorsWithoutChangingIDs checks that a
+// user edit before a generated region relocates LI data while preserving TIL
+// identity and exactly one regenerated marker pair.
+func TestBindMVP2SourceMoveUpdatesDescriptorsWithoutChangingIDs(t *testing.T) {
+ source := "#include \"trice.h\"\nvoid f(void) { trice(\"first\"); trice(\"second\"); }\n"
+ defer prepareBindTest(t, map[string]string{"move.c": source})()
+
+ require.NoError(t, SubCmdIdBind(io.Discard, FSys))
+ _, firstSidecar := readOwnedBindSidecar(t, Srcs[0])
+ firstLines, err := parseBindRemigrationSiteLines(firstSidecar, "K1111111111111111")
+ require.NoError(t, err)
+ require.Len(t, firstLines, 2)
+ firstTIL, err := FSys.ReadFile(FnJSON)
+ require.NoError(t, err)
+ bound, err := FSys.ReadFile(Srcs[0])
+ require.NoError(t, err)
+ beginMarker := bindRebaseIncludeMarker + "begin"
+ markerPosition := strings.Index(string(bound), beginMarker)
+ require.GreaterOrEqual(t, markerPosition, 0)
+ markerLineStart := lineStart(string(bound), markerPosition)
+ shifted := string(bound[:markerLineStart]) + "// user line shift\n" + string(bound[markerLineStart:])
+ require.NoError(t, FSys.WriteFile(Srcs[0], []byte(shifted), 0o644))
+
+ require.NoError(t, SubCmdIdBind(io.Discard, FSys))
+ _, secondSidecar := readOwnedBindSidecar(t, Srcs[0])
+ secondLines, err := parseBindRemigrationSiteLines(secondSidecar, "K1111111111111111")
+ require.NoError(t, err)
+ assert.Equal(t, len(firstLines), len(secondLines))
+ ids := make([]int, 0, len(firstLines))
+ for id := range firstLines {
+ ids = append(ids, int(id))
+ }
+ sort.Ints(ids)
+ for _, value := range ids {
+ id := TriceID(value)
+ assert.Equal(t, firstLines[id]+1, secondLines[id])
+ }
+ secondTIL, err := FSys.ReadFile(FnJSON)
+ require.NoError(t, err)
+ assert.Equal(t, firstTIL, secondTIL)
+ regenerated, err := FSys.ReadFile(Srcs[0])
+ require.NoError(t, err)
+ assert.Equal(t, 1, strings.Count(string(regenerated), bindRebaseIncludeMarker+"begin"))
+ assert.Equal(t, 1, strings.Count(string(regenerated), bindRebaseIncludeMarker+"end"))
+}
+
+// TestBindMVP2KeepsAdjacentPhysicalLinesInSeparateScopes verifies that source
+// compactness never widens a counter scope across independent statements.
+func TestBindMVP2KeepsAdjacentPhysicalLinesInSeparateScopes(t *testing.T) {
+ source := "void f(void) {\n" +
+ " trice(\"first\"); trice(\"second\");\n" +
+ " trice(\"third\"); trice(\"fourth\");\n" +
+ "}\n"
+ defer prepareBindTest(t, map[string]string{"adjacent.c": source})()
+
+ require.NoError(t, SubCmdIdBind(io.Discard, FSys))
+ bound, err := FSys.ReadFile(Srcs[0])
+ require.NoError(t, err)
+ text := string(bound)
+ assert.Equal(t, 2, strings.Count(text, bindRebaseIncludeMarker+"begin"))
+ assert.Equal(t, 2, strings.Count(text, bindRebaseIncludeMarker+"end"))
+ firstEnd := strings.Index(text, "generated rebase end K1111111111111111_R0")
+ secondBegin := strings.Index(text, "generated rebase begin K1111111111111111_R1")
+ require.GreaterOrEqual(t, firstEnd, 0)
+ require.GreaterOrEqual(t, secondBegin, 0)
+ assert.Less(t, firstEnd, secondBegin)
+
+ entries, err := FSys.ReadDir(BindDir)
+ require.NoError(t, err)
+ assert.Len(t, entries, 5, "one owner sidecar plus two explicit helpers per independent source line")
+}
+
+// TestBindMVP2WrapsOneMultilineInvocationAsItsMinimalRegion proves that a
+// physical line restriction does not force users to reformat one macro call.
+func TestBindMVP2WrapsOneMultilineInvocationAsItsMinimalRegion(t *testing.T) {
+ source := "#define LOG_ERROR(value) do { trice(\"first\"); trice(\"second=%d\", value); } while (0)\n" +
+ "void f(int value) {\n" +
+ " LOG_ERROR(\n" +
+ " value\n" +
+ " );\n" +
+ "}\n"
+ defer prepareBindTest(t, map[string]string{"multiline.c": source})()
+
+ require.NoError(t, SubCmdIdBind(io.Discard, FSys))
+ bound, err := FSys.ReadFile(Srcs[0])
+ require.NoError(t, err)
+ expected := "#include \"trice_multiline_c_K1111111111111111_R0_begin.h\" // trice-bind: generated rebase begin K1111111111111111_R0\n" +
+ " LOG_ERROR(\n" +
+ " value\n" +
+ " );\n" +
+ "#include \"trice_multiline_c_K1111111111111111_R0_end.h\" // trice-bind: generated rebase end K1111111111111111_R0\n"
+ assert.Contains(t, string(bound), expected)
+ assert.Equal(t, 1, strings.Count(string(bound), bindRebaseIncludeMarker+"begin"))
+
+ _, sidecar := readOwnedBindSidecar(t, Srcs[0])
+ assert.Contains(t, string(sidecar), "#define TRICE_BIND_REBASE_COUNT_K1111111111111111_R0 2")
+}
+
+// TestBindMVP2AllowsDataStringificationAndMacroOwnedSemicolon verifies that
+// preprocessing unrelated to a static Trice format does not exclude an
+// otherwise transparent statement wrapper. The replacement-owned semicolon
+// makes each source invocation a complete statement without an extra token.
+func TestBindMVP2AllowsDataStringificationAndMacroOwnedSemicolon(t *testing.T) {
+ source := "#define COPY(element) do { const char *name = #element; triceS(\"name=%s\", name); trice(\"size=%d\", 4); } while (0);\n" +
+ "void f(void) {\n" +
+ " COPY(first)\n" +
+ " COPY(second)\n" +
+ "}\n"
+ defer prepareBindTest(t, map[string]string{"copy.c": source})()
+
+ var output bytes.Buffer
+ require.NoErrorf(t, SubCmdIdBind(&output, FSys), "%s", output.String())
+ bound, err := FSys.ReadFile(Srcs[0])
+ require.NoError(t, err)
+ text := string(bound)
+ assert.Contains(t, text, " COPY(first)\n")
+ assert.Contains(t, text, " COPY(second)\n")
+ assert.Equal(t, 2, strings.Count(text, bindRebaseIncludeMarker+"begin"))
+ assert.Equal(t, 2, strings.Count(text, bindRebaseIncludeMarker+"end"))
+
+ _, sidecar := readOwnedBindSidecar(t, Srcs[0])
+ assert.Equal(t, 2, strings.Count(string(sidecar), "#define TRICE_BIND_DEFINITION_"))
+ assert.Len(t, IDData.idToTrice, 2)
+}
+
+// TestBindMVP2AcceptsFormattedGeneratedIncludes proves that formatter-owned
+// horizontal spacing remains byte-for-byte intact across a normal bind run.
+func TestBindMVP2AcceptsFormattedGeneratedIncludes(t *testing.T) {
+ source := "void f(void) { trice(\"first\"); trice(\"second\"); }\n"
+ defer prepareBindTest(t, map[string]string{"formatted.c": source})()
+
+ require.NoError(t, SubCmdIdBind(io.Discard, FSys))
+ bound, err := FSys.ReadFile(Srcs[0])
+ require.NoError(t, err)
+ formatted := bytes.ReplaceAll(bound, []byte("\" // trice-bind: generated rebase"), []byte("\" // trice-bind: generated rebase"))
+ require.NotEqual(t, bound, formatted)
+ require.NoError(t, FSys.WriteFile(Srcs[0], formatted, 0o644))
+
+ var output bytes.Buffer
+ require.NoErrorf(t, SubCmdIdBind(&output, FSys), "%s", output.String())
+ regenerated, err := FSys.ReadFile(Srcs[0])
+ require.NoError(t, err)
+ assert.Equal(t, formatted, regenerated)
+ assert.Equal(t, 1, strings.Count(string(regenerated), bindRebaseIncludeMarker+"begin"))
+ assert.Equal(t, 1, strings.Count(string(regenerated), bindRebaseIncludeMarker+"end"))
+}
+
+// TestBindMVP2RemovesStaleHelperHeaders verifies that reducing a source region
+// to the ordinary line path leaves no obsolete generated phase files behind.
+func TestBindMVP2RemovesStaleHelperHeaders(t *testing.T) {
+ source := "void f(void) { trice(\"first\"); trice(\"second\"); }\n"
+ defer prepareBindTest(t, map[string]string{"stale-helper.c": source})()
+
+ require.NoError(t, SubCmdIdBind(io.Discard, FSys))
+ beginPath := filepath.Join(BindDir, "trice_stale_helper_c_K1111111111111111_R0_begin.h")
+ endPath := filepath.Join(BindDir, "trice_stale_helper_c_K1111111111111111_R0_end.h")
+ _, err := FSys.Stat(beginPath)
+ require.NoError(t, err)
+ _, err = FSys.Stat(endPath)
+ require.NoError(t, err)
+
+ bound, err := FSys.ReadFile(Srcs[0])
+ require.NoError(t, err)
+ changed := bytes.Replace(bound, []byte("trice(\"first\"); trice(\"second\");"), []byte("trice(\"first\");"), 1)
+ require.NotEqual(t, bound, changed)
+ require.NoError(t, FSys.WriteFile(Srcs[0], changed, 0o644))
+ require.NoError(t, SubCmdIdBind(io.Discard, FSys))
+ _, err = FSys.Stat(beginPath)
+ assert.Error(t, err)
+ _, err = FSys.Stat(endPath)
+ assert.Error(t, err)
+}
+
+// TestBindMVP2ConvertsLegacyVerboseBlocks verifies that one normal bind run
+// migrates the previous source representation without losing owner identity.
+func TestBindMVP2ConvertsLegacyVerboseBlocks(t *testing.T) {
+ key := "K0123456789ABCDEF"
+ name := "trice_legacy_c_" + key + ".h"
+ scope := key + "_R0"
+ source := "#include \"" + name + "\" // trice-bind: keep as last include before this file's Trice calls\n" +
+ "/* trice-bind: generated rebase begin " + scope + " */\n" +
+ "#define TRICE_BIND_REBASE_SCOPE " + scope + "\n" +
+ "#define TRICE_BIND_REBASE_BEGIN\n" +
+ "#include \"" + name + "\" // trice-bind: generated rebase begin\n" +
+ "#undef TRICE_BIND_REBASE_BEGIN\n" +
+ bindRebaseBlockEnd + "\n" +
+ "void f(void) { trice(\"first\"); trice(\"second\"); }\n" +
+ "/* trice-bind: generated rebase end " + scope + " */\n" +
+ "#define TRICE_BIND_REBASE_END\n" +
+ "#include \"" + name + "\" // trice-bind: generated rebase end\n" +
+ "#undef TRICE_BIND_REBASE_END\n" +
+ bindRebaseBlockEnd + "\n"
+ defer prepareBindTest(t, map[string]string{"legacy.c": source})()
+ writeValidBindSidecar(t, name, key)
+
+ require.NoError(t, SubCmdIdBind(io.Discard, FSys))
+ bound, err := FSys.ReadFile(Srcs[0])
+ require.NoError(t, err)
+ assert.NotContains(t, string(bound), bindRebaseBeginMarker)
+ assert.NotContains(t, string(bound), bindRebaseBlockEnd)
+ assert.Equal(t, 1, strings.Count(string(bound), bindRebaseIncludeMarker+"begin"))
+ _, err = FSys.Stat(filepath.Join(BindDir, "trice_legacy_c_"+key+"_R0_begin.h"))
+ require.NoError(t, err)
+}
+
+// TestBindMVP2RejectsUnsupportedConstructsTransactionally exercises generator
+// boundaries and verifies that every fatal analysis leaves regular files and
+// generated lists byte-for-byte unchanged.
+func TestBindMVP2RejectsUnsupportedConstructsTransactionally(t *testing.T) {
+ tests := []struct {
+ name string
+ source string
+ expected string
+ }{
+ {name: "zero placeholder", source: "void f(void) { trice(id(0), \"first\"); trice(\"second\"); }\n", expected: "id(0)"},
+ {name: "nested wrapper", source: "#define INNER() trice(\"inner\")\n#define OUTER() do { INNER(); } while (0)\nvoid f(void) { OUTER(); }\n", expected: "nested logging wrapper"},
+ {name: "recursive wrapper", source: "#define LOOP() do { trice(\"loop\"); LOOP(); } while (0)\nvoid f(void) { LOOP(); }\n", expected: "recursive logging wrapper"},
+ {name: "token paste", source: "#define LOG(value) do { trice(\"value\"); int value##Copy = 0; (void)value##Copy; } while (0)\nvoid f(void) { LOG(v); }\n", expected: "unsupported token pasting"},
+ {name: "stringified format", source: "#define LOG(value) do { trice(\"fixed\"); trice(#value); } while (0)\nvoid f(void) { LOG(v); }\n", expected: "no supported format string"},
+ {name: "stringification changes literal format", source: "#define LOG(value) do { trice(\"prefix=\" #value); trice(\"fixed\"); } while (0)\nvoid f(void) { LOG(v); }\n", expected: "format"},
+ {name: "dynamic format", source: "#define LOG(format) trice(format)\nvoid f(void) { LOG(\"dynamic\"); }\n", expected: "format"},
+ {name: "indirect redefinition", source: "#define trice(...) backend(__VA_ARGS__)\nvoid f(void) { trice(\"redefined\"); }\n", expected: "indirect redefinition"},
+ {name: "explicit definition ID", source: "#define LOG() trice(iD(123), \"explicit\")\nvoid f(void) { LOG(); }\n", expected: "explicit non-zero"},
+ {name: "unsafe expression", source: "int f(void) { return (trice(\"first\"), trice(\"second\"), 0); }\n", expected: "standalone"},
+ {name: "continued control flow", source: "void f(int value) {\n if (value)\n trice(\"first\"); trice(\"second\");\n}\n", expected: "independent block item"},
+ {name: "closing outer scope", source: "void f(void) {\n trice(\"first\"); trice(\"second\"); }\n", expected: "independent block item"},
+ {name: "foreign counter", source: "void f(void) { trice(\"first\"); enum { foreign = __COUNTER__ }; trice(\"second\"); }\n", expected: "additional explicit __COUNTER__"},
+ }
+
+ for _, test := range tests {
+ t.Run(test.name, func(t *testing.T) {
+ defer prepareBindTest(t, map[string]string{"invalid.c": test.source})()
+ tilBefore, err := FSys.ReadFile(FnJSON)
+ require.NoError(t, err)
+ liBefore, err := FSys.ReadFile(LIFnJSON)
+ require.NoError(t, err)
+
+ var output bytes.Buffer
+ err = SubCmdIdBind(&output, FSys)
+ require.Error(t, err)
+ assert.Contains(t, output.String(), test.expected)
+ after, readErr := FSys.ReadFile(Srcs[0])
+ require.NoError(t, readErr)
+ assert.Equal(t, test.source, string(after))
+ tilAfter, readErr := FSys.ReadFile(FnJSON)
+ require.NoError(t, readErr)
+ assert.Equal(t, tilBefore, tilAfter)
+ liAfter, readErr := FSys.ReadFile(LIFnJSON)
+ require.NoError(t, readErr)
+ assert.Equal(t, liBefore, liAfter)
+ })
+ }
+}
+
+// TestBindMVP2RejectsMalformedGeneratedArtifacts ensures a marker-like block
+// cannot authorize partial deletion or regeneration when one owned directive
+// was edited independently.
+func TestBindMVP2RejectsMalformedGeneratedArtifacts(t *testing.T) {
+ source := "void f(void) { trice(\"first\"); trice(\"second\"); }\n"
+ defer prepareBindTest(t, map[string]string{"markers.c": source})()
+
+ require.NoError(t, SubCmdIdBind(io.Discard, FSys))
+ bound, err := FSys.ReadFile(Srcs[0])
+ require.NoError(t, err)
+ corrupt := bytes.Replace(
+ bound,
+ []byte("generated rebase begin K1111111111111111_R0"),
+ []byte("generated rebase begin K1111111111111111_R9"),
+ 1,
+ )
+ require.NotEqual(t, bound, corrupt)
+ require.NoError(t, FSys.WriteFile(Srcs[0], corrupt, 0o644))
+ _, sidecarBefore := readOwnedBindSidecar(t, Srcs[0])
+ tilBefore, err := FSys.ReadFile(FnJSON)
+ require.NoError(t, err)
+ liBefore, err := FSys.ReadFile(LIFnJSON)
+ require.NoError(t, err)
+
+ var output bytes.Buffer
+ err = SubCmdIdBind(&output, FSys)
+ require.Error(t, err)
+ assert.Contains(t, output.String(), "rebase include does not match the generated directive structure")
+ after, readErr := FSys.ReadFile(Srcs[0])
+ require.NoError(t, readErr)
+ assert.Equal(t, corrupt, after)
+ _, sidecarAfter := readOwnedBindSidecar(t, Srcs[0])
+ assert.Equal(t, sidecarBefore, sidecarAfter)
+ tilAfter, readErr := FSys.ReadFile(FnJSON)
+ require.NoError(t, readErr)
+ assert.Equal(t, tilBefore, tilAfter)
+ liAfter, readErr := FSys.ReadFile(LIFnJSON)
+ require.NoError(t, readErr)
+ assert.Equal(t, liBefore, liAfter)
+}
+
+// TestBindMVP2RejectsModifiedHelperTransactionally keeps generated source and
+// regular outputs untouched when a referenced phase header was edited.
+func TestBindMVP2RejectsModifiedHelperTransactionally(t *testing.T) {
+ source := "void f(void) { trice(\"first\"); trice(\"second\"); }\n"
+ defer prepareBindTest(t, map[string]string{"helper.c": source})()
+
+ require.NoError(t, SubCmdIdBind(io.Discard, FSys))
+ bound, err := FSys.ReadFile(Srcs[0])
+ require.NoError(t, err)
+ helperPath := filepath.Join(BindDir, "trice_helper_c_K1111111111111111_R0_begin.h")
+ helper, err := FSys.ReadFile(helperPath)
+ require.NoError(t, err)
+ modified := append(append([]byte(nil), helper...), []byte("// local edit\n")...)
+ require.NoError(t, FSys.WriteFile(helperPath, modified, 0o644))
+
+ var output bytes.Buffer
+ err = SubCmdIdBind(&output, FSys)
+ require.Error(t, err)
+ assert.Contains(t, output.String(), "existing generated Trice bind rebase helper was modified")
+ after, readErr := FSys.ReadFile(Srcs[0])
+ require.NoError(t, readErr)
+ assert.Equal(t, bound, after)
+ helperAfter, readErr := FSys.ReadFile(helperPath)
+ require.NoError(t, readErr)
+ assert.Equal(t, modified, helperAfter)
+}
+
+// TestBindReusesReadOnlyMetadataAndRegeneratesMovedSidecar verifies the normal
+// nested-project migration path: a custom-named TIL and LI plus an old sidecar
+// preserve the ID, while the current BindDir receives freshly rendered bytes.
+func TestBindReusesReadOnlyMetadataAndRegeneratesMovedSidecar(t *testing.T) {
+ key := "K2222222222222222"
+ sidecarName := "trice_module_c_" + key + ".h"
+ source := "#include \"" + sidecarName + "\" // trice-bind: keep as last include before this file's Trice calls\n" +
+ "\n// Lines added after the historical sidecar was generated.\n\n" +
+ "void f(void) { trice(\"nested message\"); }\n"
+ defer prepareBindTest(t, map[string]string{"sub/deep/module.c": source})()
+
+ project := filepath.Join(Proj, t.Name())
+ metadataRoot := filepath.Join(project, "sub")
+ secondaryTILPath := filepath.Join(metadataRoot, "demoIDs.json")
+ secondaryLIPath := filepath.Join(metadataRoot, "sourceLocations.json")
+ secondaryTIL := writeBindTestTIL(t, secondaryTILPath, TriceIDLookUp{151: {Type: "trice", Strg: "nested message"}})
+ secondaryLI := writeBindTestLI(t, secondaryLIPath, TriceIDLookUpLI{151: {File: "deep/module.c", Line: 2}})
+
+ historicalDir := filepath.Join(metadataRoot, "build", "triceIDs")
+ require.NoError(t, FSys.MkdirAll(historicalDir, 0o755))
+ historicalSidecar := []byte("#define TRICE_BIND_FILE_KEY " + key + "\n" +
+ "#define TRICE_BIND_ROUTE_" + key + " BIND\n" +
+ "#define TRICE_BIND_SITE_" + key + "_L2 TRICE_BIND_AUTO, iD(151u)\n")
+ require.NoError(t, FSys.WriteFile(filepath.Join(historicalDir, sidecarName), historicalSidecar, 0o644))
+
+ // A different output tree proves that historical sidecars are evidence, not
+ // files copied into the current build.
+ BindDir = filepath.Join(project, "parent-build", "triceIDs")
+ beforeSource, err := FSys.ReadFile(Srcs[0])
+ require.NoError(t, err)
+ Verbose = true
+ var output bytes.Buffer
+ require.NoErrorf(t, SubCmdIdBind(&output, FSys), "%s", output.String())
+
+ afterSource, err := FSys.ReadFile(Srcs[0])
+ require.NoError(t, err)
+ assert.Equal(t, beforeSource, afterSource)
+ assert.Contains(t, output.String(), "reuse ID 151 from read-only metadata")
+ assert.Equal(t, TriceFmt{Type: "trice", Strg: "nested message"}, IDData.idToTrice[151])
+
+ generated, err := FSys.ReadFile(filepath.Join(BindDir, sidecarName))
+ require.NoError(t, err)
+ assert.Contains(t, string(generated), "iD(151u)")
+ assert.NotEqual(t, historicalSidecar, generated)
+ historicalAfter, err := FSys.ReadFile(filepath.Join(historicalDir, sidecarName))
+ require.NoError(t, err)
+ assert.Equal(t, historicalSidecar, historicalAfter)
+ secondaryTILAfter, err := FSys.ReadFile(secondaryTILPath)
+ require.NoError(t, err)
+ assert.Equal(t, secondaryTIL, secondaryTILAfter)
+ secondaryLIAfter, err := FSys.ReadFile(secondaryLIPath)
+ require.NoError(t, err)
+ assert.Equal(t, secondaryLI, secondaryLIAfter)
+}
+
+// TestBindReusesContentDetectedTILWithoutHistoricalSidecar proves that build
+// artifacts are optional and that a source without a File Key receives one
+// while retaining an ID from arbitrarily named JSON one level above -src.
+func TestBindReusesContentDetectedTILWithoutHistoricalSidecar(t *testing.T) {
+ source := "void f(void) { trice(\"metadata only\"); }\n"
+ defer prepareBindTest(t, map[string]string{"firmware/src/module.c": source})()
+
+ project := filepath.Join(Proj, t.Name())
+ Srcs = ArrayFlag{filepath.Join(project, "firmware", "src")}
+ metadataRoot := filepath.Join(project, "firmware")
+ secondaryTILPath := filepath.Join(metadataRoot, "productMessageDatabase.json")
+ secondaryLIPath := filepath.Join(metadataRoot, "anything.json")
+ secondaryTIL := writeBindTestTIL(t, secondaryTILPath, TriceIDLookUp{160: {Type: "trice", Strg: "metadata only"}})
+ secondaryLI := writeBindTestLI(t, secondaryLIPath, TriceIDLookUpLI{160: {File: "src/module.c", Line: 1}})
+
+ require.NoError(t, SubCmdIdBind(io.Discard, FSys))
+ sourcePath := filepath.Join(project, "firmware", "src", "module.c")
+ bound, err := FSys.ReadFile(sourcePath)
+ require.NoError(t, err)
+ assert.Contains(t, string(bound), "// trice-bind: keep as last include")
+ assert.Equal(t, TriceFmt{Type: "trice", Strg: "metadata only"}, IDData.idToTrice[160])
+ _, sidecar := readOwnedBindSidecar(t, sourcePath)
+ assert.Contains(t, string(sidecar), "iD(160u)")
+
+ secondaryTILAfter, err := FSys.ReadFile(secondaryTILPath)
+ require.NoError(t, err)
+ assert.Equal(t, secondaryTIL, secondaryTILAfter)
+ secondaryLIAfter, err := FSys.ReadFile(secondaryLIPath)
+ require.NoError(t, err)
+ assert.Equal(t, secondaryLI, secondaryLIAfter)
+}
+
+// TestBindSecondaryIDCollisionYieldsToPrimary verifies that a nested project's
+// conflicting numeric ID is a recoverable condition rather than a fatal merge.
+func TestBindSecondaryIDCollisionYieldsToPrimary(t *testing.T) {
+ key := "K3333333333333333"
+ sidecarName := "trice_collision_c_" + key + ".h"
+ source := "#include \"" + sidecarName + "\" // trice-bind: keep as last include before this file's Trice calls\n" +
+ "void f(void) { trice(\"secondary format\"); }\n"
+ defer prepareBindTest(t, map[string]string{"nested/collision.c": source})()
+
+ project := filepath.Join(Proj, t.Name())
+ writeBindTestTIL(t, FnJSON, TriceIDLookUp{151: {Type: "trice", Strg: "primary format"}})
+ secondaryTILPath := filepath.Join(project, "nested", "demoIDs.json")
+ secondaryBefore := writeBindTestTIL(t, secondaryTILPath, TriceIDLookUp{151: {Type: "trice", Strg: "secondary format"}})
+ historicalDir := filepath.Join(project, "nested", "build", "triceIDs")
+ require.NoError(t, FSys.MkdirAll(historicalDir, 0o755))
+ require.NoError(t, FSys.WriteFile(filepath.Join(historicalDir, sidecarName), []byte(
+ "#define TRICE_BIND_FILE_KEY "+key+"\n"+
+ "#define TRICE_BIND_ROUTE_"+key+" BIND\n"+
+ "#define TRICE_BIND_SITE_"+key+"_L2 TRICE_BIND_AUTO, iD(151u)\n"), 0o644))
+ BindDir = filepath.Join(project, "root-build", "triceIDs")
+
+ Verbose = true
+ var output bytes.Buffer
+ require.NoErrorf(t, SubCmdIdBind(&output, FSys), "%s", output.String())
+ assert.Contains(t, output.String(), "read-only ID 151")
+ assert.Contains(t, output.String(), "yields to the primary TIL")
+ assert.Equal(t, TriceFmt{Type: "trice", Strg: "primary format"}, IDData.idToTrice[151])
+ assert.Equal(t, TriceFmt{Type: "trice", Strg: "secondary format"}, IDData.idToTrice[100])
+ generated, err := FSys.ReadFile(filepath.Join(BindDir, sidecarName))
+ require.NoError(t, err)
+ assert.Contains(t, string(generated), "iD(100u)")
+ secondaryAfter, err := FSys.ReadFile(secondaryTILPath)
+ require.NoError(t, err)
+ assert.Equal(t, secondaryBefore, secondaryAfter)
+}
+
+// TestBindConflictingSecondaryProjectsResolveDeterministically verifies that
+// two read-only projects may reuse one local number differently. Sorted source
+// order claims the free primary number once; the later project receives a new
+// primary ID without either secondary TIL being rewritten.
+func TestBindConflictingSecondaryProjectsResolveDeterministically(t *testing.T) {
+ keyA := "K4444444444444444"
+ keyB := "K5555555555555555"
+ sourceA := "#include \"trice_module_c_" + keyA + ".h\" // trice-bind: keep as last include before this file's Trice calls\n" +
+ "void a(void) { trice(\"project a\"); }\n"
+ sourceB := "#include \"trice_module_c_" + keyB + ".h\" // trice-bind: keep as last include before this file's Trice calls\n" +
+ "void b(void) { trice(\"project b\"); }\n"
+ defer prepareBindTest(t, map[string]string{"a/module.c": sourceA, "b/module.c": sourceB})()
+
+ project := filepath.Join(Proj, t.Name())
+ Srcs = ArrayFlag{project}
+ aTILPath := filepath.Join(project, "a", "local.json")
+ bTILPath := filepath.Join(project, "b", "local.json")
+ aBefore := writeBindTestTIL(t, aTILPath, TriceIDLookUp{150: {Type: "trice", Strg: "project a"}})
+ bBefore := writeBindTestTIL(t, bTILPath, TriceIDLookUp{150: {Type: "trice", Strg: "project b"}})
+ writeBindTestLI(t, filepath.Join(project, "a", "where.json"), TriceIDLookUpLI{150: {File: "module.c", Line: 2}})
+ writeBindTestLI(t, filepath.Join(project, "b", "where.json"), TriceIDLookUpLI{150: {File: "module.c", Line: 2}})
+
+ Verbose = true
+ var output bytes.Buffer
+ require.NoErrorf(t, SubCmdIdBind(&output, FSys), "%s", output.String())
+ assert.Equal(t, TriceFmt{Type: "trice", Strg: "project a"}, IDData.idToTrice[150])
+ assert.Equal(t, TriceFmt{Type: "trice", Strg: "project b"}, IDData.idToTrice[100])
+ assert.Contains(t, output.String(), "read-only ID 150")
+ assert.Contains(t, output.String(), "yields to the primary TIL")
+
+ aAfter, err := FSys.ReadFile(aTILPath)
+ require.NoError(t, err)
+ assert.Equal(t, aBefore, aAfter)
+ bAfter, err := FSys.ReadFile(bTILPath)
+ require.NoError(t, err)
+ assert.Equal(t, bBefore, bAfter)
+}
+
+// TestBindDirectorySourceIgnoresHiddenFolders ensures neither source files nor
+// tempting metadata below .git-like or .trice-like trees influence bind.
+func TestBindDirectorySourceIgnoresHiddenFolders(t *testing.T) {
+ defer prepareBindTest(t, map[string]string{
+ "visible.c": "void visible(void) { trice(\"visible\"); }\n",
+ ".trice/cache/hidden.c": "void hidden(void) { trice(\"hidden\"); }\n",
+ ".git/generated/ignored.c": "void ignored(void) { trice(\"ignored\"); }\n",
+ })()
+
+ project := filepath.Join(Proj, t.Name())
+ Srcs = ArrayFlag{project}
+ hiddenTILPath := filepath.Join(project, ".trice", "cache", "oldIDs.json")
+ writeBindTestTIL(t, hiddenTILPath, TriceIDLookUp{155: {Type: "trice", Strg: "visible"}})
+ hiddenBefore, err := FSys.ReadFile(filepath.Join(project, ".trice", "cache", "hidden.c"))
+ require.NoError(t, err)
+ gitBefore, err := FSys.ReadFile(filepath.Join(project, ".git", "generated", "ignored.c"))
+ require.NoError(t, err)
+
+ require.NoError(t, SubCmdIdBind(io.Discard, FSys))
+ visible, err := FSys.ReadFile(filepath.Join(project, "visible.c"))
+ require.NoError(t, err)
+ assert.Contains(t, string(visible), "// trice-bind: keep as last include")
+ assert.Equal(t, TriceFmt{Type: "trice", Strg: "visible"}, IDData.idToTrice[100])
+ _, importedHiddenID := IDData.idToTrice[155]
+ assert.False(t, importedHiddenID)
+ hiddenAfter, err := FSys.ReadFile(filepath.Join(project, ".trice", "cache", "hidden.c"))
+ require.NoError(t, err)
+ assert.Equal(t, hiddenBefore, hiddenAfter)
+ gitAfter, err := FSys.ReadFile(filepath.Join(project, ".git", "generated", "ignored.c"))
+ require.NoError(t, err)
+ assert.Equal(t, gitBefore, gitAfter)
+}
+
+// TestClassifyBindMetadataJSONByContent documents the filename-independent
+// schema discriminator and its deliberate treatment of empty optional maps.
+func TestClassifyBindMetadataJSONByContent(t *testing.T) {
+ tilKind, til, _, err := classifyBindMetadataJSON([]byte(`{"123":{"Type":"trice","Strg":"x"}}`))
+ require.NoError(t, err)
+ assert.Equal(t, bindMetadataTIL, tilKind)
+ assert.Equal(t, TriceFmt{Type: "trice", Strg: "x"}, til[123])
+
+ liKind, _, li, err := classifyBindMetadataJSON([]byte(`{"123":{"File":"src/a.c","Line":7}}`))
+ require.NoError(t, err)
+ assert.Equal(t, bindMetadataLI, liKind)
+ assert.Equal(t, TriceLI{File: "src/a.c", Line: 7}, li[123])
+
+ emptyKind, _, _, err := classifyBindMetadataJSON([]byte(`{}`))
+ require.NoError(t, err)
+ assert.Equal(t, bindMetadataUnknown, emptyKind)
+ _, _, _, err = classifyBindMetadataJSON([]byte(`{"123":{"Type":"trice","Line":7}}`))
+ assert.Error(t, err)
+}
diff --git a/internal/id/bindMetadata.go b/internal/id/bindMetadata.go
new file mode 100644
index 000000000..f56eb234c
--- /dev/null
+++ b/internal/id/bindMetadata.go
@@ -0,0 +1,1133 @@
+// SPDX-License-Identifier: MIT
+
+package id
+
+import (
+ "encoding/json"
+ "errors"
+ "fmt"
+ "io"
+ "os"
+ "path/filepath"
+ "regexp"
+ "sort"
+ "strconv"
+ "strings"
+ "sync"
+
+ "github.com/spf13/afero"
+)
+
+var (
+ // bindHistoricalOrdinaryID extracts a numeric ID from an ordinary generated
+ // line descriptor. Descriptors referring to a wrapper definition are handled
+ // by bindHistoricalDefinitionID instead because they contain no numeric TID.
+ bindHistoricalOrdinaryID = regexp.MustCompile(`(?m)^[\t ]*#[\t ]*define[\t ]+TRICE_BIND_SITE_(K[0-9A-F]{16})_L([0-9]+)[\t ]+[^\r\n]*\b(?:iD|id|Id|ID)\([\t ]*([0-9]+)u?[\t ]*\)`)
+ // bindHistoricalDefinitionID extracts the persistent ID of a Trice site in
+ // a supported logging-wrapper definition.
+ bindHistoricalDefinitionID = regexp.MustCompile(`(?m)^[\t ]*#[\t ]*define[\t ]+TRICE_BIND_ID_DEFINITION_(K[0-9A-F]{16})_L([0-9]+)_O([0-9]+)[\t ]+([0-9]+)u?\b`)
+ // bindHistoricalLocationID extracts a direct counter-rebase site ID. The
+ // source ordinal distinguishes multiple direct calls on one physical line.
+ bindHistoricalLocationID = regexp.MustCompile(`(?m)^[\t ]*#[\t ]*define[\t ]+TRICE_BIND_ID_LOCATION_(K[0-9A-F]{16})_L([0-9]+)_O([0-9]+)[\t ]+([0-9]+)u?\b`)
+)
+
+// bindMetadataKind identifies a read-only JSON file by its data shape rather
+// than by its filename. The primary files keep their roles from the CLI.
+type bindMetadataKind uint8
+
+const (
+ bindMetadataUnknown bindMetadataKind = iota
+ bindMetadataTIL
+ bindMetadataLI
+)
+
+// bindDiscoveredJSON is one validated, read-only metadata source. Exactly one
+// of til or li is populated for a non-empty recognized document.
+type bindDiscoveredJSON struct {
+ path string
+ dir string
+ kind bindMetadataKind
+ til TriceIDLookUp
+ li TriceIDLookUpLI
+ byFormat bindFormatIndex
+}
+
+// bindFormatIndex is the immutable reverse view of one discovered TIL. It
+// prevents every Trice site from linearly scanning the same complete catalog.
+type bindFormatIndex map[TriceFmt][]TriceID
+
+// bindLocationMatchKey identifies one path comparison whose result is stable
+// for the duration of a bind command.
+type bindLocationMatchKey struct {
+ stored string
+ metadataPath string
+ sourcePath string
+}
+
+// bindLocationMatchCache avoids repeating filepath normalization and relative
+// path construction for every ID that shares the same LI source file.
+type bindLocationMatchCache map[bindLocationMatchKey]bool
+
+// bindRankedJSON adds source-local search precedence without duplicating the
+// parsed JSON document in every file plan.
+type bindRankedJSON struct {
+ data *bindDiscoveredJSON
+ rank int
+}
+
+// bindHistoricalSite is non-authoritative evidence recovered from an old
+// generated sidecar. Its old line and ordinal are ordering hints only.
+type bindHistoricalSite struct {
+ line int
+ ordinal int
+ kind string
+ id TriceID
+}
+
+// bindHistoricalSidecar contains validated ID evidence for the File Key owned
+// by one current source file. Its bytes are never copied to the new bind tree.
+type bindHistoricalSidecar struct {
+ path string
+ rank int
+ primary bool
+ sites []bindHistoricalSite
+}
+
+// bindPlanMetadata is the source-specific view of all bounded, read-only
+// metadata. Search order is deterministic and nearest-source-first.
+type bindPlanMetadata struct {
+ json []bindRankedJSON
+ sidecars []bindHistoricalSidecar
+}
+
+// bindIDCandidate describes one recoverable site ID. Lower priority and rank
+// values are stronger; lineDistance breaks ties without trusting old lines as
+// permanent identity.
+type bindIDCandidate struct {
+ id TriceID
+ priority int
+ rank int
+ lineDistance int
+ source string
+}
+
+// bindMetadataResolver caches directory listings, parsed JSON, and parsed
+// sidecars while each source receives its own proximity order. All cached data
+// remains read-only.
+type bindMetadataResolver struct {
+ w io.Writer
+ fSys *afero.Afero
+ directories map[string][]os.FileInfo
+ json map[string]*bindDiscoveredJSON
+ sidecars map[string]*bindHistoricalSidecar
+ reported map[string]bool
+ primaryTIL string
+ primaryLI string
+}
+
+// collectBindInputs enumerates source files deterministically, skips every
+// hidden directory, and reads the resulting files concurrently. A -src entry
+// may name either one file or a complete directory tree.
+func collectBindInputs(w io.Writer, fSys *afero.Afero) ([]bindFileInput, []bindDiagnostic) {
+ if w == nil {
+ w = io.Discard
+ }
+ exclusions := append([]string(nil), ExcludeSrcs...)
+ exclusions = append(exclusions, BindDir)
+
+ files := make(map[string]os.FileInfo)
+ var diagnostics []bindDiagnostic
+ roots := append([]string(nil), Srcs...)
+ sort.Strings(roots)
+ for _, root := range roots {
+ info, err := fSys.Stat(root)
+ if errors.Is(err, os.ErrNotExist) {
+ // Preserve the established source-walker behavior for a missing CLI
+ // path without turning the remaining valid roots into a fatal error.
+ fmt.Fprintln(w, root, "does not exist!")
+ continue
+ }
+ if err != nil {
+ diagnostics = append(diagnostics, bindDiagnostic{path: root, message: "cannot inspect source root: " + err.Error()})
+ continue
+ }
+ if bindSourceRootIsHidden(root, info) {
+ if Verbose {
+ fmt.Fprintf(w, "trice bind: ignore hidden source root %s\n", root)
+ }
+ continue
+ }
+
+ err = fSys.Walk(root, func(path string, fileInfo os.FileInfo, walkErr error) error {
+ if walkErr != nil {
+ return walkErr
+ }
+ if fileInfo.IsDir() && bindHiddenBase(fileInfo.Name()) {
+ if Verbose {
+ fmt.Fprintf(w, "trice bind: ignore hidden directory %s\n", path)
+ }
+ return filepath.SkipDir
+ }
+ if bindPathExcluded(path, exclusions) {
+ if fileInfo.IsDir() {
+ return filepath.SkipDir
+ }
+ return nil
+ }
+ if fileInfo.IsDir() || !isSourceFile(fileInfo) {
+ return nil
+ }
+ files[filepath.Clean(path)] = fileInfo
+ return nil
+ })
+ if err != nil {
+ diagnostics = append(diagnostics, bindDiagnostic{path: root, message: "source walk failed: " + err.Error()})
+ }
+ }
+
+ paths := make([]string, 0, len(files))
+ for path := range files {
+ paths = append(paths, path)
+ }
+ sort.Strings(paths)
+ inputs := make([]bindFileInput, len(paths))
+ readDiagnostics := make([]*bindDiagnostic, len(paths))
+ var workers sync.WaitGroup
+ workers.Add(len(paths))
+ for index, path := range paths {
+ index, path := index, path
+ go func() {
+ defer workers.Done()
+ content, err := fSys.ReadFile(path)
+ if err != nil {
+ diagnostic := bindDiagnostic{path: path, message: "cannot read source: " + err.Error()}
+ readDiagnostics[index] = &diagnostic
+ return
+ }
+ inputs[index] = bindFileInput{path: path, info: files[path], data: content}
+ }()
+ }
+ workers.Wait()
+
+ result := make([]bindFileInput, 0, len(inputs))
+ for index := range inputs {
+ if readDiagnostics[index] != nil {
+ diagnostics = append(diagnostics, *readDiagnostics[index])
+ continue
+ }
+ result = append(result, inputs[index])
+ }
+ return result, diagnostics
+}
+
+// bindHiddenBase reports the portable hidden-directory convention used by the
+// bind walker and implicit metadata search. The special path elements . and ..
+// are navigation syntax rather than hidden directory names.
+func bindHiddenBase(name string) bool {
+ return len(name) > 1 && strings.HasPrefix(name, ".") && name != ".."
+}
+
+// bindSourceRootIsHidden applies hidden-directory exclusion even when the user
+// explicitly passed a hidden directory or a file below one as -src.
+func bindSourceRootIsHidden(path string, info os.FileInfo) bool {
+ directory := path
+ if !info.IsDir() {
+ directory = filepath.Dir(path)
+ }
+ return bindPathHasHiddenDirectory(directory)
+}
+
+// bindPathHasHiddenDirectory checks directory components without classifying
+// a hidden regular file as a hidden folder.
+func bindPathHasHiddenDirectory(path string) bool {
+ clean := filepath.Clean(path)
+ for {
+ base := filepath.Base(clean)
+ if bindHiddenBase(base) {
+ return true
+ }
+ parent := filepath.Dir(clean)
+ if parent == clean {
+ return false
+ }
+ clean = parent
+ }
+}
+
+// bindPathExcluded gives bind the same subtree semantics as the established
+// ant walker while also handling relative and absolute spellings consistently.
+func bindPathExcluded(path string, exclusions []string) bool {
+ for _, exclusion := range exclusions {
+ if strings.TrimSpace(exclusion) == "" {
+ continue
+ }
+ if bindPathWithin(path, exclusion) {
+ return true
+ }
+ }
+ return false
+}
+
+// bindPathWithin reports whether path is tree itself or one of its descendants.
+func bindPathWithin(path, tree string) bool {
+ path = bindComparablePath(path)
+ tree = bindComparablePath(tree)
+ relative, err := filepath.Rel(tree, path)
+ if err != nil {
+ return false
+ }
+ return relative == "." || relative != ".." && !strings.HasPrefix(relative, ".."+string(os.PathSeparator))
+}
+
+// bindComparablePath creates a stable lexical comparison path without
+// resolving symlinks or consulting a filesystem other than the process CWD.
+func bindComparablePath(path string) string {
+ absolute, err := filepath.Abs(path)
+ if err == nil {
+ return filepath.Clean(absolute)
+ }
+ return filepath.Clean(path)
+}
+
+// newBindMetadataResolver initializes one command-local, read-only discovery
+// cache. Explicit primary paths are recorded so they cannot be rediscovered as
+// secondary metadata.
+func newBindMetadataResolver(w io.Writer, fSys *afero.Afero) *bindMetadataResolver {
+ if w == nil {
+ w = io.Discard
+ }
+ primaryLI := LIFnJSON
+ if primaryLI == "off" || primaryLI == "none" {
+ primaryLI = ""
+ }
+ comparablePrimaryLI := ""
+ if primaryLI != "" {
+ comparablePrimaryLI = bindComparablePath(primaryLI)
+ }
+ return &bindMetadataResolver{
+ w: w,
+ fSys: fSys,
+ directories: make(map[string][]os.FileInfo),
+ json: make(map[string]*bindDiscoveredJSON),
+ sidecars: make(map[string]*bindHistoricalSidecar),
+ reported: make(map[string]bool),
+ primaryTIL: bindComparablePath(FnJSON),
+ primaryLI: comparablePrimaryLI,
+ }
+}
+
+// metadataForPlan discovers only metadata reachable through the current
+// source's bounded search corridor and the explicitly selected metadata roots.
+func (resolver *bindMetadataResolver) metadataForPlan(plan *bindFilePlan) bindPlanMetadata {
+ directories := bindMetadataSearchDirectories(resolver.fSys, plan.path)
+ view := bindPlanMetadata{}
+ seenJSON := make(map[string]bool)
+ for rank, directory := range directories {
+ for _, metadata := range resolver.metadataInDirectory(directory) {
+ key := bindComparablePath(metadata.path)
+ if seenJSON[key] {
+ continue
+ }
+ seenJSON[key] = true
+ view.json = append(view.json, bindRankedJSON{data: metadata, rank: rank})
+ }
+ }
+ view.sidecars = resolver.sidecarsForPlan(plan, directories)
+ return view
+}
+
+// bindMetadataSearchDirectories returns nearest-source-first directories. It
+// climbs only to the owning -src anchor, adds one parent, and then adds the
+// explicit primary TIL/LI directories and one parent for each.
+func bindMetadataSearchDirectories(fSys *afero.Afero, sourcePath string) []string {
+ anchor := bindOwningSourceAnchor(fSys, sourcePath)
+ var directories []string
+ current := filepath.Dir(sourcePath)
+ if bindPathWithin(current, anchor) {
+ for {
+ directories = append(directories, current)
+ if bindComparablePath(current) == bindComparablePath(anchor) {
+ break
+ }
+ parent := filepath.Dir(current)
+ if parent == current {
+ break
+ }
+ current = parent
+ }
+ } else {
+ directories = append(directories, current, anchor)
+ }
+ directories = appendBindDirectoryAndParent(directories, anchor)
+ directories = appendBindDirectoryAndParent(directories, filepath.Dir(FnJSON))
+ if LIFnJSON != "off" && LIFnJSON != "none" {
+ directories = appendBindDirectoryAndParent(directories, filepath.Dir(LIFnJSON))
+ }
+
+ seen := make(map[string]bool)
+ result := make([]string, 0, len(directories))
+ for _, directory := range directories {
+ if directory == "" || bindPathHasHiddenDirectory(directory) {
+ continue
+ }
+ key := bindComparablePath(directory)
+ if seen[key] {
+ continue
+ }
+ seen[key] = true
+ result = append(result, filepath.Clean(directory))
+ }
+ return result
+}
+
+// bindOwningSourceAnchor selects the most specific -src entry containing the
+// source. A file-valued -src anchors discovery at that file's parent directory.
+func bindOwningSourceAnchor(fSys *afero.Afero, sourcePath string) string {
+ best := filepath.Dir(sourcePath)
+ bestLength := -1
+ for _, sourceRoot := range Srcs {
+ info, err := fSys.Stat(sourceRoot)
+ if err != nil {
+ continue
+ }
+ candidate := filepath.Clean(sourceRoot)
+ if !info.IsDir() {
+ if bindComparablePath(candidate) != bindComparablePath(sourcePath) {
+ continue
+ }
+ candidate = filepath.Dir(candidate)
+ } else if !bindPathWithin(sourcePath, candidate) {
+ continue
+ }
+ length := len(bindComparablePath(candidate))
+ if length > bestLength {
+ best = candidate
+ bestLength = length
+ }
+ }
+ return filepath.Clean(best)
+}
+
+// appendBindDirectoryAndParent appends one anchor and at most one additional
+// parent. De-duplication and hidden-directory filtering happen afterwards.
+func appendBindDirectoryAndParent(directories []string, directory string) []string {
+ if strings.TrimSpace(directory) == "" {
+ return directories
+ }
+ directory = filepath.Clean(directory)
+ directories = append(directories, directory)
+ parent := filepath.Dir(directory)
+ if parent != directory {
+ directories = append(directories, parent)
+ }
+ return directories
+}
+
+// metadataInDirectory identifies every immediate *.json file by content. It
+// deliberately performs no recursive or sibling-directory search.
+func (resolver *bindMetadataResolver) metadataInDirectory(directory string) []*bindDiscoveredJSON {
+ entries, ok := resolver.directories[directory]
+ if !ok {
+ readEntries, err := resolver.fSys.ReadDir(directory)
+ if err != nil {
+ if !errors.Is(err, os.ErrNotExist) {
+ resolver.verboseOnce("dir:"+directory, "trice bind: ignore unreadable metadata directory %s: %v\n", directory, err)
+ }
+ resolver.directories[directory] = nil
+ return nil
+ }
+ entries = readEntries
+ sort.Slice(entries, func(i, j int) bool { return entries[i].Name() < entries[j].Name() })
+ resolver.directories[directory] = entries
+ }
+
+ var result []*bindDiscoveredJSON
+ for _, entry := range entries {
+ if entry.IsDir() || !strings.EqualFold(filepath.Ext(entry.Name()), ".json") {
+ continue
+ }
+ path := filepath.Join(directory, entry.Name())
+ comparable := bindComparablePath(path)
+ if comparable == resolver.primaryTIL || resolver.primaryLI != "" && comparable == resolver.primaryLI {
+ continue
+ }
+ metadata, cached := resolver.json[comparable]
+ if !cached {
+ metadata = resolver.readMetadataJSON(path)
+ resolver.json[comparable] = metadata
+ }
+ if metadata != nil {
+ result = append(result, metadata)
+ }
+ }
+ return result
+}
+
+// readMetadataJSON parses one secondary candidate without allowing malformed
+// optional data to abort or mutate the primary project.
+func (resolver *bindMetadataResolver) readMetadataJSON(path string) *bindDiscoveredJSON {
+ content, err := resolver.fSys.ReadFile(path)
+ if err != nil {
+ resolver.verboseOnce("json-read:"+path, "trice bind: ignore unreadable secondary JSON %s: %v\n", path, err)
+ return nil
+ }
+ kind, til, li, err := classifyBindMetadataJSON(content)
+ if err != nil {
+ resolver.verboseOnce("json-shape:"+path, "trice bind: ignore secondary JSON %s: %v\n", path, err)
+ return nil
+ }
+ if kind == bindMetadataUnknown {
+ return nil
+ }
+ metadata := &bindDiscoveredJSON{path: path, dir: filepath.Dir(path), kind: kind, til: til, li: li}
+ if kind == bindMetadataTIL {
+ metadata.byFormat = newBindFormatIndex(til)
+ }
+ return metadata
+}
+
+// classifyBindMetadataJSON recognizes non-empty TIL and LI maps solely from
+// their value fields. Empty secondary maps contain no evidence and need no role.
+func classifyBindMetadataJSON(content []byte) (bindMetadataKind, TriceIDLookUp, TriceIDLookUpLI, error) {
+ var values map[string]json.RawMessage
+ if err := json.Unmarshal(content, &values); err != nil {
+ return bindMetadataUnknown, nil, nil, err
+ }
+ if len(values) == 0 {
+ return bindMetadataUnknown, nil, nil, nil
+ }
+ allTIL, allLI := true, true
+ for key, raw := range values {
+ id, err := strconv.Atoi(key)
+ if err != nil || id <= 0 {
+ return bindMetadataUnknown, nil, nil, fmt.Errorf("key %q is not a positive Trice ID", key)
+ }
+ var fields map[string]json.RawMessage
+ if err := json.Unmarshal(raw, &fields); err != nil {
+ return bindMetadataUnknown, nil, nil, fmt.Errorf("ID %s is not an object", key)
+ }
+ _, hasType := fields["Type"]
+ _, hasString := fields["Strg"]
+ _, hasFile := fields["File"]
+ _, hasLine := fields["Line"]
+ allTIL = allTIL && hasType && hasString
+ allLI = allLI && hasFile && hasLine
+ }
+ if allTIL == allLI {
+ return bindMetadataUnknown, nil, nil, errors.New("content is neither an unambiguous TIL nor an unambiguous LI")
+ }
+ if allTIL {
+ til := make(TriceIDLookUp)
+ if err := json.Unmarshal(content, &til); err != nil {
+ return bindMetadataUnknown, nil, nil, err
+ }
+ return bindMetadataTIL, til, nil, nil
+ }
+ li := make(TriceIDLookUpLI)
+ if err := json.Unmarshal(content, &li); err != nil {
+ return bindMetadataUnknown, nil, nil, err
+ }
+ return bindMetadataLI, nil, li, nil
+}
+
+// sidecarsForPlan finds the exact owner filename only. Historical generated
+// bytes are parsed as evidence and are never copied into the primary BindDir.
+func (resolver *bindMetadataResolver) sidecarsForPlan(plan *bindFilePlan, directories []string) []bindHistoricalSidecar {
+ if plan.key == "" || plan.sidecarName == "" {
+ return nil
+ }
+ type sidecarDirectory struct {
+ path string
+ primary bool
+ }
+ candidates := []sidecarDirectory{{path: BindDir, primary: true}}
+ for _, directory := range directories {
+ candidates = append(candidates, sidecarDirectory{path: filepath.Join(directory, "build", "triceIDs")})
+ }
+ seen := make(map[string]bool)
+ var result []bindHistoricalSidecar
+ for rank, directory := range candidates {
+ if !directory.primary && bindPathHasHiddenDirectory(directory.path) {
+ continue
+ }
+ key := bindComparablePath(directory.path)
+ if seen[key] {
+ continue
+ }
+ seen[key] = true
+ if sidecar, ok := resolver.sidecarForPlanAt(plan, directory.path, rank, directory.primary); ok {
+ result = append(result, sidecar)
+ }
+ }
+ return result
+}
+
+// primarySidecarsForPlan reads only the authoritative output-tree sidecar.
+// A complete match there outranks every implicit historical source, allowing
+// the common no-change bind run to avoid discovering unrelated JSON catalogs.
+func (resolver *bindMetadataResolver) primarySidecarsForPlan(plan *bindFilePlan) []bindHistoricalSidecar {
+ sidecar, ok := resolver.sidecarForPlanAt(plan, BindDir, 0, true)
+ if !ok {
+ return nil
+ }
+ return []bindHistoricalSidecar{sidecar}
+}
+
+// sidecarForPlanAt validates and parses one exact owner sidecar without ever
+// copying its generated bytes into another output directory.
+func (resolver *bindMetadataResolver) sidecarForPlanAt(plan *bindFilePlan, directory string, rank int, primary bool) (bindHistoricalSidecar, bool) {
+ if plan.key == "" || plan.sidecarName == "" {
+ return bindHistoricalSidecar{}, false
+ }
+ path := filepath.Join(directory, plan.sidecarName)
+ cacheKey := bindComparablePath(path)
+ if cached, exists := resolver.sidecars[cacheKey]; exists {
+ if cached == nil {
+ return bindHistoricalSidecar{}, false
+ }
+ sidecar := *cached
+ sidecar.rank = rank
+ sidecar.primary = primary
+ return sidecar, true
+ }
+ content, err := resolver.fSys.ReadFile(path)
+ if errors.Is(err, os.ErrNotExist) {
+ resolver.sidecars[cacheKey] = nil
+ return bindHistoricalSidecar{}, false
+ }
+ if err != nil {
+ resolver.verboseOnce("sidecar-read:"+path, "trice bind: ignore unreadable historical sidecar %s: %v\n", path, err)
+ resolver.sidecars[cacheKey] = nil
+ return bindHistoricalSidecar{}, false
+ }
+ if !bindHistoricalSidecarIsPlausible(content, plan.key) {
+ resolver.verboseOnce("sidecar-shape:"+path, "trice bind: ignore historical sidecar %s because its File Key or route is inconsistent\n", path)
+ resolver.sidecars[cacheKey] = nil
+ return bindHistoricalSidecar{}, false
+ }
+ sites := parseBindHistoricalSites(content, plan.key)
+ if len(sites) == 0 {
+ resolver.sidecars[cacheKey] = nil
+ return bindHistoricalSidecar{}, false
+ }
+ resolver.sidecars[cacheKey] = &bindHistoricalSidecar{path: path, sites: sites}
+ return bindHistoricalSidecar{path: path, rank: rank, primary: primary, sites: sites}, true
+}
+
+// bindHistoricalSidecarIsPlausible accepts only a sidecar that declares the
+// same File Key and normal BIND route as its current source owner.
+func bindHistoricalSidecarIsPlausible(content []byte, key string) bool {
+ keyDefinitions := bindSidecarKeyDefinition.FindAllSubmatch(content, -1)
+ if len(keyDefinitions) == 0 {
+ return false
+ }
+ for _, definition := range keyDefinitions {
+ if string(definition[1]) != key {
+ return false
+ }
+ }
+ routes := bindSidecarRouteDefinition.FindAllSubmatch(content, -1)
+ if len(routes) == 0 {
+ return false
+ }
+ for _, route := range routes {
+ if string(route[1]) != key {
+ return false
+ }
+ }
+ return true
+}
+
+// parseBindHistoricalSites extracts all directly numeric descriptors and sorts
+// them by their former source position. Old line numbers guide matching but are
+// never emitted without a fresh analysis of the current source.
+func parseBindHistoricalSites(content []byte, key string) []bindHistoricalSite {
+ var sites []bindHistoricalSite
+ for _, match := range bindHistoricalOrdinaryID.FindAllSubmatch(content, -1) {
+ if string(match[1]) != key {
+ continue
+ }
+ line, lineErr := strconv.Atoi(string(match[2]))
+ id, idErr := strconv.Atoi(string(match[3]))
+ if lineErr == nil && idErr == nil && id > 0 {
+ sites = append(sites, bindHistoricalSite{line: line, kind: "ordinary", id: TriceID(id)})
+ }
+ }
+ for _, pattern := range []struct {
+ kind string
+ expression *regexp.Regexp
+ }{{kind: "definition", expression: bindHistoricalDefinitionID}, {kind: "location", expression: bindHistoricalLocationID}} {
+ for _, match := range pattern.expression.FindAllSubmatch(content, -1) {
+ if string(match[1]) != key {
+ continue
+ }
+ line, lineErr := strconv.Atoi(string(match[2]))
+ ordinal, ordinalErr := strconv.Atoi(string(match[3]))
+ id, idErr := strconv.Atoi(string(match[4]))
+ if lineErr == nil && ordinalErr == nil && idErr == nil && id > 0 {
+ sites = append(sites, bindHistoricalSite{line: line, ordinal: ordinal, kind: pattern.kind, id: TriceID(id)})
+ }
+ }
+ }
+ sort.SliceStable(sites, func(i, j int) bool {
+ if sites[i].line != sites[j].line {
+ return sites[i].line < sites[j].line
+ }
+ if sites[i].ordinal != sites[j].ordinal {
+ return sites[i].ordinal < sites[j].ordinal
+ }
+ if sites[i].kind != sites[j].kind {
+ return sites[i].kind < sites[j].kind
+ }
+ return sites[i].id < sites[j].id
+ })
+ return sites
+}
+
+// preferredBindIDs resolves read-only history into virtual per-site ID hints.
+// The returned IDs are fed through insertTriceIDs, so existing parsing,
+// allocation, range handling, and conflict behavior remain authoritative.
+func preferredBindIDs(w io.Writer, plans []bindFilePlan, resolver *bindMetadataResolver) map[bindSiteReference]TriceID {
+ preferred := make(map[bindSiteReference]TriceID)
+ claimed := make(map[TriceID]bindSiteReference)
+ locationMatches := make(bindLocationMatchCache)
+ primaryByFormat := newBindFormatIndex(IDData.idToTrice)
+ for planIndex := range plans {
+ for siteIndex, site := range plans[planIndex].sites {
+ if site.wasExplicit && site.id > 0 {
+ claimed[site.id] = bindSiteReference{plan: planIndex, site: siteIndex}
+ }
+ }
+ }
+
+ for planIndex := range plans {
+ plan := &plans[planIndex]
+ if plan.class != bindFileBound {
+ continue
+ }
+ unresolved := make([]int, 0, len(plan.sites))
+ for siteIndex := range plan.sites {
+ if !plan.sites[siteIndex].wasExplicit {
+ unresolved = append(unresolved, siteIndex)
+ }
+ }
+
+ // The current output-tree sidecar has absolute candidate precedence. If
+ // it resolves every live site, secondary JSON discovery cannot alter the
+ // result and would only slow the normal unchanged bind run. Verbose mode
+ // still performs complete discovery so it can report optional evidence.
+ if !Verbose && len(unresolved) > 0 {
+ primaryMetadata := bindPlanMetadata{sidecars: resolver.primarySidecarsForPlan(plan)}
+ primaryCandidates := bindSidecarCandidates(plan, primaryMetadata, IDData.idToTrice)
+ remaining := unresolved[:0]
+ for _, siteIndex := range unresolved {
+ site := plan.sites[siteIndex]
+ ref := bindSiteReference{plan: planIndex, site: siteIndex}
+ candidates := compactBindIDCandidates(append([]bindIDCandidate(nil), primaryCandidates[siteIndex]...))
+ if !acceptBindPreferredID(w, resolver, plan, site, ref, bindSiteFormat(site), candidates, claimed, primaryByFormat, locationMatches, preferred) {
+ remaining = append(remaining, siteIndex)
+ }
+ }
+ unresolved = remaining
+ if len(unresolved) == 0 {
+ continue
+ }
+ }
+
+ metadata := resolver.metadataForPlan(plan)
+ sidecarCandidates := bindSidecarCandidates(plan, metadata, IDData.idToTrice)
+ for _, siteIndex := range unresolved {
+ site := plan.sites[siteIndex]
+ ref := bindSiteReference{plan: planIndex, site: siteIndex}
+ format := bindSiteFormat(site)
+ candidates := append([]bindIDCandidate(nil), sidecarCandidates[siteIndex]...)
+ candidates = append(candidates, bindCatalogCandidates(plan, site, format, metadata, primaryByFormat, locationMatches)...)
+ candidates = compactBindIDCandidates(candidates)
+ acceptBindPreferredID(w, resolver, plan, site, ref, format, candidates, claimed, primaryByFormat, locationMatches, preferred)
+ }
+ }
+
+ // Rebuild and sort the shared reverse lookup after importing selected IDs.
+ // Sorting removes Go map iteration order from otherwise ambiguous equal-format
+ // fallbacks before the established insert engine consumes the candidates.
+ IDData.triceToId = IDData.idToTrice.reverseS()
+ for format := range IDData.triceToId {
+ sort.Slice(IDData.triceToId[format], func(i, j int) bool {
+ return IDData.triceToId[format][i] < IDData.triceToId[format][j]
+ })
+ }
+ return preferred
+}
+
+// acceptBindPreferredID applies the established collision, location, and
+// ownership checks to an already ordered candidate list. It is shared by the
+// primary-sidecar fast path and the complete historical metadata path.
+func acceptBindPreferredID(w io.Writer, resolver *bindMetadataResolver, plan *bindFilePlan, site bindSite, ref bindSiteReference, format TriceFmt, candidates []bindIDCandidate, claimed map[TriceID]bindSiteReference, primaryByFormat bindFormatIndex, locationMatches bindLocationMatchCache, preferred map[bindSiteReference]TriceID) bool {
+ for _, candidate := range candidates {
+ if candidate.id <= 0 {
+ continue
+ }
+ primaryFormat, primaryExists := IDData.idToTrice[candidate.id]
+ if primaryExists {
+ if primaryFormat != format {
+ resolver.verboseOnce(
+ fmt.Sprintf("collision:%d:%s:%d", candidate.id, plan.path, site.line),
+ "trice bind: %s:%d: read-only ID %d from %s yields to the primary TIL mapping %+v\n",
+ plan.path, site.line, candidate.id, candidate.source, primaryFormat,
+ )
+ continue
+ }
+ if location, hasLocation := IDData.idToLocRef[candidate.id]; hasLocation && !locationMatches.matches(location.File, LIFnJSON, plan.path) {
+ resolver.verboseOnce(
+ fmt.Sprintf("location:%d:%s:%d", candidate.id, plan.path, site.line),
+ "trice bind: %s:%d: ID %d remains associated with primary location %s; trying the next candidate\n",
+ plan.path, site.line, candidate.id, location.File,
+ )
+ continue
+ }
+ }
+ if owner, used := claimed[candidate.id]; used && owner != ref {
+ resolver.verboseOnce(
+ fmt.Sprintf("claimed:%d:%s:%d", candidate.id, plan.path, site.line),
+ "trice bind: %s:%d: read-only ID %d from %s is already assigned in this bind plan; trying the next candidate\n",
+ plan.path, site.line, candidate.id, candidate.source,
+ )
+ continue
+ }
+ if !primaryExists {
+ // Import only the selected active mapping. Historical entries not
+ // used by the current source set remain in their read-only TIL.
+ IDData.idToTrice[candidate.id] = format
+ IDData.removeIDFromIDSpace(candidate.id)
+ primaryByFormat.add(format, candidate.id)
+ }
+ claimed[candidate.id] = ref
+ preferred[ref] = candidate.id
+ if Verbose && bindComparablePath(candidate.source) != bindComparablePath(FnJSON) {
+ fmt.Fprintf(w, "trice bind: %s:%d: reuse ID %d from read-only metadata %s\n", plan.path, site.line, candidate.id, candidate.source)
+ }
+ return true
+ }
+ return false
+}
+
+// bindSiteFormat reconstructs the established TriceFmt from parser-derived
+// site data. Alias resolution is shared with insert and no second parser exists.
+func bindSiteFormat(site bindSite) TriceFmt {
+ format := TriceFmt{Type: site.macro, Strg: site.format}
+ resolveTriceAlias(&format)
+ format.Alias = ""
+ return format
+}
+
+// bindSidecarCandidates aligns old sidecar descriptors with current sites by
+// TriceFmt and source order. This survives shifted lines while keeping repeated
+// identical formats deterministic.
+func bindSidecarCandidates(plan *bindFilePlan, metadata bindPlanMetadata, primary TriceIDLookUp) map[int][]bindIDCandidate {
+ result := make(map[int][]bindIDCandidate)
+ currentByFormat := make(map[TriceFmt][]int)
+ for siteIndex, site := range plan.sites {
+ if !site.wasExplicit {
+ format := bindSiteFormat(site)
+ currentByFormat[format] = append(currentByFormat[format], siteIndex)
+ }
+ }
+ for _, sidecar := range metadata.sidecars {
+ historicalByFormat := make(map[TriceFmt][]bindHistoricalSite)
+ for _, historical := range sidecar.sites {
+ format, ok := bindHistoricalFormat(historical.id, sidecar.primary, metadata, primary)
+ if ok {
+ historicalByFormat[format] = append(historicalByFormat[format], historical)
+ }
+ }
+ for format, currentIndexes := range currentByFormat {
+ historicalSites := historicalByFormat[format]
+ count := len(currentIndexes)
+ if len(historicalSites) < count {
+ count = len(historicalSites)
+ }
+ for index := 0; index < count; index++ {
+ currentSite := plan.sites[currentIndexes[index]]
+ oldSite := historicalSites[index]
+ result[currentIndexes[index]] = append(result[currentIndexes[index]], bindIDCandidate{
+ id: oldSite.id,
+ priority: 0,
+ rank: sidecar.rank,
+ lineDistance: bindLineDistance(currentSite.line, oldSite.line),
+ source: sidecar.path,
+ })
+ }
+ }
+ }
+ return result
+}
+
+// bindHistoricalFormat finds the format that made a historical sidecar ID
+// meaningful. The primary TIL is preferred for a primary sidecar; otherwise the
+// nearest read-only TIL is preferred before falling back to the primary map.
+func bindHistoricalFormat(id TriceID, primarySidecar bool, metadata bindPlanMetadata, primary TriceIDLookUp) (TriceFmt, bool) {
+ if primarySidecar {
+ if format, ok := primary[id]; ok {
+ return format, true
+ }
+ }
+ for _, ranked := range metadata.json {
+ if ranked.data.kind != bindMetadataTIL {
+ continue
+ }
+ if format, ok := ranked.data.til[id]; ok {
+ return format, true
+ }
+ }
+ format, ok := primary[id]
+ return format, ok
+}
+
+// bindCatalogCandidates returns primary and read-only TIL candidates for one
+// exact TriceFmt. Existing LI ownership in another file prevents format-only
+// reuse; a matching file and nearby line improve the candidate priority.
+func bindCatalogCandidates(plan *bindFilePlan, site bindSite, format TriceFmt, metadata bindPlanMetadata, primaryByFormat bindFormatIndex, locationMatches bindLocationMatchCache) []bindIDCandidate {
+ var candidates []bindIDCandidate
+ for _, id := range primaryByFormat[format] {
+ if location, ok := IDData.idToLocRef[id]; ok {
+ if !locationMatches.matches(location.File, LIFnJSON, plan.path) {
+ continue
+ }
+ candidates = append(candidates, bindIDCandidate{id: id, priority: 1, lineDistance: bindLineDistance(site.line, location.Line), source: FnJSON})
+ continue
+ }
+ candidates = append(candidates, bindIDCandidate{id: id, priority: 2, source: FnJSON})
+ }
+
+ for _, ranked := range metadata.json {
+ if ranked.data.kind != bindMetadataTIL {
+ continue
+ }
+ for _, id := range ranked.data.byFormat[format] {
+ location, hasLocation, matches := bindSecondaryLocation(id, ranked.data.dir, plan.path, metadata, locationMatches)
+ if hasLocation && !matches {
+ continue
+ }
+ candidate := bindIDCandidate{id: id, priority: 3, rank: ranked.rank, source: ranked.data.path}
+ if hasLocation {
+ candidate.priority = 1
+ candidate.lineDistance = bindLineDistance(site.line, location.Line)
+ }
+ candidates = append(candidates, candidate)
+ }
+ }
+ return candidates
+}
+
+// newBindFormatIndex builds one deterministic reverse view of a TIL. The
+// source lookup remains authoritative and is never mutated through this index.
+func newBindFormatIndex(lookup TriceIDLookUp) bindFormatIndex {
+ index := make(bindFormatIndex)
+ for id, format := range lookup {
+ index[format] = append(index[format], id)
+ }
+ for format := range index {
+ sort.Slice(index[format], func(i, j int) bool { return index[format][i] < index[format][j] })
+ }
+ return index
+}
+
+// add records one selected secondary mapping in the live primary index. This
+// retains the previous behavior in which later sites see earlier imports.
+func (index bindFormatIndex) add(format TriceFmt, id TriceID) {
+ ids := index[format]
+ position := sort.Search(len(ids), func(i int) bool { return ids[i] >= id })
+ if position < len(ids) && ids[position] == id {
+ return
+ }
+ ids = append(ids, 0)
+ copy(ids[position+1:], ids[position:])
+ ids[position] = id
+ index[format] = ids
+}
+
+// bindSecondaryLocation pairs a secondary TIL only with LI documents in the
+// same directory. This avoids treating an equal numeric ID from another
+// subproject as location evidence for the current catalog.
+func bindSecondaryLocation(id TriceID, tilDirectory, sourcePath string, metadata bindPlanMetadata, locationMatches bindLocationMatchCache) (TriceLI, bool, bool) {
+ var first TriceLI
+ found := false
+ for _, ranked := range metadata.json {
+ if ranked.data.kind != bindMetadataLI || bindComparablePath(ranked.data.dir) != bindComparablePath(tilDirectory) {
+ continue
+ }
+ location, ok := ranked.data.li[id]
+ if !ok {
+ continue
+ }
+ if !found {
+ first = location
+ found = true
+ }
+ if locationMatches.matches(location.File, ranked.data.path, sourcePath) {
+ return location, true, true
+ }
+ }
+ return first, found, false
+}
+
+// matches memoizes the established location comparison without changing its
+// path or suffix semantics.
+func (cache bindLocationMatchCache) matches(stored, metadataPath, sourcePath string) bool {
+ key := bindLocationMatchKey{stored: stored, metadataPath: metadataPath, sourcePath: sourcePath}
+ if matches, ok := cache[key]; ok {
+ return matches
+ }
+ matches := bindLocationMatches(stored, metadataPath, sourcePath)
+ cache[key] = matches
+ return matches
+}
+
+// bindLocationMatches compares a stored portable LI path against several
+// representations derived from the metadata file and current source. Component
+// suffix matching accommodates a project bound from a different parent root.
+func bindLocationMatches(stored, metadataPath, sourcePath string) bool {
+ stored = normalizeLocationPath(stored)
+ if stored == "" || stored == "." {
+ return false
+ }
+ candidates := []string{normalizeLocationPath(sourcePath), ToLIFile(sourcePath)}
+ if metadataPath != "" && metadataPath != "off" && metadataPath != "none" {
+ if relative, err := filepath.Rel(filepath.Dir(metadataPath), sourcePath); err == nil {
+ candidates = append(candidates, normalizeLocationPath(relative))
+ }
+ }
+ for _, candidate := range candidates {
+ if candidate == stored || strings.HasSuffix(candidate, "/"+strings.TrimPrefix(stored, "./")) {
+ return true
+ }
+ }
+ return !strings.Contains(stored, "/") && filepath.Base(filepath.FromSlash(sourcePath)) == stored
+}
+
+// bindLineDistance returns a stable non-negative tie breaker for relocated
+// source sites.
+func bindLineDistance(current, historical int) int {
+ if current >= historical {
+ return current - historical
+ }
+ return historical - current
+}
+
+// compactBindIDCandidates keeps the strongest occurrence of each numeric ID
+// and sorts the remaining alternatives deterministically.
+func compactBindIDCandidates(candidates []bindIDCandidate) []bindIDCandidate {
+ sort.SliceStable(candidates, func(i, j int) bool {
+ if candidates[i].priority != candidates[j].priority {
+ return candidates[i].priority < candidates[j].priority
+ }
+ if candidates[i].rank != candidates[j].rank {
+ return candidates[i].rank < candidates[j].rank
+ }
+ if candidates[i].lineDistance != candidates[j].lineDistance {
+ return candidates[i].lineDistance < candidates[j].lineDistance
+ }
+ if candidates[i].id != candidates[j].id {
+ return candidates[i].id < candidates[j].id
+ }
+ return candidates[i].source < candidates[j].source
+ })
+ seen := make(map[TriceID]bool)
+ result := make([]bindIDCandidate, 0, len(candidates))
+ for _, candidate := range candidates {
+ if seen[candidate.id] {
+ continue
+ }
+ seen[candidate.id] = true
+ result = append(result, candidate)
+ }
+ return result
+}
+
+// applyBindPreferredIDs inserts recovered IDs into the in-memory parser view
+// only. All parser offsets refer to the unchanged source, so one final linear
+// transformation replaces the former full-file copy for every individual ID.
+func applyBindPreferredIDs(source []byte, planIndex int, plan *bindFilePlan, preferred map[bindSiteReference]TriceID) ([]byte, error) {
+ original := string(source)
+ edits := make([]sourceEdit, 0, len(plan.sites))
+ for siteIndex := range plan.sites {
+ id, ok := preferred[bindSiteReference{plan: planIndex, site: siteIndex}]
+ if !ok {
+ continue
+ }
+ location := plan.sites[siteIndex].loc
+ edits = append(edits, idSourceEdit(original, 0, location[:], bindSiteFormat(plan.sites[siteIndex]), id))
+ }
+ if len(edits) == 0 {
+ return source, nil
+ }
+ result, err := applySourceEdits(original, edits)
+ if err != nil {
+ return nil, err
+ }
+ return []byte(result), nil
+}
+
+// preserveBindRebaseFormatting restores formatter-owned horizontal whitespace
+// when a regenerated compact boundary has the same complete semantic identity.
+// New, removed, or renamed boundaries retain freshly generated text.
+func preserveBindRebaseFormatting(plan *bindFilePlan) {
+ original := bindRebaseLinesByIdentity(plan.original)
+ if len(original) == 0 {
+ return
+ }
+ text := string(plan.final)
+ var builder strings.Builder
+ for position := 0; position < len(text); {
+ end := lineEndIncludingNewline(text, position)
+ lineWithEnding := text[position:end]
+ line := strings.TrimRight(lineWithEnding, "\r\n")
+ ending := lineWithEnding[len(line):]
+ identity := bindRebaseLineIdentity(line)
+ if preserved := original[identity]; identity != "" && len(preserved) > 0 {
+ builder.WriteString(preserved[0])
+ builder.WriteString(ending)
+ original[identity] = preserved[1:]
+ } else {
+ builder.WriteString(lineWithEnding)
+ }
+ position = end
+ }
+ plan.final = []byte(builder.String())
+}
+
+// bindRebaseLinesByIdentity records exact generated line text without newline
+// bytes so the current source newline remains authoritative.
+func bindRebaseLinesByIdentity(source []byte) map[string][]string {
+ result := make(map[string][]string)
+ text := string(source)
+ for position := 0; position < len(text); {
+ end := lineEndIncludingNewline(text, position)
+ line := strings.TrimRight(text[position:end], "\r\n")
+ if identity := bindRebaseLineIdentity(line); identity != "" {
+ result[identity] = append(result[identity], line)
+ }
+ position = end
+ }
+ return result
+}
+
+// bindRebaseLineIdentity includes every field validated by the compact parser;
+// whitespace alone is intentionally absent from the identity.
+func bindRebaseLineIdentity(line string) string {
+ name, key, scope, kind, ok := parseBindCompactRebaseInclude(line)
+ if !ok {
+ return ""
+ }
+ return strings.Join([]string{name, key, scope, kind}, "\x00")
+}
+
+// verboseOnce keeps normal bind silent and prevents repeated optional-metadata
+// messages when several source files share the same search corridor.
+func (resolver *bindMetadataResolver) verboseOnce(key, format string, arguments ...interface{}) {
+ if !Verbose || resolver.reported[key] {
+ return
+ }
+ resolver.reported[key] = true
+ fmt.Fprintf(resolver.w, format, arguments...)
+}
diff --git a/internal/id/bindParse.go b/internal/id/bindParse.go
new file mode 100644
index 000000000..ce9766646
--- /dev/null
+++ b/internal/id/bindParse.go
@@ -0,0 +1,461 @@
+// SPDX-License-Identifier: MIT
+
+package id
+
+import (
+ "fmt"
+ "path/filepath"
+ "regexp"
+ "sort"
+ "strconv"
+ "strings"
+)
+
+var (
+ // bindIncludeDirective matches physical include directives without interpreting preprocessing conditions.
+ bindIncludeDirective = regexp.MustCompile(`(?m)^[\t ]*#[\t ]*include\b[^\r\n]*`)
+ // bindSidecarName extracts the generated flat sidecar name and its embedded file key.
+ bindSidecarName = regexp.MustCompile(`"(trice_[A-Za-z0-9_]+_(K[0-9A-F]{16})\.h)"`)
+ // bindIDWrapper extracts the case-sensitive legacy stamp wrapper selected by insert.
+ bindIDWrapper = regexp.MustCompile(`\b(?:iD|id|Id|ID)\b`)
+ // bindSidecarKeyDefinition validates the identity declared by an existing generated sidecar.
+ bindSidecarKeyDefinition = regexp.MustCompile(`(?m)^[\t ]*#[\t ]*define[\t ]+TRICE_BIND_FILE_KEY[\t ]+(K[0-9A-F]{16})\b`)
+ // bindSidecarRouteDefinition validates the expansion-time route declared for the sidecar key.
+ bindSidecarRouteDefinition = regexp.MustCompile(`(?m)^[\t ]*#[\t ]*define[\t ]+TRICE_BIND_ROUTE_(K[0-9A-F]{16})[\t ]+BIND\b`)
+)
+
+// analyzeBindFile classifies one source using the shared Trice matcher and marker masking.
+func analyzeBindFile(input bindFileInput) bindFilePlan {
+ clean, generatedBlocks, artifactDiagnostics, _ := stripBindRebaseArtifacts(input.path, input.data)
+ plan := bindFilePlan{
+ path: input.path,
+ info: input.info,
+ original: input.data,
+ final: clean,
+ managedOffset: -1,
+ diagnostics: artifactDiagnostics,
+ }
+ for _, block := range generatedBlocks {
+ if block.helperName == "" {
+ continue
+ }
+ plan.existingRebaseArtifacts = append(plan.existingRebaseArtifacts, bindRebaseArtifact{
+ name: block.helperName,
+ kind: block.kind,
+ scope: block.scope,
+ })
+ }
+ cleanSource := string(clean)
+ // The configured shared matcher must see every actual Trice start in the
+ // original bytes as well as in the comment-masked view. A cheap raw miss is
+ // therefore conclusive and avoids two full-size masking passes for the many
+ // project files that contain no Trice call at all.
+ mayHaveTrice := matchAnyTriceStart.FindStringIndex(cleanSource) != nil
+ if mayHaveTrice || strings.Contains(cleanSource, "trice_") {
+ // Include parsing is required for a live site and for a source that may
+ // already carry a generated sidecar. Files with neither raw token cannot
+ // affect bind ownership or include placement.
+ plan.includes = scanBindIncludes(cleanSource)
+ }
+ if mayHaveTrice {
+ var siteDiagnostics []bindDiagnostic
+ plan.sites, siteDiagnostics = scanBindSites(input.path, cleanSource)
+ plan.diagnostics = append(plan.diagnostics, siteDiagnostics...)
+ }
+
+ var hasBindSite, hasExplicitSite bool
+ for _, site := range plan.sites {
+ if site.wasExplicit {
+ hasExplicitSite = true
+ } else {
+ hasBindSite = true
+ }
+ }
+ switch {
+ case hasBindSite && hasExplicitSite:
+ plan.class = bindFileMixed
+ plan.diagnostics = append(plan.diagnostics, bindDiagnostic{path: input.path, message: "file mixes explicit non-zero IDs with ID-free or zero-placeholder Trice sites"})
+ case hasBindSite:
+ plan.class = bindFileBound
+ case hasExplicitSite:
+ plan.class = bindFileInsert
+ case hasSidecarInclude(plan.includes):
+ plan.class = bindFileBound
+ default:
+ plan.class = bindFileNone
+ }
+
+ var sidecarNames = make(map[string]string)
+ for _, include := range plan.includes {
+ if include.isSidecar {
+ sidecarNames[include.name] = include.key
+ }
+ }
+ if len(sidecarNames) > 1 {
+ plan.diagnostics = append(plan.diagnostics, bindDiagnostic{path: input.path, message: "file includes conflicting Trice bind sidecars"})
+ }
+ names := make([]string, 0, len(sidecarNames))
+ for name := range sidecarNames {
+ names = append(names, name)
+ }
+ sort.Strings(names)
+ if len(names) > 0 {
+ plan.sidecarName = names[0]
+ plan.key = sidecarNames[plan.sidecarName]
+ }
+ if plan.class == bindFileInsert && plan.key != "" {
+ plan.diagnostics = append(plan.diagnostics, bindDiagnostic{path: input.path, message: "insert-owned file still contains a Trice bind sidecar include"})
+ }
+ return plan
+}
+
+// scanBindIncludes returns all physical includes and recognizes bind sidecars independently of comments.
+func scanBindIncludes(source string) []bindInclude {
+ locations := bindIncludeDirective.FindAllStringIndex(stripCComments(source), -1)
+ includes := make([]bindInclude, 0, len(locations))
+ for _, location := range locations {
+ lineText := source[location[0]:location[1]]
+ include := bindInclude{
+ start: location[0],
+ end: location[1],
+ afterLine: lineEndIncludingNewline(source, location[1]),
+ line: sourceLine(source, location[0]),
+ }
+ match := bindSidecarName.FindStringSubmatch(lineText)
+ if len(match) == 3 {
+ include.name = match[1]
+ include.key = match[2]
+ include.isSidecar = true
+ }
+ if name, key, _, _, ok := parseBindCompactRebaseInclude(lineText); ok {
+ include.name = name
+ include.key = key
+ include.isRebase = true
+ }
+ includes = append(includes, include)
+ }
+ return includes
+}
+
+// scanBindSites uses matchTrice and the insert marker mask to retain exactly the existing parser surface.
+func scanBindSites(path, source string) (sites []bindSite, diagnostics []bindDiagnostic) {
+ // Keep byte offsets stable while preventing commented examples and disabled
+ // prototypes from becoming diagnostics or generated bind sites.
+ masked := stripCComments(maskTriceInsertDisabledRegions(source))
+ rest := masked
+ offset := 0
+ // Matches and their parser issues arrive in source order. Advancing one
+ // cursor computes line and column information in total O(source size), while
+ // repeatedly counting from byte zero would make large files quadratic.
+ line, lineStartOffset, positionOffset := 1, 0, 0
+ positionOf := func(position int) (int, int) {
+ if position < positionOffset {
+ // This defensive path preserves correctness if a future parser reports
+ // issues out of order; the current shared matcher never takes it.
+ return sourceLine(source, position), sourceColumn(source, position)
+ }
+ for index := positionOffset; index < position; index++ {
+ if source[index] == '\n' {
+ line++
+ lineStartOffset = index + 1
+ }
+ }
+ positionOffset = position
+ return line, position - lineStartOffset + 1
+ }
+ for {
+ loc, matchIssues := matchTriceWithIssues(rest)
+ for _, issue := range matchIssues {
+ position := offset + issue.offset
+ issueLine, _ := positionOf(position)
+ diagnostics = append(diagnostics, bindDiagnostic{path: path, line: issueLine, message: issue.message})
+ }
+ if loc == nil {
+ break
+ }
+ var absolute [7]int
+ for i := range absolute {
+ absolute[i] = offset + loc[i]
+ }
+ siteLine, siteColumn := positionOf(absolute[0])
+ site := bindSite{
+ line: siteLine,
+ column: siteColumn,
+ loc: absolute,
+ macro: source[absolute[0]:absolute[1]],
+ comment: bindSourceComment(source, absolute),
+ }
+
+ var trice TriceFmt
+ trice.Type = site.macro
+ resolveTriceAlias(&trice)
+ if trice.isSAlias() {
+ trice.Strg = SAliasStrgPrefix + source[absolute[5]:absolute[6]] + SAliasStrgSuffix
+ } else if absolute[5] < absolute[6] {
+ trice.Strg = source[absolute[5]+1 : absolute[6]-1]
+ }
+ site.format = trice.Strg
+
+ if absolute[3] == absolute[4] {
+ site.mode = bindSiteAuto
+ site.wrapper = bindDefaultWrapper(trice.Type)
+ } else {
+ idText := source[absolute[3]:absolute[4]]
+ wrapper := bindIDWrapper.FindString(idText)
+ number := matchNb.FindString(idText)
+ if wrapper == "" || number == "" {
+ diagnostics = append(diagnostics, bindDiagnostic{path: path, line: site.line, message: "Trice ID wrapper does not contain one decimal ID"})
+ } else {
+ value, err := strconv.Atoi(number)
+ if err != nil {
+ diagnostics = append(diagnostics, bindDiagnostic{path: path, line: site.line, message: fmt.Sprintf("invalid Trice ID %q", number)})
+ } else {
+ site.id = TriceID(value)
+ site.wrapper = wrapper
+ site.wasExplicit = value > 0
+ site.mode = bindSiteReplace
+ }
+ }
+ }
+
+ sites = append(sites, site)
+ offset = absolute[6]
+ rest = masked[offset:]
+ }
+ return sites, diagnostics
+}
+
+// bindDefaultWrapper mirrors writeID's established lowercase and uppercase stamp selection.
+func bindDefaultWrapper(macro string) string {
+ if len(macro) > 2 && macro[2] == 'i' {
+ return "iD"
+ }
+ switch DefaultStampSize {
+ case 16:
+ return "Id"
+ case 32:
+ return "ID"
+ default:
+ return "id"
+ }
+}
+
+// hasSidecarInclude reports whether direct source text already establishes bind ownership.
+func hasSidecarInclude(includes []bindInclude) bool {
+ for _, include := range includes {
+ if include.isSidecar {
+ return true
+ }
+ }
+ return false
+}
+
+// hasTriceBindSidecarInclude is shared with insert so bound sources are never instrumented accidentally.
+func hasTriceBindSidecarInclude(source string) bool {
+ return hasSidecarInclude(scanBindIncludes(source))
+}
+
+// bindSidecarFilename creates the specified readable name while the random key provides identity.
+func bindSidecarFilename(sourcePath, key string) string {
+ base := filepath.Base(sourcePath)
+ var normalized strings.Builder
+ for _, r := range base {
+ if r == '_' || '0' <= r && r <= '9' || 'A' <= r && r <= 'Z' || 'a' <= r && r <= 'z' {
+ normalized.WriteRune(r)
+ } else {
+ normalized.WriteByte('_')
+ }
+ }
+ return "trice_" + normalized.String() + "_" + key + ".h"
+}
+
+// addBindInclude applies the conservative placement rule and returns a re-parsed final source.
+func addBindInclude(plan *bindFilePlan) {
+ if plan.key == "" || plan.sidecarName == "" || plan.managedOffset < 0 {
+ return
+ }
+ if hasSidecarInclude(plan.includes) {
+ return
+ }
+ firstPosition := plan.managedOffset
+ firstLine := sourceLine(string(plan.final), firstPosition)
+ insertAt := lineStart(string(plan.final), firstPosition)
+ for _, include := range plan.includes {
+ if include.start > firstPosition {
+ plan.diagnostics = append(plan.diagnostics, bindDiagnostic{
+ path: plan.path,
+ line: firstLine,
+ message: fmt.Sprintf("cannot place bind include safely before a later include; add #include \"%s\" manually as the last include before this file's Trice calls", plan.sidecarName),
+ })
+ return
+ }
+ insertAt = include.afterLine
+ }
+ newline := sourceNewline(string(plan.final))
+ includeLine := fmt.Sprintf("#include \"%s\" // trice-bind: keep as last include before this file's Trice calls", plan.sidecarName)
+ prefix := ""
+ if insertAt > 0 && plan.final[insertAt-1] != '\n' && plan.final[insertAt-1] != '\r' {
+ prefix = newline
+ }
+ insert := []byte(prefix + includeLine + newline)
+ updated := make([]byte, 0, len(plan.final)+len(insert))
+ updated = append(updated, plan.final[:insertAt]...)
+ updated = append(updated, insert...)
+ updated = append(updated, plan.final[insertAt:]...)
+ plan.final = updated
+ plan.includeAdded = true
+ plan.includes = scanBindIncludes(string(plan.final))
+ plan.sites, _ = scanBindSites(plan.path, string(plan.final))
+}
+
+// validateActiveBindIncludes requires the owner's sidecar to be the last include before every managed site.
+func validateActiveBindIncludes(plan *bindFilePlan) {
+ type managedPosition struct {
+ position int
+ line int
+ }
+ positions := make([]managedPosition, 0, len(plan.sites)+len(plan.invocations))
+ for _, site := range plan.sites {
+ if site.wasExplicit {
+ continue
+ }
+ positions = append(positions, managedPosition{position: site.loc[0], line: site.line})
+ }
+ for _, invocation := range plan.invocations {
+ positions = append(positions, managedPosition{position: invocation.start, line: invocation.line})
+ }
+ sort.SliceStable(positions, func(i, j int) bool { return positions[i].position < positions[j].position })
+ for _, position := range positions {
+ var active *bindInclude
+ for i := range plan.includes {
+ include := &plan.includes[i]
+ if include.start >= position.position {
+ break
+ }
+ if include.isRebase {
+ continue
+ }
+ active = include
+ }
+ if active == nil || !active.isSidecar || active.key != plan.key || active.name != plan.sidecarName {
+ plan.diagnostics = append(plan.diagnostics, bindDiagnostic{
+ path: plan.path,
+ line: position.line,
+ message: fmt.Sprintf("file key is not active unambiguously; add #include \"%s\" as the last include before this Trice site", plan.sidecarName),
+ })
+ }
+ }
+}
+
+// validateExistingSidecar checks that an existing generated file declares the key encoded in its name.
+func validateExistingSidecar(path, key string, content []byte) []bindDiagnostic {
+ keyDefinitions := bindSidecarKeyDefinition.FindAllSubmatch(content, -1)
+ if len(keyDefinitions) == 0 {
+ return []bindDiagnostic{{path: path, message: "existing Trice bind sidecar has no valid TRICE_BIND_FILE_KEY definition"}}
+ }
+ var diagnostics []bindDiagnostic
+ for _, definition := range keyDefinitions {
+ if string(definition[1]) != key {
+ diagnostics = append(diagnostics, bindDiagnostic{path: path, message: fmt.Sprintf("sidecar declares key %s but its owner include uses %s", definition[1], key)})
+ }
+ }
+ routeDefinitions := bindSidecarRouteDefinition.FindAllSubmatch(content, -1)
+ if len(routeDefinitions) == 0 {
+ diagnostics = append(diagnostics, bindDiagnostic{path: path, message: "existing Trice bind sidecar has no valid BIND route definition"})
+ }
+ for _, definition := range routeDefinitions {
+ if string(definition[1]) != key {
+ diagnostics = append(diagnostics, bindDiagnostic{path: path, message: fmt.Sprintf("sidecar declares route for key %s but its owner include uses %s", definition[1], key)})
+ }
+ }
+ return diagnostics
+}
+
+// bindSourceComment normalizes one source call without allowing a comment to continue a macro line.
+func bindSourceComment(source string, loc [7]int) string {
+ closing := findClosingParentis(source, loc[2])
+ if closing < loc[0] {
+ closing = loc[6]
+ }
+ end := closing + 1
+ if end < len(source) && source[end] == ';' {
+ end++
+ }
+ call := source[loc[0]:end]
+ if newline := strings.IndexAny(call, "\r\n"); newline >= 0 {
+ call = strings.TrimSpace(call[:newline]) + " ..."
+ } else {
+ call = strings.TrimSpace(call)
+ }
+ call = strings.TrimSuffix(call, "\\")
+ return strings.Join(strings.Fields(call), " ")
+}
+
+// isInsideMacroDefinition follows physical continuation lines back to the controlling directive.
+func isInsideMacroDefinition(source string, position int) bool {
+ start := lineStart(source, position)
+ for start > 0 {
+ previousEnd := start
+ previousStart := lineStart(source, start-1)
+ previous := strings.TrimRight(source[previousStart:previousEnd], "\r\n\t ")
+ if !strings.HasSuffix(previous, "\\") {
+ break
+ }
+ start = previousStart
+ }
+ lineEnd := strings.IndexAny(source[start:], "\r\n")
+ if lineEnd < 0 {
+ lineEnd = len(source)
+ } else {
+ lineEnd += start
+ }
+ line := strings.TrimSpace(source[start:lineEnd])
+ if !strings.HasPrefix(line, "#") {
+ return false
+ }
+ line = strings.TrimSpace(strings.TrimPrefix(line, "#"))
+ return strings.HasPrefix(line, "define") && (len(line) == len("define") || line[len("define")] == ' ' || line[len("define")] == '\t')
+}
+
+// sourceLine returns the one-based physical line at a byte position.
+func sourceLine(source string, position int) int {
+ return 1 + strings.Count(source[:position], "\n")
+}
+
+// sourceColumn returns the one-based byte column used for deterministic diagnostics.
+func sourceColumn(source string, position int) int {
+ return position - lineStart(source, position) + 1
+}
+
+// lineStart returns the byte position immediately after the preceding newline.
+func lineStart(source string, position int) int {
+ if position > len(source) {
+ position = len(source)
+ }
+ if index := strings.LastIndex(source[:position], "\n"); index >= 0 {
+ return index + 1
+ }
+ return 0
+}
+
+// lineEndIncludingNewline returns the first byte after one complete physical line.
+func lineEndIncludingNewline(source string, position int) int {
+ for position < len(source) && source[position] != '\n' && source[position] != '\r' {
+ position++
+ }
+ if position < len(source) && source[position] == '\r' {
+ position++
+ }
+ if position < len(source) && source[position] == '\n' {
+ position++
+ }
+ return position
+}
+
+// sourceNewline preserves CRLF projects and otherwise emits the portable LF separator.
+func sourceNewline(source string) string {
+ if strings.Contains(source, "\r\n") {
+ return "\r\n"
+ }
+ return "\n"
+}
diff --git a/internal/id/bindRemigrate.go b/internal/id/bindRemigrate.go
new file mode 100644
index 000000000..002bb5b9f
--- /dev/null
+++ b/internal/id/bindRemigrate.go
@@ -0,0 +1,414 @@
+// SPDX-License-Identifier: MIT
+
+package id
+
+import (
+ "bytes"
+ "encoding/json"
+ "errors"
+ "fmt"
+ "io"
+ "os"
+ "path/filepath"
+ "regexp"
+ "sort"
+ "strconv"
+ "strings"
+
+ "github.com/spf13/afero"
+)
+
+var (
+ // bindRemigrationSiteDefinition extracts the generated key, physical line,
+ // and stable ID needed to validate and relocate li.json entries.
+ bindRemigrationSiteDefinition = regexp.MustCompile(`(?m)^[\t ]*#[\t ]*define[\t ]+TRICE_BIND_SITE_(K[0-9A-F]{16})_L([0-9]+)[\t ]+TRICE_BIND_(AUTO|REPLACE),[\t ]+(iD|id|Id|ID)\(([0-9]+)u\)`)
+ // bindRemigrationAdvancedDefinition extracts stable IDs owned by wrapper
+ // definitions and direct counter-selected locations.
+ bindRemigrationAdvancedDefinition = regexp.MustCompile(`(?m)^[\t ]*#[\t ]*define[\t ]+TRICE_BIND_ID_(?:DEFINITION|LOCATION)_(K[0-9A-F]{16})_L([0-9]+)_O[0-9]+[\t ]+([0-9]+)u\b`)
+)
+
+// bindRemigratePlan holds the exact source replacement and generated sidecar
+// deletion that return one bind-owned physical file to the clean state.
+type bindRemigratePlan struct {
+ path string
+ info os.FileInfo
+ original []byte
+ final []byte
+ sidecarPath string
+ rebasePaths []string
+ removedLines []int // removedLines identifies every generated line removed from the Bound source.
+ siteLines map[TriceID]int // siteLines maps each generated ID to its validated Bound line.
+}
+
+// SubCmdIdRemigrateBindToClean removes validated bind ownership artifacts while
+// preserving every ID-free Trice call and zero placeholder byte-for-byte.
+//
+// The operation deliberately reuses the bind source walker, comment-aware
+// include scanner, sidecar validator, deterministic diagnostics, and
+// transactional commit path. It is exported only for the repository workflow
+// helper; it is not a public trice CLI subcommand.
+func SubCmdIdRemigrateBindToClean(w io.Writer, fSys *afero.Afero) error {
+ if w == nil {
+ w = io.Discard
+ }
+ if fSys == nil || fSys.Fs == nil {
+ return errors.New("trice bind remigration: nil filesystem")
+ }
+ if strings.TrimSpace(BindDir) == "" {
+ return errors.New("trice bind remigration: -bindDir must not be empty")
+ }
+
+ inputs, diagnostics := collectBindInputs(w, fSys)
+ plans, planDiagnostics := prepareBindRemigration(fSys, inputs)
+ diagnostics = append(diagnostics, planDiagnostics...)
+ if len(diagnostics) > 0 {
+ return reportBindRemigrationDiagnostics(w, diagnostics)
+ }
+
+ writes, err := buildBindRemigrationWrites(fSys, plans)
+ if err != nil {
+ return err
+ }
+ if Verbose {
+ for _, plan := range plans {
+ fmt.Fprintf(w, "%s: remove bind include(s) and sidecar %s\n", plan.path, plan.sidecarPath)
+ }
+ }
+ if DryRun {
+ if Verbose {
+ fmt.Fprintf(w, "dry-run: %d file change(s) suppressed\n", len(writes))
+ }
+ return nil
+ }
+ return commitBindWrites(fSys, writes)
+}
+
+// prepareBindRemigration validates complete source-to-sidecar ownership before
+// planning any edit, so one ambiguous file prevents all regular output writes.
+func prepareBindRemigration(fSys *afero.Afero, inputs []bindFileInput) ([]bindRemigratePlan, []bindDiagnostic) {
+ var (
+ plans []bindRemigratePlan
+ diagnostics []bindDiagnostic
+ owners = make(map[string][]string)
+ )
+
+ for _, input := range inputs {
+ includes := scanBindIncludes(string(input.data))
+ blocks, blockDiagnostics := scanBindRebaseArtifacts(input.path, input.data)
+ if len(blockDiagnostics) > 0 {
+ diagnostics = append(diagnostics, blockDiagnostics...)
+ continue
+ }
+ identities := make(map[string]string)
+ for _, include := range includes {
+ if include.isSidecar {
+ identities[include.name] = include.key
+ }
+ }
+ if len(identities) == 0 {
+ continue
+ }
+
+ names := make([]string, 0, len(identities))
+ for name := range identities {
+ names = append(names, name)
+ }
+ sort.Strings(names)
+ if len(names) != 1 {
+ diagnostics = append(diagnostics, bindDiagnostic{
+ path: input.path,
+ message: "cannot remigrate a file that references multiple distinct Trice bind sidecars: " + strings.Join(names, ", "),
+ })
+ continue
+ }
+
+ name := names[0]
+ key := identities[name]
+ sidecarPath := filepath.Join(BindDir, name)
+ content, err := fSys.ReadFile(sidecarPath)
+ if errors.Is(err, os.ErrNotExist) {
+ diagnostics = append(diagnostics, bindDiagnostic{path: input.path, message: fmt.Sprintf("referenced Trice bind sidecar %s does not exist", sidecarPath)})
+ continue
+ }
+ if err != nil {
+ diagnostics = append(diagnostics, bindDiagnostic{path: sidecarPath, message: "cannot read referenced Trice bind sidecar: " + err.Error()})
+ continue
+ }
+ if sidecarDiagnostics := validateExistingSidecar(sidecarPath, key, content); len(sidecarDiagnostics) > 0 {
+ diagnostics = append(diagnostics, sidecarDiagnostics...)
+ continue
+ }
+ siteLines, err := parseBindRemigrationSiteLines(content, key)
+ if err != nil {
+ diagnostics = append(diagnostics, bindDiagnostic{path: sidecarPath, message: err.Error()})
+ continue
+ }
+ rebasePaths, rebaseDiagnostics := validateBindRemigrationRebaseArtifacts(fSys, input.path, name, key, blocks)
+ if len(rebaseDiagnostics) > 0 {
+ diagnostics = append(diagnostics, rebaseDiagnostics...)
+ continue
+ }
+ removedLineSet := make(map[int]bool)
+ for _, include := range includes {
+ if include.isSidecar {
+ removedLineSet[include.line] = true
+ }
+ }
+ for _, block := range blocks {
+ for position := block.start; position < block.end; position = lineEndIncludingNewline(string(input.data), position) {
+ removedLineSet[sourceLine(string(input.data), position)] = true
+ }
+ }
+ removedLines := make([]int, 0, len(removedLineSet))
+ for line := range removedLineSet {
+ removedLines = append(removedLines, line)
+ }
+ sort.Ints(removedLines)
+
+ cleaned, _, _, _ := stripBindRebaseArtifacts(input.path, input.data)
+ cleanIncludes := scanBindIncludes(string(cleaned))
+
+ owners[sidecarPath] = append(owners[sidecarPath], input.path)
+ plans = append(plans, bindRemigratePlan{
+ path: input.path,
+ info: input.info,
+ original: input.data,
+ final: removeBindSidecarIncludes(cleaned, cleanIncludes),
+ sidecarPath: sidecarPath,
+ rebasePaths: rebasePaths,
+ removedLines: removedLines,
+ siteLines: siteLines,
+ })
+ }
+
+ for sidecarPath, ownerPaths := range owners {
+ ownerPaths = compactSortedStrings(ownerPaths)
+ if len(ownerPaths) > 1 {
+ diagnostics = append(diagnostics, bindDiagnostic{
+ path: sidecarPath,
+ message: "cannot remigrate sidecar with multiple owner files: " + strings.Join(ownerPaths, ", "),
+ })
+ }
+ }
+ if len(diagnostics) > 0 {
+ return nil, diagnostics
+ }
+ return plans, nil
+}
+
+// validateBindRemigrationRebaseArtifacts requires every compact source phase
+// to have its exact generated helper before source ownership can be removed.
+func validateBindRemigrationRebaseArtifacts(fSys *afero.Afero, sourcePath, sidecarName, key string, blocks []bindGeneratedBlock) ([]string, []bindDiagnostic) {
+ paths := make(map[string]bool)
+ var diagnostics []bindDiagnostic
+ for _, block := range blocks {
+ if block.helperName == "" {
+ continue
+ }
+ expected := renderBindRebaseArtifact(sidecarName, key, block.scope, block.kind)
+ if expected.name == "" || expected.name != block.helperName {
+ diagnostics = append(diagnostics, bindDiagnostic{
+ path: sourcePath,
+ line: block.line,
+ message: fmt.Sprintf("generated Trice bind rebase include %s does not belong to owner sidecar %s", block.helperName, sidecarName),
+ })
+ continue
+ }
+ path := filepath.Join(BindDir, block.helperName)
+ content, err := fSys.ReadFile(path)
+ if errors.Is(err, os.ErrNotExist) {
+ diagnostics = append(diagnostics, bindDiagnostic{path: path, message: "referenced generated Trice bind rebase helper does not exist"})
+ continue
+ }
+ if err != nil {
+ diagnostics = append(diagnostics, bindDiagnostic{path: path, message: "cannot read referenced generated rebase helper: " + err.Error()})
+ continue
+ }
+ if !bytes.Equal(content, expected.content) {
+ diagnostics = append(diagnostics, bindDiagnostic{path: path, message: "referenced generated Trice bind rebase helper does not match its source include"})
+ continue
+ }
+ paths[path] = true
+ }
+ result := make([]string, 0, len(paths))
+ for path := range paths {
+ result = append(result, path)
+ }
+ sort.Strings(result)
+ return result, diagnostics
+}
+
+// parseBindRemigrationSiteLines reads only generator-owned descriptor syntax.
+// It does not parse user Trice calls or duplicate the shared source parser.
+func parseBindRemigrationSiteLines(content []byte, expectedKey string) (map[TriceID]int, error) {
+ result := make(map[TriceID]int)
+ for _, match := range bindRemigrationSiteDefinition.FindAllSubmatch(content, -1) {
+ if string(match[1]) != expectedKey {
+ return nil, fmt.Errorf("site descriptor uses file key %s instead of %s", match[1], expectedKey)
+ }
+ line, err := strconv.Atoi(string(match[2]))
+ if err != nil {
+ return nil, fmt.Errorf("invalid site line %q", match[2])
+ }
+ value, err := strconv.Atoi(string(match[5]))
+ if err != nil {
+ return nil, fmt.Errorf("invalid site ID %q", match[5])
+ }
+ id := TriceID(value)
+ if previous, exists := result[id]; exists && previous != line {
+ return nil, fmt.Errorf("site ID %d occurs on multiple physical lines", id)
+ }
+ result[id] = line
+ }
+ for _, match := range bindRemigrationAdvancedDefinition.FindAllSubmatch(content, -1) {
+ if string(match[1]) != expectedKey {
+ return nil, fmt.Errorf("advanced descriptor uses file key %s instead of %s", match[1], expectedKey)
+ }
+ line, err := strconv.Atoi(string(match[2]))
+ if err != nil {
+ return nil, fmt.Errorf("invalid advanced descriptor line %q", match[2])
+ }
+ value, err := strconv.Atoi(string(match[3]))
+ if err != nil {
+ return nil, fmt.Errorf("invalid advanced descriptor ID %q", match[3])
+ }
+ id := TriceID(value)
+ if previous, exists := result[id]; exists && previous != line {
+ return nil, fmt.Errorf("site ID %d occurs on multiple physical lines", id)
+ }
+ result[id] = line
+ }
+ return result, nil
+}
+
+// removeBindSidecarIncludes deletes complete active sidecar include lines in
+// reverse byte order, preserving every other byte and the original line endings.
+func removeBindSidecarIncludes(source []byte, includes []bindInclude) []byte {
+ result := append([]byte(nil), source...)
+ for index := len(includes) - 1; index >= 0; index-- {
+ include := includes[index]
+ if !include.isSidecar {
+ continue
+ }
+ result = append(result[:include.start], result[include.afterLine:]...)
+ }
+ return result
+}
+
+// buildBindRemigrationWrites plans source and location-list replacements before
+// sidecar deletions. The shared commit helper snapshots every destination first
+// and rolls earlier changes back if any later operation fails.
+func buildBindRemigrationWrites(fSys *afero.Afero, plans []bindRemigratePlan) ([]bindWrite, error) {
+ writes := make([]bindWrite, 0, len(plans)*2+1)
+ for _, plan := range plans {
+ if !bytes.Equal(plan.original, plan.final) {
+ writes = append(writes, bindWrite{path: plan.path, data: plan.final, perm: plan.info.Mode(), kind: "source"})
+ }
+ }
+ liWrite, err := buildBindRemigrationLocationWrite(fSys, plans)
+ if err != nil {
+ return nil, err
+ }
+ if liWrite != nil {
+ writes = append(writes, *liWrite)
+ }
+ for _, plan := range plans {
+ for _, path := range plan.rebasePaths {
+ writes = append(writes, bindWrite{path: path, kind: "rebase-delete", remove: true})
+ }
+ writes = append(writes, bindWrite{path: plan.sidecarPath, kind: "sidecar-delete", remove: true})
+ }
+ return writes, nil
+}
+
+// buildBindRemigrationLocationWrite restores Clean-source line numbers only
+// when every generated descriptor still matches its current li.json entry.
+func buildBindRemigrationLocationWrite(fSys *afero.Afero, plans []bindRemigratePlan) (*bindWrite, error) {
+ if len(plans) == 0 || LIFnJSON == "" || LIFnJSON == "off" || LIFnJSON == "none" {
+ return nil, nil
+ }
+ original, err := fSys.ReadFile(LIFnJSON)
+ if errors.Is(err, os.ErrNotExist) {
+ return nil, nil
+ }
+ if err != nil {
+ return nil, fmt.Errorf("cannot read %s before bind remigration: %w", LIFnJSON, err)
+ }
+ locations := make(TriceIDLookUpLI)
+ if len(bytes.TrimSpace(original)) > 0 {
+ if err := json.Unmarshal(original, &locations); err != nil {
+ return nil, fmt.Errorf("cannot parse %s before bind remigration: %w", LIFnJSON, err)
+ }
+ }
+
+ changed := false
+ for _, plan := range plans {
+ locationFile := ToLIFile(plan.path)
+ // Map iteration must not decide which stale-location diagnostic is
+ // reported first, so descriptor IDs are validated in numeric order.
+ siteIDs := make([]TriceID, 0, len(plan.siteLines))
+ for id := range plan.siteLines {
+ siteIDs = append(siteIDs, id)
+ }
+ sort.Slice(siteIDs, func(i, j int) bool { return siteIDs[i] < siteIDs[j] })
+ for _, id := range siteIDs {
+ boundLine := plan.siteLines[id]
+ location, exists := locations[id]
+ if !exists {
+ return nil, fmt.Errorf("cannot remigrate %s: ID %d is missing from %s", plan.path, id, LIFnJSON)
+ }
+ if normalizeLocationPath(location.File) != locationFile || location.Line != boundLine {
+ return nil, fmt.Errorf(
+ "cannot remigrate %s: ID %d location is %s:%d, expected %s:%d",
+ plan.path,
+ id,
+ location.File,
+ location.Line,
+ locationFile,
+ boundLine,
+ )
+ }
+ removedBefore := 0
+ for _, removedLine := range plan.removedLines {
+ if removedLine < boundLine {
+ removedBefore++
+ }
+ }
+ if removedBefore == 0 {
+ continue
+ }
+ location.Line -= removedBefore
+ if location.Line < 1 {
+ return nil, fmt.Errorf("cannot remigrate %s: ID %d would receive invalid line %d", plan.path, id, location.Line)
+ }
+ locations[id] = location
+ changed = true
+ }
+ }
+ if !changed {
+ return nil, nil
+ }
+ rendered, err := locations.toJSON()
+ if err != nil {
+ return nil, fmt.Errorf("cannot render %s after bind remigration: %w", LIFnJSON, err)
+ }
+ if bytes.Equal(original, rendered) {
+ return nil, nil
+ }
+ return &bindWrite{
+ path: LIFnJSON,
+ data: rendered,
+ perm: fileWritePerm(fSys, LIFnJSON, 0o666),
+ kind: "li",
+ }, nil
+}
+
+// reportBindRemigrationDiagnostics emits all stable diagnostics and returns one
+// summary error suitable for the repository workflow command.
+func reportBindRemigrationDiagnostics(w io.Writer, diagnostics []bindDiagnostic) error {
+ diagnostics = sortedBindDiagnostics(diagnostics)
+ for _, diagnostic := range diagnostics {
+ fmt.Fprintln(w, formatBindDiagnostic(diagnostic))
+ }
+ return fmt.Errorf("trice bind remigration failed with %d error(s)", len(diagnostics))
+}
diff --git a/internal/id/bindRemigrate_test.go b/internal/id/bindRemigrate_test.go
new file mode 100644
index 000000000..f83408372
--- /dev/null
+++ b/internal/id/bindRemigrate_test.go
@@ -0,0 +1,261 @@
+// SPDX-License-Identifier: MIT
+
+package id
+
+import (
+ "bytes"
+ "encoding/json"
+ "fmt"
+ "io"
+ "os"
+ "path/filepath"
+ "testing"
+
+ "github.com/spf13/afero"
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+)
+
+// bindFailRemoveFs injects a sidecar deletion failure after source replacements
+// so the shared transaction rollback can be verified.
+type bindFailRemoveFs struct {
+ afero.Fs
+ destination string
+}
+
+// Remove rejects the selected sidecar and delegates all other removals.
+func (f *bindFailRemoveFs) Remove(name string) error {
+ if name == f.destination {
+ return fmt.Errorf("injected remove failure for %s", name)
+ }
+ return f.Fs.Remove(name)
+}
+
+// writeValidBindSidecar creates the minimum generated identity required by the
+// production sidecar validator.
+func writeValidBindSidecar(t *testing.T, name, key string) string {
+ t.Helper()
+ path := filepath.Join(BindDir, name)
+ require.NoError(t, FSys.MkdirAll(BindDir, 0o755))
+ content := "#define TRICE_BIND_FILE_KEY " + key + "\n#define TRICE_BIND_ROUTE_" + key + " BIND\n"
+ require.NoError(t, FSys.WriteFile(path, []byte(content), 0o644))
+ return path
+}
+
+// readBindRemigrationLocations decodes the generated location file without
+// relying on fatal-style production loaders inside a unit test.
+func readBindRemigrationLocations(t *testing.T) (TriceIDLookUpLI, []byte) {
+ t.Helper()
+ content, err := FSys.ReadFile(LIFnJSON)
+ require.NoError(t, err)
+ locations := make(TriceIDLookUpLI)
+ require.NoError(t, json.Unmarshal(content, &locations))
+ return locations, content
+}
+
+// TestBindRemigrationRemovesValidatedArtifacts verifies exact source-byte
+// preservation, repeated owner reactivation, sidecar deletion, and idempotence.
+func TestBindRemigrationRemovesValidatedArtifacts(t *testing.T) {
+ key := "K0123456789ABCDEF"
+ name := "trice_module_c_" + key + ".h"
+ include := "#include \"" + name + "\" // trice-bind: generated"
+ source := "#include \"trice.h\"\r\n" + include + "\r\ntrice(\"first\");\r\n#include \"module.h\"\r\n" + include + "\r\ntrice(id(0), \"second\");\r\n"
+ expected := "#include \"trice.h\"\r\ntrice(\"first\");\r\n#include \"module.h\"\r\ntrice(id(0), \"second\");\r\n"
+ defer prepareBindTest(t, map[string]string{"module.c": source})()
+ sidecarPath := writeValidBindSidecar(t, name, key)
+ sidecar := "#define TRICE_BIND_FILE_KEY " + key + "\n" +
+ "#define TRICE_BIND_ROUTE_" + key + " BIND\n" +
+ "#define TRICE_BIND_SITE_" + key + "_L3 TRICE_BIND_AUTO, iD(100u)\n" +
+ "#define TRICE_BIND_SITE_" + key + "_L6 TRICE_BIND_REPLACE, id(101u)\n"
+ require.NoError(t, FSys.WriteFile(sidecarPath, []byte(sidecar), 0o644))
+ locationFile := ToLIFile(Srcs[0])
+ locations := TriceIDLookUpLI{
+ 100: {File: locationFile, Line: 3},
+ 101: {File: locationFile, Line: 6},
+ 999: {File: "unmanaged.c", Line: 9},
+ }
+ require.NoError(t, locations.toFile(FSys.Fs, LIFnJSON))
+
+ require.NoError(t, SubCmdIdRemigrateBindToClean(io.Discard, FSys))
+ after, err := FSys.ReadFile(Srcs[0])
+ require.NoError(t, err)
+ assert.Equal(t, expected, string(after))
+ remigratedLocations, firstLocationBytes := readBindRemigrationLocations(t)
+ assert.Equal(t, TriceLI{File: locationFile, Line: 2}, remigratedLocations[100])
+ assert.Equal(t, TriceLI{File: locationFile, Line: 4}, remigratedLocations[101])
+ assert.Equal(t, TriceLI{File: "unmanaged.c", Line: 9}, remigratedLocations[999])
+ _, err = FSys.Stat(sidecarPath)
+ assert.ErrorIs(t, err, os.ErrNotExist)
+
+ require.NoError(t, SubCmdIdRemigrateBindToClean(io.Discard, FSys))
+ afterSecondRun, err := FSys.ReadFile(Srcs[0])
+ require.NoError(t, err)
+ assert.Equal(t, after, afterSecondRun)
+ _, secondLocationBytes := readBindRemigrationLocations(t)
+ assert.Equal(t, firstLocationBytes, secondLocationBytes)
+}
+
+// TestBindMVP2RemigrationRemovesRebaseArtifacts verifies that generated
+// begin/end blocks, owner includes, advanced descriptors, and LI shifts are
+// reversed together without touching the original ID-free source text.
+func TestBindMVP2RemigrationRemovesRebaseArtifacts(t *testing.T) {
+ source := "#define LOG(value) do { trice(\"first\"); trice(\"second=%d\", value); } while (0)\n" +
+ "void f(void) { LOG(1); trice(\"third\"); trice(\"fourth\"); }\n"
+ defer prepareBindTest(t, map[string]string{"advanced.c": source})()
+
+ require.NoError(t, SubCmdIdBind(io.Discard, FSys))
+ owner, sidecar := readOwnedBindSidecar(t, Srcs[0])
+ assert.Contains(t, string(sidecar), "TRICE_BIND_DEFINITION_")
+ assert.Contains(t, string(sidecar), "TRICE_BIND_LOCATION_")
+ bound, err := FSys.ReadFile(Srcs[0])
+ require.NoError(t, err)
+ assert.Contains(t, string(bound), bindRebaseIncludeMarker+"begin")
+ beginHelperPath := filepath.Join(BindDir, "trice_advanced_c_K1111111111111111_R0_begin.h")
+ endHelperPath := filepath.Join(BindDir, "trice_advanced_c_K1111111111111111_R0_end.h")
+
+ require.NoError(t, SubCmdIdRemigrateBindToClean(io.Discard, FSys))
+ clean, err := FSys.ReadFile(Srcs[0])
+ require.NoError(t, err)
+ assert.Equal(t, source, string(clean))
+ _, err = FSys.Stat(filepath.Join(BindDir, owner.name))
+ assert.ErrorIs(t, err, os.ErrNotExist)
+ _, err = FSys.Stat(beginHelperPath)
+ assert.ErrorIs(t, err, os.ErrNotExist)
+ _, err = FSys.Stat(endHelperPath)
+ assert.ErrorIs(t, err, os.ErrNotExist)
+
+ locations, _ := readBindRemigrationLocations(t)
+ require.Len(t, locations, 4)
+ lineCounts := map[int]int{}
+ for _, location := range locations {
+ assert.Equal(t, ToLIFile(Srcs[0]), normalizeLocationPath(location.File))
+ lineCounts[location.Line]++
+ }
+ assert.Equal(t, map[int]int{1: 2, 2: 2}, lineCounts)
+}
+
+// TestBindRemigrationRejectsStaleLocation prevents source and sidecar changes
+// when li.json does not describe the currently validated Bound descriptor.
+func TestBindRemigrationRejectsStaleLocation(t *testing.T) {
+ key := "K0123456789ABCDEF"
+ name := "trice_stale_c_" + key + ".h"
+ source := "#include \"" + name + "\"\ntrice(\"stale\");\n"
+ defer prepareBindTest(t, map[string]string{"stale.c": source})()
+ sidecarPath := writeValidBindSidecar(t, name, key)
+ sidecar := "#define TRICE_BIND_FILE_KEY " + key + "\n" +
+ "#define TRICE_BIND_ROUTE_" + key + " BIND\n" +
+ "#define TRICE_BIND_SITE_" + key + "_L2 TRICE_BIND_AUTO, iD(100u)\n"
+ require.NoError(t, FSys.WriteFile(sidecarPath, []byte(sidecar), 0o644))
+ locations := TriceIDLookUpLI{100: {File: ToLIFile(Srcs[0]), Line: 1}}
+ require.NoError(t, locations.toFile(FSys.Fs, LIFnJSON))
+ beforeLocations, err := FSys.ReadFile(LIFnJSON)
+ require.NoError(t, err)
+
+ err = SubCmdIdRemigrateBindToClean(io.Discard, FSys)
+ require.Error(t, err)
+ assert.Contains(t, err.Error(), "expected")
+ afterSource, readErr := FSys.ReadFile(Srcs[0])
+ require.NoError(t, readErr)
+ assert.Equal(t, source, string(afterSource))
+ afterLocations, readErr := FSys.ReadFile(LIFnJSON)
+ require.NoError(t, readErr)
+ assert.Equal(t, beforeLocations, afterLocations)
+ _, statErr := FSys.Stat(sidecarPath)
+ require.NoError(t, statErr)
+}
+
+// TestBindRemigrationRejectsAmbiguousOwnership ensures one generated sidecar
+// can never be deleted when two managed physical files claim it.
+func TestBindRemigrationRejectsAmbiguousOwnership(t *testing.T) {
+ key := "K0123456789ABCDEF"
+ name := "trice_shared_c_" + key + ".h"
+ include := "#include \"" + name + "\"\n"
+ defer prepareBindTest(t, map[string]string{
+ "a.c": include + "trice(\"a\");\n",
+ "b.c": include + "trice(\"b\");\n",
+ })()
+ sidecarPath := writeValidBindSidecar(t, name, key)
+ before := make(map[string][]byte)
+ for _, path := range Srcs {
+ content, err := FSys.ReadFile(path)
+ require.NoError(t, err)
+ before[path] = content
+ }
+
+ var output bytes.Buffer
+ err := SubCmdIdRemigrateBindToClean(&output, FSys)
+ require.Error(t, err)
+ assert.Contains(t, output.String(), "multiple owner files")
+ for path, expected := range before {
+ actual, readErr := FSys.ReadFile(path)
+ require.NoError(t, readErr)
+ assert.Equal(t, expected, actual)
+ }
+ _, statErr := FSys.Stat(sidecarPath)
+ require.NoError(t, statErr)
+}
+
+// TestBindRemigrationRejectsUnverifiableArtifacts covers missing and corrupt
+// sidecars while proving that neither case changes its owning source.
+func TestBindRemigrationRejectsUnverifiableArtifacts(t *testing.T) {
+ tests := []struct {
+ name string
+ createSidecar bool
+ sidecarContent string
+ expected string
+ }{
+ {name: "missing", expected: "does not exist"},
+ {name: "corrupt", createSidecar: true, sidecarContent: "#define SOMETHING_ELSE 1\n", expected: "no valid TRICE_BIND_FILE_KEY"},
+ }
+ for _, test := range tests {
+ t.Run(test.name, func(t *testing.T) {
+ key := "K0123456789ABCDEF"
+ name := "trice_owner_c_" + key + ".h"
+ source := "#include \"" + name + "\"\ntrice(\"unchanged\");\n"
+ defer prepareBindTest(t, map[string]string{"owner.c": source})()
+ if test.createSidecar {
+ require.NoError(t, FSys.MkdirAll(BindDir, 0o755))
+ require.NoError(t, FSys.WriteFile(filepath.Join(BindDir, name), []byte(test.sidecarContent), 0o644))
+ }
+
+ var output bytes.Buffer
+ err := SubCmdIdRemigrateBindToClean(&output, FSys)
+ require.Error(t, err)
+ assert.Contains(t, output.String(), test.expected)
+ after, readErr := FSys.ReadFile(Srcs[0])
+ require.NoError(t, readErr)
+ assert.Equal(t, source, string(after))
+ })
+ }
+}
+
+// TestBindRemigrationRollsBackDeleteFailure proves that a late sidecar removal
+// error restores every source already replaced by the transaction.
+func TestBindRemigrationRollsBackDeleteFailure(t *testing.T) {
+ key := "K0123456789ABCDEF"
+ name := "trice_rollback_c_" + key + ".h"
+ source := "#include \"" + name + "\"\ntrice(\"rollback\");\n"
+ defer prepareBindTest(t, map[string]string{"rollback.c": source})()
+ sidecarPath := writeValidBindSidecar(t, name, key)
+ sidecar := "#define TRICE_BIND_FILE_KEY " + key + "\n" +
+ "#define TRICE_BIND_ROUTE_" + key + " BIND\n" +
+ "#define TRICE_BIND_SITE_" + key + "_L2 TRICE_BIND_AUTO, iD(100u)\n"
+ require.NoError(t, FSys.WriteFile(sidecarPath, []byte(sidecar), 0o644))
+ locations := TriceIDLookUpLI{100: {File: ToLIFile(Srcs[0]), Line: 2}}
+ require.NoError(t, locations.toFile(FSys.Fs, LIFnJSON))
+ beforeLocations, readErr := FSys.ReadFile(LIFnJSON)
+ require.NoError(t, readErr)
+ failing := &bindFailRemoveFs{Fs: FSys.Fs, destination: sidecarPath}
+ failingFileSystem := &afero.Afero{Fs: failing}
+
+ err := SubCmdIdRemigrateBindToClean(io.Discard, failingFileSystem)
+ require.Error(t, err)
+ after, readErr := FSys.ReadFile(Srcs[0])
+ require.NoError(t, readErr)
+ assert.Equal(t, source, string(after))
+ afterLocations, readErr := FSys.ReadFile(LIFnJSON)
+ require.NoError(t, readErr)
+ assert.Equal(t, beforeLocations, afterLocations)
+ _, statErr := FSys.Stat(sidecarPath)
+ require.NoError(t, statErr)
+}
diff --git a/internal/id/bindRender.go b/internal/id/bindRender.go
new file mode 100644
index 000000000..cb0758658
--- /dev/null
+++ b/internal/id/bindRender.go
@@ -0,0 +1,369 @@
+// SPDX-License-Identifier: MIT
+
+package id
+
+import (
+ "fmt"
+ "sort"
+ "strings"
+)
+
+// renderBindSidecar creates one stable, guard-free descriptor header for a physical owner file.
+func renderBindSidecar(plans []bindFilePlan, planIndex int) []byte {
+ plan := &plans[planIndex]
+ descriptors := append([]bindSiteDescriptor(nil), plan.descriptors...)
+ sort.SliceStable(descriptors, func(i, j int) bool {
+ if descriptors[i].line != descriptors[j].line {
+ return descriptors[i].line < descriptors[j].line
+ }
+ return descriptors[i].column < descriptors[j].column
+ })
+ definitions := bindDefinitionSites(plan)
+ locations := bindCounterLocationSites(plan)
+ regions := append([]bindRebaseRegion(nil), plan.regions...)
+ sort.SliceStable(regions, func(i, j int) bool {
+ if regions[i].line != regions[j].line {
+ return regions[i].line < regions[j].line
+ }
+ return regions[i].column < regions[j].column
+ })
+
+ var builder strings.Builder
+ fmt.Fprintf(&builder, "/// \\file %s\n", plan.sidecarName)
+ builder.WriteString("/// \\brief Generated by trice bind. Do not edit.\n\n")
+ builder.WriteString("// TRICE_INSERT_OFF - Trice parser exclusion marker\n\n")
+ if len(regions) > 0 {
+ renderBindRebaseModes(&builder, plan)
+ builder.WriteString("#else\n\n")
+ }
+ builder.WriteString("#undef TRICE_BIND_FILE_KEY\n")
+ fmt.Fprintf(&builder, "#define TRICE_BIND_FILE_KEY %s\n", plan.key)
+ if len(regions) > 0 {
+ builder.WriteString("#undef TRICE_BIND_ROUTE_REBASE\n")
+ builder.WriteString("#define TRICE_BIND_ROUTE_REBASE(implementation, ...) TRICE_BIND_REBASE_PRODUCT_ROUTE(implementation, __VA_ARGS__)\n")
+ builder.WriteString("#undef TRICE_BIND_REBASE_DEFAULT_TID\n")
+ fmt.Fprintf(&builder, "#define TRICE_BIND_REBASE_DEFAULT_TID %s\n", bindDefaultWrapper("TRICE"))
+ }
+ fmt.Fprintf(&builder, "#define TRICE_BIND_ROUTE_%s BIND\n\n", plan.key)
+ fmt.Fprintf(&builder, "// -defaultStampSize %d\n", DefaultStampSize)
+
+ for _, site := range definitions {
+ fmt.Fprintf(
+ &builder,
+ "#define %s %du // numeric definition descriptor\n",
+ bindDefinitionIDMacroName(plan.key, site),
+ site.id,
+ )
+ fmt.Fprintf(
+ &builder,
+ "#define %s %s(%s) // %s definition %s\n",
+ bindDefinitionMacroName(plan.key, site),
+ site.wrapper,
+ bindDefinitionIDMacroName(plan.key, site),
+ site.definitionName,
+ site.comment,
+ )
+ }
+ for _, site := range locations {
+ fmt.Fprintf(
+ &builder,
+ "#define %s %du // numeric counter-selected location descriptor\n",
+ bindLocationIDMacroName(plan.key, site),
+ site.id,
+ )
+ fmt.Fprintf(
+ &builder,
+ "#define %s %s(%s) // counter-selected location %s\n",
+ bindLocationMacroName(plan.key, site),
+ site.wrapper,
+ bindLocationIDMacroName(plan.key, site),
+ site.comment,
+ )
+ }
+ if len(definitions)+len(locations) > 0 {
+ builder.WriteByte('\n')
+ }
+
+ nameWidth, modeWidth, tidWidth := 0, 0, 0
+ for _, descriptor := range descriptors {
+ site := plans[descriptor.ref.plan].sites[descriptor.ref.site]
+ name := bindSiteMacroName(plan.key, descriptor.line)
+ tid := bindReferenceTID(plans, descriptor.ref)
+ if len(name) > nameWidth {
+ nameWidth = len(name)
+ }
+ if len(site.mode) > modeWidth {
+ modeWidth = len(site.mode)
+ }
+ if len(tid) > tidWidth {
+ tidWidth = len(tid)
+ }
+ }
+ for _, descriptor := range descriptors {
+ site := plans[descriptor.ref.plan].sites[descriptor.ref.site]
+ fmt.Fprintf(
+ &builder,
+ "#define %-*s %-*s %-*s // %s\n",
+ nameWidth,
+ bindSiteMacroName(plan.key, descriptor.line),
+ modeWidth+1,
+ string(site.mode)+",",
+ tidWidth,
+ bindReferenceTID(plans, descriptor.ref),
+ descriptor.comment,
+ )
+ }
+ if len(descriptors) > 0 && len(regions) > 0 {
+ builder.WriteByte('\n')
+ }
+ for _, region := range regions {
+ fmt.Fprintf(&builder, "#define TRICE_BIND_REBASE_COUNT_%s %d\n", region.scope, len(region.expansions))
+ fmt.Fprintf(&builder, "#define TRICE_BIND_REBASE_AUTO_APPLY_%s(constructor, implementation, index, ...) do { ", region.scope)
+ for ordinal, ref := range region.expansions {
+ if ordinal > 0 {
+ builder.WriteString("else ")
+ }
+ fmt.Fprintf(
+ &builder,
+ "if ((index) == %d) { implementation(constructor(%s), __VA_ARGS__); } ",
+ ordinal,
+ bindReferenceIDMacro(plans, ref),
+ )
+ }
+ builder.WriteString("} while (0)\n")
+ }
+ if len(regions) > 0 {
+ builder.WriteString("\n#endif // generated rebase include mode\n")
+ }
+ return []byte(builder.String())
+}
+
+// bindRebaseArtifactName derives a helper filename from the stable owner
+// sidecar and local scope without exposing preprocessing setup in user source.
+func bindRebaseArtifactName(sidecarName, key, scope, kind string) string {
+ prefix := key + "_"
+ if !strings.HasSuffix(sidecarName, ".h") || !strings.HasPrefix(scope, prefix) || (kind != "begin" && kind != "end") {
+ return ""
+ }
+ return strings.TrimSuffix(sidecarName, ".h") + "_" + strings.TrimPrefix(scope, prefix) + "_" + kind + ".h"
+}
+
+// parseBindRebaseArtifactName recognizes only helper files in the namespace of
+// one exact owner sidecar. It is used to remove stale generated phases safely.
+func parseBindRebaseArtifactName(name, sidecarName, key string) (scope, kind string, ok bool) {
+ prefix := strings.TrimSuffix(sidecarName, ".h") + "_"
+ if !strings.HasSuffix(sidecarName, ".h") || !strings.HasPrefix(name, prefix) || !strings.HasSuffix(name, ".h") {
+ return "", "", false
+ }
+ remainder := strings.TrimSuffix(strings.TrimPrefix(name, prefix), ".h")
+ switch {
+ case strings.HasSuffix(remainder, "_begin"):
+ kind = "begin"
+ remainder = strings.TrimSuffix(remainder, "_begin")
+ case strings.HasSuffix(remainder, "_end"):
+ kind = "end"
+ remainder = strings.TrimSuffix(remainder, "_end")
+ default:
+ return "", "", false
+ }
+ if len(remainder) < 2 || remainder[0] != 'R' {
+ return "", "", false
+ }
+ for _, digit := range remainder[1:] {
+ if digit < '0' || digit > '9' {
+ return "", "", false
+ }
+ }
+ return key + "_" + remainder, kind, true
+}
+
+// renderBindRebaseArtifact creates one exact, guard-free phase helper. The
+// helper is a build artifact and deliberately delegates all target behavior to
+// the owner's normal generated sidecar.
+func renderBindRebaseArtifact(sidecarName, key, scope, kind string) bindRebaseArtifact {
+ artifact := bindRebaseArtifact{
+ name: bindRebaseArtifactName(sidecarName, key, scope, kind),
+ kind: kind,
+ scope: scope,
+ }
+ var builder strings.Builder
+ builder.WriteString("// SPDX-License-Identifier: MIT\n")
+ builder.WriteString("// Generated by trice bind. Do not edit.\n")
+ builder.WriteString("// TRICE_INSERT_OFF - Trice parser exclusion marker\n")
+ builder.WriteString("// Deliberately guard-free: this phase helper is included exactly once.\n\n")
+ if kind == "begin" {
+ fmt.Fprintf(&builder, "#define TRICE_BIND_REBASE_SCOPE %s\n", scope)
+ builder.WriteString("#define TRICE_BIND_REBASE_BEGIN\n")
+ fmt.Fprintf(&builder, "#include \"%s\"\n", sidecarName)
+ builder.WriteString("#undef TRICE_BIND_REBASE_BEGIN\n")
+ } else {
+ builder.WriteString("#define TRICE_BIND_REBASE_END\n")
+ fmt.Fprintf(&builder, "#include \"%s\"\n", sidecarName)
+ builder.WriteString("#undef TRICE_BIND_REBASE_END\n")
+ }
+ artifact.content = []byte(builder.String())
+ return artifact
+}
+
+// renderBindRebaseArtifacts returns both explicit phase helpers for every
+// minimal source region in deterministic source order.
+func renderBindRebaseArtifacts(plan *bindFilePlan) []bindRebaseArtifact {
+ artifacts := make([]bindRebaseArtifact, 0, len(plan.regions)*2)
+ for _, region := range plan.regions {
+ artifacts = append(artifacts,
+ renderBindRebaseArtifact(plan.sidecarName, plan.key, region.scope, "begin"),
+ renderBindRebaseArtifact(plan.sidecarName, plan.key, region.scope, "end"),
+ )
+ }
+ return artifacts
+}
+
+// bindDefinitionSites returns stable source order for wrapper-owned logical sites.
+func bindDefinitionSites(plan *bindFilePlan) []bindSite {
+ var sites []bindSite
+ for _, site := range plan.sites {
+ if site.definitionName != "" {
+ sites = append(sites, site)
+ }
+ }
+ sort.SliceStable(sites, func(i, j int) bool {
+ if sites[i].line != sites[j].line {
+ return sites[i].line < sites[j].line
+ }
+ return sites[i].column < sites[j].column
+ })
+ return sites
+}
+
+// bindCounterLocationSites returns direct sites whose line-only descriptor is replaced by a rebase map.
+func bindCounterLocationSites(plan *bindFilePlan) []bindSite {
+ var sites []bindSite
+ for _, site := range plan.sites {
+ if site.definitionName == "" && site.counterSelected {
+ sites = append(sites, site)
+ }
+ }
+ sort.SliceStable(sites, func(i, j int) bool {
+ if sites[i].line != sites[j].line {
+ return sites[i].line < sites[j].line
+ }
+ return sites[i].column < sites[j].column
+ })
+ return sites
+}
+
+// bindDefinitionMacroName gives every inner wrapper site a compile-time descriptor.
+func bindDefinitionMacroName(key string, site bindSite) string {
+ return fmt.Sprintf("TRICE_BIND_DEFINITION_%s_L%d_O%d", key, site.line, site.definitionOrdinal)
+}
+
+// bindDefinitionIDMacroName identifies the numeric descriptor consumed by
+// counter-selected references to a wrapper definition site.
+func bindDefinitionIDMacroName(key string, site bindSite) string {
+ return fmt.Sprintf("TRICE_BIND_ID_DEFINITION_%s_L%d_O%d", key, site.line, site.definitionOrdinal)
+}
+
+// bindLocationMacroName preserves remigration metadata for direct rebase sites.
+func bindLocationMacroName(key string, site bindSite) string {
+ return fmt.Sprintf("TRICE_BIND_LOCATION_%s_L%d_O%d", key, site.line, site.sourceOrdinal)
+}
+
+// bindLocationIDMacroName identifies the numeric descriptor consumed by a
+// direct counter-selected source location.
+func bindLocationIDMacroName(key string, site bindSite) string {
+ return fmt.Sprintf("TRICE_BIND_ID_LOCATION_%s_L%d_O%d", key, site.line, site.sourceOrdinal)
+}
+
+// bindReferenceTID uses definition descriptors for wrappers and literal TIDs for direct sites.
+func bindReferenceTID(plans []bindFilePlan, ref bindSiteReference) string {
+ site := plans[ref.plan].sites[ref.site]
+ if site.definitionName != "" {
+ return bindDefinitionMacroName(plans[ref.plan].key, site)
+ }
+ return bindSiteTID(site)
+}
+
+// bindReferenceIDMacro resolves a rebase expansion to one generated numeric
+// descriptor. A missing or stale descriptor is therefore a compiler error.
+func bindReferenceIDMacro(plans []bindFilePlan, ref bindSiteReference) string {
+ site := plans[ref.plan].sites[ref.site]
+ if site.definitionName != "" {
+ return bindDefinitionIDMacroName(plans[ref.plan].key, site)
+ }
+ return bindLocationIDMacroName(plans[ref.plan].key, site)
+}
+
+// renderBindRebaseModes emits the BEGIN/END behavior only for files that own
+// at least one counter-selected source region.
+func renderBindRebaseModes(builder *strings.Builder, plan *bindFilePlan) {
+ builder.WriteString("#if defined(TRICE_BIND_REBASE_BEGIN)\n")
+ builder.WriteString("#if !defined(TRICE_BIND_TARGET_ACTIVE)\n")
+ builder.WriteString("// Trice target dispatch is disabled by TRICE_CLEAN or TRICE_OFF.\n")
+ builder.WriteString("#elif !defined(__COUNTER__)\n")
+ builder.WriteString("#error \"trice bind: this advanced source construct requires __COUNTER__; normal bind sites are unaffected; use trice insert/clean, split Trice calls onto separate lines, or replace the wrapper with a normal/static inline function\"\n")
+ builder.WriteString("#elif !defined(TRICE_BIND_REBASE_SCOPE)\n")
+ builder.WriteString("#error \"trice bind: generated rebase BEGIN has no scope descriptor\"\n")
+ builder.WriteString("#elif defined(TRICE_BIND_REBASE_ACTIVE)\n")
+ builder.WriteString("#error \"trice bind: nested generated rebase scopes are not supported\"\n")
+ builder.WriteString("#else\n")
+ builder.WriteString("enum { TRICE_BIND_REBASE_BASE_NAME(TRICE_BIND_REBASE_SCOPE) = __COUNTER__ };\n")
+ builder.WriteString("#define TRICE_BIND_REBASE_ACTIVE 1\n")
+ builder.WriteString("#define TRICE_BIND_REBASE_ACTIVE_BASE TRICE_BIND_REBASE_BASE_NAME(TRICE_BIND_REBASE_SCOPE)\n")
+ builder.WriteString("#define TRICE_BIND_REBASE_ACTIVE_COUNT TRICE_BIND_REBASE_COUNT_NAME(TRICE_BIND_REBASE_SCOPE)\n")
+ builder.WriteString("#define TRICE_BIND_REBASE_ACTIVE_AUTO_APPLY(constructor, implementation, index, ...) TRICE_BIND_REBASE_CAT(TRICE_BIND_REBASE_AUTO_APPLY_, TRICE_BIND_REBASE_SCOPE)(constructor, implementation, index, __VA_ARGS__)\n")
+ fmt.Fprintf(builder, "#undef TRICE_BIND_ROUTE_%s\n", plan.key)
+ fmt.Fprintf(builder, "#define TRICE_BIND_ROUTE_%s REBASE\n", plan.key)
+ builder.WriteString("#endif\n\n")
+ builder.WriteString("#elif defined(TRICE_BIND_REBASE_END)\n")
+ builder.WriteString("#if !defined(TRICE_BIND_TARGET_ACTIVE)\n")
+ builder.WriteString("#undef TRICE_BIND_REBASE_SCOPE\n")
+ builder.WriteString("#elif !defined(TRICE_BIND_REBASE_SCOPE) || !defined(TRICE_BIND_REBASE_ACTIVE)\n")
+ builder.WriteString("#error \"trice bind: generated rebase END has no matching active BEGIN\"\n")
+ builder.WriteString("#else\n")
+ builder.WriteString("enum { TRICE_BIND_REBASE_END_NAME(TRICE_BIND_REBASE_SCOPE) = __COUNTER__ };\n")
+ builder.WriteString("TRICE_BIND_REBASE_STATIC_ASSERT(TRICE_BIND_REBASE_END_NAME(TRICE_BIND_REBASE_SCOPE) - TRICE_BIND_REBASE_ACTIVE_BASE - 1 == TRICE_BIND_REBASE_ACTIVE_COUNT, TRICE_BIND_REBASE_ASSERT_NAME(TRICE_BIND_REBASE_SCOPE));\n")
+ fmt.Fprintf(builder, "#undef TRICE_BIND_ROUTE_%s\n", plan.key)
+ fmt.Fprintf(builder, "#define TRICE_BIND_ROUTE_%s BIND\n", plan.key)
+ builder.WriteString("#undef TRICE_BIND_REBASE_ACTIVE_AUTO_APPLY\n")
+ builder.WriteString("#undef TRICE_BIND_REBASE_ACTIVE_COUNT\n")
+ builder.WriteString("#undef TRICE_BIND_REBASE_ACTIVE_BASE\n")
+ builder.WriteString("#undef TRICE_BIND_REBASE_ACTIVE\n")
+ builder.WriteString("#undef TRICE_BIND_REBASE_SCOPE\n")
+ builder.WriteString("#endif\n\n")
+}
+
+// bindSiteMacroName forms the expansion-time lookup key used by TRICE_BIND_SITE_HERE.
+func bindSiteMacroName(key string, line int) string {
+ return fmt.Sprintf("TRICE_BIND_SITE_%s_L%d", key, line)
+}
+
+// bindSiteTID formats the complete readable TID expression stored in the descriptor.
+func bindSiteTID(site bindSite) string {
+ return fmt.Sprintf("%s(%du)", site.wrapper, site.id)
+}
+
+// sortedBindDiagnostics creates stable path, line, and message ordering across parallel analysis.
+func sortedBindDiagnostics(diagnostics []bindDiagnostic) []bindDiagnostic {
+ result := append([]bindDiagnostic(nil), diagnostics...)
+ sort.SliceStable(result, func(i, j int) bool {
+ if result[i].path != result[j].path {
+ return result[i].path < result[j].path
+ }
+ if result[i].line != result[j].line {
+ return result[i].line < result[j].line
+ }
+ return result[i].message < result[j].message
+ })
+ return result
+}
+
+// formatBindDiagnostic produces one actionable compiler-style diagnostic line.
+func formatBindDiagnostic(diagnostic bindDiagnostic) string {
+ if diagnostic.line > 0 {
+ return fmt.Sprintf("%s:%d: error: %s", diagnostic.path, diagnostic.line, diagnostic.message)
+ }
+ if diagnostic.path != "" {
+ return fmt.Sprintf("%s: error: %s", diagnostic.path, diagnostic.message)
+ }
+ return "error: " + diagnostic.message
+}
diff --git a/internal/id/bindTypes.go b/internal/id/bindTypes.go
new file mode 100644
index 000000000..8186f35b8
--- /dev/null
+++ b/internal/id/bindTypes.go
@@ -0,0 +1,194 @@
+// SPDX-License-Identifier: MIT
+
+package id
+
+import "os"
+
+// bindFileClass records which tool owns the active Trice sites in one physical file.
+type bindFileClass string
+
+const (
+ bindFileNone bindFileClass = "none"
+ bindFileInsert bindFileClass = "insert-owned"
+ bindFileBound bindFileClass = "bind-owned"
+ bindFileMixed bindFileClass = "mixed"
+)
+
+// bindSiteMode describes how the target-side descriptor supplies its TID expression.
+type bindSiteMode string
+
+const (
+ bindSiteAuto bindSiteMode = "TRICE_BIND_AUTO"
+ bindSiteReplace bindSiteMode = "TRICE_BIND_REPLACE"
+)
+
+// bindFileInput is the immutable result of the parallel source-tree read phase.
+type bindFileInput struct {
+ path string
+ info os.FileInfo
+ data []byte
+}
+
+// bindInclude records one physical preprocessor include and any recognized
+// owner-sidecar or compact rebase-helper identity.
+type bindInclude struct {
+ start int
+ end int
+ afterLine int
+ line int
+ name string
+ key string
+ isSidecar bool
+ isRebase bool
+}
+
+// bindSite records parser-derived source identity and the later insert-derived ID assignment.
+type bindSite struct {
+ line int
+ column int
+ loc [7]int
+ macro string
+ format string
+ mode bindSiteMode
+ wrapper string
+ id TriceID
+ comment string
+ wasExplicit bool
+
+ // definitionName is non-empty only for a Trice site owned by a supported
+ // statement-macro definition. The ordinal is local to that definition.
+ definitionName string
+ definitionOrdinal int
+ // sourceOrdinal distinguishes direct sites that share one physical line.
+ sourceOrdinal int
+ // counterSelected records that at least one generated invocation region
+ // selects this logical site through the local counter-rebase path.
+ counterSelected bool
+}
+
+// bindSiteReference identifies one logical Trice site after deterministic plan sorting.
+type bindSiteReference struct {
+ plan int
+ site int
+}
+
+// bindMacroDefinition describes one complete physical #define directive and
+// the shared-parser Trice sites found in its replacement list.
+type bindMacroDefinition struct {
+ name string
+ start int
+ end int
+ replacementStart int
+ line int
+ functionLike bool
+ siteIndexes []int
+ hasTokenPaste bool
+ hasFormatStringify bool
+ hasTerminatingSemicolon bool
+ hasCounter bool
+}
+
+// bindWrapperDefinition is the project-wide identity of one supported logging wrapper.
+type bindWrapperDefinition struct {
+ name string
+ plan int
+ macro int
+ siteRefs []bindSiteReference
+ duplicate bool
+}
+
+// bindWrapperInvocation records one standalone wrapper expansion in user source.
+type bindWrapperInvocation struct {
+ name string
+ start int
+ end int
+ line int
+ column int
+ comment string
+ macroTerminated bool
+}
+
+// bindSiteDescriptor maps one ordinary File-Key-plus-line expansion to a logical site.
+type bindSiteDescriptor struct {
+ line int
+ column int
+ ref bindSiteReference
+ comment string
+}
+
+// bindRebaseRegion describes one generated, statement-local counter scope.
+type bindRebaseRegion struct {
+ scope string
+ line int
+ column int
+ start int
+ end int
+ expansions []bindSiteReference
+}
+
+// bindRebaseArtifact describes one generated helper header that moves verbose
+// preprocessor state management out of an owner source file.
+type bindRebaseArtifact struct {
+ name string
+ path string
+ kind string
+ scope string
+ content []byte
+}
+
+// bindProjectModel is rebuilt after every in-memory source transformation so
+// all references use the final physical lines seen by the target compiler.
+type bindProjectModel struct {
+ wrappers map[string]bindWrapperDefinition
+}
+
+// bindFilePlan contains all read-only analysis and all bytes intended for the commit phase.
+type bindFilePlan struct {
+ path string
+ info os.FileInfo
+ original []byte
+ final []byte
+ class bindFileClass
+ includes []bindInclude
+ sites []bindSite
+ macroDefinitions []bindMacroDefinition
+ invocations []bindWrapperInvocation
+ descriptors []bindSiteDescriptor
+ regions []bindRebaseRegion
+ existingRebaseArtifacts []bindRebaseArtifact
+ rebaseArtifacts []bindRebaseArtifact
+ managedOffset int
+ key string
+ sidecarName string
+ sidecarPath string
+ sidecarContent []byte
+ includeAdded bool
+ configChanged bool
+ newIDs int
+ reusedIDs int
+ diagnostics []bindDiagnostic
+}
+
+// bindDiagnostic is sortable so parallel analysis never changes diagnostic order.
+type bindDiagnostic struct {
+ path string
+ line int
+ message string
+}
+
+// bindWrite is one content-dependent atomic replacement planned after successful analysis.
+type bindWrite struct {
+ path string
+ data []byte
+ perm os.FileMode
+ kind string
+ // remove distinguishes a planned deletion from an empty-file replacement.
+ remove bool
+}
+
+// bindOriginalFile is the rollback snapshot for one destination in the deterministic commit phase.
+type bindOriginalFile struct {
+ existed bool
+ data []byte
+ perm os.FileMode
+}
diff --git a/internal/id/cleanIDs.go b/internal/id/cleanIDs.go
index b6d5848ea..476a04130 100644
--- a/internal/id/cleanIDs.go
+++ b/internal/id/cleanIDs.go
@@ -33,7 +33,7 @@ func (p *idData) processTriceIDCleaning(w io.Writer, fSys *afero.Afero, path str
return msg.OnErrFv(w, err)
}
- out, modified, err := p.cleanTriceIDs(w, ToLIPath(path), path, in, a)
+ out, modified, err := p.cleanTriceIDs(w, ToLIFile(path), path, in, a)
p.join(err)
if p.err != nil {
return msg.OnErrFv(w, err)
diff --git a/internal/id/coverage_additional_test.go b/internal/id/coverage_additional_test.go
index e23ad9e53..f085aed40 100644
--- a/internal/id/coverage_additional_test.go
+++ b/internal/id/coverage_additional_test.go
@@ -419,7 +419,12 @@ func TestZeroTriceIDsAdditionalBranches(t *testing.T) {
oldVerbose := Verbose
Verbose = true
- t.Cleanup(func() { Verbose = oldVerbose })
+ oldRoot := LIRoot
+ LIRoot = "."
+ t.Cleanup(func() {
+ Verbose = oldVerbose
+ LIRoot = oldRoot
+ })
got, modified, err := zeroTriceIDs(&out, "pkg/source.c", "pkg/source.c", in, admin)
require.NoError(t, err)
@@ -432,11 +437,9 @@ func TestZeroTriceIDsAdditionalBranches(t *testing.T) {
assert.Contains(t, text, `trice(iD(0), "fresh");`)
assert.Equal(t, TriceFmt{Type: "trice", Strg: "fresh"}, IDData.idToTrice[333])
- require.Equal(t, "source.c", IDData.idToLocNew[111].File)
- require.NotEmpty(t, IDData.idToLocNew[111].Path)
+ require.Equal(t, "pkg/source.c", IDData.idToLocNew[111].File)
require.Equal(t, 1, IDData.idToLocNew[111].Line)
- require.Equal(t, "source.c", IDData.idToLocNew[333].File)
- require.NotEmpty(t, IDData.idToLocNew[333].Path)
+ require.Equal(t, "pkg/source.c", IDData.idToLocNew[333].File)
require.Equal(t, 4, IDData.idToLocNew[333].Line)
_, exists := IDData.idToLocNew[222]
assert.False(t, exists)
diff --git a/internal/id/helper.go b/internal/id/helper.go
index ea7c2e851..a1fa23464 100644
--- a/internal/id/helper.go
+++ b/internal/id/helper.go
@@ -36,6 +36,15 @@ const (
atomicRenameAttempts = 20
)
+// sourceEdit describes one replacement against the unchanged input text.
+// Insert and Bind collect these edits while the shared parser makes its normal
+// ID decisions, then apply all replacements in one linear output pass.
+type sourceEdit struct {
+ start int
+ end int
+ replacement string
+}
+
// maskTriceInsertDisabledRegions blanks source regions between TRICE_INSERT_OFF
// and TRICE_INSERT_ON markers while preserving byte offsets and line numbers.
func maskTriceInsertDisabledRegions(s string) string {
@@ -785,8 +794,10 @@ func shortenDiagnosticLine(s string, maxRunes int) string {
return string(runes[:maxRunes]) + " ..."
}
-// writeID inserts id into s according to loc information and returns the result together with the changed len.
-func writeID(s string, offset int, loc []int, t TriceFmt, id TriceID) (result string, delta int) {
+// idSourceEdit creates the source replacement needed to write one ID. Offset
+// and loc refer to the unchanged input, which lets callers defer all copying
+// until every parser-derived edit is known.
+func idSourceEdit(s string, offset int, loc []int, t TriceFmt, id TriceID) sourceEdit {
gap := ""
if SpaceInsideParenthesis {
gap = " "
@@ -809,14 +820,60 @@ func writeID(s string, offset int, loc []int, t TriceFmt, id TriceID) (result st
}
}
idName += gap
- first := s[:offset+loc[2]] // first is the not touched s part before the replacement space.
- idSiz := loc[5] - loc[2] // idSiz is the size of the replaced ID space inside the source code.
- last := s[offset+loc[5]:] // last is the not touched s part after the replacement space.
prefix := keptOpeningWhitespace(s, offset, loc) // prefix preserves user whitespace after the opening parenthesis.
idIns := prefix + idName + strconv.Itoa(int(id)) + gap + "), "
- result = first + idIns + last //
- delta = len(idIns) - idSiz // delta is the offset change.
- return
+ return sourceEdit{start: offset + loc[2], end: offset + loc[5], replacement: idIns}
+}
+
+// applySourceEdits validates sorted, non-overlapping replacements and applies
+// them with one allocation. Returning an error keeps an internal offset defect
+// transactional instead of producing a partially transformed source string.
+func applySourceEdits(source string, edits []sourceEdit) (string, error) {
+ if len(edits) == 0 {
+ return source, nil
+ }
+
+ finalSize := len(source)
+ previousEnd := 0
+ for index, edit := range edits {
+ if edit.start < 0 || edit.end < edit.start || edit.end > len(source) {
+ return "", fmt.Errorf("source edit %d has invalid range [%d:%d] for %d bytes", index, edit.start, edit.end, len(source))
+ }
+ if edit.start < previousEnd {
+ return "", fmt.Errorf("source edit %d overlaps the previous edit at byte %d", index, edit.start)
+ }
+ finalSize += len(edit.replacement) - (edit.end - edit.start)
+ previousEnd = edit.end
+ }
+ if finalSize < 0 {
+ return "", errors.New("source edits produced an invalid negative output size")
+ }
+
+ var result strings.Builder
+ result.Grow(finalSize)
+ previousEnd = 0
+ for _, edit := range edits {
+ result.WriteString(source[previousEnd:edit.start])
+ result.WriteString(edit.replacement)
+ previousEnd = edit.end
+ }
+ result.WriteString(source[previousEnd:])
+ return result.String(), nil
+}
+
+// writeID inserts id into s according to loc information and returns the result together with the changed len.
+// It remains the single-edit compatibility helper for Clean, Zero, and focused tests.
+func writeID(s string, offset int, loc []int, t TriceFmt, id TriceID) (result string, delta int) {
+ edit := idSourceEdit(s, offset, loc, t, id)
+ result, err := applySourceEdits(s, []sourceEdit{edit})
+ if err != nil {
+ // Parser-derived locations were historically trusted by direct slicing
+ // in this helper. Preserve that invariant while making its violation
+ // explicit for developers.
+ panic(err)
+ }
+ delta = len(edit.replacement) - (edit.end - edit.start)
+ return result, delta
}
func keptOpeningWhitespace(s string, offset int, loc []int) string {
diff --git a/internal/id/id.go b/internal/id/id.go
index 9e0c79577..cb81218cc 100644
--- a/internal/id/id.go
+++ b/internal/id/id.go
@@ -57,9 +57,8 @@ type triceFmtLookUp map[TriceFmt]TriceIDs
// TriceLI is the trice location information assigned to a trice ID.
type TriceLI struct {
- File string `json:"File"` // source file name of trice id
- Path string `json:"Path,omitempty"` // normalized source path relative to li.json
- Line int `json:"Line"` // source file line of trice id
+ File string `json:"File"` // normalized source path relative to the configured location root
+ Line int `json:"Line"` // source file line of trice id
}
type TriceIDLookUpLI map[TriceID]TriceLI
diff --git a/internal/id/insertIDs.go b/internal/id/insertIDs.go
index 421761251..63eba6e5c 100644
--- a/internal/id/insertIDs.go
+++ b/internal/id/insertIDs.go
@@ -40,9 +40,15 @@ func (p *idData) processTriceIDInsertion(w io.Writer, fSys *afero.Afero, path st
in, err := fSys.ReadFile(path)
p.join(err)
// msg.Tell(w, path)
+ if p.err == nil && hasTriceBindSidecarInclude(string(in)) {
+ if Verbose {
+ fmt.Fprintln(w, "Skipped bind-owned source during insert:", path)
+ }
+ return nil
+ }
- lip := ToLIPath(path)
- out, modified, err := p.insertTriceIDs(w, path, lip, in, a)
+ liFile := ToLIFile(path)
+ out, modified, err := p.insertTriceIDs(w, path, liFile, in, a)
p.join(err)
if filepath.Base(path) == "triceConfig.h" && p.err == nil {
@@ -75,10 +81,19 @@ func removeIDFromSlice(ids []TriceID, id TriceID) []TriceID {
return ids // unchanged, if id not found inside ids
}
-// insertTriceIDs does the ID insertion task on in and returns the result in out with modified==true when out != in.
+// insertTriceIDs preserves the established insertion API while the optional
+// visit hook used by bind remains an internal implementation detail.
+func (p *idData) insertTriceIDs(w io.Writer, sourcePath, liFile string, in []byte, a *ant.Admin) (out []byte, modified bool, err error) {
+ return p.insertTriceIDsVisit(w, sourcePath, liFile, in, a, nil)
+}
+
+// insertTriceIDsVisit does the ID insertion task on in and returns the result
+// in out with modified==true when out != in. When visitAssignedID is non-nil,
+// it receives each final ID in parser order after the shared allocator accepts
+// it. Bind uses that sequence to avoid reparsing its complete virtual output.
//
// in is the read sourcePath content and out is the file content which needs to be written.
-// a is used for mutex access to IDData. sourcePath is needed for diagnostics, liPath for location information.
+// a is used for mutex access to IDData. sourcePath is needed for diagnostics, liFile for location information.
// insertTriceIDs is intended to be used in several Go routines (one for each file) for faster ID insertion.
// Data usage:
// - p.idToTrice is the serialized til.json. It is extended with unknown and new IDs and written back to til.json finally.
@@ -93,22 +108,22 @@ func removeIDFromSlice(ids []TriceID, id TriceID) []TriceID {
// insertTriceIDs parses the file content from the beginning for the next trice statement, deals with it and continues until the file content end.
// When a trice statement was found, general cases are:
// - idInSourceIsNonZero, id is inside p.idToTrice with matching trice and inside p.triceToId -> use ID (remove from p.triceToId)
-// - If trice is assigned to several IDs, the location information consulted. If a matching liPath exists, its first occurrence is used.
+// - If trice is assigned to several IDs, the location information consulted. If a matching liFile exists, its first occurrence is used.
//
// - idInSourceIsNonZero, id is inside p.idToTrice with matching trice and not in p.triceToId -> used ID! -> create new ID && invalidate ID in source
// - idInSourceIsNonZero, id is inside p.idToTrice with different trice -> used ID! -> create new ID && invalidate ID in source
// - idInSourceIsNonZero, id is not inside p.idToTrice (cannot be inside p.triceToId) -> add ID to p.idToTrice
// - idInSourceIsZero, trice is not inside p.triceToId -> create new ID & add ID to p.idToTrice
// - idInSourceIsZero, trice is is inside p.triceToId -> unused ID -> use ID (remove from p.triceToId)
-// - If trice is assigned to several IDs, the location information consulted. If a matching liPath exists, its first occurrence is used.
-func (p *idData) insertTriceIDs(w io.Writer, sourcePath, liPath string, in []byte, a *ant.Admin) (out []byte, modified bool, err error) {
+// - If trice is assigned to several IDs, the location information consulted. If a matching liFile exists, its first occurrence is used.
+func (p *idData) insertTriceIDsVisit(w io.Writer, sourcePath, liFile string, in []byte, a *ant.Admin, visitAssignedID func(TriceID)) (out []byte, modified bool, err error) {
var idn TriceID // idn is the last found id inside the source.
var idN TriceID // idN is the to be written id into the source.
var idS string // idS is the "iD(n)" statement, if found.
outs := string(in) // outs is the resulting string.
rest := maskTriceInsertDisabledRegions(outs) // rest is the so far not processed part of the file.
- var offset int // offset is incremented by n, when rest is reduced by n.
- var delta int // offset change cause by ID statement insertion
+ var sourceOffset int // sourceOffset locates rest inside the unchanged input.
+ var edits []sourceEdit // edits are applied together after all shared ID decisions succeed.
var t TriceFmt // t is the actual located trice.
line := 1 // line counts source code lines, these start with 1.
if p.err != nil {
@@ -161,7 +176,7 @@ func (p *idData) insertTriceIDs(w io.Writer, sourcePath, liPath string, in []byt
}
//line += strings.Count(rest[:loc[6]], "\n") // Keep line number up-to-date for location information. // issue # 523
rest = rest[loc[6]:]
- offset += loc[6]
+ sourceOffset += loc[6]
continue // ignore such cases
} else { // This is the normal case like trice( iD( 111)... .
nStrg := idS[nLoc[0]:nLoc[1]] // nStrg is the plain number string.
@@ -175,7 +190,7 @@ func (p *idData) insertTriceIDs(w io.Writer, sourcePath, liPath string, in []byt
fmt.Fprintln(w, "unexpected ", err, nStrg) // report
//line += strings.Count(rest[:loc[6]], "\n") // Keep line number up-to-date for location information. // issue # 523
rest = rest[loc[6]:]
- offset += loc[6]
+ sourceOffset += loc[6]
continue // ignore such cases
}
}
@@ -232,17 +247,17 @@ func (p *idData) insertTriceIDs(w io.Writer, sourcePath, liPath string, in []byt
}
break
}
- // Prefer the complete path when available so generation-time path
- // changes can still identify the same source unambiguously.
- referencePath := li.File
- if li.Path != "" {
- referencePath = filepath.Join(filepath.Dir(LIFnJSON), filepath.FromSlash(li.Path))
+ // New location files compare their canonical root-relative path.
+ // A basename fallback keeps older location files usable when they
+ // did not retain enough directory context.
+ filenameMatch = liFile == normalizeLocationPath(li.File)
+ if !filenameMatch && filepath.Base(filepath.FromSlash(li.File)) == li.File {
+ filenameMatch = filepath.Base(filepath.FromSlash(liFile)) == li.File
}
- filenameMatch = liPath == ToLIPath(referencePath)
if !filenameMatch {
if Verbose {
- fmt.Fprintln(w, "ID", id, "is from a different file:", ToLIPath(referencePath), li.File)
+ fmt.Fprintln(w, "ID", id, "is from a different file:", liFile, li.File)
}
continue
}
@@ -334,24 +349,32 @@ func (p *idData) insertTriceIDs(w io.Writer, sourcePath, liPath string, in []byt
}
p.idToTrice[idN] = t // add ID to p.idToTrice
a.Mutex.Unlock()
+ if visitAssignedID != nil {
+ visitAssignedID(idN)
+ }
//line += strings.Count(rest[:loc[1]], "\n") // Update line number for location information. // issue #523
if idN != idn {
if Verbose {
fmt.Fprintln(w, "Need to change source.", idn, " -> ", idN, " for ", t, "in file", sourcePath)
}
- outs, delta = writeID(outs, offset, loc, t, idN)
- offset += delta
+ // Keep parsing the unchanged input. Rebuilding the complete source
+ // here for every site made large cleaned files quadratic in size.
+ edits = append(edits, idSourceEdit(outs, sourceOffset, loc, t, idN))
modified = true
}
a.Mutex.Lock()
if Verbose {
- fmt.Fprintln(w, "Add to new location information. ID:", idN, liPath, line)
+ fmt.Fprintln(w, "Add to new location information. ID:", idN, liFile, line)
}
p.idToLocNew[idN] = newTriceLI(sourcePath, line)
a.Mutex.Unlock()
line += strings.Count(rest[loc[1]:loc[6]], "\n") // Keep line number up-to-date for location information. // issue #523
rest = rest[loc[6]:]
- offset += loc[6]
+ sourceOffset += loc[6]
+ }
+ outs, err = applySourceEdits(outs, edits)
+ if err != nil {
+ return nil, false, fmt.Errorf("cannot apply collected Trice ID insertions in %s: %w", sourcePath, err)
}
out = []byte(outs)
return
diff --git a/internal/id/insertIDs_test.go b/internal/id/insertIDs_test.go
index 646336964..af9dddf1b 100644
--- a/internal/id/insertIDs_test.go
+++ b/internal/id/insertIDs_test.go
@@ -468,7 +468,7 @@ func TestInsertExistingID_B(t *testing.T) {
assert.Nil(t, FSys.WriteFile(sFn1, []byte(src1), 0777))
// action
- assert.Nil(t, args.Handler(W, FSys, []string{"trice", "insert", "-src", "folder1/file1.c", "-IDMin", "100", "-IDMax", "999", "-IDMethod", "downward", "-liPath=relative", "-til", FnJSON, "-li", LIFnJSON}))
+ assert.Nil(t, args.Handler(W, FSys, []string{"trice", "insert", "-src", "folder1/file1.c", "-IDMin", "100", "-IDMax", "999", "-IDMethod", "downward", "-liRoot", ".", "-til", FnJSON, "-li", LIFnJSON}))
// check untouched src file1
actSrc1, e := FSys.ReadFile(sFn1)
diff --git a/internal/id/manage_test.go b/internal/id/manage_test.go
index 3a221067e..5a4811856 100644
--- a/internal/id/manage_test.go
+++ b/internal/id/manage_test.go
@@ -171,7 +171,7 @@ func TestNewIDUnknownMethod(t *testing.T) {
assert.Equal(t, TriceID(0), ilu.newID(&bytes.Buffer{}, 10, 20, "mystery"))
}
-// TestLutLocationInfoFromFile verifies the expected behavior.
+// TestLutLocationInfoFromFile verifies the File-only schema and ignores obsolete fields.
func TestLutLocationInfoFromFile(t *testing.T) {
defer Setup(t)()
@@ -191,9 +191,8 @@ func TestLutLocationInfoFromFile(t *testing.T) {
li := NewLutLI(&bytes.Buffer{}, FSys, LIFnJSON)
require.Len(t, li, 2)
assert.Equal(t, "demo.c", li[17].File)
- assert.Empty(t, li[17].Path)
assert.Equal(t, 42, li[17].Line)
- assert.Equal(t, "src/main.c", li[18].Path)
+ assert.Equal(t, "main.c", li[18].File)
}
// TestLutFileTransferMemMap verifies the expected behavior.
diff --git a/internal/id/match.go b/internal/id/match.go
index 0bf50d503..05e05700b 100644
--- a/internal/id/match.go
+++ b/internal/id/match.go
@@ -2,6 +2,12 @@
package id
+// triceMatchIssue records a recognized macro start that the shared parser cannot resolve.
+type triceMatchIssue struct {
+ offset int
+ message string
+}
+
// matchTrice searches in s for the next trice statement. If not found loc is nil.
// When found, s[loc[0]:loc[1]] is the typeName and at s[loc[2] is the opening parenthesis behind the typeName.
// If the found trice statement contains an ID statement, it is s[loc[3]:loc[4]]. Otherwise is loc[3]==loc[4].
@@ -24,6 +30,12 @@ package id
// - `)`
// - nil
func matchTrice(s string) (loc []int) {
+ loc, _ = matchTriceWithIssues(s)
+ return
+}
+
+// matchTriceWithIssues exposes skipped recognized starts without implementing a second parser.
+func matchTriceWithIssues(s string) (loc []int, issues []triceMatchIssue) {
var offset int
var clpIndex = -1
@@ -34,11 +46,14 @@ func matchTrice(s string) (loc []int) {
}
typeNameLoc := matchTypNameTRICE.FindStringIndex(s[triceStartloc[0]:triceStartloc[1]])
+ var trice TriceFmt
+ trice.Type = s[triceStartloc[0] : triceStartloc[0]+typeNameLoc[1]]
+ resolveTriceAlias(&trice)
clpIndex = findClosingParentis(s, triceStartloc[1])
if clpIndex == -1 {
- // Skip this occurrence
- offset += triceStartloc[1]
+ issues = append(issues, triceMatchIssue{offset: offset + triceStartloc[0], message: "recognized Trice call has no matching closing parenthesis"})
cut := triceStartloc[1]
+ offset += cut
s = s[cut:]
continue
}
@@ -47,20 +62,15 @@ func matchTrice(s string) (loc []int) {
fmtLoc := matchStringLiteral(args)
if fmtLoc == nil { // not found
- var t TriceFmt
- t.Type = s[triceStartloc[0] : triceStartloc[0]+typeNameLoc[1]]
- resolveTriceAlias(&t)
-
- if t.isAlias() {
+ if trice.isAlias() {
// Custom macros are flexible and might not have a format string: MyAssert(2>2)
// At this point, to ensure proper down-the-code matching, let's use the clp (closing parenthesis)
// and call its position (location) as an empty format location (zero-length format string)
fmtLoc = []int{clpIndex - triceStartloc[1], clpIndex - triceStartloc[1]}
} else {
- // if it is a built-in macro
-
- // Skip this occurrence
+ issues = append(issues, triceMatchIssue{offset: offset + triceStartloc[0], message: "recognized Trice call has no supported format string"})
cut := triceStartloc[1]
+ offset += cut
s = s[cut:]
continue
}
@@ -73,8 +83,9 @@ func matchTrice(s string) (loc []int) {
rest := args[:fmtLoc[0]]
idLoc := matchNbID.FindStringIndex(rest)
- // Calculate the leftmost position of the format string, skipping trailing spaces
- // and the comma after ID (if present)
+ actualFormatStart := fmtLoc[0]
+ // Calculate the leftmost position of the first semantic argument, skipping
+ // trailing spaces and the comma after ID when present.
fmtLoc[0] = 0
if idLoc != nil {
fmtLoc[0] += idLoc[1]
@@ -84,6 +95,16 @@ func matchTrice(s string) (loc []int) {
if skipSpacesBeforeFmtLoc != nil {
fmtLoc[0] += skipSpacesBeforeFmtLoc[1]
}
+ if !trice.isAlias() && actualFormatStart > fmtLoc[0] {
+ prefix := args[fmtLoc[0]:actualFormatStart]
+ if isTriceFormatContinuationWhitespace(prefix) {
+ // A physical line continuation is still leading whitespace, so the
+ // shared insert parser should expose the actual literal boundary.
+ fmtLoc[0] = actualFormatStart
+ } else {
+ issues = append(issues, triceMatchIssue{offset: offset + triceStartloc[0], message: "Trice site uses an unsupported composite or non-leading format string"})
+ }
+ }
if idLoc == nil { // no ids
idLoc = []int{0, 0}
@@ -105,3 +126,26 @@ func matchTrice(s string) (loc []int) {
return
}
}
+
+// isTriceFormatContinuationWhitespace accepts only whitespace and physical C line continuations.
+func isTriceFormatContinuationWhitespace(s string) bool {
+ for index := 0; index < len(s); index++ {
+ switch s[index] {
+ case ' ', '\t', '\n', '\r', '\f', '\v':
+ continue
+ case '\\':
+ if index+1 < len(s) && s[index+1] == '\n' {
+ index++
+ continue
+ }
+ if index+2 < len(s) && s[index+1] == '\r' && s[index+2] == '\n' {
+ index += 2
+ continue
+ }
+ return false
+ default:
+ return false
+ }
+ }
+ return true
+}
diff --git a/internal/id/parsing_test.go b/internal/id/parsing_test.go
index 948a04012..42f88cadc 100644
--- a/internal/id/parsing_test.go
+++ b/internal/id/parsing_test.go
@@ -5,6 +5,9 @@ package id
import (
"bytes"
"errors"
+ "fmt"
+ "io"
+ "strings"
"testing"
"github.com/rokath/trice/pkg/ant"
@@ -159,6 +162,77 @@ func TestWriteAndCleanIDHelpers(t *testing.T) {
assert.NotZero(t, delta)
}
+// TestApplySourceEditsBatchesNonOverlappingReplacements verifies the linear
+// transformation primitive used by both Insert and Bind, including its
+// transactional rejection of malformed internal edit ranges.
+func TestApplySourceEditsBatchesNonOverlappingReplacements(t *testing.T) {
+ source := "alpha beta gamma"
+ edits := []sourceEdit{
+ {start: 0, end: 5, replacement: "A"},
+ {start: 6, end: 10, replacement: "B"},
+ {start: 11, end: 16, replacement: "C"},
+ }
+
+ result, err := applySourceEdits(source, edits)
+ require.NoError(t, err)
+ assert.Equal(t, "A B C", result)
+
+ _, err = applySourceEdits(source, []sourceEdit{
+ {start: 0, end: 5, replacement: "A"},
+ {start: 4, end: 6, replacement: "overlap"},
+ })
+ assert.ErrorContains(t, err, "overlaps")
+
+ _, err = applySourceEdits(source, []sourceEdit{{start: 0, end: len(source) + 1, replacement: "invalid"}})
+ assert.ErrorContains(t, err, "invalid range")
+}
+
+// TestFindBindClosingParenScansOnlyCallExtent covers the lexical states needed
+// by the allocation-free local scanner. Parentheses inside comments, strings,
+// character literals, and nested calls must not terminate the outer call.
+func TestFindBindClosingParenScansOnlyCallExtent(t *testing.T) {
+ source := "call(nested(1), \"text ) \\\" still string\", ')' /* ) */, // )\n value) trailing"
+ opening := strings.IndexByte(source, '(')
+ require.NotEqual(t, -1, opening)
+ expected := strings.Index(source, ") trailing")
+ require.NotEqual(t, -1, expected)
+ assert.Equal(t, expected, findBindClosingParen(source, opening+1))
+
+ assert.Equal(t, -1, findBindClosingParen("call(nested(1)", len("call(")))
+}
+
+// TestInsertTriceIDsBatchesLargeSource verifies that the established allocator
+// and parser still produce byte-identical ordered IDs when many edits are
+// deferred until one final source transformation.
+func TestInsertTriceIDsBatchesLargeSource(t *testing.T) {
+ defer Setup(t)()
+
+ const siteCount = 512
+ idSpace := make([]TriceID, siteCount)
+ var source strings.Builder
+ var expected strings.Builder
+ for index := 0; index < siteCount; index++ {
+ idSpace[index] = TriceID(1000 + index)
+ fmt.Fprintf(&source, "trice(\"message %04d\");\n", index)
+ fmt.Fprintf(&expected, "trice(iD(%d), \"message %04d\");\n", idSpace[index], index)
+ }
+ p := &idData{
+ idToTrice: make(TriceIDLookUp),
+ triceToId: make(triceFmtLookUp),
+ idToLocRef: make(TriceIDLookUpLI),
+ idToLocNew: make(TriceIDLookUpLI),
+ TagList: []TagEntry{{tagName: "", iDSpace: idSpace}},
+ }
+ SearchMethod = "upward"
+
+ out, modified, err := p.insertTriceIDs(io.Discard, "large.c", "large.c", []byte(source.String()), &ant.Admin{})
+ require.NoError(t, err)
+ assert.True(t, modified)
+ assert.Equal(t, expected.String(), string(out))
+ assert.Len(t, p.idToTrice, siteCount)
+ assert.Len(t, p.idToLocNew, siteCount)
+}
+
// TestRemoveIDFromSlice verifies both the removal and unchanged branches.
func TestRemoveIDFromSlice(t *testing.T) {
ids := []TriceID{11, 22, 33}
diff --git a/internal/id/remigratecmd/main.go b/internal/id/remigratecmd/main.go
new file mode 100644
index 000000000..922ee1f77
--- /dev/null
+++ b/internal/id/remigratecmd/main.go
@@ -0,0 +1,43 @@
+// SPDX-License-Identifier: MIT
+
+// Command remigratecmd provides the repository test workflow with a safe
+// Bind-to-Clean transition without adding a public trice CLI operation.
+package main
+
+import (
+ "flag"
+ "fmt"
+ "os"
+
+ "github.com/rokath/trice/internal/id"
+ "github.com/spf13/afero"
+)
+
+// main parses only the source-ownership options needed for re-migration and
+// delegates all scanning, validation, and transactional changes to internal/id.
+func main() {
+ var (
+ sources id.ArrayFlag
+ excludes id.ArrayFlag
+ )
+ flag.Var(&sources, "src", "Source file or directory to remigrate; repeatable.")
+ flag.Var(&excludes, "exclude", "Source file or directory to exclude; repeatable.")
+ flag.StringVar(&id.BindDir, "bindDir", "./build/triceIDs", "Directory containing generated Trice bind sidecars.")
+ flag.StringVar(&id.LIFnJSON, "li", "off", "Optional location list whose Bound line numbers are remigrated to Clean lines.")
+ flag.StringVar(&id.LIRoot, "liRoot", ".", "Root used to normalize paths stored in the location list.")
+ flag.BoolVar(&id.Verbose, "v", false, "Print each planned re-migration.")
+ flag.BoolVar(&id.DryRun, "dry-run", false, "Validate and report without changing files.")
+ flag.Parse()
+ if len(sources) == 0 {
+ sources = id.ArrayFlag{"."}
+ }
+ id.Srcs = sources
+ id.ExcludeSrcs = excludes
+ id.CompactSrcs()
+
+ fileSystem := &afero.Afero{Fs: afero.NewOsFs()}
+ if err := id.SubCmdIdRemigrateBindToClean(os.Stdout, fileSystem); err != nil {
+ fmt.Fprintln(os.Stderr, err)
+ os.Exit(1)
+ }
+}
diff --git a/internal/id/setup_test.go b/internal/id/setup_test.go
index 2d9960022..af9d27874 100644
--- a/internal/id/setup_test.go
+++ b/internal/id/setup_test.go
@@ -118,9 +118,9 @@ type globalDefaults struct {
defaultMin TriceID
defaultMax TriceID
defaultSearchMethod string
- defaultLIPathKind string
- defaultLIDisplayPathKind string
defaultLIRoot string
+ defaultLIMaxDirs int
+ defaultBindDir string
defaultSrcs ArrayFlag
defaultExcludeSrcs ArrayFlag
defaultTriceAliases ArrayFlag
@@ -143,9 +143,9 @@ func (p *globalDefaults) GetGlobalVars() {
p.defaultMin = Min
p.defaultMax = Max
p.defaultSearchMethod = SearchMethod
- p.defaultLIPathKind = LIPathKind
- p.defaultLIDisplayPathKind = LIDisplayPathKind
p.defaultLIRoot = LIRoot
+ p.defaultLIMaxDirs = LIMaxDirs
+ p.defaultBindDir = BindDir
p.defaultSrcs = Srcs
p.defaultExcludeSrcs = ExcludeSrcs
p.defaultTriceAliases = TriceAliases
@@ -171,9 +171,9 @@ func (p *globalDefaults) SetGlobalVars(t *testing.T) {
Min = p.defaultMin
Max = p.defaultMax
SearchMethod = p.defaultSearchMethod
- LIPathKind = p.defaultLIPathKind
- LIDisplayPathKind = p.defaultLIDisplayPathKind
LIRoot = p.defaultLIRoot
+ LIMaxDirs = p.defaultLIMaxDirs
+ BindDir = p.defaultBindDir
Srcs = p.defaultSrcs
ExcludeSrcs = p.defaultExcludeSrcs
TriceAliases = p.defaultTriceAliases
diff --git a/internal/id/srcs_test.go b/internal/id/srcs_test.go
index 369c15e03..dbf5e59ab 100644
--- a/internal/id/srcs_test.go
+++ b/internal/id/srcs_test.go
@@ -98,7 +98,7 @@ func TestAddToListAdapter(t *testing.T) {
assert.Equal(t, "TRice", ilu[1234].Type)
assert.Equal(t, "msg:%d", ilu[1234].Strg)
assert.Contains(t, lim, TriceID(1234))
- assert.Equal(t, filepath.Base(sourceFile), lim[1234].File)
+ assert.Equal(t, ToLIFile(sourceFile), lim[1234].File)
assert.Equal(t, 1, lim[1234].Line)
}
diff --git a/internal/id/switchIDs.go b/internal/id/switchIDs.go
index 34165734a..937f575e0 100644
--- a/internal/id/switchIDs.go
+++ b/internal/id/switchIDs.go
@@ -5,6 +5,7 @@ package id
// source tree management
import (
+ "bytes"
"fmt"
"io"
"log"
@@ -24,6 +25,7 @@ type idData struct {
idToLocRef TriceIDLookUpLI // idToLocRef is the trice ID location information as reference generated from li.json (if exists) at the begin of SubCmdIdInsert and is not modified at all. At the end of SubCmdIdInsert a new li.json is generated from itemToId.
idToLocNew TriceIDLookUpLI // idToLocNew is the trice ID location information generated during insertTriceIDs. At the end of SubCmdIdInsert a new li.json is generated from idToLocRef + idToLocNew.
idInitialCount int // idInitialCount is the initial used ID count.
+ liNeedsRewrite bool // liNeedsRewrite removes obsolete schema fields even when no source locations changed.
TagList []TagEntry // IDSpace contains the tag specific unused IDs.
err error
}
@@ -124,6 +126,19 @@ func (p *idData) GetIDStateFromJSONFiles(w io.Writer, fSys *afero.Afero) {
p.idInitialCount = len(p.idToTrice)
p.idToLocRef = NewLutLI(w, fSys, LIFnJSON) // for reference lookup
p.idToLocNew = make(TriceIDLookUpLI, 4000) // for new li.json
+ p.liNeedsRewrite = locationInformationNeedsRewrite(fSys)
+}
+
+// locationInformationNeedsRewrite detects the obsolete Issue 708 Path field.
+func locationInformationNeedsRewrite(fSys *afero.Afero) bool {
+ if LIFnJSON == "off" || LIFnJSON == "none" {
+ return false
+ }
+ content, err := fSys.ReadFile(LIFnJSON)
+ if err != nil {
+ return false
+ }
+ return bytes.Contains(content, []byte(`"Path"`))
}
// PreProcessing reads til.json and li.json and converts the data for processing.
@@ -132,6 +147,18 @@ func (p *idData) PreProcessing(w io.Writer, fSys *afero.Afero) {
p.GetIDStateFromJSONFiles(w, fSys)
+ // Rebuild all free-ID slices for every command invocation. Tag-specific
+ // ranges survive from option evaluation, while the common range and stale
+ // allocation state from an earlier in-process command are discarded.
+ tagRanges := p.TagList[:0]
+ for _, entry := range p.TagList {
+ if entry.tagName != "" {
+ entry.iDSpace = nil
+ tagRanges = append(tagRanges, entry)
+ }
+ }
+ p.TagList = tagRanges
+
var common TagEntry
common.tagName = ""
@@ -187,7 +214,7 @@ func (p *idData) postProcessing(w io.Writer, fSys *afero.Afero) error {
}
// li.json
- if len(p.idToLocNew) > 0 { // Renew li.json only if there are some data.
+ if len(p.idToLocNew) > 0 || (p.liNeedsRewrite && !DryRun) {
// extend li.json
for k, v := range p.idToLocNew {
p.idToLocRef[k] = v
diff --git a/internal/id/update_additional_test.go b/internal/id/update_additional_test.go
index 2e315211a..2bb0a9dc4 100644
--- a/internal/id/update_additional_test.go
+++ b/internal/id/update_additional_test.go
@@ -101,11 +101,14 @@ func TestRefreshListCollectsSourceFiles(t *testing.T) {
oldVerbose := Verbose
oldFnJSON := FnJSON
+ oldRoot := LIRoot
Verbose = false
FnJSON = "til.json"
+ LIRoot = dir
t.Cleanup(func() {
Verbose = oldVerbose
FnJSON = oldFnJSON
+ LIRoot = oldRoot
})
ilu := TriceIDLookUp{}
@@ -114,7 +117,7 @@ func TestRefreshListCollectsSourceFiles(t *testing.T) {
refreshList(ioDiscard{}, &afero.Afero{Fs: afero.NewOsFs()}, srcDir, ilu, flu, lim)
assert.Equal(t, TriceFmt{Type: "TRICE8_1", Strg: "demo=%d\\n"}, ilu[321])
- assert.Equal(t, "demo.c", lim[321].File)
+ assert.Equal(t, "src/demo.c", lim[321].File)
}
// TestRefreshListVerbose verifies the expected behavior.
diff --git a/internal/id/vars.go b/internal/id/vars.go
index 20a0c83ad..84cdfd733 100644
--- a/internal/id/vars.go
+++ b/internal/id/vars.go
@@ -9,19 +9,19 @@ import (
)
var (
- Verbose bool // Verbose gives more information on output if set. The value is injected from main packages.
- DryRun bool // DryRun if set, inhibits real changes
- FnJSON = "til.json" // FnJSON is the filename for the JSON formatted ID list.
- LIFnJSON string // LIFnJSON is the filename for the JSON formatted location information list.
- Min = TriceID(1000) // Min is the smallest allowed ID for normal trices.
- Max = TriceID(7999) // Max is the biggest allowed ID for normal trices.
- SearchMethod = "random" // SearchMethod is the next ID search method.
- LIPathKind string // LIPathKind controls how to store paths inside li.json: base, relative, full
- LIDisplayPathKind string // LIDisplayPathKind selects the location path representation used by log.
- LIRoot string // LIRoot optionally overrides the li.json directory used for full log paths.
- Srcs ArrayFlag // Srcs gets multiple files or directories.
- ExcludeSrcs ArrayFlag // ExcludeSrcs is an ArrayFlag representing source files to be excluded from processing.
- IDRange ArrayFlag // IDPolicy gets ID ranges for Trice ID message channels like "err:".
+ Verbose bool // Verbose gives more information on output if set. The value is injected from main packages.
+ DryRun bool // DryRun if set, inhibits real changes
+ FnJSON = "til.json" // FnJSON is the filename for the JSON formatted ID list.
+ LIFnJSON string // LIFnJSON is the filename for the JSON formatted location information list.
+ Min = TriceID(1000) // Min is the smallest allowed ID for normal trices.
+ Max = TriceID(7999) // Max is the biggest allowed ID for normal trices.
+ SearchMethod = "random" // SearchMethod is the next ID search method.
+ LIRoot string // LIRoot optionally overrides the li.json directory used as the source path anchor.
+ LIMaxDirs int // LIMaxDirs limits the parent directories shown with log location information.
+ BindDir = "./build/triceIDs" // BindDir is the flat output directory for generated bind sidecar headers.
+ Srcs ArrayFlag // Srcs gets multiple files or directories.
+ ExcludeSrcs ArrayFlag // ExcludeSrcs is an ArrayFlag representing source files to be excluded from processing.
+ IDRange ArrayFlag // IDPolicy gets ID ranges for Trice ID message channels like "err:".
IDData idData
matchSourceFile = regexp.MustCompile(patSourceFile)
matchNbID = regexp.MustCompile(patNbID)
diff --git a/internal/translator/translator_delta_test.go b/internal/translator/translator_delta_test.go
index 73dd802d4..acfb62152 100644
--- a/internal/translator/translator_delta_test.go
+++ b/internal/translator/translator_delta_test.go
@@ -117,7 +117,7 @@ func configureTranslatorLoopTest(t *testing.T) {
savedTargetTimestamp := decoder.TargetTimestamp
savedTargetTimestampSize := decoder.TargetTimestampSize
savedBlankMetadata := decoder.BlankMetadata
- savedLIDisplayPathKind := id.LIDisplayPathKind
+ savedLIMaxDirs := id.LIMaxDirs
t.Cleanup(func() {
receiver.Port = savedPort
@@ -145,7 +145,7 @@ func configureTranslatorLoopTest(t *testing.T) {
decoder.TargetTimestamp = savedTargetTimestamp
decoder.TargetTimestampSize = savedTargetTimestampSize
decoder.BlankMetadata = savedBlankMetadata
- id.LIDisplayPathKind = savedLIDisplayPathKind
+ id.LIMaxDirs = savedLIMaxDirs
})
receiver.Port = "BUFFER"
@@ -173,7 +173,7 @@ func configureTranslatorLoopTest(t *testing.T) {
decoder.TargetTimestamp = 0
decoder.TargetTimestampSize = 0
decoder.BlankMetadata = false
- id.LIDisplayPathKind = "base"
+ id.LIMaxDirs = 0
}
// TestRenderTargetStampColumns16DeltaWraparound verifies the expected behavior.
@@ -526,16 +526,16 @@ func TestCorrectWrappedTimestamp(t *testing.T) {
func TestLocationInformation(t *testing.T) {
savedFormat := decoder.LocationInformationFormatString
savedVerbose := Verbose
- savedPathKind := id.LIDisplayPathKind
+ savedMaxDirs := id.LIMaxDirs
defer func() {
decoder.LocationInformationFormatString = savedFormat
Verbose = savedVerbose
- id.LIDisplayPathKind = savedPathKind
+ id.LIMaxDirs = savedMaxDirs
}()
decoder.LocationInformationFormatString = "%s:%d "
Verbose = false
- id.LIDisplayPathKind = "base"
+ id.LIMaxDirs = 0
li := id.TriceIDLookUpLI{
17: {File: "/tmp/demo/main.c", Line: 42},
}
diff --git a/scripts/_format_c_code.sh b/scripts/_format_c_code.sh
index 1d25d4daf..67966211a 100755
--- a/scripts/_format_c_code.sh
+++ b/scripts/_format_c_code.sh
@@ -29,6 +29,8 @@
# By default we use:
# go run ./cmd/clang-filter
# which means no binary needs to be checked in or built manually.
+# CLANG_FORMAT_BIN can select the required clang-format executable when it is
+# not named `clang-format` on the current platform.
#
set -euo pipefail
@@ -74,6 +76,34 @@ done
###############################################################################
CLANG_FILTER_CMD="${CLANG_FILTER_CMD:-go run ./cmd/clang-filter}"
+# clang-format output is not guaranteed to be stable across releases. Keep the
+# repository and CI on the exact release that produced the checked-in files so
+# `format` and `check` cannot disagree merely because they run on different
+# operating systems or rolling CI images.
+CLANG_FORMAT_BIN="${CLANG_FORMAT_BIN:-clang-format}"
+CLANG_FORMAT_REQUIRED_VERSION="19.1.7"
+
+if ! command -v "$CLANG_FORMAT_BIN" >/dev/null 2>&1; then
+ echo "clang-format: Required executable not found: $CLANG_FORMAT_BIN" >&2
+ echo "Install clang-format $CLANG_FORMAT_REQUIRED_VERSION or set CLANG_FORMAT_BIN to that executable." >&2
+ exit 1
+fi
+
+CLANG_FORMAT_VERSION_OUTPUT="$("$CLANG_FORMAT_BIN" --version)" || {
+ echo "clang-format: Failed to query the formatter version from $CLANG_FORMAT_BIN." >&2
+ exit 1
+}
+case "$CLANG_FORMAT_VERSION_OUTPUT" in
+ *"version $CLANG_FORMAT_REQUIRED_VERSION"*) ;;
+ *)
+ echo "clang-format: Unsupported formatter version." >&2
+ echo " required: $CLANG_FORMAT_REQUIRED_VERSION" >&2
+ echo " detected: $CLANG_FORMAT_VERSION_OUTPUT" >&2
+ echo "Install the required version or set CLANG_FORMAT_BIN to its executable." >&2
+ exit 1
+ ;;
+esac
+
###############################################################################
# 3. Collect *all* tracked C/C++ source/header files from git.
#
@@ -116,21 +146,68 @@ if [ "${#FILTERED_FILES[@]}" -eq 0 ]; then
fi
###############################################################################
-# 5. FORMAT MODE — apply clang-format in-place (-i)
+# 5. Validate the configuration and prepare isolated stdin processing.
+#
+# clang-format also reads .clang-format-ignore itself when a real file name is
+# passed. Releases with the old negation implementation can incorrectly ignore
+# unrelated files when the ignore file contains re-inclusion patterns. The Go
+# filter above already made the authoritative selection, so process each file
+# via stdin with a guaranteed-nonexistent assumed path. This preserves language
+# detection without triggering clang-format's second ignore-file evaluation.
+###############################################################################
+if ! "$CLANG_FORMAT_BIN" -style=file:.clang-format -dump-config >/dev/null; then
+ echo "clang-format: Failed to parse .clang-format." >&2
+ "$CLANG_FORMAT_BIN" --version >&2 || true
+ exit 1
+fi
+
+FORMAT_TMP_DIR="$(mktemp -d)" || {
+ echo "clang-format: Failed to create a temporary directory." >&2
+ exit 1
+}
+FORMAT_TMP_FILE="$FORMAT_TMP_DIR/output"
+
+# cleanup_format_tmp removes only artifacts created by this script invocation.
+cleanup_format_tmp() {
+ rm -f "$FORMAT_TMP_FILE"
+ rmdir "$FORMAT_TMP_DIR" 2>/dev/null || true
+}
+trap cleanup_format_tmp EXIT
+
+# clang_format_file writes formatted output or replacement XML for one source
+# file to stdout. The nonexistent assumed path retains the source extension but
+# cannot match clang-format's native ignore processing.
+clang_format_file() {
+ local source_file="$1"
+ shift
+ local extension="${source_file##*.}"
+ local assumed_file="$FORMAT_TMP_DIR/input.$extension"
+ "$CLANG_FORMAT_BIN" -style=file:.clang-format --assume-filename="$assumed_file" "$@" <"$source_file"
+}
+
+###############################################################################
+# 6. FORMAT MODE — apply clang-format output to changed files only.
#
-# Used locally before committing changes.
+# Direct -i processing would invoke clang-format's native ignore handling. A
+# temporary output also ensures a formatter failure cannot partially overwrite
+# the source file.
###############################################################################
if [ "$MODE" = "format" ]; then
- if [ "${#FILTERED_FILES[@]}" -eq 0 ]; then
- exit 0
- fi
if [ "$VERBOSE" -eq 1 ]; then
echo "clang-format: The following files will be processed:"
printf " %s\n" "${FILTERED_FILES[@]}"
echo
echo "clang-format: Running in FORMAT mode (in-place changes)."
fi
- clang-format -style=file -i "${FILTERED_FILES[@]}"
+ for f in "${FILTERED_FILES[@]}"; do
+ if ! clang_format_file "$f" >"$FORMAT_TMP_FILE"; then
+ echo "clang-format: Failed to format '$f'." >&2
+ exit 1
+ fi
+ if ! cmp -s "$f" "$FORMAT_TMP_FILE"; then
+ cp "$FORMAT_TMP_FILE" "$f"
+ fi
+ done
if [ "$VERBOSE" -eq 1 ]; then
echo "clang-format: Formatting completed."
fi
@@ -138,7 +215,7 @@ if [ "$MODE" = "format" ]; then
fi
###############################################################################
-# 6. CHECK MODE — do NOT modify files, but detect formatting problems.
+# 7. CHECK MODE — do NOT modify files, but detect formatting problems.
#
# This mode is CI-friendly:
# - For each file, run clang-format with -output-replacements-xml
@@ -153,7 +230,11 @@ for f in "${FILTERED_FILES[@]}"; do
# clang-format outputs an XML diff where tags represent
# formatting operations that *would* be applied. If any are found,
# the file is not correctly formatted.
- if clang-format -style=file -output-replacements-xml "$f" | grep -q ""$FORMAT_TMP_FILE"; then
+ echo "clang-format: Failed to check '$f'." >&2
+ exit 1
+ fi
+ if grep -q "/dev/null 2>&1; then
- command -v clang
- return 0
- fi
-
- if command -v cc >/dev/null 2>&1; then
- command -v cc
- return 0
- fi
+ local compiler
+ local compiler_bin
+
+ # A compiler executable can be present while its standard-library headers
+ # are missing. Select the first candidate that can compile a minimal C input
+ # so the targeted syntax check can fall back to another installed toolchain.
+ for compiler in clang cc gcc; do
+ if ! command -v "$compiler" >/dev/null 2>&1; then
+ continue
+ fi
- if command -v gcc >/dev/null 2>&1; then
- command -v gcc
- return 0
- fi
+ compiler_bin=$(command -v "$compiler")
+ if printf '#include \n' | "$compiler_bin" -std=c99 -fsyntax-only -x c - >/dev/null 2>&1; then
+ printf '%s\n' "$compiler_bin"
+ return 0
+ fi
+ done
return 1
}
@@ -304,11 +307,37 @@ run_direct_xtea_compile_check() {
run_cppcheck() {
local cppcheck_bin
+ local cppcheck_args=()
+ local cppcheck_help
if ! cppcheck_bin="$(find_cppcheck)"; then
echo "cppcheck is not installed" >&2
exit 1
fi
+ # Older cppcheck releases do not know --check-level. Keep the lint run
+ # compatible while making the reduced analysis depth visible in the log.
+ # Capture the complete help text first: short-circuiting grep pipelines can
+ # mis-detect the option when a parent shell exports pipefail.
+ cppcheck_help="$("$cppcheck_bin" --help 2>&1 || true)"
+ case "$cppcheck_help" in
+ *--check-level*) cppcheck_args+=(--check-level=exhaustive) ;;
+ *)
+ if [ "${TRICE_CPPCHECK_CHECK_LEVEL_HINT_SHOWN:-0}" != "1" ]; then
+ echo "Hint: cppcheck does not support --check-level; running without exhaustive checking." >&2
+ fi
+ # Cppcheck 2.10 reports this macro-use path as unreadVariable, while the
+ # counter value is part of the selected OUT_fullSigil expansion.
+ cppcheck_args+=(--suppress=unreadVariable:src/tcobsv1Encode.c:313)
+ # Cppcheck 2.10 also reports the stack-buffer direct-output macros as
+ # danglingLifetime even though the generated write sequence is synchronous.
+ cppcheck_args+=(--suppress=danglingLifetime:src/trice.c)
+ cppcheck_args+=(--suppress=danglingLifetime:src/trice8.c)
+ cppcheck_args+=(--suppress=danglingLifetime:src/trice16.c)
+ cppcheck_args+=(--suppress=danglingLifetime:src/trice32.c)
+ cppcheck_args+=(--suppress=danglingLifetime:src/trice64.c)
+ ;;
+ esac
+
# cppcheck does not model compiler-specific __has_builtin(...) probing well.
# Define it to 0 so Clang-only feature tests stay parseable during analysis.
# tcobsv1Encode combines a fixed sigil prefix with a variable offset.
@@ -317,7 +346,7 @@ run_cppcheck() {
--error-exitcode=1 \
--enable=warning,style,performance,portability \
--inline-suppr \
- --check-level=exhaustive \
+ "${cppcheck_args[@]}" \
--std=c99 \
--language=c \
--quiet \
diff --git a/scripts/_setup_build_environment.sh b/scripts/_setup_build_environment.sh
index 39ade8d2c..d89fe9ca2 100755
--- a/scripts/_setup_build_environment.sh
+++ b/scripts/_setup_build_environment.sh
@@ -249,6 +249,97 @@ export_clang_cross_env() {
fi
}
+# is_positive_job_count accepts only the bounded decimal values GNU Make can
+# safely consume as a Windows parallelism setting.
+is_positive_job_count() {
+ case "$1" in
+ "" | *[!0-9]* | 0) return 1 ;;
+ *) return 0 ;;
+ esac
+}
+
+set_windows_make_jobs() {
+ local detected_jobs=""
+ local detection_source=""
+
+ # Respect an explicit caller choice. This lets developers and CI lower the
+ # job count for constrained systems or raise it after validating a specific
+ # Windows toolchain. A bare "-j" remains the caller's responsibility because
+ # GNU Make interprets it as an unlimited job count, not as "one job per CPU".
+ if [ -n "${MAKE_JOBS:-}" ]; then
+ log_info "Respecting pre-set Windows build parallelism: MAKE_JOBS=$MAKE_JOBS"
+ export MAKE_JOBS
+ return 0
+ fi
+
+ # Prefer the number of physical CPU cores on Windows. NUMBER_OF_PROCESSORS
+ # and nproc report logical processors, including Hyper-Threading siblings.
+ # Compiling one C source file per logical processor caused the native ARM GCC
+ # 13.2 toolchain to terminate intermittently with STATUS_ACCESS_VIOLATION on
+ # an otherwise healthy 4-core/8-thread Windows machine.
+ #
+ # Windows PowerShell is available on supported Windows versions and can query
+ # the physical-core count directly. Remove carriage returns from its output
+ # because this function is running inside a Unix-like Windows shell.
+ if command -v powershell.exe >/dev/null 2>&1; then
+ detected_jobs=$(powershell.exe -NoProfile -NonInteractive -Command \
+ '(Get-CimInstance Win32_Processor | Measure-Object -Property NumberOfCores -Sum).Sum' \
+ 2>/dev/null | tr -d '\r' | tail -n 1)
+ detection_source="Windows physical cores via PowerShell"
+ fi
+ if ! is_positive_job_count "$detected_jobs"; then
+ detected_jobs=""
+ detection_source=""
+ fi
+ if [ -z "$detected_jobs" ] && command -v pwsh.exe >/dev/null 2>&1; then
+ detected_jobs=$(pwsh.exe -NoProfile -NonInteractive -Command \
+ '(Get-CimInstance Win32_Processor | Measure-Object -Property NumberOfCores -Sum).Sum' \
+ 2>/dev/null | tr -d '\r' | tail -n 1)
+ detection_source="Windows physical cores via PowerShell 7"
+ fi
+ if ! is_positive_job_count "$detected_jobs"; then
+ detected_jobs=""
+ detection_source=""
+ fi
+ if [ -z "$detected_jobs" ] && [ -n "${NUMBER_OF_PROCESSORS:-}" ]; then
+ # This fallback counts logical processors when PowerShell is unavailable or
+ # its CIM query is denied by local policy or sandboxing.
+ detected_jobs="$NUMBER_OF_PROCESSORS"
+ detection_source="logical processors via NUMBER_OF_PROCESSORS"
+ fi
+ if ! is_positive_job_count "$detected_jobs"; then
+ detected_jobs=""
+ detection_source=""
+ fi
+ if [ -z "$detected_jobs" ] && command -v nproc >/dev/null 2>&1; then
+ # nproc is the usual logical-processor fallback in Unix-like environments.
+ detected_jobs=$(nproc 2>/dev/null || true)
+ detection_source="logical processors via nproc"
+ fi
+ if ! is_positive_job_count "$detected_jobs"; then
+ detected_jobs=""
+ detection_source=""
+ fi
+ if [ -z "$detected_jobs" ] && command -v getconf >/dev/null 2>&1; then
+ # getconf is more widely standardized, but it is not present in every
+ # minimal Git Bash installation and also reports online logical processors.
+ detected_jobs=$(getconf _NPROCESSORS_ONLN 2>/dev/null || true)
+ detection_source="logical processors via getconf"
+ fi
+
+ # Accept only a positive decimal integer. If detection is unavailable or
+ # malformed, use two jobs: this preserves some parallelism without restoring
+ # the unbounded process burst that caused ARM GCC to crash on Windows.
+ if ! is_positive_job_count "$detected_jobs"; then
+ detected_jobs=2
+ log_warn "Could not determine a valid Windows processor count; defaulting to $detected_jobs make jobs."
+ fi
+
+ MAKE_JOBS="-j$detected_jobs"
+ export MAKE_JOBS
+ log_info "Using bounded Windows build parallelism from ${detection_source:-fallback}: MAKE_JOBS=$MAKE_JOBS"
+}
+
###############################################################################
# OS-specific configuration
#
@@ -303,25 +394,24 @@ elif [[ "$OSTYPE" == "darwin"* ]]; then
elif [[ "$OSTYPE" == "cygwin" ]]; then
log_info "Detected platform: Cygwin on Windows (OSTYPE=$OSTYPE)"
- # Under Cygwin, aggressive parallel builds (-j) are known to cause blocking
- # or instability on some setups. We therefore disable it by default.
- export MAKE_JOBS="-j"
+ # Limit make to the detected logical processor count. GNU Make's bare "-j"
+ # would otherwise permit an unlimited number of concurrent compiler jobs.
+ set_windows_make_jobs
export_clang_cross_env 0
elif [[ "$OSTYPE" == "msys"* ]]; then
log_info "Detected platform: MSYS / MinGW on Windows (OSTYPE=$OSTYPE)"
- # Same reasoning as for Cygwin: parallel make can be problematic; keep it off
- # by default to avoid hard-to-debug hangs.
- export MAKE_JOBS="-j"
+ # Git Bash normally reaches this branch. Use all detected logical processors
+ # while keeping the number of concurrent compiler processes bounded.
+ set_windows_make_jobs
export_clang_cross_env 0
elif [[ "$OSTYPE" == "win32" ]]; then
# This branch is rarely seen with modern bash installations. It is kept
# only as a diagnostic in case OSTYPE is literally "win32".
log_info "Detected platform: Windows (OSTYPE=$OSTYPE)"
- log_info "No default configuration implemented for plain win32."
- export MAKE_JOBS="-j"
+ set_windows_make_jobs
export_clang_cross_env 0
elif [[ "$OSTYPE" == "freebsd"* ]]; then
diff --git a/scripts/_setup_trice_environment.sh b/scripts/_setup_trice_environment.sh
index 7f5ccef00..b26ed489e 100755
--- a/scripts/_setup_trice_environment.sh
+++ b/scripts/_setup_trice_environment.sh
@@ -1,30 +1,44 @@
-#!/bin/bash
+#!/usr/bin/env bash
# file name: _setup_trice_environment.sh
TRICE_TIL_JSON=${TRICE_TIL_JSON:-./demoTIL.json}
TRICE_LI_JSON=${TRICE_LI_JSON:-./demoLI.json}
-TRICE_LI_PATH_GENERATION=${TRICE_LI_PATH_GENERATION:-relative}
+TRICE_LI_ROOT=${TRICE_LI_ROOT:-.}
+TRICE_BIND_DIR=${TRICE_BIND_DIR:-./build/triceIDs}
+TRICE_ID_OPTIONS=${TRICE_ID_OPTIONS:-"-IDMin 13000 -IDMax 16383"}
# trice command line common part
-TRICE_DEFAULTS+="-i ${TRICE_TIL_JSON} " # Use a common til.json for all examples and tests.
-TRICE_DEFAULTS+="-li ${TRICE_LI_JSON} " # Use a common li.json for all examples and tests.
-TRICE_DEFAULTS+="-liPath ${TRICE_LI_PATH_GENERATION} " # Select the legacy File representation generated in li.json.
-#TRICE_DEFAULTS+="-cache " # Do not forget to create ~/.trice/cache folder, if the Trice cache should work or disable this line.
+if [ -z "${TRICE_DEFAULTS:-}" ]; then
+ TRICE_DEFAULTS+="-i ${TRICE_TIL_JSON} " # Use a common til.json for all examples and tests.
+ TRICE_DEFAULTS+="-li ${TRICE_LI_JSON} " # Use a common li.json for all examples and tests.
+ TRICE_DEFAULTS+="-liRoot ${TRICE_LI_ROOT} " # Store portable location paths relative to this root.
+ #TRICE_DEFAULTS+="-cache " # Create ~/.trice/cache before enabling this line.
+fi
-# trice user aliases
-TRICE_ALIASES+="-alias CUSTOM_PRINT "
-TRICE_ALIASES+="-salias CUSTOM_ASSERT "
-TRICE_ALIASES+="-exclude ./examples/G0B1_inst/Core/Inc/triceCustomAliases.h "
-TRICE_ALIASES+="-exclude ./_test/aliasassert_dblB_de_tcobs_ua/triceConfig.h "
-TRICE_ALIASES+="-alias printi "
-TRICE_ALIASES+="-salias prints "
-TRICE_ALIASES+="-exclude ./_test/alias_dblB_de_tcobs_ua/triceConfig.h "
+# Source exclusions are kept separately so the safe re-migration helper can
+# reuse the exact ownership scope without having to interpret alias options.
+if [ -z "${TRICE_EXCLUDES:-}" ]; then
+ TRICE_EXCLUDES+="-exclude ./examples/G0B1_inst/Core/Inc/triceCustomAliases.h "
+ TRICE_EXCLUDES+="-exclude ./_test/aliasassert_dblB_de_tcobs_ua/triceConfig.h "
+ TRICE_EXCLUDES+="-exclude ./_test/alias_dblB_de_tcobs_ua/triceConfig.h "
+fi
+
+# trice user aliases and their shared source exclusions
+if [ -z "${TRICE_ALIASES:-}" ]; then
+ TRICE_ALIASES+="-alias CUSTOM_PRINT "
+ TRICE_ALIASES+="-salias CUSTOM_ASSERT "
+ TRICE_ALIASES+="-alias printi "
+ TRICE_ALIASES+="-salias prints "
+ TRICE_ALIASES+="${TRICE_EXCLUDES}"
+fi
# trice user project files
-TRICE_PRJ_FILES+="-src ./_test "
-TRICE_PRJ_FILES+="-src ./examples/exampleData "
-TRICE_PRJ_FILES+="-src ./examples/F030_inst/Core "
-TRICE_PRJ_FILES+="-src ./examples/G0B1_inst/Core "
-TRICE_PRJ_FILES+="-src ./examples/L432_inst/Core "
-TRICE_PRJ_FILES+="-src ./examples/DemoData_Trice "
+if [ -z "${TRICE_PRJ_FILES:-}" ]; then
+ TRICE_PRJ_FILES+="-src ./_test "
+ TRICE_PRJ_FILES+="-src ./examples/exampleData "
+ TRICE_PRJ_FILES+="-src ./examples/F030_inst/Core "
+ TRICE_PRJ_FILES+="-src ./examples/G0B1_inst/Core "
+ TRICE_PRJ_FILES+="-src ./examples/L432_inst/Core "
+ TRICE_PRJ_FILES+="-src ./examples/DemoData_Trice "
+fi
diff --git a/scripts/_testAll_00_common.sh b/scripts/_testAll_00_common.sh
index 915199d24..d7b63ad6a 100755
--- a/scripts/_testAll_00_common.sh
+++ b/scripts/_testAll_00_common.sh
@@ -23,6 +23,13 @@
set -u
+# A replaced Go installation can leave an inherited GOROOT pointing at a
+# directory that no longer exists. Preserve valid custom toolchains, but let
+# the selected go executable discover its own root when that override is stale.
+if [ -n "${GOROOT:-}" ] && [ ! -d "$GOROOT" ]; then
+ unset GOROOT
+fi
+
# ROOT points to the repository root. The helper scripts themselves live in
# ./scripts/, so derive the project root from the parent directory.
SCRIPTS_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
diff --git a/scripts/_testAll_02b_TargetCodeLinting.sh b/scripts/_testAll_02b_TargetCodeLinting.sh
index c78c28016..d01bb0c4a 100755
--- a/scripts/_testAll_02b_TargetCodeLinting.sh
+++ b/scripts/_testAll_02b_TargetCodeLinting.sh
@@ -13,6 +13,8 @@ SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/_testAll_00_common.sh"
main() {
+ local cppcheck_bin
+ local cppcheck_help
local verbose=0
for arg in "$@"; do
if [ "$arg" = "--verbose" ]; then
@@ -27,6 +29,27 @@ main() {
exit 0
fi
+ # Resolve the same cppcheck executable shape that _lint_c_code.sh accepts so
+ # this step can print the compatibility hint once before spawning profiles.
+ if has_command cppcheck; then
+ cppcheck_bin="$(command -v cppcheck)"
+ else
+ cppcheck_bin="/c/Program Files/Cppcheck/cppcheck.exe"
+ fi
+
+ # Older cppcheck releases lack --check-level. The helper keeps running without
+ # it; this exported flag prevents one duplicate hint per lint profile. Avoid
+ # a short-circuiting grep pipeline so an inherited pipefail cannot invert the
+ # feature result on Linux, macOS, or Windows Bash environments.
+ cppcheck_help="$("$cppcheck_bin" --help 2>&1 || true)"
+ case "$cppcheck_help" in
+ *--check-level*) ;;
+ *)
+ log "Hint: cppcheck does not support --check-level; running without exhaustive checking."
+ export TRICE_CPPCHECK_CHECK_LEVEL_HINT_SHOWN=1
+ ;;
+ esac
+
run_profile() {
if [ "$verbose" -eq 1 ]; then
log "$(printf 'Lint profile: buffer=%-6s output=%-8s endian=%-6s builtin=%s xtea=%s' "$2" "$4" "$6" "$8" "${10}")"
diff --git a/scripts/_testAll_03_BuildTriceTool.sh b/scripts/_testAll_03_BuildTriceTool.sh
index d70c07a3c..d1d3cd250 100755
--- a/scripts/_testAll_03_BuildTriceTool.sh
+++ b/scripts/_testAll_03_BuildTriceTool.sh
@@ -31,7 +31,10 @@ main() {
fi
goexe="$(go env GOEXE)"
log "TRICE_BIN_DIR: ${TRICE_BIN_DIR:-unset}"
- run_cmd "$SCRIPTS_DIR/buildTriceTool.sh" --target-file "$TRICE_BIN_DIR/trice${goexe}" --force --no-backup --silent || {
+ # The logfile is an existing regular file, so it is a deterministic invalid
+ # GOROOT. This verifies that the standalone build helper ignores stale
+ # overrides instead of depending on the test harness to sanitize them.
+ run_cmd env GOROOT="$LOGFILE" "$SCRIPTS_DIR/buildTriceTool.sh" --target-file "$TRICE_BIN_DIR/trice${goexe}" --force --no-backup --silent || {
log "FAIL: buildTriceTool.sh failed"
exit 1
}
diff --git a/scripts/_testAll_04_FormatManual.sh b/scripts/_testAll_04_FormatManual.sh
index fbfad820c..076c969ad 100755
--- a/scripts/_testAll_04_FormatManual.sh
+++ b/scripts/_testAll_04_FormatManual.sh
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
#
-# Step 04: Checks the Trice User Manual formatting.
+# Step 04: Checks the Trice User Manual formatting when mdtoc is installed.
#
# Direct invocation:
# - ./_testAll_04_FormatManual.sh
@@ -14,6 +14,11 @@ source "$SCRIPT_DIR/_testAll_00_common.sh"
main() {
init_logfile
+ if ! has_command mdtoc; then
+ log "MISSING TOOL: mdtoc"
+ log "SKIP: mdtoc not installed"
+ exit 0
+ fi
run_cmd "$SCRIPTS_DIR/_refresh_trice_user_manual.sh" check || {
log "FAIL: _refresh_trice_user_manual.sh check failed"
exit 1
diff --git a/scripts/_testAll_07_GoCoverage.sh b/scripts/_testAll_07_GoCoverage.sh
index 314c350d2..4e3fe8cef 100755
--- a/scripts/_testAll_07_GoCoverage.sh
+++ b/scripts/_testAll_07_GoCoverage.sh
@@ -105,13 +105,23 @@ print_global_coverage_hotspots() {
main() {
local coverage_file="./temp/log/coverage.out"
local goexe
+ local go_toolchain
init_logfile
if ! has_command go; then
log "MISSING TOOL: go"
log "SKIP: Go not installed"
exit 0
fi
- run_cmd go test ./... -covermode=atomic -coverprofile="$coverage_file" -coverpkg=./... || {
+ # Keep nested Go commands on the toolchain selected for this module. Go's
+ # coverage implementation invokes "go tool covdata" for packages without
+ # tests; an older PATH launcher must not combine itself with the selected
+ # toolchain's GOROOT after an automatic toolchain switch.
+ go_toolchain="$(go env GOVERSION)" || {
+ log "FAIL: unable to determine the selected Go toolchain"
+ exit 1
+ }
+ log "Go coverage toolchain: $go_toolchain"
+ run_cmd env "GOTOOLCHAIN=$go_toolchain" go test ./... -covermode=atomic -coverprofile="$coverage_file" -coverpkg=./... || {
log "FAIL: go coverage test failed"
exit 1
}
diff --git a/scripts/_testAll_08_RuntimePrepare.sh b/scripts/_testAll_08_RuntimePrepare.sh
index db1397d13..9a84cf04c 100755
--- a/scripts/_testAll_08_RuntimePrepare.sh
+++ b/scripts/_testAll_08_RuntimePrepare.sh
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
#
-# Step 08: Writes environment information to the log and prepares the shared JSON files.
+# Step 08: Writes environment information and prepares the canonical Bind state.
#
# Direct invocation:
# - ./_testAll_08_RuntimePrepare.sh
@@ -43,13 +43,12 @@ main() {
log "MISSING TOOL: trice"
log "WARN: trice not found in PATH"
fi
- run_cmd "$ROOT/trice_cleanIDs_in_examples_and_test_folder.sh" || {
- log "FAIL: initial clean IDs failed"
- exit 1
- }
- log "Keeping shared json files and reusing existing ID history"
- run_cmd "$SCRIPTS_DIR/_renewIDs_in_examples_and_refresh_test_folder.sh" keepHistory || {
- log "FAIL: renew IDs failed"
+
+ # Both selections start from the checked-in Bind state. Full-mode Legacy
+ # checks run later in isolated or transactionally restored test workflows.
+ # Keeping ID renewal out of this shared preparation preserves stable file keys.
+ run_cmd "$ROOT/trice_bindIDs_in_examples_and_test_folder.sh" || {
+ log "FAIL: preparing canonical Bind state failed"
exit 1
}
}
diff --git a/scripts/_testAll_09b_BindTests.sh b/scripts/_testAll_09b_BindTests.sh
new file mode 100755
index 000000000..28ff5ded5
--- /dev/null
+++ b/scripts/_testAll_09b_BindTests.sh
@@ -0,0 +1,151 @@
+#!/usr/bin/env bash
+#
+# Step 09b: Runs Trice bind generator, target, PoC, and verified preprocessor checks.
+#
+# Direct invocation:
+# - ./scripts/_testAll_09b_BindTests.sh
+#
+# Log file:
+# - ./temp/log/_testAll_09b_BindTests.log
+
+set -u
+SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
+# shellcheck source=./_testAll_00_common.sh
+source "$SCRIPT_DIR/_testAll_00_common.sh"
+
+# has_bind_compilers reports whether both required language frontends are available.
+has_bind_compilers() {
+ local c_found=0
+ local cpp_found=0
+ local compiler
+ for compiler in cc gcc clang; do
+ if has_command "$compiler"; then
+ c_found=1
+ break
+ fi
+ done
+ for compiler in c++ g++ clang++; do
+ if has_command "$compiler"; then
+ cpp_found=1
+ break
+ fi
+ done
+ [ "$c_found" -eq 1 ] && [ "$cpp_found" -eq 1 ]
+}
+
+# run_verified_bind_pocs preserves the reference PoCs byte-for-byte. MinGW
+# executables write CRLF to redirected stdout, so only the Windows comparison
+# ignores that platform text-mode difference through a temporary diff shim.
+run_verified_bind_pocs() {
+ local poc_runner="$ROOT/experiments/TriceBind/30_Preprocessor_Verification/run_all.sh"
+ local shim_dir=""
+ local system_diff=""
+ local status=0
+
+ case "$(uname -s)" in
+ MINGW* | MSYS* | CYGWIN*)
+ system_diff="$(command -v diff)" || return 1
+ shim_dir="$(mktemp -d "$TRICE_TMP_DIR/trice-poc-diff.XXXXXX")" || return 1
+ printf '%s\n' \
+ '#!/usr/bin/env bash' \
+ 'exec "$TRICE_SYSTEM_DIFF" --strip-trailing-cr "$@"' >"$shim_dir/diff"
+ chmod +x "$shim_dir/diff"
+ run_cmd env TRICE_SYSTEM_DIFF="$system_diff" PATH="$shim_dir:$PATH" "$poc_runner" || status=$?
+ case "$shim_dir" in
+ "$TRICE_TMP_DIR"/trice-poc-diff.*) rm -rf -- "$shim_dir" ;;
+ *) log "WARN: retained unexpected PoC diff shim: $shim_dir" ;;
+ esac
+ return "$status"
+ ;;
+ *) run_cmd "$poc_runner" ;;
+ esac
+}
+
+main() {
+ local poc_dir="$ROOT/experiments/TriceBind/40_MVP_Generator"
+ local poc_build="$poc_dir/build"
+ local poc_executable="$poc_build/bin/PoC_bind_generator"
+ local go_executable
+
+ init_logfile
+ if ! has_command go; then
+ log "MISSING TOOL: go"
+ log "SKIP: Trice bind tests require Go"
+ exit 0
+ fi
+ if ! has_bind_compilers; then
+ log "MISSING TOOL: compatible C and C++ compilers"
+ log "SKIP: Trice bind target integration requires GCC- or Clang-compatible frontends"
+ exit 0
+ fi
+ # Pass the executable selected through PATH back to CMake on every configure
+ # run. This replaces an obsolete find_program cache entry after Go was moved,
+ # replaced, or installed at a different path on another supported host.
+ go_executable="$(command -v go)" || {
+ log "FAIL: cannot resolve the Go executable from PATH"
+ exit 1
+ }
+
+ run_cmd env TRICE_BIND_INTEGRATION=1 go test ./internal/id \
+ -run '^TestBind(GeneratedTargetCompilesCAndCPP|CanonicalTriceCheckGeneratesCompleteSidecar|MVP2RebaseCompilesCAndCPP|MVP2CounterGuardsAndGeneratedInvariants|MVP2RebaseEmitsStableRuntimeIDs)$' \
+ -count=1 || {
+ log "FAIL: generated target, canonical, or MVP2 Trice bind integration failed"
+ exit 1
+ }
+
+ run_verified_bind_pocs || {
+ log "FAIL: verified Trice bind preprocessor mechanisms regressed"
+ exit 1
+ }
+
+ run_cmd "$ROOT/experiments/TriceBind/60_MVP2_Local_Counter_Rebase/run.sh" || {
+ log "FAIL: verified local-counter Rebase PoC regressed"
+ exit 1
+ }
+
+ if ! has_command cmake; then
+ log "MISSING TOOL: cmake"
+ log "SKIP: Generator PoC build not installed; generator and target integration already passed"
+ exit 0
+ fi
+
+ run_cmd cmake -S "$poc_dir" -B "$poc_build" \
+ -DCMAKE_BUILD_TYPE=Debug \
+ -DCMAKE_RUNTIME_OUTPUT_DIRECTORY="$poc_build/bin" \
+ -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG="$poc_build/bin" \
+ -DGO_EXECUTABLE:FILEPATH="$go_executable" || {
+ log "FAIL: cannot configure experiments/TriceBind/40_MVP_Generator"
+ exit 1
+ }
+ run_cmd cmake --build "$poc_build" --config Debug --parallel || {
+ log "FAIL: cannot build experiments/TriceBind/40_MVP_Generator"
+ exit 1
+ }
+
+ if [ -f "$poc_executable.exe" ]; then
+ poc_executable="$poc_executable.exe"
+ fi
+ if [ ! -f "$poc_executable" ]; then
+ log "FAIL: expected PoC executable at $poc_build/bin/PoC_bind_generator[.exe]"
+ log "Generated build entries:"
+ find "$poc_build" -type f -name 'PoC_bind_generator*' -print | log_pipe
+ exit 1
+ fi
+
+ run_cmd cmake -E chdir "$poc_dir" "$poc_executable" || {
+ log "FAIL: generated bind PoC executable failed"
+ exit 1
+ }
+ run_cmd cmake -E chdir "$poc_dir" go run ../../../cmd/trice log \
+ -p FILEBUFFER -args log.bin -pf TCOBS -d16 -prefix off -hs off \
+ -i til.json -li li.json -color none || {
+ log "FAIL: generated bind PoC log could not be decoded"
+ exit 1
+ }
+ if grep_log 'ERROR:' "$LOGFILE"; then
+ log "FAIL: generated bind PoC decoder reported malformed data"
+ exit 2
+ fi
+}
+
+main "$@"
diff --git a/scripts/_testAll_09c_BindWorkflowTests.sh b/scripts/_testAll_09c_BindWorkflowTests.sh
new file mode 100755
index 000000000..ba32e2ced
--- /dev/null
+++ b/scripts/_testAll_09c_BindWorkflowTests.sh
@@ -0,0 +1,304 @@
+#!/usr/bin/env bash
+#
+# Step 09c: Exercises public Bind workflows and transactional state restoration.
+
+set -u
+
+SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
+# shellcheck source=./_testAll_00_common.sh
+source "$SCRIPT_DIR/_testAll_00_common.sh"
+
+fixture_abs=""
+fixture_rel=""
+project_abs=""
+baseline_abs=""
+state_worker_mode=""
+
+# cleanup_fixture removes only the uniquely named test directory created below.
+cleanup_fixture() {
+ if [ -z "$fixture_abs" ]; then
+ return 0
+ fi
+ case "$fixture_abs" in
+ "$ROOT"/temp/bind-workflow.*) rm -rf -- "$fixture_abs" ;;
+ *) log "WARN: retained unexpected workflow fixture: $fixture_abs" ;;
+ esac
+}
+
+# fail_workflow records one actionable assertion failure.
+fail_workflow() {
+ log "FAIL: $*"
+ return 1
+}
+
+# run_silent_workflow requires a successful public state-transition wrapper to
+# emit no stdout or stderr. On failure it retains the complete captured output
+# so the test log remains actionable.
+run_silent_workflow() {
+ local output
+ local status=0
+
+ log "+ $* (expect silent success)"
+ output="$("$@" 2>&1)" || status=$?
+ if [ "$status" -ne 0 ]; then
+ [ -z "$output" ] || log "$output"
+ fail_workflow "silent workflow failed with exit code $status: $*"
+ return 1
+ fi
+ if [ -n "$output" ]; then
+ log "$output"
+ fail_workflow "successful workflow emitted output: $*"
+ return 1
+ fi
+}
+
+# create_fixture builds one isolated project controlled through the public
+# repository workflow variables. Runtime files stay below ignored ./temp.
+create_fixture() {
+ fixture_abs="$(mktemp -d "$ROOT/temp/bind-workflow.XXXXXX")" || return 1
+ fixture_rel="${fixture_abs#"$ROOT/"}"
+ project_abs="$fixture_abs/project"
+ baseline_abs="$fixture_abs/baseline"
+ mkdir -p "$project_abs" "$baseline_abs" || return 1
+
+ printf '%s\n' \
+ '// SPDX-License-Identifier: MIT' \
+ '#include "trice.h"' \
+ 'static inline void fixture_log(int value) {' \
+ ' // trice("msg:commented\n");' \
+ ' trice("msg:inline=%d\n", value);' \
+ '}' \
+ 'int main(void) {' \
+ ' fixture_log(1);' \
+ ' trice("msg:main\n");' \
+ ' return 0;' \
+ '}' >"$project_abs/main.c"
+
+ printf '%s\n' \
+ '// SPDX-License-Identifier: MIT' \
+ '#ifndef BIND_WORKFLOW_TRICE_CONFIG_H_' \
+ '#define BIND_WORKFLOW_TRICE_CONFIG_H_' \
+ '#define TRICE_CLEAN 1' \
+ '#define TRICE_BUFFER TRICE_STACK_BUFFER' \
+ '#define TRICE_DIRECT_OUTPUT 1' \
+ '#define TRICE_DEFERRED_OUTPUT 0' \
+ '#define TRICE_DIRECT_AUXILIARY8 1' \
+ '#define TRICE_CYCLE_COUNTER 0' \
+ '#endif' >"$project_abs/triceConfig.h"
+
+ printf '%s\n' \
+ '// SPDX-License-Identifier: MIT' \
+ '#ifndef BIND_WORKFLOW_EXCLUDED_H_' \
+ '#define BIND_WORKFLOW_EXCLUDED_H_' \
+ '#endif' >"$project_abs/excluded.h"
+ printf '{}\n' >"$project_abs/til.json"
+ printf '{}\n' >"$project_abs/li.json"
+
+ cp "$project_abs/main.c" "$baseline_abs/main.c"
+ cp "$project_abs/triceConfig.h" "$baseline_abs/triceConfig.h"
+ cp "$project_abs/excluded.h" "$baseline_abs/excluded.h"
+ cp "$project_abs/til.json" "$baseline_abs/til.json"
+ cp "$project_abs/li.json" "$baseline_abs/li.json"
+
+ unset TRICE_DEFAULTS
+ export TRICE_TIL_JSON="$fixture_rel/project/til.json"
+ export TRICE_LI_JSON="$fixture_rel/project/li.json"
+ export TRICE_LI_ROOT="."
+ export TRICE_BIND_DIR="$fixture_rel/project/bind"
+ export TRICE_ID_OPTIONS="-IDMin 1000 -IDMax 1010 -IDMethod upward"
+ export TRICE_EXCLUDES="-exclude $fixture_rel/project/excluded.h "
+ export TRICE_ALIASES="$TRICE_EXCLUDES"
+ export TRICE_PRJ_FILES="-src $fixture_rel/project "
+ export TRICE_STATE_TEST_SOURCE="$fixture_rel/project/main.c"
+}
+
+# reset_fixture restores the exact initial fixture without relying on a Trice
+# transition, making every state-restoration case independent.
+reset_fixture() {
+ cp "$baseline_abs/main.c" "$project_abs/main.c"
+ cp "$baseline_abs/triceConfig.h" "$project_abs/triceConfig.h"
+ cp "$baseline_abs/excluded.h" "$project_abs/excluded.h"
+ cp "$baseline_abs/til.json" "$project_abs/til.json"
+ cp "$baseline_abs/li.json" "$project_abs/li.json"
+ rm -rf -- "$project_abs/bind"
+}
+
+# verify_fixture_restored proves byte-exact source/list restoration and absence
+# of artifacts that did not exist when the child wrapper started.
+verify_fixture_restored() {
+ cmp "$baseline_abs/main.c" "$project_abs/main.c" >/dev/null || fail_workflow "main.c was not restored"
+ cmp "$baseline_abs/triceConfig.h" "$project_abs/triceConfig.h" >/dev/null || fail_workflow "triceConfig.h was not restored"
+ cmp "$baseline_abs/excluded.h" "$project_abs/excluded.h" >/dev/null || fail_workflow "excluded.h was not restored"
+ cmp "$baseline_abs/til.json" "$project_abs/til.json" >/dev/null || fail_workflow "til.json was not restored"
+ cmp "$baseline_abs/li.json" "$project_abs/li.json" >/dev/null || fail_workflow "li.json was not restored"
+ [ ! -e "$project_abs/bind" ] || fail_workflow "initially absent bind directory was not removed"
+}
+
+# test_cli_help executes the required public long and short help forms against
+# the freshly built repository binary.
+test_cli_help() {
+ run_cmd trice bind -h || return 1
+ run_cmd trice bind --help || return 1
+ run_cmd trice b -h || return 1
+ run_cmd trice b --help || return 1
+ run_cmd trice i -h || return 1
+ if grep_log 'flag: help requested' "$LOGFILE"; then
+ fail_workflow "CLI help emitted 'flag: help requested'"
+ return 1
+ fi
+ grep -q -- '-bindDir' "$LOGFILE" || fail_workflow "Bind help omits -bindDir"
+ grep -q -- '-defaultStampSize' "$LOGFILE" || fail_workflow "Bind help omits shared Insert options"
+}
+
+# verify_bound_fixture checks the externally visible Bound-state invariants.
+verify_bound_fixture() {
+ grep -q 'trice-bind: keep as last include' "$project_abs/main.c" || fail_workflow "Bind did not add its owner include"
+ if grep -Eq '(iD|Id|ID)[[:space:]]*\([[:space:]]*[1-9][0-9]*' "$project_abs/main.c"; then
+ fail_workflow "Bound source contains a positive inserted ID"
+ return 1
+ fi
+ [ -d "$project_abs/bind" ] || fail_workflow "Bind directory was not created"
+ find "$project_abs/bind" -type f -name '*.h' -print | grep -q . || fail_workflow "No generated sidecar was created"
+ grep -q '"Type"' "$project_abs/til.json" || fail_workflow "til.json has no generated entries"
+ grep -q 'main.c' "$project_abs/li.json" || fail_workflow "li.json has no fixture location"
+}
+
+# test_public_workflows covers migration, Bind idempotence, safe re-migration,
+# re-migration idempotence, and the complete return to Inserted.
+test_public_workflows() {
+ local inserted="$fixture_abs/inserted"
+ local bound="$fixture_abs/bound-snapshot"
+ local remigrated="$fixture_abs/remigrated"
+
+ reset_fixture
+ mkdir -p "$inserted" "$bound" "$remigrated"
+
+ run_silent_workflow "$ROOT/trice_insertIDs_in_examples_and_test_folder.sh" || return 1
+ grep -Eq '(iD|Id|ID)[[:space:]]*\([[:space:]]*[1-9][0-9]*' "$project_abs/main.c" || return 1
+ cp "$project_abs/main.c" "$inserted/main.c"
+ cp "$project_abs/triceConfig.h" "$inserted/triceConfig.h"
+ cp "$project_abs/til.json" "$inserted/til.json"
+ cp "$project_abs/li.json" "$inserted/li.json"
+
+ run_silent_workflow "$ROOT/trice_cleanIDs_in_examples_and_test_folder.sh" || return 1
+ run_silent_workflow "$ROOT/trice_bindIDs_in_examples_and_test_folder.sh" || return 1
+ verify_bound_fixture || return 1
+ cmp "$inserted/til.json" "$project_abs/til.json" >/dev/null || fail_workflow "Inserted and Bound TIL content differs"
+
+ cp "$project_abs/main.c" "$bound/main.c"
+ cp "$project_abs/triceConfig.h" "$bound/triceConfig.h"
+ cp "$project_abs/til.json" "$bound/til.json"
+ cp "$project_abs/li.json" "$bound/li.json"
+ cp -R "$project_abs/bind" "$bound/bind"
+ run_silent_workflow "$ROOT/trice_bindIDs_in_examples_and_test_folder.sh" || return 1
+ cmp "$bound/main.c" "$project_abs/main.c" >/dev/null || fail_workflow "Second Bind changed main.c"
+ cmp "$bound/triceConfig.h" "$project_abs/triceConfig.h" >/dev/null || fail_workflow "Second Bind changed triceConfig.h"
+ cmp "$bound/til.json" "$project_abs/til.json" >/dev/null || fail_workflow "Second Bind changed til.json"
+ cmp "$bound/li.json" "$project_abs/li.json" >/dev/null || fail_workflow "Second Bind changed li.json"
+ diff -r "$bound/bind" "$project_abs/bind" >/dev/null || fail_workflow "Second Bind changed sidecar content"
+
+ # Clean after Bind is a supported mode switch, not a re-migration: owner
+ # includes and sidecars must survive until the explicit remigration step.
+ run_silent_workflow "$ROOT/trice_cleanIDs_in_examples_and_test_folder.sh" || return 1
+ grep -q 'trice-bind: keep as last include' "$project_abs/main.c" || fail_workflow "Clean removed the active Bind owner include"
+ find "$project_abs/bind" -type f -name '*.h' -print | grep -q . || fail_workflow "Clean removed generated sidecars"
+
+ run_silent_workflow "$ROOT/trice_remigrateBindToClean_in_examples_and_test_folder.sh" || return 1
+ if grep -q 'trice-bind: keep as last include' "$project_abs/main.c"; then
+ fail_workflow "Re-migration left an active owner include"
+ return 1
+ fi
+ if find "$project_abs/bind" -type f -name '*.h' -print 2>/dev/null | grep -q .; then
+ fail_workflow "Re-migration left generated sidecars"
+ return 1
+ fi
+ cmp "$inserted/li.json" "$project_abs/li.json" >/dev/null || fail_workflow "Re-migration did not restore Clean-source locations"
+ cp "$project_abs/main.c" "$remigrated/main.c"
+ cp "$project_abs/triceConfig.h" "$remigrated/triceConfig.h"
+ run_silent_workflow "$ROOT/trice_remigrateBindToClean_in_examples_and_test_folder.sh" || return 1
+ cmp "$remigrated/main.c" "$project_abs/main.c" >/dev/null || fail_workflow "Second re-migration changed main.c"
+ cmp "$remigrated/triceConfig.h" "$project_abs/triceConfig.h" >/dev/null || fail_workflow "Second re-migration changed triceConfig.h"
+
+ run_silent_workflow "$ROOT/trice_insertIDs_in_examples_and_test_folder.sh" || return 1
+ cmp "$inserted/main.c" "$project_abs/main.c" >/dev/null || fail_workflow "Re-migrated Insert source differs"
+ cmp "$inserted/triceConfig.h" "$project_abs/triceConfig.h" >/dev/null || fail_workflow "Re-migrated Insert config differs"
+ cmp "$inserted/til.json" "$project_abs/til.json" >/dev/null || fail_workflow "Re-migrated Insert til.json differs"
+ cmp "$inserted/li.json" "$project_abs/li.json" >/dev/null || fail_workflow "Re-migrated Insert li.json differs"
+}
+
+# state_worker mutates a managed file after preparation and then selects one of
+# the success, failure, SIGINT, or SIGTERM exits under test.
+state_worker() {
+ printf '%s\n' '/* state worker mutation */' >>"$ROOT/$TRICE_STATE_TEST_SOURCE"
+ case "$state_worker_mode" in
+ success) return 0 ;;
+ failure) return 23 ;;
+ INT) kill -INT "$$" ;;
+ TERM) kill -TERM "$$" ;;
+ *) return 99 ;;
+ esac
+}
+
+# state_child owns one real managed workflow. Its EXIT/signal trap is installed
+# by _trice_test_state.sh and therefore exercises production wrapper behavior.
+state_child() {
+ state_worker_mode="$1"
+ # shellcheck source=./_trice_test_state.sh
+ source "$SCRIPT_DIR/_trice_test_state.sh"
+ trice_test_run_managed_workflow bind none state_worker
+}
+
+# run_state_case checks the signal-compatible status and exact postcondition.
+run_state_case() {
+ local mode="$1"
+ local expected="$2"
+ local actual=0
+
+ reset_fixture
+ log "+ state restoration child: $mode"
+ "$SCRIPT_DIR/_testAll_09c_BindWorkflowTests.sh" --quiet --state-child "$mode" || actual=$?
+ if [ "$actual" -ne "$expected" ]; then
+ fail_workflow "state child $mode returned $actual, expected $expected"
+ return 1
+ fi
+ verify_fixture_restored
+}
+
+# test_state_restoration covers every exit class required by the specification.
+test_state_restoration() {
+ run_state_case success 0 || return 1
+ run_state_case failure 23 || return 1
+ run_state_case INT 130 || return 1
+ run_state_case TERM 143 || return 1
+}
+
+# main executes public integration tests after the repository tool build step.
+main() {
+ init_logfile
+ export LOGFILE
+ trap 'cleanup_fixture' EXIT
+
+ has_command go || {
+ fail_workflow "Go is required for public re-migration tests"
+ return 1
+ }
+ has_command trice || {
+ fail_workflow "the repository Trice binary is not available"
+ return 1
+ }
+ create_fixture || return 1
+ test_cli_help || return 1
+ test_public_workflows || return 1
+ test_state_restoration || return 1
+
+ cleanup_fixture
+ fixture_abs=""
+ trap - EXIT
+}
+
+if [ "${1:-}" = "--state-child" ]; then
+ state_child "${2:-missing}"
+ exit $?
+fi
+
+main "$@"
diff --git a/scripts/_testAll_10_PcTargetTests.sh b/scripts/_testAll_10_PcTargetTests.sh
index 7e47d3481..1b195297a 100755
--- a/scripts/_testAll_10_PcTargetTests.sh
+++ b/scripts/_testAll_10_PcTargetTests.sh
@@ -1,234 +1,32 @@
#!/usr/bin/env bash
#
-# Step 10: Runs the host-side CGO/PC target tests.
-#
-# Direct invocation:
-# - ./_testAll_10_PcTargetTests.sh
-# - ./_testAll_10_PcTargetTests.sh full
-#
-# Selection:
-# - direct invocation default: full test set under ./_test/...
-# - quick: only the smaller subset ./be_dblB_de_tcobs_ua/...
-# - full: the full test set under ./_test/...
-#
-# Log file:
-# - ./temp/log/_testAll_10_PcTargetTests.log
-#
-# Cleanup / Ctrl-C behavior:
-# - This script calls a helper script that runs `trice insert`.
-# - After the tests, this script calls a helper script that runs `trice clean`.
-# - If the user presses Ctrl-C after a successful insert, or if the tests fail,
-# this script should still try to run the clean helper.
-# - The cleanup is intentionally handled here, in this outer workflow script,
-# because this is the level that knows the complete sequence:
-#
-# insert -> test -> clean
-#
-# - The insert/clean helper scripts should stay simple. They should not contain
-# their own "clean after insert" trap logic, otherwise cleanup can happen too
-# early or twice.
+# Compatibility entry point for the complete PC target workflow matrix.
+# Direct invocation defaults to full, matching the historical script.
set -u
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
-source "$SCRIPT_DIR/_testAll_00_common.sh"
-
-select_pc_test_json_paths() {
- # The CGO tests read demoTIL.json and demoLI.json from the repository root.
- # Therefore the insert/clean helper scripts in this step must target the same
- # files by default, while still honoring explicit outer overrides.
- #
- if [ "${TRICE_TIL_JSON+x}" = "x" ]; then
- pc_trice_til_json="$TRICE_TIL_JSON"
- else
- pc_trice_til_json="./demoTIL.json"
- fi
-
- if [ "${TRICE_LI_JSON+x}" = "x" ]; then
- pc_trice_li_json="$TRICE_LI_JSON"
- else
- pc_trice_li_json="./demoLI.json"
- fi
-}
-
-cleanup_step() {
- # cleanup_step is used for both paths:
- #
- # 1. Normal successful execution:
- # insert -> tests -> cleanup_step 0
- #
- # 2. Abnormal execution:
- # insert -> test failure / Ctrl-C / SIGTERM -> cleanup_step
- #
- # The function always exits the script with the status passed as $1.
- # If no status was passed, it uses the previous command status ($?).
- #
- # This makes the function suitable for EXIT, INT and TERM traps, and also
- # allows calling it explicitly at the end of the normal test path.
-
- local status="${1:-$?}"
- local clean_status=0
-
- # Disable traps immediately.
- #
- # This prevents recursive cleanup if:
- # - cleanup itself triggers EXIT,
- # - the user presses Ctrl-C again while cleanup is already running,
- # - the clean helper exits with an error.
- trap - INT TERM EXIT
-
- # Run from repository root if possible. If this fails, continue cleanup anyway.
- # The "|| true" is intentional here: cleanup should make a best effort.
- cd "$ROOT" >/dev/null 2>&1 || true
-
- # Only run trice clean if trice insert has completed successfully before.
- #
- # This avoids running clean after an insert failure where the state is unclear.
- # Note: this cannot fully protect against Ctrl-C *inside* trice insert itself.
- # It only prevents unnecessary cleanup before a successful insert was observed
- # by this wrapper script.
- if [ "${ids_inserted:-0}" -eq 1 ]; then
- log "cleanup: running trice clean helper"
-
- TRICE_TIL_JSON="$pc_trice_til_json" \
- TRICE_LI_JSON="$pc_trice_li_json" \
- "$ROOT/trice_cleanIDs_in_examples_and_test_folder.sh" >>"$LOGFILE" 2>&1
- clean_status=$?
-
- if [ "$clean_status" -ne 0 ]; then
- log "WARN: cleanup: trice clean helper failed with exit code $clean_status"
-
- # If the test script was otherwise successful, a cleanup failure should
- # make the whole script fail.
- #
- # If the script was already failing, keep the original failure status so
- # the first/root cause is not hidden by the cleanup failure.
- if [ "$status" -eq 0 ]; then
- status="$clean_status"
- fi
- fi
-
- # Mark sources as no longer intentionally inserted from this script's point
- # of view. If clean failed, the warning above remains in the log.
- ids_inserted=0
- fi
-
- # Restore C_INCLUDE_PATH if this script changed it.
- #
- # During CGO tests this script may temporarily clear C_INCLUDE_PATH because
- # external include paths can influence host-side compilation. If it was
- # changed, restore the exact previous value here.
- if [ "${saved_c_include_path+x}" = "x" ]; then
- export C_INCLUDE_PATH="$saved_c_include_path"
- else
- # If this script did not save a previous value, make sure no artificial
- # empty value remains from this script.
- unset C_INCLUDE_PATH || true
- fi
-
- exit "$status"
-}
main() {
- local selected
-
- selected="$(get_mode "${1:-full}")"
- export SELECTED="$selected"
-
- select_pc_test_json_paths
- init_logfile
-
- # One central cleanup owner:
- #
- # - EXIT handles ordinary errors, for example a failed go test.
- # - INT handles Ctrl-C.
- # - TERM handles external termination, for example from CI or kill.
- #
- # Signal exit codes follow the common shell convention:
- # - 130 = interrupted by SIGINT
- # - 143 = terminated by SIGTERM
- trap 'cleanup_step $?' EXIT
- trap 'cleanup_step 130' INT
- trap 'cleanup_step 143' TERM
-
- if ! has_command go; then
- log "MISSING TOOL: go"
- log "SKIP: Go not installed"
- exit 0
- fi
-
- # Insert Trice IDs before running the host-side tests.
- #
- # The helper script is intentionally kept outside this file. This outer script
- # only tracks whether the helper completed successfully.
- run_cmd env \
- TRICE_TIL_JSON="$pc_trice_til_json" \
- TRICE_LI_JSON="$pc_trice_li_json" \
- "$ROOT/trice_insertIDs_in_examples_and_test_folder.sh" || {
- log "FAIL: insert IDs failed"
- exit 1
- }
-
- # From this point on, cleanup should try to run the clean helper.
- ids_inserted=1
-
- # Some environments export C_INCLUDE_PATH globally. That can unintentionally
- # affect CGO compilation. Clear it temporarily, but remember the old value so
- # cleanup_step can restore it on every exit path.
- if [ "${C_INCLUDE_PATH:-}" != "" ]; then
- saved_c_include_path="$C_INCLUDE_PATH"
- log "WARN: Clearing C_INCLUDE_PATH temporarily for CGO tests"
- export C_INCLUDE_PATH=""
- fi
-
- cd "$ROOT/_test" || {
- log "FAIL: cannot enter _test directory"
- exit 1
- }
-
- # triceCheck.c is included by the CGO package through generated_cgoPackage.go
- # from outside the package directories. The Go build cache can otherwise reuse
- # an older compiled TriceCheck switch while the expected //exp lines are read
- # from the freshly edited source file.
- run_cmd go clean -cache -testcache || {
- log "FAIL: go clean failed"
- exit 1
- }
-
- if [ "$selected" = "quick" ]; then
- run_cmd go test ./abc_rx_host/... ./abc_tx_host/... ./be_dblB_de_tcobs_ua/... || {
- log "FAIL: quick PC target tests failed"
- exit 1
- }
- else
- run_cmd go test ./... || {
- log "FAIL: full PC target tests failed"
- exit 1
- }
- fi
-
- if grep_log '(^|[[:space:]])FAIL([[:space:]:]|$)' "$LOGFILE"; then
- log "FAIL: PC target test log contains FAIL markers"
- exit 2
- fi
-
- # Normal successful path:
- #
- # Use the same cleanup function as the traps. This avoids duplicated clean
- # logic and makes the normal path behave like the error/Ctrl-C paths.
- cleanup_step 0
+ local selected="full"
+ local quiet=""
+ local failed=0
+ local arg
+
+ for arg in "$@"; do
+ case "$arg" in
+ --quiet) quiet="--quiet" ;;
+ quick | full) selected="$arg" ;;
+ *)
+ printf 'Unsupported PC target argument: %s\n' "$arg" >&2
+ return 2
+ ;;
+ esac
+ done
+
+ "$SCRIPT_DIR/_testAll_10a_PcTargetTests_insert.sh" ${quiet:+"$quiet"} "$selected" || failed=1
+ "$SCRIPT_DIR/_testAll_10b_PcTargetTests_bind.sh" ${quiet:+"$quiet"} "$selected" || failed=1
+ return "$failed"
}
-# State variables used by cleanup_step.
-#
-# ids_inserted:
-# - 0: Do not run trice clean.
-# - 1: trice insert completed successfully; cleanup should run trice clean.
-#
-# saved_c_include_path:
-# - intentionally not initialized here.
-# - if it exists, cleanup_step restores it.
-# - if it does not exist, cleanup_step unsets C_INCLUDE_PATH.
-ids_inserted=0
-
main "$@"
diff --git a/scripts/_testAll_10_PcTargetTests_common.sh b/scripts/_testAll_10_PcTargetTests_common.sh
new file mode 100755
index 000000000..5bb05d243
--- /dev/null
+++ b/scripts/_testAll_10_PcTargetTests_common.sh
@@ -0,0 +1,49 @@
+#!/usr/bin/env bash
+#
+# Shared PC/CGO test worker. ID preparation and restoration are intentionally
+# owned by the workflow-specific caller.
+
+set -euo pipefail
+
+SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
+ROOT="$(cd -- "$SCRIPT_DIR/.." && pwd)"
+
+# select_pc_mode keeps direct worker misuse deterministic while the public
+# wrappers continue to provide the established quick/full interface.
+select_pc_mode() {
+ case "${1:-full}" in
+ quick | full) printf '%s\n' "${1:-full}" ;;
+ *)
+ printf 'Unsupported PC target selection: %s\n' "${1:-}" >&2
+ return 2
+ ;;
+ esac
+}
+
+main() {
+ local selected
+
+ selected="$(select_pc_mode "${1:-full}")" || return 2
+ cd "$ROOT/_test" || {
+ printf 'FAIL: cannot enter _test directory\n' >&2
+ return 1
+ }
+
+ # triceCheck.c is included from outside package directories. Clearing both
+ # caches prevents an older C switch from being paired with current //exp data.
+ printf '+ go clean -cache -testcache\n'
+ go clean -cache -testcache
+
+ if [ "$selected" = "quick" ]; then
+ # The Ring-buffer bulk package validates message boundaries across one
+ # continuous stream and completes much faster than the former line-by-line
+ # double-buffer package. Full mode still covers every target package.
+ printf '+ go test ./abc_rx_host/... ./abc_tx_host/... ./ringB_de_multi_cobs_ua/...\n'
+ go test ./abc_rx_host/... ./abc_tx_host/... ./ringB_de_multi_cobs_ua/...
+ else
+ printf '+ go test ./...\n'
+ go test ./...
+ fi
+}
+
+main "$@"
diff --git a/scripts/_testAll_10a_PcTargetTests_insert.sh b/scripts/_testAll_10a_PcTargetTests_insert.sh
new file mode 100755
index 000000000..da48f47e8
--- /dev/null
+++ b/scripts/_testAll_10a_PcTargetTests_insert.sh
@@ -0,0 +1,26 @@
+#!/usr/bin/env bash
+#
+# Step 10a: Runs the shared PC target tests in the Inserted state.
+
+set -u
+
+SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
+# shellcheck source=./_testAll_00_common.sh
+source "$SCRIPT_DIR/_testAll_00_common.sh"
+# shellcheck source=./_trice_test_state.sh
+source "$SCRIPT_DIR/_trice_test_state.sh"
+
+main() {
+ local selected
+
+ selected="$(get_mode "${1:-full}")"
+ init_logfile
+ if ! has_command go; then
+ log "MISSING TOOL: go"
+ log "SKIP: Go not installed"
+ return 0
+ fi
+ trice_test_run_managed_workflow insert pc "$SCRIPT_DIR/_testAll_10_PcTargetTests_common.sh" "$selected"
+}
+
+main "$@"
diff --git a/scripts/_testAll_10b_PcTargetTests_bind.sh b/scripts/_testAll_10b_PcTargetTests_bind.sh
new file mode 100755
index 000000000..08db06645
--- /dev/null
+++ b/scripts/_testAll_10b_PcTargetTests_bind.sh
@@ -0,0 +1,26 @@
+#!/usr/bin/env bash
+#
+# Step 10b: Runs the shared PC target tests in the Bound state.
+
+set -u
+
+SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
+# shellcheck source=./_testAll_00_common.sh
+source "$SCRIPT_DIR/_testAll_00_common.sh"
+# shellcheck source=./_trice_test_state.sh
+source "$SCRIPT_DIR/_trice_test_state.sh"
+
+main() {
+ local selected
+
+ selected="$(get_mode "${1:-full}")"
+ init_logfile
+ if ! has_command go; then
+ log "MISSING TOOL: go"
+ log "SKIP: Go not installed"
+ return 0
+ fi
+ trice_test_run_managed_workflow bind pc "$SCRIPT_DIR/_testAll_10_PcTargetTests_common.sh" "$selected"
+}
+
+main "$@"
diff --git a/scripts/_testAll_11_ClangTranslation.sh b/scripts/_testAll_11_ClangTranslation.sh
index e46cecebf..cba8fcffd 100755
--- a/scripts/_testAll_11_ClangTranslation.sh
+++ b/scripts/_testAll_11_ClangTranslation.sh
@@ -1,62 +1,29 @@
#!/usr/bin/env bash
#
-# Step 11: Checks the clang translation for G0B1_inst.
-#
-# Direct invocation:
-# - ./_testAll_11_ClangTranslation.sh
-# If clang or arm-none-eabi-gcc are missing, the step is marked as SKIP/WARN
-# instead of failing immediately due to the environment.
-#
-# Log file:
-# - ./temp/log/_testAll_11_ClangTranslation.log
+# Compatibility entry point for both Clang ID-workflow variants.
set -u
+
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
-source "$SCRIPT_DIR/_testAll_00_common.sh"
main() {
- local rc
- init_logfile
- source "$SCRIPTS_DIR/_setup_build_environment.sh" >>"$LOGFILE" 2>&1 || {
- log "FAIL: _setup_build_environment.sh failed"
- exit 1
- }
- if ! has_command clang; then
- log "MISSING TOOL: clang"
- log "SKIP: clang not installed"
- exit 0
- fi
- if ! has_command arm-none-eabi-gcc; then
- log "MISSING TOOL: arm-none-eabi-gcc"
- log "WARN: arm-none-eabi-gcc not installed"
- log "SKIP: Skipping clang translation because ARM GCC libraries are needed"
- exit 0
- fi
- (
- cd "$ROOT/examples/G0B1_inst" || exit 1
- printf 'clang --version\n'
- clang --version
- make clean
- ./build_with_clang.sh
- ) 2>&1 | log_pipe
- rc=${PIPESTATUS[0]}
- if [ "$rc" -ne 0 ]; then
- log "FAIL: clang translation failed"
- exit "$rc"
- fi
+ local quiet=""
+ local failed=0
+ local arg
+
+ for arg in "$@"; do
+ case "$arg" in
+ --quiet) quiet="--quiet" ;;
+ *)
+ printf 'Unsupported Clang translation argument: %s\n' "$arg" >&2
+ return 2
+ ;;
+ esac
+ done
- # At this point the build already completed successfully.
- # We still scan the captured log for warnings or errors because the
- # underlying make/clang calls may report issues without returning a hard
- # non-zero exit code in every case.
- #
- # Intentionally do not filter specific warnings here.
- # The build environment is expected to be configured cleanly enough that the
- # Clang translation runs without known benign warnings.
- if grep_log '(warning|error)' "$LOGFILE"; then
- log "FAIL: clang translation reported warnings or errors"
- exit 2
- fi
+ "$SCRIPT_DIR/_testAll_11a_ClangTranslation_insert.sh" ${quiet:+"$quiet"} || failed=1
+ "$SCRIPT_DIR/_testAll_11b_ClangTranslation_bind.sh" ${quiet:+"$quiet"} || failed=1
+ return "$failed"
}
main "$@"
diff --git a/scripts/_testAll_11_ClangTranslation_common.sh b/scripts/_testAll_11_ClangTranslation_common.sh
new file mode 100755
index 000000000..cf4e79982
--- /dev/null
+++ b/scripts/_testAll_11_ClangTranslation_common.sh
@@ -0,0 +1,28 @@
+#!/usr/bin/env bash
+#
+# Shared G0B1 Clang translation worker. The caller owns the ID workflow.
+
+set -euo pipefail
+
+SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
+ROOT="$(cd -- "$SCRIPT_DIR/.." && pwd)"
+
+main() {
+ : "${LOGFILE:?LOGFILE must be exported by the Clang workflow wrapper}"
+ # shellcheck source=./_setup_build_environment.sh
+ source "$SCRIPT_DIR/_setup_build_environment.sh"
+ cd "$ROOT/examples/G0B1_inst" || return 1
+ printf '+ clang --version\n'
+ clang --version
+ printf '+ make clean\n'
+ make clean
+ printf '+ ./build_with_clang.sh\n'
+ ./build_with_clang.sh
+
+ if grep -Eiq '(warning|error)' "$LOGFILE"; then
+ printf 'FAIL: clang translation reported warnings or errors\n' >&2
+ return 2
+ fi
+}
+
+main "$@"
diff --git a/scripts/_testAll_11a_ClangTranslation_insert.sh b/scripts/_testAll_11a_ClangTranslation_insert.sh
new file mode 100755
index 000000000..9e6c46cd2
--- /dev/null
+++ b/scripts/_testAll_11a_ClangTranslation_insert.sh
@@ -0,0 +1,29 @@
+#!/usr/bin/env bash
+#
+# Step 11a: Checks the G0B1 Clang translation in the Inserted state.
+
+set -u
+
+SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
+# shellcheck source=./_testAll_00_common.sh
+source "$SCRIPT_DIR/_testAll_00_common.sh"
+# shellcheck source=./_trice_test_state.sh
+source "$SCRIPT_DIR/_trice_test_state.sh"
+
+main() {
+ init_logfile
+ export LOGFILE
+ if ! has_command clang; then
+ log "MISSING TOOL: clang"
+ log "SKIP: clang not installed"
+ return 0
+ fi
+ if ! has_command arm-none-eabi-gcc; then
+ log "MISSING TOOL: arm-none-eabi-gcc"
+ log "SKIP: arm-none-eabi-gcc not installed; ARM GCC libraries are required"
+ return 0
+ fi
+ trice_test_run_managed_workflow insert example "$SCRIPT_DIR/_testAll_11_ClangTranslation_common.sh"
+}
+
+main "$@"
diff --git a/scripts/_testAll_11b_ClangTranslation_bind.sh b/scripts/_testAll_11b_ClangTranslation_bind.sh
new file mode 100755
index 000000000..3933fda67
--- /dev/null
+++ b/scripts/_testAll_11b_ClangTranslation_bind.sh
@@ -0,0 +1,29 @@
+#!/usr/bin/env bash
+#
+# Step 11b: Checks the same G0B1 Clang translation in the Bound state.
+
+set -u
+
+SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
+# shellcheck source=./_testAll_00_common.sh
+source "$SCRIPT_DIR/_testAll_00_common.sh"
+# shellcheck source=./_trice_test_state.sh
+source "$SCRIPT_DIR/_trice_test_state.sh"
+
+main() {
+ init_logfile
+ export LOGFILE
+ if ! has_command clang; then
+ log "MISSING TOOL: clang"
+ log "SKIP: clang not installed"
+ return 0
+ fi
+ if ! has_command arm-none-eabi-gcc; then
+ log "MISSING TOOL: arm-none-eabi-gcc"
+ log "SKIP: arm-none-eabi-gcc not installed; ARM GCC libraries are required"
+ return 0
+ fi
+ trice_test_run_managed_workflow bind example "$SCRIPT_DIR/_testAll_11_ClangTranslation_common.sh"
+}
+
+main "$@"
diff --git a/scripts/_testAll_12_GccExampleBuilds.sh b/scripts/_testAll_12_GccExampleBuilds.sh
index 4156067a7..cf3472981 100755
--- a/scripts/_testAll_12_GccExampleBuilds.sh
+++ b/scripts/_testAll_12_GccExampleBuilds.sh
@@ -1,223 +1,30 @@
#!/usr/bin/env bash
#
-# Step 12: Builds the ARM examples with TRICE_OFF and TRICE_ON.
-#
-# Direct invocation:
-# - ./_testAll_12_GccExampleBuilds.sh
-#
-# If arm-none-eabi-gcc is missing, the step is marked as SKIP.
-#
-# Log file:
-# - ./temp/log/_testAll_12_GccExampleBuilds.log
-#
-# Important cleanup ownership rule:
-# - This Step-12 script builds all examples by calling:
-#
-# examples/buildAllTargets_TRICE_OFF.sh
-# examples/buildAllTargets_TRICE_ON.sh
-#
-# - Individual example build scripts may now manage their own sequence:
-#
-# pre-clean -> optional insert -> build -> final clean
-#
-# - Therefore this Step-12 script must NOT do one global `trice insert` before
-# the complete buildAllTargets run. Otherwise parent and child scripts both
-# modify the same source tree and cleanup can happen at surprising times.
-#
-# - Step 12 is only the outer orchestrator:
-#
-# final safety clean -> clean build tree -> buildAllTargets_TRICE_OFF
-# -> clean build tree -> buildAllTargets_TRICE_ON
-# -> clean build tree -> final safety clean
-#
-# - The final safety clean is intentionally conservative. It is only a last
-# attempt to leave the repository in cleaned state if a child script failed,
-# was interrupted, or did not get a chance to run its own cleanup.
-#
-# Limitation:
-# - Bash cleanup cannot protect against Ctrl-C exactly while the trice binary is
-# writing a file. That requires atomic write handling inside trice itself.
+# Compatibility entry point for all GCC Example workflow variants.
set -u
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
-source "$SCRIPT_DIR/_testAll_00_common.sh"
-
-cleanup_step() {
- # cleanup_step is used for both paths:
- #
- # 1. Normal successful execution:
- # builds -> cleanup_step 0
- #
- # 2. Abnormal execution:
- # build failure / Ctrl-C / SIGTERM -> cleanup_step
- #
- # The function always exits the script with the status passed as $1.
- # If no status was passed, it uses the previous command status ($?).
-
- local status="${1:-$?}"
- local clean_status=0
-
- # Disable traps immediately.
- #
- # This prevents recursive cleanup if:
- # - cleanup itself triggers EXIT,
- # - the user presses Ctrl-C again while cleanup is already running,
- # - the clean helper exits with an error.
- trap - INT TERM EXIT
-
- cd "$ROOT" >/dev/null 2>&1 || true
-
- # Run a final safety clean after the build phase has started.
- #
- # This script no longer tracks "ids_inserted" because the individual example
- # build scripts own insert/clean now. The safety clean is harmless when the
- # tree is already clean and helpful after interrupted child builds.
- if [ "${build_phase_started:-0}" -eq 1 ]; then
- log "cleanup: running final trice clean safety helper"
-
- "$ROOT/trice_cleanIDs_in_examples_and_test_folder.sh" >>"$LOGFILE" 2>&1
- clean_status=$?
-
- if [ "$clean_status" -ne 0 ]; then
- log "WARN: cleanup: final trice clean safety helper failed with exit code $clean_status"
-
- # If the build script was otherwise successful, a cleanup failure should
- # make the whole script fail. If the script was already failing, keep the
- # original failure status so the first/root cause is not hidden.
- if [ "$status" -eq 0 ]; then
- status="$clean_status"
- fi
- fi
- fi
-
- exit "$status"
-}
main() {
- local rc
-
- init_logfile
-
- # One central cleanup owner for this outer orchestration script:
- #
- # - EXIT handles ordinary errors, for example a failed build step.
- # - INT handles Ctrl-C.
- # - TERM handles external termination, for example from CI or kill.
- #
- # Signal exit codes follow the common shell convention:
- # - 130 = interrupted by SIGINT
- # - 143 = terminated by SIGTERM
- trap 'cleanup_step $?' EXIT
- trap 'cleanup_step 130' INT
- trap 'cleanup_step 143' TERM
-
- source "$SCRIPTS_DIR/_setup_build_environment.sh" >>"$LOGFILE" 2>&1 || {
- log "FAIL: _setup_build_environment.sh failed"
- exit 1
- }
-
- if ! has_command arm-none-eabi-gcc; then
- log "MISSING TOOL: arm-none-eabi-gcc"
- log "SKIP: arm-none-eabi-gcc not installed"
- exit 0
- fi
-
- run_cmd arm-none-eabi-gcc --version || true
- run_cmd which arm-none-eabi-gcc || true
-
- # Start from a cleaned Trice-ID state.
- #
- # This is a pre-clean only. There is intentionally no global insert here,
- # because the individual example build scripts now manage their own insert
- # and clean behavior.
- run_cmd "$ROOT/trice_cleanIDs_in_examples_and_test_folder.sh" || {
- log "FAIL: initial trice clean failed"
- exit 1
- }
-
- build_phase_started=1
-
- run_cmd "$ROOT/examples/cleanAllTargets.sh" || {
- log "FAIL: cleanAllTargets.sh failed before G0B1_inst X0 matrix"
- exit 1
- }
-
- (
- cd "$ROOT/examples/G0B1_inst" || exit 1
- ./build.sh --x0-matrix
- ) 2>&1 | log_pipe
- rc=${PIPESTATUS[0]}
-
- if [ "$rc" -ne 0 ]; then
- log "FAIL: G0B1_inst X0 matrix failed"
- exit "$rc"
- fi
-
- if grep_log '(warning|error)' "$LOGFILE"; then
- log "FAIL: G0B1_inst X0 matrix reported warnings or errors"
- exit 2
- fi
-
- run_cmd "$ROOT/examples/cleanAllTargets.sh" || {
- log "FAIL: cleanAllTargets.sh failed before TRICE_OFF"
- exit 1
- }
-
- (
- cd "$ROOT/examples" || exit 1
- ./buildAllTargets_TRICE_OFF.sh
- ) 2>&1 | log_pipe
- rc=${PIPESTATUS[0]}
-
- if [ "$rc" -ne 0 ]; then
- log "FAIL: TRICE_OFF builds failed"
- exit "$rc"
- fi
-
- if grep_log '(warning|error)' "$LOGFILE"; then
- log "FAIL: TRICE_OFF builds reported warnings or errors"
- exit 2
- fi
-
- run_cmd "$ROOT/examples/cleanAllTargets.sh" || {
- log "FAIL: cleanAllTargets.sh failed after TRICE_OFF"
- exit 1
- }
-
- (
- cd "$ROOT/examples" || exit 1
- ./buildAllTargets_TRICE_ON.sh
- ) 2>&1 | log_pipe
- rc=${PIPESTATUS[0]}
-
- if [ "$rc" -ne 0 ]; then
- log "FAIL: TRICE_ON builds failed"
- exit "$rc"
- fi
-
- if grep_log '(warning|error)' "$LOGFILE"; then
- log "FAIL: TRICE_ON builds reported warnings or errors"
- exit 2
- fi
-
- run_cmd "$ROOT/examples/cleanAllTargets.sh" || {
- log "FAIL: cleanAllTargets.sh failed after TRICE_ON"
- exit 1
- }
-
- # Normal successful path:
- #
- # Use the same cleanup function as the traps. This avoids duplicated final
- # safety-clean logic and makes success, failure and Ctrl-C consistent.
- cleanup_step 0
+ local quiet=""
+ local failed=0
+ local arg
+
+ for arg in "$@"; do
+ case "$arg" in
+ --quiet) quiet="--quiet" ;;
+ *)
+ printf 'Unsupported GCC Example argument: %s\n' "$arg" >&2
+ return 2
+ ;;
+ esac
+ done
+
+ "$SCRIPT_DIR/_testAll_12a_GccExampleBuilds_insert.sh" ${quiet:+"$quiet"} || failed=1
+ "$SCRIPT_DIR/_testAll_12c_GccExampleBuilds_off.sh" ${quiet:+"$quiet"} || failed=1
+ "$SCRIPT_DIR/_testAll_12b_GccExampleBuilds_bind.sh" ${quiet:+"$quiet"} || failed=1
+ return "$failed"
}
-# State variable used by cleanup_step.
-#
-# build_phase_started:
-# - 0: Do not run final safety clean yet.
-# - 1: Build phase has started; final safety clean is allowed.
-build_phase_started=0
-
main "$@"
diff --git a/scripts/_testAll_12_GccExampleBuilds_common.sh b/scripts/_testAll_12_GccExampleBuilds_common.sh
new file mode 100755
index 000000000..9f9d1aaba
--- /dev/null
+++ b/scripts/_testAll_12_GccExampleBuilds_common.sh
@@ -0,0 +1,105 @@
+#!/usr/bin/env bash
+#
+# Shared GCC Example worker. The caller owns the ID state and restoration.
+
+set -euo pipefail
+
+SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
+ROOT="$(cd -- "$SCRIPT_DIR/.." && pwd)"
+
+# fail_on_compiler_diagnostics preserves the existing warning/error policy for
+# every workflow while the parent wrapper captures output in LOGFILE.
+fail_on_compiler_diagnostics() {
+ local stage="$1"
+
+ if grep -Eiq '(warning|error)' "$LOGFILE"; then
+ printf 'FAIL: %s reported warnings or errors\n' "$stage" >&2
+ return 2
+ fi
+}
+
+# clean_all_targets removes stale objects whose preprocessor result came from a
+# different ID workflow or target configuration.
+clean_all_targets() {
+ printf '+ %s/examples/cleanAllTargets.sh\n' "$ROOT"
+ "$ROOT/examples/cleanAllTargets.sh"
+}
+
+# run_on_matrix executes one representative Bound GCC build in quick mode. Full
+# mode retains the historical G0B1 X0 matrix and complete TRICE_ON target list.
+# ID preparation remains owned by the calling workflow wrapper in both modes.
+run_on_matrix() {
+ local selected="$1"
+
+ clean_all_targets
+ if [ "$selected" = "quick" ]; then
+ printf '+ examples/G0B1_inst/build.sh\n'
+ (
+ cd "$ROOT/examples/G0B1_inst" || exit 1
+ ./build.sh
+ )
+ fail_on_compiler_diagnostics "G0B1_inst quick build"
+ clean_all_targets
+ return 0
+ fi
+
+ printf '+ examples/G0B1_inst/build.sh --x0-matrix\n'
+ (
+ cd "$ROOT/examples/G0B1_inst" || exit 1
+ ./build.sh --x0-matrix
+ )
+ fail_on_compiler_diagnostics "G0B1_inst X0 matrix"
+
+ clean_all_targets
+ printf '+ examples/buildAllTargets_TRICE_ON.sh\n'
+ (
+ cd "$ROOT/examples" || exit 1
+ ./buildAllTargets_TRICE_ON.sh
+ )
+ fail_on_compiler_diagnostics "TRICE_ON builds"
+ clean_all_targets
+}
+
+# run_off_matrix retains the existing workflow-independent TRICE_OFF target
+# coverage exactly once in the aggregate test suite.
+run_off_matrix() {
+ clean_all_targets
+ printf '+ examples/buildAllTargets_TRICE_OFF.sh\n'
+ (
+ cd "$ROOT/examples" || exit 1
+ ./buildAllTargets_TRICE_OFF.sh
+ )
+ fail_on_compiler_diagnostics "TRICE_OFF builds"
+ clean_all_targets
+}
+
+main() {
+ local mode="${1:-}"
+ local selected="${2:-full}"
+
+ : "${LOGFILE:?LOGFILE must be exported by the GCC workflow wrapper}"
+ case "$selected" in
+ quick | full) ;;
+ *)
+ printf 'Unsupported GCC Example selection: %s\n' "$selected" >&2
+ return 2
+ ;;
+ esac
+ # shellcheck source=./_setup_build_environment.sh
+ source "$SCRIPT_DIR/_setup_build_environment.sh"
+ printf '+ arm-none-eabi-gcc --version\n'
+ arm-none-eabi-gcc --version
+ printf '+ command -v arm-none-eabi-gcc\n'
+ command -v arm-none-eabi-gcc
+
+ case "$mode" in
+ on) run_on_matrix "$selected" ;;
+ off) run_off_matrix ;;
+ *)
+ printf 'Unsupported GCC Example worker mode: %s\n' "$mode" >&2
+ return 2
+ ;;
+ esac
+}
+
+main "$@"
diff --git a/scripts/_testAll_12a_GccExampleBuilds_insert.sh b/scripts/_testAll_12a_GccExampleBuilds_insert.sh
new file mode 100755
index 000000000..0fd35dad6
--- /dev/null
+++ b/scripts/_testAll_12a_GccExampleBuilds_insert.sh
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+#
+# Step 12a: Builds the TRICE_ON GCC Example matrix in the Inserted state.
+
+set -u
+
+SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
+# shellcheck source=./_testAll_00_common.sh
+source "$SCRIPT_DIR/_testAll_00_common.sh"
+# shellcheck source=./_trice_test_state.sh
+source "$SCRIPT_DIR/_trice_test_state.sh"
+
+main() {
+ init_logfile
+ export LOGFILE
+ if ! has_command arm-none-eabi-gcc; then
+ log "MISSING TOOL: arm-none-eabi-gcc"
+ log "SKIP: arm-none-eabi-gcc not installed"
+ return 0
+ fi
+ trice_test_run_managed_workflow insert example "$SCRIPT_DIR/_testAll_12_GccExampleBuilds_common.sh" on
+}
+
+main "$@"
diff --git a/scripts/_testAll_12b_GccExampleBuilds_bind.sh b/scripts/_testAll_12b_GccExampleBuilds_bind.sh
new file mode 100755
index 000000000..3eeb2c057
--- /dev/null
+++ b/scripts/_testAll_12b_GccExampleBuilds_bind.sh
@@ -0,0 +1,27 @@
+#!/usr/bin/env bash
+#
+# Step 12b: Builds the same TRICE_ON GCC Example matrix in the Bound state.
+
+set -u
+
+SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
+# shellcheck source=./_testAll_00_common.sh
+source "$SCRIPT_DIR/_testAll_00_common.sh"
+# shellcheck source=./_trice_test_state.sh
+source "$SCRIPT_DIR/_trice_test_state.sh"
+
+main() {
+ local selected
+
+ selected="$(get_mode "${1:-full}")"
+ init_logfile
+ export LOGFILE
+ if ! has_command arm-none-eabi-gcc; then
+ log "MISSING TOOL: arm-none-eabi-gcc"
+ log "SKIP: arm-none-eabi-gcc not installed"
+ return 0
+ fi
+ trice_test_run_managed_workflow bind example "$SCRIPT_DIR/_testAll_12_GccExampleBuilds_common.sh" on "$selected"
+}
+
+main "$@"
diff --git a/scripts/_testAll_12c_GccExampleBuilds_off.sh b/scripts/_testAll_12c_GccExampleBuilds_off.sh
new file mode 100755
index 000000000..e8570b7c0
--- /dev/null
+++ b/scripts/_testAll_12c_GccExampleBuilds_off.sh
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+#
+# Step 12c: Builds the workflow-independent TRICE_OFF GCC Example matrix once.
+
+set -u
+
+SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
+# shellcheck source=./_testAll_00_common.sh
+source "$SCRIPT_DIR/_testAll_00_common.sh"
+# shellcheck source=./_trice_test_state.sh
+source "$SCRIPT_DIR/_trice_test_state.sh"
+
+main() {
+ init_logfile
+ export LOGFILE
+ if ! has_command arm-none-eabi-gcc; then
+ log "MISSING TOOL: arm-none-eabi-gcc"
+ log "SKIP: arm-none-eabi-gcc not installed"
+ return 0
+ fi
+ trice_test_run_managed_workflow off example "$SCRIPT_DIR/_testAll_12_GccExampleBuilds_common.sh" off
+}
+
+main "$@"
diff --git a/scripts/_testAll_13_L432Configs.sh b/scripts/_testAll_13_L432Configs.sh
index 5c6f1df19..39b00a4af 100755
--- a/scripts/_testAll_13_L432Configs.sh
+++ b/scripts/_testAll_13_L432Configs.sh
@@ -11,10 +11,37 @@
set -u
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/_testAll_00_common.sh"
+# shellcheck source=./_trice_test_state.sh
+source "$SCRIPT_DIR/_trice_test_state.sh"
+
+# run_l432_matrix keeps the historical warning/error policy inside the managed
+# workflow. This lets the workflow helper restore source files, metadata, and
+# include paths even when one of the 101 configurations fails.
+run_l432_matrix() {
+ local output
+ local rc=0
+
+ # Capture this one matrix as a unit so diagnostics can be inspected before
+ # run_cmd mirrors the output into LOGFILE. This avoids a race with tee during
+ # direct, non-quiet invocation of the step.
+ output="$(
+ cd "$ROOT/examples/L432_inst" || exit 1
+ ./all_configs_build.sh 2>&1
+ )" || rc=$?
+ printf '%s\n' "$output"
+ if [ "$rc" -ne 0 ]; then
+ printf 'FAIL: L432 configuration builds failed\n' >&2
+ return "$rc"
+ fi
+ if grep -Eiq '(warning|error)' <<<"$output"; then
+ printf 'FAIL: L432 configuration builds reported warnings or errors\n' >&2
+ return 2
+ fi
+}
main() {
- local rc
init_logfile
+ export LOGFILE
source "$SCRIPTS_DIR/_setup_build_environment.sh" >>"$LOGFILE" 2>&1 || {
log "FAIL: _setup_build_environment.sh failed"
exit 1
@@ -24,19 +51,7 @@ main() {
log "SKIP: arm-none-eabi-gcc not installed"
exit 0
fi
- (
- cd "$ROOT/examples/L432_inst" || exit 1
- ./all_configs_build.sh
- ) 2>&1 | log_pipe
- rc=${PIPESTATUS[0]}
- if [ "$rc" -ne 0 ]; then
- log "FAIL: L432 configuration builds failed"
- exit "$rc"
- fi
- if grep_log '(warning|error)' "$LOGFILE"; then
- log "FAIL: L432 configuration builds reported warnings or errors"
- exit 2
- fi
+ trice_test_run_managed_workflow bind example run_l432_matrix
}
main "$@"
diff --git a/scripts/_testAll_run.sh b/scripts/_testAll_run.sh
index f908a8d6b..64652513e 100755
--- a/scripts/_testAll_run.sh
+++ b/scripts/_testAll_run.sh
@@ -35,6 +35,7 @@ run_step() {
shift
local rc=0
local step_log
+ local detail
local warning
printf '%s: ' "$s" >>"$SUMMARY_LOG"
printf '%s: ' "$s"
@@ -52,6 +53,13 @@ run_step() {
else
printf 'PASS\n' >>"$SUMMARY_LOG"
printf '%sPASS%s\n' "$PASS_COLOR" "$RESET_COLOR"
+ # Surface non-fatal compatibility information from quiet step logs so a
+ # passing aggregate run still shows degraded local-tool behavior.
+ if [ -f "$step_log" ]; then
+ while IFS= read -r detail; do
+ summary_line " $detail"
+ done < <(grep -E '^Hint:' "$step_log")
+ fi
fi
else
printf 'FAIL\n' >>"$SUMMARY_LOG"
@@ -77,6 +85,11 @@ main() {
: >"$SUMMARY_LOG"
summary_line "Starting testAll at $(date)"
summary_line "Selection: $selected"
+ if [ "$selected" = "quick" ]; then
+ summary_line "ID workflows: bind"
+ else
+ summary_line "ID workflows: bind plus legacy insert/clean"
+ fi
run_step "_testAll_00a_FormatShellScripts.sh" || failed=1
run_step "_testAll_00b_checkShell.sh" || failed=1
@@ -92,9 +105,21 @@ main() {
run_step "_testAll_07_GoCoverage.sh" || failed=1
run_step "_testAll_08_RuntimePrepare.sh" || failed=1
run_step "_testAll_09_GoTests.sh" || failed=1
- run_step "_testAll_10_PcTargetTests.sh" "$selected" || failed=1
- run_step "_testAll_11_ClangTranslation.sh" || failed=1
- run_step "_testAll_12_GccExampleBuilds.sh" || failed=1
+ run_step "_testAll_09b_BindTests.sh" || failed=1
+ if [ "$selected" = "full" ]; then
+ run_step "_testAll_09c_BindWorkflowTests.sh" || failed=1
+ run_step "_testAll_10a_PcTargetTests_insert.sh" "$selected" || failed=1
+ fi
+ run_step "_testAll_10b_PcTargetTests_bind.sh" "$selected" || failed=1
+ if [ "$selected" = "full" ]; then
+ run_step "_testAll_11a_ClangTranslation_insert.sh" || failed=1
+ fi
+ run_step "_testAll_11b_ClangTranslation_bind.sh" || failed=1
+ if [ "$selected" = "full" ]; then
+ run_step "_testAll_12a_GccExampleBuilds_insert.sh" || failed=1
+ run_step "_testAll_12c_GccExampleBuilds_off.sh" || failed=1
+ fi
+ run_step "_testAll_12b_GccExampleBuilds_bind.sh" "$selected" || failed=1
if [ "$selected" = "full" ]; then
run_step "_testAll_13_L432Configs.sh" || failed=1
fi
diff --git a/scripts/_trice_id_workflow.sh b/scripts/_trice_id_workflow.sh
new file mode 100755
index 000000000..4773c897e
--- /dev/null
+++ b/scripts/_trice_id_workflow.sh
@@ -0,0 +1,46 @@
+#!/usr/bin/env bash
+#
+# Shared implementation for the public Insert, Clean, Bind, and re-migration
+# repository workflows. This file is sourced and is not a standalone command.
+
+set -u
+
+TRICE_WORKFLOW_SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
+
+# shellcheck source=./_setup_trice_environment.sh
+source "$TRICE_WORKFLOW_SCRIPT_DIR/_setup_trice_environment.sh"
+
+# trice_id_workflow executes one repository state transition from the stable
+# repository root. Successful default invocations stay silent; the delegated
+# tools retain their existing verbose options and error diagnostics.
+trice_id_workflow() {
+ local action="$1"
+
+ case "$action" in
+ insert)
+ # The option groups intentionally use shell word splitting because they
+ # preserve the long-standing repository override interface.
+ # shellcheck disable=SC2086
+ trice insert $TRICE_DEFAULTS $TRICE_ALIASES $TRICE_PRJ_FILES $TRICE_ID_OPTIONS
+ ;;
+ clean)
+ # shellcheck disable=SC2086
+ trice clean $TRICE_DEFAULTS $TRICE_ALIASES $TRICE_PRJ_FILES
+ ;;
+ bind)
+ # shellcheck disable=SC2086
+ trice bind $TRICE_DEFAULTS $TRICE_ALIASES $TRICE_PRJ_FILES $TRICE_ID_OPTIONS -bindDir "$TRICE_BIND_DIR"
+ ;;
+ remigrate)
+ # Re-migration adjusts shared location lines together with the source
+ # includes so the intermediate Clean state is internally consistent.
+ # shellcheck disable=SC2086
+ go run ./internal/id/remigratecmd $TRICE_PRJ_FILES $TRICE_EXCLUDES \
+ -bindDir "$TRICE_BIND_DIR" -li "$TRICE_LI_JSON" -liRoot "$TRICE_LI_ROOT"
+ ;;
+ *)
+ printf 'Unsupported Trice ID workflow: %s\n' "$action" >&2
+ return 2
+ ;;
+ esac
+}
diff --git a/scripts/_trice_test_state.sh b/scripts/_trice_test_state.sh
new file mode 100755
index 000000000..8410a59f6
--- /dev/null
+++ b/scripts/_trice_test_state.sh
@@ -0,0 +1,428 @@
+#!/usr/bin/env bash
+#
+# Transactional state ownership for Insert/Bind test wrappers. This file is
+# sourced and is not a standalone command.
+
+set -u
+
+TRICE_STATE_SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
+TRICE_STATE_ROOT="$(cd -- "$TRICE_STATE_SCRIPT_DIR/.." && pwd)"
+
+# shellcheck source=./_trice_id_workflow.sh
+source "$TRICE_STATE_SCRIPT_DIR/_trice_id_workflow.sh"
+
+# trice_state_log uses the testAll logger when available and stays useful for
+# direct workflow-wrapper invocation.
+trice_state_log() {
+ if declare -F log >/dev/null 2>&1; then
+ log "$*"
+ else
+ printf '%s\n' "$*"
+ fi
+}
+
+# trice_state_run_command preserves the command line in the workflow log and
+# delegates output capture to testAll when its run_cmd helper is available.
+trice_state_run_command() {
+ if declare -F run_cmd >/dev/null 2>&1; then
+ run_cmd "$@"
+ else
+ printf '+ %s\n' "$*"
+ "$@"
+ fi
+}
+
+# trice_state_relative_path validates one repository-relative path and prints a
+# normalized form suitable for a tar manifest. Parent traversal is rejected so
+# restore-time deletion can never escape the repository.
+trice_state_relative_path() {
+ local path="${1#./}"
+ local description="$2"
+
+ case "$path" in
+ "" | /* | [A-Za-z]:* | .. | ../* | */../* | */..)
+ trice_state_log "FAIL: $description must stay inside the repository: $1"
+ return 1
+ ;;
+ esac
+ printf '%s\n' "$path"
+}
+
+# trice_state_append_source_files expands the shared -src options with the same
+# C/C++ extensions accepted by internal/id and appends paths to the raw manifest.
+trice_state_append_source_files() {
+ local raw_manifest="$1"
+ local option
+ local source
+ local relative_source
+
+ # The established TRICE_PRJ_FILES interface is a shell option string. Its
+ # paths therefore follow the same no-embedded-whitespace convention as the
+ # public Insert/Clean helpers.
+ # shellcheck disable=SC2086
+ set -- $TRICE_PRJ_FILES
+ while [ "$#" -gt 0 ]; do
+ option="$1"
+ shift
+ if [ "$option" != "-src" ]; then
+ trice_state_log "FAIL: unsupported shared project option while snapshotting: $option"
+ return 1
+ fi
+ if [ "$#" -eq 0 ]; then
+ trice_state_log "FAIL: missing path after -src in TRICE_PRJ_FILES"
+ return 1
+ fi
+ source="$1"
+ shift
+ relative_source="$(trice_state_relative_path "$source" "source path")" || return 1
+ if [ ! -e "$TRICE_STATE_ROOT/$relative_source" ]; then
+ trice_state_log "FAIL: managed source path does not exist: $relative_source"
+ return 1
+ fi
+ if [ -f "$TRICE_STATE_ROOT/$relative_source" ]; then
+ printf '%s\n' "$relative_source" >>"$raw_manifest"
+ continue
+ fi
+ if [ ! -d "$TRICE_STATE_ROOT/$relative_source" ]; then
+ trice_state_log "FAIL: managed source path is neither a file nor directory: $relative_source"
+ return 1
+ fi
+ (
+ cd "$TRICE_STATE_ROOT" || exit 1
+ find "$relative_source" -type f \( \
+ -name '*.c' -o -name '*.cc' -o -name '*.cp' -o -name '*.cxx' -o \
+ -name '*.cpp' -o -name '*.CPP' -o -name '*.c++' -o -name '*.C' -o \
+ -name '*.h' -o -name '*.hh' -o -name '*.hp' -o -name '*.hxx' -o \
+ -name '*.hpp' -o -name '*.HPP' -o -name '*.h++' -o -name '*.H' -o \
+ -name '*.ixx' -o -name '*.inc' \
+ \) -print
+ ) >>"$raw_manifest" || return 1
+ done
+}
+
+# trice_state_append_optional_file records whether a list existed initially and
+# archives it only when there are bytes or metadata to restore.
+trice_state_append_optional_file() {
+ local path="$1"
+ local description="$2"
+ local raw_manifest="$3"
+ local absent_manifest="$4"
+ local relative
+
+ if [ "$path" = "off" ] || [ "$path" = "none" ]; then
+ return 0
+ fi
+ relative="$(trice_state_relative_path "$path" "$description")" || return 1
+ if [ -e "$TRICE_STATE_ROOT/$relative" ] || [ -L "$TRICE_STATE_ROOT/$relative" ]; then
+ printf '%s\n' "$relative" >>"$raw_manifest"
+ else
+ printf '%s\n' "$relative" >>"$absent_manifest"
+ fi
+}
+
+# trice_test_state_snapshot captures every file that Insert, Clean, Bind, or
+# re-migration may alter. It also claims sole ownership of the ID lifecycle.
+trice_test_state_snapshot() {
+ local state_parent
+ local raw_manifest
+ local relative_bind_dir
+
+ if [ "${TRICE_TEST_STATE_ACTIVE:-0}" -eq 1 ]; then
+ trice_state_log "FAIL: a Trice test-state owner is already active"
+ return 1
+ fi
+ if ! command -v tar >/dev/null 2>&1; then
+ trice_state_log "FAIL: tar is required for exact Trice test-state restoration"
+ return 1
+ fi
+
+ state_parent="${TRICE_TMP_DIR:-$TRICE_STATE_ROOT/temp}"
+ mkdir -p "$state_parent" || return 1
+ state_parent="$(cd "$state_parent" && pwd -P)" || return 1
+ TRICE_TEST_STATE_PARENT="$state_parent"
+ TRICE_TEST_STATE_DIR="$(mktemp -d "$state_parent/trice-state.XXXXXX")" || return 1
+ TRICE_TEST_STATE_ARCHIVE="$TRICE_TEST_STATE_DIR/state.tar"
+ TRICE_TEST_STATE_MANIFEST="$TRICE_TEST_STATE_DIR/manifest"
+ TRICE_TEST_STATE_ABSENT="$TRICE_TEST_STATE_DIR/absent"
+ raw_manifest="$TRICE_TEST_STATE_DIR/manifest.raw"
+ : >"$raw_manifest"
+ : >"$TRICE_TEST_STATE_ABSENT"
+
+ trice_state_append_source_files "$raw_manifest" || return 1
+ trice_state_append_optional_file "$TRICE_TIL_JSON" "TIL path" "$raw_manifest" "$TRICE_TEST_STATE_ABSENT" || return 1
+ trice_state_append_optional_file "$TRICE_LI_JSON" "LI path" "$raw_manifest" "$TRICE_TEST_STATE_ABSENT" || return 1
+
+ relative_bind_dir="$(trice_state_relative_path "$TRICE_BIND_DIR" "bind directory")" || return 1
+ if [ "$relative_bind_dir" = "." ]; then
+ trice_state_log "FAIL: bind directory must not be the repository root"
+ return 1
+ fi
+ TRICE_TEST_STATE_BIND_DIR="$relative_bind_dir"
+ if [ -L "$TRICE_STATE_ROOT/$relative_bind_dir" ]; then
+ trice_state_log "FAIL: bind directory must not be a symbolic link: $relative_bind_dir"
+ return 1
+ fi
+ if [ -e "$TRICE_STATE_ROOT/$relative_bind_dir" ]; then
+ if [ ! -d "$TRICE_STATE_ROOT/$relative_bind_dir" ]; then
+ trice_state_log "FAIL: bind directory path is not a directory: $relative_bind_dir"
+ return 1
+ fi
+ printf '%s\n' "$relative_bind_dir" >>"$raw_manifest"
+ else
+ printf '%s\n' "$relative_bind_dir" >>"$TRICE_TEST_STATE_ABSENT"
+ fi
+
+ sort -u "$raw_manifest" >"$TRICE_TEST_STATE_MANIFEST"
+ (
+ cd "$TRICE_STATE_ROOT" || exit 1
+ tar -cf "$TRICE_TEST_STATE_ARCHIVE" -T "$TRICE_TEST_STATE_MANIFEST"
+ ) || {
+ trice_state_log "FAIL: could not archive the initial Trice test state"
+ return 1
+ }
+
+ TRICE_TEST_STATE_ACTIVE=1
+ export TRICE_ID_WORKFLOW_OWNER=1
+ trice_state_log "State snapshot: $TRICE_TEST_STATE_DIR"
+ trice_state_log "State snapshot files: $(wc -l <"$TRICE_TEST_STATE_MANIFEST" | tr -d ' ')"
+}
+
+# trice_test_state_restore restores archived bytes and removes only paths that
+# were proven absent initially. The validated bind directory is the sole
+# recursive deletion target.
+trice_test_state_restore() {
+ local relative
+ local bind_absolute
+
+ if [ "${TRICE_TEST_STATE_ACTIVE:-0}" -ne 1 ]; then
+ return 0
+ fi
+ bind_absolute="$TRICE_STATE_ROOT/$TRICE_TEST_STATE_BIND_DIR"
+ case "$bind_absolute" in
+ "$TRICE_STATE_ROOT"/*) ;;
+ *)
+ trice_state_log "FAIL: refusing to restore an unvalidated bind directory: $bind_absolute"
+ return 1
+ ;;
+ esac
+ if [ "$bind_absolute" = "$TRICE_STATE_ROOT" ]; then
+ trice_state_log "FAIL: refusing to remove the repository root"
+ return 1
+ fi
+
+ rm -rf -- "$bind_absolute" || {
+ trice_state_log "FAIL: could not remove generated bind directory: $TRICE_TEST_STATE_BIND_DIR"
+ return 1
+ }
+ while IFS= read -r relative; do
+ [ -n "$relative" ] || continue
+ if [ "$relative" = "$TRICE_TEST_STATE_BIND_DIR" ]; then
+ continue
+ fi
+ rm -f -- "$TRICE_STATE_ROOT/$relative" || {
+ trice_state_log "FAIL: could not remove initially absent generated file: $relative"
+ return 1
+ }
+ done <"$TRICE_TEST_STATE_ABSENT"
+ (
+ cd "$TRICE_STATE_ROOT" || exit 1
+ tar -xf "$TRICE_TEST_STATE_ARCHIVE"
+ ) || {
+ trice_state_log "FAIL: could not extract the initial Trice test state"
+ return 1
+ }
+
+ TRICE_TEST_STATE_ACTIVE=0
+ unset TRICE_ID_WORKFLOW_OWNER
+ unset TRICE_ID_WORKFLOW
+ trice_state_log "State restoration: exact initial files restored"
+ case "$TRICE_TEST_STATE_DIR" in
+ "$TRICE_TEST_STATE_PARENT"/trice-state.*)
+ rm -rf -- "$TRICE_TEST_STATE_DIR"
+ ;;
+ *)
+ trice_state_log "WARN: retained unexpected state directory for manual inspection: $TRICE_TEST_STATE_DIR"
+ ;;
+ esac
+}
+
+# trice_test_prepare_workflow reaches the requested test state while keeping
+# Bind-only tests independent of the legacy Insert/Clean lifecycle.
+trice_test_prepare_workflow() {
+ local workflow="$1"
+
+ trice_state_log "Prepared ID state requested: $workflow"
+ if [ "$workflow" = "bind" ]; then
+ # Canonical sources are checked in Bound. Regenerating their sidecars is
+ # sufficient and preserves stable file keys throughout quick test runs.
+ trice_state_run_command "$TRICE_STATE_ROOT/trice_bindIDs_in_examples_and_test_folder.sh"
+ return $?
+ fi
+
+ # Bound source ownership is versioned while BindDir is generated and may be
+ # absent or stale after a checkout. Refresh it transactionally before asking
+ # re-migration to validate descriptor and location line numbers. Only full
+ # test runs select the Inserted or Off workflows that need this transition.
+ trice_state_run_command "$TRICE_STATE_ROOT/trice_bindIDs_in_examples_and_test_folder.sh" || return 1
+ trice_state_run_command "$TRICE_STATE_ROOT/trice_remigrateBindToClean_in_examples_and_test_folder.sh" || return 1
+ trice_state_run_command "$TRICE_STATE_ROOT/trice_cleanIDs_in_examples_and_test_folder.sh" || return 1
+ case "$workflow" in
+ insert)
+ trice_state_run_command "$TRICE_STATE_ROOT/trice_insertIDs_in_examples_and_test_folder.sh"
+ ;;
+ off)
+ # TRICE_OFF builds use the clean source state and need no ID generator.
+ return 0
+ ;;
+ *)
+ trice_state_log "FAIL: unsupported managed ID workflow: $workflow"
+ return 2
+ ;;
+ esac
+}
+
+# trice_test_configure_include_path gives PC builds an isolated include path and
+# Example builds only the additional bind directory required in Bound state.
+trice_test_configure_include_path() {
+ local workflow="$1"
+ local include_mode="$2"
+ local bind_absolute="$TRICE_STATE_ROOT/$TRICE_TEST_STATE_BIND_DIR"
+ local bind_native="$bind_absolute"
+ local separator=':'
+
+ if [ "${C_INCLUDE_PATH+x}" = "x" ]; then
+ TRICE_TEST_SAVED_C_INCLUDE_PATH_SET=1
+ TRICE_TEST_SAVED_C_INCLUDE_PATH="$C_INCLUDE_PATH"
+ else
+ TRICE_TEST_SAVED_C_INCLUDE_PATH_SET=0
+ TRICE_TEST_SAVED_C_INCLUDE_PATH=""
+ fi
+
+ if [ "${TRICE_BIND_INCLUDE_DIR+x}" = "x" ]; then
+ TRICE_TEST_SAVED_BIND_INCLUDE_DIR_SET=1
+ TRICE_TEST_SAVED_BIND_INCLUDE_DIR="$TRICE_BIND_INCLUDE_DIR"
+ else
+ TRICE_TEST_SAVED_BIND_INCLUDE_DIR_SET=0
+ TRICE_TEST_SAVED_BIND_INCLUDE_DIR=""
+ fi
+ TRICE_TEST_INCLUDE_PATH_SAVED=1
+
+ case "$(uname -s)" in
+ MINGW* | MSYS* | CYGWIN*)
+ separator=';'
+ if command -v cygpath >/dev/null 2>&1; then
+ bind_native="$(cygpath -m "$bind_absolute")"
+ fi
+ ;;
+ esac
+
+ if [ "$workflow" = "bind" ]; then
+ # CMake/MSVC does not consume C_INCLUDE_PATH, so expose the same absolute
+ # directory in a build-system-neutral environment variable as well.
+ export TRICE_BIND_INCLUDE_DIR="$bind_native"
+ else
+ unset TRICE_BIND_INCLUDE_DIR || true
+ fi
+
+ case "$include_mode:$workflow" in
+ pc:insert)
+ export C_INCLUDE_PATH=""
+ ;;
+ pc:bind)
+ export C_INCLUDE_PATH="$bind_absolute"
+ ;;
+ example:insert | example:off) ;;
+ example:bind)
+ if [ -n "${C_INCLUDE_PATH:-}" ]; then
+ export C_INCLUDE_PATH="$bind_absolute$separator$C_INCLUDE_PATH"
+ else
+ export C_INCLUDE_PATH="$bind_absolute"
+ fi
+ ;;
+ none:*) ;;
+ *)
+ trice_state_log "FAIL: unsupported include-path mode: $include_mode:$workflow"
+ return 2
+ ;;
+ esac
+ trice_state_log "C_INCLUDE_PATH for $workflow/$include_mode: ${C_INCLUDE_PATH-}"
+ trice_state_log "TRICE_BIND_INCLUDE_DIR for $workflow/$include_mode: ${TRICE_BIND_INCLUDE_DIR-}"
+}
+
+# trice_test_restore_include_path restores the caller's exact environment even
+# when a build or signal interrupted the managed workflow.
+trice_test_restore_include_path() {
+ if [ "${TRICE_TEST_INCLUDE_PATH_SAVED:-0}" -ne 1 ]; then
+ return 0
+ fi
+ if [ "${TRICE_TEST_SAVED_C_INCLUDE_PATH_SET:-0}" -eq 1 ]; then
+ export C_INCLUDE_PATH="$TRICE_TEST_SAVED_C_INCLUDE_PATH"
+ else
+ unset C_INCLUDE_PATH || true
+ fi
+ if [ "${TRICE_TEST_SAVED_BIND_INCLUDE_DIR_SET:-0}" -eq 1 ]; then
+ export TRICE_BIND_INCLUDE_DIR="$TRICE_TEST_SAVED_BIND_INCLUDE_DIR"
+ else
+ unset TRICE_BIND_INCLUDE_DIR || true
+ fi
+ TRICE_TEST_INCLUDE_PATH_SAVED=0
+}
+
+# trice_test_discard_incomplete_snapshot removes only a validated temporary
+# snapshot directory when preparation failed before a restorable archive existed.
+trice_test_discard_incomplete_snapshot() {
+ if [ "${TRICE_TEST_STATE_ACTIVE:-0}" -eq 1 ] || [ -z "${TRICE_TEST_STATE_DIR:-}" ]; then
+ return 0
+ fi
+ case "$TRICE_TEST_STATE_DIR" in
+ "$TRICE_TEST_STATE_PARENT"/trice-state.*)
+ rm -rf -- "$TRICE_TEST_STATE_DIR"
+ ;;
+ esac
+}
+
+# trice_test_finish is the sole trap target. A failed restoration turns an
+# otherwise successful test into a failure while preserving an earlier cause.
+trice_test_finish() {
+ local status="${1:-$?}"
+ local restore_status=0
+
+ trap - INT TERM EXIT
+ cd "$TRICE_STATE_ROOT" >/dev/null 2>&1 || true
+ trice_test_restore_include_path
+ trice_test_state_restore || restore_status=$?
+ trice_test_discard_incomplete_snapshot || true
+ if [ "$restore_status" -ne 0 ]; then
+ trice_state_log "FAIL: state restoration failed with exit code $restore_status"
+ if [ "$status" -eq 0 ]; then
+ status="$restore_status"
+ fi
+ fi
+ trice_state_log "ID workflow ${TRICE_TEST_ACTIVE_WORKFLOW:-unknown} end status: $status"
+ exit "$status"
+}
+
+# trice_test_run_managed_workflow owns traps, state preparation, include-path
+# setup, one shared worker invocation, and exact restoration.
+trice_test_run_managed_workflow() {
+ local workflow="$1"
+ local include_mode="$2"
+ local worker="$3"
+ shift 3
+
+ TRICE_TEST_ACTIVE_WORKFLOW="$workflow"
+ export TRICE_ID_WORKFLOW="$workflow"
+ trap 'trice_test_finish $?' EXIT
+ trap 'trice_test_finish 130' INT
+ trap 'trice_test_finish 143' TERM
+
+ trice_test_state_snapshot || return 1
+ trice_test_prepare_workflow "$workflow" || return 1
+ trice_test_configure_include_path "$workflow" "$include_mode" || return 1
+ trice_state_log "Build/test worker: $worker $*"
+ trice_state_run_command "$worker" "$@" || return $?
+ trice_test_finish 0
+}
+
+TRICE_TEST_STATE_ACTIVE=0
+TRICE_TEST_INCLUDE_PATH_SAVED=0
diff --git a/scripts/buildTriceTool.sh b/scripts/buildTriceTool.sh
index 0e8cca7d8..bd2e3c7e4 100755
--- a/scripts/buildTriceTool.sh
+++ b/scripts/buildTriceTool.sh
@@ -219,6 +219,18 @@ while [ "$#" -gt 0 ]; do
shift
done
+# A replaced Go installation can leave an inherited GOROOT pointing at a
+# directory that no longer exists. Preserve valid custom toolchains, but let
+# the selected go executable discover its own root when that override is stale.
+if [ -n "${GOROOT:-}" ] && [ ! -d "$GOROOT" ]; then
+ stale_goroot="$GOROOT"
+ unset GOROOT
+ log_info "Ignoring stale GOROOT override: $stale_goroot"
+ if [ "$SILENT" = false ] && [ "$VERBOSE" = true ]; then
+ log_verbose "Detected GOROOT: $(go env GOROOT)"
+ fi
+fi
+
##############################################
# Collect Git information
##############################################
diff --git a/scripts/format_repo.sh b/scripts/format_repo.sh
index 0d4238670..6d04b6613 100755
--- a/scripts/format_repo.sh
+++ b/scripts/format_repo.sh
@@ -20,11 +20,30 @@ set -euo pipefail
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
main() {
+ local mode="format"
+ local arg
+
+ # Keep the mode in sync with the delegated formatters. The last explicit
+ # mode wins, matching their existing argument handling.
+ for arg in "$@"; do
+ case "$arg" in
+ check | format) mode="$arg" ;;
+ esac
+ done
+
echo "$SCRIPT_DIR/_refresh_trice_user_manual.sh" "$@" && "$SCRIPT_DIR/_refresh_trice_user_manual.sh" "$@"
echo "$SCRIPT_DIR/_format_shell_scripts.sh" "$@" && "$SCRIPT_DIR/_format_shell_scripts.sh" "$@"
echo "$SCRIPT_DIR/_format_go_code.sh" "$@" && "$SCRIPT_DIR/_format_go_code.sh" "$@"
- echo "$SCRIPT_DIR/../trice_cleanIDs_in_examples_and_test_folder.sh" && "$SCRIPT_DIR/../trice_cleanIDs_in_examples_and_test_folder.sh"
+
echo "$SCRIPT_DIR/_format_c_code.sh" "$@" && "$SCRIPT_DIR/_format_c_code.sh" "$@"
+ if [ "$mode" = "format" ]; then
+ # Bind records the line layout produced by the first formatting pass. It
+ # can also generate or normalize directives with trailing comments, so a
+ # final formatting pass restores their repository-wide alignment.
+ echo "$SCRIPT_DIR/../trice_bindIDs_in_examples_and_test_folder.sh" && "$SCRIPT_DIR/../trice_bindIDs_in_examples_and_test_folder.sh"
+ echo "$SCRIPT_DIR/_format_c_code.sh" "$@" && "$SCRIPT_DIR/_format_c_code.sh" "$@"
+ fi
+
echo "$SCRIPT_DIR/../examples/cleanAllTargets.sh" && "$SCRIPT_DIR/../examples/cleanAllTargets.sh"
echo "$SCRIPT_DIR/_clean-dsstore.sh" "$SCRIPT_DIR/.." --silent && "$SCRIPT_DIR/_clean-dsstore.sh" "$SCRIPT_DIR/.." --silent
}
diff --git a/scripts/testAll.sh b/scripts/testAll.sh
index e75d666cf..2f2586c76 100755
--- a/scripts/testAll.sh
+++ b/scripts/testAll.sh
@@ -9,9 +9,11 @@
#
# Selection:
# - quick
-# Standard run with the normal steps.
+# Standard Bind-only run. It does not transition repository sources through
+# the legacy Insert/Clean workflow.
# - full
-# Runs the additional full PC target tests and the L432 configuration loop.
+# Also validates legacy Insert/Clean, the TRICE_OFF builds, the complete PC
+# target matrix, and the L432 configuration loop.
#
# Structure:
# - scripts/testAll.sh resolves the CLI mode and only calls the steps needed for that mode.
diff --git a/src/cobs.h b/src/cobs.h
index bc85dd2c4..1b5d27ab8 100644
--- a/src/cobs.h
+++ b/src/cobs.h
@@ -5,7 +5,6 @@
//! \file cobs.h
//! \brief cobs declarations and macros.
-
#ifndef COBS_H_
#define COBS_H_
diff --git a/src/cobsDecode.c b/src/cobsDecode.c
index ebb987868..9634fff63 100644
--- a/src/cobsDecode.c
+++ b/src/cobsDecode.c
@@ -5,14 +5,13 @@
//! \file cobsDecode.c
//! \brief cobs Decode implementation.
-
#include "cobs.h"
// Public API is documented in cobs.h.
// Implementation adapted from the Wikipedia COBS reference.
size_t COBSDecode(void* __restrict out, const void* __restrict in, size_t length) {
- uint8_t* data = (uint8_t*) out;
- const uint8_t* buffer = (const uint8_t*) in;
+ uint8_t* data = (uint8_t*)out;
+ const uint8_t* buffer = (const uint8_t*)in;
const uint8_t* byte = buffer; // Encoded input byte pointer
uint8_t* decode = data; // Decoded output byte pointer
diff --git a/src/cobsEncode.c b/src/cobsEncode.c
index f33ed30f9..1774fa6a0 100644
--- a/src/cobsEncode.c
+++ b/src/cobsEncode.c
@@ -5,7 +5,6 @@
//! \file cobsEncode.c
//! \brief cobs Encode implementation.
-
#include "cobs.h"
// Public API is documented in cobs.h.
diff --git a/src/tcobs.h b/src/tcobs.h
index a371e820b..4f1084e5d 100644
--- a/src/tcobs.h
+++ b/src/tcobs.h
@@ -5,7 +5,6 @@
//! \file tcobs.h
//! \brief tcobs declarations and macros.
-
#ifndef TCOBS_H_
#define TCOBS_H_
diff --git a/src/tcobsv1Decode.c b/src/tcobsv1Decode.c
index 51814c758..7a5158dbf 100644
--- a/src/tcobsv1Decode.c
+++ b/src/tcobsv1Decode.c
@@ -5,7 +5,6 @@
//! \file tcobsv1Decode.c
//! \brief tcobsv 1 Decode implementation.
-
#include
#include
#include // memcpy
@@ -86,15 +85,15 @@ int TCOBSDecode(void* __restrict output, size_t max, const void* __restrict inpu
}
copyBytes: {
- uint8_t* to = out + Max - olen - offset; // to := len(d) - n - offset
- uint8_t const * from = in + ilen - offset; // from := len(in) - offset // sigil byte is already removed
+ uint8_t* to = out + Max - olen - offset; // to := len(d) - n - offset
+ uint8_t const* from = in + ilen - offset; // from := len(in) - offset // sigil byte is already removed
if (to < out) {
return OUT_BUFFER_TOO_SMALL - __LINE__;
}
memcpy(to, from, (size_t)offset); // n += copy(d[to:], in[from:])
olen += offset;
ilen -= offset; // in = in[:len(in)-offset] // remove copied bytes
- // continue;
+ // continue;
}
}
return olen;
diff --git a/src/tcobsv1Encode.c b/src/tcobsv1Encode.c
index d12ced68d..d2a6c4e11 100644
--- a/src/tcobsv1Encode.c
+++ b/src/tcobsv1Encode.c
@@ -5,7 +5,6 @@
//! \file tcobsv1Encode.c
//! \brief tcobsv 1 Encode implementation.
-
#include
#include
#include "tcobs.h"
@@ -76,9 +75,9 @@
// Public API is documented in tcobs.h.
// The overlap assumptions are implemented according to the encoder state machine below.
int TCOBSEncode(void* __restrict output, const void* __restrict input, size_t length) {
- uint8_t* o = (uint8_t*) output; // write pointer
- uint8_t const* out = (uint8_t*) output;
- uint8_t const* i = (uint8_t const*) input; // read pointer
+ uint8_t* o = (uint8_t*)output; // write pointer
+ uint8_t const* out = (uint8_t*)output;
+ uint8_t const* i = (uint8_t const*)input; // read pointer
uint8_t const* limit = (uint8_t*)input + length; // read limit
uint8_t zeroCount = 0; // counts zero bytes 1-3 for Z1-Z3
uint8_t fullCount = 0; // counts 0xFF bytes 1-4 for FF and F2-F4
@@ -222,7 +221,7 @@ int TCOBSEncode(void* __restrict output, const void* __restrict input, size_t le
// , aa xx. yy ...
ASSERT(1 <= b_1 && b_1 <= 0xFE)
OUTB(b_1) // aa, -- xx. yy ...
- // continue;
+ // continue;
} else { // last 2 bytes
// , zn|fn|rn xx yy.
@@ -311,7 +310,7 @@ int TCOBSEncode(void* __restrict output, const void* __restrict input, size_t le
ASSERT(b_1 == 0xFF)
if (b == 0xFF) { // , f3 FF FF.
OUT_fullSigil // F3, FF FF.
- ASSERT(offset <= 31);
+ ASSERT(offset <= 31);
*o++ = F2 | offset; // F3 F2, -- --.
return (int)(o - out); // option: F4 FF, -- --. is also right
}
@@ -388,7 +387,7 @@ int TCOBSEncode(void* __restrict output, const void* __restrict input, size_t le
}
if (length == 1) { // , . xx
b = *i; // , -- xx.
- // goto lastByte;
+ // goto lastByte;
}
lastByte: // , -- xx.
diff --git a/src/tcobsv1Internal.h b/src/tcobsv1Internal.h
index 184ecdbf7..542d3e4c9 100644
--- a/src/tcobsv1Internal.h
+++ b/src/tcobsv1Internal.h
@@ -5,7 +5,6 @@
//! \file tcobsv1Internal.h
//! \brief tcobsv 1 Internal declarations and macros.
-
#ifndef TCOBS_INTERNAL_H_
#define TCOBS_INTERNAL_H_
diff --git a/src/trice.c b/src/trice.c
index ffde9904a..085d5587c 100644
--- a/src/trice.c
+++ b/src/trice.c
@@ -5,7 +5,10 @@
//! \file trice.c
//! \brief trice implementation.
-
+// Keep function-backed bind dispatch available when this implementation file
+// is textually included before user sources, as done by the CGO target tests.
+// The corresponding ABI definitions below use parenthesized declarators so
+// their public function-like macro names are not expanded.
#include "trice.h"
#include "cobs.h"
#include "tcobs.h"
@@ -723,7 +726,7 @@ void TriceNonBlockingDirectWrite(uint32_t* triceStart, unsigned wordCount) {
#if TRICE_DIRECT32_ONLY // Space at triceStart + wordCount is usable and we can destroy the data.
-#if (TRICE_DIRECT_XTEA_ENCRYPT == 1) // in-place encryption
+#if (TRICE_DIRECT_XTEA_ENCRYPT == 1) // in-place encryption
// The direct XTEA path pads and encrypts the payload in place, so triceStart
// must remain writable even if some non-encrypted branches only read from it.
triceStart[wordCount++] = 0; // clear padding space
@@ -756,9 +759,9 @@ void TriceNonBlockingDirectWrite(uint32_t* triceStart, unsigned wordCount) {
uint8_t* enc = (uint8_t*)triceStart;
size_t len = wordCount << 2; // Up to 3 trailing zeroes are here.
#else
- static uint8_t enc[TRICE_BUFFER_SIZE]; // If not static this is stack buffer and could save/waste RAM depending on users system.
+ static uint8_t enc[TRICE_BUFFER_SIZE]; // If not static this is stack buffer and could save/waste RAM depending on users system.
size_t len = directXEncode8(enc, triceStart, wordCount << 2); // Up to 3 trailing zeroes are packed as well here.
- // We do not know the padding count without interpreting the Trice.
+ // We do not know the padding count without interpreting the Trice.
#endif
TriceDirectWrite8(enc, len);
@@ -778,7 +781,7 @@ void TriceNonBlockingDirectWrite(uint32_t* triceStart, unsigned wordCount) {
wordCount &= ~1; // only multiple of 8 can be encrypted
XTEAEncrypt(dat, wordCount); // in-buffer encryption (in direct-only mode is usable space bedind the Trice message.)
#else
- uint32_t const * dat = triceStart;
+ uint32_t const* dat = triceStart;
#endif
#if (TRICE_DIRECT_OUT_FRAMING == TRICE_FRAMING_NONE)
@@ -1015,116 +1018,116 @@ void TRiceAssertFalseFn(uint16_t idN, int flag) {
#ifdef TRICE_N
-void triceN(int tid, char const* fmt, const void* buf, uint32_t n) {
+void(triceN)(int tid, char const* fmt, const void* buf, uint32_t n) {
TRICE_N(id(tid), fmt, buf, n);
}
-void TriceN(int tid, char const* fmt, const void* buf, uint32_t n) {
+void(TriceN)(int tid, char const* fmt, const void* buf, uint32_t n) {
TRICE_N(Id(tid), fmt, buf, n);
}
-void TRiceN(int tid, char const* fmt, const void* buf, uint32_t n) {
+void(TRiceN)(int tid, char const* fmt, const void* buf, uint32_t n) {
TRICE_N(ID(tid), fmt, buf, n);
}
-void trice8B(int tid, char const* fmt, const void* buf, uint32_t n) {
+void(trice8B)(int tid, char const* fmt, const void* buf, uint32_t n) {
TRICE8_B(id(tid), fmt, buf, n);
}
-void Trice8B(int tid, char const* fmt, const void* buf, uint32_t n) {
+void(Trice8B)(int tid, char const* fmt, const void* buf, uint32_t n) {
TRICE8_B(Id(tid), fmt, buf, n);
}
-void TRice8B(int tid, char const* fmt, const void* buf, uint32_t n) {
+void(TRice8B)(int tid, char const* fmt, const void* buf, uint32_t n) {
TRICE8_B(ID(tid), fmt, buf, n);
}
-void trice16B(int tid, char const* fmt, const void* buf, uint32_t n) {
+void(trice16B)(int tid, char const* fmt, const void* buf, uint32_t n) {
TRICE16_B(id(tid), fmt, buf, n);
}
-void Trice16B(int tid, char const* fmt, const void* buf, uint32_t n) {
+void(Trice16B)(int tid, char const* fmt, const void* buf, uint32_t n) {
TRICE16_B(Id(tid), fmt, buf, n);
}
-void TRice16B(int tid, char const* fmt, const void* buf, uint32_t n) {
+void(TRice16B)(int tid, char const* fmt, const void* buf, uint32_t n) {
TRICE16_B(ID(tid), fmt, buf, n);
}
-void trice32B(int tid, char const* fmt, const void* buf, uint32_t n) {
+void(trice32B)(int tid, char const* fmt, const void* buf, uint32_t n) {
TRICE32_B(id(tid), fmt, buf, n);
}
-void Trice32B(int tid, char const* fmt, const void* buf, uint32_t n) {
+void(Trice32B)(int tid, char const* fmt, const void* buf, uint32_t n) {
TRICE32_B(Id(tid), fmt, buf, n);
}
-void TRice32B(int tid, char const* fmt, const void* buf, uint32_t n) {
+void(TRice32B)(int tid, char const* fmt, const void* buf, uint32_t n) {
TRICE32_B(ID(tid), fmt, buf, n);
}
#if (TRICE_64_BIT_SUPPORT == 1)
-void trice64B(int tid, char const* fmt, const void* buf, uint32_t n) {
+void(trice64B)(int tid, char const* fmt, const void* buf, uint32_t n) {
TRICE64_B(id(tid), fmt, buf, n);
}
-void Trice64B(int tid, char const* fmt, const void* buf, uint32_t n) {
+void(Trice64B)(int tid, char const* fmt, const void* buf, uint32_t n) {
TRICE64_B(Id(tid), fmt, buf, n);
}
-void TRice64B(int tid, char const* fmt, const void* buf, uint32_t n) {
+void(TRice64B)(int tid, char const* fmt, const void* buf, uint32_t n) {
TRICE64_B(ID(tid), fmt, buf, n);
}
#endif // (TRICE_64_BIT_SUPPORT == 1)
#if TRICE_LEGACY_RPC_SUPPORT == 1
-void trice8F(int tid, char const* fmt, const void* buf, uint32_t n) {
+void(trice8F)(int tid, char const* fmt, const void* buf, uint32_t n) {
TRICE8_F(id(tid), fmt, buf, n);
}
-void Trice8F(int tid, char const* fmt, const void* buf, uint32_t n) {
+void(Trice8F)(int tid, char const* fmt, const void* buf, uint32_t n) {
TRICE8_F(Id(tid), fmt, buf, n);
}
-void TRice8F(int tid, char const* fmt, const void* buf, uint32_t n) {
+void(TRice8F)(int tid, char const* fmt, const void* buf, uint32_t n) {
TRICE8_F(ID(tid), fmt, buf, n);
}
-void trice16F(int tid, char const* fmt, const void* buf, uint32_t n) {
+void(trice16F)(int tid, char const* fmt, const void* buf, uint32_t n) {
TRICE16_F(id(tid), fmt, buf, n);
}
-void Trice16F(int tid, char const* fmt, const void* buf, uint32_t n) {
+void(Trice16F)(int tid, char const* fmt, const void* buf, uint32_t n) {
TRICE16_F(Id(tid), fmt, buf, n);
}
-void TRice16F(int tid, char const* fmt, const void* buf, uint32_t n) {
+void(TRice16F)(int tid, char const* fmt, const void* buf, uint32_t n) {
TRICE16_F(ID(tid), fmt, buf, n);
}
-void trice32F(int tid, char const* fmt, const void* buf, uint32_t n) {
+void(trice32F)(int tid, char const* fmt, const void* buf, uint32_t n) {
TRICE32_F(id(tid), fmt, buf, n);
}
-void Trice32F(int tid, char const* fmt, const void* buf, uint32_t n) {
+void(Trice32F)(int tid, char const* fmt, const void* buf, uint32_t n) {
TRICE32_F(Id(tid), fmt, buf, n);
}
-void TRice32F(int tid, char const* fmt, const void* buf, uint32_t n) {
+void(TRice32F)(int tid, char const* fmt, const void* buf, uint32_t n) {
TRICE32_F(ID(tid), fmt, buf, n);
}
#if (TRICE_64_BIT_SUPPORT == 1)
-void trice64F(int tid, char const* fmt, const void* buf, uint32_t n) {
+void(trice64F)(int tid, char const* fmt, const void* buf, uint32_t n) {
TRICE64_F(id(tid), fmt, buf, n);
}
-void Trice64F(int tid, char const* fmt, const void* buf, uint32_t n) {
+void(Trice64F)(int tid, char const* fmt, const void* buf, uint32_t n) {
TRICE64_F(Id(tid), fmt, buf, n);
}
-void TRice64F(int tid, char const* fmt, const void* buf, uint32_t n) {
+void(TRice64F)(int tid, char const* fmt, const void* buf, uint32_t n) {
TRICE64_F(ID(tid), fmt, buf, n);
}
#endif // (TRICE_64_BIT_SUPPORT == 1)
diff --git a/src/trice.h b/src/trice.h
index f72004f16..2268758dc 100644
--- a/src/trice.h
+++ b/src/trice.h
@@ -5,7 +5,6 @@
//! \file trice.h
//! \brief trice declarations and macros.
-
#ifndef TRICE_H_
#define TRICE_H_
@@ -95,6 +94,7 @@ extern "C" {
#include "triceConfig.h" // Project specific settings are overwriting the default settings.
#include "triceDefaultConfig.h" // default settings
+
#include "triceRx.h"
// Keep typeX0 output independent from the normal TRICE_OFF and TRICE_CLEAN
@@ -337,7 +337,7 @@ extern uint32_t* TriceBufferWritePosition;
#else // #if TRICE_CYCLE_COUNTER == 1
-#define TRICE_CYCLE ((uint_fast32_t) 0xC0) //!< TRICE_CYCLE is no trice cycle counter, just a static value.
+#define TRICE_CYCLE ((uint_fast32_t)0xC0) //!< TRICE_CYCLE is no trice cycle counter, just a static value.
#endif // #else // #if TRICE_CYCLE_COUNTER == 1
@@ -365,7 +365,7 @@ extern uint32_t* TriceBufferWritePosition;
//
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-#ifndef __cplusplus // see \#571
+#ifndef __cplusplus // see \#571
#if defined(__GNUC__) && (__GNUC__ >= 5) // see \#594
#pragma GCC diagnostic ignored "-Wincompatible-pointer-types"
#endif // GCC >= 5
@@ -464,15 +464,15 @@ extern uint32_t* TriceBufferWritePosition;
#define TRICE_MCU_IS_BIG_ENDIAN 1
//! Try compiler/endian macros next.
-#elif (defined(BYTE_ORDER) && defined(ORDER_LITTLE_ENDIAN) && (BYTE_ORDER == ORDER_LITTLE_ENDIAN)) || \
- (defined(__BYTE_ORDER) && defined(__ORDER_LITTLE_ENDIAN) && (__BYTE_ORDER == __ORDER_LITTLE_ENDIAN)) || \
- (defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__))
+#elif (defined(BYTE_ORDER) && defined(ORDER_LITTLE_ENDIAN) && (BYTE_ORDER == ORDER_LITTLE_ENDIAN)) || \
+ (defined(__BYTE_ORDER) && defined(__ORDER_LITTLE_ENDIAN) && (__BYTE_ORDER == __ORDER_LITTLE_ENDIAN)) || \
+ (defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__))
#define TRICE_MCU_IS_BIG_ENDIAN 0
-#elif (defined(BYTE_ORDER) && defined(ORDER_BIG_ENDIAN) && (BYTE_ORDER == ORDER_BIG_ENDIAN)) || \
- (defined(__BYTE_ORDER) && defined(__ORDER_BIG_ENDIAN) && (__BYTE_ORDER == __ORDER_BIG_ENDIAN)) || \
- (defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__))
+#elif (defined(BYTE_ORDER) && defined(ORDER_BIG_ENDIAN) && (BYTE_ORDER == ORDER_BIG_ENDIAN)) || \
+ (defined(__BYTE_ORDER) && defined(__ORDER_BIG_ENDIAN) && (__BYTE_ORDER == __ORDER_BIG_ENDIAN)) || \
+ (defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__))
#define TRICE_MCU_IS_BIG_ENDIAN 1
@@ -482,7 +482,7 @@ extern uint32_t* TriceBufferWritePosition;
#endif // #else #if defined(__STDC_ENDIAN_NATIVE__) && defined(__STDC_ENDIAN_LITTLE__) && (__STDC_ENDIAN_NATIVE__ == __STDC_ENDIAN_LITTLE__)
-#endif // #if (__STDC_VERSION__ >= 202000) //! C23 standard specification for endianess detection (Note N3022)
+#endif // #if (__STDC_VERSION__ >= 202000) //! C23 standard specification for endianess detection (Note N3022)
#endif // TRICE_MCU_IS_BIG_ENDIAN
//
@@ -760,10 +760,10 @@ extern uint32_t* TriceBufferWritePosition;
// `Trice0` and `TRice0` spellings are no longer emitted as linker-visible
// symbols. That is acceptable here because their compatibility role is served
// by fixed-arity macros below, which work in strict non-GNU C modes as well.
-#define TRICE_0 TRICE32_0 //!< Only the format string without parameter values.
-#define TRice_0 TRice32_0 //!< Only the format string without parameter values.
-#define Trice_0 Trice32_0 //!< Only the format string without parameter values.
-#define trice_0 trice32_0 //!< Only the format string without parameter values.
+#define TRICE_INSERT_TRICE_0 TRICE_INSERT_TRICE32_0 //!< Only the format string without parameter values.
+#define TRICE_INSERT_TRice_0 TRICE_INSERT_TRice32_0 //!< Only the format string without parameter values.
+#define TRICE_INSERT_Trice_0 TRICE_INSERT_Trice32_0 //!< Only the format string without parameter values.
+#define TRICE_INSERT_trice_0 TRICE_INSERT_trice32_0 //!< Only the format string without parameter values.
// These explicit zero-value spellings are kept as fixed-arity macros.
//
@@ -781,9 +781,9 @@ extern uint32_t* TriceBufferWritePosition;
//
// The `pFmt` parameter is intentionally accepted for source compatibility but
// ignored by the expansion.
-#define trice0(tid, pFmt) trice32_0(tid, pFmt)
-#define Trice0(tid, pFmt) Trice32_0(tid, pFmt)
-#define TRice0(tid, pFmt) TRice32_0(tid, pFmt)
+#define TRICE_INSERT_trice0(tid, pFmt) TRICE_INSERT_trice32_0(tid, pFmt)
+#define TRICE_INSERT_Trice0(tid, pFmt) TRICE_INSERT_Trice32_0(tid, pFmt)
+#define TRICE_INSERT_TRice0(tid, pFmt) TRICE_INSERT_TRice32_0(tid, pFmt)
#ifndef TRICE_N
@@ -801,7 +801,7 @@ extern uint32_t* TriceBufferWritePosition;
//
// todo: for some reason this macro is not working well with name len instead of len_, probably when injected len as value.
//
-#define TRICE_N(tid, pFmt, buf, n) \
+#define TRICE_INSERT_TRICE_N(tid, pFmt, buf, n) \
do { \
TRICE_UNUSED(pFmt); \
uint32_t limit_TRICE_N = TRICE_SINGLE_MAX_SIZE - 12; /* 12 = head(2) + max timestamp size(4) + count(2) + max 3 zeroes, we take 4 */ \
@@ -824,40 +824,77 @@ void triceN(int tid, char const* fmt, const void* buf, uint32_t n);
void TriceN(int tid, char const* fmt, const void* buf, uint32_t n);
void TRiceN(int tid, char const* fmt, const void* buf, uint32_t n);
+// These adapters keep the public function ABI while making expansion-time routing possible.
+#define TRICE_INSERT_triceN(tid, ...) (triceN)(tid, __VA_ARGS__)
+#define TRICE_INSERT_TriceN(tid, ...) (TriceN)(tid, __VA_ARGS__)
+#define TRICE_INSERT_TRiceN(tid, ...) (TRiceN)(tid, __VA_ARGS__)
+
void trice8B(int tid, char const* fmt, const void* buf, uint32_t n);
void Trice8B(int tid, char const* fmt, const void* buf, uint32_t n);
void TRice8B(int tid, char const* fmt, const void* buf, uint32_t n);
+#define TRICE_INSERT_trice8B(tid, ...) (trice8B)(tid, __VA_ARGS__)
+#define TRICE_INSERT_Trice8B(tid, ...) (Trice8B)(tid, __VA_ARGS__)
+#define TRICE_INSERT_TRice8B(tid, ...) (TRice8B)(tid, __VA_ARGS__)
+
void trice16B(int tid, char const* fmt, const void* buf, uint32_t n);
void Trice16B(int tid, char const* fmt, const void* buf, uint32_t n);
void TRice16B(int tid, char const* fmt, const void* buf, uint32_t n);
+#define TRICE_INSERT_trice16B(tid, ...) (trice16B)(tid, __VA_ARGS__)
+#define TRICE_INSERT_Trice16B(tid, ...) (Trice16B)(tid, __VA_ARGS__)
+#define TRICE_INSERT_TRice16B(tid, ...) (TRice16B)(tid, __VA_ARGS__)
+
void trice32B(int tid, char const* fmt, const void* buf, uint32_t n);
void Trice32B(int tid, char const* fmt, const void* buf, uint32_t n);
void TRice32B(int tid, char const* fmt, const void* buf, uint32_t n);
+#define TRICE_INSERT_trice32B(tid, ...) (trice32B)(tid, __VA_ARGS__)
+#define TRICE_INSERT_Trice32B(tid, ...) (Trice32B)(tid, __VA_ARGS__)
+#define TRICE_INSERT_TRice32B(tid, ...) (TRice32B)(tid, __VA_ARGS__)
+
void trice64B(int tid, char const* fmt, const void* buf, uint32_t n);
void Trice64B(int tid, char const* fmt, const void* buf, uint32_t n);
void TRice64B(int tid, char const* fmt, const void* buf, uint32_t n);
+#define TRICE_INSERT_trice64B(tid, ...) (trice64B)(tid, __VA_ARGS__)
+#define TRICE_INSERT_Trice64B(tid, ...) (Trice64B)(tid, __VA_ARGS__)
+#define TRICE_INSERT_TRice64B(tid, ...) (TRice64B)(tid, __VA_ARGS__)
+
#if TRICE_LEGACY_RPC_SUPPORT == 1
void trice8F(int tid, char const* fmt, const void* buf, uint32_t n);
void Trice8F(int tid, char const* fmt, const void* buf, uint32_t n);
void TRice8F(int tid, char const* fmt, const void* buf, uint32_t n);
+#define TRICE_INSERT_trice8F(tid, ...) (trice8F)(tid, __VA_ARGS__)
+#define TRICE_INSERT_Trice8F(tid, ...) (Trice8F)(tid, __VA_ARGS__)
+#define TRICE_INSERT_TRice8F(tid, ...) (TRice8F)(tid, __VA_ARGS__)
+
void trice16F(int tid, char const* fmt, const void* buf, uint32_t n);
void Trice16F(int tid, char const* fmt, const void* buf, uint32_t n);
void TRice16F(int tid, char const* fmt, const void* buf, uint32_t n);
+#define TRICE_INSERT_trice16F(tid, ...) (trice16F)(tid, __VA_ARGS__)
+#define TRICE_INSERT_Trice16F(tid, ...) (Trice16F)(tid, __VA_ARGS__)
+#define TRICE_INSERT_TRice16F(tid, ...) (TRice16F)(tid, __VA_ARGS__)
+
void trice32F(int tid, char const* fmt, const void* buf, uint32_t n);
void Trice32F(int tid, char const* fmt, const void* buf, uint32_t n);
void TRice32F(int tid, char const* fmt, const void* buf, uint32_t n);
+#define TRICE_INSERT_trice32F(tid, ...) (trice32F)(tid, __VA_ARGS__)
+#define TRICE_INSERT_Trice32F(tid, ...) (Trice32F)(tid, __VA_ARGS__)
+#define TRICE_INSERT_TRice32F(tid, ...) (TRice32F)(tid, __VA_ARGS__)
+
void trice64F(int tid, char const* fmt, const void* buf, uint32_t n);
void Trice64F(int tid, char const* fmt, const void* buf, uint32_t n);
void TRice64F(int tid, char const* fmt, const void* buf, uint32_t n);
+#define TRICE_INSERT_trice64F(tid, ...) (trice64F)(tid, __VA_ARGS__)
+#define TRICE_INSERT_Trice64F(tid, ...) (Trice64F)(tid, __VA_ARGS__)
+#define TRICE_INSERT_TRice64F(tid, ...) (TRice64F)(tid, __VA_ARGS__)
+
#endif // #if TRICE_LEGACY_RPC_SUPPORT == 1
#endif // #ifndef TRICE_N
@@ -868,10 +905,10 @@ void TRice64F(int tid, char const* fmt, const void* buf, uint32_t n);
//! \param tid trice identifier
//! \param pFmt format string for trice (ignored here but used by the trice tool)
//! \param runtimeGeneratedString 0-terminated runtime generated string
-#define TRICE_S(tid, pFmt, runtimeGeneratedString) \
- do { \
- size_t ssiz_TRICE_S = strlen(runtimeGeneratedString); \
- TRICE_N(tid, pFmt, runtimeGeneratedString, ssiz_TRICE_S); \
+#define TRICE_INSERT_TRICE_S(tid, pFmt, runtimeGeneratedString) \
+ do { \
+ size_t ssiz_TRICE_S = strlen(runtimeGeneratedString); \
+ TRICE_INSERT_TRICE_N(tid, pFmt, runtimeGeneratedString, ssiz_TRICE_S); \
} while (0)
// These fixed-arity source-level forms are intentionally macros instead of
@@ -901,9 +938,9 @@ void triceSfn(uint16_t tid, const char* runtimeGeneratedString);
void TriceSfn(uint16_t tid, const char* runtimeGeneratedString);
void TRiceSfn(uint16_t tid, const char* runtimeGeneratedString);
-#define triceS(tid, fmt, runtimeGeneratedString) triceSfn((uint16_t)(tid), runtimeGeneratedString)
-#define TriceS(tid, fmt, runtimeGeneratedString) TriceSfn((uint16_t)(tid), runtimeGeneratedString)
-#define TRiceS(tid, fmt, runtimeGeneratedString) TRiceSfn((uint16_t)(tid), runtimeGeneratedString)
+#define TRICE_INSERT_triceS(tid, fmt, runtimeGeneratedString) triceSfn((uint16_t)(tid), runtimeGeneratedString)
+#define TRICE_INSERT_TriceS(tid, fmt, runtimeGeneratedString) TriceSfn((uint16_t)(tid), runtimeGeneratedString)
+#define TRICE_INSERT_TRiceS(tid, fmt, runtimeGeneratedString) TRiceSfn((uint16_t)(tid), runtimeGeneratedString)
#endif // #ifndef TRICE_S
@@ -961,9 +998,9 @@ void TRiceSfn(uint16_t tid, const char* runtimeGeneratedString);
#define TRICE_C_ID32(n) TRICE_PUT16((uint16_t)(0xC000) | (uint16_t)(n));
//! TRICE_C_ID16 writes the 16-bit-stamped ABC ID header without fetching TriceStamp16.
-#define TRICE_C_ID16(n) \
- do { \
- TRICE_PUT(TRICE_HTOTL(0x80008000u | (((uint32_t)(n)) << 16) | ((uint32_t)(n)))); \
+#define TRICE_C_ID16(n) \
+ do { \
+ TRICE_PUT(TRICE_HTOTL(0x80008000u | (((uint32_t)(n)) << 16) | ((uint32_t)(n)))); \
} while (0)
//! TRICE_C_ID0 writes the no-stamp ABC ID header.
@@ -971,17 +1008,17 @@ void TRiceSfn(uint16_t tid, const char* runtimeGeneratedString);
#if TRICE_TRANSFER_ORDER_IS_BIG_ENDIAN == 0
//! TRICE_C_STAMP32 writes a user-supplied 32-bit ABC stamp in transfer order.
-#define TRICE_C_STAMP32(stamp32) \
- do { \
- uint32_t ts_TRICE_C_STAMP32 = (stamp32); \
+#define TRICE_C_STAMP32(stamp32) \
+ do { \
+ uint32_t ts_TRICE_C_STAMP32 = (stamp32); \
TRICE_PUT16((uint16_t)ts_TRICE_C_STAMP32); \
TRICE_PUT16((uint16_t)(ts_TRICE_C_STAMP32 >> 16)); \
} while (0)
#else
//! TRICE_C_STAMP32 writes a user-supplied 32-bit ABC stamp in transfer order.
-#define TRICE_C_STAMP32(stamp32) \
- do { \
- uint32_t ts_TRICE_C_STAMP32 = (stamp32); \
+#define TRICE_C_STAMP32(stamp32) \
+ do { \
+ uint32_t ts_TRICE_C_STAMP32 = (stamp32); \
TRICE_PUT16((uint16_t)(ts_TRICE_C_STAMP32 >> 16)); \
TRICE_PUT16((uint16_t)ts_TRICE_C_STAMP32); \
} while (0)
@@ -991,129 +1028,129 @@ void TRiceSfn(uint16_t tid, const char* runtimeGeneratedString);
#define TRICE_C_STAMP16(stamp16) TRICE_PUT16((uint16_t)(stamp16))
//! TRICE_C_0_0 writes a no-payload ABC command without stamp.
-#define TRICE_C_0_0(tid, pFmt) \
- do { \
- TRICE_UNUSED(pFmt); \
- TRICE_ENTER tid; \
- TRICE_CNTC(0); \
- TRICE_LEAVE \
+#define TRICE_INSERT_TRICE_C_0_0(tid, pFmt) \
+ do { \
+ TRICE_UNUSED(pFmt); \
+ TRICE_ENTER tid; \
+ TRICE_CNTC(0); \
+ TRICE_LEAVE \
} while (0)
//! TRICE_C_0_16 writes a no-payload ABC command with an explicit 16-bit stamp.
-#define TRICE_C_0_16(tid, pFmt, stamp16) \
- do { \
- TRICE_UNUSED(pFmt); \
- TRICE_ENTER tid; \
- TRICE_C_STAMP16(stamp16); \
- TRICE_CNTC(0); \
- TRICE_LEAVE \
+#define TRICE_INSERT_TRICE_C_0_16(tid, pFmt, stamp16) \
+ do { \
+ TRICE_UNUSED(pFmt); \
+ TRICE_ENTER tid; \
+ TRICE_C_STAMP16(stamp16); \
+ TRICE_CNTC(0); \
+ TRICE_LEAVE \
} while (0)
//! TRICE_C_0_32 writes a no-payload ABC command with an explicit 32-bit stamp.
-#define TRICE_C_0_32(tid, pFmt, stamp32) \
- do { \
- TRICE_UNUSED(pFmt); \
- TRICE_ENTER tid; \
- TRICE_C_STAMP32(stamp32); \
- TRICE_CNTC(0); \
- TRICE_LEAVE \
+#define TRICE_INSERT_TRICE_C_0_32(tid, pFmt, stamp32) \
+ do { \
+ TRICE_UNUSED(pFmt); \
+ TRICE_ENTER tid; \
+ TRICE_C_STAMP32(stamp32); \
+ TRICE_CNTC(0); \
+ TRICE_LEAVE \
} while (0)
-#define TRICE_C_N0(tid, pFmt, buf, n) TRICE_N(tid, pFmt, buf, n)
+#define TRICE_INSERT_TRICE_C_N0(tid, pFmt, buf, n) TRICE_INSERT_TRICE_N(tid, pFmt, buf, n)
//! TRICE_C_N16 writes a counted-buffer ABC command with an explicit 16-bit stamp.
-#define TRICE_C_N16(tid, pFmt, stamp16, buf, n) \
- do { \
- TRICE_UNUSED(pFmt); \
- uint32_t limit_TRICE_C_N16 = TRICE_SINGLE_MAX_SIZE - 12; \
- uint32_t len_TRICE_C_N16 = (uint32_t)(n); \
- if (len_TRICE_C_N16 > limit_TRICE_C_N16) { \
- TRICE_DYN_STRG_BUF_TRUNCATE_COUNT_INCREMENT(); \
- len_TRICE_C_N16 = limit_TRICE_C_N16; \
- } \
- TRICE_ENTER tid; \
- TRICE_C_STAMP16(stamp16); \
- if (len_TRICE_C_N16 <= 127) { \
- TRICE_CNTC(len_TRICE_C_N16); \
- } else { \
- TRICE_LCNT(len_TRICE_C_N16); \
- } \
- TRICE_PUT_BUFFER(buf, len_TRICE_C_N16); \
- TRICE_LEAVE \
+#define TRICE_INSERT_TRICE_C_N16(tid, pFmt, stamp16, buf, n) \
+ do { \
+ TRICE_UNUSED(pFmt); \
+ uint32_t limit_TRICE_C_N16 = TRICE_SINGLE_MAX_SIZE - 12; \
+ uint32_t len_TRICE_C_N16 = (uint32_t)(n); \
+ if (len_TRICE_C_N16 > limit_TRICE_C_N16) { \
+ TRICE_DYN_STRG_BUF_TRUNCATE_COUNT_INCREMENT(); \
+ len_TRICE_C_N16 = limit_TRICE_C_N16; \
+ } \
+ TRICE_ENTER tid; \
+ TRICE_C_STAMP16(stamp16); \
+ if (len_TRICE_C_N16 <= 127) { \
+ TRICE_CNTC(len_TRICE_C_N16); \
+ } else { \
+ TRICE_LCNT(len_TRICE_C_N16); \
+ } \
+ TRICE_PUT_BUFFER(buf, len_TRICE_C_N16); \
+ TRICE_LEAVE \
} while (0)
//! TRICE_C_N32 writes a counted-buffer ABC command with an explicit 32-bit stamp.
-#define TRICE_C_N32(tid, pFmt, stamp32, buf, n) \
- do { \
- TRICE_UNUSED(pFmt); \
- uint32_t limit_TRICE_C_N32 = TRICE_SINGLE_MAX_SIZE - 12; \
- uint32_t len_TRICE_C_N32 = (uint32_t)(n); \
- if (len_TRICE_C_N32 > limit_TRICE_C_N32) { \
- TRICE_DYN_STRG_BUF_TRUNCATE_COUNT_INCREMENT(); \
- len_TRICE_C_N32 = limit_TRICE_C_N32; \
- } \
- TRICE_ENTER tid; \
- TRICE_C_STAMP32(stamp32); \
- if (len_TRICE_C_N32 <= 127) { \
- TRICE_CNTC(len_TRICE_C_N32); \
- } else { \
- TRICE_LCNT(len_TRICE_C_N32); \
- } \
- TRICE_PUT_BUFFER(buf, len_TRICE_C_N32); \
- TRICE_LEAVE \
+#define TRICE_INSERT_TRICE_C_N32(tid, pFmt, stamp32, buf, n) \
+ do { \
+ TRICE_UNUSED(pFmt); \
+ uint32_t limit_TRICE_C_N32 = TRICE_SINGLE_MAX_SIZE - 12; \
+ uint32_t len_TRICE_C_N32 = (uint32_t)(n); \
+ if (len_TRICE_C_N32 > limit_TRICE_C_N32) { \
+ TRICE_DYN_STRG_BUF_TRUNCATE_COUNT_INCREMENT(); \
+ len_TRICE_C_N32 = limit_TRICE_C_N32; \
+ } \
+ TRICE_ENTER tid; \
+ TRICE_C_STAMP32(stamp32); \
+ if (len_TRICE_C_N32 <= 127) { \
+ TRICE_CNTC(len_TRICE_C_N32); \
+ } else { \
+ TRICE_LCNT(len_TRICE_C_N32); \
+ } \
+ TRICE_PUT_BUFFER(buf, len_TRICE_C_N32); \
+ TRICE_LEAVE \
} while (0)
-#define TRIce_C(tid, pFmt) TRICE_C_0_0(TRICE_C_ID0(tid), pFmt)
-#define TRICe_C(tid, pFmt, stamp16) TRICE_C_0_16(TRICE_C_ID16(tid), pFmt, stamp16)
-#define TRICE_C(tid, pFmt, stamp32) TRICE_C_0_32(TRICE_C_ID32(tid), pFmt, stamp32)
+#define TRICE_INSERT_TRIce_C(tid, pFmt) TRICE_INSERT_TRICE_C_0_0(TRICE_C_ID0(tid), pFmt)
+#define TRICE_INSERT_TRICe_C(tid, pFmt, stamp16) TRICE_INSERT_TRICE_C_0_16(TRICE_C_ID16(tid), pFmt, stamp16)
+#define TRICE_INSERT_TRICE_C(tid, pFmt, stamp32) TRICE_INSERT_TRICE_C_0_32(TRICE_C_ID32(tid), pFmt, stamp32)
-#define TRIce8_C(tid, pFmt, buf, n) TRICE_C_N0(TRICE_C_ID0(tid), pFmt, buf, 1u * (uint32_t)(n))
-#define TRICe8_C(tid, pFmt, stamp16, buf, n) TRICE_C_N16(TRICE_C_ID16(tid), pFmt, stamp16, buf, 1u * (uint32_t)(n))
-#define TRICE8_C(tid, pFmt, stamp32, buf, n) TRICE_C_N32(TRICE_C_ID32(tid), pFmt, stamp32, buf, 1u * (uint32_t)(n))
+#define TRICE_INSERT_TRIce8_C(tid, pFmt, buf, n) TRICE_INSERT_TRICE_C_N0(TRICE_C_ID0(tid), pFmt, buf, 1u * (uint32_t)(n))
+#define TRICE_INSERT_TRICe8_C(tid, pFmt, stamp16, buf, n) TRICE_INSERT_TRICE_C_N16(TRICE_C_ID16(tid), pFmt, stamp16, buf, 1u * (uint32_t)(n))
+#define TRICE_INSERT_TRICE8_C(tid, pFmt, stamp32, buf, n) TRICE_INSERT_TRICE_C_N32(TRICE_C_ID32(tid), pFmt, stamp32, buf, 1u * (uint32_t)(n))
-#define TRIce16_C(tid, pFmt, buf, n) TRICE_C_N0(TRICE_C_ID0(tid), pFmt, buf, 2u * (uint32_t)(n))
-#define TRICe16_C(tid, pFmt, stamp16, buf, n) TRICE_C_N16(TRICE_C_ID16(tid), pFmt, stamp16, buf, 2u * (uint32_t)(n))
-#define TRICE16_C(tid, pFmt, stamp32, buf, n) TRICE_C_N32(TRICE_C_ID32(tid), pFmt, stamp32, buf, 2u * (uint32_t)(n))
+#define TRICE_INSERT_TRIce16_C(tid, pFmt, buf, n) TRICE_INSERT_TRICE_C_N0(TRICE_C_ID0(tid), pFmt, buf, 2u * (uint32_t)(n))
+#define TRICE_INSERT_TRICe16_C(tid, pFmt, stamp16, buf, n) TRICE_INSERT_TRICE_C_N16(TRICE_C_ID16(tid), pFmt, stamp16, buf, 2u * (uint32_t)(n))
+#define TRICE_INSERT_TRICE16_C(tid, pFmt, stamp32, buf, n) TRICE_INSERT_TRICE_C_N32(TRICE_C_ID32(tid), pFmt, stamp32, buf, 2u * (uint32_t)(n))
-#define TRIce32_C(tid, pFmt, buf, n) TRICE_C_N0(TRICE_C_ID0(tid), pFmt, buf, 4u * (uint32_t)(n))
-#define TRICe32_C(tid, pFmt, stamp16, buf, n) TRICE_C_N16(TRICE_C_ID16(tid), pFmt, stamp16, buf, 4u * (uint32_t)(n))
-#define TRICE32_C(tid, pFmt, stamp32, buf, n) TRICE_C_N32(TRICE_C_ID32(tid), pFmt, stamp32, buf, 4u * (uint32_t)(n))
+#define TRICE_INSERT_TRIce32_C(tid, pFmt, buf, n) TRICE_INSERT_TRICE_C_N0(TRICE_C_ID0(tid), pFmt, buf, 4u * (uint32_t)(n))
+#define TRICE_INSERT_TRICe32_C(tid, pFmt, stamp16, buf, n) TRICE_INSERT_TRICE_C_N16(TRICE_C_ID16(tid), pFmt, stamp16, buf, 4u * (uint32_t)(n))
+#define TRICE_INSERT_TRICE32_C(tid, pFmt, stamp32, buf, n) TRICE_INSERT_TRICE_C_N32(TRICE_C_ID32(tid), pFmt, stamp32, buf, 4u * (uint32_t)(n))
#if (TRICE_64_BIT_SUPPORT == 1)
-#define TRIce64_C(tid, pFmt, buf, n) TRICE_C_N0(TRICE_C_ID0(tid), pFmt, buf, 8u * (uint32_t)(n))
-#define TRICe64_C(tid, pFmt, stamp16, buf, n) TRICE_C_N16(TRICE_C_ID16(tid), pFmt, stamp16, buf, 8u * (uint32_t)(n))
-#define TRICE64_C(tid, pFmt, stamp32, buf, n) TRICE_C_N32(TRICE_C_ID32(tid), pFmt, stamp32, buf, 8u * (uint32_t)(n))
+#define TRICE_INSERT_TRIce64_C(tid, pFmt, buf, n) TRICE_INSERT_TRICE_C_N0(TRICE_C_ID0(tid), pFmt, buf, 8u * (uint32_t)(n))
+#define TRICE_INSERT_TRICe64_C(tid, pFmt, stamp16, buf, n) TRICE_INSERT_TRICE_C_N16(TRICE_C_ID16(tid), pFmt, stamp16, buf, 8u * (uint32_t)(n))
+#define TRICE_INSERT_TRICE64_C(tid, pFmt, stamp32, buf, n) TRICE_INSERT_TRICE_C_N32(TRICE_C_ID32(tid), pFmt, stamp32, buf, 8u * (uint32_t)(n))
#endif // #if (TRICE_64_BIT_SUPPORT == 1)
-#define triceC(tid, pFmt) TRIce_C(tid, pFmt)
-#define TriceC(tid, pFmt, stamp16) TRICe_C(tid, pFmt, stamp16)
-#define TRiceC(tid, pFmt, stamp32) TRICE_C(tid, pFmt, stamp32)
+#define TRICE_INSERT_triceC(tid, pFmt) TRICE_INSERT_TRIce_C(tid, pFmt)
+#define TRICE_INSERT_TriceC(tid, pFmt, stamp16) TRICE_INSERT_TRICe_C(tid, pFmt, stamp16)
+#define TRICE_INSERT_TRiceC(tid, pFmt, stamp32) TRICE_INSERT_TRICE_C(tid, pFmt, stamp32)
-#define trice8C(tid, pFmt, buf, n) TRIce8_C(tid, pFmt, buf, n)
-#define Trice8C(tid, pFmt, stamp16, buf, n) TRICe8_C(tid, pFmt, stamp16, buf, n)
-#define TRice8C(tid, pFmt, stamp32, buf, n) TRICE8_C(tid, pFmt, stamp32, buf, n)
+#define TRICE_INSERT_trice8C(tid, pFmt, buf, n) TRICE_INSERT_TRIce8_C(tid, pFmt, buf, n)
+#define TRICE_INSERT_Trice8C(tid, pFmt, stamp16, buf, n) TRICE_INSERT_TRICe8_C(tid, pFmt, stamp16, buf, n)
+#define TRICE_INSERT_TRice8C(tid, pFmt, stamp32, buf, n) TRICE_INSERT_TRICE8_C(tid, pFmt, stamp32, buf, n)
-#define trice16C(tid, pFmt, buf, n) TRIce16_C(tid, pFmt, buf, n)
-#define Trice16C(tid, pFmt, stamp16, buf, n) TRICe16_C(tid, pFmt, stamp16, buf, n)
-#define TRice16C(tid, pFmt, stamp32, buf, n) TRICE16_C(tid, pFmt, stamp32, buf, n)
+#define TRICE_INSERT_trice16C(tid, pFmt, buf, n) TRICE_INSERT_TRIce16_C(tid, pFmt, buf, n)
+#define TRICE_INSERT_Trice16C(tid, pFmt, stamp16, buf, n) TRICE_INSERT_TRICe16_C(tid, pFmt, stamp16, buf, n)
+#define TRICE_INSERT_TRice16C(tid, pFmt, stamp32, buf, n) TRICE_INSERT_TRICE16_C(tid, pFmt, stamp32, buf, n)
-#define trice32C(tid, pFmt, buf, n) TRIce32_C(tid, pFmt, buf, n)
-#define Trice32C(tid, pFmt, stamp16, buf, n) TRICe32_C(tid, pFmt, stamp16, buf, n)
-#define TRice32C(tid, pFmt, stamp32, buf, n) TRICE32_C(tid, pFmt, stamp32, buf, n)
+#define TRICE_INSERT_trice32C(tid, pFmt, buf, n) TRICE_INSERT_TRIce32_C(tid, pFmt, buf, n)
+#define TRICE_INSERT_Trice32C(tid, pFmt, stamp16, buf, n) TRICE_INSERT_TRICe32_C(tid, pFmt, stamp16, buf, n)
+#define TRICE_INSERT_TRice32C(tid, pFmt, stamp32, buf, n) TRICE_INSERT_TRICE32_C(tid, pFmt, stamp32, buf, n)
#if (TRICE_64_BIT_SUPPORT == 1)
-#define trice64C(tid, pFmt, buf, n) TRIce64_C(tid, pFmt, buf, n)
-#define Trice64C(tid, pFmt, stamp16, buf, n) TRICe64_C(tid, pFmt, stamp16, buf, n)
-#define TRice64C(tid, pFmt, stamp32, buf, n) TRICE64_C(tid, pFmt, stamp32, buf, n)
+#define TRICE_INSERT_trice64C(tid, pFmt, buf, n) TRICE_INSERT_TRIce64_C(tid, pFmt, buf, n)
+#define TRICE_INSERT_Trice64C(tid, pFmt, stamp16, buf, n) TRICE_INSERT_TRICe64_C(tid, pFmt, stamp16, buf, n)
+#define TRICE_INSERT_TRice64C(tid, pFmt, stamp32, buf, n) TRICE_INSERT_TRICE64_C(tid, pFmt, stamp32, buf, n)
#endif // #if (TRICE_64_BIT_SUPPORT == 1)
#endif // #if TRICE_TX_ABC_SUPPORT == 1
//! TRICE0 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
-#define TRICE0(tid, pFmt) \
- TRICE_ENTER tid; \
- TRICE_CNTC(0); \
+#define TRICE_INSERT_TRICE0(tid, pFmt) \
+ TRICE_ENTER tid; \
+ TRICE_CNTC(0); \
TRICE_LEAVE
// The Assert spellings follow the same hybrid pattern as the string helpers:
@@ -1132,25 +1169,63 @@ void triceAssertFalseFn(uint16_t idN, int flag);
void TriceAssertFalseFn(uint16_t idN, int flag);
void TRiceAssertFalseFn(uint16_t idN, int flag);
-#define triceAssertTrue(idN, msg, flag) triceAssertTrueFn((uint16_t)(idN), flag)
-#define TriceAssertTrue(idN, msg, flag) TriceAssertTrueFn((uint16_t)(idN), flag)
-#define TRiceAssertTrue(idN, msg, flag) TRiceAssertTrueFn((uint16_t)(idN), flag)
+#define TRICE_INSERT_triceAssertTrue(idN, msg, flag) triceAssertTrueFn((uint16_t)(idN), flag)
+#define TRICE_INSERT_TriceAssertTrue(idN, msg, flag) TriceAssertTrueFn((uint16_t)(idN), flag)
+#define TRICE_INSERT_TRiceAssertTrue(idN, msg, flag) TRiceAssertTrueFn((uint16_t)(idN), flag)
-#define triceAssertFalse(idN, msg, flag) triceAssertFalseFn((uint16_t)(idN), flag)
-#define TriceAssertFalse(idN, msg, flag) TriceAssertFalseFn((uint16_t)(idN), flag)
-#define TRiceAssertFalse(idN, msg, flag) TRiceAssertFalseFn((uint16_t)(idN), flag)
+#define TRICE_INSERT_triceAssertFalse(idN, msg, flag) triceAssertFalseFn((uint16_t)(idN), flag)
+#define TRICE_INSERT_TriceAssertFalse(idN, msg, flag) TriceAssertFalseFn((uint16_t)(idN), flag)
+#define TRICE_INSERT_TRiceAssertFalse(idN, msg, flag) TRiceAssertFalseFn((uint16_t)(idN), flag)
-#define triceAssert(idN, msg, flag) triceAssertTrue(idN, msg, flag)
-#define TriceAssert(idN, msg, flag) TriceAssertTrue(idN, msg, flag)
-#define TRiceAssert(idN, msg, flag) TRiceAssertTrue(idN, msg, flag)
+#define TRICE_INSERT_triceAssert(idN, msg, flag) TRICE_INSERT_triceAssertTrue(idN, msg, flag)
+#define TRICE_INSERT_TriceAssert(idN, msg, flag) TRICE_INSERT_TriceAssertTrue(idN, msg, flag)
+#define TRICE_INSERT_TRiceAssert(idN, msg, flag) TRICE_INSERT_TRiceAssertTrue(idN, msg, flag)
+
+#define TRICE_INSERT_triceAssertOrReturn(idN, msg, flag) \
+ do { \
+ if (!(flag)) { \
+ TRICE_INSERT_trice(idN, msg); \
+ return; \
+ } \
+ } while (0)
+#define TRICE_INSERT_TriceAssertOrReturn(idN, msg, flag) \
+ do { \
+ if (!(flag)) { \
+ TRICE_INSERT_Trice(idN, msg); \
+ return; \
+ } \
+ } while (0)
+#define TRICE_INSERT_TRiceAssertOrReturn(idN, msg, flag) \
+ do { \
+ if (!(flag)) { \
+ TRICE_INSERT_TRice(idN, msg); \
+ return; \
+ } \
+ } while (0)
-#define triceAssertOrReturn(idN, msg, flag) do {if (!(flag)) {trice(idN, msg); return;}} while(0)
-#define TriceAssertOrReturn(idN, msg, flag) do {if (!(flag)) {Trice(idN, msg); return;}} while(0)
-#define TRiceAssertOrReturn(idN, msg, flag) do {if (!(flag)) {TRice(idN, msg); return;}} while(0)
+#define TRICE_INSERT_triceAssertOrReturnValue(idN, msg, flag, value) \
+ do { \
+ if (!(flag)) { \
+ TRICE_INSERT_trice(idN, msg); \
+ return (value); \
+ } \
+ } while (0)
+#define TRICE_INSERT_TriceAssertOrReturnValue(idN, msg, flag, value) \
+ do { \
+ if (!(flag)) { \
+ TRICE_INSERT_Trice(idN, msg); \
+ return (value); \
+ } \
+ } while (0)
+#define TRICE_INSERT_TRiceAssertOrReturnValue(idN, msg, flag, value) \
+ do { \
+ if (!(flag)) { \
+ TRICE_INSERT_TRice(idN, msg); \
+ return (value); \
+ } \
+ } while (0)
-#define triceAssertOrReturnValue(idN, msg, flag, value) do {if (!(flag)) {trice(idN, msg); return (value);}} while(0)
-#define TriceAssertOrReturnValue(idN, msg, flag, value) do {if (!(flag)) {Trice(idN, msg); return (value);}} while(0)
-#define TRiceAssertOrReturnValue(idN, msg, flag, value) do {if (!(flag)) {TRice(idN, msg); return (value);}} while(0)
+#include "triceBind.h"
#endif // #if (TRICE_OFF == 0) && (TRICE_CLEAN == 0)
diff --git a/src/trice16.c b/src/trice16.c
index c02805e92..e70862fce 100644
--- a/src/trice16.c
+++ b/src/trice16.c
@@ -5,7 +5,6 @@
//! \file trice16.c
//! \brief trice 16 implementation.
-
#include "trice.h"
// lint -e529 Warning 529: Symbol '_SEGGER_RTT__LockState' not subsequently referenced
diff --git a/src/trice16.h b/src/trice16.h
index 6965ab2ab..685cad13a 100644
--- a/src/trice16.h
+++ b/src/trice16.h
@@ -5,67 +5,66 @@
//! \file trice16.h
//! \brief trice 16 declarations and macros.
-
#ifndef TRICE16_H_
#define TRICE16_H_
#if TRICE_DEFAULT_PARAMETER_BIT_WIDTH == 16
// #define TRICE_0 TRICE16_0 //!< Default parameter bit width for 0 parameter count TRICE is 16.
-#define TRICE_1 TRICE16_1 //!< Default parameter bit width for 1 parameter count TRICE is 16.
-#define TRICE_2 TRICE16_2 //!< Default parameter bit width for 2 parameter count TRICE is 16.
-#define TRICE_3 TRICE16_3 //!< Default parameter bit width for 3 parameter count TRICE is 16.
-#define TRICE_4 TRICE16_4 //!< Default parameter bit width for 4 parameter count TRICE is 16.
-#define TRICE_5 TRICE16_5 //!< Default parameter bit width for 5 parameter count TRICE is 16.
-#define TRICE_6 TRICE16_6 //!< Default parameter bit width for 6 parameter count TRICE is 16.
-#define TRICE_7 TRICE16_7 //!< Default parameter bit width for 7 parameter count TRICE is 16.
-#define TRICE_8 TRICE16_8 //!< Default parameter bit width for 8 parameter count TRICE is 16.
-#define TRICE_9 TRICE16_9 //!< Default parameter bit width for 9 parameter count TRICE is 16.
-#define TRICE_10 TRICE16_10 //!< Default parameter bit width for 10 parameter count TRICE is 16.
-#define TRICE_11 TRICE16_11 //!< Default parameter bit width for 11 parameter count TRICE is 16.
-#define TRICE_12 TRICE16_12 //!< Default parameter bit width for 12 parameter count TRICE is 16.
+#define TRICE_INSERT_TRICE_1 TRICE_INSERT_TRICE16_1 //!< Default parameter bit width for 1 parameter count TRICE is 16.
+#define TRICE_INSERT_TRICE_2 TRICE_INSERT_TRICE16_2 //!< Default parameter bit width for 2 parameter count TRICE is 16.
+#define TRICE_INSERT_TRICE_3 TRICE_INSERT_TRICE16_3 //!< Default parameter bit width for 3 parameter count TRICE is 16.
+#define TRICE_INSERT_TRICE_4 TRICE_INSERT_TRICE16_4 //!< Default parameter bit width for 4 parameter count TRICE is 16.
+#define TRICE_INSERT_TRICE_5 TRICE_INSERT_TRICE16_5 //!< Default parameter bit width for 5 parameter count TRICE is 16.
+#define TRICE_INSERT_TRICE_6 TRICE_INSERT_TRICE16_6 //!< Default parameter bit width for 6 parameter count TRICE is 16.
+#define TRICE_INSERT_TRICE_7 TRICE_INSERT_TRICE16_7 //!< Default parameter bit width for 7 parameter count TRICE is 16.
+#define TRICE_INSERT_TRICE_8 TRICE_INSERT_TRICE16_8 //!< Default parameter bit width for 8 parameter count TRICE is 16.
+#define TRICE_INSERT_TRICE_9 TRICE_INSERT_TRICE16_9 //!< Default parameter bit width for 9 parameter count TRICE is 16.
+#define TRICE_INSERT_TRICE_10 TRICE_INSERT_TRICE16_10 //!< Default parameter bit width for 10 parameter count TRICE is 16.
+#define TRICE_INSERT_TRICE_11 TRICE_INSERT_TRICE16_11 //!< Default parameter bit width for 11 parameter count TRICE is 16.
+#define TRICE_INSERT_TRICE_12 TRICE_INSERT_TRICE16_12 //!< Default parameter bit width for 12 parameter count TRICE is 16.
// #define trice_0 trice16_0 //!< Default parameter bit width for 0 parameter count trice is 16.
-#define trice_1 trice16_1 //!< Default parameter bit width for 1 parameter count trice is 16.
-#define trice_2 trice16_2 //!< Default parameter bit width for 2 parameter count trice is 16.
-#define trice_3 trice16_3 //!< Default parameter bit width for 3 parameter count trice is 16.
-#define trice_4 trice16_4 //!< Default parameter bit width for 4 parameter count trice is 16.
-#define trice_5 trice16_5 //!< Default parameter bit width for 5 parameter count trice is 16.
-#define trice_6 trice16_6 //!< Default parameter bit width for 6 parameter count trice is 16.
-#define trice_7 trice16_7 //!< Default parameter bit width for 7 parameter count trice is 16.
-#define trice_8 trice16_8 //!< Default parameter bit width for 8 parameter count trice is 16.
-#define trice_9 trice16_9 //!< Default parameter bit width for 9 parameter count trice is 16.
-#define trice_10 trice16_10 //!< Default parameter bit width for 10 parameter count trice is 16.
-#define trice_11 trice16_11 //!< Default parameter bit width for 11 parameter count trice is 16.
-#define trice_12 trice16_12 //!< Default parameter bit width for 12 parameter count trice is 16.
+#define TRICE_INSERT_trice_1 TRICE_INSERT_trice16_1 //!< Default parameter bit width for 1 parameter count trice is 16.
+#define TRICE_INSERT_trice_2 TRICE_INSERT_trice16_2 //!< Default parameter bit width for 2 parameter count trice is 16.
+#define TRICE_INSERT_trice_3 TRICE_INSERT_trice16_3 //!< Default parameter bit width for 3 parameter count trice is 16.
+#define TRICE_INSERT_trice_4 TRICE_INSERT_trice16_4 //!< Default parameter bit width for 4 parameter count trice is 16.
+#define TRICE_INSERT_trice_5 TRICE_INSERT_trice16_5 //!< Default parameter bit width for 5 parameter count trice is 16.
+#define TRICE_INSERT_trice_6 TRICE_INSERT_trice16_6 //!< Default parameter bit width for 6 parameter count trice is 16.
+#define TRICE_INSERT_trice_7 TRICE_INSERT_trice16_7 //!< Default parameter bit width for 7 parameter count trice is 16.
+#define TRICE_INSERT_trice_8 TRICE_INSERT_trice16_8 //!< Default parameter bit width for 8 parameter count trice is 16.
+#define TRICE_INSERT_trice_9 TRICE_INSERT_trice16_9 //!< Default parameter bit width for 9 parameter count trice is 16.
+#define TRICE_INSERT_trice_10 TRICE_INSERT_trice16_10 //!< Default parameter bit width for 10 parameter count trice is 16.
+#define TRICE_INSERT_trice_11 TRICE_INSERT_trice16_11 //!< Default parameter bit width for 11 parameter count trice is 16.
+#define TRICE_INSERT_trice_12 TRICE_INSERT_trice16_12 //!< Default parameter bit width for 12 parameter count trice is 16.
// #define Trice_0 Trice16_0 //!< Default parameter bit width for 0 parameter count Trice is 16.
-#define Trice_1 Trice16_1 //!< Default parameter bit width for 1 parameter count Trice is 16.
-#define Trice_2 Trice16_2 //!< Default parameter bit width for 2 parameter count Trice is 16.
-#define Trice_3 Trice16_3 //!< Default parameter bit width for 3 parameter count Trice is 16.
-#define Trice_4 Trice16_4 //!< Default parameter bit width for 4 parameter count Trice is 16.
-#define Trice_5 Trice16_5 //!< Default parameter bit width for 5 parameter count Trice is 16.
-#define Trice_6 Trice16_6 //!< Default parameter bit width for 6 parameter count Trice is 16.
-#define Trice_7 Trice16_7 //!< Default parameter bit width for 7 parameter count Trice is 16.
-#define Trice_8 Trice16_8 //!< Default parameter bit width for 8 parameter count Trice is 16.
-#define Trice_9 Trice16_9 //!< Default parameter bit width for 9 parameter count Trice is 16.
-#define Trice_10 Trice16_10 //!< Default parameter bit width for 10 parameter count Trice is 16.
-#define Trice_11 Trice16_11 //!< Default parameter bit width for 11 parameter count Trice is 16.
-#define Trice_12 Trice16_12 //!< Default parameter bit width for 12 parameter count Trice is 16.
+#define TRICE_INSERT_Trice_1 TRICE_INSERT_Trice16_1 //!< Default parameter bit width for 1 parameter count Trice is 16.
+#define TRICE_INSERT_Trice_2 TRICE_INSERT_Trice16_2 //!< Default parameter bit width for 2 parameter count Trice is 16.
+#define TRICE_INSERT_Trice_3 TRICE_INSERT_Trice16_3 //!< Default parameter bit width for 3 parameter count Trice is 16.
+#define TRICE_INSERT_Trice_4 TRICE_INSERT_Trice16_4 //!< Default parameter bit width for 4 parameter count Trice is 16.
+#define TRICE_INSERT_Trice_5 TRICE_INSERT_Trice16_5 //!< Default parameter bit width for 5 parameter count Trice is 16.
+#define TRICE_INSERT_Trice_6 TRICE_INSERT_Trice16_6 //!< Default parameter bit width for 6 parameter count Trice is 16.
+#define TRICE_INSERT_Trice_7 TRICE_INSERT_Trice16_7 //!< Default parameter bit width for 7 parameter count Trice is 16.
+#define TRICE_INSERT_Trice_8 TRICE_INSERT_Trice16_8 //!< Default parameter bit width for 8 parameter count Trice is 16.
+#define TRICE_INSERT_Trice_9 TRICE_INSERT_Trice16_9 //!< Default parameter bit width for 9 parameter count Trice is 16.
+#define TRICE_INSERT_Trice_10 TRICE_INSERT_Trice16_10 //!< Default parameter bit width for 10 parameter count Trice is 16.
+#define TRICE_INSERT_Trice_11 TRICE_INSERT_Trice16_11 //!< Default parameter bit width for 11 parameter count Trice is 16.
+#define TRICE_INSERT_Trice_12 TRICE_INSERT_Trice16_12 //!< Default parameter bit width for 12 parameter count Trice is 16.
// #define TRice_0 TRice16_0 //!< Default parameter bit width for 0 parameter count TRice is 16.
-#define TRice_1 TRice16_1 //!< Default parameter bit width for 1 parameter count TRice is 16.
-#define TRice_2 TRice16_2 //!< Default parameter bit width for 2 parameter count TRice is 16.
-#define TRice_3 TRice16_3 //!< Default parameter bit width for 3 parameter count TRice is 16.
-#define TRice_4 TRice16_4 //!< Default parameter bit width for 4 parameter count TRice is 16.
-#define TRice_5 TRice16_5 //!< Default parameter bit width for 5 parameter count TRice is 16.
-#define TRice_6 TRice16_6 //!< Default parameter bit width for 6 parameter count TRice is 16.
-#define TRice_7 TRice16_7 //!< Default parameter bit width for 7 parameter count TRice is 16.
-#define TRice_8 TRice16_8 //!< Default parameter bit width for 8 parameter count TRice is 16.
-#define TRice_9 TRice16_9 //!< Default parameter bit width for 9 parameter count TRice is 16.
-#define TRice_10 TRice16_10 //!< Default parameter bit width for 10 parameter count TRice is 16.
-#define TRice_11 TRice16_11 //!< Default parameter bit width for 11 parameter count TRice is 16.
-#define TRice_12 TRice16_12 //!< Default parameter bit width for 12 parameter count TRice is 16.
+#define TRICE_INSERT_TRice_1 TRICE_INSERT_TRice16_1 //!< Default parameter bit width for 1 parameter count TRice is 16.
+#define TRICE_INSERT_TRice_2 TRICE_INSERT_TRice16_2 //!< Default parameter bit width for 2 parameter count TRice is 16.
+#define TRICE_INSERT_TRice_3 TRICE_INSERT_TRice16_3 //!< Default parameter bit width for 3 parameter count TRice is 16.
+#define TRICE_INSERT_TRice_4 TRICE_INSERT_TRice16_4 //!< Default parameter bit width for 4 parameter count TRice is 16.
+#define TRICE_INSERT_TRice_5 TRICE_INSERT_TRice16_5 //!< Default parameter bit width for 5 parameter count TRice is 16.
+#define TRICE_INSERT_TRice_6 TRICE_INSERT_TRice16_6 //!< Default parameter bit width for 6 parameter count TRice is 16.
+#define TRICE_INSERT_TRice_7 TRICE_INSERT_TRice16_7 //!< Default parameter bit width for 7 parameter count TRice is 16.
+#define TRICE_INSERT_TRice_8 TRICE_INSERT_TRice16_8 //!< Default parameter bit width for 8 parameter count TRice is 16.
+#define TRICE_INSERT_TRice_9 TRICE_INSERT_TRice16_9 //!< Default parameter bit width for 9 parameter count TRice is 16.
+#define TRICE_INSERT_TRice_10 TRICE_INSERT_TRice16_10 //!< Default parameter bit width for 10 parameter count TRice is 16.
+#define TRICE_INSERT_TRice_11 TRICE_INSERT_TRice16_11 //!< Default parameter bit width for 11 parameter count TRice is 16.
+#define TRICE_INSERT_TRice_12 TRICE_INSERT_TRice16_12 //!< Default parameter bit width for 12 parameter count TRice is 16.
#endif // #if TRICE_DEFAULT_PARAMETER_BIT_WIDTH == 16
@@ -74,13 +73,13 @@
#define TRICE_SHORT0(v) TRICE_HTOTS((uint16_t)(v)) //!< TRICE_SHORT0(v) is the 16-bit value v moved to the LLLL position in a 32-bit value 0xHHHH_LLLL.
#define TRICE_SHORT1(v) ((uint32_t)TRICE_HTOTS((uint16_t)(v)) << 16) //!< TRICE_SHORT1(v) is the 16-bit value v moved to the HHHH position in a 32-bit value 0xHHHH_LLLL.
-#define TRICE16(tid, ...) TRICE_CONCAT2(TRICE16_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
+#define TRICE_INSERT_TRICE16(tid, ...) TRICE_CONCAT2(TRICE_INSERT_TRICE16_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
//! TRICE16_B expects inside pFmt only one format specifier, which is used n times by using pFmt n times.
//! It is usable for showing n 16-bit values.
-#define TRICE16_B(id, pFmt, buf, n) \
- do { \
- TRICE_N(id, pFmt, buf, 2 * (n)); \
+#define TRICE_INSERT_TRICE16_B(id, pFmt, buf, n) \
+ do { \
+ TRICE_INSERT_TRICE_N(id, pFmt, buf, 2 * (n)); \
} while (0)
#if TRICE_LEGACY_RPC_SUPPORT == 1
@@ -89,7 +88,7 @@
//! The idea behind is to generate an id - function pointer referece list from the generated til.json file to
//! compile it into a remote device and execute the inside pFmt named function remotely.
//! Look for "TRICE16_F example" inside triceCheck.c.
-#define TRICE16_F TRICE16_B
+#define TRICE_INSERT_TRICE16_F TRICE_INSERT_TRICE16_B
#endif // #if TRICE_LEGACY_RPC_SUPPORT == 1
#define TRICE_PUT16_1(v0) TRICE_PUT(TRICE_SHORT0(v0));
@@ -162,117 +161,117 @@
//! TRICE16_0 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
-#define TRICE16_0(tid, pFmt) \
- TRICE_ENTER tid; \
- TRICE_CNTC(0); \
+#define TRICE_INSERT_TRICE16_0(tid, pFmt) \
+ TRICE_ENTER tid; \
+ TRICE_CNTC(0); \
TRICE_LEAVE
//! TRICE16_1 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 a 16 bit value
-#define TRICE16_1(tid, pFmt, v0) \
- TRICE_ENTER tid; \
- TRICE_CNTC(2); \
- TRICE_PUT16_1(v0) \
+#define TRICE_INSERT_TRICE16_1(tid, pFmt, v0) \
+ TRICE_ENTER tid; \
+ TRICE_CNTC(2); \
+ TRICE_PUT16_1(v0) \
TRICE_LEAVE
//! TRICE16_2 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v1 are 16 bit values
-#define TRICE16_2(id, pFmt, v0, v1) \
- TRICE_ENTER id; \
- TRICE_CNTC(4); \
- TRICE_PUT16_2(v0, v1); \
+#define TRICE_INSERT_TRICE16_2(id, pFmt, v0, v1) \
+ TRICE_ENTER id; \
+ TRICE_CNTC(4); \
+ TRICE_PUT16_2(v0, v1); \
TRICE_LEAVE
//! TRICE16_3 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v2 are 16 bit values
-#define TRICE16_3(id, pFmt, v0, v1, v2) \
- TRICE_ENTER id; \
- TRICE_CNTC(6); \
- TRICE_PUT16_3(v0, v1, v2); \
+#define TRICE_INSERT_TRICE16_3(id, pFmt, v0, v1, v2) \
+ TRICE_ENTER id; \
+ TRICE_CNTC(6); \
+ TRICE_PUT16_3(v0, v1, v2); \
TRICE_LEAVE
//! TRICE16_4 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v3 are 16 bit values
-#define TRICE16_4(id, pFmt, v0, v1, v2, v3) \
- TRICE_ENTER id; \
- TRICE_CNTC(8); \
- TRICE_PUT16_4(v0, v1, v2, v3); \
+#define TRICE_INSERT_TRICE16_4(id, pFmt, v0, v1, v2, v3) \
+ TRICE_ENTER id; \
+ TRICE_CNTC(8); \
+ TRICE_PUT16_4(v0, v1, v2, v3); \
TRICE_LEAVE
//! TRICE16_5 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v4 are 16 bit values
-#define TRICE16_5(id, pFmt, v0, v1, v2, v3, v4) \
- TRICE_ENTER id; \
- TRICE_CNTC(10); \
- TRICE_PUT16_5(v0, v1, v2, v3, v4); \
+#define TRICE_INSERT_TRICE16_5(id, pFmt, v0, v1, v2, v3, v4) \
+ TRICE_ENTER id; \
+ TRICE_CNTC(10); \
+ TRICE_PUT16_5(v0, v1, v2, v3, v4); \
TRICE_LEAVE
//! TRICE16_6 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v5 are 16 bit values
-#define TRICE16_6(id, pFmt, v0, v1, v2, v3, v4, v5) \
- TRICE_ENTER id; \
- TRICE_CNTC(12); \
- TRICE_PUT16_6(v0, v1, v2, v3, v4, v5); \
+#define TRICE_INSERT_TRICE16_6(id, pFmt, v0, v1, v2, v3, v4, v5) \
+ TRICE_ENTER id; \
+ TRICE_CNTC(12); \
+ TRICE_PUT16_6(v0, v1, v2, v3, v4, v5); \
TRICE_LEAVE
//! TRICE16_8 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v6 are 16 bit values
-#define TRICE16_7(id, pFmt, v0, v1, v2, v3, v4, v5, v6) \
- TRICE_ENTER id; \
- TRICE_CNTC(14); \
- TRICE_PUT16_7(v0, v1, v2, v3, v4, v5, v6); \
+#define TRICE_INSERT_TRICE16_7(id, pFmt, v0, v1, v2, v3, v4, v5, v6) \
+ TRICE_ENTER id; \
+ TRICE_CNTC(14); \
+ TRICE_PUT16_7(v0, v1, v2, v3, v4, v5, v6); \
TRICE_LEAVE
//! TRICE16_8 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v7 are 16 bit values
-#define TRICE16_8(id, pFmt, v0, v1, v2, v3, v4, v5, v6, v7) \
- TRICE_ENTER id; \
- TRICE_CNTC(16); \
- TRICE_PUT16_8(v0, v1, v2, v3, v4, v5, v6, v7); \
+#define TRICE_INSERT_TRICE16_8(id, pFmt, v0, v1, v2, v3, v4, v5, v6, v7) \
+ TRICE_ENTER id; \
+ TRICE_CNTC(16); \
+ TRICE_PUT16_8(v0, v1, v2, v3, v4, v5, v6, v7); \
TRICE_LEAVE
//! TRICE16_8 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v7 are 16 bit values
-#define TRICE16_9(id, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
- TRICE_ENTER id; \
- TRICE_CNTC(18); \
- TRICE_PUT16_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
+#define TRICE_INSERT_TRICE16_9(id, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
+ TRICE_ENTER id; \
+ TRICE_CNTC(18); \
+ TRICE_PUT16_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
TRICE_LEAVE
//! TRICE16_8 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v7 are 16 bit values
-#define TRICE16_10(id, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
- TRICE_ENTER id; \
- TRICE_CNTC(20); \
- TRICE_PUT16_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
+#define TRICE_INSERT_TRICE16_10(id, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
+ TRICE_ENTER id; \
+ TRICE_CNTC(20); \
+ TRICE_PUT16_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
TRICE_LEAVE
//! TRICE16_8 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v7 are 16 bit values
-#define TRICE16_11(id, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
- TRICE_ENTER id; \
- TRICE_CNTC(22); \
- TRICE_PUT16_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
+#define TRICE_INSERT_TRICE16_11(id, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
+ TRICE_ENTER id; \
+ TRICE_CNTC(22); \
+ TRICE_PUT16_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
TRICE_LEAVE
//! TRICE16_12 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v11 are 16 bit values
-#define TRICE16_12(id, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
- TRICE_ENTER id; \
- TRICE_CNTC(24); \
- TRICE_PUT16_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
+#define TRICE_INSERT_TRICE16_12(id, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
+ TRICE_ENTER id; \
+ TRICE_CNTC(24); \
+ TRICE_PUT16_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_LEAVE
#endif // #ifndef TRICE16_H_
diff --git a/src/trice16McuOrder.h b/src/trice16McuOrder.h
index c263100a7..e719a4d4f 100644
--- a/src/trice16McuOrder.h
+++ b/src/trice16McuOrder.h
@@ -5,274 +5,273 @@
//! \file trice16McuOrder.h
//! \brief trice 16 Mcu Order declarations and macros.
-
#ifndef TRICE16_MCU_ORDER_H_
#define TRICE16_MCU_ORDER_H_
-#define trice16m_0(tid) \
- TRICE_ENTER \
+#define trice16m_0(tid) \
+ TRICE_ENTER \
TRICE_PUT((0l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
TRICE_LEAVE
-#define trice16m_1(tid, v0) \
- TRICE_ENTER \
+#define trice16m_1(tid, v0) \
+ TRICE_ENTER \
TRICE_PUT((2l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT16_1(v0) \
+ TRICE_PUT16_1(v0) \
TRICE_LEAVE
-#define trice16m_2(tid, v0, v1) \
- TRICE_ENTER \
+#define trice16m_2(tid, v0, v1) \
+ TRICE_ENTER \
TRICE_PUT((4l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT16_2(v0, v1); \
+ TRICE_PUT16_2(v0, v1); \
TRICE_LEAVE
-#define trice16m_3(tid, v0, v1, v2) \
- TRICE_ENTER \
+#define trice16m_3(tid, v0, v1, v2) \
+ TRICE_ENTER \
TRICE_PUT((6l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT16_3(v0, v1, v2); \
+ TRICE_PUT16_3(v0, v1, v2); \
TRICE_LEAVE
-#define trice16m_4(tid, v0, v1, v2, v3) \
- TRICE_ENTER \
+#define trice16m_4(tid, v0, v1, v2, v3) \
+ TRICE_ENTER \
TRICE_PUT((8l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT16_4(v0, v1, v2, v3); \
+ TRICE_PUT16_4(v0, v1, v2, v3); \
TRICE_LEAVE
-#define trice16m_5(tid, v0, v1, v2, v3, v4) \
- TRICE_ENTER \
+#define trice16m_5(tid, v0, v1, v2, v3, v4) \
+ TRICE_ENTER \
TRICE_PUT((10l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT16_5(v0, v1, v2, v3, v4); \
+ TRICE_PUT16_5(v0, v1, v2, v3, v4); \
TRICE_LEAVE
-#define trice16m_6(tid, v0, v1, v2, v3, v4, v5) \
- TRICE_ENTER \
+#define trice16m_6(tid, v0, v1, v2, v3, v4, v5) \
+ TRICE_ENTER \
TRICE_PUT((12l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT16_6(v0, v1, v2, v3, v4, v5); \
+ TRICE_PUT16_6(v0, v1, v2, v3, v4, v5); \
TRICE_LEAVE
-#define trice16m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
- TRICE_ENTER \
+#define trice16m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
+ TRICE_ENTER \
TRICE_PUT((14l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT16_7(v0, v1, v2, v3, v4, v5, v6); \
+ TRICE_PUT16_7(v0, v1, v2, v3, v4, v5, v6); \
TRICE_LEAVE
-#define trice16m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
- TRICE_ENTER \
+#define trice16m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
+ TRICE_ENTER \
TRICE_PUT((16l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT16_8(v0, v1, v2, v3, v4, v5, v6, v7); \
+ TRICE_PUT16_8(v0, v1, v2, v3, v4, v5, v6, v7); \
TRICE_LEAVE
-#define trice16m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
- TRICE_ENTER \
+#define trice16m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
+ TRICE_ENTER \
TRICE_PUT((18l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT16_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
+ TRICE_PUT16_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
TRICE_LEAVE
-#define trice16m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
- TRICE_ENTER \
+#define trice16m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
+ TRICE_ENTER \
TRICE_PUT((20l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT16_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
+ TRICE_PUT16_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
TRICE_LEAVE
-#define trice16m_11(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
- TRICE_ENTER \
+#define trice16m_11(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
+ TRICE_ENTER \
TRICE_PUT((22l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT16_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
+ TRICE_PUT16_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
TRICE_LEAVE
#define trice16m_12(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_ENTER \
- TRICE_PUT((24l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
+ TRICE_PUT((24l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
TRICE_PUT16_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_LEAVE
-#define Trice16m_0(tid) \
- TRICE_ENTER \
- uint16_t ts = TriceStamp16; \
+#define Trice16m_0(tid) \
+ TRICE_ENTER \
+ uint16_t ts = TriceStamp16; \
TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(0l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT(0l << 24 | ((TRICE_CYCLE) << 16) | ts); \
TRICE_LEAVE
-#define Trice16m_1(tid, v0) \
- TRICE_ENTER \
- uint16_t ts = TriceStamp16; \
+#define Trice16m_1(tid, v0) \
+ TRICE_ENTER \
+ uint16_t ts = TriceStamp16; \
TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(2l << 24 | ((TRICE_CYCLE) << 16) | ts); \
- TRICE_PUT16_1(v0) \
+ TRICE_PUT(2l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT16_1(v0) \
TRICE_LEAVE
-#define Trice16m_2(tid, v0, v1) \
- TRICE_ENTER \
- uint16_t ts = TriceStamp16; \
+#define Trice16m_2(tid, v0, v1) \
+ TRICE_ENTER \
+ uint16_t ts = TriceStamp16; \
TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(4l << 24 | ((TRICE_CYCLE) << 16) | ts); \
- TRICE_PUT16_2(v0, v1); \
+ TRICE_PUT(4l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT16_2(v0, v1); \
TRICE_LEAVE
-#define Trice16m_3(tid, v0, v1, v2) \
- TRICE_ENTER \
- uint16_t ts = TriceStamp16; \
+#define Trice16m_3(tid, v0, v1, v2) \
+ TRICE_ENTER \
+ uint16_t ts = TriceStamp16; \
TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(6l << 24 | ((TRICE_CYCLE) << 16) | ts); \
- TRICE_PUT16_3(v0, v1, v2); \
+ TRICE_PUT(6l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT16_3(v0, v1, v2); \
TRICE_LEAVE
-#define Trice16m_4(tid, v0, v1, v2, v3) \
- TRICE_ENTER \
- uint16_t ts = TriceStamp16; \
+#define Trice16m_4(tid, v0, v1, v2, v3) \
+ TRICE_ENTER \
+ uint16_t ts = TriceStamp16; \
TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(8l << 24 | ((TRICE_CYCLE) << 16) | ts); \
- TRICE_PUT16_4(v0, v1, v2, v3); \
+ TRICE_PUT(8l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT16_4(v0, v1, v2, v3); \
TRICE_LEAVE
-#define Trice16m_5(tid, v0, v1, v2, v3, v4) \
- TRICE_ENTER \
- uint16_t ts = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(10l << 24 | ((TRICE_CYCLE) << 16) | ts); \
- TRICE_PUT16_5(v0, v1, v2, v3, v4); \
+#define Trice16m_5(tid, v0, v1, v2, v3, v4) \
+ TRICE_ENTER \
+ uint16_t ts = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
+ TRICE_PUT(10l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT16_5(v0, v1, v2, v3, v4); \
TRICE_LEAVE
-#define Trice16m_6(tid, v0, v1, v2, v3, v4, v5) \
- TRICE_ENTER \
- uint16_t ts = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(12l << 24 | ((TRICE_CYCLE) << 16) | ts); \
- TRICE_PUT16_6(v0, v1, v2, v3, v4, v5); \
+#define Trice16m_6(tid, v0, v1, v2, v3, v4, v5) \
+ TRICE_ENTER \
+ uint16_t ts = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
+ TRICE_PUT(12l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT16_6(v0, v1, v2, v3, v4, v5); \
TRICE_LEAVE
-#define Trice16m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
- TRICE_ENTER \
- uint16_t ts = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(14l << 24 | ((TRICE_CYCLE) << 16) | ts); \
- TRICE_PUT16_7(v0, v1, v2, v3, v4, v5, v6); \
+#define Trice16m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
+ TRICE_ENTER \
+ uint16_t ts = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
+ TRICE_PUT(14l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT16_7(v0, v1, v2, v3, v4, v5, v6); \
TRICE_LEAVE
-#define Trice16m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
- TRICE_ENTER \
- uint16_t ts = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(16l << 24 | ((TRICE_CYCLE) << 16) | ts); \
- TRICE_PUT16_8(v0, v1, v2, v3, v4, v5, v6, v7); \
+#define Trice16m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
+ TRICE_ENTER \
+ uint16_t ts = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
+ TRICE_PUT(16l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT16_8(v0, v1, v2, v3, v4, v5, v6, v7); \
TRICE_LEAVE
-#define Trice16m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
- TRICE_ENTER \
- uint16_t ts = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(18l << 24 | ((TRICE_CYCLE) << 16) | ts); \
- TRICE_PUT16_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
+#define Trice16m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
+ TRICE_ENTER \
+ uint16_t ts = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
+ TRICE_PUT(18l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT16_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
TRICE_LEAVE
-#define Trice16m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
- TRICE_ENTER \
- uint16_t ts = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
+#define Trice16m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
+ TRICE_ENTER \
+ uint16_t ts = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
TRICE_PUT(20l << 24 | ((TRICE_CYCLE) << 16) | ts); \
- TRICE_PUT16_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
+ TRICE_PUT16_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
TRICE_LEAVE
#define Trice16m_11(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
TRICE_ENTER \
uint16_t ts = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(22l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
+ TRICE_PUT(22l << 24 | ((TRICE_CYCLE) << 16) | ts); \
TRICE_PUT16_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
TRICE_LEAVE
#define Trice16m_12(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_ENTER \
uint16_t ts = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(24l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
+ TRICE_PUT(24l << 24 | ((TRICE_CYCLE) << 16) | ts); \
TRICE_PUT16_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_LEAVE
-#define TRice16m_0(tid) \
- TRICE_ENTER \
- uint32_t ts = TriceStamp32; \
- TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
+#define TRice16m_0(tid) \
+ TRICE_ENTER \
+ uint32_t ts = TriceStamp32; \
+ TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
TRICE_PUT(0l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
TRICE_LEAVE
-#define TRice16m_1(tid, v0) \
- TRICE_ENTER \
- uint32_t ts = TriceStamp32; \
- TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
+#define TRice16m_1(tid, v0) \
+ TRICE_ENTER \
+ uint32_t ts = TriceStamp32; \
+ TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
TRICE_PUT(2l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
- TRICE_PUT16_1(v0) \
+ TRICE_PUT16_1(v0) \
TRICE_LEAVE
-#define TRice16m_2(tid, v0, v1) \
- TRICE_ENTER \
- uint32_t ts = TriceStamp32; \
- TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
+#define TRice16m_2(tid, v0, v1) \
+ TRICE_ENTER \
+ uint32_t ts = TriceStamp32; \
+ TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
TRICE_PUT(4l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
- TRICE_PUT16_2(v0, v1); \
+ TRICE_PUT16_2(v0, v1); \
TRICE_LEAVE
-#define TRice16m_3(tid, v0, v1, v2) \
- TRICE_ENTER \
- uint32_t ts = TriceStamp32; \
- TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
+#define TRice16m_3(tid, v0, v1, v2) \
+ TRICE_ENTER \
+ uint32_t ts = TriceStamp32; \
+ TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
TRICE_PUT(6l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
- TRICE_PUT16_3(v0, v1, v2); \
+ TRICE_PUT16_3(v0, v1, v2); \
TRICE_LEAVE
-#define TRice16m_4(tid, v0, v1, v2, v3) \
- TRICE_ENTER \
- uint32_t ts = TriceStamp32; \
- TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
+#define TRice16m_4(tid, v0, v1, v2, v3) \
+ TRICE_ENTER \
+ uint32_t ts = TriceStamp32; \
+ TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
TRICE_PUT(8l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
- TRICE_PUT16_4(v0, v1, v2, v3); \
+ TRICE_PUT16_4(v0, v1, v2, v3); \
TRICE_LEAVE
-#define TRice16m_5(tid, v0, v1, v2, v3, v4) \
- TRICE_ENTER \
- uint32_t ts = TriceStamp32; \
- TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
+#define TRice16m_5(tid, v0, v1, v2, v3, v4) \
+ TRICE_ENTER \
+ uint32_t ts = TriceStamp32; \
+ TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
TRICE_PUT(10l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
- TRICE_PUT16_5(v0, v1, v2, v3, v4); \
+ TRICE_PUT16_5(v0, v1, v2, v3, v4); \
TRICE_LEAVE
-#define TRice16m_6(tid, v0, v1, v2, v3, v4, v5) \
- TRICE_ENTER \
- uint32_t ts = TriceStamp32; \
- TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
+#define TRice16m_6(tid, v0, v1, v2, v3, v4, v5) \
+ TRICE_ENTER \
+ uint32_t ts = TriceStamp32; \
+ TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
TRICE_PUT(12l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
- TRICE_PUT16_6(v0, v1, v2, v3, v4, v5); \
+ TRICE_PUT16_6(v0, v1, v2, v3, v4, v5); \
TRICE_LEAVE
-#define TRice16m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
- TRICE_ENTER \
- uint32_t ts = TriceStamp32; \
- TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
+#define TRice16m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
+ TRICE_ENTER \
+ uint32_t ts = TriceStamp32; \
+ TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
TRICE_PUT(14l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
- TRICE_PUT16_7(v0, v1, v2, v3, v4, v5, v6); \
+ TRICE_PUT16_7(v0, v1, v2, v3, v4, v5, v6); \
TRICE_LEAVE
-#define TRice16m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
- TRICE_ENTER \
- uint32_t ts = TriceStamp32; \
- TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
+#define TRice16m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
+ TRICE_ENTER \
+ uint32_t ts = TriceStamp32; \
+ TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
TRICE_PUT(16l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
- TRICE_PUT16_8(v0, v1, v2, v3, v4, v5, v6, v7); \
+ TRICE_PUT16_8(v0, v1, v2, v3, v4, v5, v6, v7); \
TRICE_LEAVE
-#define TRice16m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
- TRICE_ENTER \
- uint32_t ts = TriceStamp32; \
- TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
+#define TRice16m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
+ TRICE_ENTER \
+ uint32_t ts = TriceStamp32; \
+ TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
TRICE_PUT(18l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
- TRICE_PUT16_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
+ TRICE_PUT16_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
TRICE_LEAVE
#define TRice16m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
TRICE_ENTER \
uint32_t ts = TriceStamp32; \
TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
- TRICE_PUT(20l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
+ TRICE_PUT(20l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
TRICE_PUT16_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
TRICE_LEAVE
@@ -280,7 +279,7 @@
TRICE_ENTER \
uint32_t ts = TriceStamp32; \
TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
- TRICE_PUT(22l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
+ TRICE_PUT(22l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
TRICE_PUT16_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
TRICE_LEAVE
@@ -288,7 +287,7 @@
TRICE_ENTER \
uint32_t ts = TriceStamp32; \
TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
- TRICE_PUT(24l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
+ TRICE_PUT(24l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
TRICE_PUT16_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_LEAVE
diff --git a/src/trice16McuReverse.h b/src/trice16McuReverse.h
index baa31d675..7abdbd9ed 100644
--- a/src/trice16McuReverse.h
+++ b/src/trice16McuReverse.h
@@ -5,7 +5,6 @@
//! \file trice16McuReverse.h
//! \brief trice 16 Mcu Reverse declarations and macros.
-
#ifndef TRICE16_MCU_REVERSE_H_
#define TRICE16_MCU_REVERSE_H_
@@ -19,288 +18,288 @@
//! trice16m_1 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 a 16 bit value
-#define trice16m_1(tid, v0) \
- TRICE_ENTER \
- TRICE_PUT(((TRICE_CYCLE) << 24) | (2l << 16) | idLH); \
- TRICE_PUT16_1(v0) \
+#define trice16m_1(tid, v0) \
+ TRICE_ENTER \
+ TRICE_PUT(((TRICE_CYCLE) << 24) | (2l << 16) | idLH); \
+ TRICE_PUT16_1(v0) \
TRICE_LEAVE
-#define trice16m_2(tid, v0, v1) \
- TRICE_ENTER \
+#define trice16m_2(tid, v0, v1) \
+ TRICE_ENTER \
TRICE_PUT(((TRICE_CYCLE) << 24) | (4l << 16) | idLH); \
- TRICE_PUT16_2(v0, v1); \
+ TRICE_PUT16_2(v0, v1); \
TRICE_LEAVE
-#define trice16m_3(tid, v0, v1, v2) \
- TRICE_ENTER \
+#define trice16m_3(tid, v0, v1, v2) \
+ TRICE_ENTER \
TRICE_PUT(((TRICE_CYCLE) << 24) | (6l << 16) | idLH); \
- TRICE_PUT16_3(v0, v1, v2); \
+ TRICE_PUT16_3(v0, v1, v2); \
TRICE_LEAVE
-#define trice16m_4(tid, v0, v1, v2, v3) \
- TRICE_ENTER \
+#define trice16m_4(tid, v0, v1, v2, v3) \
+ TRICE_ENTER \
TRICE_PUT(((TRICE_CYCLE) << 24) | (8l << 16) | idLH); \
- TRICE_PUT16_4(v0, v1, v2, v3); \
+ TRICE_PUT16_4(v0, v1, v2, v3); \
TRICE_LEAVE
-#define trice16m_5(tid, v0, v1, v2, v3, v4) \
- TRICE_ENTER \
+#define trice16m_5(tid, v0, v1, v2, v3, v4) \
+ TRICE_ENTER \
TRICE_PUT(((TRICE_CYCLE) << 24) | (10l << 16) | idLH); \
- TRICE_PUT16_5(v0, v1, v2, v3, v4); \
+ TRICE_PUT16_5(v0, v1, v2, v3, v4); \
TRICE_LEAVE
-#define trice16m_6(tid, v0, v1, v2, v3, v4, v5) \
- TRICE_ENTER \
+#define trice16m_6(tid, v0, v1, v2, v3, v4, v5) \
+ TRICE_ENTER \
TRICE_PUT(((TRICE_CYCLE) << 24) | (12l << 16) | idLH); \
- TRICE_PUT16_6(v0, v1, v2, v3, v4, v5); \
+ TRICE_PUT16_6(v0, v1, v2, v3, v4, v5); \
TRICE_LEAVE
-#define trice16m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
- TRICE_ENTER \
+#define trice16m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
+ TRICE_ENTER \
TRICE_PUT(((TRICE_CYCLE) << 24) | (14l << 16) | idLH); \
- TRICE_PUT16_7(v0, v1, v2, v3, v4, v5, v6); \
+ TRICE_PUT16_7(v0, v1, v2, v3, v4, v5, v6); \
TRICE_LEAVE
-#define trice16m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
- TRICE_ENTER \
+#define trice16m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
+ TRICE_ENTER \
TRICE_PUT(((TRICE_CYCLE) << 24) | (16l << 16) | idLH); \
- TRICE_PUT16_8(v0, v1, v2, v3, v4, v5, v6, v7); \
+ TRICE_PUT16_8(v0, v1, v2, v3, v4, v5, v6, v7); \
TRICE_LEAVE
#define trice16m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
TRICE_ENTER \
- TRICE_PUT(((TRICE_CYCLE) << 24) | (18l << 16) | idLH); \
+ TRICE_PUT(((TRICE_CYCLE) << 24) | (18l << 16) | idLH); \
TRICE_PUT16_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
TRICE_LEAVE
#define trice16m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
TRICE_ENTER \
- TRICE_PUT(((TRICE_CYCLE) << 24) | (20l << 16) | idLH); \
+ TRICE_PUT(((TRICE_CYCLE) << 24) | (20l << 16) | idLH); \
TRICE_PUT16_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
TRICE_LEAVE
#define trice16m_11(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
TRICE_ENTER \
- TRICE_PUT(((TRICE_CYCLE) << 24) | (22l << 16) | idLH); \
+ TRICE_PUT(((TRICE_CYCLE) << 24) | (22l << 16) | idLH); \
TRICE_PUT16_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
TRICE_LEAVE
#define trice16m_12(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_ENTER \
- TRICE_PUT(((TRICE_CYCLE) << 24) | (24l << 16) | idLH); \
+ TRICE_PUT(((TRICE_CYCLE) << 24) | (24l << 16) | idLH); \
TRICE_PUT16_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_LEAVE
-#define Trice16m_0(tid) \
- TRICE_ENTER \
- uint16_t ts_Trice16m_0 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice16m_0(tid) \
+ TRICE_ENTER \
+ uint16_t ts_Trice16m_0 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | TRICE16_LO_BYTE(ts_Trice16m_0) | TRICE16_HI_BYTE(ts_Trice16m_0)); \
TRICE_LEAVE
//! Trice16m_1 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 a 16 bit value
-#define Trice16m_1(tid, v0) \
- TRICE_ENTER \
- uint16_t ts_Trice16m_1 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice16m_1(tid, v0) \
+ TRICE_ENTER \
+ uint16_t ts_Trice16m_1 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (2l << 16) | TRICE16_LO_BYTE(ts_Trice16m_1) | TRICE16_HI_BYTE(ts_Trice16m_1)); \
- TRICE_PUT16_1(v0) \
+ TRICE_PUT16_1(v0) \
TRICE_LEAVE
-#define Trice16m_2(tid, v0, v1) \
- TRICE_ENTER \
- uint16_t ts_Trice16m_2 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice16m_2(tid, v0, v1) \
+ TRICE_ENTER \
+ uint16_t ts_Trice16m_2 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (4l << 16) | TRICE16_LO_BYTE(ts_Trice16m_2) | TRICE16_HI_BYTE(ts_Trice16m_2)); \
- TRICE_PUT16_2(v0, v1); \
+ TRICE_PUT16_2(v0, v1); \
TRICE_LEAVE
-#define Trice16m_3(tid, v0, v1, v2) \
- TRICE_ENTER \
- uint16_t ts_Trice16m_3 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice16m_3(tid, v0, v1, v2) \
+ TRICE_ENTER \
+ uint16_t ts_Trice16m_3 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (6l << 16) | TRICE16_LO_BYTE(ts_Trice16m_3) | TRICE16_HI_BYTE(ts_Trice16m_3)); \
- TRICE_PUT16_3(v0, v1, v2); \
+ TRICE_PUT16_3(v0, v1, v2); \
TRICE_LEAVE
-#define Trice16m_4(tid, v0, v1, v2, v3) \
- TRICE_ENTER \
- uint16_t ts_Trice16m_4 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice16m_4(tid, v0, v1, v2, v3) \
+ TRICE_ENTER \
+ uint16_t ts_Trice16m_4 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (8l << 16) | TRICE16_LO_BYTE(ts_Trice16m_4) | TRICE16_HI_BYTE(ts_Trice16m_4)); \
- TRICE_PUT16_4(v0, v1, v2, v3); \
+ TRICE_PUT16_4(v0, v1, v2, v3); \
TRICE_LEAVE
-#define Trice16m_5(tid, v0, v1, v2, v3, v4) \
- TRICE_ENTER \
- uint16_t ts_Trice16m_5 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice16m_5(tid, v0, v1, v2, v3, v4) \
+ TRICE_ENTER \
+ uint16_t ts_Trice16m_5 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (10l << 16) | TRICE16_LO_BYTE(ts_Trice16m_5) | TRICE16_HI_BYTE(ts_Trice16m_5)); \
- TRICE_PUT16_5(v0, v1, v2, v3, v4); \
+ TRICE_PUT16_5(v0, v1, v2, v3, v4); \
TRICE_LEAVE
-#define Trice16m_6(tid, v0, v1, v2, v3, v4, v5) \
- TRICE_ENTER \
- uint16_t ts_Trice16m_6 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice16m_6(tid, v0, v1, v2, v3, v4, v5) \
+ TRICE_ENTER \
+ uint16_t ts_Trice16m_6 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (12l << 16) | TRICE16_LO_BYTE(ts_Trice16m_6) | TRICE16_HI_BYTE(ts_Trice16m_6)); \
- TRICE_PUT16_6(v0, v1, v2, v3, v4, v5); \
+ TRICE_PUT16_6(v0, v1, v2, v3, v4, v5); \
TRICE_LEAVE
-#define Trice16m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
- TRICE_ENTER \
- uint16_t ts_Trice16m_7 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice16m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
+ TRICE_ENTER \
+ uint16_t ts_Trice16m_7 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (14l << 16) | TRICE16_LO_BYTE(ts_Trice16m_7) | TRICE16_HI_BYTE(ts_Trice16m_7)); \
- TRICE_PUT16_7(v0, v1, v2, v3, v4, v5, v6); \
+ TRICE_PUT16_7(v0, v1, v2, v3, v4, v5, v6); \
TRICE_LEAVE
-#define Trice16m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
- TRICE_ENTER \
- uint16_t ts_Trice16m_8 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice16m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
+ TRICE_ENTER \
+ uint16_t ts_Trice16m_8 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (16l << 16) | TRICE16_LO_BYTE(ts_Trice16m_8) | TRICE16_HI_BYTE(ts_Trice16m_8)); \
- TRICE_PUT16_8(v0, v1, v2, v3, v4, v5, v6, v7); \
+ TRICE_PUT16_8(v0, v1, v2, v3, v4, v5, v6, v7); \
TRICE_LEAVE
-#define Trice16m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
- TRICE_ENTER \
- uint16_t ts_Trice16m_9 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice16m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
+ TRICE_ENTER \
+ uint16_t ts_Trice16m_9 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (18l << 16) | TRICE16_LO_BYTE(ts_Trice16m_9) | TRICE16_HI_BYTE(ts_Trice16m_9)); \
- TRICE_PUT16_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
+ TRICE_PUT16_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
TRICE_LEAVE
-#define Trice16m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
- TRICE_ENTER \
- uint16_t ts_Trice16m_10 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice16m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
+ TRICE_ENTER \
+ uint16_t ts_Trice16m_10 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (20l << 16) | TRICE16_LO_BYTE(ts_Trice16m_10) | TRICE16_HI_BYTE(ts_Trice16m_10)); \
- TRICE_PUT16_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
+ TRICE_PUT16_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
TRICE_LEAVE
-#define Trice16m_11(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
- TRICE_ENTER \
- uint16_t ts_Trice16m_11 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice16m_11(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
+ TRICE_ENTER \
+ uint16_t ts_Trice16m_11 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (22l << 16) | TRICE16_LO_BYTE(ts_Trice16m_11) | TRICE16_HI_BYTE(ts_Trice16m_11)); \
- TRICE_PUT16_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
+ TRICE_PUT16_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
TRICE_LEAVE
-#define Trice16m_12(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
- TRICE_ENTER \
- uint16_t ts_Trice16m_12 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice16m_12(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
+ TRICE_ENTER \
+ uint16_t ts_Trice16m_12 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (24l << 16) | TRICE16_LO_BYTE(ts_Trice16m_12) | TRICE16_HI_BYTE(ts_Trice16m_12)); \
- TRICE_PUT16_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
+ TRICE_PUT16_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_LEAVE
-#define TRice16m_0(tid) \
- TRICE_ENTER \
- uint32_t ts_TRice16m_ = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice16m_) | TRICE32_HH_BYTE(ts_TRice16m_) | IDLH) \
+#define TRice16m_0(tid) \
+ TRICE_ENTER \
+ uint32_t ts_TRice16m_ = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice16m_) | TRICE32_HH_BYTE(ts_TRice16m_) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | TRICE32_LL_BYTE(ts_TRice16m_) | TRICE32_LH_BYTE(ts_TRice16m_)) \
TRICE_LEAVE
//! TRice16m_1 writes trice data as fast as possible in a buffer.
//! \param tid is a 14 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 a 16 bit value
-#define TRice16m_1(tid, v0) \
- TRICE_ENTER \
- uint32_t ts_TRice16m_ = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice16m_) | TRICE32_HH_BYTE(ts_TRice16m_) | IDLH) \
+#define TRice16m_1(tid, v0) \
+ TRICE_ENTER \
+ uint32_t ts_TRice16m_ = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice16m_) | TRICE32_HH_BYTE(ts_TRice16m_) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (2l << 16) | TRICE32_LL_BYTE(ts_TRice16m_) | TRICE32_LH_BYTE(ts_TRice16m_)) \
- TRICE_PUT16_1(v0) \
+ TRICE_PUT16_1(v0) \
TRICE_LEAVE
-#define TRice16m_2(tid, v0, v1) \
- TRICE_ENTER \
- uint32_t ts_TRice16m_ = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice16m_) | TRICE32_HH_BYTE(ts_TRice16m_) | IDLH) \
+#define TRice16m_2(tid, v0, v1) \
+ TRICE_ENTER \
+ uint32_t ts_TRice16m_ = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice16m_) | TRICE32_HH_BYTE(ts_TRice16m_) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (4l << 16) | TRICE32_LL_BYTE(ts_TRice16m_) | TRICE32_LH_BYTE(ts_TRice16m_)) \
- TRICE_PUT16_2(v0, v1); \
+ TRICE_PUT16_2(v0, v1); \
TRICE_LEAVE
-#define TRice16m_3(tid, v0, v1, v2) \
- TRICE_ENTER \
- uint32_t ts_TRice16m_ = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice16m_) | TRICE32_HH_BYTE(ts_TRice16m_) | IDLH) \
+#define TRice16m_3(tid, v0, v1, v2) \
+ TRICE_ENTER \
+ uint32_t ts_TRice16m_ = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice16m_) | TRICE32_HH_BYTE(ts_TRice16m_) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (6l << 16) | TRICE32_LL_BYTE(ts_TRice16m_) | TRICE32_LH_BYTE(ts_TRice16m_)) \
- TRICE_PUT16_3(v0, v1, v2); \
+ TRICE_PUT16_3(v0, v1, v2); \
TRICE_LEAVE
-#define TRice16m_4(tid, v0, v1, v2, v3) \
- TRICE_ENTER \
- uint32_t ts_TRice16m_ = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice16m_) | TRICE32_HH_BYTE(ts_TRice16m_) | IDLH) \
+#define TRice16m_4(tid, v0, v1, v2, v3) \
+ TRICE_ENTER \
+ uint32_t ts_TRice16m_ = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice16m_) | TRICE32_HH_BYTE(ts_TRice16m_) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (8l << 16) | TRICE32_LL_BYTE(ts_TRice16m_) | TRICE32_LH_BYTE(ts_TRice16m_)) \
- TRICE_PUT16_4(v0, v1, v2, v3); \
+ TRICE_PUT16_4(v0, v1, v2, v3); \
TRICE_LEAVE
-#define TRice16m_5(tid, v0, v1, v2, v3, v4) \
- TRICE_ENTER \
- uint32_t ts_TRice16m_ = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice16m_) | TRICE32_HH_BYTE(ts_TRice16m_) | IDLH) \
+#define TRice16m_5(tid, v0, v1, v2, v3, v4) \
+ TRICE_ENTER \
+ uint32_t ts_TRice16m_ = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice16m_) | TRICE32_HH_BYTE(ts_TRice16m_) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (10l << 16) | TRICE32_LL_BYTE(ts_TRice16m_) | TRICE32_LH_BYTE(ts_TRice16m_)) \
- TRICE_PUT16_5(v0, v1, v2, v3, v4); \
+ TRICE_PUT16_5(v0, v1, v2, v3, v4); \
TRICE_LEAVE
-#define TRice16m_6(tid, v0, v1, v2, v3, v4, v5) \
- TRICE_ENTER \
- uint32_t ts_TRice16m_ = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice16m_) | TRICE32_HH_BYTE(ts_TRice16m_) | IDLH) \
+#define TRice16m_6(tid, v0, v1, v2, v3, v4, v5) \
+ TRICE_ENTER \
+ uint32_t ts_TRice16m_ = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice16m_) | TRICE32_HH_BYTE(ts_TRice16m_) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (12l << 16) | TRICE32_LL_BYTE(ts_TRice16m_) | TRICE32_LH_BYTE(ts_TRice16m_)) \
- TRICE_PUT16_6(v0, v1, v2, v3, v4, v5); \
+ TRICE_PUT16_6(v0, v1, v2, v3, v4, v5); \
TRICE_LEAVE
-#define TRice16m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
- TRICE_ENTER \
- uint32_t ts_TRice16m_ = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice16m_) | TRICE32_HH_BYTE(ts_TRice16m_) | IDLH) \
+#define TRice16m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
+ TRICE_ENTER \
+ uint32_t ts_TRice16m_ = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice16m_) | TRICE32_HH_BYTE(ts_TRice16m_) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (14l << 16) | TRICE32_LL_BYTE(ts_TRice16m_) | TRICE32_LH_BYTE(ts_TRice16m_)) \
- TRICE_PUT16_7(v0, v1, v2, v3, v4, v5, v6); \
+ TRICE_PUT16_7(v0, v1, v2, v3, v4, v5, v6); \
TRICE_LEAVE
-#define TRice16m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
- TRICE_ENTER \
- uint32_t ts_TRice16m_ = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice16m_) | TRICE32_HH_BYTE(ts_TRice16m_) | IDLH) \
+#define TRice16m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
+ TRICE_ENTER \
+ uint32_t ts_TRice16m_ = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice16m_) | TRICE32_HH_BYTE(ts_TRice16m_) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (16l << 16) | TRICE32_LL_BYTE(ts_TRice16m_) | TRICE32_LH_BYTE(ts_TRice16m_)) \
- TRICE_PUT16_8(v0, v1, v2, v3, v4, v5, v6, v7); \
+ TRICE_PUT16_8(v0, v1, v2, v3, v4, v5, v6, v7); \
TRICE_LEAVE
-#define TRice16m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
- TRICE_ENTER \
- uint32_t ts_TRice16m_ = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice16m_) | TRICE32_HH_BYTE(ts_TRice16m_) | IDLH) \
+#define TRice16m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
+ TRICE_ENTER \
+ uint32_t ts_TRice16m_ = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice16m_) | TRICE32_HH_BYTE(ts_TRice16m_) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (18l << 16) | TRICE32_LL_BYTE(ts_TRice16m_) | TRICE32_LH_BYTE(ts_TRice16m_)) \
- TRICE_PUT16_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
+ TRICE_PUT16_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
TRICE_LEAVE
-#define TRice16m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
- TRICE_ENTER \
- uint32_t ts_TRice16m_ = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice16m_) | TRICE32_HH_BYTE(ts_TRice16m_) | IDLH) \
+#define TRice16m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
+ TRICE_ENTER \
+ uint32_t ts_TRice16m_ = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice16m_) | TRICE32_HH_BYTE(ts_TRice16m_) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (20l << 16) | TRICE32_LL_BYTE(ts_TRice16m_) | TRICE32_LH_BYTE(ts_TRice16m_)) \
- TRICE_PUT16_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
+ TRICE_PUT16_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
TRICE_LEAVE
-#define TRice16m_11(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
- TRICE_ENTER \
- uint32_t ts_TRice16m_ = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice16m_) | TRICE32_HH_BYTE(ts_TRice16m_) | IDLH) \
+#define TRice16m_11(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
+ TRICE_ENTER \
+ uint32_t ts_TRice16m_ = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice16m_) | TRICE32_HH_BYTE(ts_TRice16m_) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (22l << 16) | TRICE32_LL_BYTE(ts_TRice16m_) | TRICE32_LH_BYTE(ts_TRice16m_)) \
- TRICE_PUT16_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
+ TRICE_PUT16_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
TRICE_LEAVE
-#define TRice16m_12(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
- TRICE_ENTER \
- uint32_t ts_TRice16m_ = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice16m_) | TRICE32_HH_BYTE(ts_TRice16m_) | IDLH) \
+#define TRice16m_12(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
+ TRICE_ENTER \
+ uint32_t ts_TRice16m_ = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice16m_) | TRICE32_HH_BYTE(ts_TRice16m_) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (24l << 16) | TRICE32_LL_BYTE(ts_TRice16m_) | TRICE32_LH_BYTE(ts_TRice16m_)) \
- TRICE_PUT16_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
+ TRICE_PUT16_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_LEAVE
#endif // #ifndef TRICE16_MCU_REVERSE_H_
diff --git a/src/trice32.c b/src/trice32.c
index 0df295a8e..02f38b22e 100644
--- a/src/trice32.c
+++ b/src/trice32.c
@@ -5,7 +5,6 @@
//! \file trice32.c
//! \brief trice 32 implementation.
-
#include "trice.h"
// lint -e529 Warning 529: Symbol '_SEGGER_RTT__LockState' not subsequently referenced
diff --git a/src/trice32.h b/src/trice32.h
index e52e8ec37..6c16e8ecd 100644
--- a/src/trice32.h
+++ b/src/trice32.h
@@ -5,79 +5,78 @@
//! \file trice32.h
//! \brief trice 32 declarations and macros.
-
#ifndef TRICE32_H_
#define TRICE32_H_
#if TRICE_DEFAULT_PARAMETER_BIT_WIDTH == 32
// #define TRICE_0 TRICE32_0 //!< Default parameter bit width for 0 parameter count TRICE is 32.
-#define TRICE_1 TRICE32_1 //!< Default parameter bit width for 1 parameter count TRICE is 32.
-#define TRICE_2 TRICE32_2 //!< Default parameter bit width for 2 parameter count TRICE is 32.
-#define TRICE_3 TRICE32_3 //!< Default parameter bit width for 3 parameter count TRICE is 32.
-#define TRICE_4 TRICE32_4 //!< Default parameter bit width for 4 parameter count TRICE is 32.
-#define TRICE_5 TRICE32_5 //!< Default parameter bit width for 5 parameter count TRICE is 32.
-#define TRICE_6 TRICE32_6 //!< Default parameter bit width for 6 parameter count TRICE is 32.
-#define TRICE_7 TRICE32_7 //!< Default parameter bit width for 7 parameter count TRICE is 32.
-#define TRICE_8 TRICE32_8 //!< Default parameter bit width for 8 parameter count TRICE is 32.
-#define TRICE_9 TRICE32_9 //!< Default parameter bit width for 9 parameter count TRICE is 32.
-#define TRICE_10 TRICE32_10 //!< Default parameter bit width for 10 parameter count TRICE is 32.
-#define TRICE_11 TRICE32_11 //!< Default parameter bit width for 11 parameter count TRICE is 32.
-#define TRICE_12 TRICE32_12 //!< Default parameter bit width for 12 parameter count TRICE is 32.
+#define TRICE_INSERT_TRICE_1 TRICE_INSERT_TRICE32_1 //!< Default parameter bit width for 1 parameter count TRICE is 32.
+#define TRICE_INSERT_TRICE_2 TRICE_INSERT_TRICE32_2 //!< Default parameter bit width for 2 parameter count TRICE is 32.
+#define TRICE_INSERT_TRICE_3 TRICE_INSERT_TRICE32_3 //!< Default parameter bit width for 3 parameter count TRICE is 32.
+#define TRICE_INSERT_TRICE_4 TRICE_INSERT_TRICE32_4 //!< Default parameter bit width for 4 parameter count TRICE is 32.
+#define TRICE_INSERT_TRICE_5 TRICE_INSERT_TRICE32_5 //!< Default parameter bit width for 5 parameter count TRICE is 32.
+#define TRICE_INSERT_TRICE_6 TRICE_INSERT_TRICE32_6 //!< Default parameter bit width for 6 parameter count TRICE is 32.
+#define TRICE_INSERT_TRICE_7 TRICE_INSERT_TRICE32_7 //!< Default parameter bit width for 7 parameter count TRICE is 32.
+#define TRICE_INSERT_TRICE_8 TRICE_INSERT_TRICE32_8 //!< Default parameter bit width for 8 parameter count TRICE is 32.
+#define TRICE_INSERT_TRICE_9 TRICE_INSERT_TRICE32_9 //!< Default parameter bit width for 9 parameter count TRICE is 32.
+#define TRICE_INSERT_TRICE_10 TRICE_INSERT_TRICE32_10 //!< Default parameter bit width for 10 parameter count TRICE is 32.
+#define TRICE_INSERT_TRICE_11 TRICE_INSERT_TRICE32_11 //!< Default parameter bit width for 11 parameter count TRICE is 32.
+#define TRICE_INSERT_TRICE_12 TRICE_INSERT_TRICE32_12 //!< Default parameter bit width for 12 parameter count TRICE is 32.
// #define trice_0 trice32_0 //!< Default parameter bit width for 0 parameter count trice is 32.
-#define trice_1 trice32_1 //!< Default parameter bit width for 1 parameter count trice is 32.
-#define trice_2 trice32_2 //!< Default parameter bit width for 2 parameter count trice is 32.
-#define trice_3 trice32_3 //!< Default parameter bit width for 3 parameter count trice is 32.
-#define trice_4 trice32_4 //!< Default parameter bit width for 4 parameter count trice is 32.
-#define trice_5 trice32_5 //!< Default parameter bit width for 5 parameter count trice is 32.
-#define trice_6 trice32_6 //!< Default parameter bit width for 6 parameter count trice is 32.
-#define trice_7 trice32_7 //!< Default parameter bit width for 7 parameter count trice is 32.
-#define trice_8 trice32_8 //!< Default parameter bit width for 8 parameter count trice is 32.
-#define trice_9 trice32_9 //!< Default parameter bit width for 9 parameter count trice is 32.
-#define trice_10 trice32_10 //!< Default parameter bit width for 10 parameter count trice is 32.
-#define trice_11 trice32_11 //!< Default parameter bit width for 11 parameter count trice is 32.
-#define trice_12 trice32_12 //!< Default parameter bit width for 12 parameter count trice is 32.
+#define TRICE_INSERT_trice_1 TRICE_INSERT_trice32_1 //!< Default parameter bit width for 1 parameter count trice is 32.
+#define TRICE_INSERT_trice_2 TRICE_INSERT_trice32_2 //!< Default parameter bit width for 2 parameter count trice is 32.
+#define TRICE_INSERT_trice_3 TRICE_INSERT_trice32_3 //!< Default parameter bit width for 3 parameter count trice is 32.
+#define TRICE_INSERT_trice_4 TRICE_INSERT_trice32_4 //!< Default parameter bit width for 4 parameter count trice is 32.
+#define TRICE_INSERT_trice_5 TRICE_INSERT_trice32_5 //!< Default parameter bit width for 5 parameter count trice is 32.
+#define TRICE_INSERT_trice_6 TRICE_INSERT_trice32_6 //!< Default parameter bit width for 6 parameter count trice is 32.
+#define TRICE_INSERT_trice_7 TRICE_INSERT_trice32_7 //!< Default parameter bit width for 7 parameter count trice is 32.
+#define TRICE_INSERT_trice_8 TRICE_INSERT_trice32_8 //!< Default parameter bit width for 8 parameter count trice is 32.
+#define TRICE_INSERT_trice_9 TRICE_INSERT_trice32_9 //!< Default parameter bit width for 9 parameter count trice is 32.
+#define TRICE_INSERT_trice_10 TRICE_INSERT_trice32_10 //!< Default parameter bit width for 10 parameter count trice is 32.
+#define TRICE_INSERT_trice_11 TRICE_INSERT_trice32_11 //!< Default parameter bit width for 11 parameter count trice is 32.
+#define TRICE_INSERT_trice_12 TRICE_INSERT_trice32_12 //!< Default parameter bit width for 12 parameter count trice is 32.
// #define Trice_0 Trice32_0 //!< Default parameter bit width for 0 parameter count Trice is 32.
-#define Trice_1 Trice32_1 //!< Default parameter bit width for 1 parameter count Trice is 32.
-#define Trice_2 Trice32_2 //!< Default parameter bit width for 2 parameter count Trice is 32.
-#define Trice_3 Trice32_3 //!< Default parameter bit width for 3 parameter count Trice is 32.
-#define Trice_4 Trice32_4 //!< Default parameter bit width for 4 parameter count Trice is 32.
-#define Trice_5 Trice32_5 //!< Default parameter bit width for 5 parameter count Trice is 32.
-#define Trice_6 Trice32_6 //!< Default parameter bit width for 6 parameter count Trice is 32.
-#define Trice_7 Trice32_7 //!< Default parameter bit width for 7 parameter count Trice is 32.
-#define Trice_8 Trice32_8 //!< Default parameter bit width for 8 parameter count Trice is 32.
-#define Trice_9 Trice32_9 //!< Default parameter bit width for 9 parameter count Trice is 32.
-#define Trice_10 Trice32_10 //!< Default parameter bit width for 10 parameter count Trice is 32.
-#define Trice_11 Trice32_11 //!< Default parameter bit width for 11 parameter count Trice is 32.
-#define Trice_12 Trice32_12 //!< Default parameter bit width for 12 parameter count Trice is 32.
+#define TRICE_INSERT_Trice_1 TRICE_INSERT_Trice32_1 //!< Default parameter bit width for 1 parameter count Trice is 32.
+#define TRICE_INSERT_Trice_2 TRICE_INSERT_Trice32_2 //!< Default parameter bit width for 2 parameter count Trice is 32.
+#define TRICE_INSERT_Trice_3 TRICE_INSERT_Trice32_3 //!< Default parameter bit width for 3 parameter count Trice is 32.
+#define TRICE_INSERT_Trice_4 TRICE_INSERT_Trice32_4 //!< Default parameter bit width for 4 parameter count Trice is 32.
+#define TRICE_INSERT_Trice_5 TRICE_INSERT_Trice32_5 //!< Default parameter bit width for 5 parameter count Trice is 32.
+#define TRICE_INSERT_Trice_6 TRICE_INSERT_Trice32_6 //!< Default parameter bit width for 6 parameter count Trice is 32.
+#define TRICE_INSERT_Trice_7 TRICE_INSERT_Trice32_7 //!< Default parameter bit width for 7 parameter count Trice is 32.
+#define TRICE_INSERT_Trice_8 TRICE_INSERT_Trice32_8 //!< Default parameter bit width for 8 parameter count Trice is 32.
+#define TRICE_INSERT_Trice_9 TRICE_INSERT_Trice32_9 //!< Default parameter bit width for 9 parameter count Trice is 32.
+#define TRICE_INSERT_Trice_10 TRICE_INSERT_Trice32_10 //!< Default parameter bit width for 10 parameter count Trice is 32.
+#define TRICE_INSERT_Trice_11 TRICE_INSERT_Trice32_11 //!< Default parameter bit width for 11 parameter count Trice is 32.
+#define TRICE_INSERT_Trice_12 TRICE_INSERT_Trice32_12 //!< Default parameter bit width for 12 parameter count Trice is 32.
// #define TRice_0 TRice32_0 //!< Default parameter bit width for 0 parameter count TRice is 32.
-#define TRice_1 TRice32_1 //!< Default parameter bit width for 1 parameter count TRice is 32.
-#define TRice_2 TRice32_2 //!< Default parameter bit width for 2 parameter count TRice is 32.
-#define TRice_3 TRice32_3 //!< Default parameter bit width for 3 parameter count TRice is 32.
-#define TRice_4 TRice32_4 //!< Default parameter bit width for 4 parameter count TRice is 32.
-#define TRice_5 TRice32_5 //!< Default parameter bit width for 5 parameter count TRice is 32.
-#define TRice_6 TRice32_6 //!< Default parameter bit width for 6 parameter count TRice is 32.
-#define TRice_7 TRice32_7 //!< Default parameter bit width for 7 parameter count TRice is 32.
-#define TRice_8 TRice32_8 //!< Default parameter bit width for 8 parameter count TRice is 32.
-#define TRice_9 TRice32_9 //!< Default parameter bit width for 9 parameter count TRice is 32.
-#define TRice_10 TRice32_10 //!< Default parameter bit width for 10 parameter count TRice is 32.
-#define TRice_11 TRice32_11 //!< Default parameter bit width for 11 parameter count TRice is 32.
-#define TRice_12 TRice32_12 //!< Default parameter bit width for 12 parameter count TRice is 32.
+#define TRICE_INSERT_TRice_1 TRICE_INSERT_TRice32_1 //!< Default parameter bit width for 1 parameter count TRice is 32.
+#define TRICE_INSERT_TRice_2 TRICE_INSERT_TRice32_2 //!< Default parameter bit width for 2 parameter count TRice is 32.
+#define TRICE_INSERT_TRice_3 TRICE_INSERT_TRice32_3 //!< Default parameter bit width for 3 parameter count TRice is 32.
+#define TRICE_INSERT_TRice_4 TRICE_INSERT_TRice32_4 //!< Default parameter bit width for 4 parameter count TRice is 32.
+#define TRICE_INSERT_TRice_5 TRICE_INSERT_TRice32_5 //!< Default parameter bit width for 5 parameter count TRice is 32.
+#define TRICE_INSERT_TRice_6 TRICE_INSERT_TRice32_6 //!< Default parameter bit width for 6 parameter count TRice is 32.
+#define TRICE_INSERT_TRice_7 TRICE_INSERT_TRice32_7 //!< Default parameter bit width for 7 parameter count TRice is 32.
+#define TRICE_INSERT_TRice_8 TRICE_INSERT_TRice32_8 //!< Default parameter bit width for 8 parameter count TRice is 32.
+#define TRICE_INSERT_TRice_9 TRICE_INSERT_TRice32_9 //!< Default parameter bit width for 9 parameter count TRice is 32.
+#define TRICE_INSERT_TRice_10 TRICE_INSERT_TRice32_10 //!< Default parameter bit width for 10 parameter count TRice is 32.
+#define TRICE_INSERT_TRice_11 TRICE_INSERT_TRice32_11 //!< Default parameter bit width for 11 parameter count TRice is 32.
+#define TRICE_INSERT_TRice_12 TRICE_INSERT_TRice32_12 //!< Default parameter bit width for 12 parameter count TRice is 32.
#endif // #if TRICE_DEFAULT_PARAMETER_BIT_WIDTH == 32
#include "triceVariadic.h"
-#define TRICE32(tid, ...) TRICE_CONCAT2(TRICE32_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
+#define TRICE_INSERT_TRICE32(tid, ...) TRICE_CONCAT2(TRICE_INSERT_TRICE32_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
//! TRICE32_B expects inside pFmt only one format specifier, which is used n times by using pFmt n times.
//! It is usable for showing n 32-bit values.
-#define TRICE32_B(id, pFmt, buf, n) \
- do { \
- TRICE_N(id, pFmt, buf, 4 * (n)); \
+#define TRICE_INSERT_TRICE32_B(id, pFmt, buf, n) \
+ do { \
+ TRICE_INSERT_TRICE_N(id, pFmt, buf, 4 * (n)); \
} while (0)
#if TRICE_LEGACY_RPC_SUPPORT == 1
@@ -86,7 +85,7 @@
//! The idea behind is to generate an id - function pointer referece list from the generated til.json file to
//! compile it into a remote device and execute the inside pFmt named function remotely.
//! Look for "TRICE32_F example" inside triceCheck.c.
-#define TRICE32_F TRICE32_B
+#define TRICE_INSERT_TRICE32_F TRICE_INSERT_TRICE32_B
#endif // #if TRICE_LEGACY_RPC_SUPPORT == 1
#define TRICE_PUT32_1(v0) TRICE_PUT(TRICE_HTOTL(v0));
@@ -196,117 +195,117 @@
//! TRICE32_0 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
-#define TRICE32_0(tid, pFmt) \
- TRICE_ENTER tid; \
- TRICE_CNTC(0); \
+#define TRICE_INSERT_TRICE32_0(tid, pFmt) \
+ TRICE_ENTER tid; \
+ TRICE_CNTC(0); \
TRICE_LEAVE
//! TRICE32_1 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 a 32 bit value
-#define TRICE32_1(tid, pFmt, v0) \
- TRICE_ENTER tid; \
- TRICE_CNTC(4); \
- TRICE_PUT32_1(v0) \
+#define TRICE_INSERT_TRICE32_1(tid, pFmt, v0) \
+ TRICE_ENTER tid; \
+ TRICE_CNTC(4); \
+ TRICE_PUT32_1(v0) \
TRICE_LEAVE
//! TRICE32_2 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v1 are 32 bit values
-#define TRICE32_2(tid, pFmt, v0, v1) \
- TRICE_ENTER tid; \
- TRICE_CNTC(8); \
- TRICE_PUT32_2(v0, v1); \
+#define TRICE_INSERT_TRICE32_2(tid, pFmt, v0, v1) \
+ TRICE_ENTER tid; \
+ TRICE_CNTC(8); \
+ TRICE_PUT32_2(v0, v1); \
TRICE_LEAVE
//! TRICE32_3 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v2 are 32 bit values
-#define TRICE32_3(tid, pFmt, v0, v1, v2) \
- TRICE_ENTER tid; \
- TRICE_CNTC(12); \
- TRICE_PUT32_3(v0, v1, v2); \
+#define TRICE_INSERT_TRICE32_3(tid, pFmt, v0, v1, v2) \
+ TRICE_ENTER tid; \
+ TRICE_CNTC(12); \
+ TRICE_PUT32_3(v0, v1, v2); \
TRICE_LEAVE
//! TRICE32_4 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v3 are 32 bit values
-#define TRICE32_4(tid, pFmt, v0, v1, v2, v3) \
- TRICE_ENTER tid; \
- TRICE_CNTC(16); \
- TRICE_PUT32_4(v0, v1, v2, v3); \
+#define TRICE_INSERT_TRICE32_4(tid, pFmt, v0, v1, v2, v3) \
+ TRICE_ENTER tid; \
+ TRICE_CNTC(16); \
+ TRICE_PUT32_4(v0, v1, v2, v3); \
TRICE_LEAVE
//! TRICE32_5 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v4 are 32 bit values
-#define TRICE32_5(tid, pFmt, v0, v1, v2, v3, v4) \
- TRICE_ENTER tid; \
- TRICE_CNTC(20); \
- TRICE_PUT32_5(v0, v1, v2, v3, v4); \
+#define TRICE_INSERT_TRICE32_5(tid, pFmt, v0, v1, v2, v3, v4) \
+ TRICE_ENTER tid; \
+ TRICE_CNTC(20); \
+ TRICE_PUT32_5(v0, v1, v2, v3, v4); \
TRICE_LEAVE
//! TRICE32_6 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v5 are 32 bit values
-#define TRICE32_6(tid, pFmt, v0, v1, v2, v3, v4, v5) \
- TRICE_ENTER tid; \
- TRICE_CNTC(24); \
- TRICE_PUT32_6(v0, v1, v2, v3, v4, v5); \
+#define TRICE_INSERT_TRICE32_6(tid, pFmt, v0, v1, v2, v3, v4, v5) \
+ TRICE_ENTER tid; \
+ TRICE_CNTC(24); \
+ TRICE_PUT32_6(v0, v1, v2, v3, v4, v5); \
TRICE_LEAVE
//! TRICE32_8 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v6 are 32 bit values
-#define TRICE32_7(tid, pFmt, v0, v1, v2, v3, v4, v5, v6) \
- TRICE_ENTER tid; \
- TRICE_CNTC(28); \
- TRICE_PUT32_7(v0, v1, v2, v3, v4, v5, v6); \
+#define TRICE_INSERT_TRICE32_7(tid, pFmt, v0, v1, v2, v3, v4, v5, v6) \
+ TRICE_ENTER tid; \
+ TRICE_CNTC(28); \
+ TRICE_PUT32_7(v0, v1, v2, v3, v4, v5, v6); \
TRICE_LEAVE
//! TRICE32_8 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v7 are 32 bit values
-#define TRICE32_8(tid, pFmt, v0, v1, v2, v3, v4, v5, v6, v7) \
- TRICE_ENTER tid; \
- TRICE_CNTC(32); \
- TRICE_PUT32_8(v0, v1, v2, v3, v4, v5, v6, v7); \
+#define TRICE_INSERT_TRICE32_8(tid, pFmt, v0, v1, v2, v3, v4, v5, v6, v7) \
+ TRICE_ENTER tid; \
+ TRICE_CNTC(32); \
+ TRICE_PUT32_8(v0, v1, v2, v3, v4, v5, v6, v7); \
TRICE_LEAVE
//! TRICE32_8 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v7 are 32 bit values
-#define TRICE32_9(tid, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
- TRICE_ENTER tid; \
- TRICE_CNTC(36); \
- TRICE_PUT32_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
+#define TRICE_INSERT_TRICE32_9(tid, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
+ TRICE_ENTER tid; \
+ TRICE_CNTC(36); \
+ TRICE_PUT32_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
TRICE_LEAVE
//! TRICE32_8 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v7 are 32 bit values
-#define TRICE32_10(tid, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
- TRICE_ENTER tid; \
- TRICE_CNTC(40); \
- TRICE_PUT32_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
+#define TRICE_INSERT_TRICE32_10(tid, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
+ TRICE_ENTER tid; \
+ TRICE_CNTC(40); \
+ TRICE_PUT32_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
TRICE_LEAVE
//! TRICE32_8 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v7 are 32 bit values
-#define TRICE32_11(tid, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
- TRICE_ENTER tid; \
- TRICE_CNTC(44); \
- TRICE_PUT32_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
+#define TRICE_INSERT_TRICE32_11(tid, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
+ TRICE_ENTER tid; \
+ TRICE_CNTC(44); \
+ TRICE_PUT32_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
TRICE_LEAVE
//! TRICE32_12 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v11 are 32 bit values
-#define TRICE32_12(tid, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
- TRICE_ENTER tid; \
- TRICE_CNTC(48); \
- TRICE_PUT32_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
+#define TRICE_INSERT_TRICE32_12(tid, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
+ TRICE_ENTER tid; \
+ TRICE_CNTC(48); \
+ TRICE_PUT32_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_LEAVE
#endif // #ifndef TRICE32_H_
diff --git a/src/trice32McuOrder.h b/src/trice32McuOrder.h
index 2e2436d8c..7e8dc762e 100644
--- a/src/trice32McuOrder.h
+++ b/src/trice32McuOrder.h
@@ -5,274 +5,273 @@
//! \file trice32McuOrder.h
//! \brief trice 32 Mcu Order declarations and macros.
-
#ifndef TRICE32_MCU_ORDER_H_
#define TRICE32_MCU_ORDER_H_
-#define trice32m_0(tid) \
- TRICE_ENTER \
+#define trice32m_0(tid) \
+ TRICE_ENTER \
TRICE_PUT((0l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
TRICE_LEAVE
-#define trice32m_1(tid, v0) \
- TRICE_ENTER \
+#define trice32m_1(tid, v0) \
+ TRICE_ENTER \
TRICE_PUT((4l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT32_1(v0) \
+ TRICE_PUT32_1(v0) \
TRICE_LEAVE
-#define trice32m_2(tid, v0, v1) \
- TRICE_ENTER \
+#define trice32m_2(tid, v0, v1) \
+ TRICE_ENTER \
TRICE_PUT((8l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT32_2(v0, v1); \
+ TRICE_PUT32_2(v0, v1); \
TRICE_LEAVE
-#define trice32m_3(tid, v0, v1, v2) \
- TRICE_ENTER \
+#define trice32m_3(tid, v0, v1, v2) \
+ TRICE_ENTER \
TRICE_PUT((12l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT32_3(v0, v1, v2); \
+ TRICE_PUT32_3(v0, v1, v2); \
TRICE_LEAVE
-#define trice32m_4(tid, v0, v1, v2, v3) \
- TRICE_ENTER \
+#define trice32m_4(tid, v0, v1, v2, v3) \
+ TRICE_ENTER \
TRICE_PUT((16l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT32_4(v0, v1, v2, v3); \
+ TRICE_PUT32_4(v0, v1, v2, v3); \
TRICE_LEAVE
-#define trice32m_5(tid, v0, v1, v2, v3, v4) \
- TRICE_ENTER \
+#define trice32m_5(tid, v0, v1, v2, v3, v4) \
+ TRICE_ENTER \
TRICE_PUT((20l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT32_5(v0, v1, v2, v3, v4); \
+ TRICE_PUT32_5(v0, v1, v2, v3, v4); \
TRICE_LEAVE
-#define trice32m_6(tid, v0, v1, v2, v3, v4, v5) \
- TRICE_ENTER \
+#define trice32m_6(tid, v0, v1, v2, v3, v4, v5) \
+ TRICE_ENTER \
TRICE_PUT((24l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT32_6(v0, v1, v2, v3, v4, v5); \
+ TRICE_PUT32_6(v0, v1, v2, v3, v4, v5); \
TRICE_LEAVE
-#define trice32m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
- TRICE_ENTER \
+#define trice32m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
+ TRICE_ENTER \
TRICE_PUT((28l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT32_7(v0, v1, v2, v3, v4, v5, v6); \
+ TRICE_PUT32_7(v0, v1, v2, v3, v4, v5, v6); \
TRICE_LEAVE
-#define trice32m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
- TRICE_ENTER \
+#define trice32m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
+ TRICE_ENTER \
TRICE_PUT((32l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT32_8(v0, v1, v2, v3, v4, v5, v6, v7); \
+ TRICE_PUT32_8(v0, v1, v2, v3, v4, v5, v6, v7); \
TRICE_LEAVE
-#define trice32m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
- TRICE_ENTER \
+#define trice32m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
+ TRICE_ENTER \
TRICE_PUT((36l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT32_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
+ TRICE_PUT32_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
TRICE_LEAVE
-#define trice32m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
- TRICE_ENTER \
+#define trice32m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
+ TRICE_ENTER \
TRICE_PUT((40l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT32_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
+ TRICE_PUT32_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
TRICE_LEAVE
-#define trice32m_11(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
- TRICE_ENTER \
+#define trice32m_11(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
+ TRICE_ENTER \
TRICE_PUT((44l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT32_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
+ TRICE_PUT32_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
TRICE_LEAVE
#define trice32m_12(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_ENTER \
- TRICE_PUT((48l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
+ TRICE_PUT((48l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
TRICE_PUT32_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_LEAVE
-#define Trice32m_0(tid) \
- TRICE_ENTER \
- uint16_t ts = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t) tid) << 16) | (tid)); \
- TRICE_PUT(0l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+#define Trice32m_0(tid) \
+ TRICE_ENTER \
+ uint16_t ts = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)tid) << 16) | (tid)); \
+ TRICE_PUT(0l << 24 | ((TRICE_CYCLE) << 16) | ts); \
TRICE_LEAVE
-#define Trice32m_1(tid, v0) \
- TRICE_ENTER \
- uint16_t ts = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t) tid) << 16) | (tid)); \
- TRICE_PUT(4l << 24 | ((TRICE_CYCLE) << 16) | ts); \
- TRICE_PUT32_1(v0) \
+#define Trice32m_1(tid, v0) \
+ TRICE_ENTER \
+ uint16_t ts = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)tid) << 16) | (tid)); \
+ TRICE_PUT(4l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT32_1(v0) \
TRICE_LEAVE
-#define Trice32m_2(tid, v0, v1) \
- TRICE_ENTER \
- uint16_t ts = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t) tid) << 16) | (tid)); \
- TRICE_PUT(8l << 24 | ((TRICE_CYCLE) << 16) | ts); \
- TRICE_PUT32_2(v0, v1); \
+#define Trice32m_2(tid, v0, v1) \
+ TRICE_ENTER \
+ uint16_t ts = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)tid) << 16) | (tid)); \
+ TRICE_PUT(8l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT32_2(v0, v1); \
TRICE_LEAVE
-#define Trice32m_3(tid, v0, v1, v2) \
- TRICE_ENTER \
- uint16_t ts = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t) tid) << 16) | (tid)); \
- TRICE_PUT(12l << 24 | ((TRICE_CYCLE) << 16) | ts); \
- TRICE_PUT32_3(v0, v1, v2); \
+#define Trice32m_3(tid, v0, v1, v2) \
+ TRICE_ENTER \
+ uint16_t ts = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)tid) << 16) | (tid)); \
+ TRICE_PUT(12l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT32_3(v0, v1, v2); \
TRICE_LEAVE
-#define Trice32m_4(tid, v0, v1, v2, v3) \
- TRICE_ENTER \
- uint16_t ts = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t) tid) << 16) | (tid)); \
- TRICE_PUT(16l << 24 | ((TRICE_CYCLE) << 16) | ts); \
- TRICE_PUT32_4(v0, v1, v2, v3); \
+#define Trice32m_4(tid, v0, v1, v2, v3) \
+ TRICE_ENTER \
+ uint16_t ts = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)tid) << 16) | (tid)); \
+ TRICE_PUT(16l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT32_4(v0, v1, v2, v3); \
TRICE_LEAVE
-#define Trice32m_5(tid, v0, v1, v2, v3, v4) \
- TRICE_ENTER \
- uint16_t ts = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t) tid) << 16) | (tid)); \
- TRICE_PUT(20l << 24 | ((TRICE_CYCLE) << 16) | ts); \
- TRICE_PUT32_5(v0, v1, v2, v3, v4); \
+#define Trice32m_5(tid, v0, v1, v2, v3, v4) \
+ TRICE_ENTER \
+ uint16_t ts = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)tid) << 16) | (tid)); \
+ TRICE_PUT(20l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT32_5(v0, v1, v2, v3, v4); \
TRICE_LEAVE
-#define Trice32m_6(tid, v0, v1, v2, v3, v4, v5) \
- TRICE_ENTER \
- uint16_t ts = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t) tid) << 16) | (tid)); \
- TRICE_PUT(24l << 24 | ((TRICE_CYCLE) << 16) | ts); \
- TRICE_PUT32_6(v0, v1, v2, v3, v4, v5); \
+#define Trice32m_6(tid, v0, v1, v2, v3, v4, v5) \
+ TRICE_ENTER \
+ uint16_t ts = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)tid) << 16) | (tid)); \
+ TRICE_PUT(24l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT32_6(v0, v1, v2, v3, v4, v5); \
TRICE_LEAVE
-#define Trice32m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
- TRICE_ENTER \
- uint16_t ts = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t) tid) << 16) | (tid)); \
- TRICE_PUT(28l << 24 | ((TRICE_CYCLE) << 16) | ts); \
- TRICE_PUT32_7(v0, v1, v2, v3, v4, v5, v6); \
+#define Trice32m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
+ TRICE_ENTER \
+ uint16_t ts = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)tid) << 16) | (tid)); \
+ TRICE_PUT(28l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT32_7(v0, v1, v2, v3, v4, v5, v6); \
TRICE_LEAVE
-#define Trice32m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
- TRICE_ENTER \
- uint16_t ts = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t) tid) << 16) | (tid)); \
- TRICE_PUT(32l << 24 | ((TRICE_CYCLE) << 16) | ts); \
- TRICE_PUT32_8(v0, v1, v2, v3, v4, v5, v6, v7); \
+#define Trice32m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
+ TRICE_ENTER \
+ uint16_t ts = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)tid) << 16) | (tid)); \
+ TRICE_PUT(32l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT32_8(v0, v1, v2, v3, v4, v5, v6, v7); \
TRICE_LEAVE
-#define Trice32m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
- TRICE_ENTER \
- uint16_t ts = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t) tid) << 16) | (tid)); \
- TRICE_PUT(36l << 24 | ((TRICE_CYCLE) << 16) | ts); \
- TRICE_PUT32_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
+#define Trice32m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
+ TRICE_ENTER \
+ uint16_t ts = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)tid) << 16) | (tid)); \
+ TRICE_PUT(36l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT32_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
TRICE_LEAVE
-#define Trice32m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
- TRICE_ENTER \
- uint16_t ts = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t) tid) << 16) | (tid)); \
- TRICE_PUT(40l << 24 | ((TRICE_CYCLE) << 16) | ts); \
- TRICE_PUT32_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
+#define Trice32m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
+ TRICE_ENTER \
+ uint16_t ts = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)tid) << 16) | (tid)); \
+ TRICE_PUT(40l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT32_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
TRICE_LEAVE
#define Trice32m_11(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
TRICE_ENTER \
uint16_t ts = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t) tid) << 16) | (tid)); \
- TRICE_PUT(44l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)tid) << 16) | (tid)); \
+ TRICE_PUT(44l << 24 | ((TRICE_CYCLE) << 16) | ts); \
TRICE_PUT32_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
TRICE_LEAVE
#define Trice32m_12(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_ENTER \
uint16_t ts = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t) tid) << 16) | (tid)); \
- TRICE_PUT(48l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)tid) << 16) | (tid)); \
+ TRICE_PUT(48l << 24 | ((TRICE_CYCLE) << 16) | ts); \
TRICE_PUT32_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_LEAVE
-#define TRice32m_0(tid) \
- TRICE_ENTER \
- uint32_t ts = TriceStamp32; \
- TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
+#define TRice32m_0(tid) \
+ TRICE_ENTER \
+ uint32_t ts = TriceStamp32; \
+ TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
TRICE_PUT(0l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
TRICE_LEAVE
-#define TRice32m_1(tid, v0) \
- TRICE_ENTER \
- uint32_t ts = TriceStamp32; \
- TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
+#define TRice32m_1(tid, v0) \
+ TRICE_ENTER \
+ uint32_t ts = TriceStamp32; \
+ TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
TRICE_PUT(4l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
- TRICE_PUT32_1(v0) \
+ TRICE_PUT32_1(v0) \
TRICE_LEAVE
-#define TRice32m_2(tid, v0, v1) \
- TRICE_ENTER \
- uint32_t ts = TriceStamp32; \
- TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
+#define TRice32m_2(tid, v0, v1) \
+ TRICE_ENTER \
+ uint32_t ts = TriceStamp32; \
+ TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
TRICE_PUT(8l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
- TRICE_PUT32_2(v0, v1); \
+ TRICE_PUT32_2(v0, v1); \
TRICE_LEAVE
-#define TRice32m_3(tid, v0, v1, v2) \
- TRICE_ENTER \
- uint32_t ts = TriceStamp32; \
- TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
+#define TRice32m_3(tid, v0, v1, v2) \
+ TRICE_ENTER \
+ uint32_t ts = TriceStamp32; \
+ TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
TRICE_PUT(12l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
- TRICE_PUT32_3(v0, v1, v2); \
+ TRICE_PUT32_3(v0, v1, v2); \
TRICE_LEAVE
-#define TRice32m_4(tid, v0, v1, v2, v3) \
- TRICE_ENTER \
- uint32_t ts = TriceStamp32; \
- TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
+#define TRice32m_4(tid, v0, v1, v2, v3) \
+ TRICE_ENTER \
+ uint32_t ts = TriceStamp32; \
+ TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
TRICE_PUT(16l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
- TRICE_PUT32_4(v0, v1, v2, v3); \
+ TRICE_PUT32_4(v0, v1, v2, v3); \
TRICE_LEAVE
-#define TRice32m_5(tid, v0, v1, v2, v3, v4) \
- TRICE_ENTER \
- uint32_t ts = TriceStamp32; \
- TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
+#define TRice32m_5(tid, v0, v1, v2, v3, v4) \
+ TRICE_ENTER \
+ uint32_t ts = TriceStamp32; \
+ TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
TRICE_PUT(20l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
- TRICE_PUT32_5(v0, v1, v2, v3, v4); \
+ TRICE_PUT32_5(v0, v1, v2, v3, v4); \
TRICE_LEAVE
-#define TRice32m_6(tid, v0, v1, v2, v3, v4, v5) \
- TRICE_ENTER \
- uint32_t ts = TriceStamp32; \
- TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
+#define TRice32m_6(tid, v0, v1, v2, v3, v4, v5) \
+ TRICE_ENTER \
+ uint32_t ts = TriceStamp32; \
+ TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
TRICE_PUT(24l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
- TRICE_PUT32_6(v0, v1, v2, v3, v4, v5); \
+ TRICE_PUT32_6(v0, v1, v2, v3, v4, v5); \
TRICE_LEAVE
-#define TRice32m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
- TRICE_ENTER \
- uint32_t ts = TriceStamp32; \
- TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
+#define TRice32m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
+ TRICE_ENTER \
+ uint32_t ts = TriceStamp32; \
+ TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
TRICE_PUT(28l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
- TRICE_PUT32_7(v0, v1, v2, v3, v4, v5, v6); \
+ TRICE_PUT32_7(v0, v1, v2, v3, v4, v5, v6); \
TRICE_LEAVE
-#define TRice32m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
- TRICE_ENTER \
- uint32_t ts = TriceStamp32; \
- TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
+#define TRice32m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
+ TRICE_ENTER \
+ uint32_t ts = TriceStamp32; \
+ TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
TRICE_PUT(32l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
- TRICE_PUT32_8(v0, v1, v2, v3, v4, v5, v6, v7); \
+ TRICE_PUT32_8(v0, v1, v2, v3, v4, v5, v6, v7); \
TRICE_LEAVE
-#define TRice32m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
- TRICE_ENTER \
- uint32_t ts = TriceStamp32; \
- TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
+#define TRice32m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
+ TRICE_ENTER \
+ uint32_t ts = TriceStamp32; \
+ TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
TRICE_PUT(36l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
- TRICE_PUT32_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
+ TRICE_PUT32_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
TRICE_LEAVE
#define TRice32m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
TRICE_ENTER \
uint32_t ts = TriceStamp32; \
TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
- TRICE_PUT(40l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
+ TRICE_PUT(40l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
TRICE_PUT32_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
TRICE_LEAVE
@@ -280,7 +279,7 @@
TRICE_ENTER \
uint32_t ts = TriceStamp32; \
TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
- TRICE_PUT(44l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
+ TRICE_PUT(44l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
TRICE_PUT32_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
TRICE_LEAVE
@@ -288,7 +287,7 @@
TRICE_ENTER \
uint32_t ts = TriceStamp32; \
TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
- TRICE_PUT(48l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
+ TRICE_PUT(48l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
TRICE_PUT32_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_LEAVE
diff --git a/src/trice32McuReverse.h b/src/trice32McuReverse.h
index 4e85406d8..35c5b951e 100644
--- a/src/trice32McuReverse.h
+++ b/src/trice32McuReverse.h
@@ -5,7 +5,6 @@
//! \file trice32McuReverse.h
//! \brief trice 32 Mcu Reverse declarations and macros.
-
#ifndef TRICE32_MCU_REVERSE_H_
#define TRICE32_MCU_REVERSE_H_
@@ -14,282 +13,282 @@
TRICE_PUT(((TRICE_CYCLE) << 24) | idLH); \
TRICE_LEAVE
-#define trice32m_1(tid, v0) \
- TRICE_ENTER \
+#define trice32m_1(tid, v0) \
+ TRICE_ENTER \
TRICE_PUT(((TRICE_CYCLE) << 24) | (4l << 16) | idLH); \
- TRICE_PUT32_1(v0) \
+ TRICE_PUT32_1(v0) \
TRICE_LEAVE
-#define trice32m_2(tid, v0, v1) \
- TRICE_ENTER \
+#define trice32m_2(tid, v0, v1) \
+ TRICE_ENTER \
TRICE_PUT(((TRICE_CYCLE) << 24) | (8l << 16) | idLH); \
- TRICE_PUT32_2(v0, v1); \
+ TRICE_PUT32_2(v0, v1); \
TRICE_LEAVE
-#define trice32m_3(tid, v0, v1, v2) \
- TRICE_ENTER \
+#define trice32m_3(tid, v0, v1, v2) \
+ TRICE_ENTER \
TRICE_PUT(((TRICE_CYCLE) << 24) | (12l << 16) | idLH); \
- TRICE_PUT32_3(v0, v1, v2); \
+ TRICE_PUT32_3(v0, v1, v2); \
TRICE_LEAVE
-#define trice32m_4(tid, v0, v1, v2, v3) \
- TRICE_ENTER \
+#define trice32m_4(tid, v0, v1, v2, v3) \
+ TRICE_ENTER \
TRICE_PUT(((TRICE_CYCLE) << 24) | (16l << 16) | idLH); \
- TRICE_PUT32_4(v0, v1, v2, v3); \
+ TRICE_PUT32_4(v0, v1, v2, v3); \
TRICE_LEAVE
-#define trice32m_5(tid, v0, v1, v2, v3, v4) \
- TRICE_ENTER \
+#define trice32m_5(tid, v0, v1, v2, v3, v4) \
+ TRICE_ENTER \
TRICE_PUT(((TRICE_CYCLE) << 24) | (20l << 16) | idLH); \
- TRICE_PUT32_5(v0, v1, v2, v3, v4); \
+ TRICE_PUT32_5(v0, v1, v2, v3, v4); \
TRICE_LEAVE
-#define trice32m_6(tid, v0, v1, v2, v3, v4, v5) \
- TRICE_ENTER \
+#define trice32m_6(tid, v0, v1, v2, v3, v4, v5) \
+ TRICE_ENTER \
TRICE_PUT(((TRICE_CYCLE) << 24) | (24l << 16) | idLH); \
- TRICE_PUT32_6(v0, v1, v2, v3, v4, v5); \
+ TRICE_PUT32_6(v0, v1, v2, v3, v4, v5); \
TRICE_LEAVE
-#define trice32m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
- TRICE_ENTER \
+#define trice32m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
+ TRICE_ENTER \
TRICE_PUT(((TRICE_CYCLE) << 24) | (28l << 16) | idLH); \
- TRICE_PUT32_7(v0, v1, v2, v3, v4, v5, v6); \
+ TRICE_PUT32_7(v0, v1, v2, v3, v4, v5, v6); \
TRICE_LEAVE
-#define trice32m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
- TRICE_ENTER \
+#define trice32m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
+ TRICE_ENTER \
TRICE_PUT(((TRICE_CYCLE) << 24) | (32l << 16) | idLH); \
- TRICE_PUT32_8(v0, v1, v2, v3, v4, v5, v6, v7); \
+ TRICE_PUT32_8(v0, v1, v2, v3, v4, v5, v6, v7); \
TRICE_LEAVE
#define trice32m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
TRICE_ENTER \
- TRICE_PUT(((TRICE_CYCLE) << 24) | (36l << 16) | idLH); \
+ TRICE_PUT(((TRICE_CYCLE) << 24) | (36l << 16) | idLH); \
TRICE_PUT32_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
TRICE_LEAVE
#define trice32m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
TRICE_ENTER \
- TRICE_PUT(((TRICE_CYCLE) << 24) | (40l << 16) | idLH); \
+ TRICE_PUT(((TRICE_CYCLE) << 24) | (40l << 16) | idLH); \
TRICE_PUT32_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
TRICE_LEAVE
#define trice32m_11(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
TRICE_ENTER \
- TRICE_PUT(((TRICE_CYCLE) << 24) | (44l << 16) | idLH); \
+ TRICE_PUT(((TRICE_CYCLE) << 24) | (44l << 16) | idLH); \
TRICE_PUT32_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
TRICE_LEAVE
#define trice32m_12(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_ENTER \
- TRICE_PUT(((TRICE_CYCLE) << 24) | (48l << 16) | idLH); \
+ TRICE_PUT(((TRICE_CYCLE) << 24) | (48l << 16) | idLH); \
TRICE_PUT32_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_LEAVE
-#define Trice32m_0(tid) \
- TRICE_ENTER \
- uint16_t ts_Trice32m_0 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice32m_0(tid) \
+ TRICE_ENTER \
+ uint16_t ts_Trice32m_0 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | TRICE16_LO_BYTE(ts_Trice32m_0) | TRICE16_HI_BYTE(ts_Trice32m_0)); \
TRICE_LEAVE
-#define Trice32m_1(tid, v0) \
- TRICE_ENTER \
- uint16_t ts_Trice32m_1 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice32m_1(tid, v0) \
+ TRICE_ENTER \
+ uint16_t ts_Trice32m_1 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (4l << 16) | TRICE16_LO_BYTE(ts_Trice32m_1) | TRICE16_HI_BYTE(ts_Trice32m_1)); \
- TRICE_PUT32_1(v0) \
+ TRICE_PUT32_1(v0) \
TRICE_LEAVE
-#define Trice32m_2(tid, v0, v1) \
- TRICE_ENTER \
- uint16_t ts_Trice32m_2 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice32m_2(tid, v0, v1) \
+ TRICE_ENTER \
+ uint16_t ts_Trice32m_2 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (8l << 16) | TRICE16_LO_BYTE(ts_Trice32m_2) | TRICE16_HI_BYTE(ts_Trice32m_2)); \
- TRICE_PUT32_2(v0, v1); \
+ TRICE_PUT32_2(v0, v1); \
TRICE_LEAVE
-#define Trice32m_3(tid, v0, v1, v2) \
- TRICE_ENTER \
- uint16_t ts_Trice32m_3 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice32m_3(tid, v0, v1, v2) \
+ TRICE_ENTER \
+ uint16_t ts_Trice32m_3 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (12l << 16) | TRICE16_LO_BYTE(ts_Trice32m_3) | TRICE16_HI_BYTE(ts_Trice32m_3)); \
- TRICE_PUT32_3(v0, v1, v2); \
+ TRICE_PUT32_3(v0, v1, v2); \
TRICE_LEAVE
-#define Trice32m_4(tid, v0, v1, v2, v3) \
- TRICE_ENTER \
- uint16_t ts_Trice32m_4 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice32m_4(tid, v0, v1, v2, v3) \
+ TRICE_ENTER \
+ uint16_t ts_Trice32m_4 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (16l << 16) | TRICE16_LO_BYTE(ts_Trice32m_4) | TRICE16_HI_BYTE(ts_Trice32m_4)); \
- TRICE_PUT32_4(v0, v1, v2, v3); \
+ TRICE_PUT32_4(v0, v1, v2, v3); \
TRICE_LEAVE
-#define Trice32m_5(tid, v0, v1, v2, v3, v4) \
- TRICE_ENTER \
- uint16_t ts_Trice32m_5 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice32m_5(tid, v0, v1, v2, v3, v4) \
+ TRICE_ENTER \
+ uint16_t ts_Trice32m_5 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (20l << 16) | TRICE16_LO_BYTE(ts_Trice32m_5) | TRICE16_HI_BYTE(ts_Trice32m_5)); \
- TRICE_PUT32_5(v0, v1, v2, v3, v4); \
+ TRICE_PUT32_5(v0, v1, v2, v3, v4); \
TRICE_LEAVE
-#define Trice32m_6(tid, v0, v1, v2, v3, v4, v5) \
- TRICE_ENTER \
- uint16_t ts_Trice32m_6 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice32m_6(tid, v0, v1, v2, v3, v4, v5) \
+ TRICE_ENTER \
+ uint16_t ts_Trice32m_6 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (24l << 16) | TRICE16_LO_BYTE(ts_Trice32m_6) | TRICE16_HI_BYTE(ts_Trice32m_6)); \
- TRICE_PUT32_6(v0, v1, v2, v3, v4, v5); \
+ TRICE_PUT32_6(v0, v1, v2, v3, v4, v5); \
TRICE_LEAVE
-#define Trice32m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
- TRICE_ENTER \
- uint16_t ts_Trice32m_7 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice32m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
+ TRICE_ENTER \
+ uint16_t ts_Trice32m_7 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (28l << 16) | TRICE16_LO_BYTE(ts_Trice32m_7) | TRICE16_HI_BYTE(ts_Trice32m_7)); \
- TRICE_PUT32_7(v0, v1, v2, v3, v4, v5, v6); \
+ TRICE_PUT32_7(v0, v1, v2, v3, v4, v5, v6); \
TRICE_LEAVE
-#define Trice32m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
- TRICE_ENTER \
- uint16_t ts_Trice32m_8 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice32m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
+ TRICE_ENTER \
+ uint16_t ts_Trice32m_8 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (32l << 16) | TRICE16_LO_BYTE(ts_Trice32m_8) | TRICE16_HI_BYTE(ts_Trice32m_8)); \
- TRICE_PUT32_8(v0, v1, v2, v3, v4, v5, v6, v7); \
+ TRICE_PUT32_8(v0, v1, v2, v3, v4, v5, v6, v7); \
TRICE_LEAVE
-#define Trice32m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
- TRICE_ENTER \
- uint16_t ts_Trice32m_9 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice32m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
+ TRICE_ENTER \
+ uint16_t ts_Trice32m_9 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (36l << 16) | TRICE16_LO_BYTE(ts_Trice32m_9) | TRICE16_HI_BYTE(ts_Trice32m_9)); \
- TRICE_PUT32_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
+ TRICE_PUT32_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
TRICE_LEAVE
-#define Trice32m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
- TRICE_ENTER \
- uint16_t ts_Trice32m_10 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice32m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
+ TRICE_ENTER \
+ uint16_t ts_Trice32m_10 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (40l << 16) | TRICE16_LO_BYTE(ts_Trice32m_10) | TRICE16_HI_BYTE(ts_Trice32m_10)); \
- TRICE_PUT32_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
+ TRICE_PUT32_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
TRICE_LEAVE
-#define Trice32m_11(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
- TRICE_ENTER \
- uint16_t ts_Trice32m_11 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice32m_11(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
+ TRICE_ENTER \
+ uint16_t ts_Trice32m_11 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (44l << 16) | TRICE16_LO_BYTE(ts_Trice32m_11) | TRICE16_HI_BYTE(ts_Trice32m_11)); \
- TRICE_PUT32_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
+ TRICE_PUT32_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
TRICE_LEAVE
-#define Trice32m_12(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
- TRICE_ENTER \
- uint16_t ts_Trice32m_12 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice32m_12(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
+ TRICE_ENTER \
+ uint16_t ts_Trice32m_12 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (48l << 16) | TRICE16_LO_BYTE(ts_Trice32m_12) | TRICE16_HI_BYTE(ts_Trice32m_12)); \
- TRICE_PUT32_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
+ TRICE_PUT32_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_LEAVE
-#define TRice32m_0(tid) \
- TRICE_ENTER \
- uint32_t ts_TRice32m_0 = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice32m_0) | TRICE32_HH_BYTE(ts_TRice32m_0) | IDLH) \
+#define TRice32m_0(tid) \
+ TRICE_ENTER \
+ uint32_t ts_TRice32m_0 = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice32m_0) | TRICE32_HH_BYTE(ts_TRice32m_0) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | TRICE32_LL_BYTE(ts_TRice32m_0) | TRICE32_LH_BYTE(ts_TRice32m_0)) \
TRICE_LEAVE
-#define TRice32m_1(tid, v0) \
- TRICE_ENTER \
- uint32_t ts_TRice32m_1 = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice32m_1) | TRICE32_HH_BYTE(ts_TRice32m_1) | IDLH) \
+#define TRice32m_1(tid, v0) \
+ TRICE_ENTER \
+ uint32_t ts_TRice32m_1 = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice32m_1) | TRICE32_HH_BYTE(ts_TRice32m_1) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (4l << 16) | TRICE32_LL_BYTE(ts_TRice32m_1) | TRICE32_LH_BYTE(ts_TRice32m_1)) \
- TRICE_PUT32_1(v0) \
+ TRICE_PUT32_1(v0) \
TRICE_LEAVE
-#define TRice32m_2(tid, v0, v1) \
- TRICE_ENTER \
- uint32_t ts_TRice32m_2 = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice32m_2) | TRICE32_HH_BYTE(ts_TRice32m_2) | IDLH) \
+#define TRice32m_2(tid, v0, v1) \
+ TRICE_ENTER \
+ uint32_t ts_TRice32m_2 = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice32m_2) | TRICE32_HH_BYTE(ts_TRice32m_2) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (8l << 16) | TRICE32_LL_BYTE(ts_TRice32m_2) | TRICE32_LH_BYTE(ts_TRice32m_2)) \
- TRICE_PUT32_2(v0, v1); \
+ TRICE_PUT32_2(v0, v1); \
TRICE_LEAVE
-#define TRice32m_3(tid, v0, v1, v2) \
- TRICE_ENTER \
- uint32_t ts_TRice32m_3 = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice32m_3) | TRICE32_HH_BYTE(ts_TRice32m_3) | IDLH) \
+#define TRice32m_3(tid, v0, v1, v2) \
+ TRICE_ENTER \
+ uint32_t ts_TRice32m_3 = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice32m_3) | TRICE32_HH_BYTE(ts_TRice32m_3) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (12l << 16) | TRICE32_LL_BYTE(ts_TRice32m_3) | TRICE32_LH_BYTE(ts_TRice32m_3)) \
- TRICE_PUT32_3(v0, v1, v2); \
+ TRICE_PUT32_3(v0, v1, v2); \
TRICE_LEAVE
-#define TRice32m_4(tid, v0, v1, v2, v3) \
- TRICE_ENTER \
- uint32_t ts_TRice32m_4 = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice32m_4) | TRICE32_HH_BYTE(ts_TRice32m_4) | IDLH) \
+#define TRice32m_4(tid, v0, v1, v2, v3) \
+ TRICE_ENTER \
+ uint32_t ts_TRice32m_4 = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice32m_4) | TRICE32_HH_BYTE(ts_TRice32m_4) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (16l << 16) | TRICE32_LL_BYTE(ts_TRice32m_4) | TRICE32_LH_BYTE(ts_TRice32m_4)) \
- TRICE_PUT32_4(v0, v1, v2, v3); \
+ TRICE_PUT32_4(v0, v1, v2, v3); \
TRICE_LEAVE
-#define TRice32m_5(tid, v0, v1, v2, v3, v4) \
- TRICE_ENTER \
- uint32_t ts_TRice32m_5 = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice32m_5) | TRICE32_HH_BYTE(ts_TRice32m_5) | IDLH) \
+#define TRice32m_5(tid, v0, v1, v2, v3, v4) \
+ TRICE_ENTER \
+ uint32_t ts_TRice32m_5 = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice32m_5) | TRICE32_HH_BYTE(ts_TRice32m_5) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (20l << 16) | TRICE32_LL_BYTE(ts_TRice32m_5) | TRICE32_LH_BYTE(ts_TRice32m_5)) \
- TRICE_PUT32_5(v0, v1, v2, v3, v4); \
+ TRICE_PUT32_5(v0, v1, v2, v3, v4); \
TRICE_LEAVE
-#define TRice32m_6(tid, v0, v1, v2, v3, v4, v5) \
- TRICE_ENTER \
- uint32_t ts_TRice32m_6 = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice32m_6) | TRICE32_HH_BYTE(ts_TRice32m_6) | IDLH) \
+#define TRice32m_6(tid, v0, v1, v2, v3, v4, v5) \
+ TRICE_ENTER \
+ uint32_t ts_TRice32m_6 = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice32m_6) | TRICE32_HH_BYTE(ts_TRice32m_6) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (24l << 16) | TRICE32_LL_BYTE(ts_TRice32m_6) | TRICE32_LH_BYTE(ts_TRice32m_6)) \
- TRICE_PUT32_6(v0, v1, v2, v3, v4, v5); \
+ TRICE_PUT32_6(v0, v1, v2, v3, v4, v5); \
TRICE_LEAVE
-#define TRice32m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
- TRICE_ENTER \
- uint32_t ts_TRice32m_7 = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice32m_7) | TRICE32_HH_BYTE(ts_TRice32m_7) | IDLH) \
+#define TRice32m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
+ TRICE_ENTER \
+ uint32_t ts_TRice32m_7 = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice32m_7) | TRICE32_HH_BYTE(ts_TRice32m_7) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (28l << 16) | TRICE32_LL_BYTE(ts_TRice32m_7) | TRICE32_LH_BYTE(ts_TRice32m_7)) \
- TRICE_PUT32_7(v0, v1, v2, v3, v4, v5, v6); \
+ TRICE_PUT32_7(v0, v1, v2, v3, v4, v5, v6); \
TRICE_LEAVE
-#define TRice32m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
- TRICE_ENTER \
- uint32_t ts_TRice32m_8 = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice32m_8) | TRICE32_HH_BYTE(ts_TRice32m_8) | IDLH) \
+#define TRice32m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
+ TRICE_ENTER \
+ uint32_t ts_TRice32m_8 = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice32m_8) | TRICE32_HH_BYTE(ts_TRice32m_8) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (32l << 16) | TRICE32_LL_BYTE(ts_TRice32m_8) | TRICE32_LH_BYTE(ts_TRice32m_8)) \
- TRICE_PUT32_8(v0, v1, v2, v3, v4, v5, v6, v7); \
+ TRICE_PUT32_8(v0, v1, v2, v3, v4, v5, v6, v7); \
TRICE_LEAVE
-#define TRice32m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
- TRICE_ENTER \
- uint32_t ts_TRice32m_9 = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice32m_9) | TRICE32_HH_BYTE(ts_TRice32m_9) | IDLH) \
+#define TRice32m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
+ TRICE_ENTER \
+ uint32_t ts_TRice32m_9 = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice32m_9) | TRICE32_HH_BYTE(ts_TRice32m_9) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (36l << 16) | TRICE32_LL_BYTE(ts_TRice32m_9) | TRICE32_LH_BYTE(ts_TRice32m_9)) \
- TRICE_PUT32_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
+ TRICE_PUT32_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
TRICE_LEAVE
-#define TRice32m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
- TRICE_ENTER \
- uint32_t ts_TRice32m_10 = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice32m_10) | TRICE32_HH_BYTE(ts_TRice32m_10) | IDLH) \
+#define TRice32m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
+ TRICE_ENTER \
+ uint32_t ts_TRice32m_10 = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice32m_10) | TRICE32_HH_BYTE(ts_TRice32m_10) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (40l << 16) | TRICE32_LL_BYTE(ts_TRice32m_10) | TRICE32_LH_BYTE(ts_TRice32m_10)) \
- TRICE_PUT32_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
+ TRICE_PUT32_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
TRICE_LEAVE
-#define TRice32m_11(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
- TRICE_ENTER \
- uint32_t ts_TRice32m_11 = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice32m_11) | TRICE32_HH_BYTE(ts_TRice32m_11) | IDLH) \
+#define TRice32m_11(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
+ TRICE_ENTER \
+ uint32_t ts_TRice32m_11 = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice32m_11) | TRICE32_HH_BYTE(ts_TRice32m_11) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (44l << 16) | TRICE32_LL_BYTE(ts_TRice32m_11) | TRICE32_LH_BYTE(ts_TRice32m_11)) \
- TRICE_PUT32_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
+ TRICE_PUT32_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
TRICE_LEAVE
-#define TRice32m_12(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
- TRICE_ENTER \
- uint32_t ts_TRice32m_12 = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice32m_12) | TRICE32_HH_BYTE(ts_TRice32m_12) | IDLH) \
+#define TRice32m_12(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
+ TRICE_ENTER \
+ uint32_t ts_TRice32m_12 = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice32m_12) | TRICE32_HH_BYTE(ts_TRice32m_12) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (48l << 16) | TRICE32_LL_BYTE(ts_TRice32m_12) | TRICE32_LH_BYTE(ts_TRice32m_12)) \
- TRICE_PUT32_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
+ TRICE_PUT32_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_LEAVE
#endif // #ifndef TRICE32_MCU_REVERSE_H_
diff --git a/src/trice64.c b/src/trice64.c
index 0095daa99..7c580ced1 100644
--- a/src/trice64.c
+++ b/src/trice64.c
@@ -5,7 +5,6 @@
//! \file trice64.c
//! \brief trice 64 implementation.
-
#include "trice.h"
// lint -e529 Warning 529: Symbol '_SEGGER_RTT__LockState' not subsequently referenced
diff --git a/src/trice64.h b/src/trice64.h
index 196618ffc..1558fcdf8 100644
--- a/src/trice64.h
+++ b/src/trice64.h
@@ -5,79 +5,78 @@
//! \file trice64.h
//! \brief trice 64 declarations and macros.
-
#ifndef TRICE64_H_
#define TRICE64_H_
#if TRICE_DEFAULT_PARAMETER_BIT_WIDTH == 64
// #define TRICE_0 TRICE64_0 //!< Default parameter bit width for 0 parameter count TRICE is 64.
-#define TRICE_1 TRICE64_1 //!< Default parameter bit width for 1 parameter count TRICE is 64.
-#define TRICE_2 TRICE64_2 //!< Default parameter bit width for 2 parameter count TRICE is 64.
-#define TRICE_3 TRICE64_3 //!< Default parameter bit width for 3 parameter count TRICE is 64.
-#define TRICE_4 TRICE64_4 //!< Default parameter bit width for 4 parameter count TRICE is 64.
-#define TRICE_5 TRICE64_5 //!< Default parameter bit width for 5 parameter count TRICE is 64.
-#define TRICE_6 TRICE64_6 //!< Default parameter bit width for 6 parameter count TRICE is 64.
-#define TRICE_7 TRICE64_7 //!< Default parameter bit width for 7 parameter count TRICE is 64.
-#define TRICE_8 TRICE64_8 //!< Default parameter bit width for 8 parameter count TRICE is 64.
-#define TRICE_9 TRICE64_9 //!< Default parameter bit width for 9 parameter count TRICE is 64.
-#define TRICE_10 TRICE64_10 //!< Default parameter bit width for 10 parameter count TRICE is 64.
-#define TRICE_11 TRICE64_11 //!< Default parameter bit width for 11 parameter count TRICE is 64.
-#define TRICE_12 TRICE64_12 //!< Default parameter bit width for 12 parameter count TRICE is 64.
+#define TRICE_INSERT_TRICE_1 TRICE_INSERT_TRICE64_1 //!< Default parameter bit width for 1 parameter count TRICE is 64.
+#define TRICE_INSERT_TRICE_2 TRICE_INSERT_TRICE64_2 //!< Default parameter bit width for 2 parameter count TRICE is 64.
+#define TRICE_INSERT_TRICE_3 TRICE_INSERT_TRICE64_3 //!< Default parameter bit width for 3 parameter count TRICE is 64.
+#define TRICE_INSERT_TRICE_4 TRICE_INSERT_TRICE64_4 //!< Default parameter bit width for 4 parameter count TRICE is 64.
+#define TRICE_INSERT_TRICE_5 TRICE_INSERT_TRICE64_5 //!< Default parameter bit width for 5 parameter count TRICE is 64.
+#define TRICE_INSERT_TRICE_6 TRICE_INSERT_TRICE64_6 //!< Default parameter bit width for 6 parameter count TRICE is 64.
+#define TRICE_INSERT_TRICE_7 TRICE_INSERT_TRICE64_7 //!< Default parameter bit width for 7 parameter count TRICE is 64.
+#define TRICE_INSERT_TRICE_8 TRICE_INSERT_TRICE64_8 //!< Default parameter bit width for 8 parameter count TRICE is 64.
+#define TRICE_INSERT_TRICE_9 TRICE_INSERT_TRICE64_9 //!< Default parameter bit width for 9 parameter count TRICE is 64.
+#define TRICE_INSERT_TRICE_10 TRICE_INSERT_TRICE64_10 //!< Default parameter bit width for 10 parameter count TRICE is 64.
+#define TRICE_INSERT_TRICE_11 TRICE_INSERT_TRICE64_11 //!< Default parameter bit width for 11 parameter count TRICE is 64.
+#define TRICE_INSERT_TRICE_12 TRICE_INSERT_TRICE64_12 //!< Default parameter bit width for 12 parameter count TRICE is 64.
// #define trice_0 trice64_0 //!< Default parameter bit width for 1 parameter count trice is 64.
-#define trice_1 trice64_1 //!< Default parameter bit width for 1 parameter count trice is 64.
-#define trice_2 trice64_2 //!< Default parameter bit width for 2 parameter count trice is 64.
-#define trice_3 trice64_3 //!< Default parameter bit width for 3 parameter count trice is 64.
-#define trice_4 trice64_4 //!< Default parameter bit width for 4 parameter count trice is 64.
-#define trice_5 trice64_5 //!< Default parameter bit width for 5 parameter count trice is 64.
-#define trice_6 trice64_6 //!< Default parameter bit width for 6 parameter count trice is 64.
-#define trice_7 trice64_7 //!< Default parameter bit width for 7 parameter count trice is 64.
-#define trice_8 trice64_8 //!< Default parameter bit width for 8 parameter count trice is 64.
-#define trice_9 trice64_9 //!< Default parameter bit width for 9 parameter count trice is 64.
-#define trice_10 trice64_10 //!< Default parameter bit width for 10 parameter count trice is 64.
-#define trice_11 trice64_11 //!< Default parameter bit width for 11 parameter count trice is 64.
-#define trice_12 trice64_12 //!< Default parameter bit width for 12 parameter count trice is 64.
+#define TRICE_INSERT_trice_1 TRICE_INSERT_trice64_1 //!< Default parameter bit width for 1 parameter count trice is 64.
+#define TRICE_INSERT_trice_2 TRICE_INSERT_trice64_2 //!< Default parameter bit width for 2 parameter count trice is 64.
+#define TRICE_INSERT_trice_3 TRICE_INSERT_trice64_3 //!< Default parameter bit width for 3 parameter count trice is 64.
+#define TRICE_INSERT_trice_4 TRICE_INSERT_trice64_4 //!< Default parameter bit width for 4 parameter count trice is 64.
+#define TRICE_INSERT_trice_5 TRICE_INSERT_trice64_5 //!< Default parameter bit width for 5 parameter count trice is 64.
+#define TRICE_INSERT_trice_6 TRICE_INSERT_trice64_6 //!< Default parameter bit width for 6 parameter count trice is 64.
+#define TRICE_INSERT_trice_7 TRICE_INSERT_trice64_7 //!< Default parameter bit width for 7 parameter count trice is 64.
+#define TRICE_INSERT_trice_8 TRICE_INSERT_trice64_8 //!< Default parameter bit width for 8 parameter count trice is 64.
+#define TRICE_INSERT_trice_9 TRICE_INSERT_trice64_9 //!< Default parameter bit width for 9 parameter count trice is 64.
+#define TRICE_INSERT_trice_10 TRICE_INSERT_trice64_10 //!< Default parameter bit width for 10 parameter count trice is 64.
+#define TRICE_INSERT_trice_11 TRICE_INSERT_trice64_11 //!< Default parameter bit width for 11 parameter count trice is 64.
+#define TRICE_INSERT_trice_12 TRICE_INSERT_trice64_12 //!< Default parameter bit width for 12 parameter count trice is 64.
// #define Trice_0 Trice64_0 //!< Default parameter bit width for 0 parameter count Trice is 64.
-#define Trice_1 Trice64_1 //!< Default parameter bit width for 1 parameter count Trice is 64.
-#define Trice_2 Trice64_2 //!< Default parameter bit width for 2 parameter count Trice is 64.
-#define Trice_3 Trice64_3 //!< Default parameter bit width for 3 parameter count Trice is 64.
-#define Trice_4 Trice64_4 //!< Default parameter bit width for 4 parameter count Trice is 64.
-#define Trice_5 Trice64_5 //!< Default parameter bit width for 5 parameter count Trice is 64.
-#define Trice_6 Trice64_6 //!< Default parameter bit width for 6 parameter count Trice is 64.
-#define Trice_7 Trice64_7 //!< Default parameter bit width for 7 parameter count Trice is 64.
-#define Trice_8 Trice64_8 //!< Default parameter bit width for 8 parameter count Trice is 64.
-#define Trice_9 Trice64_9 //!< Default parameter bit width for 9 parameter count Trice is 64.
-#define Trice_10 Trice64_10 //!< Default parameter bit width for 10 parameter count Trice is 64.
-#define Trice_11 Trice64_11 //!< Default parameter bit width for 11 parameter count Trice is 64.
-#define Trice_12 Trice64_12 //!< Default parameter bit width for 12 parameter count Trice is 64.
+#define TRICE_INSERT_Trice_1 TRICE_INSERT_Trice64_1 //!< Default parameter bit width for 1 parameter count Trice is 64.
+#define TRICE_INSERT_Trice_2 TRICE_INSERT_Trice64_2 //!< Default parameter bit width for 2 parameter count Trice is 64.
+#define TRICE_INSERT_Trice_3 TRICE_INSERT_Trice64_3 //!< Default parameter bit width for 3 parameter count Trice is 64.
+#define TRICE_INSERT_Trice_4 TRICE_INSERT_Trice64_4 //!< Default parameter bit width for 4 parameter count Trice is 64.
+#define TRICE_INSERT_Trice_5 TRICE_INSERT_Trice64_5 //!< Default parameter bit width for 5 parameter count Trice is 64.
+#define TRICE_INSERT_Trice_6 TRICE_INSERT_Trice64_6 //!< Default parameter bit width for 6 parameter count Trice is 64.
+#define TRICE_INSERT_Trice_7 TRICE_INSERT_Trice64_7 //!< Default parameter bit width for 7 parameter count Trice is 64.
+#define TRICE_INSERT_Trice_8 TRICE_INSERT_Trice64_8 //!< Default parameter bit width for 8 parameter count Trice is 64.
+#define TRICE_INSERT_Trice_9 TRICE_INSERT_Trice64_9 //!< Default parameter bit width for 9 parameter count Trice is 64.
+#define TRICE_INSERT_Trice_10 TRICE_INSERT_Trice64_10 //!< Default parameter bit width for 10 parameter count Trice is 64.
+#define TRICE_INSERT_Trice_11 TRICE_INSERT_Trice64_11 //!< Default parameter bit width for 11 parameter count Trice is 64.
+#define TRICE_INSERT_Trice_12 TRICE_INSERT_Trice64_12 //!< Default parameter bit width for 12 parameter count Trice is 64.
// #define TRice_0 TRice64_0 //!< Default parameter bit width for 0 parameter count TRice is 64.
-#define TRice_1 TRice64_1 //!< Default parameter bit width for 1 parameter count TRice is 64.
-#define TRice_2 TRice64_2 //!< Default parameter bit width for 2 parameter count TRice is 64.
-#define TRice_3 TRice64_3 //!< Default parameter bit width for 3 parameter count TRice is 64.
-#define TRice_4 TRice64_4 //!< Default parameter bit width for 4 parameter count TRice is 64.
-#define TRice_5 TRice64_5 //!< Default parameter bit width for 5 parameter count TRice is 64.
-#define TRice_6 TRice64_6 //!< Default parameter bit width for 6 parameter count TRice is 64.
-#define TRice_7 TRice64_7 //!< Default parameter bit width for 7 parameter count TRice is 64.
-#define TRice_8 TRice64_8 //!< Default parameter bit width for 8 parameter count TRice is 64.
-#define TRice_9 TRice64_9 //!< Default parameter bit width for 9 parameter count TRice is 64.
-#define TRice_10 TRice64_10 //!< Default parameter bit width for 10 parameter count TRice is 64.
-#define TRice_11 TRice64_11 //!< Default parameter bit width for 11 parameter count TRice is 64.
-#define TRice_12 TRice64_12 //!< Default parameter bit width for 12 parameter count TRice is 64.
+#define TRICE_INSERT_TRice_1 TRICE_INSERT_TRice64_1 //!< Default parameter bit width for 1 parameter count TRice is 64.
+#define TRICE_INSERT_TRice_2 TRICE_INSERT_TRice64_2 //!< Default parameter bit width for 2 parameter count TRice is 64.
+#define TRICE_INSERT_TRice_3 TRICE_INSERT_TRice64_3 //!< Default parameter bit width for 3 parameter count TRice is 64.
+#define TRICE_INSERT_TRice_4 TRICE_INSERT_TRice64_4 //!< Default parameter bit width for 4 parameter count TRice is 64.
+#define TRICE_INSERT_TRice_5 TRICE_INSERT_TRice64_5 //!< Default parameter bit width for 5 parameter count TRice is 64.
+#define TRICE_INSERT_TRice_6 TRICE_INSERT_TRice64_6 //!< Default parameter bit width for 6 parameter count TRice is 64.
+#define TRICE_INSERT_TRice_7 TRICE_INSERT_TRice64_7 //!< Default parameter bit width for 7 parameter count TRice is 64.
+#define TRICE_INSERT_TRice_8 TRICE_INSERT_TRice64_8 //!< Default parameter bit width for 8 parameter count TRice is 64.
+#define TRICE_INSERT_TRice_9 TRICE_INSERT_TRice64_9 //!< Default parameter bit width for 9 parameter count TRice is 64.
+#define TRICE_INSERT_TRice_10 TRICE_INSERT_TRice64_10 //!< Default parameter bit width for 10 parameter count TRice is 64.
+#define TRICE_INSERT_TRice_11 TRICE_INSERT_TRice64_11 //!< Default parameter bit width for 11 parameter count TRice is 64.
+#define TRICE_INSERT_TRice_12 TRICE_INSERT_TRice64_12 //!< Default parameter bit width for 12 parameter count TRice is 64.
#endif // #if TRICE_DEFAULT_PARAMETER_BIT_WIDTH == 64
#include "triceVariadic.h"
-#define TRICE64(tid, ...) TRICE_CONCAT2(TRICE64_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
+#define TRICE_INSERT_TRICE64(tid, ...) TRICE_CONCAT2(TRICE_INSERT_TRICE64_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
//! TRICE64_B expects inside pFmt only one format specifier, which is used n times by using pFmt n times.
//! It is usable for showing n 64-bit values.
-#define TRICE64_B(id, pFmt, buf, n) \
- do { \
- TRICE_N(id, pFmt, buf, 8 * (n)); \
+#define TRICE_INSERT_TRICE64_B(id, pFmt, buf, n) \
+ do { \
+ TRICE_INSERT_TRICE_N(id, pFmt, buf, 8 * (n)); \
} while (0)
#if TRICE_LEGACY_RPC_SUPPORT == 1
@@ -86,7 +85,7 @@
//! The idea behind is to generate an id - function pointer referece list from the generated til.json file to
//! compile it into a remote device and execute the inside pFmt named function remotely.
//! Look for "TRICE64_F example" inside triceCheck.c.
-#define TRICE64_F TRICE64_B
+#define TRICE_INSERT_TRICE64_F TRICE_INSERT_TRICE64_B
#endif // #if TRICE_LEGACY_RPC_SUPPORT == 1
#define TRICE_PUT64_1(v0) TRICE_PUT64(v0);
@@ -196,117 +195,117 @@
//! TRICE64_0 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
-#define TRICE64_0(tid, pFmt) \
- TRICE_ENTER tid; \
- TRICE_CNTC(0); \
+#define TRICE_INSERT_TRICE64_0(tid, pFmt) \
+ TRICE_ENTER tid; \
+ TRICE_CNTC(0); \
TRICE_LEAVE
//! TRICE64_1 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 a 64 bit value
-#define TRICE64_1(tid, pFmt, v0) \
- TRICE_ENTER tid; \
- TRICE_CNTC(8); \
- TRICE_PUT64_1(v0) \
+#define TRICE_INSERT_TRICE64_1(tid, pFmt, v0) \
+ TRICE_ENTER tid; \
+ TRICE_CNTC(8); \
+ TRICE_PUT64_1(v0) \
TRICE_LEAVE
//! TRICE64_2 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v1 are 64 bit values
-#define TRICE64_2(id, pFmt, v0, v1) \
- TRICE_ENTER id; \
- TRICE_CNTC(16); \
- TRICE_PUT64_2(v0, v1); \
+#define TRICE_INSERT_TRICE64_2(id, pFmt, v0, v1) \
+ TRICE_ENTER id; \
+ TRICE_CNTC(16); \
+ TRICE_PUT64_2(v0, v1); \
TRICE_LEAVE
//! TRICE64_3 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v2 are 64 bit values
-#define TRICE64_3(id, pFmt, v0, v1, v2) \
- TRICE_ENTER id; \
- TRICE_CNTC(24); \
- TRICE_PUT64_3(v0, v1, v2); \
+#define TRICE_INSERT_TRICE64_3(id, pFmt, v0, v1, v2) \
+ TRICE_ENTER id; \
+ TRICE_CNTC(24); \
+ TRICE_PUT64_3(v0, v1, v2); \
TRICE_LEAVE
//! TRICE64_4 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v3 are 64 bit values
-#define TRICE64_4(id, pFmt, v0, v1, v2, v3) \
- TRICE_ENTER id; \
- TRICE_CNTC(32); \
- TRICE_PUT64_4(v0, v1, v2, v3); \
+#define TRICE_INSERT_TRICE64_4(id, pFmt, v0, v1, v2, v3) \
+ TRICE_ENTER id; \
+ TRICE_CNTC(32); \
+ TRICE_PUT64_4(v0, v1, v2, v3); \
TRICE_LEAVE
//! TRICE64_5 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v4 are 64 bit values
-#define TRICE64_5(id, pFmt, v0, v1, v2, v3, v4) \
- TRICE_ENTER id; \
- TRICE_CNTC(40); \
- TRICE_PUT64_5(v0, v1, v2, v3, v4); \
+#define TRICE_INSERT_TRICE64_5(id, pFmt, v0, v1, v2, v3, v4) \
+ TRICE_ENTER id; \
+ TRICE_CNTC(40); \
+ TRICE_PUT64_5(v0, v1, v2, v3, v4); \
TRICE_LEAVE
//! TRICE64_6 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v5 are 64 bit values
-#define TRICE64_6(id, pFmt, v0, v1, v2, v3, v4, v5) \
- TRICE_ENTER id; \
- TRICE_CNTC(48); \
- TRICE_PUT64_6(v0, v1, v2, v3, v4, v5); \
+#define TRICE_INSERT_TRICE64_6(id, pFmt, v0, v1, v2, v3, v4, v5) \
+ TRICE_ENTER id; \
+ TRICE_CNTC(48); \
+ TRICE_PUT64_6(v0, v1, v2, v3, v4, v5); \
TRICE_LEAVE
//! TRICE64_8 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v6 are 64 bit values
-#define TRICE64_7(id, pFmt, v0, v1, v2, v3, v4, v5, v6) \
- TRICE_ENTER id; \
- TRICE_CNTC(56); \
- TRICE_PUT64_7(v0, v1, v2, v3, v4, v5, v6); \
+#define TRICE_INSERT_TRICE64_7(id, pFmt, v0, v1, v2, v3, v4, v5, v6) \
+ TRICE_ENTER id; \
+ TRICE_CNTC(56); \
+ TRICE_PUT64_7(v0, v1, v2, v3, v4, v5, v6); \
TRICE_LEAVE
//! TRICE64_8 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v7 are 64 bit values
-#define TRICE64_8(id, pFmt, v0, v1, v2, v3, v4, v5, v6, v7) \
- TRICE_ENTER id; \
- TRICE_CNTC(64); \
- TRICE_PUT64_8(v0, v1, v2, v3, v4, v5, v6, v7); \
+#define TRICE_INSERT_TRICE64_8(id, pFmt, v0, v1, v2, v3, v4, v5, v6, v7) \
+ TRICE_ENTER id; \
+ TRICE_CNTC(64); \
+ TRICE_PUT64_8(v0, v1, v2, v3, v4, v5, v6, v7); \
TRICE_LEAVE
//! TRICE64_8 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v7 are 64 bit values
-#define TRICE64_9(id, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
- TRICE_ENTER id; \
- TRICE_CNTC(72); \
- TRICE_PUT64_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
+#define TRICE_INSERT_TRICE64_9(id, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
+ TRICE_ENTER id; \
+ TRICE_CNTC(72); \
+ TRICE_PUT64_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
TRICE_LEAVE
//! TRICE64_8 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v7 are 64 bit values
-#define TRICE64_10(id, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
- TRICE_ENTER id; \
- TRICE_CNTC(80); \
- TRICE_PUT64_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
+#define TRICE_INSERT_TRICE64_10(id, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
+ TRICE_ENTER id; \
+ TRICE_CNTC(80); \
+ TRICE_PUT64_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
TRICE_LEAVE
//! TRICE64_8 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v7 are 64 bit values
-#define TRICE64_11(id, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
- TRICE_ENTER id; \
- TRICE_CNTC(88); \
- TRICE_PUT64_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
+#define TRICE_INSERT_TRICE64_11(id, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
+ TRICE_ENTER id; \
+ TRICE_CNTC(88); \
+ TRICE_PUT64_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
TRICE_LEAVE
//! TRICE64_12 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v11 are 64 bit values
-#define TRICE64_12(id, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
- TRICE_ENTER id; \
- TRICE_CNTC(96); \
- TRICE_PUT64_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
+#define TRICE_INSERT_TRICE64_12(id, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
+ TRICE_ENTER id; \
+ TRICE_CNTC(96); \
+ TRICE_PUT64_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_LEAVE
#endif // #ifndef TRICE64_H_
diff --git a/src/trice64McuOrder.h b/src/trice64McuOrder.h
index 540c2bd39..e67360e78 100644
--- a/src/trice64McuOrder.h
+++ b/src/trice64McuOrder.h
@@ -5,274 +5,273 @@
//! \file trice64McuOrder.h
//! \brief trice 64 Mcu Order declarations and macros.
-
#ifndef TRICE64_MCU_ORDER_H_
#define TRICE64_MCU_ORDER_H_
-#define trice64m_0(tid) \
- TRICE_ENTER \
+#define trice64m_0(tid) \
+ TRICE_ENTER \
TRICE_PUT((0l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
TRICE_LEAVE
-#define trice64m_1(tid, v0) \
- TRICE_ENTER \
+#define trice64m_1(tid, v0) \
+ TRICE_ENTER \
TRICE_PUT((8l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT64_1(v0) \
+ TRICE_PUT64_1(v0) \
TRICE_LEAVE
-#define trice64m_2(tid, v0, v1) \
- TRICE_ENTER \
+#define trice64m_2(tid, v0, v1) \
+ TRICE_ENTER \
TRICE_PUT((16l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT64_2(v0, v1); \
+ TRICE_PUT64_2(v0, v1); \
TRICE_LEAVE
-#define trice64m_3(tid, v0, v1, v2) \
- TRICE_ENTER \
+#define trice64m_3(tid, v0, v1, v2) \
+ TRICE_ENTER \
TRICE_PUT((24l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT64_3(v0, v1, v2); \
+ TRICE_PUT64_3(v0, v1, v2); \
TRICE_LEAVE
-#define trice64m_4(tid, v0, v1, v2, v3) \
- TRICE_ENTER \
+#define trice64m_4(tid, v0, v1, v2, v3) \
+ TRICE_ENTER \
TRICE_PUT((32l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT64_4(v0, v1, v2, v3); \
+ TRICE_PUT64_4(v0, v1, v2, v3); \
TRICE_LEAVE
-#define trice64m_5(tid, v0, v1, v2, v3, v4) \
- TRICE_ENTER \
+#define trice64m_5(tid, v0, v1, v2, v3, v4) \
+ TRICE_ENTER \
TRICE_PUT((40l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT64_5(v0, v1, v2, v3, v4); \
+ TRICE_PUT64_5(v0, v1, v2, v3, v4); \
TRICE_LEAVE
-#define trice64m_6(tid, v0, v1, v2, v3, v4, v5) \
- TRICE_ENTER \
+#define trice64m_6(tid, v0, v1, v2, v3, v4, v5) \
+ TRICE_ENTER \
TRICE_PUT((48l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT64_6(v0, v1, v2, v3, v4, v5); \
+ TRICE_PUT64_6(v0, v1, v2, v3, v4, v5); \
TRICE_LEAVE
-#define trice64m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
- TRICE_ENTER \
+#define trice64m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
+ TRICE_ENTER \
TRICE_PUT((56l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT64_7(v0, v1, v2, v3, v4, v5, v6); \
+ TRICE_PUT64_7(v0, v1, v2, v3, v4, v5, v6); \
TRICE_LEAVE
-#define trice64m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
- TRICE_ENTER \
+#define trice64m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
+ TRICE_ENTER \
TRICE_PUT((64l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT64_8(v0, v1, v2, v3, v4, v5, v6, v7); \
+ TRICE_PUT64_8(v0, v1, v2, v3, v4, v5, v6, v7); \
TRICE_LEAVE
-#define trice64m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
- TRICE_ENTER \
+#define trice64m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
+ TRICE_ENTER \
TRICE_PUT((72l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT64_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
+ TRICE_PUT64_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
TRICE_LEAVE
-#define trice64m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
- TRICE_ENTER \
+#define trice64m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
+ TRICE_ENTER \
TRICE_PUT((80l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT64_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
+ TRICE_PUT64_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
TRICE_LEAVE
-#define trice64m_11(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
- TRICE_ENTER \
+#define trice64m_11(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
+ TRICE_ENTER \
TRICE_PUT((88l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT64_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
+ TRICE_PUT64_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
TRICE_LEAVE
#define trice64m_12(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_ENTER \
- TRICE_PUT((96l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
+ TRICE_PUT((96l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
TRICE_PUT64_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_LEAVE
-#define Trice64m_0(tid) \
- TRICE_ENTER \
- uint16_t ts = TriceStamp16; \
+#define Trice64m_0(tid) \
+ TRICE_ENTER \
+ uint16_t ts = TriceStamp16; \
TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT(((TRICE_CYCLE) << 16) | ts); \
TRICE_LEAVE
-#define Trice64m_1(tid, v0) \
- TRICE_ENTER \
- uint16_t ts = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(8l << 24 | ((TRICE_CYCLE) << 16) | ts); \
- TRICE_PUT64_1(v0) \
+#define Trice64m_1(tid, v0) \
+ TRICE_ENTER \
+ uint16_t ts = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
+ TRICE_PUT(8l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT64_1(v0) \
TRICE_LEAVE
-#define Trice64m_2(tid, v0, v1) \
- TRICE_ENTER \
- uint16_t ts = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(16l << 24 | ((TRICE_CYCLE) << 16) | ts); \
- TRICE_PUT64_2(v0, v1); \
+#define Trice64m_2(tid, v0, v1) \
+ TRICE_ENTER \
+ uint16_t ts = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
+ TRICE_PUT(16l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT64_2(v0, v1); \
TRICE_LEAVE
-#define Trice64m_3(tid, v0, v1, v2) \
- TRICE_ENTER \
- uint16_t ts = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(24l << 24 | ((TRICE_CYCLE) << 16) | ts); \
- TRICE_PUT64_3(v0, v1, v2); \
+#define Trice64m_3(tid, v0, v1, v2) \
+ TRICE_ENTER \
+ uint16_t ts = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
+ TRICE_PUT(24l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT64_3(v0, v1, v2); \
TRICE_LEAVE
-#define Trice64m_4(tid, v0, v1, v2, v3) \
- TRICE_ENTER \
- uint16_t ts = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(32l << 24 | ((TRICE_CYCLE) << 16) | ts); \
- TRICE_PUT64_4(v0, v1, v2, v3); \
+#define Trice64m_4(tid, v0, v1, v2, v3) \
+ TRICE_ENTER \
+ uint16_t ts = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
+ TRICE_PUT(32l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT64_4(v0, v1, v2, v3); \
TRICE_LEAVE
-#define Trice64m_5(tid, v0, v1, v2, v3, v4) \
- TRICE_ENTER \
- uint16_t ts = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(40l << 24 | ((TRICE_CYCLE) << 16) | ts); \
- TRICE_PUT64_5(v0, v1, v2, v3, v4); \
+#define Trice64m_5(tid, v0, v1, v2, v3, v4) \
+ TRICE_ENTER \
+ uint16_t ts = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
+ TRICE_PUT(40l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT64_5(v0, v1, v2, v3, v4); \
TRICE_LEAVE
-#define Trice64m_6(tid, v0, v1, v2, v3, v4, v5) \
- TRICE_ENTER \
- uint16_t ts = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(48l << 24 | ((TRICE_CYCLE) << 16) | ts); \
- TRICE_PUT64_6(v0, v1, v2, v3, v4, v5); \
+#define Trice64m_6(tid, v0, v1, v2, v3, v4, v5) \
+ TRICE_ENTER \
+ uint16_t ts = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
+ TRICE_PUT(48l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT64_6(v0, v1, v2, v3, v4, v5); \
TRICE_LEAVE
-#define Trice64m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
- TRICE_ENTER \
- uint16_t ts = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(56l << 24 | ((TRICE_CYCLE) << 16) | ts); \
- TRICE_PUT64_7(v0, v1, v2, v3, v4, v5, v6); \
+#define Trice64m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
+ TRICE_ENTER \
+ uint16_t ts = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
+ TRICE_PUT(56l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT64_7(v0, v1, v2, v3, v4, v5, v6); \
TRICE_LEAVE
-#define Trice64m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
- TRICE_ENTER \
- uint16_t ts = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(64l << 24 | ((TRICE_CYCLE) << 16) | ts); \
- TRICE_PUT64_8(v0, v1, v2, v3, v4, v5, v6, v7); \
+#define Trice64m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
+ TRICE_ENTER \
+ uint16_t ts = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
+ TRICE_PUT(64l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT64_8(v0, v1, v2, v3, v4, v5, v6, v7); \
TRICE_LEAVE
-#define Trice64m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
- TRICE_ENTER \
- uint16_t ts = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(72l << 24 | ((TRICE_CYCLE) << 16) | ts); \
- TRICE_PUT64_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
+#define Trice64m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
+ TRICE_ENTER \
+ uint16_t ts = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
+ TRICE_PUT(72l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT64_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
TRICE_LEAVE
-#define Trice64m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
- TRICE_ENTER \
- uint16_t ts = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
+#define Trice64m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
+ TRICE_ENTER \
+ uint16_t ts = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
TRICE_PUT(80l << 24 | ((TRICE_CYCLE) << 16) | ts); \
- TRICE_PUT64_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
+ TRICE_PUT64_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
TRICE_LEAVE
#define Trice64m_11(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
TRICE_ENTER \
uint16_t ts = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(88l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
+ TRICE_PUT(88l << 24 | ((TRICE_CYCLE) << 16) | ts); \
TRICE_PUT64_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
TRICE_LEAVE
#define Trice64m_12(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_ENTER \
uint16_t ts = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(96l << 24 | ((TRICE_CYCLE) << 16) | ts); \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
+ TRICE_PUT(96l << 24 | ((TRICE_CYCLE) << 16) | ts); \
TRICE_PUT64_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_LEAVE
-#define TRice64m_0(tid) \
- TRICE_ENTER \
- uint32_t ts = TriceStamp32; \
- TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
+#define TRice64m_0(tid) \
+ TRICE_ENTER \
+ uint32_t ts = TriceStamp32; \
+ TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
TRICE_PUT(0l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
TRICE_LEAVE
-#define TRice64m_1(tid, v0) \
- TRICE_ENTER \
- uint32_t ts = TriceStamp32; \
- TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
+#define TRice64m_1(tid, v0) \
+ TRICE_ENTER \
+ uint32_t ts = TriceStamp32; \
+ TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
TRICE_PUT(8l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
- TRICE_PUT64_1(v0) \
+ TRICE_PUT64_1(v0) \
TRICE_LEAVE
-#define TRice64m_2(tid, v0, v1) \
- TRICE_ENTER \
- uint32_t ts = TriceStamp32; \
- TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
+#define TRice64m_2(tid, v0, v1) \
+ TRICE_ENTER \
+ uint32_t ts = TriceStamp32; \
+ TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
TRICE_PUT(16l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
- TRICE_PUT64_2(v0, v1); \
+ TRICE_PUT64_2(v0, v1); \
TRICE_LEAVE
-#define TRice64m_3(tid, v0, v1, v2) \
- TRICE_ENTER \
- uint32_t ts = TriceStamp32; \
- TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
+#define TRice64m_3(tid, v0, v1, v2) \
+ TRICE_ENTER \
+ uint32_t ts = TriceStamp32; \
+ TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
TRICE_PUT(24l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
- TRICE_PUT64_3(v0, v1, v2); \
+ TRICE_PUT64_3(v0, v1, v2); \
TRICE_LEAVE
-#define TRice64m_4(tid, v0, v1, v2, v3) \
- TRICE_ENTER \
- uint32_t ts = TriceStamp32; \
- TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
+#define TRice64m_4(tid, v0, v1, v2, v3) \
+ TRICE_ENTER \
+ uint32_t ts = TriceStamp32; \
+ TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
TRICE_PUT(32l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
- TRICE_PUT64_4(v0, v1, v2, v3); \
+ TRICE_PUT64_4(v0, v1, v2, v3); \
TRICE_LEAVE
-#define TRice64m_5(tid, v0, v1, v2, v3, v4) \
- TRICE_ENTER \
- uint32_t ts = TriceStamp32; \
- TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
+#define TRice64m_5(tid, v0, v1, v2, v3, v4) \
+ TRICE_ENTER \
+ uint32_t ts = TriceStamp32; \
+ TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
TRICE_PUT(40l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
- TRICE_PUT64_5(v0, v1, v2, v3, v4); \
+ TRICE_PUT64_5(v0, v1, v2, v3, v4); \
TRICE_LEAVE
-#define TRice64m_6(tid, v0, v1, v2, v3, v4, v5) \
- TRICE_ENTER \
- uint32_t ts = TriceStamp32; \
- TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
+#define TRice64m_6(tid, v0, v1, v2, v3, v4, v5) \
+ TRICE_ENTER \
+ uint32_t ts = TriceStamp32; \
+ TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
TRICE_PUT(48l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
- TRICE_PUT64_6(v0, v1, v2, v3, v4, v5); \
+ TRICE_PUT64_6(v0, v1, v2, v3, v4, v5); \
TRICE_LEAVE
-#define TRice64m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
- TRICE_ENTER \
- uint32_t ts = TriceStamp32; \
- TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
+#define TRice64m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
+ TRICE_ENTER \
+ uint32_t ts = TriceStamp32; \
+ TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
TRICE_PUT(56l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
- TRICE_PUT64_7(v0, v1, v2, v3, v4, v5, v6); \
+ TRICE_PUT64_7(v0, v1, v2, v3, v4, v5, v6); \
TRICE_LEAVE
-#define TRice64m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
- TRICE_ENTER \
- uint32_t ts = TriceStamp32; \
- TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
+#define TRice64m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
+ TRICE_ENTER \
+ uint32_t ts = TriceStamp32; \
+ TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
TRICE_PUT(64l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
- TRICE_PUT64_8(v0, v1, v2, v3, v4, v5, v6, v7); \
+ TRICE_PUT64_8(v0, v1, v2, v3, v4, v5, v6, v7); \
TRICE_LEAVE
-#define TRice64m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
- TRICE_ENTER \
- uint32_t ts = TriceStamp32; \
- TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
+#define TRice64m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
+ TRICE_ENTER \
+ uint32_t ts = TriceStamp32; \
+ TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
TRICE_PUT(72l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
- TRICE_PUT64_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
+ TRICE_PUT64_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
TRICE_LEAVE
#define TRice64m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
TRICE_ENTER \
uint32_t ts = TriceStamp32; \
TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
- TRICE_PUT(80l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
+ TRICE_PUT(80l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
TRICE_PUT64_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
TRICE_LEAVE
@@ -280,7 +279,7 @@
TRICE_ENTER \
uint32_t ts = TriceStamp32; \
TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
- TRICE_PUT(88l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
+ TRICE_PUT(88l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
TRICE_PUT64_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
TRICE_LEAVE
@@ -288,7 +287,7 @@
TRICE_ENTER \
uint32_t ts = TriceStamp32; \
TRICE_PUT((ts << 16) | 0xc000 | (tid)); \
- TRICE_PUT(96l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
+ TRICE_PUT(96l << 24 | ((TRICE_CYCLE) << 16) | (ts >> 16)); \
TRICE_PUT64_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_LEAVE
diff --git a/src/trice64McuReverse.h b/src/trice64McuReverse.h
index 2dfe1559d..a2b81f794 100644
--- a/src/trice64McuReverse.h
+++ b/src/trice64McuReverse.h
@@ -5,7 +5,6 @@
//! \file trice64McuReverse.h
//! \brief trice 64 Mcu Reverse declarations and macros.
-
#ifndef TRICE64_MCU_REVERSE_H_
#define TRICE64_MCU_REVERSE_H_
@@ -14,282 +13,282 @@
TRICE_PUT(((TRICE_CYCLE) << 24) | idLH); \
TRICE_LEAVE
-#define trice64m_1(tid, v0) \
- TRICE_ENTER \
+#define trice64m_1(tid, v0) \
+ TRICE_ENTER \
TRICE_PUT(((TRICE_CYCLE) << 24) | (8l << 16) | idLH); \
- TRICE_PUT64_1(v0) \
+ TRICE_PUT64_1(v0) \
TRICE_LEAVE
-#define trice64m_2(tid, v0, v1) \
- TRICE_ENTER \
+#define trice64m_2(tid, v0, v1) \
+ TRICE_ENTER \
TRICE_PUT(((TRICE_CYCLE) << 24) | (16l << 16) | idLH); \
- TRICE_PUT64_2(v0, v1); \
+ TRICE_PUT64_2(v0, v1); \
TRICE_LEAVE
-#define trice64m_3(tid, v0, v1, v2) \
- TRICE_ENTER \
+#define trice64m_3(tid, v0, v1, v2) \
+ TRICE_ENTER \
TRICE_PUT(((TRICE_CYCLE) << 24) | (24l << 16) | idLH); \
- TRICE_PUT64_3(v0, v1, v2); \
+ TRICE_PUT64_3(v0, v1, v2); \
TRICE_LEAVE
-#define trice64m_4(tid, v0, v1, v2, v3) \
- TRICE_ENTER \
+#define trice64m_4(tid, v0, v1, v2, v3) \
+ TRICE_ENTER \
TRICE_PUT(((TRICE_CYCLE) << 24) | (32l << 16) | idLH); \
- TRICE_PUT64_4(v0, v1, v2, v3); \
+ TRICE_PUT64_4(v0, v1, v2, v3); \
TRICE_LEAVE
-#define trice64m_5(tid, v0, v1, v2, v3, v4) \
- TRICE_ENTER \
+#define trice64m_5(tid, v0, v1, v2, v3, v4) \
+ TRICE_ENTER \
TRICE_PUT(((TRICE_CYCLE) << 24) | (40l << 16) | idLH); \
- TRICE_PUT64_5(v0, v1, v2, v3, v4); \
+ TRICE_PUT64_5(v0, v1, v2, v3, v4); \
TRICE_LEAVE
-#define trice64m_6(tid, v0, v1, v2, v3, v4, v5) \
- TRICE_ENTER \
+#define trice64m_6(tid, v0, v1, v2, v3, v4, v5) \
+ TRICE_ENTER \
TRICE_PUT(((TRICE_CYCLE) << 24) | (48l << 16) | idLH); \
- TRICE_PUT64_6(v0, v1, v2, v3, v4, v5); \
+ TRICE_PUT64_6(v0, v1, v2, v3, v4, v5); \
TRICE_LEAVE
-#define trice64m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
- TRICE_ENTER \
+#define trice64m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
+ TRICE_ENTER \
TRICE_PUT(((TRICE_CYCLE) << 24) | (56l << 16) | idLH); \
- TRICE_PUT64_7(v0, v1, v2, v3, v4, v5, v6); \
+ TRICE_PUT64_7(v0, v1, v2, v3, v4, v5, v6); \
TRICE_LEAVE
-#define trice64m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
- TRICE_ENTER \
+#define trice64m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
+ TRICE_ENTER \
TRICE_PUT(((TRICE_CYCLE) << 24) | (64l << 16) | idLH); \
- TRICE_PUT64_8(v0, v1, v2, v3, v4, v5, v6, v7); \
+ TRICE_PUT64_8(v0, v1, v2, v3, v4, v5, v6, v7); \
TRICE_LEAVE
#define trice64m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
TRICE_ENTER \
- TRICE_PUT(((TRICE_CYCLE) << 24) | (72l << 16) | idLH); \
+ TRICE_PUT(((TRICE_CYCLE) << 24) | (72l << 16) | idLH); \
TRICE_PUT64_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
TRICE_LEAVE
#define trice64m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
TRICE_ENTER \
- TRICE_PUT(((TRICE_CYCLE) << 24) | (80l << 16) | idLH); \
+ TRICE_PUT(((TRICE_CYCLE) << 24) | (80l << 16) | idLH); \
TRICE_PUT64_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
TRICE_LEAVE
#define trice64m_11(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
TRICE_ENTER \
- TRICE_PUT(((TRICE_CYCLE) << 24) | (88l << 16) | idLH); \
+ TRICE_PUT(((TRICE_CYCLE) << 24) | (88l << 16) | idLH); \
TRICE_PUT64_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
TRICE_LEAVE
#define trice64m_12(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_ENTER \
- TRICE_PUT(((TRICE_CYCLE) << 24) | (96l << 16) | idLH); \
+ TRICE_PUT(((TRICE_CYCLE) << 24) | (96l << 16) | idLH); \
TRICE_PUT64_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_LEAVE
-#define Trice64m_0(tid) \
- TRICE_ENTER \
- uint16_t ts_Trice64m_0 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice64m_0(tid) \
+ TRICE_ENTER \
+ uint16_t ts_Trice64m_0 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | TRICE16_LO_BYTE(ts_Trice64m_0) | TRICE16_HI_BYTE(ts_Trice64m_0)); \
TRICE_LEAVE
-#define Trice64m_1(tid, v0) \
- TRICE_ENTER \
- uint16_t ts_Trice64m_1 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice64m_1(tid, v0) \
+ TRICE_ENTER \
+ uint16_t ts_Trice64m_1 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (8l << 16) | TRICE16_LO_BYTE(ts_Trice64m_1) | TRICE16_HI_BYTE(ts_Trice64m_1)); \
- TRICE_PUT64_1(v0) \
+ TRICE_PUT64_1(v0) \
TRICE_LEAVE
-#define Trice64m_2(tid, v0, v1) \
- TRICE_ENTER \
- uint16_t ts_Trice64m_2 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice64m_2(tid, v0, v1) \
+ TRICE_ENTER \
+ uint16_t ts_Trice64m_2 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (16l << 16) | TRICE16_LO_BYTE(ts_Trice64m_2) | TRICE16_HI_BYTE(ts_Trice64m_2)); \
- TRICE_PUT64_2(v0, v1); \
+ TRICE_PUT64_2(v0, v1); \
TRICE_LEAVE
-#define Trice64m_3(tid, v0, v1, v2) \
- TRICE_ENTER \
- uint16_t ts_Trice64m_3 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice64m_3(tid, v0, v1, v2) \
+ TRICE_ENTER \
+ uint16_t ts_Trice64m_3 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (24l << 16) | TRICE16_LO_BYTE(ts_Trice64m_3) | TRICE16_HI_BYTE(ts_Trice64m_3)); \
- TRICE_PUT64_3(v0, v1, v2); \
+ TRICE_PUT64_3(v0, v1, v2); \
TRICE_LEAVE
-#define Trice64m_4(tid, v0, v1, v2, v3) \
- TRICE_ENTER \
- uint16_t ts_Trice64m_4 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice64m_4(tid, v0, v1, v2, v3) \
+ TRICE_ENTER \
+ uint16_t ts_Trice64m_4 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (32l << 16) | TRICE16_LO_BYTE(ts_Trice64m_4) | TRICE16_HI_BYTE(ts_Trice64m_4)); \
- TRICE_PUT64_4(v0, v1, v2, v3); \
+ TRICE_PUT64_4(v0, v1, v2, v3); \
TRICE_LEAVE
-#define Trice64m_5(tid, v0, v1, v2, v3, v4) \
- TRICE_ENTER \
- uint16_t ts_Trice64m_5 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice64m_5(tid, v0, v1, v2, v3, v4) \
+ TRICE_ENTER \
+ uint16_t ts_Trice64m_5 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (40l << 16) | TRICE16_LO_BYTE(ts_Trice64m_5) | TRICE16_HI_BYTE(ts_Trice64m_5)); \
- TRICE_PUT64_5(v0, v1, v2, v3, v4); \
+ TRICE_PUT64_5(v0, v1, v2, v3, v4); \
TRICE_LEAVE
-#define Trice64m_6(tid, v0, v1, v2, v3, v4, v5) \
- TRICE_ENTER \
- uint16_t ts_Trice64m_6 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice64m_6(tid, v0, v1, v2, v3, v4, v5) \
+ TRICE_ENTER \
+ uint16_t ts_Trice64m_6 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (48l << 16) | TRICE16_LO_BYTE(ts_Trice64m_6) | TRICE16_HI_BYTE(ts_Trice64m_6)); \
- TRICE_PUT64_6(v0, v1, v2, v3, v4, v5); \
+ TRICE_PUT64_6(v0, v1, v2, v3, v4, v5); \
TRICE_LEAVE
-#define Trice64m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
- TRICE_ENTER \
- uint16_t ts_Trice64m_7 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice64m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
+ TRICE_ENTER \
+ uint16_t ts_Trice64m_7 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (56l << 16) | TRICE16_LO_BYTE(ts_Trice64m_7) | TRICE16_HI_BYTE(ts_Trice64m_7)); \
- TRICE_PUT64_7(v0, v1, v2, v3, v4, v5, v6); \
+ TRICE_PUT64_7(v0, v1, v2, v3, v4, v5, v6); \
TRICE_LEAVE
-#define Trice64m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
- TRICE_ENTER \
- uint16_t ts_Trice64m_8 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice64m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
+ TRICE_ENTER \
+ uint16_t ts_Trice64m_8 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (64l << 16) | TRICE16_LO_BYTE(ts_Trice64m_8) | TRICE16_HI_BYTE(ts_Trice64m_8)); \
- TRICE_PUT64_8(v0, v1, v2, v3, v4, v5, v6, v7); \
+ TRICE_PUT64_8(v0, v1, v2, v3, v4, v5, v6, v7); \
TRICE_LEAVE
-#define Trice64m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
- TRICE_ENTER \
- uint16_t ts_Trice64m_9 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice64m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
+ TRICE_ENTER \
+ uint16_t ts_Trice64m_9 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (72l << 16) | TRICE16_LO_BYTE(ts_Trice64m_9) | TRICE16_HI_BYTE(ts_Trice64m_9)); \
- TRICE_PUT64_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
+ TRICE_PUT64_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
TRICE_LEAVE
-#define Trice64m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
- TRICE_ENTER \
- uint16_t ts_Trice64m_10 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice64m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
+ TRICE_ENTER \
+ uint16_t ts_Trice64m_10 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (80l << 16) | TRICE16_LO_BYTE(ts_Trice64m_10) | TRICE16_HI_BYTE(ts_Trice64m_10)); \
- TRICE_PUT64_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
+ TRICE_PUT64_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
TRICE_LEAVE
-#define Trice64m_11(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
- TRICE_ENTER \
- uint16_t ts_Trice64m_11 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice64m_11(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
+ TRICE_ENTER \
+ uint16_t ts_Trice64m_11 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (88l << 16) | TRICE16_LO_BYTE(ts_Trice64m_11) | TRICE16_HI_BYTE(ts_Trice64m_11)); \
- TRICE_PUT64_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
+ TRICE_PUT64_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
TRICE_LEAVE
-#define Trice64m_12(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
- TRICE_ENTER \
- uint16_t ts_Trice64m_12 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice64m_12(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
+ TRICE_ENTER \
+ uint16_t ts_Trice64m_12 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (96l << 16) | TRICE16_LO_BYTE(ts_Trice64m_12) | TRICE16_HI_BYTE(ts_Trice64m_12)); \
- TRICE_PUT64_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
+ TRICE_PUT64_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_LEAVE
-#define TRice64m_0(tid) \
- TRICE_ENTER \
- uint32_t ts_TRice64m_ = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice64m_) | TRICE32_HH_BYTE(ts_TRice64m_) | IDLH); \
+#define TRice64m_0(tid) \
+ TRICE_ENTER \
+ uint32_t ts_TRice64m_ = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice64m_) | TRICE32_HH_BYTE(ts_TRice64m_) | IDLH); \
TRICE_PUT(((TRICE_CYCLE) << 24) | (0l << 16) | TRICE32_LL_BYTE(ts_TRice64m_) | TRICE32_LH_BYTE(ts_TRice64m_)) \
TRICE_LEAVE
-#define TRice64m_1(tid, v0) \
- TRICE_ENTER \
- uint32_t ts_TRice64m_ = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice64m_) | TRICE32_HH_BYTE(ts_TRice64m_) | IDLH) \
+#define TRice64m_1(tid, v0) \
+ TRICE_ENTER \
+ uint32_t ts_TRice64m_ = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice64m_) | TRICE32_HH_BYTE(ts_TRice64m_) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (8l << 16) | TRICE32_LL_BYTE(ts_TRice64m_) | TRICE32_LH_BYTE(ts_TRice64m_)) \
- TRICE_PUT64_1(v0) \
+ TRICE_PUT64_1(v0) \
TRICE_LEAVE
-#define TRice64m_2(tid, v0, v1) \
- TRICE_ENTER \
- uint32_t ts_TRice64m_ = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice64m_) | TRICE32_HH_BYTE(ts_TRice64m_) | IDLH) \
+#define TRice64m_2(tid, v0, v1) \
+ TRICE_ENTER \
+ uint32_t ts_TRice64m_ = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice64m_) | TRICE32_HH_BYTE(ts_TRice64m_) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (16l << 16) | TRICE32_LL_BYTE(ts_TRice64m_) | TRICE32_LH_BYTE(ts_TRice64m_)) \
- TRICE_PUT64_2(v0, v1); \
+ TRICE_PUT64_2(v0, v1); \
TRICE_LEAVE
-#define TRice64m_3(tid, v0, v1, v2) \
- TRICE_ENTER \
- uint32_t ts_TRice64m_ = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice64m_) | TRICE32_HH_BYTE(ts_TRice64m_) | IDLH) \
+#define TRice64m_3(tid, v0, v1, v2) \
+ TRICE_ENTER \
+ uint32_t ts_TRice64m_ = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice64m_) | TRICE32_HH_BYTE(ts_TRice64m_) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (24l << 16) | TRICE32_LL_BYTE(ts_TRice64m_) | TRICE32_LH_BYTE(ts_TRice64m_)) \
- TRICE_PUT64_3(v0, v1, v2); \
+ TRICE_PUT64_3(v0, v1, v2); \
TRICE_LEAVE
-#define TRice64m_4(tid, v0, v1, v2, v3) \
- TRICE_ENTER \
- uint32_t ts_TRice64m_ = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice64m_) | TRICE32_HH_BYTE(ts_TRice64m_) | IDLH) \
+#define TRice64m_4(tid, v0, v1, v2, v3) \
+ TRICE_ENTER \
+ uint32_t ts_TRice64m_ = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice64m_) | TRICE32_HH_BYTE(ts_TRice64m_) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (32l << 16) | TRICE32_LL_BYTE(ts_TRice64m_) | TRICE32_LH_BYTE(ts_TRice64m_)) \
- TRICE_PUT64_4(v0, v1, v2, v3); \
+ TRICE_PUT64_4(v0, v1, v2, v3); \
TRICE_LEAVE
-#define TRice64m_5(tid, v0, v1, v2, v3, v4) \
- TRICE_ENTER \
- uint32_t ts_TRice64m_ = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice64m_) | TRICE32_HH_BYTE(ts_TRice64m_) | IDLH) \
+#define TRice64m_5(tid, v0, v1, v2, v3, v4) \
+ TRICE_ENTER \
+ uint32_t ts_TRice64m_ = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice64m_) | TRICE32_HH_BYTE(ts_TRice64m_) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (40l << 16) | TRICE32_LL_BYTE(ts_TRice64m_) | TRICE32_LH_BYTE(ts_TRice64m_)) \
- TRICE_PUT64_5(v0, v1, v2, v3, v4); \
+ TRICE_PUT64_5(v0, v1, v2, v3, v4); \
TRICE_LEAVE
-#define TRice64m_6(tid, v0, v1, v2, v3, v4, v5) \
- TRICE_ENTER \
- uint32_t ts_TRice64m_ = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice64m_) | TRICE32_HH_BYTE(ts_TRice64m_) | IDLH) \
+#define TRice64m_6(tid, v0, v1, v2, v3, v4, v5) \
+ TRICE_ENTER \
+ uint32_t ts_TRice64m_ = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice64m_) | TRICE32_HH_BYTE(ts_TRice64m_) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (48l << 16) | TRICE32_LL_BYTE(ts_TRice64m_) | TRICE32_LH_BYTE(ts_TRice64m_)) \
- TRICE_PUT64_6(v0, v1, v2, v3, v4, v5); \
+ TRICE_PUT64_6(v0, v1, v2, v3, v4, v5); \
TRICE_LEAVE
-#define TRice64m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
- TRICE_ENTER \
- uint32_t ts_TRice64m_ = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice64m_) | TRICE32_HH_BYTE(ts_TRice64m_) | IDLH) \
+#define TRice64m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
+ TRICE_ENTER \
+ uint32_t ts_TRice64m_ = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice64m_) | TRICE32_HH_BYTE(ts_TRice64m_) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (56l << 16) | TRICE32_LL_BYTE(ts_TRice64m_) | TRICE32_LH_BYTE(ts_TRice64m_)) \
- TRICE_PUT64_7(v0, v1, v2, v3, v4, v5, v6); \
+ TRICE_PUT64_7(v0, v1, v2, v3, v4, v5, v6); \
TRICE_LEAVE
-#define TRice64m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
- TRICE_ENTER \
- uint32_t ts_TRice64m_ = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice64m_) | TRICE32_HH_BYTE(ts_TRice64m_) | IDLH) \
+#define TRice64m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
+ TRICE_ENTER \
+ uint32_t ts_TRice64m_ = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice64m_) | TRICE32_HH_BYTE(ts_TRice64m_) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (64l << 16) | TRICE32_LL_BYTE(ts_TRice64m_) | TRICE32_LH_BYTE(ts_TRice64m_)) \
- TRICE_PUT64_8(v0, v1, v2, v3, v4, v5, v6, v7); \
+ TRICE_PUT64_8(v0, v1, v2, v3, v4, v5, v6, v7); \
TRICE_LEAVE
-#define TRice64m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
- TRICE_ENTER \
- uint32_t ts_TRice64m_ = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice64m_) | TRICE32_HH_BYTE(ts_TRice64m_) | IDLH) \
+#define TRice64m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
+ TRICE_ENTER \
+ uint32_t ts_TRice64m_ = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice64m_) | TRICE32_HH_BYTE(ts_TRice64m_) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (72l << 16) | TRICE32_LL_BYTE(ts_TRice64m_) | TRICE32_LH_BYTE(ts_TRice64m_)) \
- TRICE_PUT64_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
+ TRICE_PUT64_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
TRICE_LEAVE
-#define TRice64m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
- TRICE_ENTER \
- uint32_t ts_TRice64m_ = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice64m_) | TRICE32_HH_BYTE(ts_TRice64m_) | IDLH) \
+#define TRice64m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
+ TRICE_ENTER \
+ uint32_t ts_TRice64m_ = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice64m_) | TRICE32_HH_BYTE(ts_TRice64m_) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (80l << 16) | TRICE32_LL_BYTE(ts_TRice64m_) | TRICE32_LH_BYTE(ts_TRice64m_)) \
- TRICE_PUT64_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
+ TRICE_PUT64_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
TRICE_LEAVE
-#define TRice64m_11(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
- TRICE_ENTER \
- uint32_t ts_TRice64m_ = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice64m_) | TRICE32_HH_BYTE(ts_TRice64m_) | IDLH) \
+#define TRice64m_11(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
+ TRICE_ENTER \
+ uint32_t ts_TRice64m_ = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice64m_) | TRICE32_HH_BYTE(ts_TRice64m_) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (88l << 16) | TRICE32_LL_BYTE(ts_TRice64m_) | TRICE32_LH_BYTE(ts_TRice64m_)) \
- TRICE_PUT64_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
+ TRICE_PUT64_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
TRICE_LEAVE
-#define TRice64m_12(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
- TRICE_ENTER \
- uint32_t ts_TRice64m_ = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice64m_) | TRICE32_HH_BYTE(ts_TRice64m_) | IDLH) \
+#define TRice64m_12(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
+ TRICE_ENTER \
+ uint32_t ts_TRice64m_ = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice64m_) | TRICE32_HH_BYTE(ts_TRice64m_) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (96l << 16) | TRICE32_LL_BYTE(ts_TRice64m_) | TRICE32_LH_BYTE(ts_TRice64m_)) \
- TRICE_PUT64_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
+ TRICE_PUT64_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_LEAVE
#endif // #ifndef TRICE64_MCU_REVERSE_H_
diff --git a/src/trice8.c b/src/trice8.c
index 9e0462a17..5ceb00087 100644
--- a/src/trice8.c
+++ b/src/trice8.c
@@ -5,7 +5,6 @@
//! \file trice8.c
//! \brief trice 8 implementation.
-
#include "trice.h"
// lint -e529 Warning 529: Symbol '_SEGGER_RTT__LockState' not subsequently referenced
diff --git a/src/trice8.h b/src/trice8.h
index 02368d688..236dcbc89 100644
--- a/src/trice8.h
+++ b/src/trice8.h
@@ -5,78 +5,77 @@
//! \file trice8.h
//! \brief trice 8 declarations and macros.
-
#ifndef TRICE8_H_
#define TRICE8_H_
#if TRICE_DEFAULT_PARAMETER_BIT_WIDTH == 8
// #define TRICE_0 TRICE8_0 //!< Default parameter bit width for 0 parameter count TRICE is 8.
-#define TRICE_1 TRICE8_1 //!< Default parameter bit width for 1 parameter count TRICE is 8.
-#define TRICE_2 TRICE8_2 //!< Default parameter bit width for 2 parameter count TRICE is 8.
-#define TRICE_3 TRICE8_3 //!< Default parameter bit width for 3 parameter count TRICE is 8.
-#define TRICE_4 TRICE8_4 //!< Default parameter bit width for 4 parameter count TRICE is 8.
-#define TRICE_5 TRICE8_5 //!< Default parameter bit width for 5 parameter count TRICE is 8.
-#define TRICE_6 TRICE8_6 //!< Default parameter bit width for 6 parameter count TRICE is 8.
-#define TRICE_7 TRICE8_7 //!< Default parameter bit width for 7 parameter count TRICE is 8.
-#define TRICE_8 TRICE8_8 //!< Default parameter bit width for 8 parameter count TRICE is 8.
-#define TRICE_9 TRICE8_9 //!< Default parameter bit width for 9 parameter count TRICE is 8.
-#define TRICE_10 TRICE8_10 //!< Default parameter bit width for 10 parameter count TRICE is 8.
-#define TRICE_11 TRICE8_11 //!< Default parameter bit width for 11 parameter count TRICE is 8.
-#define TRICE_12 TRICE8_12 //!< Default parameter bit width for 12 parameter count TRICE is 8.
+#define TRICE_INSERT_TRICE_1 TRICE_INSERT_TRICE8_1 //!< Default parameter bit width for 1 parameter count TRICE is 8.
+#define TRICE_INSERT_TRICE_2 TRICE_INSERT_TRICE8_2 //!< Default parameter bit width for 2 parameter count TRICE is 8.
+#define TRICE_INSERT_TRICE_3 TRICE_INSERT_TRICE8_3 //!< Default parameter bit width for 3 parameter count TRICE is 8.
+#define TRICE_INSERT_TRICE_4 TRICE_INSERT_TRICE8_4 //!< Default parameter bit width for 4 parameter count TRICE is 8.
+#define TRICE_INSERT_TRICE_5 TRICE_INSERT_TRICE8_5 //!< Default parameter bit width for 5 parameter count TRICE is 8.
+#define TRICE_INSERT_TRICE_6 TRICE_INSERT_TRICE8_6 //!< Default parameter bit width for 6 parameter count TRICE is 8.
+#define TRICE_INSERT_TRICE_7 TRICE_INSERT_TRICE8_7 //!< Default parameter bit width for 7 parameter count TRICE is 8.
+#define TRICE_INSERT_TRICE_8 TRICE_INSERT_TRICE8_8 //!< Default parameter bit width for 8 parameter count TRICE is 8.
+#define TRICE_INSERT_TRICE_9 TRICE_INSERT_TRICE8_9 //!< Default parameter bit width for 9 parameter count TRICE is 8.
+#define TRICE_INSERT_TRICE_10 TRICE_INSERT_TRICE8_10 //!< Default parameter bit width for 10 parameter count TRICE is 8.
+#define TRICE_INSERT_TRICE_11 TRICE_INSERT_TRICE8_11 //!< Default parameter bit width for 11 parameter count TRICE is 8.
+#define TRICE_INSERT_TRICE_12 TRICE_INSERT_TRICE8_12 //!< Default parameter bit width for 12 parameter count TRICE is 8.
// #define trice_0 trice8_0 //!< Default parameter bit width for 0 parameter count trice is 8.
-#define trice_1 trice8_1 //!< Default parameter bit width for 1 parameter count trice is 8.
-#define trice_2 trice8_2 //!< Default parameter bit width for 2 parameter count trice is 8.
-#define trice_3 trice8_3 //!< Default parameter bit width for 3 parameter count trice is 8.
-#define trice_4 trice8_4 //!< Default parameter bit width for 4 parameter count trice is 8.
-#define trice_5 trice8_5 //!< Default parameter bit width for 5 parameter count trice is 8.
-#define trice_6 trice8_6 //!< Default parameter bit width for 6 parameter count trice is 8.
-#define trice_7 trice8_7 //!< Default parameter bit width for 7 parameter count trice is 8.
-#define trice_8 trice8_8 //!< Default parameter bit width for 8 parameter count trice is 8.
-#define trice_9 trice8_9 //!< Default parameter bit width for 9 parameter count trice is 8.
-#define trice_10 trice8_10 //!< Default parameter bit width for 10 parameter count trice is 8.
-#define trice_11 trice8_11 //!< Default parameter bit width for 11 parameter count trice is 8.
-#define trice_12 trice8_12 //!< Default parameter bit width for 12 parameter count trice is 8.
+#define TRICE_INSERT_trice_1 TRICE_INSERT_trice8_1 //!< Default parameter bit width for 1 parameter count trice is 8.
+#define TRICE_INSERT_trice_2 TRICE_INSERT_trice8_2 //!< Default parameter bit width for 2 parameter count trice is 8.
+#define TRICE_INSERT_trice_3 TRICE_INSERT_trice8_3 //!< Default parameter bit width for 3 parameter count trice is 8.
+#define TRICE_INSERT_trice_4 TRICE_INSERT_trice8_4 //!< Default parameter bit width for 4 parameter count trice is 8.
+#define TRICE_INSERT_trice_5 TRICE_INSERT_trice8_5 //!< Default parameter bit width for 5 parameter count trice is 8.
+#define TRICE_INSERT_trice_6 TRICE_INSERT_trice8_6 //!< Default parameter bit width for 6 parameter count trice is 8.
+#define TRICE_INSERT_trice_7 TRICE_INSERT_trice8_7 //!< Default parameter bit width for 7 parameter count trice is 8.
+#define TRICE_INSERT_trice_8 TRICE_INSERT_trice8_8 //!< Default parameter bit width for 8 parameter count trice is 8.
+#define TRICE_INSERT_trice_9 TRICE_INSERT_trice8_9 //!< Default parameter bit width for 9 parameter count trice is 8.
+#define TRICE_INSERT_trice_10 TRICE_INSERT_trice8_10 //!< Default parameter bit width for 10 parameter count trice is 8.
+#define TRICE_INSERT_trice_11 TRICE_INSERT_trice8_11 //!< Default parameter bit width for 11 parameter count trice is 8.
+#define TRICE_INSERT_trice_12 TRICE_INSERT_trice8_12 //!< Default parameter bit width for 12 parameter count trice is 8.
// #define Trice_0 Trice8_0 //!< Default parameter bit width for 1 parameter count Trice is 8.
-#define Trice_1 Trice8_1 //!< Default parameter bit width for 1 parameter count Trice is 8.
-#define Trice_2 Trice8_2 //!< Default parameter bit width for 2 parameter count Trice is 8.
-#define Trice_3 Trice8_3 //!< Default parameter bit width for 3 parameter count Trice is 8.
-#define Trice_4 Trice8_4 //!< Default parameter bit width for 4 parameter count Trice is 8.
-#define Trice_5 Trice8_5 //!< Default parameter bit width for 5 parameter count Trice is 8.
-#define Trice_6 Trice8_6 //!< Default parameter bit width for 6 parameter count Trice is 8.
-#define Trice_7 Trice8_7 //!< Default parameter bit width for 7 parameter count Trice is 8.
-#define Trice_8 Trice8_8 //!< Default parameter bit width for 8 parameter count Trice is 8.
-#define Trice_9 Trice8_9 //!< Default parameter bit width for 9 parameter count Trice is 8.
-#define Trice_10 Trice8_10 //!< Default parameter bit width for 10 parameter count Trice is 8.
-#define Trice_11 Trice8_11 //!< Default parameter bit width for 11 parameter count Trice is 8.
-#define Trice_12 Trice8_12 //!< Default parameter bit width for 12 parameter count Trice is 8.
+#define TRICE_INSERT_Trice_1 TRICE_INSERT_Trice8_1 //!< Default parameter bit width for 1 parameter count Trice is 8.
+#define TRICE_INSERT_Trice_2 TRICE_INSERT_Trice8_2 //!< Default parameter bit width for 2 parameter count Trice is 8.
+#define TRICE_INSERT_Trice_3 TRICE_INSERT_Trice8_3 //!< Default parameter bit width for 3 parameter count Trice is 8.
+#define TRICE_INSERT_Trice_4 TRICE_INSERT_Trice8_4 //!< Default parameter bit width for 4 parameter count Trice is 8.
+#define TRICE_INSERT_Trice_5 TRICE_INSERT_Trice8_5 //!< Default parameter bit width for 5 parameter count Trice is 8.
+#define TRICE_INSERT_Trice_6 TRICE_INSERT_Trice8_6 //!< Default parameter bit width for 6 parameter count Trice is 8.
+#define TRICE_INSERT_Trice_7 TRICE_INSERT_Trice8_7 //!< Default parameter bit width for 7 parameter count Trice is 8.
+#define TRICE_INSERT_Trice_8 TRICE_INSERT_Trice8_8 //!< Default parameter bit width for 8 parameter count Trice is 8.
+#define TRICE_INSERT_Trice_9 TRICE_INSERT_Trice8_9 //!< Default parameter bit width for 9 parameter count Trice is 8.
+#define TRICE_INSERT_Trice_10 TRICE_INSERT_Trice8_10 //!< Default parameter bit width for 10 parameter count Trice is 8.
+#define TRICE_INSERT_Trice_11 TRICE_INSERT_Trice8_11 //!< Default parameter bit width for 11 parameter count Trice is 8.
+#define TRICE_INSERT_Trice_12 TRICE_INSERT_Trice8_12 //!< Default parameter bit width for 12 parameter count Trice is 8.
// #define TRice_0 TRice8_0 //!< Default parameter bit width for 1 parameter count TRice is 8.
-#define TRice_1 TRice8_1 //!< Default parameter bit width for 1 parameter count TRice is 8.
-#define TRice_2 TRice8_2 //!< Default parameter bit width for 2 parameter count TRice is 8.
-#define TRice_3 TRice8_3 //!< Default parameter bit width for 3 parameter count TRice is 8.
-#define TRice_4 TRice8_4 //!< Default parameter bit width for 4 parameter count TRice is 8.
-#define TRice_5 TRice8_5 //!< Default parameter bit width for 5 parameter count TRice is 8.
-#define TRice_6 TRice8_6 //!< Default parameter bit width for 6 parameter count TRice is 8.
-#define TRice_7 TRice8_7 //!< Default parameter bit width for 7 parameter count TRice is 8.
-#define TRice_8 TRice8_8 //!< Default parameter bit width for 8 parameter count TRice is 8.
-#define TRice_9 TRice8_9 //!< Default parameter bit width for 9 parameter count TRice is 8.
-#define TRice_10 TRice8_10 //!< Default parameter bit width for 10 parameter count TRice is 8.
-#define TRice_11 TRice8_11 //!< Default parameter bit width for 11 parameter count TRice is 8.
-#define TRice_12 TRice8_12 //!< Default parameter bit width for 12 parameter count TRice is 8.
+#define TRICE_INSERT_TRice_1 TRICE_INSERT_TRice8_1 //!< Default parameter bit width for 1 parameter count TRice is 8.
+#define TRICE_INSERT_TRice_2 TRICE_INSERT_TRice8_2 //!< Default parameter bit width for 2 parameter count TRice is 8.
+#define TRICE_INSERT_TRice_3 TRICE_INSERT_TRice8_3 //!< Default parameter bit width for 3 parameter count TRice is 8.
+#define TRICE_INSERT_TRice_4 TRICE_INSERT_TRice8_4 //!< Default parameter bit width for 4 parameter count TRice is 8.
+#define TRICE_INSERT_TRice_5 TRICE_INSERT_TRice8_5 //!< Default parameter bit width for 5 parameter count TRice is 8.
+#define TRICE_INSERT_TRice_6 TRICE_INSERT_TRice8_6 //!< Default parameter bit width for 6 parameter count TRice is 8.
+#define TRICE_INSERT_TRice_7 TRICE_INSERT_TRice8_7 //!< Default parameter bit width for 7 parameter count TRice is 8.
+#define TRICE_INSERT_TRice_8 TRICE_INSERT_TRice8_8 //!< Default parameter bit width for 8 parameter count TRice is 8.
+#define TRICE_INSERT_TRice_9 TRICE_INSERT_TRice8_9 //!< Default parameter bit width for 9 parameter count TRice is 8.
+#define TRICE_INSERT_TRice_10 TRICE_INSERT_TRice8_10 //!< Default parameter bit width for 10 parameter count TRice is 8.
+#define TRICE_INSERT_TRice_11 TRICE_INSERT_TRice8_11 //!< Default parameter bit width for 11 parameter count TRice is 8.
+#define TRICE_INSERT_TRice_12 TRICE_INSERT_TRice8_12 //!< Default parameter bit width for 12 parameter count TRice is 8.
#endif // #if TRICE_DEFAULT_PARAMETER_BIT_WIDTH == 8
#include "triceVariadic.h"
//! TRICE8 inlining code for up to 12 8-bit parameters.
-#define TRICE8(tid, ...) TRICE_CONCAT2(TRICE8_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
+#define TRICE_INSERT_TRICE8(tid, ...) TRICE_CONCAT2(TRICE_INSERT_TRICE8_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
//! TRICE8_B expects inside pFmt only one format specifier, which is used n times by using pFmt n times.
//! It is usable for showing n 8-bit values.
-#define TRICE8_B TRICE_N
+#define TRICE_INSERT_TRICE8_B TRICE_INSERT_TRICE_N
#if TRICE_LEGACY_RPC_SUPPORT == 1
//! TRICE8_F expects inside pFmt just a string which is assumed to be a remote function name.
@@ -84,7 +83,7 @@
//! \li The idea behind is to generate an id - function pointer referece list from the generated til.json file to compile it into a remote device and execute the inside pFmt named function remotely.
//! \li Look for "TRICE8_F example" inside triceCheck.c.
//! Look for "TRICE8_F example" inside triceCheck.c.
-#define TRICE8_F TRICE8_B
+#define TRICE_INSERT_TRICE8_F TRICE_INSERT_TRICE8_B
#endif // #if TRICE_LEGACY_RPC_SUPPORT == 1
#define TRICE_BYTE0(v) ((uint8_t)(v)) //!< TRICE_BYTE0(v) is the 8-bit value v moved to the LL position in a 32-bit value 0xHH_HL_LH_LL.
@@ -143,117 +142,117 @@
//! TRICE8_0 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
-#define TRICE8_0(tid, pFmt) \
- TRICE_ENTER tid; \
- TRICE_CNTC(0); \
+#define TRICE_INSERT_TRICE8_0(tid, pFmt) \
+ TRICE_ENTER tid; \
+ TRICE_CNTC(0); \
TRICE_LEAVE
//! TRICE8_1 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 a 8 bit value
-#define TRICE8_1(tid, pFmt, v0) \
- TRICE_ENTER tid; \
- TRICE_CNTC(1); \
- TRICE_PUT8_1(v0) \
+#define TRICE_INSERT_TRICE8_1(tid, pFmt, v0) \
+ TRICE_ENTER tid; \
+ TRICE_CNTC(1); \
+ TRICE_PUT8_1(v0) \
TRICE_LEAVE
//! TRICE8_2 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v1 are 8 bit values
-#define TRICE8_2(tid, pFmt, v0, v1) \
- TRICE_ENTER tid; \
- TRICE_CNTC(2); \
- TRICE_PUT8_2(v0, v1); \
+#define TRICE_INSERT_TRICE8_2(tid, pFmt, v0, v1) \
+ TRICE_ENTER tid; \
+ TRICE_CNTC(2); \
+ TRICE_PUT8_2(v0, v1); \
TRICE_LEAVE
//! TRICE8_3 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v2 are 8 bit values
-#define TRICE8_3(tid, pFmt, v0, v1, v2) \
- TRICE_ENTER tid; \
- TRICE_CNTC(3); \
- TRICE_PUT8_3(v0, v1, v2); \
+#define TRICE_INSERT_TRICE8_3(tid, pFmt, v0, v1, v2) \
+ TRICE_ENTER tid; \
+ TRICE_CNTC(3); \
+ TRICE_PUT8_3(v0, v1, v2); \
TRICE_LEAVE
//! TRICE8_4 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v3 are 8 bit values
-#define TRICE8_4(tid, pFmt, v0, v1, v2, v3) \
- TRICE_ENTER tid; \
- TRICE_CNTC(4); \
- TRICE_PUT8_4(v0, v1, v2, v3); \
+#define TRICE_INSERT_TRICE8_4(tid, pFmt, v0, v1, v2, v3) \
+ TRICE_ENTER tid; \
+ TRICE_CNTC(4); \
+ TRICE_PUT8_4(v0, v1, v2, v3); \
TRICE_LEAVE
//! TRICE8_5 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v4 are 8 bit values
-#define TRICE8_5(tid, pFmt, v0, v1, v2, v3, v4) \
- TRICE_ENTER tid; \
- TRICE_CNTC(5); \
- TRICE_PUT8_5(v0, v1, v2, v3, v4); \
+#define TRICE_INSERT_TRICE8_5(tid, pFmt, v0, v1, v2, v3, v4) \
+ TRICE_ENTER tid; \
+ TRICE_CNTC(5); \
+ TRICE_PUT8_5(v0, v1, v2, v3, v4); \
TRICE_LEAVE
//! TRICE8_6 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v5 are 8 bit values
-#define TRICE8_6(tid, pFmt, v0, v1, v2, v3, v4, v5) \
- TRICE_ENTER tid; \
- TRICE_CNTC(6); \
- TRICE_PUT8_6(v0, v1, v2, v3, v4, v5); \
+#define TRICE_INSERT_TRICE8_6(tid, pFmt, v0, v1, v2, v3, v4, v5) \
+ TRICE_ENTER tid; \
+ TRICE_CNTC(6); \
+ TRICE_PUT8_6(v0, v1, v2, v3, v4, v5); \
TRICE_LEAVE
//! TRICE8_8 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v6 are 8 bit values
-#define TRICE8_7(tid, pFmt, v0, v1, v2, v3, v4, v5, v6) \
- TRICE_ENTER tid; \
- TRICE_CNTC(7); \
- TRICE_PUT8_7(v0, v1, v2, v3, v4, v5, v6); \
+#define TRICE_INSERT_TRICE8_7(tid, pFmt, v0, v1, v2, v3, v4, v5, v6) \
+ TRICE_ENTER tid; \
+ TRICE_CNTC(7); \
+ TRICE_PUT8_7(v0, v1, v2, v3, v4, v5, v6); \
TRICE_LEAVE
//! TRICE8_8 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v7 are 8 bit values
-#define TRICE8_8(tid, pFmt, v0, v1, v2, v3, v4, v5, v6, v7) \
- TRICE_ENTER tid; \
- TRICE_CNTC(8); \
- TRICE_PUT8_8(v0, v1, v2, v3, v4, v5, v6, v7); \
+#define TRICE_INSERT_TRICE8_8(tid, pFmt, v0, v1, v2, v3, v4, v5, v6, v7) \
+ TRICE_ENTER tid; \
+ TRICE_CNTC(8); \
+ TRICE_PUT8_8(v0, v1, v2, v3, v4, v5, v6, v7); \
TRICE_LEAVE
//! TRICE8_8 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v7 are 8 bit values
-#define TRICE8_9(tid, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
- TRICE_ENTER tid; \
- TRICE_CNTC(9); \
- TRICE_PUT8_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
+#define TRICE_INSERT_TRICE8_9(tid, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
+ TRICE_ENTER tid; \
+ TRICE_CNTC(9); \
+ TRICE_PUT8_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
TRICE_LEAVE
//! TRICE8_8 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v7 are 8 bit values
-#define TRICE8_10(tid, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
- TRICE_ENTER tid; \
- TRICE_CNTC(10); \
- TRICE_PUT8_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
+#define TRICE_INSERT_TRICE8_10(tid, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
+ TRICE_ENTER tid; \
+ TRICE_CNTC(10); \
+ TRICE_PUT8_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
TRICE_LEAVE
//! TRICE8_8 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v7 are 8 bit values
-#define TRICE8_11(tid, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
- TRICE_ENTER tid; \
- TRICE_CNTC(11); \
- TRICE_PUT8_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
+#define TRICE_INSERT_TRICE8_11(tid, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
+ TRICE_ENTER tid; \
+ TRICE_CNTC(11); \
+ TRICE_PUT8_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
TRICE_LEAVE
//! TRICE8_12 writes trice data as fast as possible in a buffer.
//! \param tid is a 16 bit Trice id in upper 2 bytes of a 32 bit value
//! \param v0 - v11 are 8 bit values
-#define TRICE8_12(tid, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
- TRICE_ENTER tid; \
- TRICE_CNTC(12); \
- TRICE_PUT8_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
+#define TRICE_INSERT_TRICE8_12(tid, pFmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
+ TRICE_ENTER tid; \
+ TRICE_CNTC(12); \
+ TRICE_PUT8_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_LEAVE
#endif // #ifndef TRICE8_H_
diff --git a/src/trice8McuOrder.h b/src/trice8McuOrder.h
index 22f1fbf0f..3bb119bf2 100644
--- a/src/trice8McuOrder.h
+++ b/src/trice8McuOrder.h
@@ -5,290 +5,289 @@
//! \file trice8McuOrder.h
//! \brief trice 8 Mcu Order declarations and macros.
-
#ifndef TRICE8_MCU_ORDER_H_
#define TRICE8_MCU_ORDER_H_
-#define trice8m_0(tid) \
- TRICE_ENTER \
+#define trice8m_0(tid) \
+ TRICE_ENTER \
TRICE_PUT((0l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
TRICE_LEAVE
-#define trice8m_1(tid, v0) \
- TRICE_ENTER \
+#define trice8m_1(tid, v0) \
+ TRICE_ENTER \
TRICE_PUT((1l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT8_1(v0) \
+ TRICE_PUT8_1(v0) \
TRICE_LEAVE
-#define trice8m_2(tid, v0, v1) \
- TRICE_ENTER \
+#define trice8m_2(tid, v0, v1) \
+ TRICE_ENTER \
TRICE_PUT((2l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT8_2(v0, v1); \
+ TRICE_PUT8_2(v0, v1); \
TRICE_LEAVE
-#define trice8m_3(tid, v0, v1, v2) \
- TRICE_ENTER \
+#define trice8m_3(tid, v0, v1, v2) \
+ TRICE_ENTER \
TRICE_PUT((3l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT8_3(v0, v1, v2); \
+ TRICE_PUT8_3(v0, v1, v2); \
TRICE_LEAVE
-#define trice8m_4(tid, v0, v1, v2, v3) \
- TRICE_ENTER \
+#define trice8m_4(tid, v0, v1, v2, v3) \
+ TRICE_ENTER \
TRICE_PUT((4l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT8_4(v0, v1, v2, v3); \
+ TRICE_PUT8_4(v0, v1, v2, v3); \
TRICE_LEAVE
-#define trice8m_5(tid, v0, v1, v2, v3, v4) \
- TRICE_ENTER \
+#define trice8m_5(tid, v0, v1, v2, v3, v4) \
+ TRICE_ENTER \
TRICE_PUT((5l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT8_5(v0, v1, v2, v3, v4); \
+ TRICE_PUT8_5(v0, v1, v2, v3, v4); \
TRICE_LEAVE
-#define trice8m_6(tid, v0, v1, v2, v3, v4, v5) \
- TRICE_ENTER \
+#define trice8m_6(tid, v0, v1, v2, v3, v4, v5) \
+ TRICE_ENTER \
TRICE_PUT((6l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT8_6(v0, v1, v2, v3, v4, v5); \
+ TRICE_PUT8_6(v0, v1, v2, v3, v4, v5); \
TRICE_LEAVE
-#define trice8m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
- TRICE_ENTER \
+#define trice8m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
+ TRICE_ENTER \
TRICE_PUT((7l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT8_7(v0, v1, v2, v3, v4, v5, v6); \
+ TRICE_PUT8_7(v0, v1, v2, v3, v4, v5, v6); \
TRICE_LEAVE
-#define trice8m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
- TRICE_ENTER \
+#define trice8m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
+ TRICE_ENTER \
TRICE_PUT((8l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT8_8(v0, v1, v2, v3, v4, v5, v6, v7); \
+ TRICE_PUT8_8(v0, v1, v2, v3, v4, v5, v6, v7); \
TRICE_LEAVE
-#define trice8m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
- TRICE_ENTER \
+#define trice8m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
+ TRICE_ENTER \
TRICE_PUT((9l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT8_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
+ TRICE_PUT8_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
TRICE_LEAVE
-#define trice8m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
- TRICE_ENTER \
+#define trice8m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
+ TRICE_ENTER \
TRICE_PUT((10l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT8_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
+ TRICE_PUT8_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
TRICE_LEAVE
-#define trice8m_11(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
- TRICE_ENTER \
+#define trice8m_11(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
+ TRICE_ENTER \
TRICE_PUT((11l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
- TRICE_PUT8_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
+ TRICE_PUT8_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
TRICE_LEAVE
#define trice8m_12(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_ENTER \
- TRICE_PUT((12l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
+ TRICE_PUT((12l << 24) | ((TRICE_CYCLE) << 16) | (0x4000 | (tid))); \
TRICE_PUT8_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_LEAVE
-#define Trice8m_0(tid) \
- TRICE_ENTER \
- uint16_t ts_Trice8m_0 = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(0l << 24 | ((TRICE_CYCLE) << 16) | ts_Trice8m_0); \
+#define Trice8m_0(tid) \
+ TRICE_ENTER \
+ uint16_t ts_Trice8m_0 = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
+ TRICE_PUT(0l << 24 | ((TRICE_CYCLE) << 16) | ts_Trice8m_0); \
TRICE_LEAVE
-#define Trice8m_1(tid, v0) \
- TRICE_ENTER \
- uint16_t ts_Trice8m_1 = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(1l << 24 | ((TRICE_CYCLE) << 16) | ts_Trice8m_1); \
- TRICE_PUT8_1(v0) \
+#define Trice8m_1(tid, v0) \
+ TRICE_ENTER \
+ uint16_t ts_Trice8m_1 = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
+ TRICE_PUT(1l << 24 | ((TRICE_CYCLE) << 16) | ts_Trice8m_1); \
+ TRICE_PUT8_1(v0) \
TRICE_LEAVE
-#define Trice8m_2(tid, v0, v1) \
- TRICE_ENTER \
- uint16_t ts_Trice8m_2 = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(2l << 24 | ((TRICE_CYCLE) << 16) | ts_Trice8m_2); \
- TRICE_PUT8_2(v0, v1); \
+#define Trice8m_2(tid, v0, v1) \
+ TRICE_ENTER \
+ uint16_t ts_Trice8m_2 = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
+ TRICE_PUT(2l << 24 | ((TRICE_CYCLE) << 16) | ts_Trice8m_2); \
+ TRICE_PUT8_2(v0, v1); \
TRICE_LEAVE
-#define Trice8m_3(tid, v0, v1, v2) \
- TRICE_ENTER \
- uint16_t ts_Trice8m_3 = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(3l << 24 | ((TRICE_CYCLE) << 16) | ts_Trice8m_3); \
- TRICE_PUT8_3(v0, v1, v2); \
+#define Trice8m_3(tid, v0, v1, v2) \
+ TRICE_ENTER \
+ uint16_t ts_Trice8m_3 = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
+ TRICE_PUT(3l << 24 | ((TRICE_CYCLE) << 16) | ts_Trice8m_3); \
+ TRICE_PUT8_3(v0, v1, v2); \
TRICE_LEAVE
-#define Trice8m_4(tid, v0, v1, v2, v3) \
- TRICE_ENTER \
- uint16_t ts_Trice8m_4 = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(4l << 24 | ((TRICE_CYCLE) << 16) | ts_Trice8m_4); \
- TRICE_PUT8_4(v0, v1, v2, v3); \
+#define Trice8m_4(tid, v0, v1, v2, v3) \
+ TRICE_ENTER \
+ uint16_t ts_Trice8m_4 = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
+ TRICE_PUT(4l << 24 | ((TRICE_CYCLE) << 16) | ts_Trice8m_4); \
+ TRICE_PUT8_4(v0, v1, v2, v3); \
TRICE_LEAVE
-#define Trice8m_5(tid, v0, v1, v2, v3, v4) \
- TRICE_ENTER \
- uint16_t ts_Trice8m_5 = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(5l << 24 | ((TRICE_CYCLE) << 16) | ts_Trice8m_5); \
- TRICE_PUT8_5(v0, v1, v2, v3, v4); \
+#define Trice8m_5(tid, v0, v1, v2, v3, v4) \
+ TRICE_ENTER \
+ uint16_t ts_Trice8m_5 = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
+ TRICE_PUT(5l << 24 | ((TRICE_CYCLE) << 16) | ts_Trice8m_5); \
+ TRICE_PUT8_5(v0, v1, v2, v3, v4); \
TRICE_LEAVE
-#define Trice8m_6(tid, v0, v1, v2, v3, v4, v5) \
- TRICE_ENTER \
- uint16_t ts_Trice8m_6 = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(6l << 24 | ((TRICE_CYCLE) << 16) | ts_Trice8m_6); \
- TRICE_PUT8_6(v0, v1, v2, v3, v4, v5); \
+#define Trice8m_6(tid, v0, v1, v2, v3, v4, v5) \
+ TRICE_ENTER \
+ uint16_t ts_Trice8m_6 = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
+ TRICE_PUT(6l << 24 | ((TRICE_CYCLE) << 16) | ts_Trice8m_6); \
+ TRICE_PUT8_6(v0, v1, v2, v3, v4, v5); \
TRICE_LEAVE
-#define Trice8m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
- TRICE_ENTER \
- uint16_t ts_Trice8m_7 = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(7l << 24 | ((TRICE_CYCLE) << 16) | ts_Trice8m_7); \
- TRICE_PUT8_7(v0, v1, v2, v3, v4, v5, v6); \
+#define Trice8m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
+ TRICE_ENTER \
+ uint16_t ts_Trice8m_7 = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
+ TRICE_PUT(7l << 24 | ((TRICE_CYCLE) << 16) | ts_Trice8m_7); \
+ TRICE_PUT8_7(v0, v1, v2, v3, v4, v5, v6); \
TRICE_LEAVE
-#define Trice8m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
- TRICE_ENTER \
- uint16_t ts_Trice8m_8 = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(8l << 24 | ((TRICE_CYCLE) << 16) | ts_Trice8m_8); \
- TRICE_PUT8_8(v0, v1, v2, v3, v4, v5, v6, v7); \
+#define Trice8m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
+ TRICE_ENTER \
+ uint16_t ts_Trice8m_8 = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
+ TRICE_PUT(8l << 24 | ((TRICE_CYCLE) << 16) | ts_Trice8m_8); \
+ TRICE_PUT8_8(v0, v1, v2, v3, v4, v5, v6, v7); \
TRICE_LEAVE
-#define Trice8m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
- TRICE_ENTER \
- uint16_t ts_Trice8m_9 = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(9l << 24 | ((TRICE_CYCLE) << 16) | ts_Trice8m_9); \
- TRICE_PUT8_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
+#define Trice8m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
+ TRICE_ENTER \
+ uint16_t ts_Trice8m_9 = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
+ TRICE_PUT(9l << 24 | ((TRICE_CYCLE) << 16) | ts_Trice8m_9); \
+ TRICE_PUT8_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
TRICE_LEAVE
-#define Trice8m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
- TRICE_ENTER \
- uint16_t ts_Trice8m_10 = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(10l << 24 | ((TRICE_CYCLE) << 16) | ts_Trice8m_10); \
- TRICE_PUT8_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
+#define Trice8m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
+ TRICE_ENTER \
+ uint16_t ts_Trice8m_10 = TriceStamp16; \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
+ TRICE_PUT(10l << 24 | ((TRICE_CYCLE) << 16) | ts_Trice8m_10); \
+ TRICE_PUT8_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
TRICE_LEAVE
#define Trice8m_11(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
TRICE_ENTER \
uint16_t ts_Trice8m_11 = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(11l << 24 | ((TRICE_CYCLE) << 16) | ts_Trice8m_11); \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
+ TRICE_PUT(11l << 24 | ((TRICE_CYCLE) << 16) | ts_Trice8m_11); \
TRICE_PUT8_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
TRICE_LEAVE
#define Trice8m_12(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_ENTER \
uint16_t ts_Trice8m_12 = TriceStamp16; \
- TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
- TRICE_PUT(12l << 24 | ((TRICE_CYCLE) << 16) | ts_Trice8m_12); \
+ TRICE_PUT(0x80008000 | (((uint_fast32_t)(tid)) << 16) | (tid)); \
+ TRICE_PUT(12l << 24 | ((TRICE_CYCLE) << 16) | ts_Trice8m_12); \
TRICE_PUT8_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_LEAVE
-#define TRice8m_0(tid) \
- TRICE_ENTER \
- uint32_t ts_TRice8m_0 = TriceStamp32; \
- TRICE_PUT((ts_TRice8m_0 << 16) | 0xc000 | (tid)); \
+#define TRice8m_0(tid) \
+ TRICE_ENTER \
+ uint32_t ts_TRice8m_0 = TriceStamp32; \
+ TRICE_PUT((ts_TRice8m_0 << 16) | 0xc000 | (tid)); \
TRICE_PUT(0l << 24 | ((TRICE_CYCLE) << 16) | (ts_TRice8m_0 >> 16)); \
TRICE_LEAVE
-#define TRice8m_1(tid, v0) \
- TRICE_ENTER \
- uint32_t ts_TRice8m_1 = TriceStamp32; \
- TRICE_PUT((ts_TRice8m_1 << 16) | 0xc000 | (tid)); \
+#define TRice8m_1(tid, v0) \
+ TRICE_ENTER \
+ uint32_t ts_TRice8m_1 = TriceStamp32; \
+ TRICE_PUT((ts_TRice8m_1 << 16) | 0xc000 | (tid)); \
TRICE_PUT(1l << 24 | ((TRICE_CYCLE) << 16) | (ts_TRice8m_1 >> 16)); \
- TRICE_PUT8_1(v0) \
+ TRICE_PUT8_1(v0) \
TRICE_LEAVE
-#define TRice8m_2(tid, v0, v1) \
- TRICE_ENTER \
- uint32_t ts_TRice8m_2 = TriceStamp32; \
- TRICE_PUT((ts_TRice8m_2 << 16) | 0xc000 | (tid)); \
+#define TRice8m_2(tid, v0, v1) \
+ TRICE_ENTER \
+ uint32_t ts_TRice8m_2 = TriceStamp32; \
+ TRICE_PUT((ts_TRice8m_2 << 16) | 0xc000 | (tid)); \
TRICE_PUT(2l << 24 | ((TRICE_CYCLE) << 16) | (ts_TRice8m_2 >> 16)); \
- TRICE_PUT8_2(v0, v1); \
+ TRICE_PUT8_2(v0, v1); \
TRICE_LEAVE
-#define TRice8m_3(tid, v0, v1, v2) \
- TRICE_ENTER \
- uint32_t ts_TRice8m_3 = TriceStamp32; \
- TRICE_PUT((ts_TRice8m_3 << 16) | 0xc000 | (tid)); \
+#define TRice8m_3(tid, v0, v1, v2) \
+ TRICE_ENTER \
+ uint32_t ts_TRice8m_3 = TriceStamp32; \
+ TRICE_PUT((ts_TRice8m_3 << 16) | 0xc000 | (tid)); \
TRICE_PUT(3l << 24 | ((TRICE_CYCLE) << 16) | (ts_TRice8m_3 >> 16)); \
- TRICE_PUT8_3(v0, v1, v2); \
+ TRICE_PUT8_3(v0, v1, v2); \
TRICE_LEAVE
-#define TRice8m_4(tid, v0, v1, v2, v3) \
- TRICE_ENTER \
- uint32_t ts_TRice8m_4 = TriceStamp32; \
- TRICE_PUT((ts_TRice8m_4 << 16) | 0xc000 | (tid)); \
+#define TRice8m_4(tid, v0, v1, v2, v3) \
+ TRICE_ENTER \
+ uint32_t ts_TRice8m_4 = TriceStamp32; \
+ TRICE_PUT((ts_TRice8m_4 << 16) | 0xc000 | (tid)); \
TRICE_PUT(4l << 24 | ((TRICE_CYCLE) << 16) | (ts_TRice8m_4 >> 16)); \
- TRICE_PUT8_4(v0, v1, v2, v3); \
+ TRICE_PUT8_4(v0, v1, v2, v3); \
TRICE_LEAVE
-#define TRice8m_5(tid, v0, v1, v2, v3, v4) \
- TRICE_ENTER \
- uint32_t ts_TRice8m_5 = TriceStamp32; \
- TRICE_PUT((ts_TRice8m_5 << 16) | 0xc000 | (tid)); \
+#define TRice8m_5(tid, v0, v1, v2, v3, v4) \
+ TRICE_ENTER \
+ uint32_t ts_TRice8m_5 = TriceStamp32; \
+ TRICE_PUT((ts_TRice8m_5 << 16) | 0xc000 | (tid)); \
TRICE_PUT(5l << 24 | ((TRICE_CYCLE) << 16) | (ts_TRice8m_5 >> 16)); \
- TRICE_PUT8_5(v0, v1, v2, v3, v4); \
+ TRICE_PUT8_5(v0, v1, v2, v3, v4); \
TRICE_LEAVE
-#define TRice8m_6(tid, v0, v1, v2, v3, v4, v5) \
- TRICE_ENTER \
- uint32_t ts_TRice8m_6 = TriceStamp32; \
- TRICE_PUT((ts_TRice8m_6 << 16) | 0xc000 | (tid)); \
+#define TRice8m_6(tid, v0, v1, v2, v3, v4, v5) \
+ TRICE_ENTER \
+ uint32_t ts_TRice8m_6 = TriceStamp32; \
+ TRICE_PUT((ts_TRice8m_6 << 16) | 0xc000 | (tid)); \
TRICE_PUT(6l << 24 | ((TRICE_CYCLE) << 16) | (ts_TRice8m_6 >> 16)); \
- TRICE_PUT8_6(v0, v1, v2, v3, v4, v5); \
+ TRICE_PUT8_6(v0, v1, v2, v3, v4, v5); \
TRICE_LEAVE
-#define TRice8m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
- TRICE_ENTER \
- uint32_t ts_TRice8m_7 = TriceStamp32; \
- TRICE_PUT((ts_TRice8m_7 << 16) | 0xc000 | (tid)); \
+#define TRice8m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
+ TRICE_ENTER \
+ uint32_t ts_TRice8m_7 = TriceStamp32; \
+ TRICE_PUT((ts_TRice8m_7 << 16) | 0xc000 | (tid)); \
TRICE_PUT(7l << 24 | ((TRICE_CYCLE) << 16) | (ts_TRice8m_7 >> 16)); \
- TRICE_PUT8_7(v0, v1, v2, v3, v4, v5, v6); \
+ TRICE_PUT8_7(v0, v1, v2, v3, v4, v5, v6); \
TRICE_LEAVE
-#define TRice8m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
- TRICE_ENTER \
- uint32_t ts_TRice8m_8 = TriceStamp32; \
- TRICE_PUT((ts_TRice8m_8 << 16) | 0xc000 | (tid)); \
+#define TRice8m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
+ TRICE_ENTER \
+ uint32_t ts_TRice8m_8 = TriceStamp32; \
+ TRICE_PUT((ts_TRice8m_8 << 16) | 0xc000 | (tid)); \
TRICE_PUT(8l << 24 | ((TRICE_CYCLE) << 16) | (ts_TRice8m_8 >> 16)); \
- TRICE_PUT8_8(v0, v1, v2, v3, v4, v5, v6, v7); \
+ TRICE_PUT8_8(v0, v1, v2, v3, v4, v5, v6, v7); \
TRICE_LEAVE
-#define TRice8m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
- TRICE_ENTER \
- uint32_t ts_TRice8m_9 = TriceStamp32; \
- TRICE_PUT((ts_TRice8m_9 << 16) | 0xc000 | (tid)); \
+#define TRice8m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
+ TRICE_ENTER \
+ uint32_t ts_TRice8m_9 = TriceStamp32; \
+ TRICE_PUT((ts_TRice8m_9 << 16) | 0xc000 | (tid)); \
TRICE_PUT(9l << 24 | ((TRICE_CYCLE) << 16) | (ts_TRice8m_9 >> 16)); \
- TRICE_PUT8_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
+ TRICE_PUT8_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
TRICE_LEAVE
-#define TRice8m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
- TRICE_ENTER \
- uint32_t ts_TRice8m_10 = TriceStamp32; \
- TRICE_PUT((ts_TRice8m_10 << 16) | 0xc000 | (tid)); \
+#define TRice8m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
+ TRICE_ENTER \
+ uint32_t ts_TRice8m_10 = TriceStamp32; \
+ TRICE_PUT((ts_TRice8m_10 << 16) | 0xc000 | (tid)); \
TRICE_PUT(10l << 24 | ((TRICE_CYCLE) << 16) | (ts_TRice8m_10 >> 16)); \
- TRICE_PUT8_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
+ TRICE_PUT8_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
TRICE_LEAVE
-#define TRice8m_11(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
- TRICE_ENTER \
- uint32_t ts_TRice8m_11 = TriceStamp32; \
- TRICE_PUT((ts_TRice8m_11 << 16) | 0xc000 | (tid)); \
+#define TRice8m_11(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
+ TRICE_ENTER \
+ uint32_t ts_TRice8m_11 = TriceStamp32; \
+ TRICE_PUT((ts_TRice8m_11 << 16) | 0xc000 | (tid)); \
TRICE_PUT(11l << 24 | ((TRICE_CYCLE) << 16) | (ts_TRice8m_11 >> 16)); \
- TRICE_PUT8_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
+ TRICE_PUT8_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
TRICE_LEAVE
#define TRice8m_12(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_ENTER \
uint32_t ts_TRice8m_12 = TriceStamp32; \
TRICE_PUT((ts_TRice8m_12 << 16) | 0xc000 | (tid)); \
- TRICE_PUT(12l << 24 | ((TRICE_CYCLE) << 16) | (ts_TRice8m_12 >> 16)); \
+ TRICE_PUT(12l << 24 | ((TRICE_CYCLE) << 16) | (ts_TRice8m_12 >> 16)); \
TRICE_PUT8_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_LEAVE
diff --git a/src/trice8McuReverse.h b/src/trice8McuReverse.h
index 81e221994..378f53f45 100644
--- a/src/trice8McuReverse.h
+++ b/src/trice8McuReverse.h
@@ -5,7 +5,6 @@
//! \file trice8McuReverse.h
//! \brief trice 8 Mcu Reverse declarations and macros.
-
#ifndef TRICE8_MCU_REVERSE_H_
#define TRICE8_MCU_REVERSE_H_
@@ -14,282 +13,282 @@
TRICE_PUT(((TRICE_CYCLE) << 24) | idLH); \
TRICE_LEAVE
-#define trice8m_1(tid, v0) \
- TRICE_ENTER \
+#define trice8m_1(tid, v0) \
+ TRICE_ENTER \
TRICE_PUT(((TRICE_CYCLE) << 24) | (1l << 16) | idLH); \
- TRICE_PUT8_1(v0) \
+ TRICE_PUT8_1(v0) \
TRICE_LEAVE
-#define trice8m_2(tid, v0, v1) \
- TRICE_ENTER \
+#define trice8m_2(tid, v0, v1) \
+ TRICE_ENTER \
TRICE_PUT(((TRICE_CYCLE) << 24) | (2l << 16) | idLH); \
- TRICE_PUT8_2(v0, v1); \
+ TRICE_PUT8_2(v0, v1); \
TRICE_LEAVE
-#define trice8m_3(tid, v0, v1, v2) \
- TRICE_ENTER \
+#define trice8m_3(tid, v0, v1, v2) \
+ TRICE_ENTER \
TRICE_PUT(((TRICE_CYCLE) << 24) | (3l << 16) | idLH); \
- TRICE_PUT8_3(v0, v1, v2); \
+ TRICE_PUT8_3(v0, v1, v2); \
TRICE_LEAVE
-#define trice8m_4(tid, v0, v1, v2, v3) \
- TRICE_ENTER \
+#define trice8m_4(tid, v0, v1, v2, v3) \
+ TRICE_ENTER \
TRICE_PUT(((TRICE_CYCLE) << 24) | (4l << 16) | idLH); \
- TRICE_PUT8_4(v0, v1, v2, v3); \
+ TRICE_PUT8_4(v0, v1, v2, v3); \
TRICE_LEAVE
-#define trice8m_5(tid, v0, v1, v2, v3, v4) \
- TRICE_ENTER \
+#define trice8m_5(tid, v0, v1, v2, v3, v4) \
+ TRICE_ENTER \
TRICE_PUT(((TRICE_CYCLE) << 24) | (5l << 16) | idLH); \
- TRICE_PUT8_5(v0, v1, v2, v3, v4); \
+ TRICE_PUT8_5(v0, v1, v2, v3, v4); \
TRICE_LEAVE
-#define trice8m_6(tid, v0, v1, v2, v3, v4, v5) \
- TRICE_ENTER \
+#define trice8m_6(tid, v0, v1, v2, v3, v4, v5) \
+ TRICE_ENTER \
TRICE_PUT(((TRICE_CYCLE) << 24) | (6l << 16) | idLH); \
- TRICE_PUT8_6(v0, v1, v2, v3, v4, v5); \
+ TRICE_PUT8_6(v0, v1, v2, v3, v4, v5); \
TRICE_LEAVE
-#define trice8m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
- TRICE_ENTER \
+#define trice8m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
+ TRICE_ENTER \
TRICE_PUT(((TRICE_CYCLE) << 24) | (7l << 16) | idLH); \
- TRICE_PUT8_7(v0, v1, v2, v3, v4, v5, v6); \
+ TRICE_PUT8_7(v0, v1, v2, v3, v4, v5, v6); \
TRICE_LEAVE
-#define trice8m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
- TRICE_ENTER \
+#define trice8m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
+ TRICE_ENTER \
TRICE_PUT(((TRICE_CYCLE) << 24) | (8l << 16) | idLH); \
- TRICE_PUT8_8(v0, v1, v2, v3, v4, v5, v6, v7); \
+ TRICE_PUT8_8(v0, v1, v2, v3, v4, v5, v6, v7); \
TRICE_LEAVE
#define trice8m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
TRICE_ENTER \
- TRICE_PUT(((TRICE_CYCLE) << 24) | (9l << 16) | idLH); \
+ TRICE_PUT(((TRICE_CYCLE) << 24) | (9l << 16) | idLH); \
TRICE_PUT8_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
TRICE_LEAVE
#define trice8m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
TRICE_ENTER \
- TRICE_PUT(((TRICE_CYCLE) << 24) | (10l << 16) | idLH); \
+ TRICE_PUT(((TRICE_CYCLE) << 24) | (10l << 16) | idLH); \
TRICE_PUT8_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
TRICE_LEAVE
#define trice8m_11(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
TRICE_ENTER \
- TRICE_PUT(((TRICE_CYCLE) << 24) | (11l << 16) | idLH); \
+ TRICE_PUT(((TRICE_CYCLE) << 24) | (11l << 16) | idLH); \
TRICE_PUT8_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
TRICE_LEAVE
#define trice8m_12(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_ENTER \
- TRICE_PUT(((TRICE_CYCLE) << 24) | (12l << 16) | idLH); \
+ TRICE_PUT(((TRICE_CYCLE) << 24) | (12l << 16) | idLH); \
TRICE_PUT8_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_LEAVE
-#define Trice8m_0(tid) \
- TRICE_ENTER \
- uint16_t ts_Trice8m_0 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice8m_0(tid) \
+ TRICE_ENTER \
+ uint16_t ts_Trice8m_0 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | TRICE16_LO_BYTE(ts_Trice8m_0) | TRICE16_HI_BYTE(ts_Trice8m_0)); \
TRICE_LEAVE
-#define Trice8m_1(tid, v0) \
- TRICE_ENTER \
- uint16_t ts_Trice8m_1 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice8m_1(tid, v0) \
+ TRICE_ENTER \
+ uint16_t ts_Trice8m_1 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (1l << 16) | TRICE16_LO_BYTE(ts_Trice8m_1) | TRICE16_HI_BYTE(ts_Trice8m_1)); \
- TRICE_PUT8_1(v0) \
+ TRICE_PUT8_1(v0) \
TRICE_LEAVE
-#define Trice8m_2(tid, v0, v1) \
- TRICE_ENTER \
- uint16_t ts_Trice8m_2 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice8m_2(tid, v0, v1) \
+ TRICE_ENTER \
+ uint16_t ts_Trice8m_2 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (2l << 16) | TRICE16_LO_BYTE(ts_Trice8m_2) | TRICE16_HI_BYTE(ts_Trice8m_2)); \
- TRICE_PUT8_2(v0, v1); \
+ TRICE_PUT8_2(v0, v1); \
TRICE_LEAVE
-#define Trice8m_3(tid, v0, v1, v2) \
- TRICE_ENTER \
- uint16_t ts_Trice8m_3 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice8m_3(tid, v0, v1, v2) \
+ TRICE_ENTER \
+ uint16_t ts_Trice8m_3 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (3l << 16) | TRICE16_LO_BYTE(ts_Trice8m_3) | TRICE16_HI_BYTE(ts_Trice8m_3)); \
- TRICE_PUT8_3(v0, v1, v2); \
+ TRICE_PUT8_3(v0, v1, v2); \
TRICE_LEAVE
-#define Trice8m_4(tid, v0, v1, v2, v3) \
- TRICE_ENTER \
- uint16_t ts_Trice8m_4 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice8m_4(tid, v0, v1, v2, v3) \
+ TRICE_ENTER \
+ uint16_t ts_Trice8m_4 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (4l << 16) | TRICE16_LO_BYTE(ts_Trice8m_4) | TRICE16_HI_BYTE(ts_Trice8m_4)); \
- TRICE_PUT8_4(v0, v1, v2, v3); \
+ TRICE_PUT8_4(v0, v1, v2, v3); \
TRICE_LEAVE
-#define Trice8m_5(tid, v0, v1, v2, v3, v4) \
- TRICE_ENTER \
- uint16_t ts_Trice8m_5 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice8m_5(tid, v0, v1, v2, v3, v4) \
+ TRICE_ENTER \
+ uint16_t ts_Trice8m_5 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (5l << 16) | TRICE16_LO_BYTE(ts_Trice8m_5) | TRICE16_HI_BYTE(ts_Trice8m_5)); \
- TRICE_PUT8_5(v0, v1, v2, v3, v4); \
+ TRICE_PUT8_5(v0, v1, v2, v3, v4); \
TRICE_LEAVE
-#define Trice8m_6(tid, v0, v1, v2, v3, v4, v5) \
- TRICE_ENTER \
- uint16_t ts_Trice8m_6 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice8m_6(tid, v0, v1, v2, v3, v4, v5) \
+ TRICE_ENTER \
+ uint16_t ts_Trice8m_6 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (6l << 16) | TRICE16_LO_BYTE(ts_Trice8m_6) | TRICE16_HI_BYTE(ts_Trice8m_6)); \
- TRICE_PUT8_6(v0, v1, v2, v3, v4, v5); \
+ TRICE_PUT8_6(v0, v1, v2, v3, v4, v5); \
TRICE_LEAVE
-#define Trice8m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
- TRICE_ENTER \
- uint16_t ts_Trice8m_7 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice8m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
+ TRICE_ENTER \
+ uint16_t ts_Trice8m_7 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (7l << 16) | TRICE16_LO_BYTE(ts_Trice8m_7) | TRICE16_HI_BYTE(ts_Trice8m_7)); \
- TRICE_PUT8_7(v0, v1, v2, v3, v4, v5, v6); \
+ TRICE_PUT8_7(v0, v1, v2, v3, v4, v5, v6); \
TRICE_LEAVE
-#define Trice8m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
- TRICE_ENTER \
- uint16_t ts_Trice8m_8 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice8m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
+ TRICE_ENTER \
+ uint16_t ts_Trice8m_8 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (8l << 16) | TRICE16_LO_BYTE(ts_Trice8m_8) | TRICE16_HI_BYTE(ts_Trice8m_8)); \
- TRICE_PUT8_8(v0, v1, v2, v3, v4, v5, v6, v7); \
+ TRICE_PUT8_8(v0, v1, v2, v3, v4, v5, v6, v7); \
TRICE_LEAVE
-#define Trice8m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
- TRICE_ENTER \
- uint16_t ts_Trice8m_9 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice8m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
+ TRICE_ENTER \
+ uint16_t ts_Trice8m_9 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (9l << 16) | TRICE16_LO_BYTE(ts_Trice8m_9) | TRICE16_HI_BYTE(ts_Trice8m_9)); \
- TRICE_PUT8_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
+ TRICE_PUT8_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
TRICE_LEAVE
-#define Trice8m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
- TRICE_ENTER \
- uint16_t ts_Trice8m_10 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice8m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
+ TRICE_ENTER \
+ uint16_t ts_Trice8m_10 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (10l << 16) | TRICE16_LO_BYTE(ts_Trice8m_10) | TRICE16_HI_BYTE(ts_Trice8m_10)); \
- TRICE_PUT8_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
+ TRICE_PUT8_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
TRICE_LEAVE
-#define Trice8m_11(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
- TRICE_ENTER \
- uint16_t ts_Trice8m_11 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice8m_11(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
+ TRICE_ENTER \
+ uint16_t ts_Trice8m_11 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (11l << 16) | TRICE16_LO_BYTE(ts_Trice8m_11) | TRICE16_HI_BYTE(ts_Trice8m_11)); \
- TRICE_PUT8_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
+ TRICE_PUT8_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
TRICE_LEAVE
-#define Trice8m_12(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
- TRICE_ENTER \
- uint16_t ts_Trice8m_12 = TriceStamp16; \
- TRICE_PUT(((IdLH) << 16) | IdLH) \
+#define Trice8m_12(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
+ TRICE_ENTER \
+ uint16_t ts_Trice8m_12 = TriceStamp16; \
+ TRICE_PUT(((IdLH) << 16) | IdLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (12l << 16) | TRICE16_LO_BYTE(ts_Trice8m_12) | TRICE16_HI_BYTE(ts_Trice8m_12)); \
- TRICE_PUT8_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
+ TRICE_PUT8_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_LEAVE
-#define TRice8m_0(tid) \
- TRICE_ENTER \
- uint32_t ts_TRice8m_0 = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice8m_0) | TRICE32_HH_BYTE(ts_TRice8m_0) | IDLH) \
+#define TRice8m_0(tid) \
+ TRICE_ENTER \
+ uint32_t ts_TRice8m_0 = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice8m_0) | TRICE32_HH_BYTE(ts_TRice8m_0) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | TRICE32_LL_BYTE(ts_TRice8m_0) | TRICE32_LH_BYTE(ts_TRice8m_0)) \
TRICE_LEAVE
-#define TRice8m_1(tid, v0) \
- TRICE_ENTER \
- uint32_t ts_TRice8m_1 = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice8m_1) | TRICE32_HH_BYTE(ts_TRice8m_1) | IDLH) \
+#define TRice8m_1(tid, v0) \
+ TRICE_ENTER \
+ uint32_t ts_TRice8m_1 = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice8m_1) | TRICE32_HH_BYTE(ts_TRice8m_1) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (1l << 16) | TRICE32_LL_BYTE(ts_TRice8m_1) | TRICE32_LH_BYTE(ts_TRice8m_1)) \
- TRICE_PUT8_1(v0) \
+ TRICE_PUT8_1(v0) \
TRICE_LEAVE
-#define TRice8m_2(tid, v0, v1) \
- TRICE_ENTER \
- uint32_t ts_TRice8m_2 = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice8m_2) | TRICE32_HH_BYTE(ts_TRice8m_2) | IDLH) \
+#define TRice8m_2(tid, v0, v1) \
+ TRICE_ENTER \
+ uint32_t ts_TRice8m_2 = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice8m_2) | TRICE32_HH_BYTE(ts_TRice8m_2) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (2l << 16) | TRICE32_LL_BYTE(ts_TRice8m_2) | TRICE32_LH_BYTE(ts_TRice8m_2)) \
- TRICE_PUT8_2(v0, v1); \
+ TRICE_PUT8_2(v0, v1); \
TRICE_LEAVE
-#define TRice8m_3(tid, v0, v1, v2) \
- TRICE_ENTER \
- uint32_t ts_TRice8m_3 = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice8m_3) | TRICE32_HH_BYTE(ts_TRice8m_3) | IDLH) \
+#define TRice8m_3(tid, v0, v1, v2) \
+ TRICE_ENTER \
+ uint32_t ts_TRice8m_3 = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice8m_3) | TRICE32_HH_BYTE(ts_TRice8m_3) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (3l << 16) | TRICE32_LL_BYTE(ts_TRice8m_3) | TRICE32_LH_BYTE(ts_TRice8m_3)) \
- TRICE_PUT8_3(v0, v1, v2); \
+ TRICE_PUT8_3(v0, v1, v2); \
TRICE_LEAVE
-#define TRice8m_4(tid, v0, v1, v2, v3) \
- TRICE_ENTER \
- uint32_t ts_TRice8m_4 = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice8m_4) | TRICE32_HH_BYTE(ts_TRice8m_4) | IDLH) \
+#define TRice8m_4(tid, v0, v1, v2, v3) \
+ TRICE_ENTER \
+ uint32_t ts_TRice8m_4 = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice8m_4) | TRICE32_HH_BYTE(ts_TRice8m_4) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (4l << 16) | TRICE32_LL_BYTE(ts_TRice8m_4) | TRICE32_LH_BYTE(ts_TRice8m_4)) \
- TRICE_PUT8_4(v0, v1, v2, v3); \
+ TRICE_PUT8_4(v0, v1, v2, v3); \
TRICE_LEAVE
-#define TRice8m_5(tid, v0, v1, v2, v3, v4) \
- TRICE_ENTER \
- uint32_t ts_TRice8m_5 = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice8m_5) | TRICE32_HH_BYTE(ts_TRice8m_5) | IDLH) \
+#define TRice8m_5(tid, v0, v1, v2, v3, v4) \
+ TRICE_ENTER \
+ uint32_t ts_TRice8m_5 = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice8m_5) | TRICE32_HH_BYTE(ts_TRice8m_5) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (5l << 16) | TRICE32_LL_BYTE(ts_TRice8m_5) | TRICE32_LH_BYTE(ts_TRice8m_5)) \
- TRICE_PUT8_5(v0, v1, v2, v3, v4); \
+ TRICE_PUT8_5(v0, v1, v2, v3, v4); \
TRICE_LEAVE
-#define TRice8m_6(tid, v0, v1, v2, v3, v4, v5) \
- TRICE_ENTER \
- uint32_t ts_TRice8m_6 = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice8m_6) | TRICE32_HH_BYTE(ts_TRice8m_6) | IDLH) \
+#define TRice8m_6(tid, v0, v1, v2, v3, v4, v5) \
+ TRICE_ENTER \
+ uint32_t ts_TRice8m_6 = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice8m_6) | TRICE32_HH_BYTE(ts_TRice8m_6) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (6l << 16) | TRICE32_LL_BYTE(ts_TRice8m_6) | TRICE32_LH_BYTE(ts_TRice8m_6)) \
- TRICE_PUT8_6(v0, v1, v2, v3, v4, v5); \
+ TRICE_PUT8_6(v0, v1, v2, v3, v4, v5); \
TRICE_LEAVE
-#define TRice8m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
- TRICE_ENTER \
- uint32_t ts_TRice8m_7 = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice8m_7) | TRICE32_HH_BYTE(ts_TRice8m_7) | IDLH) \
+#define TRice8m_7(tid, v0, v1, v2, v3, v4, v5, v6) \
+ TRICE_ENTER \
+ uint32_t ts_TRice8m_7 = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice8m_7) | TRICE32_HH_BYTE(ts_TRice8m_7) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (7l << 16) | TRICE32_LL_BYTE(ts_TRice8m_7) | TRICE32_LH_BYTE(ts_TRice8m_7)) \
- TRICE_PUT8_7(v0, v1, v2, v3, v4, v5, v6); \
+ TRICE_PUT8_7(v0, v1, v2, v3, v4, v5, v6); \
TRICE_LEAVE
-#define TRice8m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
- TRICE_ENTER \
- uint32_t ts_TRice8m_8 = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice8m_8) | TRICE32_HH_BYTE(ts_TRice8m_8) | IDLH) \
+#define TRice8m_8(tid, v0, v1, v2, v3, v4, v5, v6, v7) \
+ TRICE_ENTER \
+ uint32_t ts_TRice8m_8 = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice8m_8) | TRICE32_HH_BYTE(ts_TRice8m_8) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (8l << 16) | TRICE32_LL_BYTE(ts_TRice8m_8) | TRICE32_LH_BYTE(ts_TRice8m_8)) \
- TRICE_PUT8_8(v0, v1, v2, v3, v4, v5, v6, v7); \
+ TRICE_PUT8_8(v0, v1, v2, v3, v4, v5, v6, v7); \
TRICE_LEAVE
-#define TRice8m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
- TRICE_ENTER \
- uint32_t ts_TRice8m_9 = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice8m_9) | TRICE32_HH_BYTE(ts_TRice8m_9) | IDLH) \
+#define TRice8m_9(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8) \
+ TRICE_ENTER \
+ uint32_t ts_TRice8m_9 = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice8m_9) | TRICE32_HH_BYTE(ts_TRice8m_9) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (9l << 16) | TRICE32_LL_BYTE(ts_TRice8m_9) | TRICE32_LH_BYTE(ts_TRice8m_9)) \
- TRICE_PUT8_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
+ TRICE_PUT8_9(v0, v1, v2, v3, v4, v5, v6, v7, v8); \
TRICE_LEAVE
-#define TRice8m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
- TRICE_ENTER \
- uint32_t ts_TRice8m_10 = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice8m_10) | TRICE32_HH_BYTE(ts_TRice8m_10) | IDLH) \
+#define TRice8m_10(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
+ TRICE_ENTER \
+ uint32_t ts_TRice8m_10 = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice8m_10) | TRICE32_HH_BYTE(ts_TRice8m_10) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (10l << 16) | TRICE32_LL_BYTE(ts_TRice8m_10) | TRICE32_LH_BYTE(ts_TRice8m_10)) \
- TRICE_PUT8_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
+ TRICE_PUT8_10(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); \
TRICE_LEAVE
-#define TRice8m_11(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
- TRICE_ENTER \
- uint32_t ts_TRice8m_11 = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice8m_11) | TRICE32_HH_BYTE(ts_TRice8m_11) | IDLH) \
+#define TRice8m_11(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
+ TRICE_ENTER \
+ uint32_t ts_TRice8m_11 = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice8m_11) | TRICE32_HH_BYTE(ts_TRice8m_11) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (11l << 16) | TRICE32_LL_BYTE(ts_TRice8m_11) | TRICE32_LH_BYTE(ts_TRice8m_11)) \
- TRICE_PUT8_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
+ TRICE_PUT8_11(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); \
TRICE_LEAVE
-#define TRice8m_12(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
- TRICE_ENTER \
- uint32_t ts_TRice8m_12 = TriceStamp32; \
- TRICE_PUT(TRICE32_HL_BYTE(ts_TRice8m_12) | TRICE32_HH_BYTE(ts_TRice8m_12) | IDLH) \
+#define TRice8m_12(tid, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
+ TRICE_ENTER \
+ uint32_t ts_TRice8m_12 = TriceStamp32; \
+ TRICE_PUT(TRICE32_HL_BYTE(ts_TRice8m_12) | TRICE32_HH_BYTE(ts_TRice8m_12) | IDLH) \
TRICE_PUT(((TRICE_CYCLE) << 24) | (12l << 16) | TRICE32_LL_BYTE(ts_TRice8m_12) | TRICE32_LH_BYTE(ts_TRice8m_12)) \
- TRICE_PUT8_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
+ TRICE_PUT8_12(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
TRICE_LEAVE
#endif // #ifndef TRICE8_MCU_REVERSE_H_
diff --git a/src/triceAuxiliary.c b/src/triceAuxiliary.c
index a7fb6debf..c844d1b06 100644
--- a/src/triceAuxiliary.c
+++ b/src/triceAuxiliary.c
@@ -5,7 +5,6 @@
//! \file triceAuxiliary.c
//! \brief trice Auxiliary implementation.
-
#include "trice.h"
#include
#include
diff --git a/src/triceBind.h b/src/triceBind.h
new file mode 100644
index 000000000..130bc946f
--- /dev/null
+++ b/src/triceBind.h
@@ -0,0 +1,1588 @@
+// SPDX-License-Identifier: MIT
+
+// TRICE_INSERT_OFF - Trice parser exclusion marker
+
+//! \file triceBind.h
+//! \brief Expansion-time dispatch between inserted and sidecar-bound Trice sites.
+
+#ifndef TRICE_BIND_H_
+#define TRICE_BIND_H_
+
+// Generated sidecars use this sentinel to distinguish active target dispatch
+// from TRICE_CLEAN/TRICE_OFF builds where public logging macros expand away.
+#define TRICE_BIND_TARGET_ACTIVE 1
+
+// An unresolved file-key token selects the legacy inserted source path.
+#define TRICE_BIND_ROUTE_TRICE_BIND_FILE_KEY INSERT
+#define TRICE_BIND_ROUTE_I(key) TRICE_BIND_ROUTE_##key
+#define TRICE_BIND_ROUTE(key) TRICE_BIND_ROUTE_I(key)
+
+// A bound site is addressed by the currently active file key and physical source line.
+#define TRICE_BIND_SITE_I(key, line) TRICE_BIND_SITE_##key##_L##line
+#define TRICE_BIND_SITE(key, line) TRICE_BIND_SITE_I(key, line)
+#define TRICE_BIND_SITE_HERE() TRICE_BIND_SITE(TRICE_BIND_FILE_KEY, __LINE__)
+
+// Counter-selected scopes use generated constant branch maps. The captured
+// counter value is only a local ordinal selector and is never a Trice ID.
+#define TRICE_BIND_REBASE_CAT_I(left, right) left##right
+#define TRICE_BIND_REBASE_CAT(left, right) TRICE_BIND_REBASE_CAT_I(left, right)
+#define TRICE_BIND_REBASE_BASE_NAME(scope) TRICE_BIND_REBASE_CAT(triceBindRebaseBase_, scope)
+#define TRICE_BIND_REBASE_END_NAME(scope) TRICE_BIND_REBASE_CAT(triceBindRebaseEnd_, scope)
+#define TRICE_BIND_REBASE_COUNT_NAME(scope) TRICE_BIND_REBASE_CAT(TRICE_BIND_REBASE_COUNT_, scope)
+#define TRICE_BIND_REBASE_ASSERT_NAME(scope) TRICE_BIND_REBASE_CAT(triceBindRebaseCounterCount_, scope)
+#define TRICE_BIND_REBASE_STATIC_ASSERT(condition, name) enum { name = 1 / ((condition) ? 1 : 0) }
+#define TRICE_BIND_REBASE_LOCAL_INDEX(counter) ((counter) - TRICE_BIND_REBASE_ACTIVE_BASE - 1)
+#define TRICE_BIND_REBASE_AUTO_CAPTURE(constructor, implementation, counter, ...) \
+ TRICE_BIND_REBASE_AUTO_APPLY(constructor, implementation, counter, __VA_ARGS__)
+#define TRICE_BIND_REBASE_AUTO_APPLY(constructor, implementation, counter, ...) \
+ do { \
+ TRICE_BIND_REBASE_STATIC_ASSERT( \
+ TRICE_BIND_REBASE_LOCAL_INDEX(counter) >= 0 && \
+ TRICE_BIND_REBASE_LOCAL_INDEX(counter) < TRICE_BIND_REBASE_ACTIVE_COUNT, \
+ triceBindRebaseOrdinalOutOfRange); \
+ TRICE_BIND_REBASE_ACTIVE_AUTO_APPLY( \
+ constructor, implementation, TRICE_BIND_REBASE_LOCAL_INDEX(counter), __VA_ARGS__); \
+ } while (0)
+
+// Descriptor application inserts a missing TID or replaces a source-level zero placeholder.
+#define TRICE_BIND_APPLY(...) TRICE_BIND_APPLY_I(__VA_ARGS__)
+#define TRICE_BIND_APPLY_I(mode, tid, implementation, ...) mode(implementation, tid, __VA_ARGS__)
+#define TRICE_BIND_AUTO(implementation, tid, ...) implementation(tid, __VA_ARGS__)
+#define TRICE_BIND_REPLACE(implementation, tid, ignoredTid, ...) implementation(tid, __VA_ARGS__)
+
+// Route selection is deliberately deferred until each public logging macro is expanded.
+#define TRICE_BIND_DISPATCH_I(route, implementation, ...) TRICE_BIND_ROUTE_##route(implementation, __VA_ARGS__)
+#define TRICE_BIND_DISPATCH(route, implementation, ...) TRICE_BIND_DISPATCH_I(route, implementation, __VA_ARGS__)
+#define TRICE_BIND_ROUTE_INSERT(implementation, ...) implementation(__VA_ARGS__)
+#define TRICE_BIND_ROUTE_BIND(implementation, ...) TRICE_BIND_APPLY(TRICE_BIND_SITE_HERE(), implementation, __VA_ARGS__)
+
+// A generated MVP2 sidecar installs TRICE_BIND_REBASE_PRODUCT_ROUTE as its
+// REBASE hook. Direct token pasting preserves the public implementation name
+// long enough to select its implicit TID constructor.
+#define TRICE_BIND_REBASE_PRODUCT_ROUTE(implementation, ...) \
+ TRICE_BIND_REBASE_PRODUCT_ROUTE_I(TRICE_BIND_REBASE_CONSTRUCTOR_##implementation, implementation, __VA_ARGS__)
+#define TRICE_BIND_REBASE_PRODUCT_ROUTE_I(constructor, implementation, ...) \
+ TRICE_BIND_REBASE_AUTO_CAPTURE(constructor, implementation, __COUNTER__, __VA_ARGS__)
+
+// Constructor-aware dispatch lets application-defined Trice aliases opt in
+// without adding a per-alias constructor mapping to this header.
+#define TRICE_BIND_DISPATCH_AUTO_I(route, constructor, implementation, ...) \
+ TRICE_BIND_ROUTE_##route##_AUTO(constructor, implementation, __VA_ARGS__)
+#define TRICE_BIND_DISPATCH_AUTO(route, constructor, implementation, ...) \
+ TRICE_BIND_DISPATCH_AUTO_I(route, constructor, implementation, __VA_ARGS__)
+#define TRICE_BIND_ROUTE_INSERT_AUTO(constructor, implementation, ...) implementation(__VA_ARGS__)
+#define TRICE_BIND_ROUTE_BIND_AUTO(constructor, implementation, ...) \
+ TRICE_BIND_APPLY(TRICE_BIND_SITE_HERE(), implementation, __VA_ARGS__)
+#define TRICE_BIND_ROUTE_REBASE_AUTO(constructor, implementation, ...) \
+ TRICE_BIND_REBASE_AUTO_CAPTURE(constructor, implementation, __COUNTER__, __VA_ARGS__)
+
+// Built-in public Trice families preserve the legacy dispatch API. This table
+// carries only their implicit TID-constructor metadata; all families share the
+// same rebase implementation above.
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice_0 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice_0 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice_0 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE_0 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice_1 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice_1 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice_1 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE_1 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice_10 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice_10 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice_10 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE_10 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice_11 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice_11 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice_11 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE_11 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice_12 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice_12 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice_12 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE_12 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice_2 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice_2 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice_2 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE_2 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice_3 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice_3 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice_3 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE_3 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice_4 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice_4 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice_4 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE_4 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice_5 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice_5 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice_5 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE_5 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice_6 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice_6 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice_6 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE_6 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice_7 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice_7 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice_7 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE_7 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice_8 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice_8 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice_8 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE_8 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice_9 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice_9 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice_9 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE_9 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRIce_C TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICe_C TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE_C TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE_C_0_0 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE_C_0_16 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE_C_0_32 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE_C_N0 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE_C_N16 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE_C_N32 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE_N TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE_S TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice0 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice0 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice0 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE0 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice16 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice16 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice16 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE16 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice16_0 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice16_0 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice16_0 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE16_0 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice16_1 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice16_1 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice16_1 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE16_1 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice16_10 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice16_10 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice16_10 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE16_10 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice16_11 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice16_11 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice16_11 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE16_11 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice16_12 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice16_12 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice16_12 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE16_12 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice16_2 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice16_2 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice16_2 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE16_2 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice16_3 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice16_3 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice16_3 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE16_3 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice16_4 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice16_4 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice16_4 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE16_4 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice16_5 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice16_5 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice16_5 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE16_5 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice16_6 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice16_6 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice16_6 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE16_6 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice16_7 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice16_7 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice16_7 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE16_7 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice16_8 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice16_8 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice16_8 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE16_8 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice16_9 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice16_9 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice16_9 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE16_9 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE16_B TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRIce16_C TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICe16_C TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE16_C TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE16_F TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice16C iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice16C iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice16C iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice32 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice32 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice32 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE32 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice32_0 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice32_0 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice32_0 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE32_0 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice32_1 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice32_1 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice32_1 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE32_1 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice32_10 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice32_10 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice32_10 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE32_10 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice32_11 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice32_11 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice32_11 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE32_11 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice32_12 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice32_12 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice32_12 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE32_12 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice32_2 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice32_2 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice32_2 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE32_2 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice32_3 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice32_3 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice32_3 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE32_3 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice32_4 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice32_4 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice32_4 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE32_4 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice32_5 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice32_5 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice32_5 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE32_5 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice32_6 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice32_6 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice32_6 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE32_6 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice32_7 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice32_7 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice32_7 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE32_7 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice32_8 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice32_8 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice32_8 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE32_8 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice32_9 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice32_9 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice32_9 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE32_9 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE32_B TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRIce32_C TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICe32_C TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE32_C TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE32_F TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice32C iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice32C iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice32C iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice64 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice64 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice64 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE64 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice64_0 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice64_0 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice64_0 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE64_0 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice64_1 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice64_1 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice64_1 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE64_1 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice64_10 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice64_10 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice64_10 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE64_10 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice64_11 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice64_11 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice64_11 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE64_11 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice64_12 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice64_12 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice64_12 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE64_12 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice64_2 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice64_2 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice64_2 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE64_2 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice64_3 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice64_3 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice64_3 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE64_3 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice64_4 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice64_4 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice64_4 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE64_4 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice64_5 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice64_5 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice64_5 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE64_5 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice64_6 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice64_6 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice64_6 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE64_6 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice64_7 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice64_7 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice64_7 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE64_7 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice64_8 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice64_8 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice64_8 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE64_8 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice64_9 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice64_9 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice64_9 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE64_9 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE64_B TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRIce64_C TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICe64_C TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE64_C TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE64_F TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice64C iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice64C iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice64C iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice8 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice8 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice8 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE8 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice8_0 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice8_0 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice8_0 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE8_0 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice8_1 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice8_1 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice8_1 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE8_1 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice8_10 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice8_10 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice8_10 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE8_10 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice8_11 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice8_11 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice8_11 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE8_11 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice8_12 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice8_12 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice8_12 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE8_12 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice8_2 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice8_2 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice8_2 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE8_2 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice8_3 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice8_3 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice8_3 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE8_3 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice8_4 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice8_4 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice8_4 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE8_4 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice8_5 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice8_5 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice8_5 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE8_5 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice8_6 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice8_6 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice8_6 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE8_6 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice8_7 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice8_7 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice8_7 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE8_7 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice8_8 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice8_8 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice8_8 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE8_8 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice8_9 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice8_9 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice8_9 iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE8_9 TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE8_B TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRIce8_C TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICe8_C TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE8_C TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRICE8_F TRICE_BIND_REBASE_DEFAULT_TID
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice8C iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice8C iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice8C iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_triceAssert iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TriceAssert iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRiceAssert iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_triceAssertFalse iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TriceAssertFalse iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRiceAssertFalse iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_triceAssertOrReturn iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TriceAssertOrReturn iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRiceAssertOrReturn iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_triceAssertOrReturnValue iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TriceAssertOrReturnValue iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRiceAssertOrReturnValue iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_triceAssertTrue iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TriceAssertTrue iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRiceAssertTrue iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_triceC iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TriceC iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRiceC iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_triceS iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TriceS iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRiceS iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice16B iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice16F iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice32B iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice32F iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice64B iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice64F iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice8B iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRice8F iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TRiceN iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice16B iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice16F iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice32B iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice32F iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice64B iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice64F iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice8B iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_Trice8F iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_TriceN iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice16B iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice16F iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice32B iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice32F iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice64B iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice64F iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice8B iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_trice8F iD
+#define TRICE_BIND_REBASE_CONSTRUCTOR_TRICE_INSERT_triceN iD
+
+#ifdef TRICE_INSERT_trice
+#define trice(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice
+#define Trice(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice
+#define TRice(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE
+#define TRICE(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice_0
+#define trice_0(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice_0, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice_0
+#define Trice_0(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice_0, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice_0
+#define TRice_0(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice_0, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE_0
+#define TRICE_0(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE_0, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice_1
+#define trice_1(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice_1, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice_1
+#define Trice_1(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice_1, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice_1
+#define TRice_1(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice_1, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE_1
+#define TRICE_1(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE_1, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice_10
+#define trice_10(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice_10, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice_10
+#define Trice_10(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice_10, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice_10
+#define TRice_10(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice_10, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE_10
+#define TRICE_10(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE_10, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice_11
+#define trice_11(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice_11, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice_11
+#define Trice_11(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice_11, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice_11
+#define TRice_11(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice_11, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE_11
+#define TRICE_11(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE_11, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice_12
+#define trice_12(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice_12, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice_12
+#define Trice_12(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice_12, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice_12
+#define TRice_12(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice_12, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE_12
+#define TRICE_12(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE_12, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice_2
+#define trice_2(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice_2, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice_2
+#define Trice_2(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice_2, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice_2
+#define TRice_2(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice_2, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE_2
+#define TRICE_2(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE_2, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice_3
+#define trice_3(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice_3, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice_3
+#define Trice_3(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice_3, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice_3
+#define TRice_3(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice_3, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE_3
+#define TRICE_3(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE_3, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice_4
+#define trice_4(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice_4, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice_4
+#define Trice_4(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice_4, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice_4
+#define TRice_4(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice_4, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE_4
+#define TRICE_4(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE_4, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice_5
+#define trice_5(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice_5, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice_5
+#define Trice_5(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice_5, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice_5
+#define TRice_5(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice_5, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE_5
+#define TRICE_5(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE_5, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice_6
+#define trice_6(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice_6, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice_6
+#define Trice_6(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice_6, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice_6
+#define TRice_6(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice_6, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE_6
+#define TRICE_6(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE_6, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice_7
+#define trice_7(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice_7, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice_7
+#define Trice_7(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice_7, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice_7
+#define TRice_7(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice_7, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE_7
+#define TRICE_7(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE_7, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice_8
+#define trice_8(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice_8, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice_8
+#define Trice_8(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice_8, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice_8
+#define TRice_8(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice_8, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE_8
+#define TRICE_8(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE_8, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice_9
+#define trice_9(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice_9, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice_9
+#define Trice_9(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice_9, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice_9
+#define TRice_9(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice_9, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE_9
+#define TRICE_9(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE_9, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRIce_C
+#define TRIce_C(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRIce_C, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICe_C
+#define TRICe_C(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICe_C, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE_C
+#define TRICE_C(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE_C, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE_C_0_0
+#define TRICE_C_0_0(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE_C_0_0, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE_C_0_16
+#define TRICE_C_0_16(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE_C_0_16, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE_C_0_32
+#define TRICE_C_0_32(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE_C_0_32, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE_C_N0
+#define TRICE_C_N0(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE_C_N0, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE_C_N16
+#define TRICE_C_N16(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE_C_N16, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE_C_N32
+#define TRICE_C_N32(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE_C_N32, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE_N
+#define TRICE_N(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE_N, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE_S
+#define TRICE_S(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE_S, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice0
+#define trice0(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice0, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice0
+#define Trice0(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice0, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice0
+#define TRice0(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice0, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE0
+#define TRICE0(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE0, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice16
+#define trice16(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice16, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice16
+#define Trice16(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice16, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice16
+#define TRice16(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice16, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE16
+#define TRICE16(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE16, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice16_0
+#define trice16_0(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice16_0, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice16_0
+#define Trice16_0(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice16_0, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice16_0
+#define TRice16_0(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice16_0, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE16_0
+#define TRICE16_0(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE16_0, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice16_1
+#define trice16_1(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice16_1, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice16_1
+#define Trice16_1(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice16_1, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice16_1
+#define TRice16_1(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice16_1, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE16_1
+#define TRICE16_1(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE16_1, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice16_10
+#define trice16_10(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice16_10, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice16_10
+#define Trice16_10(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice16_10, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice16_10
+#define TRice16_10(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice16_10, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE16_10
+#define TRICE16_10(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE16_10, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice16_11
+#define trice16_11(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice16_11, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice16_11
+#define Trice16_11(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice16_11, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice16_11
+#define TRice16_11(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice16_11, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE16_11
+#define TRICE16_11(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE16_11, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice16_12
+#define trice16_12(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice16_12, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice16_12
+#define Trice16_12(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice16_12, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice16_12
+#define TRice16_12(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice16_12, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE16_12
+#define TRICE16_12(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE16_12, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice16_2
+#define trice16_2(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice16_2, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice16_2
+#define Trice16_2(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice16_2, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice16_2
+#define TRice16_2(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice16_2, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE16_2
+#define TRICE16_2(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE16_2, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice16_3
+#define trice16_3(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice16_3, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice16_3
+#define Trice16_3(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice16_3, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice16_3
+#define TRice16_3(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice16_3, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE16_3
+#define TRICE16_3(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE16_3, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice16_4
+#define trice16_4(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice16_4, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice16_4
+#define Trice16_4(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice16_4, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice16_4
+#define TRice16_4(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice16_4, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE16_4
+#define TRICE16_4(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE16_4, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice16_5
+#define trice16_5(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice16_5, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice16_5
+#define Trice16_5(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice16_5, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice16_5
+#define TRice16_5(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice16_5, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE16_5
+#define TRICE16_5(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE16_5, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice16_6
+#define trice16_6(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice16_6, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice16_6
+#define Trice16_6(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice16_6, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice16_6
+#define TRice16_6(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice16_6, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE16_6
+#define TRICE16_6(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE16_6, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice16_7
+#define trice16_7(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice16_7, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice16_7
+#define Trice16_7(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice16_7, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice16_7
+#define TRice16_7(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice16_7, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE16_7
+#define TRICE16_7(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE16_7, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice16_8
+#define trice16_8(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice16_8, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice16_8
+#define Trice16_8(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice16_8, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice16_8
+#define TRice16_8(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice16_8, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE16_8
+#define TRICE16_8(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE16_8, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice16_9
+#define trice16_9(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice16_9, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice16_9
+#define Trice16_9(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice16_9, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice16_9
+#define TRice16_9(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice16_9, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE16_9
+#define TRICE16_9(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE16_9, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE16_B
+#define TRICE16_B(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE16_B, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRIce16_C
+#define TRIce16_C(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRIce16_C, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICe16_C
+#define TRICe16_C(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICe16_C, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE16_C
+#define TRICE16_C(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE16_C, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE16_F
+#define TRICE16_F(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE16_F, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice16C
+#define trice16C(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice16C, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice16C
+#define Trice16C(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice16C, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice16C
+#define TRice16C(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice16C, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice32
+#define trice32(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice32, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice32
+#define Trice32(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice32, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice32
+#define TRice32(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice32, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE32
+#define TRICE32(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE32, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice32_0
+#define trice32_0(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice32_0, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice32_0
+#define Trice32_0(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice32_0, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice32_0
+#define TRice32_0(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice32_0, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE32_0
+#define TRICE32_0(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE32_0, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice32_1
+#define trice32_1(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice32_1, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice32_1
+#define Trice32_1(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice32_1, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice32_1
+#define TRice32_1(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice32_1, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE32_1
+#define TRICE32_1(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE32_1, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice32_10
+#define trice32_10(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice32_10, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice32_10
+#define Trice32_10(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice32_10, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice32_10
+#define TRice32_10(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice32_10, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE32_10
+#define TRICE32_10(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE32_10, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice32_11
+#define trice32_11(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice32_11, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice32_11
+#define Trice32_11(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice32_11, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice32_11
+#define TRice32_11(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice32_11, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE32_11
+#define TRICE32_11(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE32_11, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice32_12
+#define trice32_12(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice32_12, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice32_12
+#define Trice32_12(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice32_12, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice32_12
+#define TRice32_12(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice32_12, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE32_12
+#define TRICE32_12(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE32_12, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice32_2
+#define trice32_2(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice32_2, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice32_2
+#define Trice32_2(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice32_2, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice32_2
+#define TRice32_2(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice32_2, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE32_2
+#define TRICE32_2(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE32_2, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice32_3
+#define trice32_3(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice32_3, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice32_3
+#define Trice32_3(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice32_3, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice32_3
+#define TRice32_3(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice32_3, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE32_3
+#define TRICE32_3(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE32_3, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice32_4
+#define trice32_4(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice32_4, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice32_4
+#define Trice32_4(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice32_4, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice32_4
+#define TRice32_4(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice32_4, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE32_4
+#define TRICE32_4(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE32_4, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice32_5
+#define trice32_5(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice32_5, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice32_5
+#define Trice32_5(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice32_5, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice32_5
+#define TRice32_5(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice32_5, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE32_5
+#define TRICE32_5(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE32_5, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice32_6
+#define trice32_6(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice32_6, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice32_6
+#define Trice32_6(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice32_6, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice32_6
+#define TRice32_6(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice32_6, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE32_6
+#define TRICE32_6(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE32_6, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice32_7
+#define trice32_7(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice32_7, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice32_7
+#define Trice32_7(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice32_7, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice32_7
+#define TRice32_7(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice32_7, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE32_7
+#define TRICE32_7(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE32_7, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice32_8
+#define trice32_8(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice32_8, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice32_8
+#define Trice32_8(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice32_8, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice32_8
+#define TRice32_8(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice32_8, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE32_8
+#define TRICE32_8(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE32_8, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice32_9
+#define trice32_9(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice32_9, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice32_9
+#define Trice32_9(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice32_9, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice32_9
+#define TRice32_9(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice32_9, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE32_9
+#define TRICE32_9(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE32_9, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE32_B
+#define TRICE32_B(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE32_B, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRIce32_C
+#define TRIce32_C(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRIce32_C, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICe32_C
+#define TRICe32_C(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICe32_C, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE32_C
+#define TRICE32_C(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE32_C, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE32_F
+#define TRICE32_F(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE32_F, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice32C
+#define trice32C(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice32C, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice32C
+#define Trice32C(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice32C, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice32C
+#define TRice32C(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice32C, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice64
+#define trice64(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice64, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice64
+#define Trice64(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice64, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice64
+#define TRice64(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice64, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE64
+#define TRICE64(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE64, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice64_0
+#define trice64_0(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice64_0, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice64_0
+#define Trice64_0(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice64_0, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice64_0
+#define TRice64_0(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice64_0, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE64_0
+#define TRICE64_0(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE64_0, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice64_1
+#define trice64_1(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice64_1, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice64_1
+#define Trice64_1(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice64_1, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice64_1
+#define TRice64_1(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice64_1, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE64_1
+#define TRICE64_1(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE64_1, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice64_10
+#define trice64_10(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice64_10, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice64_10
+#define Trice64_10(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice64_10, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice64_10
+#define TRice64_10(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice64_10, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE64_10
+#define TRICE64_10(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE64_10, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice64_11
+#define trice64_11(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice64_11, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice64_11
+#define Trice64_11(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice64_11, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice64_11
+#define TRice64_11(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice64_11, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE64_11
+#define TRICE64_11(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE64_11, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice64_12
+#define trice64_12(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice64_12, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice64_12
+#define Trice64_12(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice64_12, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice64_12
+#define TRice64_12(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice64_12, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE64_12
+#define TRICE64_12(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE64_12, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice64_2
+#define trice64_2(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice64_2, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice64_2
+#define Trice64_2(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice64_2, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice64_2
+#define TRice64_2(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice64_2, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE64_2
+#define TRICE64_2(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE64_2, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice64_3
+#define trice64_3(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice64_3, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice64_3
+#define Trice64_3(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice64_3, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice64_3
+#define TRice64_3(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice64_3, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE64_3
+#define TRICE64_3(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE64_3, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice64_4
+#define trice64_4(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice64_4, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice64_4
+#define Trice64_4(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice64_4, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice64_4
+#define TRice64_4(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice64_4, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE64_4
+#define TRICE64_4(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE64_4, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice64_5
+#define trice64_5(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice64_5, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice64_5
+#define Trice64_5(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice64_5, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice64_5
+#define TRice64_5(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice64_5, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE64_5
+#define TRICE64_5(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE64_5, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice64_6
+#define trice64_6(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice64_6, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice64_6
+#define Trice64_6(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice64_6, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice64_6
+#define TRice64_6(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice64_6, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE64_6
+#define TRICE64_6(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE64_6, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice64_7
+#define trice64_7(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice64_7, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice64_7
+#define Trice64_7(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice64_7, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice64_7
+#define TRice64_7(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice64_7, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE64_7
+#define TRICE64_7(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE64_7, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice64_8
+#define trice64_8(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice64_8, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice64_8
+#define Trice64_8(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice64_8, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice64_8
+#define TRice64_8(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice64_8, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE64_8
+#define TRICE64_8(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE64_8, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice64_9
+#define trice64_9(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice64_9, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice64_9
+#define Trice64_9(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice64_9, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice64_9
+#define TRice64_9(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice64_9, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE64_9
+#define TRICE64_9(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE64_9, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE64_B
+#define TRICE64_B(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE64_B, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRIce64_C
+#define TRIce64_C(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRIce64_C, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICe64_C
+#define TRICe64_C(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICe64_C, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE64_C
+#define TRICE64_C(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE64_C, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE64_F
+#define TRICE64_F(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE64_F, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice64C
+#define trice64C(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice64C, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice64C
+#define Trice64C(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice64C, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice64C
+#define TRice64C(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice64C, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice8
+#define trice8(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice8, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice8
+#define Trice8(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice8, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice8
+#define TRice8(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice8, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE8
+#define TRICE8(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE8, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice8_0
+#define trice8_0(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice8_0, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice8_0
+#define Trice8_0(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice8_0, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice8_0
+#define TRice8_0(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice8_0, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE8_0
+#define TRICE8_0(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE8_0, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice8_1
+#define trice8_1(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice8_1, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice8_1
+#define Trice8_1(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice8_1, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice8_1
+#define TRice8_1(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice8_1, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE8_1
+#define TRICE8_1(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE8_1, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice8_10
+#define trice8_10(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice8_10, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice8_10
+#define Trice8_10(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice8_10, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice8_10
+#define TRice8_10(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice8_10, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE8_10
+#define TRICE8_10(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE8_10, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice8_11
+#define trice8_11(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice8_11, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice8_11
+#define Trice8_11(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice8_11, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice8_11
+#define TRice8_11(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice8_11, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE8_11
+#define TRICE8_11(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE8_11, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice8_12
+#define trice8_12(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice8_12, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice8_12
+#define Trice8_12(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice8_12, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice8_12
+#define TRice8_12(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice8_12, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE8_12
+#define TRICE8_12(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE8_12, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice8_2
+#define trice8_2(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice8_2, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice8_2
+#define Trice8_2(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice8_2, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice8_2
+#define TRice8_2(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice8_2, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE8_2
+#define TRICE8_2(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE8_2, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice8_3
+#define trice8_3(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice8_3, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice8_3
+#define Trice8_3(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice8_3, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice8_3
+#define TRice8_3(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice8_3, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE8_3
+#define TRICE8_3(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE8_3, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice8_4
+#define trice8_4(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice8_4, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice8_4
+#define Trice8_4(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice8_4, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice8_4
+#define TRice8_4(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice8_4, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE8_4
+#define TRICE8_4(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE8_4, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice8_5
+#define trice8_5(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice8_5, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice8_5
+#define Trice8_5(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice8_5, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice8_5
+#define TRice8_5(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice8_5, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE8_5
+#define TRICE8_5(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE8_5, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice8_6
+#define trice8_6(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice8_6, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice8_6
+#define Trice8_6(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice8_6, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice8_6
+#define TRice8_6(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice8_6, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE8_6
+#define TRICE8_6(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE8_6, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice8_7
+#define trice8_7(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice8_7, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice8_7
+#define Trice8_7(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice8_7, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice8_7
+#define TRice8_7(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice8_7, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE8_7
+#define TRICE8_7(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE8_7, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice8_8
+#define trice8_8(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice8_8, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice8_8
+#define Trice8_8(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice8_8, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice8_8
+#define TRice8_8(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice8_8, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE8_8
+#define TRICE8_8(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE8_8, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice8_9
+#define trice8_9(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice8_9, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice8_9
+#define Trice8_9(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice8_9, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice8_9
+#define TRice8_9(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice8_9, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE8_9
+#define TRICE8_9(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE8_9, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE8_B
+#define TRICE8_B(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE8_B, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRIce8_C
+#define TRIce8_C(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRIce8_C, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICe8_C
+#define TRICe8_C(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICe8_C, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE8_C
+#define TRICE8_C(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE8_C, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRICE8_F
+#define TRICE8_F(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRICE8_F, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice8C
+#define trice8C(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice8C, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice8C
+#define Trice8C(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice8C, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice8C
+#define TRice8C(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice8C, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_triceAssert
+#define triceAssert(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_triceAssert, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TriceAssert
+#define TriceAssert(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TriceAssert, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRiceAssert
+#define TRiceAssert(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRiceAssert, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_triceAssertFalse
+#define triceAssertFalse(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_triceAssertFalse, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TriceAssertFalse
+#define TriceAssertFalse(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TriceAssertFalse, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRiceAssertFalse
+#define TRiceAssertFalse(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRiceAssertFalse, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_triceAssertOrReturn
+#define triceAssertOrReturn(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_triceAssertOrReturn, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TriceAssertOrReturn
+#define TriceAssertOrReturn(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TriceAssertOrReturn, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRiceAssertOrReturn
+#define TRiceAssertOrReturn(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRiceAssertOrReturn, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_triceAssertOrReturnValue
+#define triceAssertOrReturnValue(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_triceAssertOrReturnValue, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TriceAssertOrReturnValue
+#define TriceAssertOrReturnValue(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TriceAssertOrReturnValue, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRiceAssertOrReturnValue
+#define TRiceAssertOrReturnValue(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRiceAssertOrReturnValue, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_triceAssertTrue
+#define triceAssertTrue(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_triceAssertTrue, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TriceAssertTrue
+#define TriceAssertTrue(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TriceAssertTrue, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRiceAssertTrue
+#define TRiceAssertTrue(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRiceAssertTrue, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_triceC
+#define triceC(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_triceC, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TriceC
+#define TriceC(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TriceC, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRiceC
+#define TRiceC(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRiceC, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_triceS
+#define triceS(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_triceS, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TriceS
+#define TriceS(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TriceS, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRiceS
+#define TRiceS(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRiceS, __VA_ARGS__)
+#endif
+
+// Function-backed public forms use the ABI-preserving adapters declared in trice.h.
+#ifndef TRICE_BIND_IMPLEMENTATION
+#ifdef TRICE_INSERT_TRice16B
+#define TRice16B(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice16B, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice16F
+#define TRice16F(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice16F, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice32B
+#define TRice32B(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice32B, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice32F
+#define TRice32F(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice32F, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice64B
+#define TRice64B(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice64B, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice64F
+#define TRice64F(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice64F, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice8B
+#define TRice8B(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice8B, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRice8F
+#define TRice8F(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRice8F, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TRiceN
+#define TRiceN(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TRiceN, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice16B
+#define Trice16B(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice16B, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice16F
+#define Trice16F(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice16F, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice32B
+#define Trice32B(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice32B, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice32F
+#define Trice32F(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice32F, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice64B
+#define Trice64B(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice64B, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice64F
+#define Trice64F(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice64F, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice8B
+#define Trice8B(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice8B, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_Trice8F
+#define Trice8F(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_Trice8F, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_TriceN
+#define TriceN(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_TriceN, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice16B
+#define trice16B(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice16B, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice16F
+#define trice16F(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice16F, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice32B
+#define trice32B(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice32B, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice32F
+#define trice32F(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice32F, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice64B
+#define trice64B(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice64B, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice64F
+#define trice64F(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice64F, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice8B
+#define trice8B(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice8B, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_trice8F
+#define trice8F(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_trice8F, __VA_ARGS__)
+#endif
+#ifdef TRICE_INSERT_triceN
+#define triceN(...) TRICE_BIND_DISPATCH(TRICE_BIND_ROUTE(TRICE_BIND_FILE_KEY), TRICE_INSERT_triceN, __VA_ARGS__)
+#endif
+#endif // #ifndef TRICE_BIND_IMPLEMENTATION
+
+#endif // TRICE_BIND_H_
diff --git a/src/triceDefaultConfig.h b/src/triceDefaultConfig.h
index 696509006..712fd12ee 100644
--- a/src/triceDefaultConfig.h
+++ b/src/triceDefaultConfig.h
@@ -5,7 +5,6 @@
//! \file triceDefaultConfig.h
//! \brief trice Default Config declarations and macros.
-
#ifndef TRICE_DEFAULT_CONFIG_H_
#define TRICE_DEFAULT_CONFIG_H_
@@ -492,15 +491,15 @@ extern "C" {
// #ifndef TRICE_TX_LOG_SUPPORT
// #define TRICE_TX_LOG_SUPPORT 1 // The device can use Trice statements like `trice( "msg:hello" );` The default is 1.
// #endif
-//
+//
// #ifndef TRICE_TX_ABC_SUPPORT
// #define TRICE_TX_ABC_SUPPORT 1 // Enables Trice ABC command send macros. It does not add code unless Trice ABC is used. The device can use Trice statements like `trice32C( "cmd:setTime", buf, 1 );`
// #endif
-//
+//
// #ifndef TRICE_TX_X0_COUNTED_BUFFER_SUPPORT
// #define TRICE_TX_X0_COUNTED_BUFFER_SUPPORT 1 // The device can use Trice statements like `triceX0( buf, len );` This adds very little code and therefore is enable per default.
// #endif
-//
+//
// // TRICE_TX_SUPPORT is a derived value signaling, that the Trice transmit stack is needed.
// // It is currenty unused but planned to be able to exclude the TRICE TX stack for TRICE RX - only devices.
// #define TRICE_TX_SUPPORT (TRICE_TX_LOG_SUPPORT | TRICE_TX_ABC_SUPPORT | TRICE_TX_X0_COUNTED_BUFFER_SUPPORT)
@@ -533,7 +532,6 @@ extern "C" {
#define TRICE_TX_SUPPORT (TRICE_TX_LOG_SUPPORT | TRICE_TX_ABC_SUPPORT | TRICE_TX_X0_COUNTED_BUFFER_SUPPORT) // TRICE_TX_SUPPORT 0 excludes the TRICE TX stack for TRICE RX - only devices.
#endif
-
#ifdef __cplusplus
}
#endif
diff --git a/src/triceDoubleBuffer.c b/src/triceDoubleBuffer.c
index a56d11be4..bbdb8b373 100644
--- a/src/triceDoubleBuffer.c
+++ b/src/triceDoubleBuffer.c
@@ -5,7 +5,6 @@
//! \file triceDoubleBuffer.c
//! \brief trice Double Buffer implementation.
-
#include "cobs.h"
#include "tcobs.h"
#include "trice.h"
@@ -125,7 +124,7 @@ void TriceTransfer(void) {
//! \li after: ^- pStart (is input buf or input buf + 2)
//! \li after: <- pLen -> (maybe 1-3 bytes shorter)
static int TriceNext(uint8_t** buf, size_t* pSize, const uint8_t** pStart, size_t* pLen) {
- uint16_t const * pTID = (uint16_t*)*buf; // lint !e826, get TID address
+ uint16_t const* pTID = (uint16_t*)*buf; // lint !e826, get TID address
unsigned const TID = TRICE_TTOHS(*pTID); // type and id
int const triceID = (int)(0x3FFF & TID);
int const triceType = (int)(TID >> 14);
@@ -197,7 +196,7 @@ static void TriceOut(uint32_t* tb, size_t tLen) {
uint8_t* nxt = dat; // This is the start of next 32-bit aligned Trices.
size_t encLen = 0;
#if (TRICE_DEFERRED_TRANSFER_MODE == TRICE_MULTI_PACK_MODE) && ((TRICE_PROTECT == 1) || (TRICE_DIAGNOSTICS == 1))
- uint8_t const * dst; // This value dst must not get > nxt to avoid overwrites.
+ uint8_t const* dst; // This value dst must not get > nxt to avoid overwrites.
#endif
int triceID = 0; // This assignment is only needed to silence compiler complains about being uninitialized.
#if TRICE_DIAGNOSTICS == 1
@@ -239,7 +238,7 @@ static void TriceOut(uint32_t* tb, size_t tLen) {
memset(crypt + triceNettoLen, 0, len8 - triceNettoLen); // Clear padding space.
XTEAEncrypt((uint32_t*)crypt, len8 >> 2);
size_t len = (size_t)TCOBSEncode(dst, crypt, len8); // encLen is re-used here
- dst[len++] = 0; // Add zero as package delimiter.
+ dst[len++] = 0; // Add zero as package delimiter.
encLen += len;
#elif (TRICE_DEFERRED_XTEA_ENCRYPT == 1) && (TRICE_DEFERRED_OUT_FRAMING == TRICE_FRAMING_COBS)
//! When XTEA enabled, (XTEA can encrypt only multiple of 8 length packages.) we need to copy th data first, because the 4 bytes
@@ -249,7 +248,7 @@ static void TriceOut(uint32_t* tb, size_t tLen) {
memset((crypt) + triceNettoLen, 0, len8 - triceNettoLen); // Clear padding space.
XTEAEncrypt((uint32_t*)crypt, len8 >> 2);
size_t len = (size_t)COBSEncode(dst, crypt, len8); // encLen is re-used here
- dst[len++] = 0; // Add zero as package delimiter.
+ dst[len++] = 0; // Add zero as package delimiter.
encLen += len;
#elif (TRICE_DEFERRED_XTEA_ENCRYPT == 1) && (TRICE_DEFERRED_OUT_FRAMING == TRICE_FRAMING_NONE)
#if TRICE_CONFIG_WARNINGS == 1
@@ -300,7 +299,7 @@ static void TriceOut(uint32_t* tb, size_t tLen) {
//////////////////////////////////////////////////////////////////////////////
#if (TRICE_PROTECT == 1) || (TRICE_DIAGNOSTICS == 1)
- dst = enc + encLen; // When several Trices in the double buffer, with each encoding the new dst could drift a bit closer towards triceNettoStart.
+ dst = enc + encLen; // When several Trices in the double buffer, with each encoding the new dst could drift a bit closer towards triceNettoStart.
int const triceDataOffsetSpaceRemained = (int)(nxt - dst); // The beginning of unprocessed data MINUS next dst must not be negative.
#endif
#if (TRICE_PROTECT == 1)
@@ -358,7 +357,7 @@ static void TriceOut(uint32_t* tb, size_t tLen) {
// Mostly eLen < encLen, but it could be eLen = encLen + 1 + (encLen>>5) in TCOBS worst case.
// dat - enc = TRICE_DATA_OFFSET
// if eLen > encLen, then TriceDataOffsetDepth = eLen - encLen
- /*int*/ triceDataOffsetDepth =(int)(eLen - encLen); // usually negative
+ /*int*/ triceDataOffsetDepth = (int)(eLen - encLen); // usually negative
TriceDataOffsetDepthMax = triceDataOffsetDepth < TriceDataOffsetDepthMax ? TriceDataOffsetDepthMax : triceDataOffsetDepth;
#endif
encLen = eLen;
diff --git a/src/triceMcuOrder.h b/src/triceMcuOrder.h
index b3d984cb8..881e8af0d 100644
--- a/src/triceMcuOrder.h
+++ b/src/triceMcuOrder.h
@@ -5,7 +5,6 @@
//! \file triceMcuOrder.h
//! \brief trice Mcu Order declarations and macros.
-
#ifndef TRICE_MCU_ORDER_H_
#define TRICE_MCU_ORDER_H_
diff --git a/src/triceMcuReverse.h b/src/triceMcuReverse.h
index 298ee6766..cb8e323af 100644
--- a/src/triceMcuReverse.h
+++ b/src/triceMcuReverse.h
@@ -5,7 +5,6 @@
//! \file triceMcuReverse.h
//! \brief trice Mcu Reverse declarations and macros.
-
#ifndef TRICE_MCU_REVERSE_H_
#define TRICE_MCU_REVERSE_H_
diff --git a/src/triceOff.h b/src/triceOff.h
index bd130a85d..65e76f1a6 100644
--- a/src/triceOff.h
+++ b/src/triceOff.h
@@ -5,7 +5,6 @@
//! \file triceOff.h
//! \brief trice Off declarations and macros.
-
#ifndef TRICE_OFF_H_
#define TRICE_OFF_H_
@@ -113,31 +112,89 @@
// Taking advantage of the variadic mechanism to use correct define.
// triceAssertOrReturn
-#define triceAssertOrReturn_2(msg, flag) do {if (!(flag)) {return;}} while(0)
-#define TriceAssertOrReturn_2(msg, flag) do {if (!(flag)) {return;}} while(0)
-#define TRiceAssertOrReturn_2(msg, flag) do {if (!(flag)) {return;}} while(0)
-#define triceAssertOrReturn_3(idN, msg, flag) do {if (!(flag)) {return;}} while(0)
-#define TriceAssertOrReturn_3(idN, msg, flag) do {if (!(flag)) {return;}} while(0)
-#define TRiceAssertOrReturn_3(idN, msg, flag) do {if (!(flag)) {return;}} while(0)
+#define triceAssertOrReturn_2(msg, flag) \
+ do { \
+ if (!(flag)) { \
+ return; \
+ } \
+ } while (0)
+#define TriceAssertOrReturn_2(msg, flag) \
+ do { \
+ if (!(flag)) { \
+ return; \
+ } \
+ } while (0)
+#define TRiceAssertOrReturn_2(msg, flag) \
+ do { \
+ if (!(flag)) { \
+ return; \
+ } \
+ } while (0)
+#define triceAssertOrReturn_3(idN, msg, flag) \
+ do { \
+ if (!(flag)) { \
+ return; \
+ } \
+ } while (0)
+#define TriceAssertOrReturn_3(idN, msg, flag) \
+ do { \
+ if (!(flag)) { \
+ return; \
+ } \
+ } while (0)
+#define TRiceAssertOrReturn_3(idN, msg, flag) \
+ do { \
+ if (!(flag)) { \
+ return; \
+ } \
+ } while (0)
#define triceAssertOrReturn(...) TRICE_CONCAT2(triceAssertOrReturn_, TRICE_COUNT_ARGUMENTS(__VA_ARGS__))(__VA_ARGS__)
#define TriceAssertOrReturn(...) TRICE_CONCAT2(TriceAssertOrReturn_, TRICE_COUNT_ARGUMENTS(__VA_ARGS__))(__VA_ARGS__)
#define TRiceAssertOrReturn(...) TRICE_CONCAT2(TRiceAssertOrReturn_, TRICE_COUNT_ARGUMENTS(__VA_ARGS__))(__VA_ARGS__)
-
// triceAssertOrReturnValue
-#define triceAssertOrReturnValue_3(msg, flag, value) do {if (!(flag)) {return (value);}} while(0)
-#define TriceAssertOrReturnValue_3(msg, flag, value) do {if (!(flag)) {return (value);}} while(0)
-#define TRiceAssertOrReturnValue_3(msg, flag, value) do {if (!(flag)) {return (value);}} while(0)
-#define triceAssertOrReturnValue_4(idN, msg, flag, value) do {if (!(flag)) {return (value);}} while(0)
-#define TriceAssertOrReturnValue_4(idN, msg, flag, value) do {if (!(flag)) {return (value);}} while(0)
-#define TRiceAssertOrReturnValue_4(idN, msg, flag, value) do {if (!(flag)) {return (value);}} while(0)
+#define triceAssertOrReturnValue_3(msg, flag, value) \
+ do { \
+ if (!(flag)) { \
+ return (value); \
+ } \
+ } while (0)
+#define TriceAssertOrReturnValue_3(msg, flag, value) \
+ do { \
+ if (!(flag)) { \
+ return (value); \
+ } \
+ } while (0)
+#define TRiceAssertOrReturnValue_3(msg, flag, value) \
+ do { \
+ if (!(flag)) { \
+ return (value); \
+ } \
+ } while (0)
+#define triceAssertOrReturnValue_4(idN, msg, flag, value) \
+ do { \
+ if (!(flag)) { \
+ return (value); \
+ } \
+ } while (0)
+#define TriceAssertOrReturnValue_4(idN, msg, flag, value) \
+ do { \
+ if (!(flag)) { \
+ return (value); \
+ } \
+ } while (0)
+#define TRiceAssertOrReturnValue_4(idN, msg, flag, value) \
+ do { \
+ if (!(flag)) { \
+ return (value); \
+ } \
+ } while (0)
#define triceAssertOrReturnValue(...) TRICE_CONCAT2(triceAssertOrReturnValue_, TRICE_COUNT_ARGUMENTS(__VA_ARGS__))(__VA_ARGS__)
#define TriceAssertOrReturnValue(...) TRICE_CONCAT2(TriceAssertOrReturnValue_, TRICE_COUNT_ARGUMENTS(__VA_ARGS__))(__VA_ARGS__)
#define TRiceAssertOrReturnValue(...) TRICE_CONCAT2(TRiceAssertOrReturnValue_, TRICE_COUNT_ARGUMENTS(__VA_ARGS__))(__VA_ARGS__)
-
// All following macros are defined without ID and as variadic, to avoid editor warnings for TRICE_CLEAN == 1 or TRICE_OFF == 1
#define TRICE_S(p, s, ...) TRICE_UNUSED(p) TRICE_UNUSED(s)
diff --git a/src/triceOn.h b/src/triceOn.h
index c90bbc629..3659305e2 100644
--- a/src/triceOn.h
+++ b/src/triceOn.h
@@ -5,34 +5,33 @@
//! \file triceOn.h
//! \brief trice On declarations and macros.
-
#ifndef TRICE_ON_H_
#define TRICE_ON_H_
#include "triceVariadic.h"
// clang-format off
-#define TRICE( tid, ...) TRICE_CONCAT2(TRICE_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
-#define trice( tid, ...) TRICE_CONCAT2(trice_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
-#define Trice( tid, ...) TRICE_CONCAT2(Trice_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
-#define TRice( tid, ...) TRICE_CONCAT2(TRice_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
-#define TRICE8( tid, ...) TRICE_CONCAT2(TRICE8_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
-#define trice8( tid, ...) TRICE_CONCAT2(trice8_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
-#define Trice8( tid, ...) TRICE_CONCAT2(Trice8_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
-#define TRice8( tid, ...) TRICE_CONCAT2(TRice8_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
-#define TRICE16(tid, ...) TRICE_CONCAT2(TRICE16_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
-#define trice16(tid, ...) TRICE_CONCAT2(trice16_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
-#define Trice16(tid, ...) TRICE_CONCAT2(Trice16_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
-#define TRice16(tid, ...) TRICE_CONCAT2(TRice16_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
-#define TRICE32(tid, ...) TRICE_CONCAT2(TRICE32_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
-#define trice32(tid, ...) TRICE_CONCAT2(trice32_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
-#define Trice32(tid, ...) TRICE_CONCAT2(Trice32_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
-#define TRice32(tid, ...) TRICE_CONCAT2(TRice32_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
+#define TRICE_INSERT_TRICE( tid, ...) TRICE_CONCAT2(TRICE_INSERT_TRICE_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
+#define TRICE_INSERT_trice( tid, ...) TRICE_CONCAT2(TRICE_INSERT_trice_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
+#define TRICE_INSERT_Trice( tid, ...) TRICE_CONCAT2(TRICE_INSERT_Trice_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
+#define TRICE_INSERT_TRice( tid, ...) TRICE_CONCAT2(TRICE_INSERT_TRice_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
+#define TRICE_INSERT_TRICE8( tid, ...) TRICE_CONCAT2(TRICE_INSERT_TRICE8_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
+#define TRICE_INSERT_trice8( tid, ...) TRICE_CONCAT2(TRICE_INSERT_trice8_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
+#define TRICE_INSERT_Trice8( tid, ...) TRICE_CONCAT2(TRICE_INSERT_Trice8_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
+#define TRICE_INSERT_TRice8( tid, ...) TRICE_CONCAT2(TRICE_INSERT_TRice8_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
+#define TRICE_INSERT_TRICE16(tid, ...) TRICE_CONCAT2(TRICE_INSERT_TRICE16_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
+#define TRICE_INSERT_trice16(tid, ...) TRICE_CONCAT2(TRICE_INSERT_trice16_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
+#define TRICE_INSERT_Trice16(tid, ...) TRICE_CONCAT2(TRICE_INSERT_Trice16_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
+#define TRICE_INSERT_TRice16(tid, ...) TRICE_CONCAT2(TRICE_INSERT_TRice16_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
+#define TRICE_INSERT_TRICE32(tid, ...) TRICE_CONCAT2(TRICE_INSERT_TRICE32_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
+#define TRICE_INSERT_trice32(tid, ...) TRICE_CONCAT2(TRICE_INSERT_trice32_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
+#define TRICE_INSERT_Trice32(tid, ...) TRICE_CONCAT2(TRICE_INSERT_Trice32_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
+#define TRICE_INSERT_TRice32(tid, ...) TRICE_CONCAT2(TRICE_INSERT_TRice32_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
#if (TRICE_64_BIT_SUPPORT == 1)
-#define TRICE64(tid, ...) TRICE_CONCAT2(TRICE64_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
-#define trice64(tid, ...) TRICE_CONCAT2(trice64_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
-#define Trice64(tid, ...) TRICE_CONCAT2(Trice64_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
-#define TRice64(tid, ...) TRICE_CONCAT2(TRice64_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
+#define TRICE_INSERT_TRICE64(tid, ...) TRICE_CONCAT2(TRICE_INSERT_TRICE64_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
+#define TRICE_INSERT_trice64(tid, ...) TRICE_CONCAT2(TRICE_INSERT_trice64_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
+#define TRICE_INSERT_Trice64(tid, ...) TRICE_CONCAT2(TRICE_INSERT_Trice64_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
+#define TRICE_INSERT_TRice64(tid, ...) TRICE_CONCAT2(TRICE_INSERT_TRice64_, TRICE_COUNT_VALUE_ARGUMENTS(__VA_ARGS__))(tid, __VA_ARGS__)
#endif // (TRICE_64_BIT_SUPPORT == 1)
// clang-format on
@@ -211,7 +210,6 @@ void TRice32fn_10(uint16_t tid, uint32_t v0, uint32_t v1, uint32_t v2, uint32_t
void TRice32fn_11(uint16_t tid, uint32_t v0, uint32_t v1, uint32_t v2, uint32_t v3, uint32_t v4, uint32_t v5, uint32_t v6, uint32_t v7, uint32_t v8, uint32_t v9, uint32_t v10);
void TRice32fn_12(uint16_t tid, uint32_t v0, uint32_t v1, uint32_t v2, uint32_t v3, uint32_t v4, uint32_t v5, uint32_t v6, uint32_t v7, uint32_t v8, uint32_t v9, uint32_t v10, uint32_t v11);
-
#if (TRICE_64_BIT_SUPPORT == 1)
void trice64fn_0(uint16_t tid);
void trice64fn_1(uint16_t tid, uint64_t v0);
@@ -256,175 +254,174 @@ void TRice64fn_11(uint16_t tid, uint64_t v0, uint64_t v1, uint64_t v2, uint64_t
void TRice64fn_12(uint16_t tid, uint64_t v0, uint64_t v1, uint64_t v2, uint64_t v3, uint64_t v4, uint64_t v5, uint64_t v6, uint64_t v7, uint64_t v8, uint64_t v9, uint64_t v10, uint64_t v11);
#endif // #if (TRICE_64_BIT_SUPPORT == 1)
-#define trice8_0(tid, fmt) trice8fn_0(tid) //!< trice8_0 is a macro calling a function to reduce code size, this way avoiding code inlining.
-#define trice8_1(tid, fmt, v0) trice8fn_1(tid, (uint8_t)(v0)) //!< trice8_1 is a macro calling a function to reduce code size, this way avoiding code inlining.
-#define trice8_2(tid, fmt, v0, v1) trice8fn_2(tid, (uint8_t)(v0), (uint8_t)(v1)) //!< trice8_2 ia macro calling a function to reduce code size, this way avoiding code inlining.
-#define trice8_3(tid, fmt, v0, v1, v2) trice8fn_3(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2)) //!< trice8_3 ia macro calling a function to reduce code size, this way avoiding code inlining.
-#define trice8_4(tid, fmt, v0, v1, v2, v3) trice8fn_4(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3)) //!< trice8_4 ia macro calling a function to reduce code size, this way avoiding code inlining.
-#define trice8_5(tid, fmt, v0, v1, v2, v3, v4) trice8fn_5(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4)) //!< trice8_5 ia macro calling a function to reduce code size, this way avoiding code inlining.
-#define trice8_6(tid, fmt, v0, v1, v2, v3, v4, v5) trice8fn_6(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5)) //!< trice8_6 ia macro calling a function to reduce code size, this way avoiding code inlining.
-#define trice8_7(tid, fmt, v0, v1, v2, v3, v4, v5, v6) trice8fn_7(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6)) //!< trice8_7 ia macro calling a function to reduce code size, this way avoiding code inlining.
-#define trice8_8(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7) trice8fn_8(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6), (uint8_t)(v7)) //!< trice8_8 ia macro calling a function to reduce code size, this way avoiding code inlining.
-#define trice8_9(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8) trice8fn_9(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6), (uint8_t)(v7), (uint8_t)(v8)) //!< trice8_9 ia macro calling a function to reduce code size, this way avoiding code inlining.
-#define trice8_10(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) trice8fn_10(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6), (uint8_t)(v7), (uint8_t)(v8), (uint8_t)(v9)) //!< trice8_10 ia macro calling a function to reduce code size, this way avoiding code inlining.
-#define trice8_11(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) trice8fn_11(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6), (uint8_t)(v7), (uint8_t)(v8), (uint8_t)(v9), (uint8_t)(v10)) //!< trice8_1M ia macro calling a function to reduce code size, this way avoiding code inlining.
-#define trice8_12(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) trice8fn_12(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6), (uint8_t)(v7), (uint8_t)(v8), (uint8_t)(v9), (uint8_t)(v10), (uint8_t)(v11)) //!< trice8_12 ia macro calling a function to reduce code size, this way avoiding code inlining.
-
-#define Trice8_0(tid, fmt) Trice8fn_0(tid) //!< Trice8_1 ia macro calling a function to reduce code size, this way avoiding code inlining.
-#define Trice8_1(tid, fmt, v0) Trice8fn_1(tid, (uint8_t)(v0)) //!< Trice8_1 ia macro calling a function to reduce code size, this way avoiding code inlining.
-#define Trice8_2(tid, fmt, v0, v1) Trice8fn_2(tid, (uint8_t)(v0), (uint8_t)(v1)) //!< Trice8_2 ia macro calling a function to reduce code size, this way avoiding code inlining.
-#define Trice8_3(tid, fmt, v0, v1, v2) Trice8fn_3(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2)) //!< Trice8_3 ia macro calling a function to reduce code size, this way avoiding code inlining.
-#define Trice8_4(tid, fmt, v0, v1, v2, v3) Trice8fn_4(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3)) //!< Trice8_4 ia macro calling a function to reduce code size, this way avoiding code inlining.
-#define Trice8_5(tid, fmt, v0, v1, v2, v3, v4) Trice8fn_5(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4)) //!< Trice8_5 ia macro calling a function to reduce code size, this way avoiding code inlining.
-#define Trice8_6(tid, fmt, v0, v1, v2, v3, v4, v5) Trice8fn_6(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5)) //!< Trice8_6 ia macro calling a function to reduce code size, this way avoiding code inlining.
-#define Trice8_7(tid, fmt, v0, v1, v2, v3, v4, v5, v6) Trice8fn_7(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6)) //!< Trice8_7 ia macro calling a function to reduce code size, this way avoiding code inlining.
-#define Trice8_8(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7) Trice8fn_8(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6), (uint8_t)(v7)) //!< Trice8_8 ia macro calling a function to reduce code size, this way avoiding code inlining.
-#define Trice8_9(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8) Trice8fn_9(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6), (uint8_t)(v7), (uint8_t)(v8)) //!< Trice8_9 ia macro calling a function to reduce code size, this way avoiding code inlining.
-#define Trice8_10(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) Trice8fn_10(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6), (uint8_t)(v7), (uint8_t)(v8), (uint8_t)(v9)) //!< Trice8_10 ia macro calling a function to reduce code size, this way avoiding code inlining.
-#define Trice8_11(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) Trice8fn_11(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6), (uint8_t)(v7), (uint8_t)(v8), (uint8_t)(v9), (uint8_t)(v10)) //!< Trice8_11 ia macro calling a function to reduce code size, this way avoiding code inlining.
-#define Trice8_12(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) Trice8fn_12(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6), (uint8_t)(v7), (uint8_t)(v8), (uint8_t)(v9), (uint8_t)(v10), (uint8_t)(v11)) //!< Trice8_12 ia macro calling a function to reduce code size, this way avoiding code inlining.
-
-#define TRice8_0(tid, fmt) TRice8fn_0(tid) //!< TRice8_0 ia macro calling a function to reduce code size, this way avoiding code inlining.
-#define TRice8_1(tid, fmt, v0) TRice8fn_1(tid, (uint8_t)(v0)) //!< TRice8_1 ia macro calling a function to reduce code size, this way avoiding code inlining.
-#define TRice8_2(tid, fmt, v0, v1) TRice8fn_2(tid, (uint8_t)(v0), (uint8_t)(v1)) //!< TRice8_2 ia macro calling a function to reduce code size, this way avoiding code inlining.
-#define TRice8_3(tid, fmt, v0, v1, v2) TRice8fn_3(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2)) //!< TRice8_3 ia macro calling a function to reduce code size, this way avoiding code inlining.
-#define TRice8_4(tid, fmt, v0, v1, v2, v3) TRice8fn_4(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3)) //!< TRice8_4 ia macro calling a function to reduce code size, this way avoiding code inlining.
-#define TRice8_5(tid, fmt, v0, v1, v2, v3, v4) TRice8fn_5(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4)) //!< TRice8_5 ia macro calling a function to reduce code size, this way avoiding code inlining.
-#define TRice8_6(tid, fmt, v0, v1, v2, v3, v4, v5) TRice8fn_6(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5)) //!< TRice8_6 ia macro calling a function to reduce code size, this way avoiding code inlining.
-#define TRice8_7(tid, fmt, v0, v1, v2, v3, v4, v5, v6) TRice8fn_7(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6)) //!< TRice8_7 ia macro calling a function to reduce code size, this way avoiding code inlining.
-#define TRice8_8(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7) TRice8fn_8(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6), (uint8_t)(v7)) //!< TRice8_8 ia macro calling a function to reduce code size, this way avoiding code inlining.
-#define TRice8_9(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8) TRice8fn_9(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6), (uint8_t)(v7), (uint8_t)(v8)) //!< TRice8_9 ia macro calling a function to reduce code size, this way avoiding code inlining.
-#define TRice8_10(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) TRice8fn_10(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6), (uint8_t)(v7), (uint8_t)(v8), (uint8_t)(v9)) //!< TRice8_10 ia macro calling a function to reduce code size, this way avoiding code inlining.
-#define TRice8_11(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) TRice8fn_11(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6), (uint8_t)(v7), (uint8_t)(v8), (uint8_t)(v9), (uint8_t)(v10)) //!< TRice8_11 ia macro calling a function to reduce code size, this way avoiding code inlining.
-#define TRice8_12(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) TRice8fn_12(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6), (uint8_t)(v7), (uint8_t)(v8), (uint8_t)(v9), (uint8_t)(v10), (uint8_t)(v11)) //!< TRice8_12 ia macro calling a function to reduce code size, this way avoiding code inlining.
-
-#define trice16_0(tid, fmt) trice16fn_0(tid) //!< trice16_0 is a macro calling a function to reduce code size.
-#define trice16_1(tid, fmt, v0) trice16fn_1(tid, (uint16_t)(v0)) //!< trice16_1 is a macro calling a function to reduce code size.
-#define trice16_2(tid, fmt, v0, v1) trice16fn_2(tid, (uint16_t)(v0), (uint16_t)(v1)) //!< trice16_2 is a macro calling a function to reduce code size.
-#define trice16_3(tid, fmt, v0, v1, v2) trice16fn_3(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2)) //!< trice16_3 is a macro calling a function to reduce code size.
-#define trice16_4(tid, fmt, v0, v1, v2, v3) trice16fn_4(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3)) //!< trice16_4 is a macro calling a function to reduce code size.
-#define trice16_5(tid, fmt, v0, v1, v2, v3, v4) trice16fn_5(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4)) //!< trice16_5 is a macro calling a function to reduce code size.
-#define trice16_6(tid, fmt, v0, v1, v2, v3, v4, v5) trice16fn_6(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5)) //!< trice16_6 is a macro calling a function to reduce code size.
-#define trice16_7(tid, fmt, v0, v1, v2, v3, v4, v5, v6) trice16fn_7(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6)) //!< trice16_7 is a macro calling a function to reduce code size.
-#define trice16_8(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7) trice16fn_8(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6), (uint16_t)(v7)) //!< trice16_8 is a macro calling a function to reduce code size.
-#define trice16_9(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8) trice16fn_9(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6), (uint16_t)(v7), (uint16_t)(v8)) //!< trice16_9 is a macro calling a function to reduce code size.
-#define trice16_10(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) trice16fn_10(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6), (uint16_t)(v7), (uint16_t)(v8), (uint16_t)(v9)) //!< trice16_10 is a macro calling a function to reduce code size.
-#define trice16_11(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) trice16fn_11(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6), (uint16_t)(v7), (uint16_t)(v8), (uint16_t)(v9), (uint16_t)(v10)) //!< trice16_11 is a macro calling a function to reduce code size.
-#define trice16_12(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) trice16fn_12(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6), (uint16_t)(v7), (uint16_t)(v8), (uint16_t)(v9), (uint16_t)(v10), (uint16_t)(v11)) //!< trice16_12 is a macro calling a function to reduce code size.
-
-#define Trice16_0(tid, fmt) Trice16fn_0(tid) //!< Trice16_0 is a macro calling a function to reduce code size.
-#define Trice16_1(tid, fmt, v0) Trice16fn_1(tid, (uint16_t)(v0)) //!< Trice16_1 is a macro calling a function to reduce code size.
-#define Trice16_2(tid, fmt, v0, v1) Trice16fn_2(tid, (uint16_t)(v0), (uint16_t)(v1)) //!< Trice16_2 is a macro calling a function to reduce code size.
-#define Trice16_3(tid, fmt, v0, v1, v2) Trice16fn_3(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2)) //!< Trice16_3 is a macro calling a function to reduce code size.
-#define Trice16_4(tid, fmt, v0, v1, v2, v3) Trice16fn_4(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3)) //!< Trice16_4 is a macro calling a function to reduce code size.
-#define Trice16_5(tid, fmt, v0, v1, v2, v3, v4) Trice16fn_5(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4)) //!< Trice16_5 is a macro calling a function to reduce code size.
-#define Trice16_6(tid, fmt, v0, v1, v2, v3, v4, v5) Trice16fn_6(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5)) //!< Trice16_6 is a macro calling a function to reduce code size.
-#define Trice16_7(tid, fmt, v0, v1, v2, v3, v4, v5, v6) Trice16fn_7(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6)) //!< Trice16_7 is a macro calling a function to reduce code size.
-#define Trice16_8(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7) Trice16fn_8(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6), (uint16_t)(v7)) //!< Trice16_8 is a macro calling a function to reduce code size.
-#define Trice16_9(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8) Trice16fn_9(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6), (uint16_t)(v7), (uint16_t)(v8)) //!< Trice16_9 is a macro calling a function to reduce code size.
-#define Trice16_10(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) Trice16fn_10(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6), (uint16_t)(v7), (uint16_t)(v8), (uint16_t)(v9)) //!< Trice16_10 is a macro calling a function to reduce code size.
-#define Trice16_11(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) Trice16fn_11(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6), (uint16_t)(v7), (uint16_t)(v8), (uint16_t)(v9), (uint16_t)(v10)) //!< Trice16_11 is a macro calling a function to reduce code size.
-#define Trice16_12(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) Trice16fn_12(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6), (uint16_t)(v7), (uint16_t)(v8), (uint16_t)(v9), (uint16_t)(v10), (uint16_t)(v11)) //!< Trice16_12 is a macro calling a function to reduce code size.
-
-#define TRice16_0(tid, fmt) TRice16fn_0(tid) //!< TRice16_0 is a macro calling a function to reduce code size.
-#define TRice16_1(tid, fmt, v0) TRice16fn_1(tid, (uint16_t)(v0)) //!< TRice16_1 is a macro calling a function to reduce code size.
-#define TRice16_2(tid, fmt, v0, v1) TRice16fn_2(tid, (uint16_t)(v0), (uint16_t)(v1)) //!< TRice16_2 is a macro calling a function to reduce code size.
-#define TRice16_3(tid, fmt, v0, v1, v2) TRice16fn_3(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2)) //!< TRice16_3 is a macro calling a function to reduce code size.
-#define TRice16_4(tid, fmt, v0, v1, v2, v3) TRice16fn_4(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3)) //!< TRice16_4 is a macro calling a function to reduce code size.
-#define TRice16_5(tid, fmt, v0, v1, v2, v3, v4) TRice16fn_5(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4)) //!< TRice16_5 is a macro calling a function to reduce code size.
-#define TRice16_6(tid, fmt, v0, v1, v2, v3, v4, v5) TRice16fn_6(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5)) //!< TRice16_6 is a macro calling a function to reduce code size.
-#define TRice16_7(tid, fmt, v0, v1, v2, v3, v4, v5, v6) TRice16fn_7(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6)) //!< TRice16_7 is a macro calling a function to reduce code size.
-#define TRice16_8(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7) TRice16fn_8(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6), (uint16_t)(v7)) //!< TRice16_16_M is a macro calling a function to reduce code size.
-#define TRice16_9(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8) TRice16fn_9(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6), (uint16_t)(v7), (uint16_t)(v8)) //!< TRice16_9 is a macro calling a function to reduce code size.
-#define TRice16_10(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) TRice16fn_10(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6), (uint16_t)(v7), (uint16_t)(v8), (uint16_t)(v9)) //!< TRice16_10 is a macro calling a function to reduce code size.
-#define TRice16_11(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) TRice16fn_11(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6), (uint16_t)(v7), (uint16_t)(v8), (uint16_t)(v9), (uint16_t)(v10)) //!< TRice16_11 is a macro calling a function to reduce code size.
-#define TRice16_12(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) TRice16fn_12(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6), (uint16_t)(v7), (uint16_t)(v8), (uint16_t)(v9), (uint16_t)(v10), (uint16_t)(v11)) //!< TRice16_12 is a macro calling a function to reduce code size.
-
-#define trice32_0(tid, fmt) trice32fn_0(tid) //!< trice32_0 is a macro calling a function to reduce code size.
-#define trice32_1(tid, fmt, v0) trice32fn_1(tid, (uint32_t)(v0)) //!< trice32_1 is a macro calling a function to reduce code size.
-#define trice32_2(tid, fmt, v0, v1) trice32fn_2(tid, (uint32_t)(v0), (uint32_t)(v1)) //!< trice32_2 is a macro calling a function to reduce code size.
-#define trice32_3(tid, fmt, v0, v1, v2) trice32fn_3(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2)) //!< trice32_3 is a macro calling a function to reduce code size.
-#define trice32_4(tid, fmt, v0, v1, v2, v3) trice32fn_4(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3)) //!< trice32_4 is a macro calling a function to r educe code size.
-#define trice32_5(tid, fmt, v0, v1, v2, v3, v4) trice32fn_5(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4)) //!< trice32_5 is a macro calling a function to reduce code size.
-#define trice32_6(tid, fmt, v0, v1, v2, v3, v4, v5) trice32fn_6(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5)) //!< trice32_6 is a macro calling a function to reduce code size.
-#define trice32_7(tid, fmt, v0, v1, v2, v3, v4, v5, v6) trice32fn_7(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6)) //!< trice32_7 is a macro calling a function to reduce code size.
-#define trice32_8(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7) trice32fn_8(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6), (uint32_t)(v7)) //!< trice32_8 is a macro calling a function to reduce code size.
-#define trice32_9(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8) trice32fn_9(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6), (uint32_t)(v7), (uint32_t)(v8)) //!< trice32_9 is a macro calling a function to reduce code size.
-#define trice32_10(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) trice32fn_10(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6), (uint32_t)(v7), (uint32_t)(v8), (uint32_t)(v9)) //!< trice32_10 is a macro calling a function to reduce code size.
-#define trice32_11(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) trice32fn_11(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6), (uint32_t)(v7), (uint32_t)(v8), (uint32_t)(v9), (uint32_t)(v10)) //!< trice32_11 is a macro calling a function to reduce code size.
-#define trice32_12(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) trice32fn_12(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6), (uint32_t)(v7), (uint32_t)(v8), (uint32_t)(v9), (uint32_t)(v10), (uint32_t)(v11)) //!< trice32_12 is a macro calling a function to reduce code size.
-
-#define Trice32_0(tid, fmt) Trice32fn_0(tid) //!< Trice32_0 is a macro calling a function to reduce code size.
-#define Trice32_1(tid, fmt, v0) Trice32fn_1(tid, (uint32_t)(v0)) //!< Trice32_1 is a macro calling a function to reduce code size.
-#define Trice32_2(tid, fmt, v0, v1) Trice32fn_2(tid, (uint32_t)(v0), (uint32_t)(v1)) //!< Trice32_2 is a macro calling a function to reduce code size.
-#define Trice32_3(tid, fmt, v0, v1, v2) Trice32fn_3(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2)) //!< Trice32_3 is a macro calling a function to reduce code size.
-#define Trice32_4(tid, fmt, v0, v1, v2, v3) Trice32fn_4(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3)) //!< Trice32_4 is a macro calling a function to reduce code size.
-#define Trice32_5(tid, fmt, v0, v1, v2, v3, v4) Trice32fn_5(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4)) //!< Trice32_5 is a macro calling a function to reduce code size.
-#define Trice32_6(tid, fmt, v0, v1, v2, v3, v4, v5) Trice32fn_6(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5)) //!< Trice32_6 is a macro calling a function to reduce code size.
-#define Trice32_7(tid, fmt, v0, v1, v2, v3, v4, v5, v6) Trice32fn_7(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6)) //!< Trice32_7 is a macro calling a function to reduce code size.
-#define Trice32_8(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7) Trice32fn_8(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6), (uint32_t)(v7)) //!< Trice32_8 is a macro calling a function to reduce code size.
-#define Trice32_9(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8) Trice32fn_9(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6), (uint32_t)(v7), (uint32_t)(v8)) //!< Trice32_9 is a macro calling a function to reduce code size.
-#define Trice32_10(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) Trice32fn_10(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6), (uint32_t)(v7), (uint32_t)(v8), (uint32_t)(v9)) //!< Trice32_10 is a macro calling a function to reduce code size.
-#define Trice32_11(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) Trice32fn_11(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6), (uint32_t)(v7), (uint32_t)(v8), (uint32_t)(v9), (uint32_t)(v10)) //!< Trice32_11 is a macro calling a function to reduce code size.
-#define Trice32_12(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) Trice32fn_12(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6), (uint32_t)(v7), (uint32_t)(v8), (uint32_t)(v9), (uint32_t)(v10), (uint32_t)(v11)) //!< Trice32_12 is a macro calling a function to reduce code size.
-
-#define TRice32_0(tid, fmt) TRice32fn_0(tid) //!< TRice32_1 is a macro calling a function to reduce code size.
-#define TRice32_1(tid, fmt, v0) TRice32fn_1(tid, (uint32_t)(v0)) //!< TRice32_1 is a macro calling a function to reduce code size.
-#define TRice32_2(tid, fmt, v0, v1) TRice32fn_2(tid, (uint32_t)(v0), (uint32_t)(v1)) //!< TRice32_2 is a macro calling a function to reduce code size.
-#define TRice32_3(tid, fmt, v0, v1, v2) TRice32fn_3(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2)) //!< TRice32_3 is a macro calling a function to reduce code size.
-#define TRice32_4(tid, fmt, v0, v1, v2, v3) TRice32fn_4(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3)) //!< TRice32_4 is a macro calling a function to reduce code size.
-#define TRice32_5(tid, fmt, v0, v1, v2, v3, v4) TRice32fn_5(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4)) //!< TRice32_5 is a macro calling a function to reduce code size.
-#define TRice32_6(tid, fmt, v0, v1, v2, v3, v4, v5) TRice32fn_6(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5)) //!< TRice32_6 is a macro calling a function to reduce code size.
-#define TRice32_7(tid, fmt, v0, v1, v2, v3, v4, v5, v6) TRice32fn_7(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6)) //!< TRice32_7 is a macro calling a function to reduce code size.
-#define TRice32_8(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7) TRice32fn_8(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6), (uint32_t)(v7)) //!< TRice32_32_M is a macro calling a function to reduce code size.
-#define TRice32_9(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8) TRice32fn_9(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6), (uint32_t)(v7), (uint32_t)(v8)) //!< TRice32_9 is a macro calling a function to reduce code size.
-#define TRice32_10(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) TRice32fn_10(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6), (uint32_t)(v7), (uint32_t)(v8), (uint32_t)(v9)) //!< TRice32_10 is a macro calling a function to reduce code size.
-#define TRice32_11(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) TRice32fn_11(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6), (uint32_t)(v7), (uint32_t)(v8), (uint32_t)(v9), (uint32_t)(v10)) //!< TRice32_11 is a macro calling a function to reduce code size.
-#define TRice32_12(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) TRice32fn_12(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6), (uint32_t)(v7), (uint32_t)(v8), (uint32_t)(v9), (uint32_t)(v10), (uint32_t)(v11)) //!< TRice32_12 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice8_0(tid, fmt) trice8fn_0(tid) //!< trice8_0 is a macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_trice8_1(tid, fmt, v0) trice8fn_1(tid, (uint8_t)(v0)) //!< trice8_1 is a macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_trice8_2(tid, fmt, v0, v1) trice8fn_2(tid, (uint8_t)(v0), (uint8_t)(v1)) //!< trice8_2 ia macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_trice8_3(tid, fmt, v0, v1, v2) trice8fn_3(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2)) //!< trice8_3 ia macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_trice8_4(tid, fmt, v0, v1, v2, v3) trice8fn_4(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3)) //!< trice8_4 ia macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_trice8_5(tid, fmt, v0, v1, v2, v3, v4) trice8fn_5(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4)) //!< trice8_5 ia macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_trice8_6(tid, fmt, v0, v1, v2, v3, v4, v5) trice8fn_6(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5)) //!< trice8_6 ia macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_trice8_7(tid, fmt, v0, v1, v2, v3, v4, v5, v6) trice8fn_7(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6)) //!< trice8_7 ia macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_trice8_8(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7) trice8fn_8(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6), (uint8_t)(v7)) //!< trice8_8 ia macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_trice8_9(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8) trice8fn_9(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6), (uint8_t)(v7), (uint8_t)(v8)) //!< trice8_9 ia macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_trice8_10(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) trice8fn_10(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6), (uint8_t)(v7), (uint8_t)(v8), (uint8_t)(v9)) //!< trice8_10 ia macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_trice8_11(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) trice8fn_11(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6), (uint8_t)(v7), (uint8_t)(v8), (uint8_t)(v9), (uint8_t)(v10)) //!< trice8_1M ia macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_trice8_12(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) trice8fn_12(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6), (uint8_t)(v7), (uint8_t)(v8), (uint8_t)(v9), (uint8_t)(v10), (uint8_t)(v11)) //!< trice8_12 ia macro calling a function to reduce code size, this way avoiding code inlining.
+
+#define TRICE_INSERT_Trice8_0(tid, fmt) Trice8fn_0(tid) //!< Trice8_1 ia macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_Trice8_1(tid, fmt, v0) Trice8fn_1(tid, (uint8_t)(v0)) //!< Trice8_1 ia macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_Trice8_2(tid, fmt, v0, v1) Trice8fn_2(tid, (uint8_t)(v0), (uint8_t)(v1)) //!< Trice8_2 ia macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_Trice8_3(tid, fmt, v0, v1, v2) Trice8fn_3(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2)) //!< Trice8_3 ia macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_Trice8_4(tid, fmt, v0, v1, v2, v3) Trice8fn_4(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3)) //!< Trice8_4 ia macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_Trice8_5(tid, fmt, v0, v1, v2, v3, v4) Trice8fn_5(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4)) //!< Trice8_5 ia macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_Trice8_6(tid, fmt, v0, v1, v2, v3, v4, v5) Trice8fn_6(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5)) //!< Trice8_6 ia macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_Trice8_7(tid, fmt, v0, v1, v2, v3, v4, v5, v6) Trice8fn_7(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6)) //!< Trice8_7 ia macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_Trice8_8(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7) Trice8fn_8(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6), (uint8_t)(v7)) //!< Trice8_8 ia macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_Trice8_9(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8) Trice8fn_9(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6), (uint8_t)(v7), (uint8_t)(v8)) //!< Trice8_9 ia macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_Trice8_10(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) Trice8fn_10(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6), (uint8_t)(v7), (uint8_t)(v8), (uint8_t)(v9)) //!< Trice8_10 ia macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_Trice8_11(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) Trice8fn_11(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6), (uint8_t)(v7), (uint8_t)(v8), (uint8_t)(v9), (uint8_t)(v10)) //!< Trice8_11 ia macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_Trice8_12(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) Trice8fn_12(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6), (uint8_t)(v7), (uint8_t)(v8), (uint8_t)(v9), (uint8_t)(v10), (uint8_t)(v11)) //!< Trice8_12 ia macro calling a function to reduce code size, this way avoiding code inlining.
+
+#define TRICE_INSERT_TRice8_0(tid, fmt) TRice8fn_0(tid) //!< TRice8_0 ia macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_TRice8_1(tid, fmt, v0) TRice8fn_1(tid, (uint8_t)(v0)) //!< TRice8_1 ia macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_TRice8_2(tid, fmt, v0, v1) TRice8fn_2(tid, (uint8_t)(v0), (uint8_t)(v1)) //!< TRice8_2 ia macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_TRice8_3(tid, fmt, v0, v1, v2) TRice8fn_3(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2)) //!< TRice8_3 ia macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_TRice8_4(tid, fmt, v0, v1, v2, v3) TRice8fn_4(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3)) //!< TRice8_4 ia macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_TRice8_5(tid, fmt, v0, v1, v2, v3, v4) TRice8fn_5(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4)) //!< TRice8_5 ia macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_TRice8_6(tid, fmt, v0, v1, v2, v3, v4, v5) TRice8fn_6(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5)) //!< TRice8_6 ia macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_TRice8_7(tid, fmt, v0, v1, v2, v3, v4, v5, v6) TRice8fn_7(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6)) //!< TRice8_7 ia macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_TRice8_8(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7) TRice8fn_8(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6), (uint8_t)(v7)) //!< TRice8_8 ia macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_TRice8_9(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8) TRice8fn_9(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6), (uint8_t)(v7), (uint8_t)(v8)) //!< TRice8_9 ia macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_TRice8_10(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) TRice8fn_10(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6), (uint8_t)(v7), (uint8_t)(v8), (uint8_t)(v9)) //!< TRice8_10 ia macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_TRice8_11(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) TRice8fn_11(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6), (uint8_t)(v7), (uint8_t)(v8), (uint8_t)(v9), (uint8_t)(v10)) //!< TRice8_11 ia macro calling a function to reduce code size, this way avoiding code inlining.
+#define TRICE_INSERT_TRice8_12(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) TRice8fn_12(tid, (uint8_t)(v0), (uint8_t)(v1), (uint8_t)(v2), (uint8_t)(v3), (uint8_t)(v4), (uint8_t)(v5), (uint8_t)(v6), (uint8_t)(v7), (uint8_t)(v8), (uint8_t)(v9), (uint8_t)(v10), (uint8_t)(v11)) //!< TRice8_12 ia macro calling a function to reduce code size, this way avoiding code inlining.
+
+#define TRICE_INSERT_trice16_0(tid, fmt) trice16fn_0(tid) //!< trice16_0 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice16_1(tid, fmt, v0) trice16fn_1(tid, (uint16_t)(v0)) //!< trice16_1 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice16_2(tid, fmt, v0, v1) trice16fn_2(tid, (uint16_t)(v0), (uint16_t)(v1)) //!< trice16_2 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice16_3(tid, fmt, v0, v1, v2) trice16fn_3(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2)) //!< trice16_3 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice16_4(tid, fmt, v0, v1, v2, v3) trice16fn_4(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3)) //!< trice16_4 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice16_5(tid, fmt, v0, v1, v2, v3, v4) trice16fn_5(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4)) //!< trice16_5 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice16_6(tid, fmt, v0, v1, v2, v3, v4, v5) trice16fn_6(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5)) //!< trice16_6 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice16_7(tid, fmt, v0, v1, v2, v3, v4, v5, v6) trice16fn_7(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6)) //!< trice16_7 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice16_8(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7) trice16fn_8(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6), (uint16_t)(v7)) //!< trice16_8 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice16_9(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8) trice16fn_9(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6), (uint16_t)(v7), (uint16_t)(v8)) //!< trice16_9 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice16_10(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) trice16fn_10(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6), (uint16_t)(v7), (uint16_t)(v8), (uint16_t)(v9)) //!< trice16_10 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice16_11(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) trice16fn_11(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6), (uint16_t)(v7), (uint16_t)(v8), (uint16_t)(v9), (uint16_t)(v10)) //!< trice16_11 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice16_12(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) trice16fn_12(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6), (uint16_t)(v7), (uint16_t)(v8), (uint16_t)(v9), (uint16_t)(v10), (uint16_t)(v11)) //!< trice16_12 is a macro calling a function to reduce code size.
+
+#define TRICE_INSERT_Trice16_0(tid, fmt) Trice16fn_0(tid) //!< Trice16_0 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice16_1(tid, fmt, v0) Trice16fn_1(tid, (uint16_t)(v0)) //!< Trice16_1 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice16_2(tid, fmt, v0, v1) Trice16fn_2(tid, (uint16_t)(v0), (uint16_t)(v1)) //!< Trice16_2 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice16_3(tid, fmt, v0, v1, v2) Trice16fn_3(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2)) //!< Trice16_3 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice16_4(tid, fmt, v0, v1, v2, v3) Trice16fn_4(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3)) //!< Trice16_4 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice16_5(tid, fmt, v0, v1, v2, v3, v4) Trice16fn_5(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4)) //!< Trice16_5 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice16_6(tid, fmt, v0, v1, v2, v3, v4, v5) Trice16fn_6(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5)) //!< Trice16_6 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice16_7(tid, fmt, v0, v1, v2, v3, v4, v5, v6) Trice16fn_7(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6)) //!< Trice16_7 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice16_8(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7) Trice16fn_8(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6), (uint16_t)(v7)) //!< Trice16_8 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice16_9(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8) Trice16fn_9(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6), (uint16_t)(v7), (uint16_t)(v8)) //!< Trice16_9 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice16_10(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) Trice16fn_10(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6), (uint16_t)(v7), (uint16_t)(v8), (uint16_t)(v9)) //!< Trice16_10 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice16_11(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) Trice16fn_11(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6), (uint16_t)(v7), (uint16_t)(v8), (uint16_t)(v9), (uint16_t)(v10)) //!< Trice16_11 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice16_12(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) Trice16fn_12(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6), (uint16_t)(v7), (uint16_t)(v8), (uint16_t)(v9), (uint16_t)(v10), (uint16_t)(v11)) //!< Trice16_12 is a macro calling a function to reduce code size.
+
+#define TRICE_INSERT_TRice16_0(tid, fmt) TRice16fn_0(tid) //!< TRice16_0 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice16_1(tid, fmt, v0) TRice16fn_1(tid, (uint16_t)(v0)) //!< TRice16_1 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice16_2(tid, fmt, v0, v1) TRice16fn_2(tid, (uint16_t)(v0), (uint16_t)(v1)) //!< TRice16_2 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice16_3(tid, fmt, v0, v1, v2) TRice16fn_3(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2)) //!< TRice16_3 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice16_4(tid, fmt, v0, v1, v2, v3) TRice16fn_4(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3)) //!< TRice16_4 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice16_5(tid, fmt, v0, v1, v2, v3, v4) TRice16fn_5(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4)) //!< TRice16_5 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice16_6(tid, fmt, v0, v1, v2, v3, v4, v5) TRice16fn_6(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5)) //!< TRice16_6 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice16_7(tid, fmt, v0, v1, v2, v3, v4, v5, v6) TRice16fn_7(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6)) //!< TRice16_7 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice16_8(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7) TRice16fn_8(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6), (uint16_t)(v7)) //!< TRice16_16_M is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice16_9(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8) TRice16fn_9(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6), (uint16_t)(v7), (uint16_t)(v8)) //!< TRice16_9 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice16_10(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) TRice16fn_10(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6), (uint16_t)(v7), (uint16_t)(v8), (uint16_t)(v9)) //!< TRice16_10 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice16_11(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) TRice16fn_11(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6), (uint16_t)(v7), (uint16_t)(v8), (uint16_t)(v9), (uint16_t)(v10)) //!< TRice16_11 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice16_12(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) TRice16fn_12(tid, (uint16_t)(v0), (uint16_t)(v1), (uint16_t)(v2), (uint16_t)(v3), (uint16_t)(v4), (uint16_t)(v5), (uint16_t)(v6), (uint16_t)(v7), (uint16_t)(v8), (uint16_t)(v9), (uint16_t)(v10), (uint16_t)(v11)) //!< TRice16_12 is a macro calling a function to reduce code size.
+
+#define TRICE_INSERT_trice32_0(tid, fmt) trice32fn_0(tid) //!< trice32_0 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice32_1(tid, fmt, v0) trice32fn_1(tid, (uint32_t)(v0)) //!< trice32_1 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice32_2(tid, fmt, v0, v1) trice32fn_2(tid, (uint32_t)(v0), (uint32_t)(v1)) //!< trice32_2 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice32_3(tid, fmt, v0, v1, v2) trice32fn_3(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2)) //!< trice32_3 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice32_4(tid, fmt, v0, v1, v2, v3) trice32fn_4(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3)) //!< trice32_4 is a macro calling a function to r educe code size.
+#define TRICE_INSERT_trice32_5(tid, fmt, v0, v1, v2, v3, v4) trice32fn_5(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4)) //!< trice32_5 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice32_6(tid, fmt, v0, v1, v2, v3, v4, v5) trice32fn_6(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5)) //!< trice32_6 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice32_7(tid, fmt, v0, v1, v2, v3, v4, v5, v6) trice32fn_7(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6)) //!< trice32_7 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice32_8(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7) trice32fn_8(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6), (uint32_t)(v7)) //!< trice32_8 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice32_9(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8) trice32fn_9(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6), (uint32_t)(v7), (uint32_t)(v8)) //!< trice32_9 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice32_10(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) trice32fn_10(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6), (uint32_t)(v7), (uint32_t)(v8), (uint32_t)(v9)) //!< trice32_10 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice32_11(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) trice32fn_11(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6), (uint32_t)(v7), (uint32_t)(v8), (uint32_t)(v9), (uint32_t)(v10)) //!< trice32_11 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice32_12(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) trice32fn_12(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6), (uint32_t)(v7), (uint32_t)(v8), (uint32_t)(v9), (uint32_t)(v10), (uint32_t)(v11)) //!< trice32_12 is a macro calling a function to reduce code size.
+
+#define TRICE_INSERT_Trice32_0(tid, fmt) Trice32fn_0(tid) //!< Trice32_0 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice32_1(tid, fmt, v0) Trice32fn_1(tid, (uint32_t)(v0)) //!< Trice32_1 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice32_2(tid, fmt, v0, v1) Trice32fn_2(tid, (uint32_t)(v0), (uint32_t)(v1)) //!< Trice32_2 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice32_3(tid, fmt, v0, v1, v2) Trice32fn_3(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2)) //!< Trice32_3 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice32_4(tid, fmt, v0, v1, v2, v3) Trice32fn_4(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3)) //!< Trice32_4 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice32_5(tid, fmt, v0, v1, v2, v3, v4) Trice32fn_5(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4)) //!< Trice32_5 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice32_6(tid, fmt, v0, v1, v2, v3, v4, v5) Trice32fn_6(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5)) //!< Trice32_6 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice32_7(tid, fmt, v0, v1, v2, v3, v4, v5, v6) Trice32fn_7(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6)) //!< Trice32_7 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice32_8(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7) Trice32fn_8(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6), (uint32_t)(v7)) //!< Trice32_8 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice32_9(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8) Trice32fn_9(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6), (uint32_t)(v7), (uint32_t)(v8)) //!< Trice32_9 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice32_10(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) Trice32fn_10(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6), (uint32_t)(v7), (uint32_t)(v8), (uint32_t)(v9)) //!< Trice32_10 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice32_11(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) Trice32fn_11(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6), (uint32_t)(v7), (uint32_t)(v8), (uint32_t)(v9), (uint32_t)(v10)) //!< Trice32_11 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice32_12(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) Trice32fn_12(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6), (uint32_t)(v7), (uint32_t)(v8), (uint32_t)(v9), (uint32_t)(v10), (uint32_t)(v11)) //!< Trice32_12 is a macro calling a function to reduce code size.
+
+#define TRICE_INSERT_TRice32_0(tid, fmt) TRice32fn_0(tid) //!< TRice32_1 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice32_1(tid, fmt, v0) TRice32fn_1(tid, (uint32_t)(v0)) //!< TRice32_1 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice32_2(tid, fmt, v0, v1) TRice32fn_2(tid, (uint32_t)(v0), (uint32_t)(v1)) //!< TRice32_2 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice32_3(tid, fmt, v0, v1, v2) TRice32fn_3(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2)) //!< TRice32_3 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice32_4(tid, fmt, v0, v1, v2, v3) TRice32fn_4(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3)) //!< TRice32_4 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice32_5(tid, fmt, v0, v1, v2, v3, v4) TRice32fn_5(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4)) //!< TRice32_5 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice32_6(tid, fmt, v0, v1, v2, v3, v4, v5) TRice32fn_6(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5)) //!< TRice32_6 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice32_7(tid, fmt, v0, v1, v2, v3, v4, v5, v6) TRice32fn_7(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6)) //!< TRice32_7 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice32_8(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7) TRice32fn_8(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6), (uint32_t)(v7)) //!< TRice32_32_M is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice32_9(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8) TRice32fn_9(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6), (uint32_t)(v7), (uint32_t)(v8)) //!< TRice32_9 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice32_10(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) TRice32fn_10(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6), (uint32_t)(v7), (uint32_t)(v8), (uint32_t)(v9)) //!< TRice32_10 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice32_11(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) TRice32fn_11(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6), (uint32_t)(v7), (uint32_t)(v8), (uint32_t)(v9), (uint32_t)(v10)) //!< TRice32_11 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice32_12(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) TRice32fn_12(tid, (uint32_t)(v0), (uint32_t)(v1), (uint32_t)(v2), (uint32_t)(v3), (uint32_t)(v4), (uint32_t)(v5), (uint32_t)(v6), (uint32_t)(v7), (uint32_t)(v8), (uint32_t)(v9), (uint32_t)(v10), (uint32_t)(v11)) //!< TRice32_12 is a macro calling a function to reduce code size.
#if (TRICE_64_BIT_SUPPORT == 1)
-#define trice64_0(tid, fmt) trice64fn_0(tid) //!< trice64_1 is a macro calling a function to reduce code size.
-#define trice64_1(tid, fmt, v0) trice64fn_1(tid, (uint64_t)(v0)) //!< trice64_1 is a macro calling a function to reduce code size.
-#define trice64_2(tid, fmt, v0, v1) trice64fn_2(tid, (uint64_t)(v0), (uint64_t)(v1)) //!< trice64_2 is a macro calling a function to reduce code size.
-#define trice64_3(tid, fmt, v0, v1, v2) trice64fn_3(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2)) //!< trice64_3 is a macro calling a function to reduce code size.
-#define trice64_4(tid, fmt, v0, v1, v2, v3) trice64fn_4(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3)) //!< trice64_4 is a macro calling a function to reduce code size.
-#define trice64_5(tid, fmt, v0, v1, v2, v3, v4) trice64fn_5(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4)) //!< trice64_5 is a macro calling a function to reduce code size.
-#define trice64_6(tid, fmt, v0, v1, v2, v3, v4, v5) trice64fn_6(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5)) //!< trice64_6 is a macro calling a function to reduce code size.
-#define trice64_7(tid, fmt, v0, v1, v2, v3, v4, v5, v6) trice64fn_7(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6)) //!< trice64_7 is a macro calling a function to reduce code size.
-#define trice64_8(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7) trice64fn_8(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6), (uint64_t)(v7)) //!< trice64_8 is a macro calling a function to reduce code size.
-#define trice64_9(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8) trice64fn_9(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6), (uint64_t)(v7), (uint64_t)(v8)) //!< trice64_9 is a macro calling a function to reduce code size.
-#define trice64_10(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) trice64fn_10(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6), (uint64_t)(v7), (uint64_t)(v8), (uint64_t)(v9)) //!< trice64_10 is a macro calling a function to reduce code size.
-#define trice64_11(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) trice64fn_11(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6), (uint64_t)(v7), (uint64_t)(v8), (uint64_t)(v9), (uint64_t)(v10)) //!< trice64_11 is a macro calling a function to reduce code size.
-#define trice64_12(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) trice64fn_12(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6), (uint64_t)(v7), (uint64_t)(v8), (uint64_t)(v9), (uint64_t)(v10), (uint64_t)(v11)) //!< trice64_12 is a macro calling a function to reduce code size.
-
-#define Trice64_0(tid, fmt) Trice64fn_0(tid) //!< Trice64_0 is a macro calling a function to reduce code size.
-#define Trice64_1(tid, fmt, v0) Trice64fn_1(tid, (uint64_t)(v0)) //!< Trice64_1 is a macro calling a function to reduce code size.
-#define Trice64_2(tid, fmt, v0, v1) Trice64fn_2(tid, (uint64_t)(v0), (uint64_t)(v1)) //!< Trice64_2 is a macro calling a function to reduce code size.
-#define Trice64_3(tid, fmt, v0, v1, v2) Trice64fn_3(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2)) //!< Trice64_3 is a macro calling a function to reduce code size.
-#define Trice64_4(tid, fmt, v0, v1, v2, v3) Trice64fn_4(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3)) //!< Trice64_4 is a macro calling a function to reduce code size.
-#define Trice64_5(tid, fmt, v0, v1, v2, v3, v4) Trice64fn_5(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4)) //!< Trice64_5 is a macro calling a function to reduce code size.
-#define Trice64_6(tid, fmt, v0, v1, v2, v3, v4, v5) Trice64fn_6(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5)) //!< Trice64_6 is a macro calling a function to reduce code size.
-#define Trice64_7(tid, fmt, v0, v1, v2, v3, v4, v5, v6) Trice64fn_7(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6)) //!< Trice64_7 is a macro calling a function to reduce code size.
-#define Trice64_8(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7) Trice64fn_8(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6), (uint64_t)(v7)) //!< Trice64_8 is a macro calling a function to reduce code size.
-#define Trice64_9(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8) Trice64fn_9(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6), (uint64_t)(v7), (uint64_t)(v8)) //!< Trice64_9 is a macro calling a function to reduce code size.
-#define Trice64_10(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) Trice64fn_10(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6), (uint64_t)(v7), (uint64_t)(v8), (uint64_t)(v9)) //!< Trice64_10 is a macro calling a function to reduce code size.
-#define Trice64_11(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) Trice64fn_11(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6), (uint64_t)(v7), (uint64_t)(v8), (uint64_t)(v9), (uint64_t)(v10)) //!< Trice64_11 is a macro calling a function to reduce code size.
-#define Trice64_12(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) Trice64fn_12(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6), (uint64_t)(v7), (uint64_t)(v8), (uint64_t)(v9), (uint64_t)(v10), (uint64_t)(v11)) //!< Trice64_12 is a macro calling a function to reduce code size.
-
-#define TRice64_0(tid, fmt) TRice64fn_0(tid) //!< TRice64_0 is a macro calling a function to reduce code size.
-#define TRice64_1(tid, fmt, v0) TRice64fn_1(tid, (uint64_t)(v0)) //!< TRice64_1 is a macro calling a function to reduce code size.
-#define TRice64_2(tid, fmt, v0, v1) TRice64fn_2(tid, (uint64_t)(v0), (uint64_t)(v1)) //!< TRice64_2 is a macro calling a function to reduce code size.
-#define TRice64_3(tid, fmt, v0, v1, v2) TRice64fn_3(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2)) //!< TRice64_3 is a macro calling a function to reduce code size.
-#define TRice64_4(tid, fmt, v0, v1, v2, v3) TRice64fn_4(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3)) //!< TRice64_4 is a macro calling a function to reduce code size.
-#define TRice64_5(tid, fmt, v0, v1, v2, v3, v4) TRice64fn_5(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4)) //!< TRice64_5 is a macro calling a function to reduce code size.
-#define TRice64_6(tid, fmt, v0, v1, v2, v3, v4, v5) TRice64fn_6(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5)) //!< TRice64_6 is a macro calling a function to reduce code size.
-#define TRice64_7(tid, fmt, v0, v1, v2, v3, v4, v5, v6) TRice64fn_7(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6)) //!< TRice64_7 is a macro calling a function to reduce code size.
-#define TRice64_8(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7) TRice64fn_8(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6), (uint64_t)(v7)) //!< TRice64_64_M is a macro calling a function to reduce code size.
-#define TRice64_9(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8) TRice64fn_9(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6), (uint64_t)(v7), (uint64_t)(v8)) //!< TRice64_9 is a macro calling a function to reduce code size.
-#define TRice64_10(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) TRice64fn_10(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6), (uint64_t)(v7), (uint64_t)(v8), (uint64_t)(v9)) //!< TRice64_10 is a macro calling a function to reduce code size.
-#define TRice64_11(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) TRice64fn_11(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6), (uint64_t)(v7), (uint64_t)(v8), (uint64_t)(v9), (uint64_t)(v10)) //!< TRice64_11 is a macro calling a function to reduce code size.
-#define TRice64_12(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) TRice64fn_12(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6), (uint64_t)(v7), (uint64_t)(v8), (uint64_t)(v9), (uint64_t)(v10), (uint64_t)(v11)) //!< TRice64_12 is a macro calling a function to reduce code size.
-#endif // (TRICE_64_BIT_SUPPORT == 1)
-
+#define TRICE_INSERT_trice64_0(tid, fmt) trice64fn_0(tid) //!< trice64_1 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice64_1(tid, fmt, v0) trice64fn_1(tid, (uint64_t)(v0)) //!< trice64_1 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice64_2(tid, fmt, v0, v1) trice64fn_2(tid, (uint64_t)(v0), (uint64_t)(v1)) //!< trice64_2 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice64_3(tid, fmt, v0, v1, v2) trice64fn_3(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2)) //!< trice64_3 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice64_4(tid, fmt, v0, v1, v2, v3) trice64fn_4(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3)) //!< trice64_4 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice64_5(tid, fmt, v0, v1, v2, v3, v4) trice64fn_5(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4)) //!< trice64_5 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice64_6(tid, fmt, v0, v1, v2, v3, v4, v5) trice64fn_6(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5)) //!< trice64_6 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice64_7(tid, fmt, v0, v1, v2, v3, v4, v5, v6) trice64fn_7(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6)) //!< trice64_7 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice64_8(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7) trice64fn_8(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6), (uint64_t)(v7)) //!< trice64_8 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice64_9(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8) trice64fn_9(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6), (uint64_t)(v7), (uint64_t)(v8)) //!< trice64_9 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice64_10(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) trice64fn_10(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6), (uint64_t)(v7), (uint64_t)(v8), (uint64_t)(v9)) //!< trice64_10 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice64_11(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) trice64fn_11(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6), (uint64_t)(v7), (uint64_t)(v8), (uint64_t)(v9), (uint64_t)(v10)) //!< trice64_11 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_trice64_12(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) trice64fn_12(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6), (uint64_t)(v7), (uint64_t)(v8), (uint64_t)(v9), (uint64_t)(v10), (uint64_t)(v11)) //!< trice64_12 is a macro calling a function to reduce code size.
+
+#define TRICE_INSERT_Trice64_0(tid, fmt) Trice64fn_0(tid) //!< Trice64_0 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice64_1(tid, fmt, v0) Trice64fn_1(tid, (uint64_t)(v0)) //!< Trice64_1 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice64_2(tid, fmt, v0, v1) Trice64fn_2(tid, (uint64_t)(v0), (uint64_t)(v1)) //!< Trice64_2 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice64_3(tid, fmt, v0, v1, v2) Trice64fn_3(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2)) //!< Trice64_3 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice64_4(tid, fmt, v0, v1, v2, v3) Trice64fn_4(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3)) //!< Trice64_4 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice64_5(tid, fmt, v0, v1, v2, v3, v4) Trice64fn_5(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4)) //!< Trice64_5 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice64_6(tid, fmt, v0, v1, v2, v3, v4, v5) Trice64fn_6(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5)) //!< Trice64_6 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice64_7(tid, fmt, v0, v1, v2, v3, v4, v5, v6) Trice64fn_7(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6)) //!< Trice64_7 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice64_8(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7) Trice64fn_8(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6), (uint64_t)(v7)) //!< Trice64_8 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice64_9(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8) Trice64fn_9(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6), (uint64_t)(v7), (uint64_t)(v8)) //!< Trice64_9 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice64_10(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) Trice64fn_10(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6), (uint64_t)(v7), (uint64_t)(v8), (uint64_t)(v9)) //!< Trice64_10 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice64_11(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) Trice64fn_11(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6), (uint64_t)(v7), (uint64_t)(v8), (uint64_t)(v9), (uint64_t)(v10)) //!< Trice64_11 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_Trice64_12(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) Trice64fn_12(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6), (uint64_t)(v7), (uint64_t)(v8), (uint64_t)(v9), (uint64_t)(v10), (uint64_t)(v11)) //!< Trice64_12 is a macro calling a function to reduce code size.
+
+#define TRICE_INSERT_TRice64_0(tid, fmt) TRice64fn_0(tid) //!< TRice64_0 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice64_1(tid, fmt, v0) TRice64fn_1(tid, (uint64_t)(v0)) //!< TRice64_1 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice64_2(tid, fmt, v0, v1) TRice64fn_2(tid, (uint64_t)(v0), (uint64_t)(v1)) //!< TRice64_2 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice64_3(tid, fmt, v0, v1, v2) TRice64fn_3(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2)) //!< TRice64_3 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice64_4(tid, fmt, v0, v1, v2, v3) TRice64fn_4(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3)) //!< TRice64_4 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice64_5(tid, fmt, v0, v1, v2, v3, v4) TRice64fn_5(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4)) //!< TRice64_5 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice64_6(tid, fmt, v0, v1, v2, v3, v4, v5) TRice64fn_6(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5)) //!< TRice64_6 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice64_7(tid, fmt, v0, v1, v2, v3, v4, v5, v6) TRice64fn_7(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6)) //!< TRice64_7 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice64_8(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7) TRice64fn_8(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6), (uint64_t)(v7)) //!< TRice64_64_M is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice64_9(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8) TRice64fn_9(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6), (uint64_t)(v7), (uint64_t)(v8)) //!< TRice64_9 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice64_10(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) TRice64fn_10(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6), (uint64_t)(v7), (uint64_t)(v8), (uint64_t)(v9)) //!< TRice64_10 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice64_11(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) TRice64fn_11(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6), (uint64_t)(v7), (uint64_t)(v8), (uint64_t)(v9), (uint64_t)(v10)) //!< TRice64_11 is a macro calling a function to reduce code size.
+#define TRICE_INSERT_TRice64_12(tid, fmt, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) TRice64fn_12(tid, (uint64_t)(v0), (uint64_t)(v1), (uint64_t)(v2), (uint64_t)(v3), (uint64_t)(v4), (uint64_t)(v5), (uint64_t)(v6), (uint64_t)(v7), (uint64_t)(v8), (uint64_t)(v9), (uint64_t)(v10), (uint64_t)(v11)) //!< TRice64_12 is a macro calling a function to reduce code size.
+#endif // (TRICE_64_BIT_SUPPORT == 1)
#endif // #ifndef TRICE_ON_H_
diff --git a/src/triceRingBuffer.c b/src/triceRingBuffer.c
index 763dc488f..801b25b22 100644
--- a/src/triceRingBuffer.c
+++ b/src/triceRingBuffer.c
@@ -5,7 +5,6 @@
//! \file triceRingBuffer.c
//! \brief trice Ring Buffer implementation.
-
#include "cobs.h"
#include "tcobs.h"
#include "trice.h"
diff --git a/src/triceRx.c b/src/triceRx.c
index fc0af0a12..1ba679ef5 100644
--- a/src/triceRx.c
+++ b/src/triceRx.c
@@ -36,43 +36,43 @@ static uint32_t readU32(const uint8_t* p) {
// setBitWidthAndParamCount assigns the first resolved width and rejects later conflicts.
// Additionally it checks for matching rx->payloadBytes and assigns paramCount.
static int setBitWidthAndParamCount(triceRx_t* rx, uint8_t bitWidth) {
- if (rx->bitWidth == bitWidth){
+ if (rx->bitWidth == bitWidth) {
return TRICE_RX_RESULT_OK; // already set and identical
}
if (rx->bitWidth != TRICE_BIT_WIDTH_UNKNOWN) {
return TRICE_RX_ERR_BIT_WIDTH_CONFLICT; // already set but different
- }
- switch( bitWidth ){
- case 0:
- if (rx->payloadBytes > 0){
+ }
+ switch (bitWidth) {
+ case 0:
+ if (rx->payloadBytes > 0) {
return TRICE_RX_ERR_PAYLOAD_LEN_BITWIDTH_MISMATCH;
}
rx->paramCount = 0;
- break;
- case 8:
+ break;
+ case 8:
rx->paramCount = rx->payloadBytes;
- break;
- case 16:
- if (rx->payloadBytes & 1){
+ break;
+ case 16:
+ if (rx->payloadBytes & 1) {
return TRICE_RX_ERR_PAYLOAD_LEN_BITWIDTH_MISMATCH;
}
- rx->paramCount = rx->payloadBytes>>1;
- break;
- case 32:
- if (rx->payloadBytes & 3){
+ rx->paramCount = rx->payloadBytes >> 1;
+ break;
+ case 32:
+ if (rx->payloadBytes & 3) {
return TRICE_RX_ERR_PAYLOAD_LEN_BITWIDTH_MISMATCH;
}
- rx->paramCount = rx->payloadBytes>>2;
- break;
- case 64:
- if (rx->payloadBytes & 7){
+ rx->paramCount = rx->payloadBytes >> 2;
+ break;
+ case 64:
+ if (rx->payloadBytes & 7) {
return TRICE_RX_ERR_PAYLOAD_LEN_BITWIDTH_MISMATCH;
}
- rx->paramCount = rx->payloadBytes>>3;
- break;
+ rx->paramCount = rx->payloadBytes >> 3;
+ break;
default: // de-facto impossible because of generated tables
return TRICE_RX_ERR_INVALID_BITWIDTH_VALUE;
- break;
+ break;
}
rx->bitWidth = bitWidth;
return TRICE_RX_RESULT_OK;
@@ -153,10 +153,10 @@ int TriceParseRecord(triceRx_t* rx, const uint8_t* buf, size_t len) {
if (len < offset + (size_t)rx->payloadBytes) {
return TRICE_RX_LEN_TOO_SHORT;
}
- if (rx->payloadBytes > 0u){
+ if (rx->payloadBytes > 0u) {
rx->payload = buf + offset;
}
-
+
return (int)(offset + (size_t)rx->payloadBytes);
}
@@ -187,8 +187,7 @@ int TriceResolveLog(triceRx_t* rx, const triceLog_t* list, size_t count) {
if (e != TRICE_RX_RESULT_OK) {
return e;
}
- if ((list[i].paramCount != TRICE_LOG_PARAM_COUNT_DYNAMIC)
- && (list[i].paramCount != rx->paramCount)){
+ if ((list[i].paramCount != TRICE_LOG_PARAM_COUNT_DYNAMIC) && (list[i].paramCount != rx->paramCount)) {
return TRICE_RX_ERR_PARAM_COUNT_MISMATCH;
}
rx->paramCount = list[i].paramCount;
@@ -226,7 +225,7 @@ triceNodeFn_t fn_TriceHandleTypeX0 = 0;
//! \brief parse, classify, and dispatch one fully decoded Trice record.
//! \param node is a node specific struct. Set it to 0 if not needed.
//! \param record data start
-//! \param len record byte count
+//! \param len record byte count
//! \retval
static int TriceRxHandleRecord(const void* node, triceRx_t* rx, const uint8_t* record, size_t len) {
int used = TriceParseRecord(rx, record, len);
@@ -238,12 +237,12 @@ static int TriceRxHandleRecord(const void* node, triceRx_t* rx, const uint8_t* r
(void)node; // avoid [-Wunused-parameter]
if (TriceResolveAbc(rx, triceAbc, (size_t)triceAbcElements) == TRICE_RX_RESULT_OK) {
rx->abcFnHandler(rx);
- rx->executed_logged_handled = 0x4u;
+ rx->executed_logged_handled = 0x4u;
}
#endif
#if TRICE_RX_LOG_SUPPORT == 1
- if (fn_TricePrintLog != 0 && TriceResolveLog(rx, triceLog, (size_t)triceLogElements) == TRICE_RX_RESULT_OK){
+ if (fn_TricePrintLog != 0 && TriceResolveLog(rx, triceLog, (size_t)triceLogElements) == TRICE_RX_RESULT_OK) {
fn_TricePrintLog(node, rx);
rx->executed_logged_handled = 0x2;
}
@@ -253,11 +252,11 @@ static int TriceRxHandleRecord(const void* node, triceRx_t* rx, const uint8_t* r
if (fn_TriceHandleTypeX0 != 0 && rx->stampBits == TRICE_STAMP_BITS_UNKNOWN) {
fn_TriceHandleTypeX0(node, rx);
rx->executed_logged_handled = 0x1;
- }
+ }
#endif
#if TRICE_RX_SUPPORT == 1
- if( fn_TricePrintIgnoredID != 0 && rx->executed_logged_handled == 0) {
+ if (fn_TricePrintIgnoredID != 0 && rx->executed_logged_handled == 0) {
fn_TricePrintIgnoredID(node, rx);
}
#endif
diff --git a/src/triceRx.h b/src/triceRx.h
index 3067d8c06..69ef3fab2 100644
--- a/src/triceRx.h
+++ b/src/triceRx.h
@@ -47,24 +47,24 @@ enum {
// payload points into the caller-owned input buffer; no payload bytes are copied.
// It is a struct which gets filled during trice rx.
typedef struct triceRx_t {
- uint16_t id; // Trice id
- uint8_t bitWidth; // payload bithWidth, 0, 8, 16, 32, 64 or 0xffu for unknown. Resolved from triceAbc[] list or til.json.
- uint8_t stampBits; // `0`, `16`, or `32` valid stamp bits or 0xffu for typeX0 Trices.
- uint32_t stamp; // usually timestamp for Trice messages, any stamp for Trice ABC messages
- const uint8_t* payload; // points into the input buffer
- uint16_t payloadBytes; // byte count or count typeX0 Trice payload.
+ uint16_t id; // Trice id
+ uint8_t bitWidth; // payload bithWidth, 0, 8, 16, 32, 64 or 0xffu for unknown. Resolved from triceAbc[] list or til.json.
+ uint8_t stampBits; // `0`, `16`, or `32` valid stamp bits or 0xffu for typeX0 Trices.
+ uint32_t stamp; // usually timestamp for Trice messages, any stamp for Trice ABC messages
+ const uint8_t* payload; // points into the input buffer
+ uint16_t payloadBytes; // byte count or count typeX0 Trice payload.
uint8_t paramCount; // Parsed records keep 0 here; log resolution replaces it with a fixed count.
- uint8_t cycleCounter; // optional part of the nc field
+ uint8_t cycleCounter; // optional part of the nc field
#if TRICE_RX_ABC_SUPPORT == 1
void (*abcFnHandler)(const struct triceRx_t* rx); // abc function handler resolved from generated triceAbc[]. ( triceFn_t fn; )
#endif
#if TRICE_RX_LOG_SUPPORT == 1
- const char* pFmt; // Trice format string resolved from generated TIL metadata.
+ const char* pFmt; // Trice format string resolved from generated TIL metadata.
#if TRICE_LOCATION_SUPPORT == 1
- const char* file; // `file` is name where the Trice statements was used. Resolved from li.json.
- uint32_t line; // Source code line in `file` where the Trice statements was used. Resolved from li.json.
+ const char* file; // `file` is name where the Trice statements was used. Resolved from li.json.
+ uint32_t line; // Source code line in `file` where the Trice statements was used. Resolved from li.json.
#endif
#endif
@@ -72,7 +72,7 @@ typedef struct triceRx_t {
} triceRx_t;
// triceFn_t is the generated ABC handler signature.
-// The receive record is const during handler execution so nested
+// The receive record is const during handler execution so nested
// dispatch cannot mutate the caller's current record by accident.
typedef void (*triceFn_t)(const triceRx_t* rx);
@@ -83,7 +83,7 @@ typedef void (*triceNodeFn_t)(const void* node, const triceRx_t* rx);
//! \brief parses exactly one already deframed/decrypted Trice record at buf[0].
//! \details
//! It returns the logical record length and never consumes alignment padding after the record.
-//! It does not parse multiple records, expects deframed/decrypted data and does not use an ID table.
+//! It does not parse multiple records, expects deframed/decrypted data and does not use an ID table.
//! It expects a plain trice binary stream according to the [Trice Binary Encoding](./TriceUserManual.md#binary-encoding)
//! \li It fills:
//! \li rx->id
@@ -105,14 +105,14 @@ int TriceParseRecord(triceRx_t* rx, const uint8_t* buf, size_t len);
#if TRICE_RX_ABC_SUPPORT == 1
-//! \brief triceAbc_t is the generated ABC table entry type.
+//! \brief triceAbc_t is the generated ABC table entry type.
//! \details The field order keeps existing generated positional initializers compatible: { id, bitWidth, fn }.
//! \li `triceAbc_t` is the type for generated triceAbc[] list.
//! \li ABC metadata should be generated from `trice generate -abc path/target` and should contain ID, bit width, and function pointer.
typedef struct {
- uint16_t id; // Trice id
- uint8_t bitWidth; // payload bithWidth, 0, 8, 16, 32, 64 or 0xffu for unknown. Resolved from triceAbc[] list or til.json.
- triceFn_t fn; // abc function handler resolved from generated triceAbc[].
+ uint16_t id; // Trice id
+ uint8_t bitWidth; // payload bithWidth, 0, 8, 16, 32, 64 or 0xffu for unknown. Resolved from triceAbc[] list or til.json.
+ triceFn_t fn; // abc function handler resolved from generated triceAbc[].
} triceAbc_t;
extern const triceAbc_t triceAbc[]; // generated ABC resolver table, defined in _abc.c
@@ -123,10 +123,10 @@ extern const unsigned triceAbcElements;
//! \li The resolver searches `list[0..count-1]` for `rx->id`. If found, it fills:
//! \li rx->bitWidth
//! \li rx->fn
-//!
-//! If `rx->bitWidth` is still `TRICE_BIT_WIDTH_UNKNOWN`, the resolver sets it.
+//!
+//! If `rx->bitWidth` is still `TRICE_BIT_WIDTH_UNKNOWN`, the resolver sets it.
//! If it is already set and differs from the table entry, the resolver returns a bit-width conflict error.
-//!
+//!
//! \retval TRICE_RX_RESULT_OK on success.
//! \retval TRICE_RX_ERR_NOT_FOUND if the ID is not in the table. Unknown IDs are normal in mixed streams.
int TriceResolveAbc(triceRx_t* rx, const triceAbc_t* list, size_t count);
@@ -151,7 +151,7 @@ typedef struct {
const char* pFmt; // Trice format string resolved from til.json.
} triceLog_t;
-extern const triceLog_t triceLog[]; // generated log resolver table, defined in the generated TIL C source.
+extern const triceLog_t triceLog[]; // generated log resolver table, defined in the generated TIL C source.
extern const unsigned triceLogElements; // generated log resolver table element count, must match triceLocationElements when locations are enabled.
//! \brief TriceResolveLog attaches log rendering metadata to a parsed record.
@@ -159,7 +159,7 @@ extern const unsigned triceLogElements; // generated log resolver table element
//! \li rx->bitWidth
//! \li rx->paramCount
//! \li rx->pFmt; // Trice format string resolved from til.json.
-//!
+//!
//! The bit width and parameter count are generated TIL facts, not parsed from the Trice macro name at runtime.
//! If already assigned, the value must be identical or an error is reported.
//! \retval TRICE_RX_RESULT_OK if found.
@@ -178,7 +178,7 @@ typedef struct {
} triceLocation_t;
extern const triceLocation_t triceLocation[]; // generated Location resolver table, defined in li.json
-extern const unsigned triceLocationElements; // generated Location resolver table element count, defined in li.json, must be equal to triceLogElements
+extern const unsigned triceLocationElements; // generated Location resolver table element count, defined in li.json, must be equal to triceLogElements
//! TriceResolveLocation attaches source file and line metadata to a record.
//! \details It fills location data from a generated/transformed location table derived from `li.json`.
diff --git a/src/triceStackBuffer.c b/src/triceStackBuffer.c
index 912e0dcd8..e96b1df82 100644
--- a/src/triceStackBuffer.c
+++ b/src/triceStackBuffer.c
@@ -5,7 +5,6 @@
//! \file triceStackBuffer.c
//! \brief trice Stack Buffer implementation.
-
#include "trice.h"
#if TRICE_BUFFER == TRICE_STACK_BUFFER && TRICE_BACKEND_ACTIVE
diff --git a/src/triceStaticBuffer.c b/src/triceStaticBuffer.c
index 15cfb82b9..a0c50b4c6 100644
--- a/src/triceStaticBuffer.c
+++ b/src/triceStaticBuffer.c
@@ -5,7 +5,6 @@
//! \file triceStaticBuffer.c
//! \brief trice Static Buffer implementation.
-
#include "trice.h"
#if TRICE_BUFFER == TRICE_STATIC_BUFFER && TRICE_BACKEND_ACTIVE
diff --git a/src/triceUart.c b/src/triceUart.c
index 245bc8973..4c6775682 100644
--- a/src/triceUart.c
+++ b/src/triceUart.c
@@ -5,7 +5,6 @@
//! \file triceUart.c
//! \brief trice Uart implementation.
-
#include "trice.h"
#include
#include
@@ -109,7 +108,7 @@ TRICE_WEAK void TriceNonBlockingWriteUartB(const void* buf, size_t nByte) {
#if TRICE_CGO == 1 // automated tests
TriceWriteDeviceCgo(buf, nByte);
#else // #if TRICE_CGO == 1// automated tests
- triceOutBufferUartB = (const uint8_t*) buf;
+ triceOutBufferUartB = (const uint8_t*)buf;
triceOutIndexUartB = 0;
triceOutCountUartB = nByte;
triceTriggerTransmitUartB();
diff --git a/src/triceVariadic.h b/src/triceVariadic.h
index d8892ccc3..4c56c82a4 100644
--- a/src/triceVariadic.h
+++ b/src/triceVariadic.h
@@ -5,7 +5,6 @@
//! \file triceVariadic.h
//! \brief trice Variadic declarations and macros.
-
#ifndef TRICE_VARIADIC_H
#define TRICE_VARIADIC_H
diff --git a/src/triceX0.c b/src/triceX0.c
index dbc86b529..ee282680b 100644
--- a/src/triceX0.c
+++ b/src/triceX0.c
@@ -36,95 +36,95 @@
* interleaving with other Trice writes.
*/
void triceX0(const void* buf, uint16_t len) {
- /*
- * Worst-case padding is 3 bytes. The physical buffered record size is:
- *
- * 2 + len + pad
- *
- * where the leading 2 bytes are the X0 header and pad is chosen so that
- * the total size is 32-bit aligned.
- */
- uint16_t limit = TRICE_SINGLE_MAX_SIZE - 5u;
+ /*
+ * Worst-case padding is 3 bytes. The physical buffered record size is:
+ *
+ * 2 + len + pad
+ *
+ * where the leading 2 bytes are the X0 header and pad is chosen so that
+ * the total size is 32-bit aligned.
+ */
+ uint16_t limit = TRICE_SINGLE_MAX_SIZE - 5u;
#if TRICE_SINGLE_MAX_SIZE > 0x4004u
- /*
- * X0 counted stores the payload length in only 14 bits. If the configured
- * single-record buffer size is larger than the X0 count range, clamp the
- * logical payload length to the protocol maximum.
- *
- * The check is only needed when TRICE_SINGLE_MAX_SIZE - 5 can exceed
- * 0x3fff, i.e. when TRICE_SINGLE_MAX_SIZE > 0x4004.
- */
- if (limit > 0x3fffu) {
- limit = 0x3fffu;
- }
+ /*
+ * X0 counted stores the payload length in only 14 bits. If the configured
+ * single-record buffer size is larger than the X0 count range, clamp the
+ * logical payload length to the protocol maximum.
+ *
+ * The check is only needed when TRICE_SINGLE_MAX_SIZE - 5 can exceed
+ * 0x3fff, i.e. when TRICE_SINGLE_MAX_SIZE > 0x4004.
+ */
+ if (limit > 0x3fffu) {
+ limit = 0x3fffu;
+ }
#endif
- /*
- * Keep the same truncation behavior style as dynamic Trice buffers:
- * emit diagnostics and send a truncated payload instead of overflowing
- * the record buffer or the 14-bit X0 count field.
- */
- if (len > limit) {
- TRICE_DYN_STRG_BUF_TRUNCATE_COUNT_INCREMENT();
- len = limit;
- }
+ /*
+ * Keep the same truncation behavior style as dynamic Trice buffers:
+ * emit diagnostics and send a truncated payload instead of overflowing
+ * the record buffer or the 14-bit X0 count field.
+ */
+ if (len > limit) {
+ TRICE_DYN_STRG_BUF_TRUNCATE_COUNT_INCREMENT();
+ len = limit;
+ }
- /*
- * Enter the Trice critical section before touching the shared write
- * position and output buffer.
- */
- TRICE_ENTER
+ /*
+ * Enter the Trice critical section before touching the shared write
+ * position and output buffer.
+ */
+ TRICE_ENTER
- /*
- * Write the X0 header. Since len <= 0x3fff, the two selector bits remain
- * zero and the lower 14 bits contain the payload byte count.
- */
- TRICE_PUT16(len);
+ /*
+ * Write the X0 header. Since len <= 0x3fff, the two selector bits remain
+ * zero and the lower 14 bits contain the payload byte count.
+ */
+ TRICE_PUT16(len);
- /*
- * After TRICE_PUT16(), TriceBufferWritePosition points immediately after
- * the 2-byte X0 header. Copy the payload right there.
- *
- * memcpy(..., ..., 0) is intentionally allowed here; avoiding a branch is
- * preferable on this hot, small helper path.
- */
- uint8_t* p = (uint8_t*)TriceBufferWritePosition;
- memcpy(p, buf, len);
+ /*
+ * After TRICE_PUT16(), TriceBufferWritePosition points immediately after
+ * the 2-byte X0 header. Copy the payload right there.
+ *
+ * memcpy(..., ..., 0) is intentionally allowed here; avoiding a branch is
+ * preferable on this hot, small helper path.
+ */
+ uint8_t* p = (uint8_t*)TriceBufferWritePosition;
+ memcpy(p, buf, len);
- /*
- * Compute the number of padding bytes needed to align the total physical
- * record size to 4 bytes.
- *
- * At this point, 2 bytes have already been written before p. We need:
- *
- * (2 + len + pad) % 4 == 0
- *
- * This compact form is equivalent to:
- *
- * pad = (4 - ((2 + len) & 3)) & 3
- */
- unsigned pad = (2u - (unsigned)len) & 3u;
+ /*
+ * Compute the number of padding bytes needed to align the total physical
+ * record size to 4 bytes.
+ *
+ * At this point, 2 bytes have already been written before p. We need:
+ *
+ * (2 + len + pad) % 4 == 0
+ *
+ * This compact form is equivalent to:
+ *
+ * pad = (4 - ((2 + len) & 3)) & 3
+ */
+ unsigned pad = (2u - (unsigned)len) & 3u;
- /*
- * Only clear padding bytes when padding exists. This avoids an unnecessary
- * memset call for the already aligned case.
- */
- if (pad != 0u) {
- memset(p + len, 0, pad);
- }
+ /*
+ * Only clear padding bytes when padding exists. This avoids an unnecessary
+ * memset call for the already aligned case.
+ */
+ if (pad != 0u) {
+ memset(p + len, 0, pad);
+ }
- /*
- * Advance the shared write position to the next 32-bit aligned record
- * boundary.
- */
- TriceBufferWritePosition = (uint32_t*)(p + len + pad);
+ /*
+ * Advance the shared write position to the next 32-bit aligned record
+ * boundary.
+ */
+ TriceBufferWritePosition = (uint32_t*)(p + len + pad);
- /*
- * Leave the Trice critical section and let the configured Trice backend
- * continue exactly as for normal Trice records.
- */
- TRICE_LEAVE
+ /*
+ * Leave the Trice critical section and let the configured Trice backend
+ * continue exactly as for normal Trice records.
+ */
+ TRICE_LEAVE
}
#endif // #if TRICE_TX_X0_COUNTED_BUFFER_SUPPORT == 1
diff --git a/src/triceX0.h b/src/triceX0.h
index b9c775edf..45fde113f 100644
--- a/src/triceX0.h
+++ b/src/triceX0.h
@@ -39,8 +39,8 @@ extern "C" {
void triceX0(const void* buf, uint16_t len);
#else
static inline void triceX0(const void* buf, uint16_t len) {
- (void)buf;
- (void)len;
+ (void)buf;
+ (void)len;
}
#endif
diff --git a/src/xtea.c b/src/xtea.c
index 0d37e8502..c1b244958 100644
--- a/src/xtea.c
+++ b/src/xtea.c
@@ -5,7 +5,6 @@
//! \file xtea.c
//! \brief xtea implementation.
-
#include "xtea.h"
#include "trice.h"
diff --git a/src/xtea.h b/src/xtea.h
index 31b0dc16c..718e3842b 100644
--- a/src/xtea.h
+++ b/src/xtea.h
@@ -5,7 +5,6 @@
//! \file xtea.h
//! \brief xtea declarations and macros.
-
#ifndef TRICE_XTEA_H_
#define TRICE_XTEA_H_
diff --git a/til.c b/til.c
index bcf5b87e1..383a5cf4e 100644
--- a/til.c
+++ b/til.c
@@ -10,2461 +10,2461 @@
#include "triceRx.h"
const triceLog_t triceLog[] = {
- /* Trice type ( extended ) */ /* id, bitWidth, paramCount, format-string */
- /* TRICE8_B ( TRICE8B ) */ { 13271u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02x\n" },
- /* TRICE8_B ( TRICE8B ) */ { 13274u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02x\n" },
- /* TRICE16_B ( TRICE16B ) */ { 13281u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %04x\n" },
- /* TRICE64_B ( TRICE64B ) */ { 13291u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %016x\n" },
- /* TRice64B ( TRice64B ) */ { 13292u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %016x\n" },
- /* Trice64B ( Trice64B ) */ { 13293u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %016x\n" },
- /* trice64B ( trice64B ) */ { 13294u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %016x\n" },
- /* trice8B ( trice8B ) */ { 13277u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02llx\n" },
- /* Trice8B ( Trice8B ) */ { 13276u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02lx\n" },
- /* TRICE8_B ( TRICE8B ) */ { 15243u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02x " },
- /* TRICE8_B ( TRICE8B ) */ { 15246u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02x " },
- /* TRICE8_B ( TRICE8B ) */ { 15249u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02x " },
- /* trice8B ( trice8B ) */ { 13280u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02x\n" },
- /* TRice8B ( TRice8B ) */ { 13275u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02zx\n" },
- /* TRice16B ( TRice16B ) */ { 13282u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %04x\n" },
- /* Trice16B ( Trice16B ) */ { 13283u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %04x\n" },
- /* trice16B ( trice16B ) */ { 13284u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %04x\n" },
- /* TRICE32_B ( TRICE32B ) */ { 13286u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %08x\n" },
- /* TRice32B ( TRice32B ) */ { 13287u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %08x\n" },
- /* Trice32B ( Trice32B ) */ { 13288u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %08x\n" },
- /* trice32B ( trice32B ) */ { 13289u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %08x\n" },
- /* TRICE ( TRICE32_1 ) */ { 15239u, 32u, 1u, " = %d\n" },
- /* TRICE ( TRICE32_1 ) */ { 15241u, 32u, 1u, " = %d\n" },
- /* TRice8B ( TRice8B ) */ { 15285u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "%3x\n" },
- /* TRice8B ( TRice8B ) */ { 15286u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "%3x\n" },
- /* TRICE8_B ( TRICE8B ) */ { 13273u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "%4ld\n" },
- /* trice ( trice_0 ) */ { 13165u, 32u, 0u, "--------------------------------------------------\n" },
- /* trice ( trice_0 ) */ { 13173u, 32u, 0u, "--------------------------------------------------\n" },
- /* TRICE ( TRICE_0 ) */ { 14695u, 32u, 0u, "--------------------------------------------------\n" },
- /* TRICE ( TRICE_0 ) */ { 14696u, 32u, 0u, "--------------------------------------------------\n" },
- /* TRICE ( TRICE_0 ) */ { 14698u, 32u, 0u, "--------------------------------------------------\n" },
- /* TRICE ( TRICE_0 ) */ { 14700u, 32u, 0u, "--------------------------------------------------\n" },
- /* trice ( trice_0 ) */ { 14806u, 32u, 0u, "1" },
- /* trice ( trice_0 ) */ { 14807u, 32u, 0u, "2" },
- /* trice ( trice_0 ) */ { 14808u, 32u, 0u, "3" },
- /* trice ( trice_0 ) */ { 14809u, 32u, 0u, "4" },
- /* trice ( trice32_4 ) */ { 15278u, 32u, 4u, "A user printi call with integer and float values: %u, %d, %x, %2.1f\n" },
- /* trice ( trice_0 ) */ { 15276u, 32u, 0u, "A user printi call without values.\n" },
- /* TRICE ( TRICE_0 ) */ { 13713u, 32u, 0u, "ALARM:red+i:white+h\n" },
- /* trice ( trice_0 ) */ { 13763u, 32u, 0u, "ALARM:red+i:white+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13813u, 32u, 0u, "ALARM:red+i:white+h\n" },
- /* Trice ( Trice_0 ) */ { 13863u, 32u, 0u, "ALARM:red+i:white+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13913u, 32u, 0u, "ALARM:red+i:white+h\n" },
- /* TRice ( TRice_0 ) */ { 13963u, 32u, 0u, "ALARM:red+i:white+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13711u, 32u, 0u, "ALERT:magenta:magenta+h\n" },
- /* trice ( trice_0 ) */ { 13761u, 32u, 0u, "ALERT:magenta:magenta+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13811u, 32u, 0u, "ALERT:magenta:magenta+h\n" },
- /* Trice ( Trice_0 ) */ { 13861u, 32u, 0u, "ALERT:magenta:magenta+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13911u, 32u, 0u, "ALERT:magenta:magenta+h\n" },
- /* TRice ( TRice_0 ) */ { 13961u, 32u, 0u, "ALERT:magenta:magenta+h\n" },
- /* triceAssertFalse ( ) */ { 13052u, 32u, 0u, "ASSERT:flag not false!\n" },
- /* TriceAssertFalse ( ) */ { 13053u, 32u, 0u, "ASSERT:flag not false!\n" },
- /* TRiceAssertFalse ( ) */ { 13054u, 32u, 0u, "ASSERT:flag not false!\n" },
- /* triceAssertFalse ( ) */ { 13067u, 32u, 0u, "ASSERT:flag not false!\n" },
- /* TriceAssertFalse ( ) */ { 13069u, 32u, 0u, "ASSERT:flag not false!\n" },
- /* TRiceAssertFalse ( ) */ { 13071u, 32u, 0u, "ASSERT:flag not false!\n" },
- /* triceAssertTrue ( ) */ { 13046u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* TriceAssertTrue ( ) */ { 13047u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* TRiceAssertTrue ( ) */ { 13048u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* triceAssert ( ) */ { 13049u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* TriceAssert ( ) */ { 13050u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* TRiceAssert ( ) */ { 13051u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* triceAssertTrue ( ) */ { 13055u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* TriceAssertTrue ( ) */ { 13057u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* TRiceAssertTrue ( ) */ { 13059u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* triceAssert ( ) */ { 13061u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* TriceAssert ( ) */ { 13063u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* TRiceAssert ( ) */ { 13065u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* triceAssertOrReturn ( ) */ { 13073u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* TriceAssertOrReturn ( ) */ { 13075u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* TRiceAssertOrReturn ( ) */ { 13077u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* triceAssertOrReturnValue ( ) */ { 15257u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* TriceAssertOrReturnValue ( ) */ { 15258u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* TRiceAssertOrReturnValue ( ) */ { 15259u, 32u, 0u, "ASSERT:flag not true!\n" },
- /* TRICE ( TRICE_0 ) */ { 13712u, 32u, 0u, "ASSERT:yellow+i:blue\n" },
- /* trice ( trice_0 ) */ { 13762u, 32u, 0u, "ASSERT:yellow+i:blue\n" },
- /* TRICE ( TRICE_0 ) */ { 13812u, 32u, 0u, "ASSERT:yellow+i:blue\n" },
- /* Trice ( Trice_0 ) */ { 13862u, 32u, 0u, "ASSERT:yellow+i:blue\n" },
- /* TRICE ( TRICE_0 ) */ { 13912u, 32u, 0u, "ASSERT:yellow+i:blue\n" },
- /* TRice ( TRice_0 ) */ { 13962u, 32u, 0u, "ASSERT:yellow+i:blue\n" },
- /* TRICE ( TRICE32_1 ) */ { 14703u, 32u, 1u, "ATT:attention message, SysTick is %6u\n" },
- /* TRICE ( TRICE_0 ) */ { 13695u, 32u, 0u, "ATTENTION:11:green\n" },
- /* trice ( trice_0 ) */ { 13745u, 32u, 0u, "ATTENTION:11:green\n" },
- /* TRICE ( TRICE_0 ) */ { 13795u, 32u, 0u, "ATTENTION:11:green\n" },
- /* Trice ( Trice_0 ) */ { 13845u, 32u, 0u, "ATTENTION:11:green\n" },
- /* TRICE ( TRICE_0 ) */ { 13895u, 32u, 0u, "ATTENTION:11:green\n" },
- /* TRice ( TRice_0 ) */ { 13945u, 32u, 0u, "ATTENTION:11:green\n" },
- /* TRICE8_B ( TRICE8B ) */ { 13272u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "BUF: %02x\n" },
- /* TRICE ( TRICE_0 ) */ { 13691u, 32u, 0u, "CRITICAL:red+i:default+h\n" },
- /* trice ( trice_0 ) */ { 13741u, 32u, 0u, "CRITICAL:red+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13791u, 32u, 0u, "CRITICAL:red+i:default+h\n" },
- /* Trice ( Trice_0 ) */ { 13841u, 32u, 0u, "CRITICAL:red+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13891u, 32u, 0u, "CRITICAL:red+i:default+h\n" },
- /* TRice ( TRice_0 ) */ { 13941u, 32u, 0u, "CRITICAL:red+i:default+h\n" },
- /* trice ( trice32_1 ) */ { 13003u, 32u, 1u, "CUSTOM_PRINT example: the right answer is: %d\n" },
- /* trice ( trice32_1 ) */ { 15261u, 32u, 1u, "CUSTOM_PRINT example: the right answer is: %d\n" },
- /* TRICE ( TRICE32_1 ) */ { 14706u, 32u, 1u, "DBG:debug message, SysTick is %6u\n" },
- /* TRICE ( TRICE_0 ) */ { 13697u, 32u, 0u, "DEBUG:130+i\n" },
- /* trice ( trice_0 ) */ { 13747u, 32u, 0u, "DEBUG:130+i\n" },
- /* TRICE ( TRICE_0 ) */ { 13797u, 32u, 0u, "DEBUG:130+i\n" },
- /* Trice ( Trice_0 ) */ { 13847u, 32u, 0u, "DEBUG:130+i\n" },
- /* TRICE ( TRICE_0 ) */ { 13897u, 32u, 0u, "DEBUG:130+i\n" },
- /* TRice ( TRice_0 ) */ { 13947u, 32u, 0u, "DEBUG:130+i\n" },
- /* TRICE ( TRICE_0 ) */ { 13709u, 32u, 0u, "DEFAULT:off\n" },
- /* trice ( trice_0 ) */ { 13759u, 32u, 0u, "DEFAULT:off\n" },
- /* TRICE ( TRICE_0 ) */ { 13809u, 32u, 0u, "DEFAULT:off\n" },
- /* Trice ( Trice_0 ) */ { 13859u, 32u, 0u, "DEFAULT:off\n" },
- /* TRICE ( TRICE_0 ) */ { 13909u, 32u, 0u, "DEFAULT:off\n" },
- /* TRice ( TRice_0 ) */ { 13959u, 32u, 0u, "DEFAULT:off\n" },
- /* TRICE ( TRICE32_1 ) */ { 14704u, 32u, 1u, "DIA:diagnostics message, SysTick is %6u\n" },
- /* TRICE ( TRICE_0 ) */ { 13705u, 32u, 0u, "DIAG:yellow+i:default+h\n" },
- /* trice ( trice_0 ) */ { 13755u, 32u, 0u, "DIAG:yellow+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13805u, 32u, 0u, "DIAG:yellow+i:default+h\n" },
- /* Trice ( Trice_0 ) */ { 13855u, 32u, 0u, "DIAG:yellow+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13905u, 32u, 0u, "DIAG:yellow+i:default+h\n" },
- /* TRice ( TRice_0 ) */ { 13955u, 32u, 0u, "DIAG:yellow+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13692u, 32u, 0u, "EMERGENCY:red+i:blue\n" },
- /* trice ( trice_0 ) */ { 13742u, 32u, 0u, "EMERGENCY:red+i:blue\n" },
- /* TRICE ( TRICE_0 ) */ { 13792u, 32u, 0u, "EMERGENCY:red+i:blue\n" },
- /* Trice ( Trice_0 ) */ { 13842u, 32u, 0u, "EMERGENCY:red+i:blue\n" },
- /* TRICE ( TRICE_0 ) */ { 13892u, 32u, 0u, "EMERGENCY:red+i:blue\n" },
- /* TRice ( TRice_0 ) */ { 13942u, 32u, 0u, "EMERGENCY:red+i:blue\n" },
- /* TRICE ( TRICE32_1 ) */ { 14701u, 32u, 1u, "ERR:error message, SysTick is %6u\n" },
- /* TRICE ( TRICE_0 ) */ { 13693u, 32u, 0u, "ERROR:11:red\n" },
- /* trice ( trice_0 ) */ { 13743u, 32u, 0u, "ERROR:11:red\n" },
- /* TRICE ( TRICE_0 ) */ { 13793u, 32u, 0u, "ERROR:11:red\n" },
- /* Trice ( Trice_0 ) */ { 13843u, 32u, 0u, "ERROR:11:red\n" },
- /* TRICE ( TRICE_0 ) */ { 13893u, 32u, 0u, "ERROR:11:red\n" },
- /* TRice ( TRice_0 ) */ { 13943u, 32u, 0u, "ERROR:11:red\n" },
- /* TRICE ( TRICE_0 ) */ { 13690u, 32u, 0u, "FATAL:magenta+b:red\n" },
- /* trice ( trice_0 ) */ { 13740u, 32u, 0u, "FATAL:magenta+b:red\n" },
- /* TRICE ( TRICE_0 ) */ { 13790u, 32u, 0u, "FATAL:magenta+b:red\n" },
- /* Trice ( Trice_0 ) */ { 13840u, 32u, 0u, "FATAL:magenta+b:red\n" },
- /* TRICE ( TRICE_0 ) */ { 13890u, 32u, 0u, "FATAL:magenta+b:red\n" },
- /* TRice ( TRice_0 ) */ { 13940u, 32u, 0u, "FATAL:magenta+b:red\n" },
- /* trice ( trice32_1 ) */ { 13002u, 32u, 1u, "Fun %x!\n" },
- /* TRice ( TRice_0 ) */ { 15281u, 32u, 0u, "Hello " },
- /* TRice ( TRice_0 ) */ { 15287u, 32u, 0u, "Hello " },
- /* TRice ( TRice_0 ) */ { 13030u, 32u, 0u, "Hello World!\n" },
- /* TRice ( TRice_0 ) */ { 15260u, 32u, 0u, "Hello World!\n" },
- /* TRice ( TRice_0 ) */ { 15262u, 32u, 0u, "Hello World!\n" },
- /* TRice ( TRice_0 ) */ { 15291u, 32u, 0u, "Hello World!\n" },
- /* TRice ( TRice_0 ) */ { 15308u, 32u, 0u, "Hello World!\n" },
- /* trice ( trice_0 ) */ { 15284u, 32u, 0u, "Hello again\n" },
- /* trice ( trice_0 ) */ { 15290u, 32u, 0u, "Hello again\n" },
- /* TRICE ( TRICE_0 ) */ { 13696u, 32u, 0u, "INFO:cyan+b:default+h\n" },
- /* trice ( trice_0 ) */ { 13746u, 32u, 0u, "INFO:cyan+b:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13796u, 32u, 0u, "INFO:cyan+b:default+h\n" },
- /* Trice ( Trice_0 ) */ { 13846u, 32u, 0u, "INFO:cyan+b:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13896u, 32u, 0u, "INFO:cyan+b:default+h\n" },
- /* TRice ( TRice_0 ) */ { 13946u, 32u, 0u, "INFO:cyan+b:default+h\n" },
- /* TRICE ( TRICE32_1 ) */ { 14712u, 32u, 1u, "INFO:informal message, SysTick is %6u\n" },
- /* TRICE ( TRICE_0 ) */ { 13706u, 32u, 0u, "INTERRUPT:magenta+i:default+h\n" },
- /* trice ( trice_0 ) */ { 13756u, 32u, 0u, "INTERRUPT:magenta+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13806u, 32u, 0u, "INTERRUPT:magenta+i:default+h\n" },
- /* Trice ( Trice_0 ) */ { 13856u, 32u, 0u, "INTERRUPT:magenta+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13906u, 32u, 0u, "INTERRUPT:magenta+i:default+h\n" },
- /* TRice ( TRice_0 ) */ { 13956u, 32u, 0u, "INTERRUPT:magenta+i:default+h\n" },
- /* TRICE ( TRICE32_1 ) */ { 14710u, 32u, 1u, "ISR:interrupt message, SysTick is %6u\n" },
- /* TRICE ( TRICE_0 ) */ { 13700u, 32u, 0u, "MESSAGE:green+h:black\n" },
- /* trice ( trice_0 ) */ { 13750u, 32u, 0u, "MESSAGE:green+h:black\n" },
- /* TRICE ( TRICE_0 ) */ { 13800u, 32u, 0u, "MESSAGE:green+h:black\n" },
- /* Trice ( Trice_0 ) */ { 13850u, 32u, 0u, "MESSAGE:green+h:black\n" },
- /* TRICE ( TRICE_0 ) */ { 13900u, 32u, 0u, "MESSAGE:green+h:black\n" },
- /* TRice ( TRice_0 ) */ { 13950u, 32u, 0u, "MESSAGE:green+h:black\n" },
- /* TRICE ( TRICE32_1 ) */ { 13331u, 32u, 1u, "MSG:1/11 = %g\n" },
- /* TRICE ( TRICE32_1 ) */ { 14711u, 32u, 1u, "MSG:normal message, SysTick is %6u\n" },
- /* TRICE ( TRICE_0 ) */ { 13710u, 32u, 0u, "NOTICE:blue:white+h\n" },
- /* trice ( trice_0 ) */ { 13760u, 32u, 0u, "NOTICE:blue:white+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13810u, 32u, 0u, "NOTICE:blue:white+h\n" },
- /* Trice ( Trice_0 ) */ { 13860u, 32u, 0u, "NOTICE:blue:white+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13910u, 32u, 0u, "NOTICE:blue:white+h\n" },
- /* TRice ( TRice_0 ) */ { 13960u, 32u, 0u, "NOTICE:blue:white+h\n" },
- /* TRICE ( TRICE32_1 ) */ { 14708u, 32u, 1u, "RD:read message, SysTick is %6u\n" },
- /* TRICE ( TRICE_0 ) */ { 13701u, 32u, 0u, "READ:black+i:yellow+h\n" },
- /* trice ( trice_0 ) */ { 13751u, 32u, 0u, "READ:black+i:yellow+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13801u, 32u, 0u, "READ:black+i:yellow+h\n" },
- /* Trice ( Trice_0 ) */ { 13851u, 32u, 0u, "READ:black+i:yellow+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13901u, 32u, 0u, "READ:black+i:yellow+h\n" },
- /* TRice ( TRice_0 ) */ { 13951u, 32u, 0u, "READ:black+i:yellow+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13703u, 32u, 0u, "RECEIVE:black+h:black\n" },
- /* trice ( trice_0 ) */ { 13753u, 32u, 0u, "RECEIVE:black+h:black\n" },
- /* TRICE ( TRICE_0 ) */ { 13803u, 32u, 0u, "RECEIVE:black+h:black\n" },
- /* Trice ( Trice_0 ) */ { 13853u, 32u, 0u, "RECEIVE:black+h:black\n" },
- /* TRICE ( TRICE_0 ) */ { 13903u, 32u, 0u, "RECEIVE:black+h:black\n" },
- /* TRice ( TRice_0 ) */ { 13953u, 32u, 0u, "RECEIVE:black+h:black\n" },
- /* Trice64F ( Trice64F ) */ { 13310u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZc" },
- /* Trice64F ( Trice64F ) */ { 15306u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZc" },
- /* Trice64C ( Trice64C ) */ { 15779u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZc" },
- /* trice64F ( trice64F ) */ { 13311u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZd" },
- /* trice64C ( trice64C ) */ { 15312u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZd" },
- /* trice64C ( trice64C ) */ { 15313u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZd" },
- /* trice64C ( trice64C ) */ { 15314u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZd" },
- /* trice64C ( trice64C ) */ { 16110u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZd" },
- /* trice64C ( trice64C ) */ { 16155u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZd" },
- /* trice64F ( trice64F ) */ { 15307u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "Rpc:FunctionNameZd" },
- /* triceS ( triceS ) */ { 15280u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"A user ... with string, integer and float values: %u, %d, %x, %2.1f, %s and %s\n\"')SAlias_Strg" },
- /* triceS ( triceS ) */ { 15279u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"A user prints call with integer and float values: %u, %d, %x, %2.1f\n\"')SAlias_Strg" },
- /* triceS ( triceS ) */ { 15277u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"A user prints call without values.\n\"')SAlias_Strg" },
- /* triceS ( triceS ) */ { 15274u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s....\n\"')SAlias_Strg" },
- /* triceS ( triceS ) */ { 15273u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s...\n\"')SAlias_Strg" },
- /* triceS ( triceS ) */ { 15271u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s..\n\"')SAlias_Strg" },
- /* triceS ( triceS ) */ { 15264u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s.\n\"')SAlias_Strg" },
- /* triceS ( triceS ) */ { 15265u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s.\n\"')SAlias_Strg" },
- /* triceS ( triceS ) */ { 15266u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s.\n\"')SAlias_Strg" },
- /* triceS ( triceS ) */ { 15267u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s.\n\"')SAlias_Strg" },
- /* triceS ( triceS ) */ { 15269u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s.\n\"')SAlias_Strg" },
- /* triceS ( triceS ) */ { 15270u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s.\n\"')SAlias_Strg" },
- /* triceS ( triceS ) */ { 15275u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:'-alias' & '-salias' contributor is %s.\n\"')SAlias_Strg" },
- /* triceS ( triceS ) */ { 13004u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('theFastFoundAnswer == theRightAnswer')SAlias_Strg" },
- /* triceS ( triceS ) */ { 15263u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('theFastFoundAnswer == theRightAnswer')SAlias_Strg" },
- /* triceS ( triceS ) */ { 13006u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('theFastFoundAnswer == theRightAnswer, (char*)\"'%s' Am, it is %d\"')SAlias_Strg" },
- /* triceS ( triceS ) */ { 15272u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('theFastFoundAnswer == theRightAnswer, (char*)\"'%s' Am, it is %d\"')SAlias_Strg" },
- /* triceS ( triceS ) */ { 13005u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('theFastFoundAnswer == theRightAnswer, (char*)theQuestion ')SAlias_Strg" },
- /* triceS ( triceS ) */ { 15268u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('theFastFoundAnswer == theRightAnswer, (char*)theQuestion ')SAlias_Strg" },
- /* trice64B ( trice64B ) */ { 13295u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SIG: %016x\n" },
- /* TRICE ( TRICE32_1 ) */ { 14707u, 32u, 1u, "SIG:signal message, SysTick is %6u\n" },
- /* TRICE ( TRICE_0 ) */ { 13707u, 32u, 0u, "SIGNAL:118+i\n" },
- /* trice ( trice_0 ) */ { 13757u, 32u, 0u, "SIGNAL:118+i\n" },
- /* TRICE ( TRICE_0 ) */ { 13807u, 32u, 0u, "SIGNAL:118+i\n" },
- /* Trice ( Trice_0 ) */ { 13857u, 32u, 0u, "SIGNAL:118+i\n" },
- /* TRICE ( TRICE_0 ) */ { 13907u, 32u, 0u, "SIGNAL:118+i\n" },
- /* TRice ( TRice_0 ) */ { 13957u, 32u, 0u, "SIGNAL:118+i\n" },
- /* TRICE ( TRICE_0 ) */ { 13708u, 32u, 0u, "TEST:yellow+h:black\n" },
- /* trice ( trice_0 ) */ { 13758u, 32u, 0u, "TEST:yellow+h:black\n" },
- /* TRICE ( TRICE_0 ) */ { 13808u, 32u, 0u, "TEST:yellow+h:black\n" },
- /* Trice ( Trice_0 ) */ { 13858u, 32u, 0u, "TEST:yellow+h:black\n" },
- /* TRICE ( TRICE_0 ) */ { 13908u, 32u, 0u, "TEST:yellow+h:black\n" },
- /* TRice ( TRice_0 ) */ { 13958u, 32u, 0u, "TEST:yellow+h:black\n" },
- /* TRICE ( TRICE32_1 ) */ { 14705u, 32u, 1u, "TIM:timing message, SysTick is %6u\n" },
- /* TRICE ( TRICE_0 ) */ { 13699u, 32u, 0u, "TIME:blue+i:blue+h\n" },
- /* trice ( trice_0 ) */ { 13749u, 32u, 0u, "TIME:blue+i:blue+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13799u, 32u, 0u, "TIME:blue+i:blue+h\n" },
- /* Trice ( Trice_0 ) */ { 13849u, 32u, 0u, "TIME:blue+i:blue+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13899u, 32u, 0u, "TIME:blue+i:blue+h\n" },
- /* TRice ( TRice_0 ) */ { 13949u, 32u, 0u, "TIME:blue+i:blue+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13698u, 32u, 0u, "TRACE:default+i:default+h\n" },
- /* trice ( trice_0 ) */ { 13748u, 32u, 0u, "TRACE:default+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13798u, 32u, 0u, "TRACE:default+i:default+h\n" },
- /* Trice ( Trice_0 ) */ { 13848u, 32u, 0u, "TRACE:default+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13898u, 32u, 0u, "TRACE:default+i:default+h\n" },
- /* TRice ( TRice_0 ) */ { 13948u, 32u, 0u, "TRACE:default+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13704u, 32u, 0u, "TRANSMIT:black:black+h\n" },
- /* trice ( trice_0 ) */ { 13754u, 32u, 0u, "TRANSMIT:black:black+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13804u, 32u, 0u, "TRANSMIT:black:black+h\n" },
- /* Trice ( Trice_0 ) */ { 13854u, 32u, 0u, "TRANSMIT:black:black+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13904u, 32u, 0u, "TRANSMIT:black:black+h\n" },
- /* TRice ( TRice_0 ) */ { 13954u, 32u, 0u, "TRANSMIT:black:black+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13714u, 32u, 0u, "VERBOSE:blue:default\n" },
- /* trice ( trice_0 ) */ { 13764u, 32u, 0u, "VERBOSE:blue:default\n" },
- /* TRICE ( TRICE_0 ) */ { 13814u, 32u, 0u, "VERBOSE:blue:default\n" },
- /* Trice ( Trice_0 ) */ { 13864u, 32u, 0u, "VERBOSE:blue:default\n" },
- /* TRICE ( TRICE_0 ) */ { 13914u, 32u, 0u, "VERBOSE:blue:default\n" },
- /* TRice ( TRice_0 ) */ { 13964u, 32u, 0u, "VERBOSE:blue:default\n" },
- /* TRICE ( TRICE_0 ) */ { 13694u, 32u, 0u, "WARNING:11+i:red\n" },
- /* trice ( trice_0 ) */ { 13744u, 32u, 0u, "WARNING:11+i:red\n" },
- /* TRICE ( TRICE_0 ) */ { 13794u, 32u, 0u, "WARNING:11+i:red\n" },
- /* Trice ( Trice_0 ) */ { 13844u, 32u, 0u, "WARNING:11+i:red\n" },
- /* TRICE ( TRICE_0 ) */ { 13894u, 32u, 0u, "WARNING:11+i:red\n" },
- /* TRice ( TRice_0 ) */ { 13944u, 32u, 0u, "WARNING:11+i:red\n" },
- /* trice16 ( trice16_2 ) */ { 16383u, 16u, 2u, "WARNING:RTT0_writeDepthMax=%u (BUFFER_SIZE_UP=%u)\n" },
- /* TRice ( TRice_0 ) */ { 13000u, 32u, 0u, "WARNING:USARTq OverRun Error Flag is set!\n" },
- /* TRice ( TRice_0 ) */ { 13014u, 32u, 0u, "WARNING:USARTq OverRun Error Flag is set!\n" },
- /* TRICE ( TRICE32_1 ) */ { 14709u, 32u, 1u, "WR:write message, SysTick is %6u\n" },
- /* TRICE ( TRICE_0 ) */ { 13702u, 32u, 0u, "WRITE:black+u:yellow+h\n" },
- /* trice ( trice_0 ) */ { 13752u, 32u, 0u, "WRITE:black+u:yellow+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13802u, 32u, 0u, "WRITE:black+u:yellow+h\n" },
- /* Trice ( Trice_0 ) */ { 13852u, 32u, 0u, "WRITE:black+u:yellow+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13902u, 32u, 0u, "WRITE:black+u:yellow+h\n" },
- /* TRice ( TRice_0 ) */ { 13952u, 32u, 0u, "WRITE:black+u:yellow+h\n" },
- /* TRICE ( TRICE32_1 ) */ { 14702u, 32u, 1u, "WRN:warning message, SysTick is %6u\n" },
- /* TRice ( TRice_0 ) */ { 15282u, 32u, 0u, "World!\n" },
- /* TRice ( TRice_0 ) */ { 15288u, 32u, 0u, "World!\n" },
- /* TRICE ( TRICE_0 ) */ { 15244u, 32u, 0u, "\n" },
- /* TRICE ( TRICE_0 ) */ { 15247u, 32u, 0u, "\n" },
- /* TRICE ( TRICE_0 ) */ { 15250u, 32u, 0u, "\n" },
- /* TRice ( TRice32_1 ) */ { 13028u, 32u, 1u, "\rTriceCheck %4d" },
- /* trice ( trice_0 ) */ { 14797u, 32u, 0u, "a:c" },
- /* trice ( trice_0 ) */ { 14815u, 32u, 0u, "a:c" },
- /* Trice32C ( Trice32C ) */ { 3204u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "abc:DivideResult" },
- /* trice32C ( trice32C ) */ { 3448u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "abc:DivideResult" },
- /* TRice32C ( TRice32C ) */ { 4502u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "abc:DivideResult" },
- /* trice32C ( trice32C ) */ { 4557u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "abc:DivideResult" },
- /* trice8C ( trice8C ) */ { 2945u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "abc:LedsState" },
- /* TRice8C ( TRice8C ) */ { 4381u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "abc:LedsState" },
- /* Trice8C ( Trice8C ) */ { 5749u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "abc:LedsState" },
- /* trice8C ( trice8C ) */ { 7145u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "abc:LedsState" },
- /* TRIce_C ( TRIce_C ) */ { 15371u, 0u, 0u, "abc:all:GetState" },
- /* TRICe_C ( TRICe_C ) */ { 15849u, 0u, 0u, "abc:all:GetState" },
- /* TRICE_C ( TRICE_C ) */ { 15917u, 0u, 0u, "abc:all:GetState" },
- /* triceC ( triceC ) */ { 16005u, 0u, 0u, "abc:all:GetState" },
- /* TriceC ( TriceC ) */ { 16014u, 0u, 0u, "abc:all:GetState" },
- /* TRiceC ( TRiceC ) */ { 16241u, 0u, 0u, "abc:all:GetState" },
- /* TRICE ( TRICE_0 ) */ { 13738u, 32u, 0u, "alarm:red+i:white+h\n" },
- /* trice ( trice_0 ) */ { 13788u, 32u, 0u, "alarm:red+i:white+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13838u, 32u, 0u, "alarm:red+i:white+h\n" },
- /* Trice ( Trice_0 ) */ { 13888u, 32u, 0u, "alarm:red+i:white+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13938u, 32u, 0u, "alarm:red+i:white+h\n" },
- /* TRice ( TRice_0 ) */ { 13988u, 32u, 0u, "alarm:red+i:white+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13736u, 32u, 0u, "alert:magenta:magenta+h\n" },
- /* trice ( trice_0 ) */ { 13786u, 32u, 0u, "alert:magenta:magenta+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13836u, 32u, 0u, "alert:magenta:magenta+h\n" },
- /* Trice ( Trice_0 ) */ { 13886u, 32u, 0u, "alert:magenta:magenta+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13936u, 32u, 0u, "alert:magenta:magenta+h\n" },
- /* TRice ( TRice_0 ) */ { 13986u, 32u, 0u, "alert:magenta:magenta+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13737u, 32u, 0u, "assert:yellow+i:blue\n" },
- /* trice ( trice_0 ) */ { 13787u, 32u, 0u, "assert:yellow+i:blue\n" },
- /* TRICE ( TRICE_0 ) */ { 13837u, 32u, 0u, "assert:yellow+i:blue\n" },
- /* Trice ( Trice_0 ) */ { 13887u, 32u, 0u, "assert:yellow+i:blue\n" },
- /* TRICE ( TRICE_0 ) */ { 13937u, 32u, 0u, "assert:yellow+i:blue\n" },
- /* TRice ( TRice_0 ) */ { 13987u, 32u, 0u, "assert:yellow+i:blue\n" },
- /* trice8B ( trice8B ) */ { 13278u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "att: %02x\n" },
- /* trice32B ( trice32B ) */ { 13290u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "att: %08x\n" },
- /* TRice16 ( TRice16_1 ) */ { 13238u, 16u, 1u, "att: 0x8888 == %04xh\n" },
- /* Trice16 ( Trice16_1 ) */ { 13239u, 16u, 1u, "att: 0x8888 == %04xh\n" },
- /* trice16 ( trice16_1 ) */ { 13240u, 16u, 1u, "att: 0x8888 == %04xh\n" },
- /* trice32 ( trice32_6 ) */ { 13169u, 32u, 6u, "att: TriceEncrypted = %08x %08x %08x %08x %08x %08x\n" },
- /* trice16 ( trice16_1 ) */ { 13029u, 16u, 1u, "att: line %u\n" },
- /* trice16 ( trice16_1 ) */ { 13164u, 16u, 1u, "att: line %u\n" },
- /* trice16 ( trice16_1 ) */ { 13174u, 16u, 1u, "att: line %u\n" },
- /* trice16 ( trice16_1 ) */ { 13237u, 16u, 1u, "att: line %u\n" },
- /* trice16 ( trice16_1 ) */ { 13241u, 16u, 1u, "att: line %u\n" },
- /* trice16 ( trice16_1 ) */ { 13258u, 16u, 1u, "att: line %u\n" },
- /* trice16 ( trice16_1 ) */ { 13330u, 16u, 1u, "att: line %u\n" },
- /* trice16 ( trice16_1 ) */ { 13333u, 16u, 1u, "att: line %u\n" },
- /* trice16 ( trice16_1 ) */ { 13345u, 16u, 1u, "att: line %u\n" },
- /* trice16 ( trice16_1 ) */ { 13359u, 16u, 1u, "att: line %u\n" },
- /* trice16 ( trice16_1 ) */ { 13379u, 16u, 1u, "att: line %u\n" },
- /* trice16 ( trice16_1 ) */ { 13386u, 16u, 1u, "att: line %u\n" },
- /* Trice16F ( Trice16F ) */ { 16337u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "att:ARemoteFunctionName" },
- /* Trice ( Trice32_3 ) */ { 15254u, 32u, 3u, "att:MyStructEvaluationFunction(json:ExA{Apple:%d, Birn:%u, Fisch:%f})\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 14729u, 32u, 1u, "att:TRICE32 %40b\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 14732u, 64u, 1u, "att:TRICE64 %70b\n" },
- /* TRICE ( TRICE_0 ) */ { 15018u, 32u, 0u, "att:Various single arguments\n" },
- /* TRICE ( TRICE_0 ) */ { 15011u, 32u, 0u, "att:formatted double\n" },
- /* TRICE ( TRICE_0 ) */ { 15004u, 32u, 0u, "att:formatted float\n" },
- /* trice ( trice_0 ) */ { 13244u, 32u, 0u, "att:mixed int & float & double & bits\n" },
- /* trice ( trice_0 ) */ { 14991u, 32u, 0u, "att:negative float & double\n" },
- /* trice ( trice_0 ) */ { 14929u, 32u, 0u, "att:positive and negative float in format variants\n" },
- /* trice ( trice_0 ) */ { 14960u, 32u, 0u, "att:positive float & double in variants\n" },
- /* TRICE32_0 ( TRICE_0 ) */ { 16368u, 32u, 0u, "att:🐁 Speedy Gonzales A 32-bit time stamp\n" },
- /* TRICE32_0 ( TRICE_0 ) */ { 16367u, 32u, 0u, "att:🐁 Speedy Gonzales B 32-bit time stamp\n" },
- /* TRICE32_0 ( TRICE_0 ) */ { 16366u, 32u, 0u, "att:🐁 Speedy Gonzales C 32-bit time stamp\n" },
- /* TRICE32_0 ( TRICE_0 ) */ { 16365u, 32u, 0u, "att:🐁 Speedy Gonzales D 32-bit time stamp\n" },
- /* TRICE32_0 ( TRICE_0 ) */ { 16364u, 32u, 0u, "att:🐁 Speedy Gonzales E 16-bit time stamp\n" },
- /* TRICE32_0 ( TRICE_0 ) */ { 16363u, 32u, 0u, "att:🐁 Speedy Gonzales F 16-bit time stamp\n" },
- /* TRICE32_0 ( TRICE_0 ) */ { 16362u, 32u, 0u, "att:🐁 Speedy Gonzales G 16-bit time stamp\n" },
- /* TRICE32_0 ( TRICE_0 ) */ { 16361u, 32u, 0u, "att:🐁 Speedy Gonzales H 16-bit time stamp\n" },
- /* TRICE32_0 ( TRICE_0 ) */ { 16360u, 32u, 0u, "att:🐁 Speedy Gonzales I without time stamp\n" },
- /* TRICE32_0 ( TRICE_0 ) */ { 16359u, 32u, 0u, "att:🐁 Speedy Gonzales J without time stamp\n" },
- /* TRICE32_0 ( TRICE_0 ) */ { 16358u, 32u, 0u, "att:🐁 Speedy Gonzales K without time stamp\n" },
- /* TRICE32_0 ( TRICE_0 ) */ { 16357u, 32u, 0u, "att:🐁 Speedy Gonzales L without time stamp\n" },
- /* TRice ( TRice_0 ) */ { 16356u, 32u, 0u, "att:🐁 Speedy Gonzales a 32-bit time stamp\n" },
- /* TRice ( TRice_0 ) */ { 16355u, 32u, 0u, "att:🐁 Speedy Gonzales b 32-bit time stamp\n" },
- /* TRice ( TRice_0 ) */ { 16354u, 32u, 0u, "att:🐁 Speedy Gonzales c 32-bit time stamp\n" },
- /* TRice ( TRice_0 ) */ { 16353u, 32u, 0u, "att:🐁 Speedy Gonzales d 32-bit time stamp\n" },
- /* Trice ( Trice_0 ) */ { 16352u, 32u, 0u, "att:🐁 Speedy Gonzales e 16-bit time stamp\n" },
- /* Trice ( Trice_0 ) */ { 16351u, 32u, 0u, "att:🐁 Speedy Gonzales f 16-bit time stamp\n" },
- /* Trice ( Trice_0 ) */ { 16350u, 32u, 0u, "att:🐁 Speedy Gonzales g 16-bit time stamp\n" },
- /* Trice ( Trice_0 ) */ { 16349u, 32u, 0u, "att:🐁 Speedy Gonzales h 16-bit time stamp\n" },
- /* trice ( trice_0 ) */ { 16348u, 32u, 0u, "att:🐁 Speedy Gonzales i without time stamp\n" },
- /* trice ( trice_0 ) */ { 16347u, 32u, 0u, "att:🐁 Speedy Gonzales j without time stamp\n" },
- /* trice ( trice_0 ) */ { 16346u, 32u, 0u, "att:🐁 Speedy Gonzales k without time stamp\n" },
- /* trice ( trice_0 ) */ { 16345u, 32u, 0u, "att:🐁 Speedy Gonzales l without time stamp\n" },
- /* TRICE ( TRICE_0 ) */ { 13720u, 32u, 0u, "attention:11:green\n" },
- /* trice ( trice_0 ) */ { 13770u, 32u, 0u, "attention:11:green\n" },
- /* TRICE ( TRICE_0 ) */ { 13820u, 32u, 0u, "attention:11:green\n" },
- /* Trice ( Trice_0 ) */ { 13870u, 32u, 0u, "attention:11:green\n" },
- /* TRICE ( TRICE_0 ) */ { 13920u, 32u, 0u, "attention:11:green\n" },
- /* TRice ( TRice_0 ) */ { 13970u, 32u, 0u, "attention:11:green\n" },
- /* TRice8F ( TRice8F ) */ { 13297u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWb" },
- /* TRice8C ( TRice8C ) */ { 15344u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWb" },
- /* Trice8F ( Trice8F ) */ { 13298u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWc" },
- /* Trice8C ( Trice8C ) */ { 15739u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWc" },
- /* trice8F ( trice8F ) */ { 13299u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWd" },
- /* trice8C ( trice8C ) */ { 15310u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWd" },
- /* trice8C ( trice8C ) */ { 15647u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWd" },
- /* trice8C ( trice8C ) */ { 15815u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWd" },
- /* trice8C ( trice8C ) */ { 15827u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWd" },
- /* trice8C ( trice8C ) */ { 16089u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWd" },
- /* TRice16F ( TRice16F ) */ { 13301u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXb" },
- /* TRice16C ( TRice16C ) */ { 15976u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXb" },
- /* Trice16F ( Trice16F ) */ { 13302u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXc" },
- /* Trice16C ( Trice16C ) */ { 15339u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXc" },
- /* trice16F ( trice16F ) */ { 13303u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXd" },
- /* trice16C ( trice16C ) */ { 15618u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXd" },
- /* trice16C ( trice16C ) */ { 15650u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXd" },
- /* trice16C ( trice16C ) */ { 15893u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXd" },
- /* trice16C ( trice16C ) */ { 16098u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXd" },
- /* trice16C ( trice16C ) */ { 16268u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXd" },
- /* trice32F ( trice32F ) */ { 13307u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameYd" },
- /* trice32F ( trice32F ) */ { 15303u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameYd" },
- /* trice32C ( trice32C ) */ { 15837u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameYd" },
- /* TRice64F ( TRice64F ) */ { 13309u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameZb" },
- /* TRice64F ( TRice64F ) */ { 15305u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameZb" },
- /* TRice64C ( TRice64C ) */ { 15559u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameZb" },
- /* trice32C ( trice32C ) */ { 4499u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:divide" },
- /* TRice32C ( TRice32C ) */ { 5642u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:divide" },
- /* TRiceC ( TRiceC ) */ { 1512u, 0u, 0u, "cmd:getLeds" },
- /* TRiceC ( TRiceC ) */ { 1737u, 0u, 0u, "cmd:getLeds" },
- /* TriceC ( TriceC ) */ { 2968u, 0u, 0u, "cmd:getLeds" },
- /* TRiceC ( TRiceC ) */ { 3945u, 0u, 0u, "cmd:getLeds" },
- /* TriceC ( TriceC ) */ { 4650u, 0u, 0u, "cmd:getLeds" },
- /* triceC ( triceC ) */ { 4818u, 0u, 0u, "cmd:getLeds" },
- /* TriceC ( TriceC ) */ { 6227u, 0u, 0u, "cmd:getLeds" },
- /* triceC ( triceC ) */ { 7171u, 0u, 0u, "cmd:getLeds" },
- /* triceC ( triceC ) */ { 7313u, 0u, 0u, "cmd:getLeds" },
- /* triceC ( triceC ) */ { 1716u, 0u, 0u, "cmd:logState" },
- /* triceC ( triceC ) */ { 3578u, 0u, 0u, "cmd:logState" },
- /* triceC ( triceC ) */ { 4208u, 0u, 0u, "cmd:logState" },
- /* trice8C ( trice8C ) */ { 3792u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setKey" },
- /* trice8C ( trice8C ) */ { 3925u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setKey" },
- /* trice8C ( trice8C ) */ { 6890u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setKey" },
- /* trice8C ( trice8C ) */ { 5150u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setLeds" },
- /* trice8C ( trice8C ) */ { 6278u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setLeds" },
- /* trice8C ( trice8C ) */ { 7431u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setLeds" },
- /* TRICE ( TRICE_0 ) */ { 13716u, 32u, 0u, "critical:red+i:default+h\n" },
- /* trice ( trice_0 ) */ { 13766u, 32u, 0u, "critical:red+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13816u, 32u, 0u, "critical:red+i:default+h\n" },
- /* Trice ( Trice_0 ) */ { 13866u, 32u, 0u, "critical:red+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13916u, 32u, 0u, "critical:red+i:default+h\n" },
- /* TRice ( TRice_0 ) */ { 13966u, 32u, 0u, "critical:red+i:default+h\n" },
- /* trice ( trice_0 ) */ { 14801u, 32u, 0u, "d:G" },
- /* trice ( trice32_3 ) */ { 16326u, 32u, 3u, "d:_SINGLE_MAX_SIZE=%d, _BUFFER_SIZE=%d, _DEFERRED_BUFFER_SIZE=%d\n" },
- /* trice ( trice_0 ) */ { 13176u, 32u, 0u, "dbg:\tHi!\n" },
- /* TRICE ( TRICE32_1 ) */ { 14697u, 32u, 1u, "dbg:12345 as 16bit is %016b\n" },
- /* trice8 ( trice8_1 ) */ { 13026u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration with direct RTT output and parallel deferred UART output.\n" },
- /* trice8 ( trice8_1 ) */ { 13023u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration with direct RTT output only and optimized for speed\n" },
- /* trice8 ( trice8_1 ) */ { 13010u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n" },
- /* trice8 ( trice8_1 ) */ { 13011u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n" },
- /* trice8 ( trice8_1 ) */ { 13012u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n" },
- /* trice8 ( trice8_1 ) */ { 13013u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n" },
- /* trice8 ( trice8_1 ) */ { 13016u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n" },
- /* trice8 ( trice8_1 ) */ { 13017u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n" },
- /* trice8 ( trice8_1 ) */ { 13018u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n" },
- /* trice8 ( trice8_1 ) */ { 13020u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n" },
- /* trice8 ( trice8_1 ) */ { 13021u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n" },
- /* trice8 ( trice8_1 ) */ { 13027u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n" },
- /* trice8 ( trice8_1 ) */ { 13025u, 8u, 1u, "dbg:CONFIGURATION == %d - An minimum configuration example.\n" },
- /* trice8 ( trice8_1 ) */ { 13024u, 8u, 1u, "dbg:CONFIGURATION == %d - UART, no cycle counter, no critical sections.\n" },
- /* trice ( trice_0 ) */ { 13175u, 32u, 0u, "dbg:Hi!\n" },
- /* trice ( trice_0 ) */ { 14805u, 32u, 0u, "dbg:k\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 13388u, 32u, 1u, "dbg:len=%u:" },
- /* TRICE32 ( TRICE32_1 ) */ { 13390u, 32u, 1u, "dbg:len=%u:" },
- /* TRICE32 ( TRICE32_1 ) */ { 13392u, 32u, 1u, "dbg:len=%u: " },
- /* TRICE32 ( TRICE32_1 ) */ { 13394u, 32u, 1u, "dbg:len=%u: " },
- /* TRICE32 ( TRICE32_1 ) */ { 13396u, 32u, 1u, "dbg:len=%u: " },
- /* trice ( trice32_2 ) */ { 16334u, 32u, 2u, "deb:TRICE_DIRECT_OUTPUT == %d, TRICE_DEFERRED_OUTPUT == %d\n" },
- /* trice ( trice_0 ) */ { 16331u, 32u, 0u, "deb:TRICE_DOUBLE_BUFFER, " },
- /* trice ( trice_0 ) */ { 16328u, 32u, 0u, "deb:TRICE_MULTI_PACK_MODE\n" },
- /* trice ( trice_0 ) */ { 16330u, 32u, 0u, "deb:TRICE_RING_BUFFER, " },
- /* trice ( trice_0 ) */ { 16329u, 32u, 0u, "deb:TRICE_SINGLE_PACK_MODE\n" },
- /* trice ( trice_0 ) */ { 16333u, 32u, 0u, "deb:TRICE_STACK_BUFFER, " },
- /* trice ( trice_0 ) */ { 16332u, 32u, 0u, "deb:TRICE_STATIC_BUFFER, " },
- /* trice ( trice32_4 ) */ { 16327u, 32u, 4u, "deb:_CYCLE == %d, _PROTECT == %d, _DIAG == %d, XTEA == %d\n" },
- /* TRICE ( TRICE_0 ) */ { 13722u, 32u, 0u, "debug:130+i\n" },
- /* trice ( trice_0 ) */ { 13772u, 32u, 0u, "debug:130+i\n" },
- /* TRICE ( TRICE_0 ) */ { 13822u, 32u, 0u, "debug:130+i\n" },
- /* Trice ( Trice_0 ) */ { 13872u, 32u, 0u, "debug:130+i\n" },
- /* TRICE ( TRICE_0 ) */ { 13922u, 32u, 0u, "debug:130+i\n" },
- /* TRice ( TRice_0 ) */ { 13972u, 32u, 0u, "debug:130+i\n" },
- /* TRICE ( TRICE_0 ) */ { 13734u, 32u, 0u, "default:off\n" },
- /* trice ( trice_0 ) */ { 13784u, 32u, 0u, "default:off\n" },
- /* TRICE ( TRICE_0 ) */ { 13834u, 32u, 0u, "default:off\n" },
- /* Trice ( Trice_0 ) */ { 13884u, 32u, 0u, "default:off\n" },
- /* TRICE ( TRICE_0 ) */ { 13934u, 32u, 0u, "default:off\n" },
- /* TRice ( TRice_0 ) */ { 13984u, 32u, 0u, "default:off\n" },
- /* trice16 ( trice16_2 ) */ { 16382u, 16u, 2u, "diag:RTT0_writeDepthMax=%u (BUFFER_SIZE_UP=%u)\n" },
- /* trice16 ( trice16_2 ) */ { 16375u, 16u, 2u, "diag:TriceDataOffsetDepthMax = %d of %d (TRICE_DATA_OFFSET)\n" },
- /* trice16 ( trice16_2 ) */ { 16373u, 16u, 2u, "diag:TriceHalfBufferDepthMax =%4u of%5d\n" },
- /* trice ( trice_0 ) */ { 14800u, 32u, 0u, "diag:f" },
- /* trice ( trice_0 ) */ { 14818u, 32u, 0u, "diag:f" },
- /* trice16 ( trice16_2 ) */ { 16371u, 16u, 2u, "diag:triceRingBufferDepthMax =%4u of%5d\n" },
- /* trice16 ( trice16_2 ) */ { 16378u, 16u, 2u, "diag:triceSingleDepthMax =%4u of %d (TRICE_BUFFER_SIZE)\n" },
- /* TRICE ( TRICE_0 ) */ { 13730u, 32u, 0u, "diag:yellow+i:default+h\n" },
- /* trice ( trice_0 ) */ { 13780u, 32u, 0u, "diag:yellow+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13830u, 32u, 0u, "diag:yellow+i:default+h\n" },
- /* Trice ( Trice_0 ) */ { 13880u, 32u, 0u, "diag:yellow+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13930u, 32u, 0u, "diag:yellow+i:default+h\n" },
- /* TRice ( TRice_0 ) */ { 13980u, 32u, 0u, "diag:yellow+i:default+h\n" },
- /* trice ( trice_0 ) */ { 14810u, 32u, 0u, "e:7" },
- /* trice ( trice_0 ) */ { 14795u, 32u, 0u, "e:A" },
- /* trice ( trice_0 ) */ { 14813u, 32u, 0u, "e:A" },
- /* TRICE ( TRICE_0 ) */ { 13717u, 32u, 0u, "emergency:red+i:blue\n" },
- /* trice ( trice_0 ) */ { 13767u, 32u, 0u, "emergency:red+i:blue\n" },
- /* TRICE ( TRICE_0 ) */ { 13817u, 32u, 0u, "emergency:red+i:blue\n" },
- /* Trice ( Trice_0 ) */ { 13867u, 32u, 0u, "emergency:red+i:blue\n" },
- /* TRICE ( TRICE_0 ) */ { 13917u, 32u, 0u, "emergency:red+i:blue\n" },
- /* TRice ( TRice_0 ) */ { 13967u, 32u, 0u, "emergency:red+i:blue\n" },
- /* trice16 ( trice16_2 ) */ { 16376u, 16u, 2u, "err:TriceDataOffsetDepthMax = %d of %d (TRICE_DATA_OFFSET)\n" },
- /* trice16 ( trice16_1 ) */ { 16379u, 16u, 1u, "err:TriceDeferredOverflowCount = %u\n" },
- /* trice16 ( trice16_1 ) */ { 16380u, 16u, 1u, "err:TriceDirectOverflowCount = %u\n" },
- /* trice16 ( trice16_1 ) */ { 16381u, 16u, 1u, "err:TriceErrorCount = %u\n" },
- /* trice16 ( trice16_2 ) */ { 16372u, 16u, 2u, "err:TriceHalfBufferDepthMax =%4u of%5d (overflow!)\n" },
- /* trice16 ( trice16_2 ) */ { 16370u, 16u, 2u, "err:triceRingBufferDepthMax =%4u of%5d (overflow!)\n" },
- /* trice16 ( trice16_2 ) */ { 16377u, 16u, 2u, "err:triceSingleDepthMax =%4u of %d (TRICE_BUFFER_SIZE overflow!)\n" },
- /* TRICE ( TRICE_0 ) */ { 13718u, 32u, 0u, "error:11:red\n" },
- /* trice ( trice_0 ) */ { 13768u, 32u, 0u, "error:11:red\n" },
- /* TRICE ( TRICE_0 ) */ { 13818u, 32u, 0u, "error:11:red\n" },
- /* Trice ( Trice_0 ) */ { 13868u, 32u, 0u, "error:11:red\n" },
- /* TRICE ( TRICE_0 ) */ { 13918u, 32u, 0u, "error:11:red\n" },
- /* TRice ( TRice_0 ) */ { 13968u, 32u, 0u, "error:11:red\n" },
- /* TRICE ( TRICE_0 ) */ { 13715u, 32u, 0u, "fatal:magenta+b:red\n" },
- /* trice ( trice_0 ) */ { 13765u, 32u, 0u, "fatal:magenta+b:red\n" },
- /* TRICE ( TRICE_0 ) */ { 13815u, 32u, 0u, "fatal:magenta+b:red\n" },
- /* Trice ( Trice_0 ) */ { 13865u, 32u, 0u, "fatal:magenta+b:red\n" },
- /* TRICE ( TRICE_0 ) */ { 13915u, 32u, 0u, "fatal:magenta+b:red\n" },
- /* TRice ( TRice_0 ) */ { 13965u, 32u, 0u, "fatal:magenta+b:red\n" },
- /* Trice ( Trice32_2 ) */ { 16335u, 32u, 2u, "i=%x %x\n" },
- /* TRICE ( TRICE_0 ) */ { 15245u, 32u, 0u, "inf: Tryout buffer:" },
- /* TRICE ( TRICE_0 ) */ { 15248u, 32u, 0u, "inf: Tryout rx struct:" },
- /* TRICE ( TRICE_0 ) */ { 15242u, 32u, 0u, "inf: Tryout tx struct:" },
- /* TRICE ( TRICE32_2 ) */ { 15251u, 32u, 2u, "inf:sizeOf(Trypout) = %d, buffer length = %d\n" },
- /* trice ( trice32_1 ) */ { 16336u, 32u, 1u, "info:%d times a 16 byte long Trice messages, which may not be written all if the buffer is too small:\n" },
- /* Trice8 ( Trice8_12 ) */ { 13235u, 8u, 12u, "info:12 8-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and a 16-bit stamp.\n" },
- /* TRice8 ( TRice8_12 ) */ { 13234u, 8u, 12u, "info:12 8-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and a 32-bit stamp.\n" },
- /* trice8 ( trice8_12 ) */ { 13236u, 8u, 12u, "info:12 8-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and without stamp.\n" },
- /* Trice16 ( Trice16_12 ) */ { 13232u, 16u, 12u, "info:12 16-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and a 16-bit stamp.\n" },
- /* TRice16 ( TRice16_12 ) */ { 13231u, 16u, 12u, "info:12 16-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and a 32-bit stamp.\n" },
- /* trice16 ( trice16_12 ) */ { 13233u, 16u, 12u, "info:12 16-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and without stamp.\n" },
- /* Trice32 ( Trice32_12 ) */ { 13229u, 32u, 12u, "info:12 32-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and a 16-bit stamp.\n" },
- /* TRice32 ( TRice32_12 ) */ { 13228u, 32u, 12u, "info:12 32-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and a 32-bit stamp.\n" },
- /* trice32 ( trice32_12 ) */ { 13230u, 32u, 12u, "info:12 32-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and without stamp.\n" },
- /* Trice64 ( Trice64_12 ) */ { 13223u, 64u, 12u, "info:12 64-bit values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 16-bit stamp.\n" },
- /* TRice64 ( TRice64_12 ) */ { 13222u, 64u, 12u, "info:12 64-bit values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 32-bit stamp.\n" },
- /* trice64 ( trice64_12 ) */ { 13224u, 64u, 12u, "info:12 64-bit values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and without stamp.\n" },
- /* Trice64 ( Trice64_12 ) */ { 13226u, 64u, 12u, "info:12 64-bit values %d, %zu, %x, %lX, %t, %e, %Lf, %g, %E, %F, %G, 0xb%08b and a 16-bit stamp.\n" },
- /* TRice64 ( TRice64_12 ) */ { 13225u, 64u, 12u, "info:12 64-bit values %d, %zu, %x, %lX, %t, %e, %Lf, %g, %E, %F, %G, 0xb%08b and a 32-bit stamp.\n" },
- /* trice64 ( trice64_12 ) */ { 13227u, 64u, 12u, "info:12 64-bit values %d, %zu, %x, %lX, %t, %e, %Lf, %g, %E, %F, %G, 0xb%08b and without stamp.\n" },
- /* trice ( trice32_12 ) */ { 13385u, 32u, 12u, "info:12 default bit width values %d, %llu, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and without stamp.\n" },
- /* Trice ( Trice32_12 ) */ { 13384u, 32u, 12u, "info:12 default bit width values %d, %lu, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 16-bit stamp.\n" },
- /* Trice ( Trice32_12 ) */ { 13381u, 32u, 12u, "info:12 default bit width values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 16-bit stamp.\n" },
- /* TRice ( TRice32_12 ) */ { 13380u, 32u, 12u, "info:12 default bit width values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 32-bit stamp.\n" },
- /* trice ( trice32_12 ) */ { 13382u, 32u, 12u, "info:12 default bit width values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and without stamp.\n" },
- /* TRice ( TRice32_12 ) */ { 13383u, 32u, 12u, "info:12 default bit width values %d, %zu, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 32-bit stamp.\n" },
- /* TRICE ( TRICE32_12 ) */ { 13499u, 32u, 12u, "info:12 values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 16-bit stamp.\n" },
- /* TRICE32 ( TRICE32_12 ) */ { 13502u, 32u, 12u, "info:12 values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 16-bit stamp.\n" },
- /* TRICE ( TRICE32_12 ) */ { 13498u, 32u, 12u, "info:12 values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 32-bit stamp.\n" },
- /* TRICE32 ( TRICE32_12 ) */ { 13501u, 32u, 12u, "info:12 values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 32-bit stamp.\n" },
- /* TRICE ( TRICE32_12 ) */ { 13500u, 32u, 12u, "info:12 values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and without stamp.\n" },
- /* TRICE32 ( TRICE32_12 ) */ { 13503u, 32u, 12u, "info:12 values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and without stamp.\n" },
- /* Trice ( Trice_0 ) */ { 16340u, 32u, 0u, "info:A Buffer:\n" },
- /* TRICE8_F ( TRICE8F ) */ { 13296u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameWa" },
- /* TRICE8_F ( TRICE8F ) */ { 15292u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameWa" },
- /* TRICe8_C ( TRICe8_C ) */ { 15689u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameWa" },
- /* TRIce8_C ( TRIce8_C ) */ { 16111u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameWa" },
- /* TRICE8_C ( TRICE8_C ) */ { 16176u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameWa" },
- /* TRice8F ( TRice8F ) */ { 15293u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameWb" },
- /* Trice8F ( Trice8F ) */ { 15294u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameWc" },
- /* trice8F ( trice8F ) */ { 15295u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameWd" },
- /* TRICE16_F ( TRICE16F ) */ { 13300u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameXa" },
- /* TRICE16_F ( TRICE16F ) */ { 15296u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameXa" },
- /* TRICe16_C ( TRICe16_C ) */ { 15547u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameXa" },
- /* TRICE16_C ( TRICE16_C ) */ { 15754u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameXa" },
- /* TRIce16_C ( TRIce16_C ) */ { 15996u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameXa" },
- /* TRice16F ( TRice16F ) */ { 15297u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameXb" },
- /* Trice16F ( Trice16F ) */ { 15298u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameXc" },
- /* trice16F ( trice16F ) */ { 15299u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameXd" },
- /* TRICE32_F ( TRICE32F ) */ { 13304u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa" },
- /* TRICE32_F ( TRICE32F ) */ { 15300u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa" },
- /* TRIce32_C ( TRIce32_C ) */ { 15311u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa" },
- /* TRIce32_C ( TRIce32_C ) */ { 15374u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa" },
- /* TRIce32_C ( TRIce32_C ) */ { 15519u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa" },
- /* TRICe32_C ( TRICe32_C ) */ { 15578u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa" },
- /* TRICE32_C ( TRICE32_C ) */ { 15606u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa" },
- /* TRIce32_C ( TRIce32_C ) */ { 15698u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa" },
- /* TRIce32_C ( TRIce32_C ) */ { 16246u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa" },
- /* TRICE64_F ( TRICE64F ) */ { 13308u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameZa" },
- /* TRICE64_F ( TRICE64F ) */ { 15304u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameZa" },
- /* TRIce64_C ( TRIce64_C ) */ { 15354u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameZa" },
- /* TRICE64_C ( TRICE64_C ) */ { 15607u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameZa" },
- /* TRICe64_C ( TRICe64_C ) */ { 15657u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameZa" },
- /* Trice ( Trice32_1 ) */ { 13490u, 32u, 1u, "info:This is a message with one value %d and a 16-bit stamp.\n" },
- /* TRICE ( TRICE32_1 ) */ { 13496u, 32u, 1u, "info:This is a message with one value %d and a 16-bit stamp.\n" },
- /* TRice ( TRice32_1 ) */ { 13489u, 32u, 1u, "info:This is a message with one value %d and a 32-bit stamp.\n" },
- /* TRICE ( TRICE32_1 ) */ { 13495u, 32u, 1u, "info:This is a message with one value %d and a 32-bit stamp.\n" },
- /* trice ( trice32_1 ) */ { 13491u, 32u, 1u, "info:This is a message with one value %d and without stamp.\n" },
- /* TRICE ( TRICE32_1 ) */ { 13497u, 32u, 1u, "info:This is a message with one value %d and without stamp.\n" },
- /* Trice ( Trice_0 ) */ { 13032u, 32u, 0u, "info:This is a message without values and a 16-bit stamp.\n" },
- /* TRICE ( TRICE_0 ) */ { 13493u, 32u, 0u, "info:This is a message without values and a 16-bit stamp.\n" },
- /* TRice ( TRice_0 ) */ { 13031u, 32u, 0u, "info:This is a message without values and a 32-bit stamp.\n" },
- /* TRICE ( TRICE_0 ) */ { 13492u, 32u, 0u, "info:This is a message without values and a 32-bit stamp.\n" },
- /* trice ( trice_0 ) */ { 13033u, 32u, 0u, "info:This is a message without values and without stamp.\n" },
- /* TRICE ( TRICE_0 ) */ { 13494u, 32u, 0u, "info:This is a message without values and without stamp.\n" },
- /* TRICE8_F ( TRICE8F ) */ { 15253u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:TryoutBufferFunction" },
- /* TRICE8_F ( TRICE8F ) */ { 15252u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:TryoutStructFunction" },
- /* TRICE ( TRICE_0 ) */ { 13721u, 32u, 0u, "info:cyan+b:default+h\n" },
- /* trice ( trice_0 ) */ { 13771u, 32u, 0u, "info:cyan+b:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13821u, 32u, 0u, "info:cyan+b:default+h\n" },
- /* Trice ( Trice_0 ) */ { 13871u, 32u, 0u, "info:cyan+b:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13921u, 32u, 0u, "info:cyan+b:default+h\n" },
- /* TRice ( TRice_0 ) */ { 13971u, 32u, 0u, "info:cyan+b:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13731u, 32u, 0u, "interrupt:magenta+i:default+h\n" },
- /* trice ( trice_0 ) */ { 13781u, 32u, 0u, "interrupt:magenta+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13831u, 32u, 0u, "interrupt:magenta+i:default+h\n" },
- /* Trice ( Trice_0 ) */ { 13881u, 32u, 0u, "interrupt:magenta+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13931u, 32u, 0u, "interrupt:magenta+i:default+h\n" },
- /* TRice ( TRice_0 ) */ { 13981u, 32u, 0u, "interrupt:magenta+i:default+h\n" },
- /* trice ( trice32_1 ) */ { 13007u, 32u, 1u, "isr:TIM17_FDCAN_IT1_IRQHandler! (%u ms)\n" },
- /* TRICE ( TRICE32_1 ) */ { 13194u, 32u, 1u, "isr:TRICE isr message, SysTick is %6d\n" },
- /* TRICE ( TRICE32_1 ) */ { 13195u, 32u, 1u, "isr:TRICE isr message, SysTick is %6d\n" },
- /* TRICE ( TRICE32_1 ) */ { 13196u, 32u, 1u, "isr:TRICE isr message, SysTick is %6d\n" },
- /* TRICE ( TRICE32_1 ) */ { 13197u, 32u, 1u, "isr:TRICE isr message, SysTick is %6d\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 13186u, 16u, 1u, "isr:TRICE16_1 isr message, SysTick is %6d\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 13187u, 16u, 1u, "isr:TRICE16_1 isr message, SysTick is %6d\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 13188u, 16u, 1u, "isr:TRICE16_1 isr message, SysTick is %6d\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 13189u, 16u, 1u, "isr:TRICE16_1 isr message, SysTick is %6d\n" },
- /* TRICE_1 ( TRICE32_1 ) */ { 13190u, 32u, 1u, "isr:TRICE_1 isr message, SysTick is %6d\n" },
- /* TRICE_1 ( TRICE32_1 ) */ { 13191u, 32u, 1u, "isr:TRICE_1 isr message, SysTick is %6d\n" },
- /* TRICE_1 ( TRICE32_1 ) */ { 13192u, 32u, 1u, "isr:TRICE_1 isr message, SysTick is %6d\n" },
- /* TRICE_1 ( TRICE32_1 ) */ { 13193u, 32u, 1u, "isr:TRICE_1 isr message, SysTick is %6d\n" },
- /* trice ( trice32_1 ) */ { 13178u, 32u, 1u, "isr:trice isr message, SysTick is %6d\n" },
- /* trice ( trice32_1 ) */ { 13179u, 32u, 1u, "isr:trice isr message, SysTick is %6ld\n" },
- /* trice ( trice32_1 ) */ { 13180u, 32u, 1u, "isr:trice isr message, SysTick is %6lld\n" },
- /* trice ( trice32_1 ) */ { 13181u, 32u, 1u, "isr:trice isr message, SysTick is %6zd\n" },
- /* trice_1 ( trice32_1 ) */ { 13182u, 32u, 1u, "isr:trice_1 isr message, SysTick is %6d\n" },
- /* trice_1 ( trice32_1 ) */ { 13183u, 32u, 1u, "isr:trice_1 isr message, SysTick is %6d\n" },
- /* trice_1 ( trice32_1 ) */ { 13184u, 32u, 1u, "isr:trice_1 isr message, SysTick is %6d\n" },
- /* trice_1 ( trice32_1 ) */ { 13185u, 32u, 1u, "isr:trice_1 isr message, SysTick is %6d\n" },
- /* trice64 ( trice64_6 ) */ { 13091u, 64u, 6u, "len:float-L %Le %Lf %Lg %LE %LF %LG\n" },
- /* trice64 ( trice64_6 ) */ { 13090u, 64u, 6u, "len:float-l %le %lf %lg %lE %lF %lG\n" },
- /* trice16 ( trice16_8 ) */ { 13084u, 16u, 8u, "len:h %hd %hi %hu %ho %hO %hx %hX %hb\n" },
- /* trice8 ( trice8_8 ) */ { 13083u, 8u, 8u, "len:hh %hhd %hhi %hhu %hho %hhO %hhx %hhX %hhb\n" },
- /* trice64 ( trice64_8 ) */ { 13087u, 64u, 8u, "len:j %jd %ji %ju %jo %jO %jx %jX %jb\n" },
- /* trice32 ( trice32_8 ) */ { 13085u, 32u, 8u, "len:l %ld %li %lu %lo %lO %lx %lX %lb\n" },
- /* trice64 ( trice64_8 ) */ { 13086u, 64u, 8u, "len:ll %lld %lli %llu %llo %llO %llx %llX %llb\n" },
- /* trice64 ( trice64_8 ) */ { 13089u, 64u, 8u, "len:t %td %ti %tu %to %tO %tx %tX %tb\n" },
- /* trice64 ( trice64_8 ) */ { 13088u, 64u, 8u, "len:z %zd %zi %zu %zo %zO %zx %zX %zb\n" },
- /* trice ( trice32_2 ) */ { 1126u, 32u, 2u, "log:from=%u phase=%u\n" },
- /* trice ( trice32_2 ) */ { 1219u, 32u, 2u, "log:from=%u phase=%u\n" },
- /* trice ( trice32_2 ) */ { 3310u, 32u, 2u, "log:from=%u phase=%u\n" },
- /* trice ( trice32_2 ) */ { 5460u, 32u, 2u, "log:from=%u phase=%u\n" },
- /* triceS ( triceS ) */ { 1861u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "log:text=%s\n" },
- /* triceS ( triceS ) */ { 4470u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "log:text=%s\n" },
- /* triceS ( triceS ) */ { 5017u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "log:text=%s\n" },
- /* triceS ( triceS ) */ { 7615u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "log:text=%s\n" },
- /* trice ( trice32_1 ) */ { 2034u, 32u, 1u, "log:tick=%u\n" },
- /* trice ( trice32_1 ) */ { 4364u, 32u, 1u, "log:tick=%u\n" },
- /* trice ( trice32_1 ) */ { 5074u, 32u, 1u, "log:tick=%u\n" },
- /* trice ( trice32_1 ) */ { 6949u, 32u, 1u, "log:tick=%u\n" },
- /* trice ( trice_0 ) */ { 14811u, 32u, 0u, "m:12" },
- /* trice ( trice_0 ) */ { 14812u, 32u, 0u, "m:123\n" },
- /* trice ( trice_0 ) */ { 14804u, 32u, 0u, "message:J" },
- /* TRICE ( TRICE_0 ) */ { 13725u, 32u, 0u, "message:green+h:black\n" },
- /* trice ( trice_0 ) */ { 13775u, 32u, 0u, "message:green+h:black\n" },
- /* TRICE ( TRICE_0 ) */ { 13825u, 32u, 0u, "message:green+h:black\n" },
- /* Trice ( Trice_0 ) */ { 13875u, 32u, 0u, "message:green+h:black\n" },
- /* TRICE ( TRICE_0 ) */ { 13925u, 32u, 0u, "message:green+h:black\n" },
- /* TRice ( TRice_0 ) */ { 13975u, 32u, 0u, "message:green+h:black\n" },
- /* trice16B ( trice16B ) */ { 13285u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg: %04x\n" },
- /* trice32 ( trice32_6 ) */ { 13166u, 32u, 6u, "msg: message = %08x %08x %08x %08x %08x %08x\n" },
- /* trice32 ( trice32_6 ) */ { 13172u, 32u, 6u, "msg: messge = %08x %08x %08x %08x %08x %08x\n" },
- /* Trice64 ( Trice64_1 ) */ { 16343u, 64u, 1u, "msg:%.20f (double with more ciphers than precision)\n" },
- /* Trice ( Trice32_1 ) */ { 16342u, 32u, 1u, "msg:%.20f (float with more ciphers than precision)\n" },
- /* Trice8B ( Trice8B ) */ { 16339u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%02x \n" },
- /* Trice32B ( Trice32B ) */ { 16338u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%08x \n" },
- /* trice32 ( trice32_1 ) */ { 13413u, 32u, 1u, "msg:%O (%%O)\n" },
- /* trice64 ( trice64_1 ) */ { 13420u, 64u, 1u, "msg:%O (%%O)\n" },
- /* trice32 ( trice32_1 ) */ { 13414u, 32u, 1u, "msg:%X (%%X)\n" },
- /* trice64 ( trice64_1 ) */ { 13421u, 64u, 1u, "msg:%X (%%X)\n" },
- /* trice32 ( trice32_1 ) */ { 13411u, 32u, 1u, "msg:%b (%%b)\n" },
- /* trice64 ( trice64_1 ) */ { 13418u, 64u, 1u, "msg:%b (%%b)\n" },
- /* trice32 ( trice32_1 ) */ { 13416u, 32u, 1u, "msg:%d (%%d)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 13990u, 64u, 1u, "msg:%d (%%d)\n" },
- /* Trice ( Trice32_1 ) */ { 16341u, 32u, 1u, "msg:%f (default rounded float)\n" },
- /* trice32 ( trice32_1 ) */ { 13412u, 32u, 1u, "msg:%o (%%o)\n" },
- /* trice64 ( trice64_1 ) */ { 13419u, 64u, 1u, "msg:%o (%%o)\n" },
- /* TRICE_N ( TRICE_N ) */ { 15042u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15043u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15044u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15045u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15046u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15047u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15048u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15049u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15050u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15051u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15052u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15053u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15054u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15055u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15056u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15057u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15058u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15059u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15060u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15061u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15062u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15063u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15064u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15065u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15066u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15067u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15068u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15069u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15070u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 15071u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15072u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15073u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15074u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15075u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15076u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15077u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15078u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15079u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15080u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15081u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15082u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15083u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15084u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15085u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15086u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15087u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15088u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15089u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15090u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15091u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15092u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15093u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15094u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15095u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15096u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15097u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15098u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15099u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15100u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* triceN ( triceN ) */ { 15101u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n" },
- /* trice32 ( trice32_1 ) */ { 13410u, 32u, 1u, "msg:%u (%%u)\n" },
- /* trice64 ( trice64_1 ) */ { 13417u, 64u, 1u, "msg:%u (%%u)\n" },
- /* trice32 ( trice32_1 ) */ { 13415u, 32u, 1u, "msg:%x (%%x)\n" },
- /* trice64 ( trice64_1 ) */ { 13422u, 64u, 1u, "msg:%x (%%x)\n" },
- /* TRiceS ( TRiceS ) */ { 13312u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:Hi %s!\n" },
- /* TriceS ( TriceS ) */ { 13313u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:Hi %s!\n" },
- /* triceS ( triceS ) */ { 13314u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:Hi %s!\n" },
- /* TRiceN ( TRiceN ) */ { 13315u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:Hi %s!\n" },
- /* TriceN ( TriceN ) */ { 13316u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:Hi %s!\n" },
- /* triceN ( triceN ) */ { 13317u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:Hi %s!\n" },
- /* TRice ( TRice_0 ) */ { 13008u, 32u, 0u, "msg:StartDefaultTask\n" },
- /* TRice ( TRice_0 ) */ { 13019u, 32u, 0u, "msg:StartDefaultTask\n" },
- /* TRice ( TRice_0 ) */ { 13009u, 32u, 0u, "msg:StartTask02:Diagnostics and TriceTransfer\n" },
- /* TRice ( TRice_0 ) */ { 13022u, 32u, 0u, "msg:StartTask02:Diagnostics and TriceTransfer\n" },
- /* TRice64 ( TRice64_12 ) */ { 15283u, 64u, 12u, "msg:Twelve 64-bit values: %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n" },
- /* TRice64 ( TRice64_12 ) */ { 15289u, 64u, 12u, "msg:Twelve 64-bit values: %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n" },
- /* TRICE_S ( TRICE_S ) */ { 13265u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:With TRICE_S:%s\n" },
- /* TRICE_S ( TRICE_S ) */ { 13267u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:With TRICE_S:%s\n" },
- /* TRICE_S ( TRICE_S ) */ { 13269u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:With TRICE_S:%s\n" },
- /* TRiceS ( TRiceS ) */ { 13263u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:With TRiceS:%s\n" },
- /* TriceS ( TriceS ) */ { 13261u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:With TriceS:%s\n" },
- /* triceS ( triceS ) */ { 13259u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:With triceS:%s\n" },
- /* trice8 ( trice8_12 ) */ { 13563u, 8u, 12u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_12 ) */ { 13575u, 16u, 12u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice32 ( trice32_12 ) */ { 13587u, 32u, 12u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice64 ( trice64_12 ) */ { 13599u, 64u, 12u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice8_12 ( trice8_12 ) */ { 13611u, 8u, 12u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16_12 ( trice16_12 ) */ { 13623u, 16u, 12u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice32_12 ( trice32_12 ) */ { 13635u, 32u, 12u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice64_12 ( trice64_12 ) */ { 13647u, 64u, 12u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice8 ( Trice8_11 ) */ { 13562u, 8u, 11u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice16 ( Trice16_11 ) */ { 13574u, 16u, 11u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice32 ( Trice32_11 ) */ { 13586u, 32u, 11u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice64 ( Trice64_11 ) */ { 13598u, 64u, 11u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice8_11 ( Trice8_11 ) */ { 13610u, 8u, 11u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice16_11 ( Trice16_11 ) */ { 13622u, 16u, 11u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice32_11 ( Trice32_11 ) */ { 13634u, 32u, 11u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice64_11 ( Trice64_11 ) */ { 13646u, 64u, 11u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice8 ( TRice8_10 ) */ { 13561u, 8u, 10u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice16 ( TRice16_10 ) */ { 13573u, 16u, 10u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice32 ( TRice32_10 ) */ { 13585u, 32u, 10u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice64 ( TRice64_10 ) */ { 13597u, 64u, 10u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice8_10 ( TRice8_10 ) */ { 13609u, 8u, 10u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice16_10 ( TRice16_10 ) */ { 13621u, 16u, 10u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice32_10 ( TRice32_10 ) */ { 13633u, 32u, 10u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice64_10 ( TRice64_10 ) */ { 13645u, 64u, 10u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice8 ( trice8_9 ) */ { 13560u, 8u, 9u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_9 ) */ { 13572u, 16u, 9u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice32 ( trice32_9 ) */ { 13584u, 32u, 9u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice64 ( trice64_9 ) */ { 13596u, 64u, 9u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice8_9 ( trice8_9 ) */ { 13608u, 8u, 9u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16_9 ( trice16_9 ) */ { 13620u, 16u, 9u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice32_9 ( trice32_9 ) */ { 13632u, 32u, 9u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice64_9 ( trice64_9 ) */ { 13644u, 64u, 9u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice8 ( Trice8_8 ) */ { 13559u, 8u, 8u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice16 ( Trice16_8 ) */ { 13571u, 16u, 8u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice32 ( Trice32_8 ) */ { 13583u, 32u, 8u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice64 ( Trice64_8 ) */ { 13595u, 64u, 8u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice8_8 ( Trice8_8 ) */ { 13607u, 8u, 8u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice16_8 ( Trice16_8 ) */ { 13619u, 16u, 8u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice32_8 ( Trice32_8 ) */ { 13631u, 32u, 8u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice64_8 ( Trice64_8 ) */ { 13643u, 64u, 8u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice8 ( TRice8_7 ) */ { 13558u, 8u, 7u, "msg:value=%d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice16 ( TRice16_7 ) */ { 13570u, 16u, 7u, "msg:value=%d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice32 ( TRice32_7 ) */ { 13582u, 32u, 7u, "msg:value=%d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice64 ( TRice64_7 ) */ { 13594u, 64u, 7u, "msg:value=%d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice8_7 ( TRice8_7 ) */ { 13606u, 8u, 7u, "msg:value=%d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice16_7 ( TRice16_7 ) */ { 13618u, 16u, 7u, "msg:value=%d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice32_7 ( TRice32_7 ) */ { 13630u, 32u, 7u, "msg:value=%d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice64_7 ( TRice64_7 ) */ { 13642u, 64u, 7u, "msg:value=%d, %d, %d, %d, %d, %d, %d\n" },
- /* trice8 ( trice8_6 ) */ { 13557u, 8u, 6u, "msg:value=%d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_6 ) */ { 13569u, 16u, 6u, "msg:value=%d, %d, %d, %d, %d, %d\n" },
- /* trice32 ( trice32_6 ) */ { 13581u, 32u, 6u, "msg:value=%d, %d, %d, %d, %d, %d\n" },
- /* trice64 ( trice64_6 ) */ { 13593u, 64u, 6u, "msg:value=%d, %d, %d, %d, %d, %d\n" },
- /* trice8_6 ( trice8_6 ) */ { 13605u, 8u, 6u, "msg:value=%d, %d, %d, %d, %d, %d\n" },
- /* trice16_6 ( trice16_6 ) */ { 13617u, 16u, 6u, "msg:value=%d, %d, %d, %d, %d, %d\n" },
- /* trice32_6 ( trice32_6 ) */ { 13629u, 32u, 6u, "msg:value=%d, %d, %d, %d, %d, %d\n" },
- /* trice64_6 ( trice64_6 ) */ { 13641u, 64u, 6u, "msg:value=%d, %d, %d, %d, %d, %d\n" },
- /* Trice8 ( Trice8_5 ) */ { 13556u, 8u, 5u, "msg:value=%d, %d, %d, %d, %d\n" },
- /* Trice16 ( Trice16_5 ) */ { 13568u, 16u, 5u, "msg:value=%d, %d, %d, %d, %d\n" },
- /* Trice32 ( Trice32_5 ) */ { 13580u, 32u, 5u, "msg:value=%d, %d, %d, %d, %d\n" },
- /* Trice64 ( Trice64_5 ) */ { 13592u, 64u, 5u, "msg:value=%d, %d, %d, %d, %d\n" },
- /* Trice8_5 ( Trice8_5 ) */ { 13604u, 8u, 5u, "msg:value=%d, %d, %d, %d, %d\n" },
- /* Trice16_5 ( Trice16_5 ) */ { 13616u, 16u, 5u, "msg:value=%d, %d, %d, %d, %d\n" },
- /* Trice32_5 ( Trice32_5 ) */ { 13628u, 32u, 5u, "msg:value=%d, %d, %d, %d, %d\n" },
- /* Trice64_5 ( Trice64_5 ) */ { 13640u, 64u, 5u, "msg:value=%d, %d, %d, %d, %d\n" },
- /* TRice8 ( TRice8_4 ) */ { 13555u, 8u, 4u, "msg:value=%d, %d, %d, %d\n" },
- /* TRice16 ( TRice16_4 ) */ { 13567u, 16u, 4u, "msg:value=%d, %d, %d, %d\n" },
- /* TRice32 ( TRice32_4 ) */ { 13579u, 32u, 4u, "msg:value=%d, %d, %d, %d\n" },
- /* TRice64 ( TRice64_4 ) */ { 13591u, 64u, 4u, "msg:value=%d, %d, %d, %d\n" },
- /* TRice8_4 ( TRice8_4 ) */ { 13603u, 8u, 4u, "msg:value=%d, %d, %d, %d\n" },
- /* TRice16_4 ( TRice16_4 ) */ { 13615u, 16u, 4u, "msg:value=%d, %d, %d, %d\n" },
- /* TRice32_4 ( TRice32_4 ) */ { 13627u, 32u, 4u, "msg:value=%d, %d, %d, %d\n" },
- /* TRice64_4 ( TRice64_4 ) */ { 13639u, 64u, 4u, "msg:value=%d, %d, %d, %d\n" },
- /* trice8 ( trice8_3 ) */ { 13554u, 8u, 3u, "msg:value=%d, %d, %d\n" },
- /* trice16 ( trice16_3 ) */ { 13566u, 16u, 3u, "msg:value=%d, %d, %d\n" },
- /* trice32 ( trice32_3 ) */ { 13578u, 32u, 3u, "msg:value=%d, %d, %d\n" },
- /* trice64 ( trice64_3 ) */ { 13590u, 64u, 3u, "msg:value=%d, %d, %d\n" },
- /* trice8_3 ( trice8_3 ) */ { 13602u, 8u, 3u, "msg:value=%d, %d, %d\n" },
- /* trice16_3 ( trice16_3 ) */ { 13614u, 16u, 3u, "msg:value=%d, %d, %d\n" },
- /* trice32_3 ( trice32_3 ) */ { 13626u, 32u, 3u, "msg:value=%d, %d, %d\n" },
- /* trice64_3 ( trice64_3 ) */ { 13638u, 64u, 3u, "msg:value=%d, %d, %d\n" },
- /* Trice8 ( Trice8_2 ) */ { 13553u, 8u, 2u, "msg:value=%d, %d\n" },
- /* Trice16 ( Trice16_2 ) */ { 13565u, 16u, 2u, "msg:value=%d, %d\n" },
- /* Trice32 ( Trice32_2 ) */ { 13577u, 32u, 2u, "msg:value=%d, %d\n" },
- /* Trice64 ( Trice64_2 ) */ { 13589u, 64u, 2u, "msg:value=%d, %d\n" },
- /* Trice8_2 ( Trice8_2 ) */ { 13601u, 8u, 2u, "msg:value=%d, %d\n" },
- /* Trice16_2 ( Trice16_2 ) */ { 13613u, 16u, 2u, "msg:value=%d, %d\n" },
- /* Trice32_2 ( Trice32_2 ) */ { 13625u, 32u, 2u, "msg:value=%d, %d\n" },
- /* Trice64_2 ( Trice64_2 ) */ { 13637u, 64u, 2u, "msg:value=%d, %d\n" },
- /* TRice8 ( TRice8_1 ) */ { 13552u, 8u, 1u, "msg:value=%d\n" },
- /* TRice16 ( TRice16_1 ) */ { 13564u, 16u, 1u, "msg:value=%d\n" },
- /* TRice32 ( TRice32_1 ) */ { 13576u, 32u, 1u, "msg:value=%d\n" },
- /* TRice64 ( TRice64_1 ) */ { 13588u, 64u, 1u, "msg:value=%d\n" },
- /* TRice8_1 ( TRice8_1 ) */ { 13600u, 8u, 1u, "msg:value=%d\n" },
- /* TRice16_1 ( TRice16_1 ) */ { 13612u, 16u, 1u, "msg:value=%d\n" },
- /* TRice32_1 ( TRice32_1 ) */ { 13624u, 32u, 1u, "msg:value=%d\n" },
- /* TRice64_1 ( TRice64_1 ) */ { 13636u, 64u, 1u, "msg:value=%d\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 13504u, 8u, 1u, "msg:value=%u\n" },
- /* TRICE8_1 ( TRICE8_1 ) */ { 13505u, 8u, 1u, "msg:value=%u\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 13506u, 8u, 1u, "msg:value=%u\n" },
- /* TRICE8_1 ( TRICE8_1 ) */ { 13507u, 8u, 1u, "msg:value=%u\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 13508u, 8u, 1u, "msg:value=%u\n" },
- /* TRICE8_1 ( TRICE8_1 ) */ { 13509u, 8u, 1u, "msg:value=%u\n" },
- /* trice8 ( trice8_1 ) */ { 13510u, 8u, 1u, "msg:value=%u\n" },
- /* trice8_1 ( trice8_1 ) */ { 13511u, 8u, 1u, "msg:value=%u\n" },
- /* Trice8 ( Trice8_1 ) */ { 13512u, 8u, 1u, "msg:value=%u\n" },
- /* Trice8_1 ( Trice8_1 ) */ { 13513u, 8u, 1u, "msg:value=%u\n" },
- /* TRice8 ( TRice8_1 ) */ { 13514u, 8u, 1u, "msg:value=%u\n" },
- /* TRice8_1 ( TRice8_1 ) */ { 13515u, 8u, 1u, "msg:value=%u\n" },
- /* TRICE16 ( TRICE16_1 ) */ { 13516u, 16u, 1u, "msg:value=%u\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 13517u, 16u, 1u, "msg:value=%u\n" },
- /* TRICE16 ( TRICE16_1 ) */ { 13518u, 16u, 1u, "msg:value=%u\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 13519u, 16u, 1u, "msg:value=%u\n" },
- /* TRICE16 ( TRICE16_1 ) */ { 13520u, 16u, 1u, "msg:value=%u\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 13521u, 16u, 1u, "msg:value=%u\n" },
- /* trice16 ( trice16_1 ) */ { 13522u, 16u, 1u, "msg:value=%u\n" },
- /* trice16_1 ( trice16_1 ) */ { 13523u, 16u, 1u, "msg:value=%u\n" },
- /* Trice16 ( Trice16_1 ) */ { 13524u, 16u, 1u, "msg:value=%u\n" },
- /* Trice16_1 ( Trice16_1 ) */ { 13525u, 16u, 1u, "msg:value=%u\n" },
- /* TRice16 ( TRice16_1 ) */ { 13526u, 16u, 1u, "msg:value=%u\n" },
- /* TRice16_1 ( TRice16_1 ) */ { 13527u, 16u, 1u, "msg:value=%u\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 13528u, 32u, 1u, "msg:value=%u\n" },
- /* TRICE32_1 ( TRICE32_1 ) */ { 13529u, 32u, 1u, "msg:value=%u\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 13530u, 32u, 1u, "msg:value=%u\n" },
- /* TRICE32_1 ( TRICE32_1 ) */ { 13531u, 32u, 1u, "msg:value=%u\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 13532u, 32u, 1u, "msg:value=%u\n" },
- /* TRICE32_1 ( TRICE32_1 ) */ { 13533u, 32u, 1u, "msg:value=%u\n" },
- /* trice32 ( trice32_1 ) */ { 13534u, 32u, 1u, "msg:value=%u\n" },
- /* trice32_1 ( trice32_1 ) */ { 13535u, 32u, 1u, "msg:value=%u\n" },
- /* Trice32 ( Trice32_1 ) */ { 13536u, 32u, 1u, "msg:value=%u\n" },
- /* Trice32_1 ( Trice32_1 ) */ { 13537u, 32u, 1u, "msg:value=%u\n" },
- /* TRice32 ( TRice32_1 ) */ { 13538u, 32u, 1u, "msg:value=%u\n" },
- /* TRice32_1 ( TRice32_1 ) */ { 13539u, 32u, 1u, "msg:value=%u\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 13540u, 64u, 1u, "msg:value=%u\n" },
- /* TRICE64_1 ( TRICE64_1 ) */ { 13541u, 64u, 1u, "msg:value=%u\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 13542u, 64u, 1u, "msg:value=%u\n" },
- /* TRICE64_1 ( TRICE64_1 ) */ { 13543u, 64u, 1u, "msg:value=%u\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 13544u, 64u, 1u, "msg:value=%u\n" },
- /* TRICE64_1 ( TRICE64_1 ) */ { 13545u, 64u, 1u, "msg:value=%u\n" },
- /* trice64 ( trice64_1 ) */ { 13546u, 64u, 1u, "msg:value=%u\n" },
- /* trice64_1 ( trice64_1 ) */ { 13547u, 64u, 1u, "msg:value=%u\n" },
- /* Trice64 ( Trice64_1 ) */ { 13548u, 64u, 1u, "msg:value=%u\n" },
- /* Trice64_1 ( Trice64_1 ) */ { 13549u, 64u, 1u, "msg:value=%u\n" },
- /* TRice64 ( TRice64_1 ) */ { 13550u, 64u, 1u, "msg:value=%u\n" },
- /* TRice64_1 ( TRice64_1 ) */ { 13551u, 64u, 1u, "msg:value=%u\n" },
- /* TRice ( TRice32_5 ) */ { 13332u, 32u, 5u, "msg:x = %g = %d.%03d, %d.%03d\n" },
- /* TRice ( TRice_0 ) */ { 13453u, 32u, 0u, "no value\n" },
- /* Trice ( Trice_0 ) */ { 13454u, 32u, 0u, "no value\n" },
- /* trice ( trice_0 ) */ { 13455u, 32u, 0u, "no value\n" },
- /* TRice8 ( TRice_0 ) */ { 13456u, 32u, 0u, "no value\n" },
- /* Trice8 ( Trice_0 ) */ { 13457u, 32u, 0u, "no value\n" },
- /* trice8 ( trice_0 ) */ { 13458u, 32u, 0u, "no value\n" },
- /* TRice16 ( TRice_0 ) */ { 13459u, 32u, 0u, "no value\n" },
- /* Trice16 ( Trice_0 ) */ { 13460u, 32u, 0u, "no value\n" },
- /* trice16 ( trice_0 ) */ { 13461u, 32u, 0u, "no value\n" },
- /* TRice32 ( TRice_0 ) */ { 13462u, 32u, 0u, "no value\n" },
- /* Trice32 ( Trice_0 ) */ { 13463u, 32u, 0u, "no value\n" },
- /* trice32 ( trice_0 ) */ { 13464u, 32u, 0u, "no value\n" },
- /* TRice64 ( TRice_0 ) */ { 13465u, 32u, 0u, "no value\n" },
- /* Trice64 ( Trice_0 ) */ { 13466u, 32u, 0u, "no value\n" },
- /* trice64 ( trice_0 ) */ { 13467u, 32u, 0u, "no value\n" },
- /* TRice_0 ( TRice_0 ) */ { 13468u, 32u, 0u, "no value\n" },
- /* Trice_0 ( Trice_0 ) */ { 13469u, 32u, 0u, "no value\n" },
- /* trice_0 ( trice_0 ) */ { 13470u, 32u, 0u, "no value\n" },
- /* TRice8_0 ( TRice_0 ) */ { 13471u, 32u, 0u, "no value\n" },
- /* Trice8_0 ( Trice_0 ) */ { 13472u, 32u, 0u, "no value\n" },
- /* trice8_0 ( trice_0 ) */ { 13473u, 32u, 0u, "no value\n" },
- /* TRice16_0 ( TRice_0 ) */ { 13474u, 32u, 0u, "no value\n" },
- /* Trice16_0 ( Trice_0 ) */ { 13475u, 32u, 0u, "no value\n" },
- /* trice16_0 ( trice_0 ) */ { 13476u, 32u, 0u, "no value\n" },
- /* TRice32_0 ( TRice_0 ) */ { 13477u, 32u, 0u, "no value\n" },
- /* Trice32_0 ( Trice_0 ) */ { 13478u, 32u, 0u, "no value\n" },
- /* trice32_0 ( trice_0 ) */ { 13479u, 32u, 0u, "no value\n" },
- /* TRice64_0 ( TRice_0 ) */ { 13480u, 32u, 0u, "no value\n" },
- /* Trice64_0 ( Trice_0 ) */ { 13481u, 32u, 0u, "no value\n" },
- /* trice64_0 ( trice_0 ) */ { 13482u, 32u, 0u, "no value\n" },
- /* TRice0 ( TRice_0 ) */ { 13483u, 32u, 0u, "no value\n" },
- /* Trice0 ( Trice_0 ) */ { 13484u, 32u, 0u, "no value\n" },
- /* trice0 ( trice_0 ) */ { 13485u, 32u, 0u, "no value\n" },
- /* TRice ( TRice_0 ) */ { 13486u, 32u, 0u, "no value\n" },
- /* Trice ( Trice_0 ) */ { 13487u, 32u, 0u, "no value\n" },
- /* trice ( trice_0 ) */ { 13488u, 32u, 0u, "no value\n" },
- /* TRICE ( TRICE_0 ) */ { 13735u, 32u, 0u, "notice:blue:white+h\n" },
- /* trice ( trice_0 ) */ { 13785u, 32u, 0u, "notice:blue:white+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13835u, 32u, 0u, "notice:blue:white+h\n" },
- /* Trice ( Trice_0 ) */ { 13885u, 32u, 0u, "notice:blue:white+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13935u, 32u, 0u, "notice:blue:white+h\n" },
- /* TRice ( TRice_0 ) */ { 13985u, 32u, 0u, "notice:blue:white+h\n" },
- /* Trice ( Trice_0 ) */ { 15309u, 32u, 0u, "ok!\n" },
- /* TRice ( TRice_0 ) */ { 13056u, 32u, 0u, "ok\n" },
- /* TRice ( TRice_0 ) */ { 13058u, 32u, 0u, "ok\n" },
- /* TRice ( TRice_0 ) */ { 13060u, 32u, 0u, "ok\n" },
- /* TRice ( TRice_0 ) */ { 13062u, 32u, 0u, "ok\n" },
- /* TRice ( TRice_0 ) */ { 13064u, 32u, 0u, "ok\n" },
- /* TRice ( TRice_0 ) */ { 13066u, 32u, 0u, "ok\n" },
- /* TRice ( TRice_0 ) */ { 13068u, 32u, 0u, "ok\n" },
- /* TRice ( TRice_0 ) */ { 13070u, 32u, 0u, "ok\n" },
- /* TRice ( TRice_0 ) */ { 13072u, 32u, 0u, "ok\n" },
- /* TRice ( TRice_0 ) */ { 13074u, 32u, 0u, "ok\n" },
- /* TRice ( TRice_0 ) */ { 13076u, 32u, 0u, "ok\n" },
- /* TRice ( TRice_0 ) */ { 13078u, 32u, 0u, "ok\n" },
- /* TRice ( TRice_0 ) */ { 13079u, 32u, 0u, "ok\n" },
- /* TRice ( TRice_0 ) */ { 13080u, 32u, 0u, "ok\n" },
- /* TRice ( TRice_0 ) */ { 13081u, 32u, 0u, "ok\n" },
- /* TRice ( TRice32_1 ) */ { 13338u, 32u, 1u, "rd: 15\t%-4d\tPad with spaces (width 4, left justified)\n" },
- /* TRice ( TRice32_1 ) */ { 13337u, 32u, 1u, "rd: 15\t%4d \tPad with spaces (width 4, right justified)\n" },
- /* trice8B ( trice8B ) */ { 13279u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd: %02x\n" },
- /* trice ( trice32_1 ) */ { 13348u, 32u, 1u, "rd: 'A' \t%q \tQuoted character\n" },
- /* TRice ( TRice32_1 ) */ { 13336u, 32u, 1u, "rd: +15 \t%+d \tAlways show sign\n" },
- /* TRice ( TRice32_1 ) */ { 13339u, 32u, 1u, "rd: 0015\t%04d\tPad with zeroes (width 4)\n" },
- /* TRice ( TRice32_1 ) */ { 13344u, 32u, 1u, "rd: 0xf \t%#x \tBase 16, with leading 0x\n" },
- /* trice ( trice32_1 ) */ { 13361u, 32u, 1u, "rd: 1.234560e+02\t\t%e \t%%e Scientific notation\n" },
- /* trice64 ( trice64_1 ) */ { 13367u, 64u, 1u, "rd: 1.234560e+02\t\t%e \t%%e Scientific notation\n" },
- /* TRice ( TRice32_1 ) */ { 13340u, 32u, 1u, "rd: 1111 \t%b \tBase 2\n" },
- /* trice ( trice32_1 ) */ { 13365u, 32u, 1u, "rd: 123.456\t\t%g\t\t%%g Exponent as needed, necessary digits only\n" },
- /* trice64 ( trice64_1 ) */ { 13371u, 64u, 1u, "rd: 123.456\t\t%g\t\t%%g Exponent as needed, necessary digits only\n" },
- /* trice ( trice32_1 ) */ { 13362u, 32u, 1u, "rd: 123.456000\t\t%f \t%%f Decimal point, no exponent\n" },
- /* trice64 ( trice64_1 ) */ { 13368u, 64u, 1u, "rd: 123.456000\t\t%f \t%%f Decimal point, no exponent\n" },
- /* trice ( trice32_1 ) */ { 13363u, 32u, 1u, "rd: 123.46\t\t\t%.2f\t\t%%.2f Default width, precision 2\n" },
- /* trice64 ( trice64_1 ) */ { 13369u, 64u, 1u, "rd: 123.46\t\t\t%.2f \t%%.2f Default width, precision 2\n" },
- /* TRice ( TRice32_1 ) */ { 13335u, 32u, 1u, "rd: 15 \t%d \tBase 10\n" },
- /* TRice ( TRice32_1 ) */ { 13341u, 32u, 1u, "rd: 17 \t%o \tBase 8\n" },
- /* triceS ( triceS ) */ { 13378u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd: 63 61 66 c3 a9 \t% x\tHex dump with spaces\n" },
- /* triceS ( triceS ) */ { 13377u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd: 636166c3a9 \t\t%x\tHex dump of byte values\n" },
- /* trice ( trice32_1 ) */ { 13347u, 32u, 1u, "rd: A \t%c \tCharacter\n" },
- /* TRice ( TRice32_1 ) */ { 13343u, 32u, 1u, "rd: F \t%X \tBase 16, uppercase\n" },
- /* trice ( trice32_1 ) */ { 13349u, 32u, 1u, "rd: U+0041 \t%U \tUnicode\n" },
- /* trice ( trice32_1 ) */ { 13350u, 32u, 1u, "rd: U+0041 'A' \t%#U \tUnicode with character\n" },
- /* triceS ( triceS ) */ { 13376u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd: \"café\" \t\t%q\t\tQuoted string\n" },
- /* triceS ( triceS ) */ { 13373u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd: café \t\t\t%s\t\tPlain string\n" },
- /* triceS ( triceS ) */ { 13375u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd: café␣␣ \t\t%-6s \t\tWidth 6, left justify\n" },
- /* TRice ( TRice32_1 ) */ { 13342u, 32u, 1u, "rd: f \t%x \tBase 16, lowercase\n" },
- /* trice ( trice32_1 ) */ { 13364u, 32u, 1u, "rd: ␣␣123.46\t\t%8.2f\t%%8.2f Width 8, precision 2\n" },
- /* trice64 ( trice64_1 ) */ { 13370u, 64u, 1u, "rd: ␣␣123.46\t\t%8.2f \t%%8.2f Width 8, precision 2\n" },
- /* triceS ( triceS ) */ { 13374u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd: ␣␣café \t\t%6s \t\tWidth 6, right justify\n" },
- /* trice ( trice32_1 ) */ { 13398u, 32u, 1u, "rd:%E (%%E)\n" },
- /* trice64 ( trice64_1 ) */ { 13401u, 64u, 1u, "rd:%E (%%E)\n" },
- /* trice ( trice32_1 ) */ { 13399u, 32u, 1u, "rd:%F (%%F)\n" },
- /* trice64 ( trice64_1 ) */ { 13402u, 64u, 1u, "rd:%F (%%F)\n" },
- /* trice ( trice32_1 ) */ { 13400u, 32u, 1u, "rd:%G (%%G)\n" },
- /* trice64 ( trice64_1 ) */ { 13403u, 64u, 1u, "rd:%G (%%G)\n" },
- /* trice ( trice32_1 ) */ { 13404u, 32u, 1u, "rd:%e (%%e)\n" },
- /* trice64 ( trice64_1 ) */ { 13407u, 64u, 1u, "rd:%e (%%e)\n" },
- /* trice ( trice32_1 ) */ { 13405u, 32u, 1u, "rd:%f (%%f)\n" },
- /* trice64 ( trice64_1 ) */ { 13408u, 64u, 1u, "rd:%f (%%f)\n" },
- /* trice ( trice32_1 ) */ { 13406u, 32u, 1u, "rd:%g (%%g)\n" },
- /* trice64 ( trice64_1 ) */ { 13409u, 64u, 1u, "rd:%g (%%g)\n" },
- /* TriceS ( TriceS ) */ { 16344u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd:%s <- float number as string\n" },
- /* trice ( trice32_12 ) */ { 14003u, 32u, 12u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_12 ) */ { 14015u, 32u, 12u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_12 ) */ { 14027u, 32u, 12u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_12 ) */ { 15114u, 32u, 12u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_11 ) */ { 14002u, 32u, 11u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_11 ) */ { 14014u, 32u, 11u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_11 ) */ { 14026u, 32u, 11u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_11 ) */ { 15113u, 32u, 11u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_10 ) */ { 14001u, 32u, 10u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_10 ) */ { 14013u, 32u, 10u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_10 ) */ { 14025u, 32u, 10u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_10 ) */ { 15112u, 32u, 10u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_9 ) */ { 14000u, 32u, 9u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_9 ) */ { 14012u, 32u, 9u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_9 ) */ { 14024u, 32u, 9u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_9 ) */ { 15111u, 32u, 9u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_8 ) */ { 13999u, 32u, 8u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_8 ) */ { 14011u, 32u, 8u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_8 ) */ { 14023u, 32u, 8u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_8 ) */ { 15110u, 32u, 8u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_7 ) */ { 13998u, 32u, 7u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_7 ) */ { 14010u, 32u, 7u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_7 ) */ { 14022u, 32u, 7u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_7 ) */ { 15109u, 32u, 7u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_6 ) */ { 13997u, 32u, 6u, "rd:TRICE %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_6 ) */ { 14009u, 32u, 6u, "rd:TRICE %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_6 ) */ { 14021u, 32u, 6u, "rd:TRICE %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_6 ) */ { 15108u, 32u, 6u, "rd:TRICE %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_5 ) */ { 13996u, 32u, 5u, "rd:TRICE %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_5 ) */ { 14008u, 32u, 5u, "rd:TRICE %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_5 ) */ { 14020u, 32u, 5u, "rd:TRICE %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_5 ) */ { 15107u, 32u, 5u, "rd:TRICE %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_4 ) */ { 13995u, 32u, 4u, "rd:TRICE %d, %d, %d, %d\n" },
- /* trice ( trice32_4 ) */ { 14007u, 32u, 4u, "rd:TRICE %d, %d, %d, %d\n" },
- /* trice ( trice32_4 ) */ { 14019u, 32u, 4u, "rd:TRICE %d, %d, %d, %d\n" },
- /* trice ( trice32_4 ) */ { 15106u, 32u, 4u, "rd:TRICE %d, %d, %d, %d\n" },
- /* trice ( trice32_3 ) */ { 13994u, 32u, 3u, "rd:TRICE %d, %d, %d\n" },
- /* trice ( trice32_3 ) */ { 14006u, 32u, 3u, "rd:TRICE %d, %d, %d\n" },
- /* trice ( trice32_3 ) */ { 14018u, 32u, 3u, "rd:TRICE %d, %d, %d\n" },
- /* trice ( trice32_3 ) */ { 15105u, 32u, 3u, "rd:TRICE %d, %d, %d\n" },
- /* trice ( trice32_2 ) */ { 13993u, 32u, 2u, "rd:TRICE %d, %d\n" },
- /* trice ( trice32_2 ) */ { 14005u, 32u, 2u, "rd:TRICE %d, %d\n" },
- /* trice ( trice32_2 ) */ { 14017u, 32u, 2u, "rd:TRICE %d, %d\n" },
- /* trice ( trice32_2 ) */ { 15104u, 32u, 2u, "rd:TRICE %d, %d\n" },
- /* trice ( trice32_1 ) */ { 13992u, 32u, 1u, "rd:TRICE %d\n" },
- /* trice ( trice32_1 ) */ { 14004u, 32u, 1u, "rd:TRICE %d\n" },
- /* trice ( trice32_1 ) */ { 14016u, 32u, 1u, "rd:TRICE %d\n" },
- /* trice ( trice32_1 ) */ { 15103u, 32u, 1u, "rd:TRICE %d\n" },
- /* trice ( trice32_1 ) */ { 14942u, 32u, 1u, "rd:TRICE float %+.9f (%%.9f)\n" },
- /* trice ( trice32_1 ) */ { 14947u, 32u, 1u, "rd:TRICE float %+.9f (%%.9f)\n" },
- /* trice ( trice32_1 ) */ { 14944u, 32u, 1u, "rd:TRICE float %+9.6f (%%9.6f)\n" },
- /* trice ( trice32_1 ) */ { 14949u, 32u, 1u, "rd:TRICE float %+9.6f (%%9.6f)\n" },
- /* trice ( trice32_1 ) */ { 14943u, 32u, 1u, "rd:TRICE float %+9.f (%%9.f)\n" },
- /* trice ( trice32_1 ) */ { 14948u, 32u, 1u, "rd:TRICE float %+9.f (%%9.f)\n" },
- /* trice ( trice32_1 ) */ { 14941u, 32u, 1u, "rd:TRICE float %+9f (%%9f)\n" },
- /* trice ( trice32_1 ) */ { 14946u, 32u, 1u, "rd:TRICE float %+9f (%%9f)\n" },
- /* trice ( trice32_1 ) */ { 14940u, 32u, 1u, "rd:TRICE float %+f (%%f)\n" },
- /* trice ( trice32_1 ) */ { 14945u, 32u, 1u, "rd:TRICE float %+f (%%f)\n" },
- /* trice ( trice32_1 ) */ { 14952u, 32u, 1u, "rd:TRICE float %-.9f (%%.9f)\n" },
- /* trice ( trice32_1 ) */ { 14957u, 32u, 1u, "rd:TRICE float %-.9f (%%.9f)\n" },
- /* trice ( trice32_1 ) */ { 14954u, 32u, 1u, "rd:TRICE float %-9.6f (%%9.6f)\n" },
- /* trice ( trice32_1 ) */ { 14959u, 32u, 1u, "rd:TRICE float %-9.6f (%%9.6f)\n" },
- /* trice ( trice32_1 ) */ { 14953u, 32u, 1u, "rd:TRICE float %-9.f (%%9.f)\n" },
- /* trice ( trice32_1 ) */ { 14958u, 32u, 1u, "rd:TRICE float %-9.f (%%9.f)\n" },
- /* trice ( trice32_1 ) */ { 14951u, 32u, 1u, "rd:TRICE float %-9f (%%9f)\n" },
- /* trice ( trice32_1 ) */ { 14956u, 32u, 1u, "rd:TRICE float %-9f (%%9f)\n" },
- /* trice ( trice32_1 ) */ { 14950u, 32u, 1u, "rd:TRICE float %-f (%%f)\n" },
- /* trice ( trice32_1 ) */ { 14955u, 32u, 1u, "rd:TRICE float %-f (%%f)\n" },
- /* trice ( trice32_1 ) */ { 14932u, 32u, 1u, "rd:TRICE float %.9f (%%.9f)\n" },
- /* trice ( trice32_1 ) */ { 14937u, 32u, 1u, "rd:TRICE float %.9f (%%.9f)\n" },
- /* trice ( trice32_1 ) */ { 14934u, 32u, 1u, "rd:TRICE float %9.6f (%%9.6f)\n" },
- /* trice ( trice32_1 ) */ { 14939u, 32u, 1u, "rd:TRICE float %9.6f (%%9.6f)\n" },
- /* trice ( trice32_1 ) */ { 14933u, 32u, 1u, "rd:TRICE float %9.f (%%9.f)\n" },
- /* trice ( trice32_1 ) */ { 14938u, 32u, 1u, "rd:TRICE float %9.f (%%9.f)\n" },
- /* trice ( trice32_1 ) */ { 14931u, 32u, 1u, "rd:TRICE float %9f (%%9f)\n" },
- /* trice ( trice32_1 ) */ { 14936u, 32u, 1u, "rd:TRICE float %9f (%%9f)\n" },
- /* TRICE ( TRICE32_1 ) */ { 14976u, 32u, 1u, "rd:TRICE float %E (%%E)\n" },
- /* trice ( trice32_1 ) */ { 14995u, 32u, 1u, "rd:TRICE float %E (%%E)\n" },
- /* TRICE ( TRICE32_1 ) */ { 14977u, 32u, 1u, "rd:TRICE float %F (%%F)\n" },
- /* trice ( trice32_1 ) */ { 14996u, 32u, 1u, "rd:TRICE float %F (%%F)\n" },
- /* TRICE ( TRICE32_1 ) */ { 14978u, 32u, 1u, "rd:TRICE float %G (%%G)\n" },
- /* trice ( trice32_1 ) */ { 14997u, 32u, 1u, "rd:TRICE float %G (%%G)\n" },
- /* TRICE ( TRICE32_1 ) */ { 14973u, 32u, 1u, "rd:TRICE float %e (%%e)\n" },
- /* trice ( trice32_1 ) */ { 14992u, 32u, 1u, "rd:TRICE float %e (%%e)\n" },
- /* trice ( trice32_1 ) */ { 14930u, 32u, 1u, "rd:TRICE float %f (%%f)\n" },
- /* trice ( trice32_1 ) */ { 14935u, 32u, 1u, "rd:TRICE float %f (%%f)\n" },
- /* TRICE ( TRICE32_1 ) */ { 14974u, 32u, 1u, "rd:TRICE float %f (%%f)\n" },
- /* trice ( trice32_1 ) */ { 14993u, 32u, 1u, "rd:TRICE float %f (%%f)\n" },
- /* TRICE ( TRICE32_1 ) */ { 14975u, 32u, 1u, "rd:TRICE float %g (%%g)\n" },
- /* trice ( trice32_1 ) */ { 14994u, 32u, 1u, "rd:TRICE float %g (%%g)\n" },
- /* trice16 ( trice16_12 ) */ { 14262u, 16u, 12u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_12 ) */ { 14274u, 16u, 12u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_12 ) */ { 14286u, 16u, 12u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_11 ) */ { 14261u, 16u, 11u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_11 ) */ { 14273u, 16u, 11u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_11 ) */ { 14285u, 16u, 11u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_10 ) */ { 14260u, 16u, 10u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_10 ) */ { 14272u, 16u, 10u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_10 ) */ { 14284u, 16u, 10u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_9 ) */ { 14259u, 16u, 9u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_9 ) */ { 14271u, 16u, 9u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_9 ) */ { 14283u, 16u, 9u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_8 ) */ { 14258u, 16u, 8u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_8 ) */ { 14270u, 16u, 8u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_8 ) */ { 14282u, 16u, 8u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_7 ) */ { 14257u, 16u, 7u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_7 ) */ { 14269u, 16u, 7u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_7 ) */ { 14281u, 16u, 7u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_6 ) */ { 14256u, 16u, 6u, "rd:TRICE16 %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_6 ) */ { 14268u, 16u, 6u, "rd:TRICE16 %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_6 ) */ { 14280u, 16u, 6u, "rd:TRICE16 %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_5 ) */ { 14255u, 16u, 5u, "rd:TRICE16 %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_5 ) */ { 14267u, 16u, 5u, "rd:TRICE16 %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_5 ) */ { 14279u, 16u, 5u, "rd:TRICE16 %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_4 ) */ { 14254u, 16u, 4u, "rd:TRICE16 %d, %d, %d, %d\n" },
- /* trice16 ( trice16_4 ) */ { 14266u, 16u, 4u, "rd:TRICE16 %d, %d, %d, %d\n" },
- /* trice16 ( trice16_4 ) */ { 14278u, 16u, 4u, "rd:TRICE16 %d, %d, %d, %d\n" },
- /* trice16 ( trice16_3 ) */ { 14253u, 16u, 3u, "rd:TRICE16 %d, %d, %d\n" },
- /* trice16 ( trice16_3 ) */ { 14265u, 16u, 3u, "rd:TRICE16 %d, %d, %d\n" },
- /* trice16 ( trice16_3 ) */ { 14277u, 16u, 3u, "rd:TRICE16 %d, %d, %d\n" },
- /* trice16 ( trice16_2 ) */ { 14252u, 16u, 2u, "rd:TRICE16 %d, %d\n" },
- /* trice16 ( trice16_2 ) */ { 14264u, 16u, 2u, "rd:TRICE16 %d, %d\n" },
- /* trice16 ( trice16_2 ) */ { 14276u, 16u, 2u, "rd:TRICE16 %d, %d\n" },
- /* trice16 ( trice16_1 ) */ { 14251u, 16u, 1u, "rd:TRICE16 %d\n" },
- /* trice16 ( trice16_1 ) */ { 14263u, 16u, 1u, "rd:TRICE16 %d\n" },
- /* trice16 ( trice16_1 ) */ { 14275u, 16u, 1u, "rd:TRICE16 %d\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 14288u, 16u, 1u, "rd:TRICE16_1 %d\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 14300u, 16u, 1u, "rd:TRICE16_1 %d\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 14312u, 16u, 1u, "rd:TRICE16_1 %d\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 15031u, 16u, 1u, "rd:TRICE16_1 line %b (%%b -1)\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 15034u, 16u, 1u, "rd:TRICE16_1 line %d (%%d -1)\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 15032u, 16u, 1u, "rd:TRICE16_1 line %o (%%o -1)\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 15028u, 16u, 1u, "rd:TRICE16_1 line %t (%%t ,0)\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 15029u, 16u, 1u, "rd:TRICE16_1 line %t (%%t ,2)\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 15030u, 16u, 1u, "rd:TRICE16_1 line %u (%%u -1)\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 15033u, 16u, 1u, "rd:TRICE16_1 line %x (%%x -1)\n" },
- /* TRICE16_10 ( TRICE16_10 ) */ { 14297u, 16u, 10u, "rd:TRICE16_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_10 ( TRICE16_10 ) */ { 14309u, 16u, 10u, "rd:TRICE16_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_10 ( TRICE16_10 ) */ { 14321u, 16u, 10u, "rd:TRICE16_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_11 ( TRICE16_11 ) */ { 14298u, 16u, 11u, "rd:TRICE16_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_11 ( TRICE16_11 ) */ { 14310u, 16u, 11u, "rd:TRICE16_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_11 ( TRICE16_11 ) */ { 14322u, 16u, 11u, "rd:TRICE16_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_12 ( TRICE16_12 ) */ { 14299u, 16u, 12u, "rd:TRICE16_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_12 ( TRICE16_12 ) */ { 14311u, 16u, 12u, "rd:TRICE16_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_12 ( TRICE16_12 ) */ { 14323u, 16u, 12u, "rd:TRICE16_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_2 ( TRICE16_2 ) */ { 14289u, 16u, 2u, "rd:TRICE16_2 %d, %d\n" },
- /* TRICE16_2 ( TRICE16_2 ) */ { 14301u, 16u, 2u, "rd:TRICE16_2 %d, %d\n" },
- /* TRICE16_2 ( TRICE16_2 ) */ { 14313u, 16u, 2u, "rd:TRICE16_2 %d, %d\n" },
- /* TRICE16_3 ( TRICE16_3 ) */ { 14290u, 16u, 3u, "rd:TRICE16_3 %d, %d, %d\n" },
- /* TRICE16_3 ( TRICE16_3 ) */ { 14302u, 16u, 3u, "rd:TRICE16_3 %d, %d, %d\n" },
- /* TRICE16_3 ( TRICE16_3 ) */ { 14314u, 16u, 3u, "rd:TRICE16_3 %d, %d, %d\n" },
- /* TRICE16_4 ( TRICE16_4 ) */ { 14291u, 16u, 4u, "rd:TRICE16_4 %d, %d, %d, %d\n" },
- /* TRICE16_4 ( TRICE16_4 ) */ { 14303u, 16u, 4u, "rd:TRICE16_4 %d, %d, %d, %d\n" },
- /* TRICE16_4 ( TRICE16_4 ) */ { 14315u, 16u, 4u, "rd:TRICE16_4 %d, %d, %d, %d\n" },
- /* TRICE16_5 ( TRICE16_5 ) */ { 14292u, 16u, 5u, "rd:TRICE16_5 %d, %d, %d, %d, %d\n" },
- /* TRICE16_5 ( TRICE16_5 ) */ { 14304u, 16u, 5u, "rd:TRICE16_5 %d, %d, %d, %d, %d\n" },
- /* TRICE16_5 ( TRICE16_5 ) */ { 14316u, 16u, 5u, "rd:TRICE16_5 %d, %d, %d, %d, %d\n" },
- /* TRICE16_6 ( TRICE16_6 ) */ { 14293u, 16u, 6u, "rd:TRICE16_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_6 ( TRICE16_6 ) */ { 14305u, 16u, 6u, "rd:TRICE16_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_6 ( TRICE16_6 ) */ { 14317u, 16u, 6u, "rd:TRICE16_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_7 ( TRICE16_7 ) */ { 14294u, 16u, 7u, "rd:TRICE16_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_7 ( TRICE16_7 ) */ { 14306u, 16u, 7u, "rd:TRICE16_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_7 ( TRICE16_7 ) */ { 14318u, 16u, 7u, "rd:TRICE16_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_8 ( TRICE16_8 ) */ { 14295u, 16u, 8u, "rd:TRICE16_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_8 ( TRICE16_8 ) */ { 14307u, 16u, 8u, "rd:TRICE16_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_8 ( TRICE16_8 ) */ { 14319u, 16u, 8u, "rd:TRICE16_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_9 ( TRICE16_9 ) */ { 14296u, 16u, 9u, "rd:TRICE16_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_9 ( TRICE16_9 ) */ { 14308u, 16u, 9u, "rd:TRICE16_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE16_9 ( TRICE16_9 ) */ { 14320u, 16u, 9u, "rd:TRICE16_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_12 ) */ { 14410u, 32u, 12u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_12 ) */ { 14422u, 32u, 12u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_12 ) */ { 14434u, 32u, 12u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_11 ) */ { 14409u, 32u, 11u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_11 ) */ { 14421u, 32u, 11u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_11 ) */ { 14433u, 32u, 11u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_10 ) */ { 14408u, 32u, 10u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_10 ) */ { 14420u, 32u, 10u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_10 ) */ { 14432u, 32u, 10u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_9 ) */ { 14407u, 32u, 9u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_9 ) */ { 14419u, 32u, 9u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_9 ) */ { 14431u, 32u, 9u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_8 ) */ { 14406u, 32u, 8u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_8 ) */ { 14418u, 32u, 8u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_8 ) */ { 14430u, 32u, 8u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_7 ) */ { 14405u, 32u, 7u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_7 ) */ { 14417u, 32u, 7u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_7 ) */ { 14429u, 32u, 7u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_6 ) */ { 14404u, 32u, 6u, "rd:TRICE32 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_6 ) */ { 14416u, 32u, 6u, "rd:TRICE32 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_6 ) */ { 14428u, 32u, 6u, "rd:TRICE32 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_5 ) */ { 14403u, 32u, 5u, "rd:TRICE32 %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_5 ) */ { 14415u, 32u, 5u, "rd:TRICE32 %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_5 ) */ { 14427u, 32u, 5u, "rd:TRICE32 %d, %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_4 ) */ { 14402u, 32u, 4u, "rd:TRICE32 %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_4 ) */ { 14414u, 32u, 4u, "rd:TRICE32 %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_4 ) */ { 14426u, 32u, 4u, "rd:TRICE32 %d, %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_3 ) */ { 14401u, 32u, 3u, "rd:TRICE32 %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_3 ) */ { 14413u, 32u, 3u, "rd:TRICE32 %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_3 ) */ { 14425u, 32u, 3u, "rd:TRICE32 %d, %d, %d\n" },
- /* TRICE32 ( TRICE32_2 ) */ { 14400u, 32u, 2u, "rd:TRICE32 %d, %d\n" },
- /* TRICE32 ( TRICE32_2 ) */ { 14412u, 32u, 2u, "rd:TRICE32 %d, %d\n" },
- /* TRICE32 ( TRICE32_2 ) */ { 14424u, 32u, 2u, "rd:TRICE32 %d, %d\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 14399u, 32u, 1u, "rd:TRICE32 %d\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 14411u, 32u, 1u, "rd:TRICE32 %d\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 14423u, 32u, 1u, "rd:TRICE32 %d\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 15008u, 32u, 1u, "rd:TRICE32 float %12.6E (%%12.6E)\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 15009u, 32u, 1u, "rd:TRICE32 float %12.6F (%%12.6F)\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 15010u, 32u, 1u, "rd:TRICE32 float %12.6G (%%12.6G)\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 15005u, 32u, 1u, "rd:TRICE32 float %12.6e (%%12.6e)\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 15006u, 32u, 1u, "rd:TRICE32 float %12.6f (%%12.6f)\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 15007u, 32u, 1u, "rd:TRICE32 float %12.6g (%%12.6g)\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 14970u, 32u, 1u, "rd:TRICE32 float %E (%%E)\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 14971u, 32u, 1u, "rd:TRICE32 float %F (%%F)\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 14972u, 32u, 1u, "rd:TRICE32 float %G (%%G)\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 14967u, 32u, 1u, "rd:TRICE32 float %e (%%e)\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 14968u, 32u, 1u, "rd:TRICE32 float %f (%%f)\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 14969u, 32u, 1u, "rd:TRICE32 float %g (%%g)\n" },
- /* TRICE32_1 ( TRICE32_1 ) */ { 14436u, 32u, 1u, "rd:TRICE32_1 %d\n" },
- /* TRICE32_1 ( TRICE32_1 ) */ { 14448u, 32u, 1u, "rd:TRICE32_1 %d\n" },
- /* TRICE32_1 ( TRICE32_1 ) */ { 14460u, 32u, 1u, "rd:TRICE32_1 %d\n" },
- /* TRICE32_1 ( TRICE32_1 ) */ { 14964u, 32u, 1u, "rd:TRICE32_1 float %E (%%E)\n" },
- /* TRICE32_1 ( TRICE32_1 ) */ { 14965u, 32u, 1u, "rd:TRICE32_1 float %F (%%F)\n" },
- /* TRICE32_1 ( TRICE32_1 ) */ { 14966u, 32u, 1u, "rd:TRICE32_1 float %G (%%G)\n" },
- /* TRICE32_1 ( TRICE32_1 ) */ { 14961u, 32u, 1u, "rd:TRICE32_1 float %e (%%e)\n" },
- /* TRICE32_1 ( TRICE32_1 ) */ { 14962u, 32u, 1u, "rd:TRICE32_1 float %f (%%f)\n" },
- /* TRICE32_1 ( TRICE32_1 ) */ { 14963u, 32u, 1u, "rd:TRICE32_1 float %g (%%g)\n" },
- /* TRICE32_10 ( TRICE32_10 ) */ { 14445u, 32u, 10u, "rd:TRICE32_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_10 ( TRICE32_10 ) */ { 14457u, 32u, 10u, "rd:TRICE32_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_10 ( TRICE32_10 ) */ { 14469u, 32u, 10u, "rd:TRICE32_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_11 ( TRICE32_11 ) */ { 14446u, 32u, 11u, "rd:TRICE32_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_11 ( TRICE32_11 ) */ { 14458u, 32u, 11u, "rd:TRICE32_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_11 ( TRICE32_11 ) */ { 14470u, 32u, 11u, "rd:TRICE32_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_12 ( TRICE32_12 ) */ { 14447u, 32u, 12u, "rd:TRICE32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_12 ( TRICE32_12 ) */ { 14459u, 32u, 12u, "rd:TRICE32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_12 ( TRICE32_12 ) */ { 14471u, 32u, 12u, "rd:TRICE32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_2 ( TRICE32_2 ) */ { 14437u, 32u, 2u, "rd:TRICE32_2 %d, %d\n" },
- /* TRICE32_2 ( TRICE32_2 ) */ { 14449u, 32u, 2u, "rd:TRICE32_2 %d, %d\n" },
- /* TRICE32_2 ( TRICE32_2 ) */ { 14461u, 32u, 2u, "rd:TRICE32_2 %d, %d\n" },
- /* TRICE32_3 ( TRICE32_3 ) */ { 14438u, 32u, 3u, "rd:TRICE32_3 %d, %d, %d\n" },
- /* TRICE32_3 ( TRICE32_3 ) */ { 14450u, 32u, 3u, "rd:TRICE32_3 %d, %d, %d\n" },
- /* TRICE32_3 ( TRICE32_3 ) */ { 14462u, 32u, 3u, "rd:TRICE32_3 %d, %d, %d\n" },
- /* TRICE32_4 ( TRICE32_4 ) */ { 14439u, 32u, 4u, "rd:TRICE32_4 %d, %d, %d, %d\n" },
- /* TRICE32_4 ( TRICE32_4 ) */ { 14451u, 32u, 4u, "rd:TRICE32_4 %d, %d, %d, %d\n" },
- /* TRICE32_4 ( TRICE32_4 ) */ { 14463u, 32u, 4u, "rd:TRICE32_4 %d, %d, %d, %d\n" },
- /* TRICE32_5 ( TRICE32_5 ) */ { 14440u, 32u, 5u, "rd:TRICE32_5 %d, %d, %d, %d, %d\n" },
- /* TRICE32_5 ( TRICE32_5 ) */ { 14452u, 32u, 5u, "rd:TRICE32_5 %d, %d, %d, %d, %d\n" },
- /* TRICE32_5 ( TRICE32_5 ) */ { 14464u, 32u, 5u, "rd:TRICE32_5 %d, %d, %d, %d, %d\n" },
- /* TRICE32_6 ( TRICE32_6 ) */ { 14441u, 32u, 6u, "rd:TRICE32_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_6 ( TRICE32_6 ) */ { 14453u, 32u, 6u, "rd:TRICE32_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_6 ( TRICE32_6 ) */ { 14465u, 32u, 6u, "rd:TRICE32_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_7 ( TRICE32_7 ) */ { 14442u, 32u, 7u, "rd:TRICE32_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_7 ( TRICE32_7 ) */ { 14454u, 32u, 7u, "rd:TRICE32_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_7 ( TRICE32_7 ) */ { 14466u, 32u, 7u, "rd:TRICE32_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_8 ( TRICE32_8 ) */ { 14443u, 32u, 8u, "rd:TRICE32_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_8 ( TRICE32_8 ) */ { 14455u, 32u, 8u, "rd:TRICE32_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_8 ( TRICE32_8 ) */ { 14467u, 32u, 8u, "rd:TRICE32_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_9 ( TRICE32_9 ) */ { 14444u, 32u, 9u, "rd:TRICE32_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_9 ( TRICE32_9 ) */ { 14456u, 32u, 9u, "rd:TRICE32_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE32_9 ( TRICE32_9 ) */ { 14468u, 32u, 9u, "rd:TRICE32_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_12 ) */ { 14558u, 64u, 12u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_12 ) */ { 14570u, 64u, 12u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_12 ) */ { 14582u, 64u, 12u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_11 ) */ { 14557u, 64u, 11u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_11 ) */ { 14569u, 64u, 11u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_11 ) */ { 14581u, 64u, 11u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_10 ) */ { 14556u, 64u, 10u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_10 ) */ { 14568u, 64u, 10u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_10 ) */ { 14580u, 64u, 10u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_9 ) */ { 14555u, 64u, 9u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_9 ) */ { 14567u, 64u, 9u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_9 ) */ { 14579u, 64u, 9u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_8 ) */ { 14554u, 64u, 8u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_8 ) */ { 14566u, 64u, 8u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_8 ) */ { 14578u, 64u, 8u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_7 ) */ { 14553u, 64u, 7u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_7 ) */ { 14565u, 64u, 7u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_7 ) */ { 14577u, 64u, 7u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_6 ) */ { 14552u, 64u, 6u, "rd:TRICE64 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_6 ) */ { 14564u, 64u, 6u, "rd:TRICE64 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_6 ) */ { 14576u, 64u, 6u, "rd:TRICE64 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_5 ) */ { 14551u, 64u, 5u, "rd:TRICE64 %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_5 ) */ { 14563u, 64u, 5u, "rd:TRICE64 %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_5 ) */ { 14575u, 64u, 5u, "rd:TRICE64 %d, %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_4 ) */ { 14550u, 64u, 4u, "rd:TRICE64 %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_4 ) */ { 14562u, 64u, 4u, "rd:TRICE64 %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_4 ) */ { 14574u, 64u, 4u, "rd:TRICE64 %d, %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_3 ) */ { 14549u, 64u, 3u, "rd:TRICE64 %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_3 ) */ { 14561u, 64u, 3u, "rd:TRICE64 %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_3 ) */ { 14573u, 64u, 3u, "rd:TRICE64 %d, %d, %d\n" },
- /* TRICE64 ( TRICE64_2 ) */ { 13210u, 64u, 2u, "rd:TRICE64 %d, %d\n" },
- /* TRICE64 ( TRICE64_2 ) */ { 14548u, 64u, 2u, "rd:TRICE64 %d, %d\n" },
- /* TRICE64 ( TRICE64_2 ) */ { 14560u, 64u, 2u, "rd:TRICE64 %d, %d\n" },
- /* TRICE64 ( TRICE64_2 ) */ { 14572u, 64u, 2u, "rd:TRICE64 %d, %d\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 14547u, 64u, 1u, "rd:TRICE64 %d\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 14559u, 64u, 1u, "rd:TRICE64 %d\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 14571u, 64u, 1u, "rd:TRICE64 %d\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 15015u, 64u, 1u, "rd:TRICE64 double %12.6E (%%12.6E), aDouble(y)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 15016u, 64u, 1u, "rd:TRICE64 double %12.6F (%%12.6F), aDouble(y)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 15017u, 64u, 1u, "rd:TRICE64 double %12.6G (%%12.6G), aDouble(y)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 15012u, 64u, 1u, "rd:TRICE64 double %12.6e (%%12.6e), aDouble(y)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 15013u, 64u, 1u, "rd:TRICE64 double %12.6f (%%12.6f), aDouble(y)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 15014u, 64u, 1u, "rd:TRICE64 double %12.6g (%%12.6g), aDouble(y)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 14982u, 64u, 1u, "rd:TRICE64 double %E (%%E), aDouble(y)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 15001u, 64u, 1u, "rd:TRICE64 double %E (%%E), aDouble(y)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 14983u, 64u, 1u, "rd:TRICE64 double %F (%%F), aDouble(y)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 15002u, 64u, 1u, "rd:TRICE64 double %F (%%F), aDouble(y)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 14984u, 64u, 1u, "rd:TRICE64 double %G (%%G), aDouble(y)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 15003u, 64u, 1u, "rd:TRICE64 double %G (%%G), aDouble(y)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 14979u, 64u, 1u, "rd:TRICE64 double %e (%%e), aDouble(y)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 14998u, 64u, 1u, "rd:TRICE64 double %e (%%e), aDouble(y)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 14980u, 64u, 1u, "rd:TRICE64 double %f (%%f), aDouble(y)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 14999u, 64u, 1u, "rd:TRICE64 double %f (%%f), aDouble(y)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 14981u, 64u, 1u, "rd:TRICE64 double %g (%%g), aDouble(y)\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 15000u, 64u, 1u, "rd:TRICE64 double %g (%%g), aDouble(y)\n" },
- /* TRICE64_1 ( TRICE64_1 ) */ { 14584u, 64u, 1u, "rd:TRICE64_1 %d\n" },
- /* TRICE64_1 ( TRICE64_1 ) */ { 14596u, 64u, 1u, "rd:TRICE64_1 %d\n" },
- /* TRICE64_1 ( TRICE64_1 ) */ { 14608u, 64u, 1u, "rd:TRICE64_1 %d\n" },
- /* TRICE64_1 ( TRICE64_1 ) */ { 14988u, 64u, 1u, "rd:TRICE64_1 double %E (%%E), aDouble(y)\n" },
- /* TRICE64_1 ( TRICE64_1 ) */ { 14989u, 64u, 1u, "rd:TRICE64_1 double %F (%%F), aDouble(y)\n" },
- /* TRICE64_1 ( TRICE64_1 ) */ { 14990u, 64u, 1u, "rd:TRICE64_1 double %G (%%G), aDouble(y)\n" },
- /* TRICE64_1 ( TRICE64_1 ) */ { 14985u, 64u, 1u, "rd:TRICE64_1 double %e (%%e), aDouble(y)\n" },
- /* TRICE64_1 ( TRICE64_1 ) */ { 14986u, 64u, 1u, "rd:TRICE64_1 double %f (%%f), aDouble(y)\n" },
- /* TRICE64_1 ( TRICE64_1 ) */ { 14987u, 64u, 1u, "rd:TRICE64_1 double %g (%%g), aDouble(y)\n" },
- /* TRICE64_10 ( TRICE64_10 ) */ { 14593u, 64u, 10u, "rd:TRICE64_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_10 ( TRICE64_10 ) */ { 14605u, 64u, 10u, "rd:TRICE64_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_10 ( TRICE64_10 ) */ { 14617u, 64u, 10u, "rd:TRICE64_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_11 ( TRICE64_11 ) */ { 14594u, 64u, 11u, "rd:TRICE64_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_11 ( TRICE64_11 ) */ { 14606u, 64u, 11u, "rd:TRICE64_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_11 ( TRICE64_11 ) */ { 14618u, 64u, 11u, "rd:TRICE64_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_12 ( TRICE64_12 ) */ { 14595u, 64u, 12u, "rd:TRICE64_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_12 ( TRICE64_12 ) */ { 14607u, 64u, 12u, "rd:TRICE64_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_12 ( TRICE64_12 ) */ { 14619u, 64u, 12u, "rd:TRICE64_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_2 ( TRICE64_2 ) */ { 14585u, 64u, 2u, "rd:TRICE64_2 %d, %d\n" },
- /* TRICE64_2 ( TRICE64_2 ) */ { 14597u, 64u, 2u, "rd:TRICE64_2 %d, %d\n" },
- /* TRICE64_2 ( TRICE64_2 ) */ { 14609u, 64u, 2u, "rd:TRICE64_2 %d, %d\n" },
- /* TRICE64_3 ( TRICE64_3 ) */ { 14586u, 64u, 3u, "rd:TRICE64_3 %d, %d, %d\n" },
- /* TRICE64_3 ( TRICE64_3 ) */ { 14598u, 64u, 3u, "rd:TRICE64_3 %d, %d, %d\n" },
- /* TRICE64_3 ( TRICE64_3 ) */ { 14610u, 64u, 3u, "rd:TRICE64_3 %d, %d, %d\n" },
- /* TRICE64_4 ( TRICE64_4 ) */ { 14587u, 64u, 4u, "rd:TRICE64_4 %d, %d, %d, %d\n" },
- /* TRICE64_4 ( TRICE64_4 ) */ { 14599u, 64u, 4u, "rd:TRICE64_4 %d, %d, %d, %d\n" },
- /* TRICE64_4 ( TRICE64_4 ) */ { 14611u, 64u, 4u, "rd:TRICE64_4 %d, %d, %d, %d\n" },
- /* TRICE64_5 ( TRICE64_5 ) */ { 14588u, 64u, 5u, "rd:TRICE64_5 %d, %d, %d, %d, %d\n" },
- /* TRICE64_5 ( TRICE64_5 ) */ { 14600u, 64u, 5u, "rd:TRICE64_5 %d, %d, %d, %d, %d\n" },
- /* TRICE64_5 ( TRICE64_5 ) */ { 14612u, 64u, 5u, "rd:TRICE64_5 %d, %d, %d, %d, %d\n" },
- /* TRICE64_6 ( TRICE64_6 ) */ { 14589u, 64u, 6u, "rd:TRICE64_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_6 ( TRICE64_6 ) */ { 14601u, 64u, 6u, "rd:TRICE64_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_6 ( TRICE64_6 ) */ { 14613u, 64u, 6u, "rd:TRICE64_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_7 ( TRICE64_7 ) */ { 14590u, 64u, 7u, "rd:TRICE64_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_7 ( TRICE64_7 ) */ { 14602u, 64u, 7u, "rd:TRICE64_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_7 ( TRICE64_7 ) */ { 14614u, 64u, 7u, "rd:TRICE64_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_8 ( TRICE64_8 ) */ { 14591u, 64u, 8u, "rd:TRICE64_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_8 ( TRICE64_8 ) */ { 14603u, 64u, 8u, "rd:TRICE64_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_8 ( TRICE64_8 ) */ { 14615u, 64u, 8u, "rd:TRICE64_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_9 ( TRICE64_9 ) */ { 14592u, 64u, 9u, "rd:TRICE64_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_9 ( TRICE64_9 ) */ { 14604u, 64u, 9u, "rd:TRICE64_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE64_9 ( TRICE64_9 ) */ { 14616u, 64u, 9u, "rd:TRICE64_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_12 ) */ { 14114u, 8u, 12u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_12 ) */ { 14126u, 8u, 12u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_12 ) */ { 14138u, 8u, 12u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_11 ) */ { 14113u, 8u, 11u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_11 ) */ { 14125u, 8u, 11u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_11 ) */ { 14137u, 8u, 11u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_10 ) */ { 14112u, 8u, 10u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_10 ) */ { 14124u, 8u, 10u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_10 ) */ { 14136u, 8u, 10u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_9 ) */ { 14111u, 8u, 9u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_9 ) */ { 14123u, 8u, 9u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_9 ) */ { 14135u, 8u, 9u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_8 ) */ { 14110u, 8u, 8u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_8 ) */ { 14122u, 8u, 8u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_8 ) */ { 14134u, 8u, 8u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_7 ) */ { 14109u, 8u, 7u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_7 ) */ { 14121u, 8u, 7u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_7 ) */ { 14133u, 8u, 7u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_6 ) */ { 14108u, 8u, 6u, "rd:TRICE8 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_6 ) */ { 14120u, 8u, 6u, "rd:TRICE8 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_6 ) */ { 14132u, 8u, 6u, "rd:TRICE8 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_5 ) */ { 14107u, 8u, 5u, "rd:TRICE8 %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_5 ) */ { 14119u, 8u, 5u, "rd:TRICE8 %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_5 ) */ { 14131u, 8u, 5u, "rd:TRICE8 %d, %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_4 ) */ { 14106u, 8u, 4u, "rd:TRICE8 %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_4 ) */ { 14118u, 8u, 4u, "rd:TRICE8 %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_4 ) */ { 14130u, 8u, 4u, "rd:TRICE8 %d, %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_3 ) */ { 14105u, 8u, 3u, "rd:TRICE8 %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_3 ) */ { 14117u, 8u, 3u, "rd:TRICE8 %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_3 ) */ { 14129u, 8u, 3u, "rd:TRICE8 %d, %d, %d\n" },
- /* TRICE8 ( TRICE8_2 ) */ { 14104u, 8u, 2u, "rd:TRICE8 %d, %d\n" },
- /* TRICE8 ( TRICE8_2 ) */ { 14116u, 8u, 2u, "rd:TRICE8 %d, %d\n" },
- /* TRICE8 ( TRICE8_2 ) */ { 14128u, 8u, 2u, "rd:TRICE8 %d, %d\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 14103u, 8u, 1u, "rd:TRICE8 %d\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 14115u, 8u, 1u, "rd:TRICE8 %d\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 14127u, 8u, 1u, "rd:TRICE8 %d\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 15024u, 8u, 1u, "rd:TRICE8 line %O (%%O ,-1)\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 15025u, 8u, 1u, "rd:TRICE8 line %X (%%X ,-1)\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 15022u, 8u, 1u, "rd:TRICE8 line %b (%%b ,-1)\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 15027u, 8u, 1u, "rd:TRICE8 line %d (%%d ,-1)\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 15023u, 8u, 1u, "rd:TRICE8 line %o (%%o ,-1)\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 15019u, 8u, 1u, "rd:TRICE8 line %t (%%t ,0)\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 15020u, 8u, 1u, "rd:TRICE8 line %t (%%t ,2)\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 15021u, 8u, 1u, "rd:TRICE8 line %u (%%u ,-1)\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 15026u, 8u, 1u, "rd:TRICE8 line %x (%%x ,-1)\n" },
- /* TRICE8_1 ( TRICE8_1 ) */ { 14140u, 8u, 1u, "rd:TRICE8_1 %d\n" },
- /* TRICE8_1 ( TRICE8_1 ) */ { 14152u, 8u, 1u, "rd:TRICE8_1 %d\n" },
- /* TRICE8_1 ( TRICE8_1 ) */ { 14164u, 8u, 1u, "rd:TRICE8_1 %d\n" },
- /* TRICE8_10 ( TRICE8_10 ) */ { 14149u, 8u, 10u, "rd:TRICE8_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_10 ( TRICE8_10 ) */ { 14161u, 8u, 10u, "rd:TRICE8_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_10 ( TRICE8_10 ) */ { 14173u, 8u, 10u, "rd:TRICE8_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_11 ( TRICE8_11 ) */ { 14150u, 8u, 11u, "rd:TRICE8_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_11 ( TRICE8_11 ) */ { 14162u, 8u, 11u, "rd:TRICE8_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_11 ( TRICE8_11 ) */ { 14174u, 8u, 11u, "rd:TRICE8_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_12 ( TRICE8_12 ) */ { 14151u, 8u, 12u, "rd:TRICE8_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_12 ( TRICE8_12 ) */ { 14163u, 8u, 12u, "rd:TRICE8_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_12 ( TRICE8_12 ) */ { 14175u, 8u, 12u, "rd:TRICE8_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_2 ( TRICE8_2 ) */ { 14141u, 8u, 2u, "rd:TRICE8_2 %d, %d\n" },
- /* TRICE8_2 ( TRICE8_2 ) */ { 14153u, 8u, 2u, "rd:TRICE8_2 %d, %d\n" },
- /* TRICE8_2 ( TRICE8_2 ) */ { 14165u, 8u, 2u, "rd:TRICE8_2 %d, %d\n" },
- /* TRICE8_3 ( TRICE8_3 ) */ { 14142u, 8u, 3u, "rd:TRICE8_3 %d, %d, %d\n" },
- /* TRICE8_3 ( TRICE8_3 ) */ { 14154u, 8u, 3u, "rd:TRICE8_3 %d, %d, %d\n" },
- /* TRICE8_3 ( TRICE8_3 ) */ { 14166u, 8u, 3u, "rd:TRICE8_3 %d, %d, %d\n" },
- /* TRICE8_4 ( TRICE8_4 ) */ { 14143u, 8u, 4u, "rd:TRICE8_4 %d, %d, %d, %d\n" },
- /* TRICE8_4 ( TRICE8_4 ) */ { 14155u, 8u, 4u, "rd:TRICE8_4 %d, %d, %d, %d\n" },
- /* TRICE8_4 ( TRICE8_4 ) */ { 14167u, 8u, 4u, "rd:TRICE8_4 %d, %d, %d, %d\n" },
- /* TRICE8_5 ( TRICE8_5 ) */ { 14144u, 8u, 5u, "rd:TRICE8_5 %d, %d, %d, %d, %d\n" },
- /* TRICE8_5 ( TRICE8_5 ) */ { 14156u, 8u, 5u, "rd:TRICE8_5 %d, %d, %d, %d, %d\n" },
- /* TRICE8_5 ( TRICE8_5 ) */ { 14168u, 8u, 5u, "rd:TRICE8_5 %d, %d, %d, %d, %d\n" },
- /* TRICE8_6 ( TRICE8_6 ) */ { 14145u, 8u, 6u, "rd:TRICE8_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_6 ( TRICE8_6 ) */ { 14157u, 8u, 6u, "rd:TRICE8_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_6 ( TRICE8_6 ) */ { 14169u, 8u, 6u, "rd:TRICE8_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_7 ( TRICE8_7 ) */ { 14146u, 8u, 7u, "rd:TRICE8_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_7 ( TRICE8_7 ) */ { 14158u, 8u, 7u, "rd:TRICE8_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_7 ( TRICE8_7 ) */ { 14170u, 8u, 7u, "rd:TRICE8_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_8 ( TRICE8_8 ) */ { 14147u, 8u, 8u, "rd:TRICE8_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_8 ( TRICE8_8 ) */ { 14159u, 8u, 8u, "rd:TRICE8_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_8 ( TRICE8_8 ) */ { 14171u, 8u, 8u, "rd:TRICE8_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_9 ( TRICE8_9 ) */ { 14148u, 8u, 9u, "rd:TRICE8_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_9 ( TRICE8_9 ) */ { 14160u, 8u, 9u, "rd:TRICE8_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE8_9 ( TRICE8_9 ) */ { 14172u, 8u, 9u, "rd:TRICE8_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_1 ( TRICE32_1 ) */ { 14029u, 32u, 1u, "rd:TRICE_1 %d\n" },
- /* TRICE_1 ( TRICE32_1 ) */ { 14041u, 32u, 1u, "rd:TRICE_1 %d\n" },
- /* TRICE_1 ( TRICE32_1 ) */ { 14053u, 32u, 1u, "rd:TRICE_1 %d\n" },
- /* trice ( trice32_1 ) */ { 15116u, 32u, 1u, "rd:TRICE_1 %d\n" },
- /* TRICE_10 ( TRICE32_10 ) */ { 14038u, 32u, 10u, "rd:TRICE_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_10 ( TRICE32_10 ) */ { 14050u, 32u, 10u, "rd:TRICE_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_10 ( TRICE32_10 ) */ { 14062u, 32u, 10u, "rd:TRICE_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_10 ) */ { 15125u, 32u, 10u, "rd:TRICE_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_11 ( TRICE32_11 ) */ { 14039u, 32u, 11u, "rd:TRICE_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_11 ( TRICE32_11 ) */ { 14051u, 32u, 11u, "rd:TRICE_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_11 ( TRICE32_11 ) */ { 14063u, 32u, 11u, "rd:TRICE_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_11 ) */ { 15126u, 32u, 11u, "rd:TRICE_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_12 ( TRICE32_12 ) */ { 14040u, 32u, 12u, "rd:TRICE_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_12 ( TRICE32_12 ) */ { 14052u, 32u, 12u, "rd:TRICE_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_12 ( TRICE32_12 ) */ { 14064u, 32u, 12u, "rd:TRICE_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_12 ) */ { 15127u, 32u, 12u, "rd:TRICE_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_2 ( TRICE32_2 ) */ { 14030u, 32u, 2u, "rd:TRICE_2 %d, %d\n" },
- /* TRICE_2 ( TRICE32_2 ) */ { 14042u, 32u, 2u, "rd:TRICE_2 %d, %d\n" },
- /* TRICE_2 ( TRICE32_2 ) */ { 14054u, 32u, 2u, "rd:TRICE_2 %d, %d\n" },
- /* trice ( trice32_2 ) */ { 15117u, 32u, 2u, "rd:TRICE_2 %d, %d\n" },
- /* TRICE_3 ( TRICE32_3 ) */ { 14031u, 32u, 3u, "rd:TRICE_3 %d, %d, %d\n" },
- /* TRICE_3 ( TRICE32_3 ) */ { 14043u, 32u, 3u, "rd:TRICE_3 %d, %d, %d\n" },
- /* TRICE_3 ( TRICE32_3 ) */ { 14055u, 32u, 3u, "rd:TRICE_3 %d, %d, %d\n" },
- /* trice ( trice32_3 ) */ { 15118u, 32u, 3u, "rd:TRICE_3 %d, %d, %d\n" },
- /* TRICE_4 ( TRICE32_4 ) */ { 14032u, 32u, 4u, "rd:TRICE_4 %d, %d, %d, %d\n" },
- /* TRICE_4 ( TRICE32_4 ) */ { 14044u, 32u, 4u, "rd:TRICE_4 %d, %d, %d, %d\n" },
- /* TRICE_4 ( TRICE32_4 ) */ { 14056u, 32u, 4u, "rd:TRICE_4 %d, %d, %d, %d\n" },
- /* trice ( trice32_4 ) */ { 15119u, 32u, 4u, "rd:TRICE_4 %d, %d, %d, %d\n" },
- /* TRICE_5 ( TRICE32_5 ) */ { 14033u, 32u, 5u, "rd:TRICE_5 %d, %d, %d, %d, %d\n" },
- /* TRICE_5 ( TRICE32_5 ) */ { 14045u, 32u, 5u, "rd:TRICE_5 %d, %d, %d, %d, %d\n" },
- /* TRICE_5 ( TRICE32_5 ) */ { 14057u, 32u, 5u, "rd:TRICE_5 %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_5 ) */ { 15120u, 32u, 5u, "rd:TRICE_5 %d, %d, %d, %d, %d\n" },
- /* TRICE_6 ( TRICE32_6 ) */ { 14034u, 32u, 6u, "rd:TRICE_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_6 ( TRICE32_6 ) */ { 14046u, 32u, 6u, "rd:TRICE_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_6 ( TRICE32_6 ) */ { 14058u, 32u, 6u, "rd:TRICE_6 %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_6 ) */ { 15121u, 32u, 6u, "rd:TRICE_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_7 ( TRICE32_7 ) */ { 14035u, 32u, 7u, "rd:TRICE_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_7 ( TRICE32_7 ) */ { 14047u, 32u, 7u, "rd:TRICE_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_7 ( TRICE32_7 ) */ { 14059u, 32u, 7u, "rd:TRICE_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_7 ) */ { 15122u, 32u, 7u, "rd:TRICE_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_8 ( TRICE32_8 ) */ { 14036u, 32u, 8u, "rd:TRICE_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_8 ( TRICE32_8 ) */ { 14048u, 32u, 8u, "rd:TRICE_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_8 ( TRICE32_8 ) */ { 14060u, 32u, 8u, "rd:TRICE_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_8 ) */ { 15123u, 32u, 8u, "rd:TRICE_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_9 ( TRICE32_9 ) */ { 14037u, 32u, 9u, "rd:TRICE_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_9 ( TRICE32_9 ) */ { 14049u, 32u, 9u, "rd:TRICE_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE_9 ( TRICE32_9 ) */ { 14061u, 32u, 9u, "rd:TRICE_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_9 ) */ { 15124u, 32u, 9u, "rd:TRICE_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice ( TRice32_12 ) */ { 13133u, 32u, 12u, "rd:TRice %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice ( TRice32_11 ) */ { 13132u, 32u, 11u, "rd:TRice %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice ( TRice32_10 ) */ { 13131u, 32u, 10u, "rd:TRice %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice ( TRice32_9 ) */ { 13130u, 32u, 9u, "rd:TRice %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice ( TRice32_8 ) */ { 13129u, 32u, 8u, "rd:TRice %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice ( TRice32_7 ) */ { 13128u, 32u, 7u, "rd:TRice %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice ( TRice32_6 ) */ { 13127u, 32u, 6u, "rd:TRice %d, %d, %d, %d, %d, %d\n" },
- /* TRice ( TRice32_5 ) */ { 13126u, 32u, 5u, "rd:TRice %d, %d, %d, %d, %d\n" },
- /* TRice ( TRice32_4 ) */ { 13125u, 32u, 4u, "rd:TRice %d, %d, %d, %d\n" },
- /* TRice ( TRice32_3 ) */ { 13124u, 32u, 3u, "rd:TRice %d, %d, %d\n" },
- /* TRice ( TRice32_2 ) */ { 13123u, 32u, 2u, "rd:TRice %d, %d\n" },
- /* TRice ( TRice32_1 ) */ { 13122u, 32u, 1u, "rd:TRice %d\n" },
- /* TRice16 ( TRice16_12 ) */ { 14360u, 16u, 12u, "rd:TRice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice16 ( TRice16_11 ) */ { 14359u, 16u, 11u, "rd:TRice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice16 ( TRice16_10 ) */ { 14358u, 16u, 10u, "rd:TRice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice16 ( TRice16_9 ) */ { 14357u, 16u, 9u, "rd:TRice16 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice16 ( TRice16_8 ) */ { 14356u, 16u, 8u, "rd:TRice16 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice16 ( TRice16_7 ) */ { 14355u, 16u, 7u, "rd:TRice16 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice16 ( TRice16_6 ) */ { 14354u, 16u, 6u, "rd:TRice16 %d, %d, %d, %d, %d, %d\n" },
- /* TRice16 ( TRice16_5 ) */ { 14353u, 16u, 5u, "rd:TRice16 %d, %d, %d, %d, %d\n" },
- /* TRice16 ( TRice16_4 ) */ { 14352u, 16u, 4u, "rd:TRice16 %d, %d, %d, %d\n" },
- /* TRice16 ( TRice16_3 ) */ { 14351u, 16u, 3u, "rd:TRice16 %d, %d, %d\n" },
- /* TRice16 ( TRice16_2 ) */ { 14350u, 16u, 2u, "rd:TRice16 %d, %d\n" },
- /* TRice16 ( TRice16_1 ) */ { 14349u, 16u, 1u, "rd:TRice16 %d\n" },
- /* TRice16_1 ( TRice16_1 ) */ { 14386u, 16u, 1u, "rd:TRice16_1 %d\n" },
- /* TRice16_10 ( TRice16_10 ) */ { 14395u, 16u, 10u, "rd:TRice16_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice16_11 ( TRice16_11 ) */ { 14396u, 16u, 11u, "rd:TRice16_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice16_12 ( TRice16_12 ) */ { 14397u, 16u, 12u, "rd:TRice16_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice16_2 ( TRice16_2 ) */ { 14387u, 16u, 2u, "rd:TRice16_2 %d, %d\n" },
- /* TRice16_3 ( TRice16_3 ) */ { 14388u, 16u, 3u, "rd:TRice16_3 %d, %d, %d\n" },
- /* TRice16_4 ( TRice16_4 ) */ { 14389u, 16u, 4u, "rd:TRice16_4 %d, %d, %d, %d\n" },
- /* TRice16_5 ( TRice16_5 ) */ { 14390u, 16u, 5u, "rd:TRice16_5 %d, %d, %d, %d, %d\n" },
- /* TRice16_6 ( TRice16_6 ) */ { 14391u, 16u, 6u, "rd:TRice16_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRice16_7 ( TRice16_7 ) */ { 14392u, 16u, 7u, "rd:TRice16_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice16_8 ( TRice16_8 ) */ { 14393u, 16u, 8u, "rd:TRice16_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice16_9 ( TRice16_9 ) */ { 14394u, 16u, 9u, "rd:TRice16_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice32 ( TRice32_12 ) */ { 14508u, 32u, 12u, "rd:TRice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice32 ( TRice32_11 ) */ { 14507u, 32u, 11u, "rd:TRice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice32 ( TRice32_10 ) */ { 14506u, 32u, 10u, "rd:TRice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice32 ( TRice32_9 ) */ { 14505u, 32u, 9u, "rd:TRice32 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice32 ( TRice32_8 ) */ { 14504u, 32u, 8u, "rd:TRice32 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice32 ( TRice32_7 ) */ { 14503u, 32u, 7u, "rd:TRice32 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice32 ( TRice32_6 ) */ { 14502u, 32u, 6u, "rd:TRice32 %d, %d, %d, %d, %d, %d\n" },
- /* TRice32 ( TRice32_5 ) */ { 14501u, 32u, 5u, "rd:TRice32 %d, %d, %d, %d, %d\n" },
- /* TRice32 ( TRice32_4 ) */ { 14500u, 32u, 4u, "rd:TRice32 %d, %d, %d, %d\n" },
- /* TRice32 ( TRice32_3 ) */ { 14499u, 32u, 3u, "rd:TRice32 %d, %d, %d\n" },
- /* TRice32 ( TRice32_2 ) */ { 14498u, 32u, 2u, "rd:TRice32 %d, %d\n" },
- /* TRice32 ( TRice32_1 ) */ { 14497u, 32u, 1u, "rd:TRice32 %d\n" },
- /* TRice32 ( TRice32_4 ) */ { 13251u, 32u, 4u, "rd:TRice32 int %X, float %f (%%f), %08x, %032b\n" },
- /* TRice32 ( TRice32_4 ) */ { 13245u, 32u, 4u, "rd:TRice32 int %d, float %f (%%f), %08x, %032b\n" },
- /* TRice32 ( TRice32_4 ) */ { 13246u, 32u, 4u, "rd:TRice32 int %d, float %f (%%f), %08x, %032b\n" },
- /* TRice32 ( TRice32_4 ) */ { 13248u, 32u, 4u, "rd:TRice32 int %d, float %f (%%f), %08x, %032b\n" },
- /* TRice32 ( TRice32_4 ) */ { 13249u, 32u, 4u, "rd:TRice32 int %d, float %f (%%f), %08x, %032b\n" },
- /* TRice32 ( TRice32_4 ) */ { 13250u, 32u, 4u, "rd:TRice32 int %d, float %f (%%f), %08x, %032b\n" },
- /* TRice32 ( TRice32_4 ) */ { 13247u, 32u, 4u, "rd:TRice32 int %x, float %f (%%f), %08x, %032b\n" },
- /* TRice32_1 ( TRice32_1 ) */ { 14534u, 32u, 1u, "rd:TRice32_1 %d\n" },
- /* TRice32_10 ( TRice32_10 ) */ { 14543u, 32u, 10u, "rd:TRice32_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice32_11 ( TRice32_11 ) */ { 14544u, 32u, 11u, "rd:TRice32_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice32_12 ( TRice32_12 ) */ { 14545u, 32u, 12u, "rd:TRice32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice32_12 ( TRice32_12 ) */ { 14693u, 32u, 12u, "rd:TRice32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice32_2 ( TRice32_2 ) */ { 14535u, 32u, 2u, "rd:TRice32_2 %d, %d\n" },
- /* TRice32_3 ( TRice32_3 ) */ { 14536u, 32u, 3u, "rd:TRice32_3 %d, %d, %d\n" },
- /* TRice32_4 ( TRice32_4 ) */ { 14537u, 32u, 4u, "rd:TRice32_4 %d, %d, %d, %d\n" },
- /* TRice32_5 ( TRice32_5 ) */ { 14538u, 32u, 5u, "rd:TRice32_5 %d, %d, %d, %d, %d\n" },
- /* TRice32_6 ( TRice32_6 ) */ { 14539u, 32u, 6u, "rd:TRice32_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRice32_7 ( TRice32_7 ) */ { 14540u, 32u, 7u, "rd:TRice32_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice32_8 ( TRice32_8 ) */ { 14541u, 32u, 8u, "rd:TRice32_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice32_9 ( TRice32_9 ) */ { 14542u, 32u, 9u, "rd:TRice32_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice64 ( TRice64_12 ) */ { 14656u, 64u, 12u, "rd:TRice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice64 ( TRice64_11 ) */ { 14655u, 64u, 11u, "rd:TRice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice64 ( TRice64_10 ) */ { 14654u, 64u, 10u, "rd:TRice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice64 ( TRice64_9 ) */ { 14653u, 64u, 9u, "rd:TRice64 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice64 ( TRice64_8 ) */ { 14652u, 64u, 8u, "rd:TRice64 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice64 ( TRice64_7 ) */ { 14651u, 64u, 7u, "rd:TRice64 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice64 ( TRice64_6 ) */ { 14650u, 64u, 6u, "rd:TRice64 %d, %d, %d, %d, %d, %d\n" },
- /* TRice64 ( TRice64_5 ) */ { 14649u, 64u, 5u, "rd:TRice64 %d, %d, %d, %d, %d\n" },
- /* TRice64 ( TRice64_4 ) */ { 14648u, 64u, 4u, "rd:TRice64 %d, %d, %d, %d\n" },
- /* TRice64 ( TRice64_3 ) */ { 14647u, 64u, 3u, "rd:TRice64 %d, %d, %d\n" },
- /* TRice64 ( TRice64_2 ) */ { 14646u, 64u, 2u, "rd:TRice64 %d, %d\n" },
- /* TRice64 ( TRice64_1 ) */ { 14645u, 64u, 1u, "rd:TRice64 %d\n" },
- /* TRice64 ( TRice64_4 ) */ { 13257u, 64u, 4u, "rd:TRice64 int %X, double %f (%%f), %016x, %064b\n" },
- /* TRice64 ( TRice64_4 ) */ { 13252u, 64u, 4u, "rd:TRice64 int %d, double %f (%%f), %016x, %064b\n" },
- /* TRice64 ( TRice64_4 ) */ { 13253u, 64u, 4u, "rd:TRice64 int %d, double %f (%%f), %016x, %064b\n" },
- /* TRice64 ( TRice64_4 ) */ { 13254u, 64u, 4u, "rd:TRice64 int %d, double %f (%%f), %016x, %064b\n" },
- /* TRice64 ( TRice64_4 ) */ { 13255u, 64u, 4u, "rd:TRice64 int %d, double %f (%%f), %016x, %064b\n" },
- /* TRice64 ( TRice64_4 ) */ { 13256u, 64u, 4u, "rd:TRice64 int %d, double %f (%%f), %016x, %064b\n" },
- /* TRice64_1 ( TRice64_1 ) */ { 14682u, 64u, 1u, "rd:TRice64_1 %d\n" },
- /* TRice64_10 ( TRice64_10 ) */ { 14691u, 64u, 10u, "rd:TRice64_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice64_11 ( TRice64_11 ) */ { 14692u, 64u, 11u, "rd:TRice64_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice64_2 ( TRice64_2 ) */ { 14683u, 64u, 2u, "rd:TRice64_2 %d, %d\n" },
- /* TRice64_3 ( TRice64_3 ) */ { 14684u, 64u, 3u, "rd:TRice64_3 %d, %d, %d\n" },
- /* TRice64_4 ( TRice64_4 ) */ { 14685u, 64u, 4u, "rd:TRice64_4 %d, %d, %d, %d\n" },
- /* TRice64_5 ( TRice64_5 ) */ { 14686u, 64u, 5u, "rd:TRice64_5 %d, %d, %d, %d, %d\n" },
- /* TRice64_6 ( TRice64_6 ) */ { 14687u, 64u, 6u, "rd:TRice64_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRice64_7 ( TRice64_7 ) */ { 14688u, 64u, 7u, "rd:TRice64_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice64_8 ( TRice64_8 ) */ { 14689u, 64u, 8u, "rd:TRice64_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice64_9 ( TRice64_9 ) */ { 14690u, 64u, 9u, "rd:TRice64_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice8 ( TRice8_12 ) */ { 14212u, 8u, 12u, "rd:TRice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice8 ( TRice8_11 ) */ { 14211u, 8u, 11u, "rd:TRice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice8 ( TRice8_10 ) */ { 14210u, 8u, 10u, "rd:TRice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice8 ( TRice8_9 ) */ { 14209u, 8u, 9u, "rd:TRice8 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice8 ( TRice8_8 ) */ { 14208u, 8u, 8u, "rd:TRice8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice8 ( TRice8_7 ) */ { 14207u, 8u, 7u, "rd:TRice8 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice8 ( TRice8_6 ) */ { 14206u, 8u, 6u, "rd:TRice8 %d, %d, %d, %d, %d, %d\n" },
- /* TRice8 ( TRice8_5 ) */ { 14205u, 8u, 5u, "rd:TRice8 %d, %d, %d, %d, %d\n" },
- /* TRice8 ( TRice8_4 ) */ { 14204u, 8u, 4u, "rd:TRice8 %d, %d, %d, %d\n" },
- /* TRice8 ( TRice8_3 ) */ { 14203u, 8u, 3u, "rd:TRice8 %d, %d, %d\n" },
- /* TRice8 ( TRice8_2 ) */ { 14202u, 8u, 2u, "rd:TRice8 %d, %d\n" },
- /* TRice8 ( TRice8_1 ) */ { 14201u, 8u, 1u, "rd:TRice8 %d\n" },
- /* TRice8_1 ( TRice8_1 ) */ { 14238u, 8u, 1u, "rd:TRice8_1 %d\n" },
- /* TRice8_10 ( TRice8_10 ) */ { 14247u, 8u, 10u, "rd:TRice8_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice8_11 ( TRice8_11 ) */ { 14248u, 8u, 11u, "rd:TRice8_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice8_12 ( TRice8_12 ) */ { 14249u, 8u, 12u, "rd:TRice8_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice8_2 ( TRice8_2 ) */ { 14239u, 8u, 2u, "rd:TRice8_2 %d, %d\n" },
- /* TRice8_3 ( TRice8_3 ) */ { 14240u, 8u, 3u, "rd:TRice8_3 %d, %d, %d\n" },
- /* TRice8_4 ( TRice8_4 ) */ { 14241u, 8u, 4u, "rd:TRice8_4 %d, %d, %d, %d\n" },
- /* TRice8_5 ( TRice8_5 ) */ { 14242u, 8u, 5u, "rd:TRice8_5 %d, %d, %d, %d, %d\n" },
- /* TRice8_6 ( TRice8_6 ) */ { 14243u, 8u, 6u, "rd:TRice8_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRice8_7 ( TRice8_7 ) */ { 14244u, 8u, 7u, "rd:TRice8_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice8_8 ( TRice8_8 ) */ { 14245u, 8u, 8u, "rd:TRice8_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice8_9 ( TRice8_9 ) */ { 14246u, 8u, 9u, "rd:TRice8_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice ( TRice_0 ) */ { 13121u, 32u, 0u, "rd:TRice\n" },
- /* TRice_1 ( TRice32_1 ) */ { 14090u, 32u, 1u, "rd:TRice_1 %d\n" },
- /* TRice_10 ( TRice32_10 ) */ { 14099u, 32u, 10u, "rd:TRice_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice_11 ( TRice32_11 ) */ { 14100u, 32u, 11u, "rd:TRice_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice_12 ( TRice32_12 ) */ { 14101u, 32u, 12u, "rd:TRice_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice_2 ( TRice32_2 ) */ { 14091u, 32u, 2u, "rd:TRice_2 %d, %d\n" },
- /* TRice_3 ( TRice32_3 ) */ { 14092u, 32u, 3u, "rd:TRice_3 %d, %d, %d\n" },
- /* TRice_4 ( TRice32_4 ) */ { 14093u, 32u, 4u, "rd:TRice_4 %d, %d, %d, %d\n" },
- /* TRice_5 ( TRice32_5 ) */ { 14094u, 32u, 5u, "rd:TRice_5 %d, %d, %d, %d, %d\n" },
- /* TRice_6 ( TRice32_6 ) */ { 14095u, 32u, 6u, "rd:TRice_6 %d, %d, %d, %d, %d, %d\n" },
- /* TRice_7 ( TRice32_7 ) */ { 14096u, 32u, 7u, "rd:TRice_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice_8 ( TRice32_8 ) */ { 14097u, 32u, 8u, "rd:TRice_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRice_9 ( TRice32_9 ) */ { 14098u, 32u, 9u, "rd:TRice_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice ( Trice32_12 ) */ { 13119u, 32u, 12u, "rd:Trice %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice ( Trice32_11 ) */ { 13118u, 32u, 11u, "rd:Trice %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice ( Trice32_10 ) */ { 13117u, 32u, 10u, "rd:Trice %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice ( Trice32_9 ) */ { 13116u, 32u, 9u, "rd:Trice %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice ( Trice32_8 ) */ { 13115u, 32u, 8u, "rd:Trice %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice ( Trice32_7 ) */ { 13114u, 32u, 7u, "rd:Trice %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice ( Trice32_6 ) */ { 13113u, 32u, 6u, "rd:Trice %d, %d, %d, %d, %d, %d\n" },
- /* Trice ( Trice32_5 ) */ { 13112u, 32u, 5u, "rd:Trice %d, %d, %d, %d, %d\n" },
- /* Trice ( Trice32_4 ) */ { 13111u, 32u, 4u, "rd:Trice %d, %d, %d, %d\n" },
- /* Trice ( Trice32_3 ) */ { 13110u, 32u, 3u, "rd:Trice %d, %d, %d\n" },
- /* Trice ( Trice32_2 ) */ { 13109u, 32u, 2u, "rd:Trice %d, %d\n" },
- /* Trice ( Trice32_1 ) */ { 13108u, 32u, 1u, "rd:Trice %d\n" },
- /* Trice ( Trice32_1 ) */ { 15038u, 32u, 1u, "rd:Trice line %b (%%b)\n" },
- /* Trice ( Trice32_1 ) */ { 15041u, 32u, 1u, "rd:Trice line %d (%%d)\n" },
- /* Trice ( Trice32_1 ) */ { 15039u, 32u, 1u, "rd:Trice line %o (%%o)\n" },
- /* Trice ( Trice32_1 ) */ { 15035u, 32u, 1u, "rd:Trice line %t (%%t -1)\n" },
- /* Trice ( Trice32_1 ) */ { 15036u, 32u, 1u, "rd:Trice line %t (%%t -1)\n" },
- /* Trice ( Trice32_1 ) */ { 15037u, 32u, 1u, "rd:Trice line %u (%%u)\n" },
- /* Trice ( Trice32_1 ) */ { 15040u, 32u, 1u, "rd:Trice line %x (%%x)\n" },
- /* Trice16 ( Trice16_12 ) */ { 15153u, 16u, 12u, "rd:Trice16 %X, %X, %X, %X, %X, %X, %X, %X, %X, %X, %X, %X\n" },
- /* Trice16 ( Trice16_11 ) */ { 15152u, 16u, 11u, "rd:Trice16 %X, %X, %X, %X, %X, %X, %X, %X, %X, %X, %X\n" },
- /* Trice16 ( Trice16_10 ) */ { 15151u, 16u, 10u, "rd:Trice16 %X, %X, %X, %X, %X, %X, %X, %X, %X, %X\n" },
- /* Trice16 ( Trice16_9 ) */ { 15150u, 16u, 9u, "rd:Trice16 %X, %X, %X, %X, %X, %X, %X, %X, %X\n" },
- /* Trice16 ( Trice16_8 ) */ { 15149u, 16u, 8u, "rd:Trice16 %X, %X, %X, %X, %X, %X, %X, %X\n" },
- /* Trice16 ( Trice16_7 ) */ { 15148u, 16u, 7u, "rd:Trice16 %X, %X, %X, %X, %X, %X, %X\n" },
- /* Trice16 ( Trice16_6 ) */ { 15147u, 16u, 6u, "rd:Trice16 %X, %X, %X, %X, %X, %X\n" },
- /* Trice16 ( Trice16_5 ) */ { 15146u, 16u, 5u, "rd:Trice16 %X, %X, %X, %X, %X\n" },
- /* Trice16 ( Trice16_4 ) */ { 15145u, 16u, 4u, "rd:Trice16 %X, %X, %X, %X\n" },
- /* Trice16 ( Trice16_3 ) */ { 15144u, 16u, 3u, "rd:Trice16 %X, %X, %X\n" },
- /* Trice16 ( Trice16_2 ) */ { 15143u, 16u, 2u, "rd:Trice16 %X, %X\n" },
- /* Trice16 ( Trice16_1 ) */ { 15142u, 16u, 1u, "rd:Trice16 %X\n" },
- /* Trice16 ( Trice16_12 ) */ { 14348u, 16u, 12u, "rd:Trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice16 ( Trice16_11 ) */ { 14347u, 16u, 11u, "rd:Trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice16 ( Trice16_10 ) */ { 14346u, 16u, 10u, "rd:Trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice16 ( Trice16_9 ) */ { 14345u, 16u, 9u, "rd:Trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice16 ( Trice16_8 ) */ { 14344u, 16u, 8u, "rd:Trice16 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice16 ( Trice16_7 ) */ { 14343u, 16u, 7u, "rd:Trice16 %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice16 ( Trice16_6 ) */ { 14342u, 16u, 6u, "rd:Trice16 %d, %d, %d, %d, %d, %d\n" },
- /* Trice16 ( Trice16_5 ) */ { 14341u, 16u, 5u, "rd:Trice16 %d, %d, %d, %d, %d\n" },
- /* Trice16 ( Trice16_4 ) */ { 14340u, 16u, 4u, "rd:Trice16 %d, %d, %d, %d\n" },
- /* Trice16 ( Trice16_3 ) */ { 14339u, 16u, 3u, "rd:Trice16 %d, %d, %d\n" },
- /* Trice16 ( Trice16_2 ) */ { 14338u, 16u, 2u, "rd:Trice16 %d, %d\n" },
- /* Trice16 ( Trice16_1 ) */ { 14337u, 16u, 1u, "rd:Trice16 %d\n" },
- /* Trice16 ( Trice16_12 ) */ { 15140u, 16u, 12u, "rd:Trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\n" },
- /* Trice16 ( Trice16_11 ) */ { 15139u, 16u, 11u, "rd:Trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\n" },
- /* Trice16 ( Trice16_10 ) */ { 15138u, 16u, 10u, "rd:Trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\n" },
- /* Trice16 ( Trice16_9 ) */ { 15137u, 16u, 9u, "rd:Trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p\n" },
- /* Trice16 ( Trice16_8 ) */ { 15136u, 16u, 8u, "rd:Trice16 %p, %p, %p, %p, %p, %p, %p, %p\n" },
- /* Trice16 ( Trice16_7 ) */ { 15135u, 16u, 7u, "rd:Trice16 %p, %p, %p, %p, %p, %p, %p\n" },
- /* Trice16 ( Trice16_6 ) */ { 15134u, 16u, 6u, "rd:Trice16 %p, %p, %p, %p, %p, %p\n" },
- /* Trice16 ( Trice16_5 ) */ { 15133u, 16u, 5u, "rd:Trice16 %p, %p, %p, %p, %p\n" },
- /* Trice16 ( Trice16_4 ) */ { 15132u, 16u, 4u, "rd:Trice16 %p, %p, %p, %p\n" },
- /* Trice16 ( Trice16_3 ) */ { 15131u, 16u, 3u, "rd:Trice16 %p, %p, %p\n" },
- /* Trice16 ( Trice16_2 ) */ { 15130u, 16u, 2u, "rd:Trice16 %p, %p\n" },
- /* Trice16 ( Trice16_1 ) */ { 15129u, 16u, 1u, "rd:Trice16 %p\n" },
- /* Trice16_1 ( Trice16_1 ) */ { 14374u, 16u, 1u, "rd:Trice16_1 %d\n" },
- /* Trice16_10 ( Trice16_10 ) */ { 14383u, 16u, 10u, "rd:Trice16_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice16_11 ( Trice16_11 ) */ { 14384u, 16u, 11u, "rd:Trice16_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice16_12 ( Trice16_12 ) */ { 14385u, 16u, 12u, "rd:Trice16_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice16_2 ( Trice16_2 ) */ { 14375u, 16u, 2u, "rd:Trice16_2 %d, %d\n" },
- /* Trice16_3 ( Trice16_3 ) */ { 14376u, 16u, 3u, "rd:Trice16_3 %d, %d, %d\n" },
- /* Trice16_4 ( Trice16_4 ) */ { 14377u, 16u, 4u, "rd:Trice16_4 %d, %d, %d, %d\n" },
- /* Trice16_5 ( Trice16_5 ) */ { 14378u, 16u, 5u, "rd:Trice16_5 %d, %d, %d, %d, %d\n" },
- /* Trice16_6 ( Trice16_6 ) */ { 14379u, 16u, 6u, "rd:Trice16_6 %d, %d, %d, %d, %d, %d\n" },
- /* Trice16_7 ( Trice16_7 ) */ { 14380u, 16u, 7u, "rd:Trice16_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice16_8 ( Trice16_8 ) */ { 14381u, 16u, 8u, "rd:Trice16_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice16_9 ( Trice16_9 ) */ { 14382u, 16u, 9u, "rd:Trice16_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice32 ( Trice32_12 ) */ { 14496u, 32u, 12u, "rd:Trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice32 ( Trice32_11 ) */ { 14495u, 32u, 11u, "rd:Trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice32 ( Trice32_10 ) */ { 14494u, 32u, 10u, "rd:Trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice32 ( Trice32_9 ) */ { 14493u, 32u, 9u, "rd:Trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice32 ( Trice32_8 ) */ { 14492u, 32u, 8u, "rd:Trice32 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice32 ( Trice32_7 ) */ { 14491u, 32u, 7u, "rd:Trice32 %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice32 ( Trice32_6 ) */ { 14490u, 32u, 6u, "rd:Trice32 %d, %d, %d, %d, %d, %d\n" },
- /* Trice32 ( Trice32_5 ) */ { 14489u, 32u, 5u, "rd:Trice32 %d, %d, %d, %d, %d\n" },
- /* Trice32 ( Trice32_4 ) */ { 14488u, 32u, 4u, "rd:Trice32 %d, %d, %d, %d\n" },
- /* Trice32 ( Trice32_3 ) */ { 14487u, 32u, 3u, "rd:Trice32 %d, %d, %d\n" },
- /* Trice32 ( Trice32_2 ) */ { 14486u, 32u, 2u, "rd:Trice32 %d, %d\n" },
- /* Trice32 ( Trice32_1 ) */ { 14485u, 32u, 1u, "rd:Trice32 %d\n" },
- /* Trice32_1 ( Trice32_1 ) */ { 14522u, 32u, 1u, "rd:Trice32_1 %d\n" },
- /* Trice32_10 ( Trice32_10 ) */ { 14531u, 32u, 10u, "rd:Trice32_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice32_11 ( Trice32_11 ) */ { 14532u, 32u, 11u, "rd:Trice32_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice32_12 ( Trice32_12 ) */ { 14533u, 32u, 12u, "rd:Trice32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice32_2 ( Trice32_2 ) */ { 14523u, 32u, 2u, "rd:Trice32_2 %d, %d\n" },
- /* Trice32_3 ( Trice32_3 ) */ { 14524u, 32u, 3u, "rd:Trice32_3 %d, %d, %d\n" },
- /* Trice32_4 ( Trice32_4 ) */ { 14525u, 32u, 4u, "rd:Trice32_4 %d, %d, %d, %d\n" },
- /* Trice32_5 ( Trice32_5 ) */ { 14526u, 32u, 5u, "rd:Trice32_5 %d, %d, %d, %d, %d\n" },
- /* Trice32_6 ( Trice32_6 ) */ { 14527u, 32u, 6u, "rd:Trice32_6 %d, %d, %d, %d, %d, %d\n" },
- /* Trice32_7 ( Trice32_7 ) */ { 14528u, 32u, 7u, "rd:Trice32_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice32_8 ( Trice32_8 ) */ { 14529u, 32u, 8u, "rd:Trice32_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice32_9 ( Trice32_9 ) */ { 14530u, 32u, 9u, "rd:Trice32_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice64 ( Trice64_12 ) */ { 14644u, 64u, 12u, "rd:Trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice64 ( Trice64_11 ) */ { 14643u, 64u, 11u, "rd:Trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice64 ( Trice64_10 ) */ { 14642u, 64u, 10u, "rd:Trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice64 ( Trice64_9 ) */ { 14641u, 64u, 9u, "rd:Trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice64 ( Trice64_8 ) */ { 14640u, 64u, 8u, "rd:Trice64 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice64 ( Trice64_7 ) */ { 14639u, 64u, 7u, "rd:Trice64 %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice64 ( Trice64_6 ) */ { 14638u, 64u, 6u, "rd:Trice64 %d, %d, %d, %d, %d, %d\n" },
- /* Trice64 ( Trice64_5 ) */ { 14637u, 64u, 5u, "rd:Trice64 %d, %d, %d, %d, %d\n" },
- /* Trice64 ( Trice64_4 ) */ { 14636u, 64u, 4u, "rd:Trice64 %d, %d, %d, %d\n" },
- /* Trice64 ( Trice64_3 ) */ { 14635u, 64u, 3u, "rd:Trice64 %d, %d, %d\n" },
- /* Trice64 ( Trice64_2 ) */ { 14634u, 64u, 2u, "rd:Trice64 %d, %d\n" },
- /* Trice64 ( Trice64_1 ) */ { 14633u, 64u, 1u, "rd:Trice64 %d\n" },
- /* Trice64_1 ( Trice64_1 ) */ { 14670u, 64u, 1u, "rd:Trice64_1 %d\n" },
- /* Trice64_10 ( Trice64_10 ) */ { 14679u, 64u, 10u, "rd:Trice64_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice64_11 ( Trice64_11 ) */ { 14680u, 64u, 11u, "rd:Trice64_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice64_12 ( Trice64_12 ) */ { 14681u, 64u, 12u, "rd:Trice64_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice64_2 ( Trice64_2 ) */ { 14671u, 64u, 2u, "rd:Trice64_2 %d, %d\n" },
- /* Trice64_3 ( Trice64_3 ) */ { 14672u, 64u, 3u, "rd:Trice64_3 %d, %d, %d\n" },
- /* Trice64_4 ( Trice64_4 ) */ { 14673u, 64u, 4u, "rd:Trice64_4 %d, %d, %d, %d\n" },
- /* Trice64_5 ( Trice64_5 ) */ { 14674u, 64u, 5u, "rd:Trice64_5 %d, %d, %d, %d, %d\n" },
- /* Trice64_6 ( Trice64_6 ) */ { 14675u, 64u, 6u, "rd:Trice64_6 %d, %d, %d, %d, %d, %d\n" },
- /* Trice64_7 ( Trice64_7 ) */ { 14676u, 64u, 7u, "rd:Trice64_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice64_8 ( Trice64_8 ) */ { 14677u, 64u, 8u, "rd:Trice64_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice64_9 ( Trice64_9 ) */ { 14678u, 64u, 9u, "rd:Trice64_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice8 ( Trice8_12 ) */ { 14200u, 8u, 12u, "rd:Trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice8 ( Trice8_11 ) */ { 14199u, 8u, 11u, "rd:Trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice8 ( Trice8_10 ) */ { 14198u, 8u, 10u, "rd:Trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice8 ( Trice8_9 ) */ { 14197u, 8u, 9u, "rd:Trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice8 ( Trice8_8 ) */ { 14196u, 8u, 8u, "rd:Trice8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice8 ( Trice8_7 ) */ { 14195u, 8u, 7u, "rd:Trice8 %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice8 ( Trice8_6 ) */ { 14194u, 8u, 6u, "rd:Trice8 %d, %d, %d, %d, %d, %d\n" },
- /* Trice8 ( Trice8_5 ) */ { 14193u, 8u, 5u, "rd:Trice8 %d, %d, %d, %d, %d\n" },
- /* Trice8 ( Trice8_4 ) */ { 14192u, 8u, 4u, "rd:Trice8 %d, %d, %d, %d\n" },
- /* Trice8 ( Trice8_3 ) */ { 14191u, 8u, 3u, "rd:Trice8 %d, %d, %d\n" },
- /* Trice8 ( Trice8_2 ) */ { 14190u, 8u, 2u, "rd:Trice8 %d, %d\n" },
- /* Trice8 ( Trice8_1 ) */ { 14189u, 8u, 1u, "rd:Trice8 %d\n" },
- /* Trice8_1 ( Trice8_1 ) */ { 14226u, 8u, 1u, "rd:Trice8_1 %d\n" },
- /* Trice8_10 ( Trice8_10 ) */ { 14235u, 8u, 10u, "rd:Trice8_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice8_11 ( Trice8_11 ) */ { 14236u, 8u, 11u, "rd:Trice8_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice8_12 ( Trice8_12 ) */ { 14237u, 8u, 12u, "rd:Trice8_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice8_2 ( Trice8_2 ) */ { 14227u, 8u, 2u, "rd:Trice8_2 %d, %d\n" },
- /* Trice8_3 ( Trice8_3 ) */ { 14228u, 8u, 3u, "rd:Trice8_3 %d, %d, %d\n" },
- /* Trice8_4 ( Trice8_4 ) */ { 14229u, 8u, 4u, "rd:Trice8_4 %d, %d, %d, %d\n" },
- /* Trice8_5 ( Trice8_5 ) */ { 14230u, 8u, 5u, "rd:Trice8_5 %d, %d, %d, %d, %d\n" },
- /* Trice8_6 ( Trice8_6 ) */ { 14231u, 8u, 6u, "rd:Trice8_6 %d, %d, %d, %d, %d, %d\n" },
- /* Trice8_7 ( Trice8_7 ) */ { 14232u, 8u, 7u, "rd:Trice8_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice8_8 ( Trice8_8 ) */ { 14233u, 8u, 8u, "rd:Trice8_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice8_9 ( Trice8_9 ) */ { 14234u, 8u, 9u, "rd:Trice8_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice ( Trice_0 ) */ { 13107u, 32u, 0u, "rd:Trice\n" },
- /* Trice_1 ( Trice32_1 ) */ { 14078u, 32u, 1u, "rd:Trice_1 %d\n" },
- /* Trice_10 ( Trice32_10 ) */ { 14087u, 32u, 10u, "rd:Trice_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice_11 ( Trice32_11 ) */ { 14088u, 32u, 11u, "rd:Trice_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice_12 ( Trice32_12 ) */ { 14089u, 32u, 12u, "rd:Trice_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice_2 ( Trice32_2 ) */ { 14079u, 32u, 2u, "rd:Trice_2 %d, %d\n" },
- /* Trice_3 ( Trice32_3 ) */ { 14080u, 32u, 3u, "rd:Trice_3 %d, %d, %d\n" },
- /* Trice_4 ( Trice32_4 ) */ { 14081u, 32u, 4u, "rd:Trice_4 %d, %d, %d, %d\n" },
- /* Trice_5 ( Trice32_5 ) */ { 14082u, 32u, 5u, "rd:Trice_5 %d, %d, %d, %d, %d\n" },
- /* Trice_6 ( Trice32_6 ) */ { 14083u, 32u, 6u, "rd:Trice_6 %d, %d, %d, %d, %d, %d\n" },
- /* Trice_7 ( Trice32_7 ) */ { 14084u, 32u, 7u, "rd:Trice_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice_8 ( Trice32_8 ) */ { 14085u, 32u, 8u, "rd:Trice_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* Trice_9 ( Trice32_9 ) */ { 14086u, 32u, 9u, "rd:Trice_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice8 ( trice8_1 ) */ { 13354u, 8u, 1u, "rd:Use %%p to format a pointer in base 16 notation with leading 0x. (%p)\n" },
- /* trice16 ( trice16_1 ) */ { 13355u, 16u, 1u, "rd:Use %%p to format a pointer in base 16 notation with leading 0x. (%p)\n" },
- /* trice32 ( trice32_1 ) */ { 13356u, 32u, 1u, "rd:Use %%p to format a pointer in base 16 notation with leading 0x. (%p)\n" },
- /* trice64 ( trice64_1 ) */ { 13357u, 64u, 1u, "rd:Use %%p to format a pointer in base 16 notation with leading 0x. (%p)\n" },
- /* trice ( trice32_1 ) */ { 13358u, 32u, 1u, "rd:Use %%p to format a pointer in base 16 notation with leading 0x. (%p)\n" },
- /* trice ( trice32_2 ) */ { 13352u, 32u, 2u, "rd:Use %%t to format a boolean as true (%t) or false (%t).\n" },
- /* trice ( trice_0 ) */ { 14799u, 32u, 0u, "rd:e\n" },
- /* trice ( trice_0 ) */ { 14817u, 32u, 0u, "rd:e\n" },
- /* TRICE_S ( TRICE_S ) */ { 15238u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd:sizeof(%8s)" },
- /* TRICE_S ( TRICE_S ) */ { 15240u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd:sizeof(%8s)" },
- /* trice ( trice32_12 ) */ { 13105u, 32u, 12u, "rd:trice %d, %ld, %d, %lld, %d, %zd, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_11 ) */ { 13104u, 32u, 11u, "rd:trice %d, %ld, %d, %lld, %d, %zd, %d, %d, %d, %d, %d\n" },
- /* trice ( trice32_10 ) */ { 13103u, 32u, 10u, "rd:trice %d, %ld, %d, %lld, %d, %zd, %d, %d, %d, %d\n" },
- /* trice ( trice32_9 ) */ { 13102u, 32u, 9u, "rd:trice %d, %ld, %d, %lld, %d, %zd, %d, %d, %d\n" },
- /* trice ( trice32_8 ) */ { 13101u, 32u, 8u, "rd:trice %d, %ld, %d, %lld, %d, %zd, %d, %d\n" },
- /* trice ( trice32_7 ) */ { 13100u, 32u, 7u, "rd:trice %d, %ld, %d, %lld, %d, %zd, %d\n" },
- /* trice ( trice32_6 ) */ { 13099u, 32u, 6u, "rd:trice %d, %ld, %d, %lld, %d, %zd\n" },
- /* trice ( trice32_5 ) */ { 13098u, 32u, 5u, "rd:trice %d, %ld, %d, %lld, %d\n" },
- /* trice ( trice32_4 ) */ { 13097u, 32u, 4u, "rd:trice %d, %ld, %d, %lld\n" },
- /* trice ( trice32_3 ) */ { 13096u, 32u, 3u, "rd:trice %d, %ld, %d\n" },
- /* trice ( trice32_2 ) */ { 13095u, 32u, 2u, "rd:trice %d, %ld\n" },
- /* trice ( trice32_1 ) */ { 13094u, 32u, 1u, "rd:trice %d\n" },
- /* trice16 ( trice16_12 ) */ { 13161u, 16u, 12u, "rd:trice16 %X, %lX, %X, %llX, %X, %zX, %X, %X, %X, %X, %X, %X\n" },
- /* trice16 ( trice16_11 ) */ { 13160u, 16u, 11u, "rd:trice16 %X, %lX, %X, %llX, %X, %zX, %X, %X, %X, %X, %X\n" },
- /* trice16 ( trice16_10 ) */ { 13159u, 16u, 10u, "rd:trice16 %X, %lX, %X, %llX, %X, %zX, %X, %X, %X, %X\n" },
- /* trice16 ( trice16_9 ) */ { 13158u, 16u, 9u, "rd:trice16 %X, %lX, %X, %llX, %X, %zX, %X, %X, %X\n" },
- /* trice16 ( trice16_8 ) */ { 13157u, 16u, 8u, "rd:trice16 %X, %lX, %X, %llX, %X, %zX, %X, %X\n" },
- /* trice16 ( trice16_7 ) */ { 13156u, 16u, 7u, "rd:trice16 %X, %lX, %X, %llX, %X, %zX, %X\n" },
- /* trice16 ( trice16_6 ) */ { 13155u, 16u, 6u, "rd:trice16 %X, %lX, %X, %llX, %X, %zX\n" },
- /* trice16 ( trice16_5 ) */ { 13154u, 16u, 5u, "rd:trice16 %X, %lX, %X, %llX, %X\n" },
- /* trice16 ( trice16_4 ) */ { 13153u, 16u, 4u, "rd:trice16 %X, %lX, %X, %llX\n" },
- /* trice16 ( trice16_3 ) */ { 13152u, 16u, 3u, "rd:trice16 %X, %lX, %X\n" },
- /* trice16 ( trice16_2 ) */ { 13151u, 16u, 2u, "rd:trice16 %X, %lX\n" },
- /* trice16 ( trice16_1 ) */ { 13150u, 16u, 1u, "rd:trice16 %X\n" },
- /* trice16 ( trice16_12 ) */ { 14336u, 16u, 12u, "rd:trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_11 ) */ { 14335u, 16u, 11u, "rd:trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_10 ) */ { 14334u, 16u, 10u, "rd:trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_9 ) */ { 14333u, 16u, 9u, "rd:trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_8 ) */ { 14332u, 16u, 8u, "rd:trice16 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_7 ) */ { 14331u, 16u, 7u, "rd:trice16 %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_6 ) */ { 14330u, 16u, 6u, "rd:trice16 %d, %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_5 ) */ { 14329u, 16u, 5u, "rd:trice16 %d, %d, %d, %d, %d\n" },
- /* trice16 ( trice16_4 ) */ { 14328u, 16u, 4u, "rd:trice16 %d, %d, %d, %d\n" },
- /* trice16 ( trice16_3 ) */ { 14327u, 16u, 3u, "rd:trice16 %d, %d, %d\n" },
- /* trice16 ( trice16_2 ) */ { 14326u, 16u, 2u, "rd:trice16 %d, %d\n" },
- /* trice16 ( trice16_1 ) */ { 14325u, 16u, 1u, "rd:trice16 %d\n" },
- /* trice16 ( trice16_12 ) */ { 13146u, 16u, 12u, "rd:trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\n" },
- /* trice16 ( trice16_11 ) */ { 13145u, 16u, 11u, "rd:trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\n" },
- /* trice16 ( trice16_10 ) */ { 13144u, 16u, 10u, "rd:trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\n" },
- /* trice16 ( trice16_9 ) */ { 13143u, 16u, 9u, "rd:trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p\n" },
- /* trice16 ( trice16_8 ) */ { 13142u, 16u, 8u, "rd:trice16 %p, %p, %p, %p, %p, %p, %p, %p\n" },
- /* trice16 ( trice16_7 ) */ { 13141u, 16u, 7u, "rd:trice16 %p, %p, %p, %p, %p, %p, %p\n" },
- /* trice16 ( trice16_6 ) */ { 13140u, 16u, 6u, "rd:trice16 %p, %p, %p, %p, %p, %p\n" },
- /* trice16 ( trice16_5 ) */ { 13139u, 16u, 5u, "rd:trice16 %p, %p, %p, %p, %p\n" },
- /* trice16 ( trice16_4 ) */ { 13138u, 16u, 4u, "rd:trice16 %p, %p, %p, %p\n" },
- /* trice16 ( trice16_3 ) */ { 13137u, 16u, 3u, "rd:trice16 %p, %p, %p\n" },
- /* trice16 ( trice16_2 ) */ { 13136u, 16u, 2u, "rd:trice16 %p, %p\n" },
- /* trice16 ( trice16_1 ) */ { 13135u, 16u, 1u, "rd:trice16 %p\n" },
- /* trice16_1 ( trice16_1 ) */ { 14362u, 16u, 1u, "rd:trice16_1 %d\n" },
- /* trice16_10 ( trice16_10 ) */ { 14371u, 16u, 10u, "rd:trice16_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16_11 ( trice16_11 ) */ { 14372u, 16u, 11u, "rd:trice16_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16_12 ( trice16_12 ) */ { 14373u, 16u, 12u, "rd:trice16_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16_2 ( trice16_2 ) */ { 14363u, 16u, 2u, "rd:trice16_2 %d, %d\n" },
- /* trice16_3 ( trice16_3 ) */ { 14364u, 16u, 3u, "rd:trice16_3 %d, %d, %d\n" },
- /* trice16_4 ( trice16_4 ) */ { 14365u, 16u, 4u, "rd:trice16_4 %d, %d, %d, %d\n" },
- /* trice16_5 ( trice16_5 ) */ { 14366u, 16u, 5u, "rd:trice16_5 %d, %d, %d, %d, %d\n" },
- /* trice16_6 ( trice16_6 ) */ { 14367u, 16u, 6u, "rd:trice16_6 %d, %d, %d, %d, %d, %d\n" },
- /* trice16_7 ( trice16_7 ) */ { 14368u, 16u, 7u, "rd:trice16_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16_8 ( trice16_8 ) */ { 14369u, 16u, 8u, "rd:trice16_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice16_9 ( trice16_9 ) */ { 14370u, 16u, 9u, "rd:trice16_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice32 ( trice32_12 ) */ { 13163u, 32u, 12u, "rd:trice32 %X, %lX, %X, %llX, %X, %zX, %X, %X, %X, %X, %X, %X\n" },
- /* trice32 ( trice32_12 ) */ { 14484u, 32u, 12u, "rd:trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice32 ( trice32_11 ) */ { 14483u, 32u, 11u, "rd:trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice32 ( trice32_10 ) */ { 14482u, 32u, 10u, "rd:trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice32 ( trice32_9 ) */ { 14481u, 32u, 9u, "rd:trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice32 ( trice32_8 ) */ { 14480u, 32u, 8u, "rd:trice32 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice32 ( trice32_7 ) */ { 14479u, 32u, 7u, "rd:trice32 %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice32 ( trice32_6 ) */ { 14478u, 32u, 6u, "rd:trice32 %d, %d, %d, %d, %d, %d\n" },
- /* trice32 ( trice32_5 ) */ { 14477u, 32u, 5u, "rd:trice32 %d, %d, %d, %d, %d\n" },
- /* trice32 ( trice32_4 ) */ { 14476u, 32u, 4u, "rd:trice32 %d, %d, %d, %d\n" },
- /* trice32 ( trice32_3 ) */ { 14475u, 32u, 3u, "rd:trice32 %d, %d, %d\n" },
- /* trice32 ( trice32_2 ) */ { 14474u, 32u, 2u, "rd:trice32 %d, %d\n" },
- /* trice32 ( trice32_1 ) */ { 14473u, 32u, 1u, "rd:trice32 %d\n" },
- /* trice32 ( trice32_12 ) */ { 13148u, 32u, 12u, "rd:trice32 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\n" },
- /* trice32_1 ( trice32_1 ) */ { 14510u, 32u, 1u, "rd:trice32_1 %d\n" },
- /* trice32_1 ( trice32_1 ) */ { 13218u, 32u, 1u, "rd:trice32_1 %d\n" },
- /* trice32_10 ( trice32_10 ) */ { 14519u, 32u, 10u, "rd:trice32_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice32_11 ( trice32_11 ) */ { 14520u, 32u, 11u, "rd:trice32_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice32_12 ( trice32_12 ) */ { 14521u, 32u, 12u, "rd:trice32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice32_2 ( trice32_2 ) */ { 14511u, 32u, 2u, "rd:trice32_2 %d, %d\n" },
- /* trice32_2 ( trice32_2 ) */ { 13220u, 32u, 2u, "rd:trice32_2 %d,%d\n" },
- /* trice32_3 ( trice32_3 ) */ { 14512u, 32u, 3u, "rd:trice32_3 %d, %d, %d\n" },
- /* trice32_4 ( trice32_4 ) */ { 14513u, 32u, 4u, "rd:trice32_4 %d, %d, %d, %d\n" },
- /* trice32_5 ( trice32_5 ) */ { 14514u, 32u, 5u, "rd:trice32_5 %d, %d, %d, %d, %d\n" },
- /* trice32_6 ( trice32_6 ) */ { 14515u, 32u, 6u, "rd:trice32_6 %d, %d, %d, %d, %d, %d\n" },
- /* trice32_7 ( trice32_7 ) */ { 14516u, 32u, 7u, "rd:trice32_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice32_8 ( trice32_8 ) */ { 14517u, 32u, 8u, "rd:trice32_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice32_9 ( trice32_9 ) */ { 14518u, 32u, 9u, "rd:trice32_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice64 ( trice64_12 ) */ { 14632u, 64u, 12u, "rd:trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice64 ( trice64_11 ) */ { 14631u, 64u, 11u, "rd:trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice64 ( trice64_10 ) */ { 14630u, 64u, 10u, "rd:trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice64 ( trice64_9 ) */ { 14629u, 64u, 9u, "rd:trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice64 ( trice64_8 ) */ { 14628u, 64u, 8u, "rd:trice64 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice64 ( trice64_7 ) */ { 14627u, 64u, 7u, "rd:trice64 %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice64 ( trice64_6 ) */ { 14626u, 64u, 6u, "rd:trice64 %d, %d, %d, %d, %d, %d\n" },
- /* trice64 ( trice64_5 ) */ { 14625u, 64u, 5u, "rd:trice64 %d, %d, %d, %d, %d\n" },
- /* trice64 ( trice64_4 ) */ { 14624u, 64u, 4u, "rd:trice64 %d, %d, %d, %d\n" },
- /* trice64 ( trice64_3 ) */ { 14623u, 64u, 3u, "rd:trice64 %d, %d, %d\n" },
- /* trice64 ( trice64_2 ) */ { 13203u, 64u, 2u, "rd:trice64 %d, %d\n" },
- /* trice64 ( trice64_2 ) */ { 13214u, 64u, 2u, "rd:trice64 %d, %d\n" },
- /* trice64 ( trice64_2 ) */ { 13217u, 64u, 2u, "rd:trice64 %d, %d\n" },
- /* trice64 ( trice64_2 ) */ { 14622u, 64u, 2u, "rd:trice64 %d, %d\n" },
- /* trice64 ( trice64_1 ) */ { 14621u, 64u, 1u, "rd:trice64 %d\n" },
- /* trice64_1 ( trice64_1 ) */ { 14658u, 64u, 1u, "rd:trice64_1 %d\n" },
- /* trice64_1 ( trice64_1 ) */ { 13219u, 64u, 1u, "rd:trice64_1 %d\n" },
- /* trice64_10 ( trice64_10 ) */ { 14667u, 64u, 10u, "rd:trice64_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice64_11 ( trice64_11 ) */ { 14668u, 64u, 11u, "rd:trice64_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice64_12 ( trice64_12 ) */ { 14669u, 64u, 12u, "rd:trice64_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice64_2 ( trice64_2 ) */ { 14659u, 64u, 2u, "rd:trice64_2 %d, %d\n" },
- /* trice64_2 ( trice64_2 ) */ { 13221u, 64u, 2u, "rd:trice64_2 %d,%d\n" },
- /* trice64_3 ( trice64_3 ) */ { 14660u, 64u, 3u, "rd:trice64_3 %d, %d, %d\n" },
- /* trice64_4 ( trice64_4 ) */ { 14661u, 64u, 4u, "rd:trice64_4 %d, %d, %d, %d\n" },
- /* trice64_5 ( trice64_5 ) */ { 14662u, 64u, 5u, "rd:trice64_5 %d, %d, %d, %d, %d\n" },
- /* trice64_6 ( trice64_6 ) */ { 14663u, 64u, 6u, "rd:trice64_6 %d, %d, %d, %d, %d, %d\n" },
- /* trice64_7 ( trice64_7 ) */ { 14664u, 64u, 7u, "rd:trice64_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice64_8 ( trice64_8 ) */ { 14665u, 64u, 8u, "rd:trice64_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice64_9 ( trice64_9 ) */ { 14666u, 64u, 9u, "rd:trice64_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice8 ( trice8_12 ) */ { 13162u, 8u, 12u, "rd:trice8 %X, %lX, %X, %llX, %X, %zX, %X, %X, %X, %X, %X, %X\n" },
- /* trice8 ( trice8_12 ) */ { 13147u, 8u, 12u, "rd:trice8 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\n" },
- /* trice8 ( trice8_12 ) */ { 14188u, 8u, 12u, "rd:trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice8 ( trice8_11 ) */ { 14187u, 8u, 11u, "rd:trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice8 ( trice8_10 ) */ { 14186u, 8u, 10u, "rd:trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice8 ( trice8_9 ) */ { 14185u, 8u, 9u, "rd:trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice8 ( trice8_8 ) */ { 14184u, 8u, 8u, "rd:trice8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice8 ( trice8_7 ) */ { 14183u, 8u, 7u, "rd:trice8 %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice8 ( trice8_6 ) */ { 14182u, 8u, 6u, "rd:trice8 %d, %d, %d, %d, %d, %d\n" },
- /* trice8 ( trice8_5 ) */ { 14181u, 8u, 5u, "rd:trice8 %d, %d, %d, %d, %d\n" },
- /* trice8 ( trice8_4 ) */ { 14180u, 8u, 4u, "rd:trice8 %d, %d, %d, %d\n" },
- /* trice8 ( trice8_3 ) */ { 14179u, 8u, 3u, "rd:trice8 %d, %d, %d\n" },
- /* trice8 ( trice8_2 ) */ { 14178u, 8u, 2u, "rd:trice8 %d, %d\n" },
- /* trice8 ( trice8_1 ) */ { 14177u, 8u, 1u, "rd:trice8 %d\n" },
- /* trice8_1 ( trice8_1 ) */ { 14214u, 8u, 1u, "rd:trice8_1 %d\n" },
- /* trice8_10 ( trice8_10 ) */ { 14223u, 8u, 10u, "rd:trice8_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice8_11 ( trice8_11 ) */ { 14224u, 8u, 11u, "rd:trice8_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice8_12 ( trice8_12 ) */ { 14225u, 8u, 12u, "rd:trice8_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice8_2 ( trice8_2 ) */ { 14215u, 8u, 2u, "rd:trice8_2 %d, %d\n" },
- /* trice8_3 ( trice8_3 ) */ { 14216u, 8u, 3u, "rd:trice8_3 %d, %d, %d\n" },
- /* trice8_4 ( trice8_4 ) */ { 14217u, 8u, 4u, "rd:trice8_4 %d, %d, %d, %d\n" },
- /* trice8_5 ( trice8_5 ) */ { 14218u, 8u, 5u, "rd:trice8_5 %d, %d, %d, %d, %d\n" },
- /* trice8_6 ( trice8_6 ) */ { 14219u, 8u, 6u, "rd:trice8_6 %d, %d, %d, %d, %d, %d\n" },
- /* trice8_7 ( trice8_7 ) */ { 14220u, 8u, 7u, "rd:trice8_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice8_8 ( trice8_8 ) */ { 14221u, 8u, 8u, "rd:trice8_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice8_9 ( trice8_9 ) */ { 14222u, 8u, 9u, "rd:trice8_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice ( trice_0 ) */ { 13093u, 32u, 0u, "rd:trice\n" },
- /* trice_1 ( trice32_1 ) */ { 14066u, 32u, 1u, "rd:trice_1 %d\n" },
- /* trice_10 ( trice32_10 ) */ { 14075u, 32u, 10u, "rd:trice_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice_11 ( trice32_11 ) */ { 14076u, 32u, 11u, "rd:trice_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice_12 ( trice32_12 ) */ { 14077u, 32u, 12u, "rd:trice_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice_2 ( trice32_2 ) */ { 14067u, 32u, 2u, "rd:trice_2 %d, %d\n" },
- /* trice_3 ( trice32_3 ) */ { 14068u, 32u, 3u, "rd:trice_3 %d, %d, %d\n" },
- /* trice_4 ( trice32_4 ) */ { 14069u, 32u, 4u, "rd:trice_4 %d, %d, %d, %d\n" },
- /* trice_5 ( trice32_5 ) */ { 14070u, 32u, 5u, "rd:trice_5 %d, %d, %d, %d, %d\n" },
- /* trice_6 ( trice32_6 ) */ { 14071u, 32u, 6u, "rd:trice_6 %d, %d, %d, %d, %d, %d\n" },
- /* trice_7 ( trice32_7 ) */ { 14072u, 32u, 7u, "rd:trice_7 %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice_8 ( trice32_8 ) */ { 14073u, 32u, 8u, "rd:trice_8 %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* trice_9 ( trice32_9 ) */ { 14074u, 32u, 9u, "rd:trice_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n" },
- /* TRICE ( TRICE_0 ) */ { 13726u, 32u, 0u, "read:black+i:yellow+h\n" },
- /* trice ( trice_0 ) */ { 13776u, 32u, 0u, "read:black+i:yellow+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13826u, 32u, 0u, "read:black+i:yellow+h\n" },
- /* Trice ( Trice_0 ) */ { 13876u, 32u, 0u, "read:black+i:yellow+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13926u, 32u, 0u, "read:black+i:yellow+h\n" },
- /* TRice ( TRice_0 ) */ { 13976u, 32u, 0u, "read:black+i:yellow+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13728u, 32u, 0u, "receive:black+h:black\n" },
- /* trice ( trice_0 ) */ { 13778u, 32u, 0u, "receive:black+h:black\n" },
- /* TRICE ( TRICE_0 ) */ { 13828u, 32u, 0u, "receive:black+h:black\n" },
- /* Trice ( Trice_0 ) */ { 13878u, 32u, 0u, "receive:black+h:black\n" },
- /* TRICE ( TRICE_0 ) */ { 13928u, 32u, 0u, "receive:black+h:black\n" },
- /* TRice ( TRice_0 ) */ { 13978u, 32u, 0u, "receive:black+h:black\n" },
- /* TRice32F ( TRice32F ) */ { 13305u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rpc:FunctionNameYb" },
- /* TRice32F ( TRice32F ) */ { 15301u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rpc:FunctionNameYb" },
- /* TRice32C ( TRice32C ) */ { 15644u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rpc:FunctionNameYb" },
- /* Trice32F ( Trice32F ) */ { 13306u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rpc:FunctionNameYc" },
- /* Trice32F ( Trice32F ) */ { 15302u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rpc:FunctionNameYc" },
- /* Trice32C ( Trice32C ) */ { 15496u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rpc:FunctionNameYc" },
- /* TRICE_S ( TRICE_S ) */ { 13001u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rx:received command:%s\n" },
- /* TRICE_S ( TRICE_S ) */ { 13015u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rx:received command:%s\n" },
- /* trice ( trice32_1 ) */ { 15255u, 32u, 1u, "sig:%3d:" },
- /* TRICE_S ( TRICE_S ) */ { 13389u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:%s\n" },
- /* TRICE_S ( TRICE_S ) */ { 13391u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:%s\n" },
- /* TRICE_S ( TRICE_S ) */ { 13393u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:%s\n" },
- /* TRICE_S ( TRICE_S ) */ { 13395u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:%s\n" },
- /* TRICE_S ( TRICE_S ) */ { 13397u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:%s\n" },
- /* trice ( trice_0 ) */ { 13351u, 32u, 0u, "sig:Boolean (true/false)\n" },
- /* trice ( trice_0 ) */ { 13346u, 32u, 0u, "sig:Character (quoted, Unicode)\n" },
- /* TRICE ( TRICE_0 ) */ { 14694u, 32u, 0u, "sig:Colors and ticks\n" },
- /* trice ( trice_0 ) */ { 13366u, 32u, 0u, "sig:Double (indent, precision, scientific notation)\n" },
- /* trice ( trice_0 ) */ { 13360u, 32u, 0u, "sig:Float (indent, precision, scientific notation)\n" },
- /* TRice ( TRice_0 ) */ { 13334u, 32u, 0u, "sig:Integer (indent, base, sign) - see https://yourbasic.org/golang/fmt-printf-reference-cheat-sheet/\n" },
- /* TRICE ( TRICE_0 ) */ { 14767u, 32u, 0u, "sig:Legacy TRICE16-64\n" },
- /* TRICE ( TRICE_0 ) */ { 14733u, 32u, 0u, "sig:Legacy TRICE8\n" },
- /* trice ( trice_0 ) */ { 13353u, 32u, 0u, "sig:Pointer (hex)\n" },
- /* trice ( trice_0 ) */ { 13387u, 32u, 0u, "sig:Runtime generated strings\n" },
- /* trice ( trice_0 ) */ { 13177u, 32u, 0u, "sig:Some time measurements\n" },
- /* trice ( trice_0 ) */ { 13372u, 32u, 0u, "sig:String or byte slice (quote, indent, hex)\n" },
- /* trice ( trice_0 ) */ { 15102u, 32u, 0u, "sig:TRICE with 1 to 12 values\n" },
- /* TRice ( TRice_0 ) */ { 15141u, 32u, 0u, "sig:TRICE16 with 1 to 12 hex\n" },
- /* trice ( trice32_1 ) */ { 14250u, 32u, 1u, "sig:TRICE16 with 1 to 12 values (line %d)\n" },
- /* trice ( trice_0 ) */ { 14847u, 32u, 0u, "sig:TRICE16 with variable param count 1 to 12\n" },
- /* trice ( trice32_1 ) */ { 14287u, 32u, 1u, "sig:TRICE16_n with 1 to 12 values (line %d)\n" },
- /* trice ( trice32_1 ) */ { 14398u, 32u, 1u, "sig:TRICE32 with 1 to 12 values (line %d)\n" },
- /* trice ( trice_0 ) */ { 14874u, 32u, 0u, "sig:TRICE32 with variable param count 1 to 12\n" },
- /* trice ( trice32_1 ) */ { 14546u, 32u, 1u, "sig:TRICE64 with 1 to 12 values (line %d)\n" },
- /* trice ( trice_0 ) */ { 14902u, 32u, 0u, "sig:TRICE64 with variable param count 1 to 12\n" },
- /* trice ( trice_0 ) */ { 13991u, 32u, 0u, "sig:TRICE8 with 1 to 12 values\n" },
- /* trice ( trice_0 ) */ { 14102u, 32u, 0u, "sig:TRICE8 with 1 to 12 values\n" },
- /* trice ( trice_0 ) */ { 14819u, 32u, 0u, "sig:TRICE8 with variable param count 1 to 12\n" },
- /* trice ( trice_0 ) */ { 14139u, 32u, 0u, "sig:TRICE8_n with 1 to 12 values\n" },
- /* TRICE_N ( TRICE_N ) */ { 13319u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TRICE_N=%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 13321u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TRICE_N=%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 13323u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TRICE_N=%s\n" },
- /* TRICE_S ( TRICE_S ) */ { 13318u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TRICE_S=%s\n" },
- /* TRICE_S ( TRICE_S ) */ { 13320u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TRICE_S=%s\n" },
- /* TRICE_S ( TRICE_S ) */ { 13322u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TRICE_S=%s\n" },
- /* trice ( trice_0 ) */ { 14028u, 32u, 0u, "sig:TRICE_n with 1 to 12 values\n" },
- /* trice ( trice_0 ) */ { 15115u, 32u, 0u, "sig:TRICE_n with 1 to 12 values\n" },
- /* TRice ( TRice_0 ) */ { 13120u, 32u, 0u, "sig:TRice with 32-bit stamp and with 0 to 12 values (common use cases)\n" },
- /* TRiceN ( TRiceN ) */ { 13329u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TRiceN=%s\n" },
- /* TRiceS ( TRiceS ) */ { 13328u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TRiceS=%s\n" },
- /* TRICE ( TRICE_0 ) */ { 14699u, 32u, 0u, "sig:This ASSERT error is just a demo and no real error:\n" },
- /* Trice ( Trice_0 ) */ { 13106u, 32u, 0u, "sig:Trice with 16-bit stamp and with 0 to 12 values (common use cases)\n" },
- /* TRice ( TRice_0 ) */ { 15128u, 32u, 0u, "sig:Trice16 with 1 to 12 pointer\n" },
- /* TriceN ( TriceN ) */ { 13327u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TriceN=%s\n" },
- /* TriceS ( TriceS ) */ { 13326u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TriceS=%s\n" },
- /* TRICE ( TRICE_0 ) */ { 14714u, 32u, 0u, "sig:Various ranges and formats\n" },
- /* TRICE_N ( TRICE_N ) */ { 13266u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:With TRICE_N:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 13268u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:With TRICE_N:%s\n" },
- /* TRICE_N ( TRICE_N ) */ { 13270u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:With TRICE_N:%s\n" },
- /* TRiceN ( TRiceN ) */ { 13264u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:With TRiceN:%s\n" },
- /* TriceN ( TriceN ) */ { 13262u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:With TriceN:%s\n" },
- /* triceN ( triceN ) */ { 13260u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:With triceN:%s\n" },
- /* trice ( trice_0 ) */ { 14794u, 32u, 0u, "sig:colored single letters and several TRICE macros in one line\n" },
- /* trice ( trice_0 ) */ { 13082u, 32u, 0u, "sig:length modifier coverage for supported combinations\n" },
- /* trice ( trice_0 ) */ { 13092u, 32u, 0u, "sig:trice without stamp and with 0 to 12 values (most common use cases)\n" },
- /* trice ( trice_0 ) */ { 13149u, 32u, 0u, "sig:trice16 with 1 to 12 hex\n" },
- /* trice ( trice_0 ) */ { 13134u, 32u, 0u, "sig:trice16 with 1 to 12 pointer\n" },
- /* trice ( trice32_1 ) */ { 14324u, 32u, 1u, "sig:trice16 with 1 to 12 values (line %d)\n" },
- /* trice ( trice32_1 ) */ { 14361u, 32u, 1u, "sig:trice16_n with 1 to 12 values (line %d)\n" },
- /* trice ( trice32_1 ) */ { 14472u, 32u, 1u, "sig:trice32 with 1 to 12 values (line %d)\n" },
- /* trice ( trice32_1 ) */ { 14620u, 32u, 1u, "sig:trice64 with 1 to 12 values (line %d)\n" },
- /* trice ( trice_0 ) */ { 14176u, 32u, 0u, "sig:trice8 with 1 to 12 values\n" },
- /* TRICE ( TRICE_0 ) */ { 14213u, 32u, 0u, "sig:trice8_n with 1 to 12 values\n" },
- /* triceN ( triceN ) */ { 13325u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:triceN=%s\n" },
- /* triceS ( triceS ) */ { 13324u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:triceS=%s\n" },
- /* TRICE ( TRICE_0 ) */ { 14065u, 32u, 0u, "sig:trice_n with 1 to 12 values\n" },
- /* TRICE ( TRICE_0 ) */ { 13732u, 32u, 0u, "signal:118+i\n" },
- /* trice ( trice_0 ) */ { 13782u, 32u, 0u, "signal:118+i\n" },
- /* TRICE ( TRICE_0 ) */ { 13832u, 32u, 0u, "signal:118+i\n" },
- /* Trice ( Trice_0 ) */ { 13882u, 32u, 0u, "signal:118+i\n" },
- /* TRICE ( TRICE_0 ) */ { 13932u, 32u, 0u, "signal:118+i\n" },
- /* TRice ( TRice_0 ) */ { 13982u, 32u, 0u, "signal:118+i\n" },
- /* trice ( trice32_1 ) */ { 14435u, 32u, 1u, "signal:TRICE32_n with 1 to 12 values (line %d)\n" },
- /* trice ( trice32_1 ) */ { 14583u, 32u, 1u, "signal:TRICE64_n with 1 to 12 values (line %d)\n" },
- /* trice ( trice32_1 ) */ { 14509u, 32u, 1u, "signal:trice32_n with 1 to 12 values (line %d)\n" },
- /* trice ( trice32_1 ) */ { 14657u, 32u, 1u, "signal:trice64_n with 1 to 12 values (line %d)\n" },
- /* trice ( trice_0 ) */ { 14802u, 32u, 0u, "t:H" },
- /* TRICE ( TRICE_0 ) */ { 13733u, 32u, 0u, "test:yellow+h:black\n" },
- /* trice ( trice_0 ) */ { 13783u, 32u, 0u, "test:yellow+h:black\n" },
- /* TRICE ( TRICE_0 ) */ { 13833u, 32u, 0u, "test:yellow+h:black\n" },
- /* Trice ( Trice_0 ) */ { 13883u, 32u, 0u, "test:yellow+h:black\n" },
- /* TRICE ( TRICE_0 ) */ { 13933u, 32u, 0u, "test:yellow+h:black\n" },
- /* TRice ( TRice_0 ) */ { 13983u, 32u, 0u, "test:yellow+h:black\n" },
- /* trice16_1 ( trice16_1 ) */ { 13171u, 16u, 1u, "tim: post TriceDecryption SysTick=%d\n" },
- /* trice32 ( trice32_1 ) */ { 13168u, 32u, 1u, "tim: post TriceEncryption SysTick=%d\n" },
- /* trice16_1 ( trice16_1 ) */ { 13170u, 16u, 1u, "tim: pre TriceDecryption SysTick=%d\n" },
- /* trice32 ( trice32_1 ) */ { 13167u, 32u, 1u, "tim: pre TriceEncryption SysTick=%d\n" },
- /* TRICE ( TRICE_0 ) */ { 13205u, 32u, 0u, "tim:TRICE START time message\n" },
- /* TRICE ( TRICE_0 ) */ { 13207u, 32u, 0u, "tim:TRICE START time message\n" },
- /* TRICE ( TRICE_0 ) */ { 13209u, 32u, 0u, "tim:TRICE START time message\n" },
- /* TRICE ( TRICE_0 ) */ { 13206u, 32u, 0u, "tim:TRICE STOP time message\n" },
- /* TRICE ( TRICE_0 ) */ { 13208u, 32u, 0u, "tim:TRICE STOP time message\n" },
- /* TRICE ( TRICE_0 ) */ { 13211u, 32u, 0u, "tim:TRICE STOP time message\n" },
- /* trice ( trice_0 ) */ { 13212u, 32u, 0u, "tim:trice --------------------------------------------------\n" },
- /* trice ( trice_0 ) */ { 13213u, 32u, 0u, "tim:trice --------------------------------------------------\n" },
- /* trice ( trice_0 ) */ { 13215u, 32u, 0u, "tim:trice --------------------------------------------------\n" },
- /* trice ( trice_0 ) */ { 13216u, 32u, 0u, "tim:trice --------------------------------------------------\n" },
- /* trice ( trice_0 ) */ { 13198u, 32u, 0u, "tim:trice START time message\n" },
- /* trice ( trice_0 ) */ { 13200u, 32u, 0u, "tim:trice START time message\n" },
- /* trice ( trice_0 ) */ { 13202u, 32u, 0u, "tim:trice START time message\n" },
- /* trice ( trice_0 ) */ { 13199u, 32u, 0u, "tim:trice STOP time message\n" },
- /* trice ( trice_0 ) */ { 13201u, 32u, 0u, "tim:trice STOP time message\n" },
- /* trice ( trice_0 ) */ { 13204u, 32u, 0u, "tim:trice STOP time message\n" },
- /* TRICE ( TRICE32_1 ) */ { 14713u, 32u, 1u, "time:TRICE32_1 message, SysTick is %6u\n" },
- /* TRICE ( TRICE_0 ) */ { 13724u, 32u, 0u, "time:blue+i:blue+h\n" },
- /* trice ( trice_0 ) */ { 13774u, 32u, 0u, "time:blue+i:blue+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13824u, 32u, 0u, "time:blue+i:blue+h\n" },
- /* Trice ( Trice_0 ) */ { 13874u, 32u, 0u, "time:blue+i:blue+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13924u, 32u, 0u, "time:blue+i:blue+h\n" },
- /* TRice ( TRice_0 ) */ { 13974u, 32u, 0u, "time:blue+i:blue+h\n" },
- /* trice ( trice_0 ) */ { 14803u, 32u, 0u, "time:i" },
- /* TRICE ( TRICE_0 ) */ { 13723u, 32u, 0u, "trace:default+i:default+h\n" },
- /* trice ( trice_0 ) */ { 13773u, 32u, 0u, "trace:default+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13823u, 32u, 0u, "trace:default+i:default+h\n" },
- /* Trice ( Trice_0 ) */ { 13873u, 32u, 0u, "trace:default+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13923u, 32u, 0u, "trace:default+i:default+h\n" },
- /* TRice ( TRice_0 ) */ { 13973u, 32u, 0u, "trace:default+i:default+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13729u, 32u, 0u, "transmit:black:black+h\n" },
- /* trice ( trice_0 ) */ { 13779u, 32u, 0u, "transmit:black:black+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13829u, 32u, 0u, "transmit:black:black+h\n" },
- /* Trice ( Trice_0 ) */ { 13879u, 32u, 0u, "transmit:black:black+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13929u, 32u, 0u, "transmit:black:black+h\n" },
- /* TRice ( TRice_0 ) */ { 13979u, 32u, 0u, "transmit:black:black+h\n" },
- /* TRICE16 ( TRICE16_4 ) */ { 14725u, 16u, 4u, "tst:TRICE16 %%6d -> %6d %6d %6d %6d\n" },
- /* TRICE16 ( TRICE16_4 ) */ { 14726u, 16u, 4u, "tst:TRICE16 %%7o -> %7o %7o %7o %7o\n" },
- /* TRICE16 ( TRICE16_4 ) */ { 14724u, 16u, 4u, "tst:TRICE16 %%05x -> %05x %05x %05x %05x\n" },
- /* TRICE16 ( TRICE16_12 ) */ { 14859u, 16u, 12u, "tst:TRICE16 %d %d %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE16 ( TRICE16_11 ) */ { 14858u, 16u, 11u, "tst:TRICE16 %d %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE16 ( TRICE16_10 ) */ { 14857u, 16u, 10u, "tst:TRICE16 %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE16 ( TRICE16_9 ) */ { 14856u, 16u, 9u, "tst:TRICE16 %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE16 ( TRICE16_8 ) */ { 14855u, 16u, 8u, "tst:TRICE16 %d %d %d %d %d %d %d %d\n" },
- /* TRICE16 ( TRICE16_7 ) */ { 14854u, 16u, 7u, "tst:TRICE16 %d %d %d %d %d %d %d\n" },
- /* TRICE16 ( TRICE16_6 ) */ { 14853u, 16u, 6u, "tst:TRICE16 %d %d %d %d %d %d\n" },
- /* TRICE16 ( TRICE16_5 ) */ { 14852u, 16u, 5u, "tst:TRICE16 %d %d %d %d %d\n" },
- /* TRICE16 ( TRICE16_4 ) */ { 14851u, 16u, 4u, "tst:TRICE16 %d %d %d %d\n" },
- /* TRICE16 ( TRICE16_3 ) */ { 14850u, 16u, 3u, "tst:TRICE16 %d %d %d\n" },
- /* TRICE16 ( TRICE16_2 ) */ { 14849u, 16u, 2u, "tst:TRICE16 %d %d\n" },
- /* TRICE16 ( TRICE16_1 ) */ { 14848u, 16u, 1u, "tst:TRICE16 %d\n" },
- /* TRICE16 ( TRICE16_9 ) */ { 14860u, 16u, 9u, "tst:TRICE16 %t %b %x %X %d %u %o %O %p\n" },
- /* TRICE16_9 ( TRICE16_9 ) */ { 14873u, 16u, 9u, "tst:TRICE16 %t %b %x %X %d %u %o %O %p\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 14861u, 16u, 1u, "tst:TRICE16_1 %d\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 14768u, 16u, 1u, "tst:TRICE16_1 %d\n" },
- /* TRICE16_1 ( TRICE16_1 ) */ { 14782u, 16u, 1u, "tst:TRICE16_1 %u\n" },
- /* TRICE16_10 ( TRICE16_10 ) */ { 14870u, 16u, 10u, "tst:TRICE16_10 %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE16_11 ( TRICE16_11 ) */ { 14871u, 16u, 11u, "tst:TRICE16_11 %d %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE16_12 ( TRICE16_12 ) */ { 14872u, 16u, 12u, "tst:TRICE16_12 %d %d %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE16_2 ( TRICE16_2 ) */ { 14862u, 16u, 2u, "tst:TRICE16_2 %d %d\n" },
- /* TRICE16_2 ( TRICE16_2 ) */ { 14769u, 16u, 2u, "tst:TRICE16_2 %d %d\n" },
- /* TRICE16_2 ( TRICE16_2 ) */ { 14783u, 16u, 2u, "tst:TRICE16_2 %u %u\n" },
- /* TRICE16_3 ( TRICE16_3 ) */ { 14863u, 16u, 3u, "tst:TRICE16_3 %d %d %d\n" },
- /* TRICE16_3 ( TRICE16_3 ) */ { 14770u, 16u, 3u, "tst:TRICE16_3 %d %d %d\n" },
- /* TRICE16_3 ( TRICE16_3 ) */ { 14784u, 16u, 3u, "tst:TRICE16_3 %u %u %u\n" },
- /* TRICE16_4 ( TRICE16_4 ) */ { 14864u, 16u, 4u, "tst:TRICE16_4 %d %d %d %d\n" },
- /* TRICE16_4 ( TRICE16_4 ) */ { 14771u, 16u, 4u, "tst:TRICE16_4 %d %d %d %d\n" },
- /* TRICE16_4 ( TRICE16_4 ) */ { 14785u, 16u, 4u, "tst:TRICE16_4 %u %u %u %u\n" },
- /* TRICE16_5 ( TRICE16_5 ) */ { 14865u, 16u, 5u, "tst:TRICE16_5 %d %d %d %d %d\n" },
- /* TRICE16_6 ( TRICE16_6 ) */ { 14866u, 16u, 6u, "tst:TRICE16_6 %d %d %d %d %d %d\n" },
- /* TRICE16_7 ( TRICE16_7 ) */ { 14867u, 16u, 7u, "tst:TRICE16_7 %d %d %d %d %d %d %d\n" },
- /* TRICE16_8 ( TRICE16_8 ) */ { 14868u, 16u, 8u, "tst:TRICE16_8 %d %d %d %d %d %d %d %d\n" },
- /* TRICE16_9 ( TRICE16_9 ) */ { 14869u, 16u, 9u, "tst:TRICE16_9 %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE32 ( TRICE32_12 ) */ { 14900u, 32u, 12u, "tst:TRICE32 %t %b %x %X %d %u %o %O %p %e %f %g\n" },
- /* TRICE32 ( TRICE32_4 ) */ { 14727u, 32u, 4u, "tst:TRICE32 %%09x -> %09x %09x %09x %09x\n" },
- /* TRICE32 ( TRICE32_4 ) */ { 14728u, 32u, 4u, "tst:TRICE32 %%10d -> %10d %10d %10d %10x\n" },
- /* TRICE32 ( TRICE32_12 ) */ { 14886u, 32u, 12u, "tst:TRICE32 %d %d %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE32 ( TRICE32_11 ) */ { 14885u, 32u, 11u, "tst:TRICE32 %d %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE32 ( TRICE32_10 ) */ { 14884u, 32u, 10u, "tst:TRICE32 %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE32 ( TRICE32_9 ) */ { 14883u, 32u, 9u, "tst:TRICE32 %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE32 ( TRICE32_8 ) */ { 14882u, 32u, 8u, "tst:TRICE32 %d %d %d %d %d %d %d %d\n" },
- /* TRICE32 ( TRICE32_7 ) */ { 14881u, 32u, 7u, "tst:TRICE32 %d %d %d %d %d %d %d\n" },
- /* TRICE32 ( TRICE32_6 ) */ { 14880u, 32u, 6u, "tst:TRICE32 %d %d %d %d %d %d\n" },
- /* TRICE32 ( TRICE32_5 ) */ { 14879u, 32u, 5u, "tst:TRICE32 %d %d %d %d %d\n" },
- /* TRICE32 ( TRICE32_4 ) */ { 14878u, 32u, 4u, "tst:TRICE32 %d %d %d %d\n" },
- /* TRICE32 ( TRICE32_3 ) */ { 14877u, 32u, 3u, "tst:TRICE32 %d %d %d\n" },
- /* TRICE32 ( TRICE32_2 ) */ { 14876u, 32u, 2u, "tst:TRICE32 %d %d\n" },
- /* TRICE32 ( TRICE32_1 ) */ { 14875u, 32u, 1u, "tst:TRICE32 %d\n" },
- /* TRICE32 ( TRICE32_12 ) */ { 14887u, 32u, 12u, "tst:TRICE32 %t %b %x %X %d %u %o %O %p %e %f %g\n" },
- /* TRICE32_1 ( TRICE32_1 ) */ { 14888u, 32u, 1u, "tst:TRICE32_1 %d\n" },
- /* TRICE32_1 ( TRICE32_1 ) */ { 14772u, 32u, 1u, "tst:TRICE32_1 %08x\n" },
- /* TRICE32_1 ( TRICE32_1 ) */ { 14773u, 32u, 1u, "tst:TRICE32_1 %d\n" },
- /* TRICE32_1 ( TRICE32_1 ) */ { 14786u, 32u, 1u, "tst:TRICE32_1 %u\n" },
- /* TRICE32_10 ( TRICE32_10 ) */ { 14897u, 32u, 10u, "tst:TRICE32_10 %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE32_11 ( TRICE32_11 ) */ { 14898u, 32u, 11u, "tst:TRICE32_11 %d %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE32_12 ( TRICE32_12 ) */ { 14899u, 32u, 12u, "tst:TRICE32_12 %d %d %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE32_12 ( TRICE32_12 ) */ { 14901u, 32u, 12u, "tst:TRICE32_12 %t %b %x %X %d %u %o %O %p %e %f %g\n" },
- /* TRICE32_2 ( TRICE32_2 ) */ { 14889u, 32u, 2u, "tst:TRICE32_2 %d %d\n" },
- /* TRICE32_2 ( TRICE32_2 ) */ { 14775u, 32u, 2u, "tst:TRICE32_2 %d %d\n" },
- /* TRICE32_2 ( TRICE32_2 ) */ { 14787u, 32u, 2u, "tst:TRICE32_2 %u %u\n" },
- /* TRICE32_2 ( TRICE32_2 ) */ { 14774u, 32u, 2u, "tst:TRICE32_2 %x %x\n" },
- /* TRICE32_3 ( TRICE32_3 ) */ { 14890u, 32u, 3u, "tst:TRICE32_3 %d %d %d\n" },
- /* TRICE32_3 ( TRICE32_3 ) */ { 14777u, 32u, 3u, "tst:TRICE32_3 %d %d %d\n" },
- /* TRICE32_3 ( TRICE32_3 ) */ { 14788u, 32u, 3u, "tst:TRICE32_3 %u %u %u\n" },
- /* TRICE32_3 ( TRICE32_3 ) */ { 14776u, 32u, 3u, "tst:TRICE32_3 %x %x %x\n" },
- /* TRICE32_4 ( TRICE32_4 ) */ { 14891u, 32u, 4u, "tst:TRICE32_4 %d %d %d %d\n" },
- /* TRICE32_4 ( TRICE32_4 ) */ { 14779u, 32u, 4u, "tst:TRICE32_4 %d %d %d %d\n" },
- /* TRICE32_4 ( TRICE32_4 ) */ { 14789u, 32u, 4u, "tst:TRICE32_4 %u %u %u %u\n" },
- /* TRICE32_4 ( TRICE32_4 ) */ { 14778u, 32u, 4u, "tst:TRICE32_4 %x %x %x %x\n" },
- /* TRICE32_5 ( TRICE32_5 ) */ { 14892u, 32u, 5u, "tst:TRICE32_5 %d %d %d %d %d\n" },
- /* TRICE32_6 ( TRICE32_6 ) */ { 14893u, 32u, 6u, "tst:TRICE32_6 %d %d %d %d %d %d\n" },
- /* TRICE32_7 ( TRICE32_7 ) */ { 14894u, 32u, 7u, "tst:TRICE32_7 %d %d %d %d %d %d %d\n" },
- /* TRICE32_8 ( TRICE32_8 ) */ { 14895u, 32u, 8u, "tst:TRICE32_8 %d %d %d %d %d %d %d %d\n" },
- /* TRICE32_9 ( TRICE32_9 ) */ { 14896u, 32u, 9u, "tst:TRICE32_9 %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE64 ( TRICE64_4 ) */ { 14730u, 64u, 4u, "tst:TRICE64 %%09x -> %09x %09x %09x %09x\n" },
- /* TRICE64 ( TRICE64_4 ) */ { 14731u, 64u, 4u, "tst:TRICE64 %%10d -> %10d %10d %10d %10x\n" },
- /* TRICE64 ( TRICE64_12 ) */ { 14914u, 64u, 12u, "tst:TRICE64 %d %d %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE64 ( TRICE64_11 ) */ { 14913u, 64u, 11u, "tst:TRICE64 %d %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE64 ( TRICE64_10 ) */ { 14912u, 64u, 10u, "tst:TRICE64 %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE64 ( TRICE64_9 ) */ { 14911u, 64u, 9u, "tst:TRICE64 %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE64 ( TRICE64_8 ) */ { 14910u, 64u, 8u, "tst:TRICE64 %d %d %d %d %d %d %d %d\n" },
- /* TRICE64 ( TRICE64_7 ) */ { 14909u, 64u, 7u, "tst:TRICE64 %d %d %d %d %d %d %d\n" },
- /* TRICE64 ( TRICE64_6 ) */ { 14908u, 64u, 6u, "tst:TRICE64 %d %d %d %d %d %d\n" },
- /* TRICE64 ( TRICE64_5 ) */ { 14907u, 64u, 5u, "tst:TRICE64 %d %d %d %d %d\n" },
- /* TRICE64 ( TRICE64_4 ) */ { 14906u, 64u, 4u, "tst:TRICE64 %d %d %d %d\n" },
- /* TRICE64 ( TRICE64_3 ) */ { 14905u, 64u, 3u, "tst:TRICE64 %d %d %d\n" },
- /* TRICE64 ( TRICE64_2 ) */ { 14904u, 64u, 2u, "tst:TRICE64 %d %d\n" },
- /* TRICE64 ( TRICE64_1 ) */ { 14903u, 64u, 1u, "tst:TRICE64 %d\n" },
- /* TRICE64 ( TRICE64_12 ) */ { 14915u, 64u, 12u, "tst:TRICE64 %t %b %x %X %d %u %o %O %p %e %f %g\n" },
- /* TRICE64_1 ( TRICE64_1 ) */ { 14916u, 64u, 1u, "tst:TRICE64_1 %d\n" },
- /* TRICE64_1 ( TRICE64_1 ) */ { 14780u, 64u, 1u, "tst:TRICE64_1 %d\n" },
- /* TRICE64_1 ( TRICE64_1 ) */ { 14792u, 64u, 1u, "tst:TRICE64_1 %u\n" },
- /* TRICE64_1 ( TRICE64_1 ) */ { 14790u, 64u, 1u, "tst:TRICE64_1 %x\n" },
- /* TRICE64_10 ( TRICE64_10 ) */ { 14925u, 64u, 10u, "tst:TRICE64_10 %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE64_11 ( TRICE64_11 ) */ { 14926u, 64u, 11u, "tst:TRICE64_11 %d %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE64_12 ( TRICE64_12 ) */ { 14927u, 64u, 12u, "tst:TRICE64_12 %d %d %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE64_12 ( TRICE64_12 ) */ { 14928u, 64u, 12u, "tst:TRICE64_12 %t %b %x %X %d %u %o %O %p %e %f %g\n" },
- /* TRICE64_2 ( TRICE64_2 ) */ { 14917u, 64u, 2u, "tst:TRICE64_2 %d %d\n" },
- /* TRICE64_2 ( TRICE64_2 ) */ { 14781u, 64u, 2u, "tst:TRICE64_2 %d %d\n" },
- /* TRICE64_2 ( TRICE64_2 ) */ { 14793u, 64u, 2u, "tst:TRICE64_2 %u %u\n" },
- /* TRICE64_2 ( TRICE64_2 ) */ { 14791u, 64u, 2u, "tst:TRICE64_2 %x %x\n" },
- /* TRICE64_3 ( TRICE64_3 ) */ { 14918u, 64u, 3u, "tst:TRICE64_3 %d %d %d\n" },
- /* TRICE64_4 ( TRICE64_4 ) */ { 14919u, 64u, 4u, "tst:TRICE64_4 %d %d %d %d\n" },
- /* TRICE64_5 ( TRICE64_5 ) */ { 14920u, 64u, 5u, "tst:TRICE64_5 %d %d %d %d %d\n" },
- /* TRICE64_6 ( TRICE64_6 ) */ { 14921u, 64u, 6u, "tst:TRICE64_6 %d %d %d %d %d %d\n" },
- /* TRICE64_7 ( TRICE64_7 ) */ { 14922u, 64u, 7u, "tst:TRICE64_7 %d %d %d %d %d %d %d\n" },
- /* TRICE64_8 ( TRICE64_8 ) */ { 14923u, 64u, 8u, "tst:TRICE64_8 %d %d %d %d %d %d %d %d\n" },
- /* TRICE64_9 ( TRICE64_9 ) */ { 14924u, 64u, 9u, "tst:TRICE64_9 %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE8 ( TRICE8_4 ) */ { 14719u, 8u, 4u, "tst:TRICE8 %%4O -> %4O %4O %4O %4O\n" },
- /* TRICE8 ( TRICE8_4 ) */ { 14720u, 8u, 4u, "tst:TRICE8 %%4X -> %4X %4X %4X %4X\n" },
- /* TRICE8 ( TRICE8_4 ) */ { 14716u, 8u, 4u, "tst:TRICE8 %%4d -> %4d %4d %4d %4d\n" },
- /* TRICE8 ( TRICE8_4 ) */ { 14718u, 8u, 4u, "tst:TRICE8 %%4o -> %4o %4o %4o %4o\n" },
- /* TRICE8 ( TRICE8_4 ) */ { 14717u, 8u, 4u, "tst:TRICE8 %%4u -> %4u %4u %4u %4u\n" },
- /* TRICE8 ( TRICE8_4 ) */ { 14721u, 8u, 4u, "tst:TRICE8 %%4x -> %4x %4x %4x %4x\n" },
- /* TRICE8 ( TRICE8_4 ) */ { 14722u, 8u, 4u, "tst:TRICE8 %%8b -> %8b %8b %8b %8b\n" },
- /* TRICE8 ( TRICE8_9 ) */ { 14845u, 8u, 9u, "tst:TRICE8 %t %b %x %X %d %u %o %O %p\n" },
- /* TRICE8 ( TRICE8_4 ) */ { 14715u, 8u, 4u, "tst:TRICE8 %%03x -> %03x %03x %03x %03x\n" },
- /* TRICE8 ( TRICE8_4 ) */ { 14723u, 8u, 4u, "tst:TRICE8 %%08b -> %08b %08b %08b %08b\n" },
- /* TRICE8 ( TRICE8_12 ) */ { 14831u, 8u, 12u, "tst:TRICE8 %d %d %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE8 ( TRICE8_11 ) */ { 14830u, 8u, 11u, "tst:TRICE8 %d %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE8 ( TRICE8_10 ) */ { 14829u, 8u, 10u, "tst:TRICE8 %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE8 ( TRICE8_9 ) */ { 14828u, 8u, 9u, "tst:TRICE8 %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE8 ( TRICE8_8 ) */ { 14827u, 8u, 8u, "tst:TRICE8 %d %d %d %d %d %d %d %d\n" },
- /* TRICE8 ( TRICE8_7 ) */ { 14826u, 8u, 7u, "tst:TRICE8 %d %d %d %d %d %d %d\n" },
- /* TRICE8 ( TRICE8_6 ) */ { 14825u, 8u, 6u, "tst:TRICE8 %d %d %d %d %d %d\n" },
- /* TRICE8 ( TRICE8_5 ) */ { 14824u, 8u, 5u, "tst:TRICE8 %d %d %d %d %d\n" },
- /* TRICE8 ( TRICE8_4 ) */ { 14823u, 8u, 4u, "tst:TRICE8 %d %d %d %d\n" },
- /* TRICE8 ( TRICE8_3 ) */ { 14822u, 8u, 3u, "tst:TRICE8 %d %d %d\n" },
- /* TRICE8 ( TRICE8_2 ) */ { 14821u, 8u, 2u, "tst:TRICE8 %d %d\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 14820u, 8u, 1u, "tst:TRICE8 %d\n" },
- /* TRICE8 ( TRICE8_9 ) */ { 14832u, 8u, 9u, "tst:TRICE8 %t %b %x %X %d %u %o %O %p\n" },
- /* TRICE8_1 ( TRICE8_1 ) */ { 14833u, 8u, 1u, "tst:TRICE8_1 %d\n" },
- /* TRICE8_8 ( TRICE8_8 ) */ { 14766u, 8u, 8u, "tst:TRICE8_1 %%d=%d, %%u=%u, 0x%%x=0x%x, 0x%%2x=0x%2x, 0x%%02x=0x%02x, 0x%%3x=0x%3x, 0x%%03x=0x%03x, %%b=%b\n" },
- /* TRICE8_1 ( TRICE8_1 ) */ { 14734u, 8u, 1u, "tst:TRICE8_1 %02x\n" },
- /* TRICE8_1 ( TRICE8_1 ) */ { 14742u, 8u, 1u, "tst:TRICE8_1 %d\n" },
- /* TRICE8_1 ( TRICE8_1 ) */ { 14750u, 8u, 1u, "tst:TRICE8_1 %d\n" },
- /* TRICE8_1 ( TRICE8_1 ) */ { 14758u, 8u, 1u, "tst:TRICE8_1 %u\n" },
- /* TRICE8_10 ( TRICE8_10 ) */ { 14842u, 8u, 10u, "tst:TRICE8_10 %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE8_11 ( TRICE8_11 ) */ { 14843u, 8u, 11u, "tst:TRICE8_11 %d %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE8_12 ( TRICE8_12 ) */ { 14844u, 8u, 12u, "tst:TRICE8_12 %d %d %d %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE8_2 ( TRICE8_2 ) */ { 14834u, 8u, 2u, "tst:TRICE8_2 %d %d\n" },
- /* TRICE8_2 ( TRICE8_2 ) */ { 14735u, 8u, 2u, "tst:TRICE8_2 %02x %02x\n" },
- /* TRICE8_2 ( TRICE8_2 ) */ { 14743u, 8u, 2u, "tst:TRICE8_2 %d %d\n" },
- /* TRICE8_2 ( TRICE8_2 ) */ { 14751u, 8u, 2u, "tst:TRICE8_2 %d %d\n" },
- /* TRICE8_2 ( TRICE8_2 ) */ { 14759u, 8u, 2u, "tst:TRICE8_2 %u %u\n" },
- /* TRICE8_3 ( TRICE8_3 ) */ { 14835u, 8u, 3u, "tst:TRICE8_3 %d %d %d\n" },
- /* TRICE8_3 ( TRICE8_3 ) */ { 14736u, 8u, 3u, "tst:TRICE8_3 %02x %02x %02x\n" },
- /* TRICE8_3 ( TRICE8_3 ) */ { 14744u, 8u, 3u, "tst:TRICE8_3 %d %d %d\n" },
- /* TRICE8_3 ( TRICE8_3 ) */ { 14752u, 8u, 3u, "tst:TRICE8_3 %d %d %d\n" },
- /* TRICE8_3 ( TRICE8_3 ) */ { 14760u, 8u, 3u, "tst:TRICE8_3 %u %u %u\n" },
- /* TRICE8_4 ( TRICE8_4 ) */ { 14836u, 8u, 4u, "tst:TRICE8_4 %d %d %d %d\n" },
- /* TRICE8_4 ( TRICE8_4 ) */ { 14737u, 8u, 4u, "tst:TRICE8_4 %02x %02x %02x %02x\n" },
- /* TRICE8_4 ( TRICE8_4 ) */ { 14745u, 8u, 4u, "tst:TRICE8_4 %d %d %d %d\n" },
- /* TRICE8_4 ( TRICE8_4 ) */ { 14753u, 8u, 4u, "tst:TRICE8_4 %d %d %d %d\n" },
- /* TRICE8_4 ( TRICE8_4 ) */ { 14761u, 8u, 4u, "tst:TRICE8_4 %u %u %u %u\n" },
- /* TRICE8_5 ( TRICE8_5 ) */ { 14837u, 8u, 5u, "tst:TRICE8_5 %d %d %d %d %d\n" },
- /* TRICE8_5 ( TRICE8_5 ) */ { 14738u, 8u, 5u, "tst:TRICE8_5 %02x %02x %02x %02x %02x\n" },
- /* TRICE8_5 ( TRICE8_5 ) */ { 14746u, 8u, 5u, "tst:TRICE8_5 %d %d %d %d %d\n" },
- /* TRICE8_5 ( TRICE8_5 ) */ { 14754u, 8u, 5u, "tst:TRICE8_5 %d %d %d %d %d\n" },
- /* TRICE8_5 ( TRICE8_5 ) */ { 14762u, 8u, 5u, "tst:TRICE8_5 %u %u %u %u %u\n" },
- /* TRICE8_6 ( TRICE8_6 ) */ { 14838u, 8u, 6u, "tst:TRICE8_6 %d %d %d %d %d %d\n" },
- /* TRICE8_6 ( TRICE8_6 ) */ { 14739u, 8u, 6u, "tst:TRICE8_6 %02x %02x %02x %02x %02x %02x\n" },
- /* TRICE8_6 ( TRICE8_6 ) */ { 14747u, 8u, 6u, "tst:TRICE8_6 %d %d %d %d %d %d\n" },
- /* TRICE8_6 ( TRICE8_6 ) */ { 14755u, 8u, 6u, "tst:TRICE8_6 %d %d %d %d %d %d\n" },
- /* TRICE8_6 ( TRICE8_6 ) */ { 14763u, 8u, 6u, "tst:TRICE8_6 %u %u %u %u %u %u\n" },
- /* TRICE8_7 ( TRICE8_7 ) */ { 14839u, 8u, 7u, "tst:TRICE8_7 %d %d %d %d %d %d %d\n" },
- /* TRICE8_7 ( TRICE8_7 ) */ { 14740u, 8u, 7u, "tst:TRICE8_7 %02x %02x %02x %02x %02x %02x %02x\n" },
- /* TRICE8_7 ( TRICE8_7 ) */ { 14748u, 8u, 7u, "tst:TRICE8_7 %d %d %d %d %d %d %d\n" },
- /* TRICE8_7 ( TRICE8_7 ) */ { 14756u, 8u, 7u, "tst:TRICE8_7 %d %d %d %d %d %d %d\n" },
- /* TRICE8_7 ( TRICE8_7 ) */ { 14764u, 8u, 7u, "tst:TRICE8_7 %u %u %u %u %u %u %u\n" },
- /* TRICE8_8 ( TRICE8_8 ) */ { 14840u, 8u, 8u, "tst:TRICE8_8 %d %d %d %d %d %d %d %d\n" },
- /* TRICE8_8 ( TRICE8_8 ) */ { 14741u, 8u, 8u, "tst:TRICE8_8 %02X %02X %02X %02X %02x %02x %02x %02x\n" },
- /* TRICE8_8 ( TRICE8_8 ) */ { 14749u, 8u, 8u, "tst:TRICE8_8 %d %d %d %d %d %d %d %d\n" },
- /* TRICE8_8 ( TRICE8_8 ) */ { 14757u, 8u, 8u, "tst:TRICE8_8 %d %d %d %d %d %d %d %d\n" },
- /* TRICE8_8 ( TRICE8_8 ) */ { 14765u, 8u, 8u, "tst:TRICE8_8 %u %u %u %u %u %u %u %u\n" },
- /* TRICE8_9 ( TRICE8_9 ) */ { 14841u, 8u, 9u, "tst:TRICE8_9 %d %d %d %d %d %d %d %d %d\n" },
- /* TRICE8_9 ( TRICE8_9 ) */ { 14846u, 8u, 9u, "tst:TRICE8_9 %t %b %x %X %d %u %o %O %p\n" },
- /* TRice ( TRice32_1 ) */ { 13423u, 32u, 1u, "value=%d\n" },
- /* Trice ( Trice32_1 ) */ { 13424u, 32u, 1u, "value=%d\n" },
- /* trice ( trice32_1 ) */ { 13425u, 32u, 1u, "value=%d\n" },
- /* TRice8 ( TRice8_1 ) */ { 13426u, 8u, 1u, "value=%d\n" },
- /* Trice8 ( Trice8_1 ) */ { 13427u, 8u, 1u, "value=%d\n" },
- /* trice8 ( trice8_1 ) */ { 13428u, 8u, 1u, "value=%d\n" },
- /* TRice16 ( TRice16_1 ) */ { 13429u, 16u, 1u, "value=%d\n" },
- /* Trice16 ( Trice16_1 ) */ { 13430u, 16u, 1u, "value=%d\n" },
- /* trice16 ( trice16_1 ) */ { 13431u, 16u, 1u, "value=%d\n" },
- /* TRice32 ( TRice32_1 ) */ { 13432u, 32u, 1u, "value=%d\n" },
- /* Trice32 ( Trice32_1 ) */ { 13433u, 32u, 1u, "value=%d\n" },
- /* trice32 ( trice32_1 ) */ { 13434u, 32u, 1u, "value=%d\n" },
- /* TRice64 ( TRice64_1 ) */ { 13435u, 64u, 1u, "value=%d\n" },
- /* Trice64 ( Trice64_1 ) */ { 13436u, 64u, 1u, "value=%d\n" },
- /* trice64 ( trice64_1 ) */ { 13437u, 64u, 1u, "value=%d\n" },
- /* TRice_1 ( TRice32_1 ) */ { 13438u, 32u, 1u, "value=%d\n" },
- /* Trice_1 ( Trice32_1 ) */ { 13439u, 32u, 1u, "value=%d\n" },
- /* trice_1 ( trice32_1 ) */ { 13440u, 32u, 1u, "value=%d\n" },
- /* TRice8_1 ( TRice8_1 ) */ { 13441u, 8u, 1u, "value=%d\n" },
- /* Trice8_1 ( Trice8_1 ) */ { 13442u, 8u, 1u, "value=%d\n" },
- /* trice8_1 ( trice8_1 ) */ { 13443u, 8u, 1u, "value=%d\n" },
- /* TRice16_1 ( TRice16_1 ) */ { 13444u, 16u, 1u, "value=%d\n" },
- /* Trice16_1 ( Trice16_1 ) */ { 13445u, 16u, 1u, "value=%d\n" },
- /* trice16_1 ( trice16_1 ) */ { 13446u, 16u, 1u, "value=%d\n" },
- /* TRice32_1 ( TRice32_1 ) */ { 13447u, 32u, 1u, "value=%d\n" },
- /* Trice32_1 ( Trice32_1 ) */ { 13448u, 32u, 1u, "value=%d\n" },
- /* trice32_1 ( trice32_1 ) */ { 13449u, 32u, 1u, "value=%d\n" },
- /* TRice64_1 ( TRice64_1 ) */ { 13450u, 64u, 1u, "value=%d\n" },
- /* Trice64_1 ( Trice64_1 ) */ { 13451u, 64u, 1u, "value=%d\n" },
- /* trice64_1 ( trice64_1 ) */ { 13452u, 64u, 1u, "value=%d\n" },
- /* trice8 ( trice8_1 ) */ { 13648u, 8u, 1u, "value=%d\n" },
- /* Trice8 ( Trice8_1 ) */ { 13649u, 8u, 1u, "value=%d\n" },
- /* TRice8 ( TRice8_1 ) */ { 13650u, 8u, 1u, "value=%d\n" },
- /* trice8_1 ( trice8_1 ) */ { 13651u, 8u, 1u, "value=%d\n" },
- /* Trice8_1 ( Trice8_1 ) */ { 13652u, 8u, 1u, "value=%d\n" },
- /* TRice8_1 ( TRice8_1 ) */ { 13653u, 8u, 1u, "value=%d\n" },
- /* trice16 ( trice16_1 ) */ { 13654u, 16u, 1u, "value=%d\n" },
- /* Trice16 ( Trice16_1 ) */ { 13655u, 16u, 1u, "value=%d\n" },
- /* TRice16 ( TRice16_1 ) */ { 13656u, 16u, 1u, "value=%d\n" },
- /* trice16_1 ( trice16_1 ) */ { 13657u, 16u, 1u, "value=%d\n" },
- /* Trice16_1 ( Trice16_1 ) */ { 13658u, 16u, 1u, "value=%d\n" },
- /* TRice16_1 ( TRice16_1 ) */ { 13659u, 16u, 1u, "value=%d\n" },
- /* trice32 ( trice32_1 ) */ { 13660u, 32u, 1u, "value=%d\n" },
- /* Trice32 ( Trice32_1 ) */ { 13661u, 32u, 1u, "value=%d\n" },
- /* TRice32 ( TRice32_1 ) */ { 13662u, 32u, 1u, "value=%d\n" },
- /* trice32_1 ( trice32_1 ) */ { 13663u, 32u, 1u, "value=%d\n" },
- /* Trice32_1 ( Trice32_1 ) */ { 13664u, 32u, 1u, "value=%d\n" },
- /* TRice32_1 ( TRice32_1 ) */ { 13665u, 32u, 1u, "value=%d\n" },
- /* trice64 ( trice64_1 ) */ { 13666u, 64u, 1u, "value=%d\n" },
- /* Trice64 ( Trice64_1 ) */ { 13667u, 64u, 1u, "value=%d\n" },
- /* TRice64 ( TRice64_1 ) */ { 13668u, 64u, 1u, "value=%d\n" },
- /* trice64_1 ( trice64_1 ) */ { 13669u, 64u, 1u, "value=%d\n" },
- /* Trice64_1 ( Trice64_1 ) */ { 13670u, 64u, 1u, "value=%d\n" },
- /* TRice64_1 ( TRice64_1 ) */ { 13671u, 64u, 1u, "value=%d\n" },
- /* TRICE ( TRICE32_1 ) */ { 13672u, 32u, 1u, "value=%d\n" },
- /* TRICE ( TRICE32_1 ) */ { 13673u, 32u, 1u, "value=%d\n" },
- /* TRICE ( TRICE32_1 ) */ { 13674u, 32u, 1u, "value=%d\n" },
- /* TRICE ( TRICE32_1 ) */ { 13675u, 32u, 1u, "value=%d\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 13676u, 8u, 1u, "value=%d\n" },
- /* TRICE8_1 ( TRICE8_1 ) */ { 13677u, 8u, 1u, "value=%d\n" },
- /* trice8 ( trice8_1 ) */ { 13678u, 8u, 1u, "value=%d\n" },
- /* trice8_1 ( trice8_1 ) */ { 13679u, 8u, 1u, "value=%d\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 13680u, 8u, 1u, "value=%d\n" },
- /* TRICE8_1 ( TRICE8_1 ) */ { 13681u, 8u, 1u, "value=%d\n" },
- /* Trice8 ( Trice8_1 ) */ { 13682u, 8u, 1u, "value=%d\n" },
- /* Trice8_1 ( Trice8_1 ) */ { 13683u, 8u, 1u, "value=%d\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 13684u, 8u, 1u, "value=%d\n" },
- /* TRICE8_1 ( TRICE8_1 ) */ { 13685u, 8u, 1u, "value=%d\n" },
- /* TRice8 ( TRice8_1 ) */ { 13686u, 8u, 1u, "value=%d\n" },
- /* TRice8_1 ( TRice8_1 ) */ { 13687u, 8u, 1u, "value=%d\n" },
- /* TRICE8 ( TRICE8_1 ) */ { 13688u, 8u, 1u, "value=%d\n" },
- /* TRICE8_1 ( TRICE8_1 ) */ { 13689u, 8u, 1u, "value=%d\n" },
- /* trice8 ( trice8_1 ) */ { 13242u, 8u, 1u, "value=%x\n" },
- /* trice8 ( trice8_1 ) */ { 13243u, 8u, 1u, "value=%x\n" },
- /* TRICE ( TRICE_0 ) */ { 13739u, 32u, 0u, "verbose:blue:default\n" },
- /* trice ( trice_0 ) */ { 13789u, 32u, 0u, "verbose:blue:default\n" },
- /* TRICE ( TRICE_0 ) */ { 13839u, 32u, 0u, "verbose:blue:default\n" },
- /* Trice ( Trice_0 ) */ { 13889u, 32u, 0u, "verbose:blue:default\n" },
- /* TRICE ( TRICE_0 ) */ { 13939u, 32u, 0u, "verbose:blue:default\n" },
- /* TRice ( TRice_0 ) */ { 13989u, 32u, 0u, "verbose:blue:default\n" },
- /* TRICE ( TRICE_0 ) */ { 15154u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE ( TRICE_0 ) */ { 15155u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE ( TRICE_0 ) */ { 15156u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE ( TRICE_0 ) */ { 15157u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* trice ( trice_0 ) */ { 15158u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* Trice ( Trice_0 ) */ { 15159u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRice ( TRice_0 ) */ { 15160u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE_0 ( TRICE_0 ) */ { 15161u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE_0 ( TRICE_0 ) */ { 15162u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE_0 ( TRICE_0 ) */ { 15163u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE_0 ( TRICE_0 ) */ { 15164u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* trice_0 ( trice_0 ) */ { 15165u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* Trice_0 ( Trice_0 ) */ { 15166u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRice_0 ( TRice_0 ) */ { 15167u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE0 ( TRICE_0 ) */ { 15168u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE0 ( TRICE_0 ) */ { 15169u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE0 ( TRICE_0 ) */ { 15170u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE0 ( TRICE_0 ) */ { 15171u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* trice0 ( trice_0 ) */ { 15172u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* Trice0 ( Trice_0 ) */ { 15173u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRice0 ( TRice_0 ) */ { 15174u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE_0 ( TRICE_0 ) */ { 15175u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE_0 ( TRICE_0 ) */ { 15176u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE_0 ( TRICE_0 ) */ { 15177u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE_0 ( TRICE_0 ) */ { 15178u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* trice_0 ( trice_0 ) */ { 15179u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* Trice_0 ( Trice_0 ) */ { 15180u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRice_0 ( TRice_0 ) */ { 15181u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE8 ( TRICE_0 ) */ { 15182u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE8 ( TRICE_0 ) */ { 15183u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE8 ( TRICE_0 ) */ { 15184u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE8 ( TRICE_0 ) */ { 15185u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* trice8 ( trice_0 ) */ { 15186u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* Trice8 ( Trice_0 ) */ { 15187u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRice8 ( TRice_0 ) */ { 15188u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE8_0 ( TRICE_0 ) */ { 15189u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE8_0 ( TRICE_0 ) */ { 15190u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE8_0 ( TRICE_0 ) */ { 15191u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE8_0 ( TRICE_0 ) */ { 15192u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* trice8_0 ( trice_0 ) */ { 15193u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* Trice8_0 ( Trice_0 ) */ { 15194u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRice8_0 ( TRice_0 ) */ { 15195u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* trice16 ( trice_0 ) */ { 15196u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* trice16 ( trice_0 ) */ { 15197u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* trice16 ( trice_0 ) */ { 15198u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* trice16 ( trice_0 ) */ { 15199u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* trice16 ( trice_0 ) */ { 15200u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* Trice16 ( Trice_0 ) */ { 15201u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRice16 ( TRice_0 ) */ { 15202u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE16_0 ( TRICE_0 ) */ { 15203u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE16_0 ( TRICE_0 ) */ { 15204u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE16_0 ( TRICE_0 ) */ { 15205u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE16_0 ( TRICE_0 ) */ { 15206u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* trice16_0 ( trice_0 ) */ { 15207u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* Trice16_0 ( Trice_0 ) */ { 15208u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRice16_0 ( TRice_0 ) */ { 15209u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE32 ( TRICE_0 ) */ { 15210u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE32 ( TRICE_0 ) */ { 15211u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE32 ( TRICE_0 ) */ { 15212u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE32 ( TRICE_0 ) */ { 15213u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* trice32 ( trice_0 ) */ { 15214u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* Trice32 ( Trice_0 ) */ { 15215u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRice32 ( TRice_0 ) */ { 15216u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE32_0 ( TRICE_0 ) */ { 15217u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE32_0 ( TRICE_0 ) */ { 15218u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE32_0 ( TRICE_0 ) */ { 15219u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE32_0 ( TRICE_0 ) */ { 15220u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* trice32_0 ( trice_0 ) */ { 15221u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* Trice32_0 ( Trice_0 ) */ { 15222u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRice32_0 ( TRice_0 ) */ { 15223u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE64 ( TRICE_0 ) */ { 15224u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE64 ( TRICE_0 ) */ { 15225u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE64 ( TRICE_0 ) */ { 15226u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE64 ( TRICE_0 ) */ { 15227u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* trice64 ( trice_0 ) */ { 15228u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* Trice64 ( Trice_0 ) */ { 15229u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRice64 ( TRice_0 ) */ { 15230u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE64_0 ( TRICE_0 ) */ { 15231u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE64_0 ( TRICE_0 ) */ { 15232u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE64_0 ( TRICE_0 ) */ { 15233u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRICE64_0 ( TRICE_0 ) */ { 15234u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* trice64_0 ( trice_0 ) */ { 15235u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* Trice64_0 ( Trice_0 ) */ { 15236u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* TRice64_0 ( TRice_0 ) */ { 15237u, 32u, 0u, "w: Hello! 👋🙂 \a\n" },
- /* triceS ( triceS ) */ { 16369u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "w: Hello! 👋🙂 \n\n ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ \n 🎈🎈🎈🎈%s🎈🎈🎈🎈\n 🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃 \n\n\n" },
- /* trice ( trice_0 ) */ { 14796u, 32u, 0u, "w:B" },
- /* trice ( trice_0 ) */ { 14814u, 32u, 0u, "w:B" },
- /* TRICE ( TRICE_0 ) */ { 13719u, 32u, 0u, "warning:11+i:red\n" },
- /* trice ( trice_0 ) */ { 13769u, 32u, 0u, "warning:11+i:red\n" },
- /* TRICE ( TRICE_0 ) */ { 13819u, 32u, 0u, "warning:11+i:red\n" },
- /* Trice ( Trice_0 ) */ { 13869u, 32u, 0u, "warning:11+i:red\n" },
- /* TRICE ( TRICE_0 ) */ { 13919u, 32u, 0u, "warning:11+i:red\n" },
- /* TRice ( TRice_0 ) */ { 13969u, 32u, 0u, "warning:11+i:red\n" },
- /* TRICE_N ( TRICE_N ) */ { 15256u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:%s\n" },
- /* trice ( trice_0 ) */ { 13034u, 32u, 0u, "wr:X0 after 1\n" },
- /* trice ( trice_0 ) */ { 13035u, 32u, 0u, "wr:X0 before 2\n" },
- /* trice ( trice_0 ) */ { 13045u, 32u, 0u, "wr:X0 tail\n" },
- /* trice8B ( trice8B ) */ { 13038u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-B: %02x\n" },
- /* trice8B ( trice8B ) */ { 13039u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-B: %02x\n" },
- /* trice8B ( trice8B ) */ { 13044u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-B: %02x\n" },
- /* triceS ( triceS ) */ { 13036u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-S:%s\n" },
- /* triceS ( triceS ) */ { 13037u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-S:%s\n" },
- /* triceS ( triceS ) */ { 13043u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-S:%s\n" },
- /* TRice8B ( TRice8B ) */ { 13041u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-TRiceB: %02x\n" },
- /* Trice8B ( Trice8B ) */ { 13042u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-TriceB: %02x\n" },
- /* TriceS ( TriceS ) */ { 13040u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-TriceS:%s\n" },
- /* trice ( trice_0 ) */ { 14798u, 32u, 0u, "wr:d" },
- /* trice ( trice_0 ) */ { 14816u, 32u, 0u, "wr:d" },
- /* TRICE ( TRICE_0 ) */ { 13727u, 32u, 0u, "write:black+u:yellow+h\n" },
- /* trice ( trice_0 ) */ { 13777u, 32u, 0u, "write:black+u:yellow+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13827u, 32u, 0u, "write:black+u:yellow+h\n" },
- /* Trice ( Trice_0 ) */ { 13877u, 32u, 0u, "write:black+u:yellow+h\n" },
- /* TRICE ( TRICE_0 ) */ { 13927u, 32u, 0u, "write:black+u:yellow+h\n" },
- /* TRice ( TRice_0 ) */ { 13977u, 32u, 0u, "write:black+u:yellow+h\n" },
- /* trice16 ( trice16_1 ) */ { 16374u, 16u, 1u, "wrn:TriceDynStringBufTruncateCount = %u\n" },
+ /* Trice type ( extended ) */ /* id, bitWidth, paramCount, format-string */
+ /* TRICE8_B ( TRICE8B ) */ {13271u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02x\n"},
+ /* TRICE8_B ( TRICE8B ) */ {13274u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02x\n"},
+ /* TRICE16_B ( TRICE16B ) */ {13281u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %04x\n"},
+ /* TRICE64_B ( TRICE64B ) */ {13291u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %016x\n"},
+ /* TRice64B ( TRice64B ) */ {13292u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %016x\n"},
+ /* Trice64B ( Trice64B ) */ {13293u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %016x\n"},
+ /* trice64B ( trice64B ) */ {13294u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %016x\n"},
+ /* trice8B ( trice8B ) */ {13277u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02llx\n"},
+ /* Trice8B ( Trice8B ) */ {13276u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02lx\n"},
+ /* TRICE8_B ( TRICE8B ) */ {15243u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02x "},
+ /* TRICE8_B ( TRICE8B ) */ {15246u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02x "},
+ /* TRICE8_B ( TRICE8B ) */ {15249u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02x "},
+ /* trice8B ( trice8B ) */ {13280u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02x\n"},
+ /* TRice8B ( TRice8B ) */ {13275u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %02zx\n"},
+ /* TRice16B ( TRice16B ) */ {13282u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %04x\n"},
+ /* Trice16B ( Trice16B ) */ {13283u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %04x\n"},
+ /* trice16B ( trice16B ) */ {13284u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %04x\n"},
+ /* TRICE32_B ( TRICE32B ) */ {13286u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %08x\n"},
+ /* TRice32B ( TRice32B ) */ {13287u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %08x\n"},
+ /* Trice32B ( Trice32B ) */ {13288u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %08x\n"},
+ /* trice32B ( trice32B ) */ {13289u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, " %08x\n"},
+ /* TRICE ( TRICE32_1 ) */ {15239u, 32u, 1u, " = %d\n"},
+ /* TRICE ( TRICE32_1 ) */ {15241u, 32u, 1u, " = %d\n"},
+ /* TRice8B ( TRice8B ) */ {15285u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "%3x\n"},
+ /* TRice8B ( TRice8B ) */ {15286u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "%3x\n"},
+ /* TRICE8_B ( TRICE8B ) */ {13273u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "%4ld\n"},
+ /* trice ( trice_0 ) */ {13165u, 32u, 0u, "--------------------------------------------------\n"},
+ /* trice ( trice_0 ) */ {13173u, 32u, 0u, "--------------------------------------------------\n"},
+ /* TRICE ( TRICE_0 ) */ {14695u, 32u, 0u, "--------------------------------------------------\n"},
+ /* TRICE ( TRICE_0 ) */ {14696u, 32u, 0u, "--------------------------------------------------\n"},
+ /* TRICE ( TRICE_0 ) */ {14698u, 32u, 0u, "--------------------------------------------------\n"},
+ /* TRICE ( TRICE_0 ) */ {14700u, 32u, 0u, "--------------------------------------------------\n"},
+ /* trice ( trice_0 ) */ {14806u, 32u, 0u, "1"},
+ /* trice ( trice_0 ) */ {14807u, 32u, 0u, "2"},
+ /* trice ( trice_0 ) */ {14808u, 32u, 0u, "3"},
+ /* trice ( trice_0 ) */ {14809u, 32u, 0u, "4"},
+ /* trice ( trice32_4 ) */ {15278u, 32u, 4u, "A user printi call with integer and float values: %u, %d, %x, %2.1f\n"},
+ /* trice ( trice_0 ) */ {15276u, 32u, 0u, "A user printi call without values.\n"},
+ /* TRICE ( TRICE_0 ) */ {13713u, 32u, 0u, "ALARM:red+i:white+h\n"},
+ /* trice ( trice_0 ) */ {13763u, 32u, 0u, "ALARM:red+i:white+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13813u, 32u, 0u, "ALARM:red+i:white+h\n"},
+ /* Trice ( Trice_0 ) */ {13863u, 32u, 0u, "ALARM:red+i:white+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13913u, 32u, 0u, "ALARM:red+i:white+h\n"},
+ /* TRice ( TRice_0 ) */ {13963u, 32u, 0u, "ALARM:red+i:white+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13711u, 32u, 0u, "ALERT:magenta:magenta+h\n"},
+ /* trice ( trice_0 ) */ {13761u, 32u, 0u, "ALERT:magenta:magenta+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13811u, 32u, 0u, "ALERT:magenta:magenta+h\n"},
+ /* Trice ( Trice_0 ) */ {13861u, 32u, 0u, "ALERT:magenta:magenta+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13911u, 32u, 0u, "ALERT:magenta:magenta+h\n"},
+ /* TRice ( TRice_0 ) */ {13961u, 32u, 0u, "ALERT:magenta:magenta+h\n"},
+ /* triceAssertFalse ( ) */ {13052u, 32u, 0u, "ASSERT:flag not false!\n"},
+ /* TriceAssertFalse ( ) */ {13053u, 32u, 0u, "ASSERT:flag not false!\n"},
+ /* TRiceAssertFalse ( ) */ {13054u, 32u, 0u, "ASSERT:flag not false!\n"},
+ /* triceAssertFalse ( ) */ {13067u, 32u, 0u, "ASSERT:flag not false!\n"},
+ /* TriceAssertFalse ( ) */ {13069u, 32u, 0u, "ASSERT:flag not false!\n"},
+ /* TRiceAssertFalse ( ) */ {13071u, 32u, 0u, "ASSERT:flag not false!\n"},
+ /* triceAssertTrue ( ) */ {13046u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* TriceAssertTrue ( ) */ {13047u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* TRiceAssertTrue ( ) */ {13048u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* triceAssert ( ) */ {13049u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* TriceAssert ( ) */ {13050u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* TRiceAssert ( ) */ {13051u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* triceAssertTrue ( ) */ {13055u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* TriceAssertTrue ( ) */ {13057u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* TRiceAssertTrue ( ) */ {13059u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* triceAssert ( ) */ {13061u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* TriceAssert ( ) */ {13063u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* TRiceAssert ( ) */ {13065u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* triceAssertOrReturn ( ) */ {13073u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* TriceAssertOrReturn ( ) */ {13075u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* TRiceAssertOrReturn ( ) */ {13077u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* triceAssertOrReturnValue ( ) */ {15257u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* TriceAssertOrReturnValue ( ) */ {15258u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* TRiceAssertOrReturnValue ( ) */ {15259u, 32u, 0u, "ASSERT:flag not true!\n"},
+ /* TRICE ( TRICE_0 ) */ {13712u, 32u, 0u, "ASSERT:yellow+i:blue\n"},
+ /* trice ( trice_0 ) */ {13762u, 32u, 0u, "ASSERT:yellow+i:blue\n"},
+ /* TRICE ( TRICE_0 ) */ {13812u, 32u, 0u, "ASSERT:yellow+i:blue\n"},
+ /* Trice ( Trice_0 ) */ {13862u, 32u, 0u, "ASSERT:yellow+i:blue\n"},
+ /* TRICE ( TRICE_0 ) */ {13912u, 32u, 0u, "ASSERT:yellow+i:blue\n"},
+ /* TRice ( TRice_0 ) */ {13962u, 32u, 0u, "ASSERT:yellow+i:blue\n"},
+ /* TRICE ( TRICE32_1 ) */ {14703u, 32u, 1u, "ATT:attention message, SysTick is %6u\n"},
+ /* TRICE ( TRICE_0 ) */ {13695u, 32u, 0u, "ATTENTION:11:green\n"},
+ /* trice ( trice_0 ) */ {13745u, 32u, 0u, "ATTENTION:11:green\n"},
+ /* TRICE ( TRICE_0 ) */ {13795u, 32u, 0u, "ATTENTION:11:green\n"},
+ /* Trice ( Trice_0 ) */ {13845u, 32u, 0u, "ATTENTION:11:green\n"},
+ /* TRICE ( TRICE_0 ) */ {13895u, 32u, 0u, "ATTENTION:11:green\n"},
+ /* TRice ( TRice_0 ) */ {13945u, 32u, 0u, "ATTENTION:11:green\n"},
+ /* TRICE8_B ( TRICE8B ) */ {13272u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "BUF: %02x\n"},
+ /* TRICE ( TRICE_0 ) */ {13691u, 32u, 0u, "CRITICAL:red+i:default+h\n"},
+ /* trice ( trice_0 ) */ {13741u, 32u, 0u, "CRITICAL:red+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13791u, 32u, 0u, "CRITICAL:red+i:default+h\n"},
+ /* Trice ( Trice_0 ) */ {13841u, 32u, 0u, "CRITICAL:red+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13891u, 32u, 0u, "CRITICAL:red+i:default+h\n"},
+ /* TRice ( TRice_0 ) */ {13941u, 32u, 0u, "CRITICAL:red+i:default+h\n"},
+ /* trice ( trice32_1 ) */ {13003u, 32u, 1u, "CUSTOM_PRINT example: the right answer is: %d\n"},
+ /* trice ( trice32_1 ) */ {15261u, 32u, 1u, "CUSTOM_PRINT example: the right answer is: %d\n"},
+ /* TRICE ( TRICE32_1 ) */ {14706u, 32u, 1u, "DBG:debug message, SysTick is %6u\n"},
+ /* TRICE ( TRICE_0 ) */ {13697u, 32u, 0u, "DEBUG:130+i\n"},
+ /* trice ( trice_0 ) */ {13747u, 32u, 0u, "DEBUG:130+i\n"},
+ /* TRICE ( TRICE_0 ) */ {13797u, 32u, 0u, "DEBUG:130+i\n"},
+ /* Trice ( Trice_0 ) */ {13847u, 32u, 0u, "DEBUG:130+i\n"},
+ /* TRICE ( TRICE_0 ) */ {13897u, 32u, 0u, "DEBUG:130+i\n"},
+ /* TRice ( TRice_0 ) */ {13947u, 32u, 0u, "DEBUG:130+i\n"},
+ /* TRICE ( TRICE_0 ) */ {13709u, 32u, 0u, "DEFAULT:off\n"},
+ /* trice ( trice_0 ) */ {13759u, 32u, 0u, "DEFAULT:off\n"},
+ /* TRICE ( TRICE_0 ) */ {13809u, 32u, 0u, "DEFAULT:off\n"},
+ /* Trice ( Trice_0 ) */ {13859u, 32u, 0u, "DEFAULT:off\n"},
+ /* TRICE ( TRICE_0 ) */ {13909u, 32u, 0u, "DEFAULT:off\n"},
+ /* TRice ( TRice_0 ) */ {13959u, 32u, 0u, "DEFAULT:off\n"},
+ /* TRICE ( TRICE32_1 ) */ {14704u, 32u, 1u, "DIA:diagnostics message, SysTick is %6u\n"},
+ /* TRICE ( TRICE_0 ) */ {13705u, 32u, 0u, "DIAG:yellow+i:default+h\n"},
+ /* trice ( trice_0 ) */ {13755u, 32u, 0u, "DIAG:yellow+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13805u, 32u, 0u, "DIAG:yellow+i:default+h\n"},
+ /* Trice ( Trice_0 ) */ {13855u, 32u, 0u, "DIAG:yellow+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13905u, 32u, 0u, "DIAG:yellow+i:default+h\n"},
+ /* TRice ( TRice_0 ) */ {13955u, 32u, 0u, "DIAG:yellow+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13692u, 32u, 0u, "EMERGENCY:red+i:blue\n"},
+ /* trice ( trice_0 ) */ {13742u, 32u, 0u, "EMERGENCY:red+i:blue\n"},
+ /* TRICE ( TRICE_0 ) */ {13792u, 32u, 0u, "EMERGENCY:red+i:blue\n"},
+ /* Trice ( Trice_0 ) */ {13842u, 32u, 0u, "EMERGENCY:red+i:blue\n"},
+ /* TRICE ( TRICE_0 ) */ {13892u, 32u, 0u, "EMERGENCY:red+i:blue\n"},
+ /* TRice ( TRice_0 ) */ {13942u, 32u, 0u, "EMERGENCY:red+i:blue\n"},
+ /* TRICE ( TRICE32_1 ) */ {14701u, 32u, 1u, "ERR:error message, SysTick is %6u\n"},
+ /* TRICE ( TRICE_0 ) */ {13693u, 32u, 0u, "ERROR:11:red\n"},
+ /* trice ( trice_0 ) */ {13743u, 32u, 0u, "ERROR:11:red\n"},
+ /* TRICE ( TRICE_0 ) */ {13793u, 32u, 0u, "ERROR:11:red\n"},
+ /* Trice ( Trice_0 ) */ {13843u, 32u, 0u, "ERROR:11:red\n"},
+ /* TRICE ( TRICE_0 ) */ {13893u, 32u, 0u, "ERROR:11:red\n"},
+ /* TRice ( TRice_0 ) */ {13943u, 32u, 0u, "ERROR:11:red\n"},
+ /* TRICE ( TRICE_0 ) */ {13690u, 32u, 0u, "FATAL:magenta+b:red\n"},
+ /* trice ( trice_0 ) */ {13740u, 32u, 0u, "FATAL:magenta+b:red\n"},
+ /* TRICE ( TRICE_0 ) */ {13790u, 32u, 0u, "FATAL:magenta+b:red\n"},
+ /* Trice ( Trice_0 ) */ {13840u, 32u, 0u, "FATAL:magenta+b:red\n"},
+ /* TRICE ( TRICE_0 ) */ {13890u, 32u, 0u, "FATAL:magenta+b:red\n"},
+ /* TRice ( TRice_0 ) */ {13940u, 32u, 0u, "FATAL:magenta+b:red\n"},
+ /* trice ( trice32_1 ) */ {13002u, 32u, 1u, "Fun %x!\n"},
+ /* TRice ( TRice_0 ) */ {15281u, 32u, 0u, "Hello "},
+ /* TRice ( TRice_0 ) */ {15287u, 32u, 0u, "Hello "},
+ /* TRice ( TRice_0 ) */ {13030u, 32u, 0u, "Hello World!\n"},
+ /* TRice ( TRice_0 ) */ {15260u, 32u, 0u, "Hello World!\n"},
+ /* TRice ( TRice_0 ) */ {15262u, 32u, 0u, "Hello World!\n"},
+ /* TRice ( TRice_0 ) */ {15291u, 32u, 0u, "Hello World!\n"},
+ /* TRice ( TRice_0 ) */ {15308u, 32u, 0u, "Hello World!\n"},
+ /* trice ( trice_0 ) */ {15284u, 32u, 0u, "Hello again\n"},
+ /* trice ( trice_0 ) */ {15290u, 32u, 0u, "Hello again\n"},
+ /* TRICE ( TRICE_0 ) */ {13696u, 32u, 0u, "INFO:cyan+b:default+h\n"},
+ /* trice ( trice_0 ) */ {13746u, 32u, 0u, "INFO:cyan+b:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13796u, 32u, 0u, "INFO:cyan+b:default+h\n"},
+ /* Trice ( Trice_0 ) */ {13846u, 32u, 0u, "INFO:cyan+b:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13896u, 32u, 0u, "INFO:cyan+b:default+h\n"},
+ /* TRice ( TRice_0 ) */ {13946u, 32u, 0u, "INFO:cyan+b:default+h\n"},
+ /* TRICE ( TRICE32_1 ) */ {14712u, 32u, 1u, "INFO:informal message, SysTick is %6u\n"},
+ /* TRICE ( TRICE_0 ) */ {13706u, 32u, 0u, "INTERRUPT:magenta+i:default+h\n"},
+ /* trice ( trice_0 ) */ {13756u, 32u, 0u, "INTERRUPT:magenta+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13806u, 32u, 0u, "INTERRUPT:magenta+i:default+h\n"},
+ /* Trice ( Trice_0 ) */ {13856u, 32u, 0u, "INTERRUPT:magenta+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13906u, 32u, 0u, "INTERRUPT:magenta+i:default+h\n"},
+ /* TRice ( TRice_0 ) */ {13956u, 32u, 0u, "INTERRUPT:magenta+i:default+h\n"},
+ /* TRICE ( TRICE32_1 ) */ {14710u, 32u, 1u, "ISR:interrupt message, SysTick is %6u\n"},
+ /* TRICE ( TRICE_0 ) */ {13700u, 32u, 0u, "MESSAGE:green+h:black\n"},
+ /* trice ( trice_0 ) */ {13750u, 32u, 0u, "MESSAGE:green+h:black\n"},
+ /* TRICE ( TRICE_0 ) */ {13800u, 32u, 0u, "MESSAGE:green+h:black\n"},
+ /* Trice ( Trice_0 ) */ {13850u, 32u, 0u, "MESSAGE:green+h:black\n"},
+ /* TRICE ( TRICE_0 ) */ {13900u, 32u, 0u, "MESSAGE:green+h:black\n"},
+ /* TRice ( TRice_0 ) */ {13950u, 32u, 0u, "MESSAGE:green+h:black\n"},
+ /* TRICE ( TRICE32_1 ) */ {13331u, 32u, 1u, "MSG:1/11 = %g\n"},
+ /* TRICE ( TRICE32_1 ) */ {14711u, 32u, 1u, "MSG:normal message, SysTick is %6u\n"},
+ /* TRICE ( TRICE_0 ) */ {13710u, 32u, 0u, "NOTICE:blue:white+h\n"},
+ /* trice ( trice_0 ) */ {13760u, 32u, 0u, "NOTICE:blue:white+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13810u, 32u, 0u, "NOTICE:blue:white+h\n"},
+ /* Trice ( Trice_0 ) */ {13860u, 32u, 0u, "NOTICE:blue:white+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13910u, 32u, 0u, "NOTICE:blue:white+h\n"},
+ /* TRice ( TRice_0 ) */ {13960u, 32u, 0u, "NOTICE:blue:white+h\n"},
+ /* TRICE ( TRICE32_1 ) */ {14708u, 32u, 1u, "RD:read message, SysTick is %6u\n"},
+ /* TRICE ( TRICE_0 ) */ {13701u, 32u, 0u, "READ:black+i:yellow+h\n"},
+ /* trice ( trice_0 ) */ {13751u, 32u, 0u, "READ:black+i:yellow+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13801u, 32u, 0u, "READ:black+i:yellow+h\n"},
+ /* Trice ( Trice_0 ) */ {13851u, 32u, 0u, "READ:black+i:yellow+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13901u, 32u, 0u, "READ:black+i:yellow+h\n"},
+ /* TRice ( TRice_0 ) */ {13951u, 32u, 0u, "READ:black+i:yellow+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13703u, 32u, 0u, "RECEIVE:black+h:black\n"},
+ /* trice ( trice_0 ) */ {13753u, 32u, 0u, "RECEIVE:black+h:black\n"},
+ /* TRICE ( TRICE_0 ) */ {13803u, 32u, 0u, "RECEIVE:black+h:black\n"},
+ /* Trice ( Trice_0 ) */ {13853u, 32u, 0u, "RECEIVE:black+h:black\n"},
+ /* TRICE ( TRICE_0 ) */ {13903u, 32u, 0u, "RECEIVE:black+h:black\n"},
+ /* TRice ( TRice_0 ) */ {13953u, 32u, 0u, "RECEIVE:black+h:black\n"},
+ /* Trice64F ( Trice64F ) */ {13310u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZc"},
+ /* Trice64F ( Trice64F ) */ {15306u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZc"},
+ /* Trice64C ( Trice64C ) */ {15779u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZc"},
+ /* trice64F ( trice64F ) */ {13311u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZd"},
+ /* trice64C ( trice64C ) */ {15312u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZd"},
+ /* trice64C ( trice64C ) */ {15313u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZd"},
+ /* trice64C ( trice64C ) */ {15314u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZd"},
+ /* trice64C ( trice64C ) */ {16110u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZd"},
+ /* trice64C ( trice64C ) */ {16155u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "RPC:FunctionNameZd"},
+ /* trice64F ( trice64F ) */ {15307u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "Rpc:FunctionNameZd"},
+ /* triceS ( triceS ) */ {15280u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"A user ... with string, integer and float values: %u, %d, %x, %2.1f, %s and %s\n\"')SAlias_Strg"},
+ /* triceS ( triceS ) */ {15279u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"A user prints call with integer and float values: %u, %d, %x, %2.1f\n\"')SAlias_Strg"},
+ /* triceS ( triceS ) */ {15277u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"A user prints call without values.\n\"')SAlias_Strg"},
+ /* triceS ( triceS ) */ {15274u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s....\n\"')SAlias_Strg"},
+ /* triceS ( triceS ) */ {15273u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s...\n\"')SAlias_Strg"},
+ /* triceS ( triceS ) */ {15271u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s..\n\"')SAlias_Strg"},
+ /* triceS ( triceS ) */ {15264u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s.\n\"')SAlias_Strg"},
+ /* triceS ( triceS ) */ {15265u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s.\n\"')SAlias_Strg"},
+ /* triceS ( triceS ) */ {15266u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s.\n\"')SAlias_Strg"},
+ /* triceS ( triceS ) */ {15267u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s.\n\"')SAlias_Strg"},
+ /* triceS ( triceS ) */ {15269u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s.\n\"')SAlias_Strg"},
+ /* triceS ( triceS ) */ {15270u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:%s.\n\"')SAlias_Strg"},
+ /* triceS ( triceS ) */ {15275u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('\"att:'-alias' & '-salias' contributor is %s.\n\"')SAlias_Strg"},
+ /* triceS ( triceS ) */ {13004u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('theFastFoundAnswer == theRightAnswer')SAlias_Strg"},
+ /* triceS ( triceS ) */ {15263u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('theFastFoundAnswer == theRightAnswer')SAlias_Strg"},
+ /* triceS ( triceS ) */ {13006u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('theFastFoundAnswer == theRightAnswer, (char*)\"'%s' Am, it is %d\"')SAlias_Strg"},
+ /* triceS ( triceS ) */ {15272u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('theFastFoundAnswer == theRightAnswer, (char*)\"'%s' Am, it is %d\"')SAlias_Strg"},
+ /* triceS ( triceS ) */ {13005u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('theFastFoundAnswer == theRightAnswer, (char*)theQuestion ')SAlias_Strg"},
+ /* triceS ( triceS ) */ {15268u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SAlias_Strg('theFastFoundAnswer == theRightAnswer, (char*)theQuestion ')SAlias_Strg"},
+ /* trice64B ( trice64B ) */ {13295u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "SIG: %016x\n"},
+ /* TRICE ( TRICE32_1 ) */ {14707u, 32u, 1u, "SIG:signal message, SysTick is %6u\n"},
+ /* TRICE ( TRICE_0 ) */ {13707u, 32u, 0u, "SIGNAL:118+i\n"},
+ /* trice ( trice_0 ) */ {13757u, 32u, 0u, "SIGNAL:118+i\n"},
+ /* TRICE ( TRICE_0 ) */ {13807u, 32u, 0u, "SIGNAL:118+i\n"},
+ /* Trice ( Trice_0 ) */ {13857u, 32u, 0u, "SIGNAL:118+i\n"},
+ /* TRICE ( TRICE_0 ) */ {13907u, 32u, 0u, "SIGNAL:118+i\n"},
+ /* TRice ( TRice_0 ) */ {13957u, 32u, 0u, "SIGNAL:118+i\n"},
+ /* TRICE ( TRICE_0 ) */ {13708u, 32u, 0u, "TEST:yellow+h:black\n"},
+ /* trice ( trice_0 ) */ {13758u, 32u, 0u, "TEST:yellow+h:black\n"},
+ /* TRICE ( TRICE_0 ) */ {13808u, 32u, 0u, "TEST:yellow+h:black\n"},
+ /* Trice ( Trice_0 ) */ {13858u, 32u, 0u, "TEST:yellow+h:black\n"},
+ /* TRICE ( TRICE_0 ) */ {13908u, 32u, 0u, "TEST:yellow+h:black\n"},
+ /* TRice ( TRice_0 ) */ {13958u, 32u, 0u, "TEST:yellow+h:black\n"},
+ /* TRICE ( TRICE32_1 ) */ {14705u, 32u, 1u, "TIM:timing message, SysTick is %6u\n"},
+ /* TRICE ( TRICE_0 ) */ {13699u, 32u, 0u, "TIME:blue+i:blue+h\n"},
+ /* trice ( trice_0 ) */ {13749u, 32u, 0u, "TIME:blue+i:blue+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13799u, 32u, 0u, "TIME:blue+i:blue+h\n"},
+ /* Trice ( Trice_0 ) */ {13849u, 32u, 0u, "TIME:blue+i:blue+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13899u, 32u, 0u, "TIME:blue+i:blue+h\n"},
+ /* TRice ( TRice_0 ) */ {13949u, 32u, 0u, "TIME:blue+i:blue+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13698u, 32u, 0u, "TRACE:default+i:default+h\n"},
+ /* trice ( trice_0 ) */ {13748u, 32u, 0u, "TRACE:default+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13798u, 32u, 0u, "TRACE:default+i:default+h\n"},
+ /* Trice ( Trice_0 ) */ {13848u, 32u, 0u, "TRACE:default+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13898u, 32u, 0u, "TRACE:default+i:default+h\n"},
+ /* TRice ( TRice_0 ) */ {13948u, 32u, 0u, "TRACE:default+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13704u, 32u, 0u, "TRANSMIT:black:black+h\n"},
+ /* trice ( trice_0 ) */ {13754u, 32u, 0u, "TRANSMIT:black:black+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13804u, 32u, 0u, "TRANSMIT:black:black+h\n"},
+ /* Trice ( Trice_0 ) */ {13854u, 32u, 0u, "TRANSMIT:black:black+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13904u, 32u, 0u, "TRANSMIT:black:black+h\n"},
+ /* TRice ( TRice_0 ) */ {13954u, 32u, 0u, "TRANSMIT:black:black+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13714u, 32u, 0u, "VERBOSE:blue:default\n"},
+ /* trice ( trice_0 ) */ {13764u, 32u, 0u, "VERBOSE:blue:default\n"},
+ /* TRICE ( TRICE_0 ) */ {13814u, 32u, 0u, "VERBOSE:blue:default\n"},
+ /* Trice ( Trice_0 ) */ {13864u, 32u, 0u, "VERBOSE:blue:default\n"},
+ /* TRICE ( TRICE_0 ) */ {13914u, 32u, 0u, "VERBOSE:blue:default\n"},
+ /* TRice ( TRice_0 ) */ {13964u, 32u, 0u, "VERBOSE:blue:default\n"},
+ /* TRICE ( TRICE_0 ) */ {13694u, 32u, 0u, "WARNING:11+i:red\n"},
+ /* trice ( trice_0 ) */ {13744u, 32u, 0u, "WARNING:11+i:red\n"},
+ /* TRICE ( TRICE_0 ) */ {13794u, 32u, 0u, "WARNING:11+i:red\n"},
+ /* Trice ( Trice_0 ) */ {13844u, 32u, 0u, "WARNING:11+i:red\n"},
+ /* TRICE ( TRICE_0 ) */ {13894u, 32u, 0u, "WARNING:11+i:red\n"},
+ /* TRice ( TRice_0 ) */ {13944u, 32u, 0u, "WARNING:11+i:red\n"},
+ /* trice16 ( trice16_2 ) */ {16383u, 16u, 2u, "WARNING:RTT0_writeDepthMax=%u (BUFFER_SIZE_UP=%u)\n"},
+ /* TRice ( TRice_0 ) */ {13000u, 32u, 0u, "WARNING:USARTq OverRun Error Flag is set!\n"},
+ /* TRice ( TRice_0 ) */ {13014u, 32u, 0u, "WARNING:USARTq OverRun Error Flag is set!\n"},
+ /* TRICE ( TRICE32_1 ) */ {14709u, 32u, 1u, "WR:write message, SysTick is %6u\n"},
+ /* TRICE ( TRICE_0 ) */ {13702u, 32u, 0u, "WRITE:black+u:yellow+h\n"},
+ /* trice ( trice_0 ) */ {13752u, 32u, 0u, "WRITE:black+u:yellow+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13802u, 32u, 0u, "WRITE:black+u:yellow+h\n"},
+ /* Trice ( Trice_0 ) */ {13852u, 32u, 0u, "WRITE:black+u:yellow+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13902u, 32u, 0u, "WRITE:black+u:yellow+h\n"},
+ /* TRice ( TRice_0 ) */ {13952u, 32u, 0u, "WRITE:black+u:yellow+h\n"},
+ /* TRICE ( TRICE32_1 ) */ {14702u, 32u, 1u, "WRN:warning message, SysTick is %6u\n"},
+ /* TRice ( TRice_0 ) */ {15282u, 32u, 0u, "World!\n"},
+ /* TRice ( TRice_0 ) */ {15288u, 32u, 0u, "World!\n"},
+ /* TRICE ( TRICE_0 ) */ {15244u, 32u, 0u, "\n"},
+ /* TRICE ( TRICE_0 ) */ {15247u, 32u, 0u, "\n"},
+ /* TRICE ( TRICE_0 ) */ {15250u, 32u, 0u, "\n"},
+ /* TRice ( TRice32_1 ) */ {13028u, 32u, 1u, "\rTriceCheck %4d"},
+ /* trice ( trice_0 ) */ {14797u, 32u, 0u, "a:c"},
+ /* trice ( trice_0 ) */ {14815u, 32u, 0u, "a:c"},
+ /* Trice32C ( Trice32C ) */ {3204u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "abc:DivideResult"},
+ /* trice32C ( trice32C ) */ {3448u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "abc:DivideResult"},
+ /* TRice32C ( TRice32C ) */ {4502u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "abc:DivideResult"},
+ /* trice32C ( trice32C ) */ {4557u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "abc:DivideResult"},
+ /* trice8C ( trice8C ) */ {2945u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "abc:LedsState"},
+ /* TRice8C ( TRice8C ) */ {4381u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "abc:LedsState"},
+ /* Trice8C ( Trice8C ) */ {5749u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "abc:LedsState"},
+ /* trice8C ( trice8C ) */ {7145u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "abc:LedsState"},
+ /* TRIce_C ( TRIce_C ) */ {15371u, 0u, 0u, "abc:all:GetState"},
+ /* TRICe_C ( TRICe_C ) */ {15849u, 0u, 0u, "abc:all:GetState"},
+ /* TRICE_C ( TRICE_C ) */ {15917u, 0u, 0u, "abc:all:GetState"},
+ /* triceC ( triceC ) */ {16005u, 0u, 0u, "abc:all:GetState"},
+ /* TriceC ( TriceC ) */ {16014u, 0u, 0u, "abc:all:GetState"},
+ /* TRiceC ( TRiceC ) */ {16241u, 0u, 0u, "abc:all:GetState"},
+ /* TRICE ( TRICE_0 ) */ {13738u, 32u, 0u, "alarm:red+i:white+h\n"},
+ /* trice ( trice_0 ) */ {13788u, 32u, 0u, "alarm:red+i:white+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13838u, 32u, 0u, "alarm:red+i:white+h\n"},
+ /* Trice ( Trice_0 ) */ {13888u, 32u, 0u, "alarm:red+i:white+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13938u, 32u, 0u, "alarm:red+i:white+h\n"},
+ /* TRice ( TRice_0 ) */ {13988u, 32u, 0u, "alarm:red+i:white+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13736u, 32u, 0u, "alert:magenta:magenta+h\n"},
+ /* trice ( trice_0 ) */ {13786u, 32u, 0u, "alert:magenta:magenta+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13836u, 32u, 0u, "alert:magenta:magenta+h\n"},
+ /* Trice ( Trice_0 ) */ {13886u, 32u, 0u, "alert:magenta:magenta+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13936u, 32u, 0u, "alert:magenta:magenta+h\n"},
+ /* TRice ( TRice_0 ) */ {13986u, 32u, 0u, "alert:magenta:magenta+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13737u, 32u, 0u, "assert:yellow+i:blue\n"},
+ /* trice ( trice_0 ) */ {13787u, 32u, 0u, "assert:yellow+i:blue\n"},
+ /* TRICE ( TRICE_0 ) */ {13837u, 32u, 0u, "assert:yellow+i:blue\n"},
+ /* Trice ( Trice_0 ) */ {13887u, 32u, 0u, "assert:yellow+i:blue\n"},
+ /* TRICE ( TRICE_0 ) */ {13937u, 32u, 0u, "assert:yellow+i:blue\n"},
+ /* TRice ( TRice_0 ) */ {13987u, 32u, 0u, "assert:yellow+i:blue\n"},
+ /* trice8B ( trice8B ) */ {13278u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "att: %02x\n"},
+ /* trice32B ( trice32B ) */ {13290u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "att: %08x\n"},
+ /* TRice16 ( TRice16_1 ) */ {13238u, 16u, 1u, "att: 0x8888 == %04xh\n"},
+ /* Trice16 ( Trice16_1 ) */ {13239u, 16u, 1u, "att: 0x8888 == %04xh\n"},
+ /* trice16 ( trice16_1 ) */ {13240u, 16u, 1u, "att: 0x8888 == %04xh\n"},
+ /* trice32 ( trice32_6 ) */ {13169u, 32u, 6u, "att: TriceEncrypted = %08x %08x %08x %08x %08x %08x\n"},
+ /* trice16 ( trice16_1 ) */ {13029u, 16u, 1u, "att: line %u\n"},
+ /* trice16 ( trice16_1 ) */ {13164u, 16u, 1u, "att: line %u\n"},
+ /* trice16 ( trice16_1 ) */ {13174u, 16u, 1u, "att: line %u\n"},
+ /* trice16 ( trice16_1 ) */ {13237u, 16u, 1u, "att: line %u\n"},
+ /* trice16 ( trice16_1 ) */ {13241u, 16u, 1u, "att: line %u\n"},
+ /* trice16 ( trice16_1 ) */ {13258u, 16u, 1u, "att: line %u\n"},
+ /* trice16 ( trice16_1 ) */ {13330u, 16u, 1u, "att: line %u\n"},
+ /* trice16 ( trice16_1 ) */ {13333u, 16u, 1u, "att: line %u\n"},
+ /* trice16 ( trice16_1 ) */ {13345u, 16u, 1u, "att: line %u\n"},
+ /* trice16 ( trice16_1 ) */ {13359u, 16u, 1u, "att: line %u\n"},
+ /* trice16 ( trice16_1 ) */ {13379u, 16u, 1u, "att: line %u\n"},
+ /* trice16 ( trice16_1 ) */ {13386u, 16u, 1u, "att: line %u\n"},
+ /* Trice16F ( Trice16F ) */ {16337u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "att:ARemoteFunctionName"},
+ /* Trice ( Trice32_3 ) */ {15254u, 32u, 3u, "att:MyStructEvaluationFunction(json:ExA{Apple:%d, Birn:%u, Fisch:%f})\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {14729u, 32u, 1u, "att:TRICE32 %40b\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {14732u, 64u, 1u, "att:TRICE64 %70b\n"},
+ /* TRICE ( TRICE_0 ) */ {15018u, 32u, 0u, "att:Various single arguments\n"},
+ /* TRICE ( TRICE_0 ) */ {15011u, 32u, 0u, "att:formatted double\n"},
+ /* TRICE ( TRICE_0 ) */ {15004u, 32u, 0u, "att:formatted float\n"},
+ /* trice ( trice_0 ) */ {13244u, 32u, 0u, "att:mixed int & float & double & bits\n"},
+ /* trice ( trice_0 ) */ {14991u, 32u, 0u, "att:negative float & double\n"},
+ /* trice ( trice_0 ) */ {14929u, 32u, 0u, "att:positive and negative float in format variants\n"},
+ /* trice ( trice_0 ) */ {14960u, 32u, 0u, "att:positive float & double in variants\n"},
+ /* TRICE32_0 ( TRICE_0 ) */ {16368u, 32u, 0u, "att:🐁 Speedy Gonzales A 32-bit time stamp\n"},
+ /* TRICE32_0 ( TRICE_0 ) */ {16367u, 32u, 0u, "att:🐁 Speedy Gonzales B 32-bit time stamp\n"},
+ /* TRICE32_0 ( TRICE_0 ) */ {16366u, 32u, 0u, "att:🐁 Speedy Gonzales C 32-bit time stamp\n"},
+ /* TRICE32_0 ( TRICE_0 ) */ {16365u, 32u, 0u, "att:🐁 Speedy Gonzales D 32-bit time stamp\n"},
+ /* TRICE32_0 ( TRICE_0 ) */ {16364u, 32u, 0u, "att:🐁 Speedy Gonzales E 16-bit time stamp\n"},
+ /* TRICE32_0 ( TRICE_0 ) */ {16363u, 32u, 0u, "att:🐁 Speedy Gonzales F 16-bit time stamp\n"},
+ /* TRICE32_0 ( TRICE_0 ) */ {16362u, 32u, 0u, "att:🐁 Speedy Gonzales G 16-bit time stamp\n"},
+ /* TRICE32_0 ( TRICE_0 ) */ {16361u, 32u, 0u, "att:🐁 Speedy Gonzales H 16-bit time stamp\n"},
+ /* TRICE32_0 ( TRICE_0 ) */ {16360u, 32u, 0u, "att:🐁 Speedy Gonzales I without time stamp\n"},
+ /* TRICE32_0 ( TRICE_0 ) */ {16359u, 32u, 0u, "att:🐁 Speedy Gonzales J without time stamp\n"},
+ /* TRICE32_0 ( TRICE_0 ) */ {16358u, 32u, 0u, "att:🐁 Speedy Gonzales K without time stamp\n"},
+ /* TRICE32_0 ( TRICE_0 ) */ {16357u, 32u, 0u, "att:🐁 Speedy Gonzales L without time stamp\n"},
+ /* TRice ( TRice_0 ) */ {16356u, 32u, 0u, "att:🐁 Speedy Gonzales a 32-bit time stamp\n"},
+ /* TRice ( TRice_0 ) */ {16355u, 32u, 0u, "att:🐁 Speedy Gonzales b 32-bit time stamp\n"},
+ /* TRice ( TRice_0 ) */ {16354u, 32u, 0u, "att:🐁 Speedy Gonzales c 32-bit time stamp\n"},
+ /* TRice ( TRice_0 ) */ {16353u, 32u, 0u, "att:🐁 Speedy Gonzales d 32-bit time stamp\n"},
+ /* Trice ( Trice_0 ) */ {16352u, 32u, 0u, "att:🐁 Speedy Gonzales e 16-bit time stamp\n"},
+ /* Trice ( Trice_0 ) */ {16351u, 32u, 0u, "att:🐁 Speedy Gonzales f 16-bit time stamp\n"},
+ /* Trice ( Trice_0 ) */ {16350u, 32u, 0u, "att:🐁 Speedy Gonzales g 16-bit time stamp\n"},
+ /* Trice ( Trice_0 ) */ {16349u, 32u, 0u, "att:🐁 Speedy Gonzales h 16-bit time stamp\n"},
+ /* trice ( trice_0 ) */ {16348u, 32u, 0u, "att:🐁 Speedy Gonzales i without time stamp\n"},
+ /* trice ( trice_0 ) */ {16347u, 32u, 0u, "att:🐁 Speedy Gonzales j without time stamp\n"},
+ /* trice ( trice_0 ) */ {16346u, 32u, 0u, "att:🐁 Speedy Gonzales k without time stamp\n"},
+ /* trice ( trice_0 ) */ {16345u, 32u, 0u, "att:🐁 Speedy Gonzales l without time stamp\n"},
+ /* TRICE ( TRICE_0 ) */ {13720u, 32u, 0u, "attention:11:green\n"},
+ /* trice ( trice_0 ) */ {13770u, 32u, 0u, "attention:11:green\n"},
+ /* TRICE ( TRICE_0 ) */ {13820u, 32u, 0u, "attention:11:green\n"},
+ /* Trice ( Trice_0 ) */ {13870u, 32u, 0u, "attention:11:green\n"},
+ /* TRICE ( TRICE_0 ) */ {13920u, 32u, 0u, "attention:11:green\n"},
+ /* TRice ( TRice_0 ) */ {13970u, 32u, 0u, "attention:11:green\n"},
+ /* TRice8F ( TRice8F ) */ {13297u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWb"},
+ /* TRice8C ( TRice8C ) */ {15344u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWb"},
+ /* Trice8F ( Trice8F ) */ {13298u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWc"},
+ /* Trice8C ( Trice8C ) */ {15739u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWc"},
+ /* trice8F ( trice8F ) */ {13299u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWd"},
+ /* trice8C ( trice8C ) */ {15310u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWd"},
+ /* trice8C ( trice8C ) */ {15647u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWd"},
+ /* trice8C ( trice8C ) */ {15815u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWd"},
+ /* trice8C ( trice8C ) */ {15827u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWd"},
+ /* trice8C ( trice8C ) */ {16089u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameWd"},
+ /* TRice16F ( TRice16F ) */ {13301u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXb"},
+ /* TRice16C ( TRice16C ) */ {15976u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXb"},
+ /* Trice16F ( Trice16F ) */ {13302u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXc"},
+ /* Trice16C ( Trice16C ) */ {15339u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXc"},
+ /* trice16F ( trice16F ) */ {13303u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXd"},
+ /* trice16C ( trice16C ) */ {15618u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXd"},
+ /* trice16C ( trice16C ) */ {15650u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXd"},
+ /* trice16C ( trice16C ) */ {15893u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXd"},
+ /* trice16C ( trice16C ) */ {16098u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXd"},
+ /* trice16C ( trice16C ) */ {16268u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameXd"},
+ /* trice32F ( trice32F ) */ {13307u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameYd"},
+ /* trice32F ( trice32F ) */ {15303u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameYd"},
+ /* trice32C ( trice32C ) */ {15837u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameYd"},
+ /* TRice64F ( TRice64F ) */ {13309u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameZb"},
+ /* TRice64F ( TRice64F ) */ {15305u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameZb"},
+ /* TRice64C ( TRice64C ) */ {15559u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "call:FunctionNameZb"},
+ /* trice32C ( trice32C ) */ {4499u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:divide"},
+ /* TRice32C ( TRice32C ) */ {5642u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:divide"},
+ /* TRiceC ( TRiceC ) */ {1512u, 0u, 0u, "cmd:getLeds"},
+ /* TRiceC ( TRiceC ) */ {1737u, 0u, 0u, "cmd:getLeds"},
+ /* TriceC ( TriceC ) */ {2968u, 0u, 0u, "cmd:getLeds"},
+ /* TRiceC ( TRiceC ) */ {3945u, 0u, 0u, "cmd:getLeds"},
+ /* TriceC ( TriceC ) */ {4650u, 0u, 0u, "cmd:getLeds"},
+ /* triceC ( triceC ) */ {4818u, 0u, 0u, "cmd:getLeds"},
+ /* TriceC ( TriceC ) */ {6227u, 0u, 0u, "cmd:getLeds"},
+ /* triceC ( triceC ) */ {7171u, 0u, 0u, "cmd:getLeds"},
+ /* triceC ( triceC ) */ {7313u, 0u, 0u, "cmd:getLeds"},
+ /* triceC ( triceC ) */ {1716u, 0u, 0u, "cmd:logState"},
+ /* triceC ( triceC ) */ {3578u, 0u, 0u, "cmd:logState"},
+ /* triceC ( triceC ) */ {4208u, 0u, 0u, "cmd:logState"},
+ /* trice8C ( trice8C ) */ {3792u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setKey"},
+ /* trice8C ( trice8C ) */ {3925u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setKey"},
+ /* trice8C ( trice8C ) */ {6890u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setKey"},
+ /* trice8C ( trice8C ) */ {5150u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setLeds"},
+ /* trice8C ( trice8C ) */ {6278u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setLeds"},
+ /* trice8C ( trice8C ) */ {7431u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "cmd:setLeds"},
+ /* TRICE ( TRICE_0 ) */ {13716u, 32u, 0u, "critical:red+i:default+h\n"},
+ /* trice ( trice_0 ) */ {13766u, 32u, 0u, "critical:red+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13816u, 32u, 0u, "critical:red+i:default+h\n"},
+ /* Trice ( Trice_0 ) */ {13866u, 32u, 0u, "critical:red+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13916u, 32u, 0u, "critical:red+i:default+h\n"},
+ /* TRice ( TRice_0 ) */ {13966u, 32u, 0u, "critical:red+i:default+h\n"},
+ /* trice ( trice_0 ) */ {14801u, 32u, 0u, "d:G"},
+ /* trice ( trice32_3 ) */ {16326u, 32u, 3u, "d:_SINGLE_MAX_SIZE=%d, _BUFFER_SIZE=%d, _DEFERRED_BUFFER_SIZE=%d\n"},
+ /* trice ( trice_0 ) */ {13176u, 32u, 0u, "dbg:\tHi!\n"},
+ /* TRICE ( TRICE32_1 ) */ {14697u, 32u, 1u, "dbg:12345 as 16bit is %016b\n"},
+ /* trice8 ( trice8_1 ) */ {13026u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration with direct RTT output and parallel deferred UART output.\n"},
+ /* trice8 ( trice8_1 ) */ {13023u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration with direct RTT output only and optimized for speed\n"},
+ /* trice8 ( trice8_1 ) */ {13010u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n"},
+ /* trice8 ( trice8_1 ) */ {13011u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n"},
+ /* trice8 ( trice8_1 ) */ {13012u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n"},
+ /* trice8 ( trice8_1 ) */ {13013u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n"},
+ /* trice8 ( trice8_1 ) */ {13016u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n"},
+ /* trice8 ( trice8_1 ) */ {13017u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n"},
+ /* trice8 ( trice8_1 ) */ {13018u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n"},
+ /* trice8 ( trice8_1 ) */ {13020u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n"},
+ /* trice8 ( trice8_1 ) */ {13021u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n"},
+ /* trice8 ( trice8_1 ) */ {13027u, 8u, 1u, "dbg:CONFIGURATION == %d - An example configuration\n"},
+ /* trice8 ( trice8_1 ) */ {13025u, 8u, 1u, "dbg:CONFIGURATION == %d - An minimum configuration example.\n"},
+ /* trice8 ( trice8_1 ) */ {13024u, 8u, 1u, "dbg:CONFIGURATION == %d - UART, no cycle counter, no critical sections.\n"},
+ /* trice ( trice_0 ) */ {13175u, 32u, 0u, "dbg:Hi!\n"},
+ /* trice ( trice_0 ) */ {14805u, 32u, 0u, "dbg:k\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {13388u, 32u, 1u, "dbg:len=%u:"},
+ /* TRICE32 ( TRICE32_1 ) */ {13390u, 32u, 1u, "dbg:len=%u:"},
+ /* TRICE32 ( TRICE32_1 ) */ {13392u, 32u, 1u, "dbg:len=%u: "},
+ /* TRICE32 ( TRICE32_1 ) */ {13394u, 32u, 1u, "dbg:len=%u: "},
+ /* TRICE32 ( TRICE32_1 ) */ {13396u, 32u, 1u, "dbg:len=%u: "},
+ /* trice ( trice32_2 ) */ {16334u, 32u, 2u, "deb:TRICE_DIRECT_OUTPUT == %d, TRICE_DEFERRED_OUTPUT == %d\n"},
+ /* trice ( trice_0 ) */ {16331u, 32u, 0u, "deb:TRICE_DOUBLE_BUFFER, "},
+ /* trice ( trice_0 ) */ {16328u, 32u, 0u, "deb:TRICE_MULTI_PACK_MODE\n"},
+ /* trice ( trice_0 ) */ {16330u, 32u, 0u, "deb:TRICE_RING_BUFFER, "},
+ /* trice ( trice_0 ) */ {16329u, 32u, 0u, "deb:TRICE_SINGLE_PACK_MODE\n"},
+ /* trice ( trice_0 ) */ {16333u, 32u, 0u, "deb:TRICE_STACK_BUFFER, "},
+ /* trice ( trice_0 ) */ {16332u, 32u, 0u, "deb:TRICE_STATIC_BUFFER, "},
+ /* trice ( trice32_4 ) */ {16327u, 32u, 4u, "deb:_CYCLE == %d, _PROTECT == %d, _DIAG == %d, XTEA == %d\n"},
+ /* TRICE ( TRICE_0 ) */ {13722u, 32u, 0u, "debug:130+i\n"},
+ /* trice ( trice_0 ) */ {13772u, 32u, 0u, "debug:130+i\n"},
+ /* TRICE ( TRICE_0 ) */ {13822u, 32u, 0u, "debug:130+i\n"},
+ /* Trice ( Trice_0 ) */ {13872u, 32u, 0u, "debug:130+i\n"},
+ /* TRICE ( TRICE_0 ) */ {13922u, 32u, 0u, "debug:130+i\n"},
+ /* TRice ( TRice_0 ) */ {13972u, 32u, 0u, "debug:130+i\n"},
+ /* TRICE ( TRICE_0 ) */ {13734u, 32u, 0u, "default:off\n"},
+ /* trice ( trice_0 ) */ {13784u, 32u, 0u, "default:off\n"},
+ /* TRICE ( TRICE_0 ) */ {13834u, 32u, 0u, "default:off\n"},
+ /* Trice ( Trice_0 ) */ {13884u, 32u, 0u, "default:off\n"},
+ /* TRICE ( TRICE_0 ) */ {13934u, 32u, 0u, "default:off\n"},
+ /* TRice ( TRice_0 ) */ {13984u, 32u, 0u, "default:off\n"},
+ /* trice16 ( trice16_2 ) */ {16382u, 16u, 2u, "diag:RTT0_writeDepthMax=%u (BUFFER_SIZE_UP=%u)\n"},
+ /* trice16 ( trice16_2 ) */ {16375u, 16u, 2u, "diag:TriceDataOffsetDepthMax = %d of %d (TRICE_DATA_OFFSET)\n"},
+ /* trice16 ( trice16_2 ) */ {16373u, 16u, 2u, "diag:TriceHalfBufferDepthMax =%4u of%5d\n"},
+ /* trice ( trice_0 ) */ {14800u, 32u, 0u, "diag:f"},
+ /* trice ( trice_0 ) */ {14818u, 32u, 0u, "diag:f"},
+ /* trice16 ( trice16_2 ) */ {16371u, 16u, 2u, "diag:triceRingBufferDepthMax =%4u of%5d\n"},
+ /* trice16 ( trice16_2 ) */ {16378u, 16u, 2u, "diag:triceSingleDepthMax =%4u of %d (TRICE_BUFFER_SIZE)\n"},
+ /* TRICE ( TRICE_0 ) */ {13730u, 32u, 0u, "diag:yellow+i:default+h\n"},
+ /* trice ( trice_0 ) */ {13780u, 32u, 0u, "diag:yellow+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13830u, 32u, 0u, "diag:yellow+i:default+h\n"},
+ /* Trice ( Trice_0 ) */ {13880u, 32u, 0u, "diag:yellow+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13930u, 32u, 0u, "diag:yellow+i:default+h\n"},
+ /* TRice ( TRice_0 ) */ {13980u, 32u, 0u, "diag:yellow+i:default+h\n"},
+ /* trice ( trice_0 ) */ {14810u, 32u, 0u, "e:7"},
+ /* trice ( trice_0 ) */ {14795u, 32u, 0u, "e:A"},
+ /* trice ( trice_0 ) */ {14813u, 32u, 0u, "e:A"},
+ /* TRICE ( TRICE_0 ) */ {13717u, 32u, 0u, "emergency:red+i:blue\n"},
+ /* trice ( trice_0 ) */ {13767u, 32u, 0u, "emergency:red+i:blue\n"},
+ /* TRICE ( TRICE_0 ) */ {13817u, 32u, 0u, "emergency:red+i:blue\n"},
+ /* Trice ( Trice_0 ) */ {13867u, 32u, 0u, "emergency:red+i:blue\n"},
+ /* TRICE ( TRICE_0 ) */ {13917u, 32u, 0u, "emergency:red+i:blue\n"},
+ /* TRice ( TRice_0 ) */ {13967u, 32u, 0u, "emergency:red+i:blue\n"},
+ /* trice16 ( trice16_2 ) */ {16376u, 16u, 2u, "err:TriceDataOffsetDepthMax = %d of %d (TRICE_DATA_OFFSET)\n"},
+ /* trice16 ( trice16_1 ) */ {16379u, 16u, 1u, "err:TriceDeferredOverflowCount = %u\n"},
+ /* trice16 ( trice16_1 ) */ {16380u, 16u, 1u, "err:TriceDirectOverflowCount = %u\n"},
+ /* trice16 ( trice16_1 ) */ {16381u, 16u, 1u, "err:TriceErrorCount = %u\n"},
+ /* trice16 ( trice16_2 ) */ {16372u, 16u, 2u, "err:TriceHalfBufferDepthMax =%4u of%5d (overflow!)\n"},
+ /* trice16 ( trice16_2 ) */ {16370u, 16u, 2u, "err:triceRingBufferDepthMax =%4u of%5d (overflow!)\n"},
+ /* trice16 ( trice16_2 ) */ {16377u, 16u, 2u, "err:triceSingleDepthMax =%4u of %d (TRICE_BUFFER_SIZE overflow!)\n"},
+ /* TRICE ( TRICE_0 ) */ {13718u, 32u, 0u, "error:11:red\n"},
+ /* trice ( trice_0 ) */ {13768u, 32u, 0u, "error:11:red\n"},
+ /* TRICE ( TRICE_0 ) */ {13818u, 32u, 0u, "error:11:red\n"},
+ /* Trice ( Trice_0 ) */ {13868u, 32u, 0u, "error:11:red\n"},
+ /* TRICE ( TRICE_0 ) */ {13918u, 32u, 0u, "error:11:red\n"},
+ /* TRice ( TRice_0 ) */ {13968u, 32u, 0u, "error:11:red\n"},
+ /* TRICE ( TRICE_0 ) */ {13715u, 32u, 0u, "fatal:magenta+b:red\n"},
+ /* trice ( trice_0 ) */ {13765u, 32u, 0u, "fatal:magenta+b:red\n"},
+ /* TRICE ( TRICE_0 ) */ {13815u, 32u, 0u, "fatal:magenta+b:red\n"},
+ /* Trice ( Trice_0 ) */ {13865u, 32u, 0u, "fatal:magenta+b:red\n"},
+ /* TRICE ( TRICE_0 ) */ {13915u, 32u, 0u, "fatal:magenta+b:red\n"},
+ /* TRice ( TRice_0 ) */ {13965u, 32u, 0u, "fatal:magenta+b:red\n"},
+ /* Trice ( Trice32_2 ) */ {16335u, 32u, 2u, "i=%x %x\n"},
+ /* TRICE ( TRICE_0 ) */ {15245u, 32u, 0u, "inf: Tryout buffer:"},
+ /* TRICE ( TRICE_0 ) */ {15248u, 32u, 0u, "inf: Tryout rx struct:"},
+ /* TRICE ( TRICE_0 ) */ {15242u, 32u, 0u, "inf: Tryout tx struct:"},
+ /* TRICE ( TRICE32_2 ) */ {15251u, 32u, 2u, "inf:sizeOf(Trypout) = %d, buffer length = %d\n"},
+ /* trice ( trice32_1 ) */ {16336u, 32u, 1u, "info:%d times a 16 byte long Trice messages, which may not be written all if the buffer is too small:\n"},
+ /* Trice8 ( Trice8_12 ) */ {13235u, 8u, 12u, "info:12 8-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and a 16-bit stamp.\n"},
+ /* TRice8 ( TRice8_12 ) */ {13234u, 8u, 12u, "info:12 8-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and a 32-bit stamp.\n"},
+ /* trice8 ( trice8_12 ) */ {13236u, 8u, 12u, "info:12 8-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and without stamp.\n"},
+ /* Trice16 ( Trice16_12 ) */ {13232u, 16u, 12u, "info:12 16-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and a 16-bit stamp.\n"},
+ /* TRice16 ( TRice16_12 ) */ {13231u, 16u, 12u, "info:12 16-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and a 32-bit stamp.\n"},
+ /* trice16 ( trice16_12 ) */ {13233u, 16u, 12u, "info:12 16-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and without stamp.\n"},
+ /* Trice32 ( Trice32_12 ) */ {13229u, 32u, 12u, "info:12 32-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and a 16-bit stamp.\n"},
+ /* TRice32 ( TRice32_12 ) */ {13228u, 32u, 12u, "info:12 32-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and a 32-bit stamp.\n"},
+ /* trice32 ( trice32_12 ) */ {13230u, 32u, 12u, "info:12 32-bit values %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d and without stamp.\n"},
+ /* Trice64 ( Trice64_12 ) */ {13223u, 64u, 12u, "info:12 64-bit values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 16-bit stamp.\n"},
+ /* TRice64 ( TRice64_12 ) */ {13222u, 64u, 12u, "info:12 64-bit values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 32-bit stamp.\n"},
+ /* trice64 ( trice64_12 ) */ {13224u, 64u, 12u, "info:12 64-bit values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and without stamp.\n"},
+ /* Trice64 ( Trice64_12 ) */ {13226u, 64u, 12u, "info:12 64-bit values %d, %zu, %x, %lX, %t, %e, %Lf, %g, %E, %F, %G, 0xb%08b and a 16-bit stamp.\n"},
+ /* TRice64 ( TRice64_12 ) */ {13225u, 64u, 12u, "info:12 64-bit values %d, %zu, %x, %lX, %t, %e, %Lf, %g, %E, %F, %G, 0xb%08b and a 32-bit stamp.\n"},
+ /* trice64 ( trice64_12 ) */ {13227u, 64u, 12u, "info:12 64-bit values %d, %zu, %x, %lX, %t, %e, %Lf, %g, %E, %F, %G, 0xb%08b and without stamp.\n"},
+ /* trice ( trice32_12 ) */ {13385u, 32u, 12u, "info:12 default bit width values %d, %llu, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and without stamp.\n"},
+ /* Trice ( Trice32_12 ) */ {13384u, 32u, 12u, "info:12 default bit width values %d, %lu, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 16-bit stamp.\n"},
+ /* Trice ( Trice32_12 ) */ {13381u, 32u, 12u, "info:12 default bit width values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 16-bit stamp.\n"},
+ /* TRice ( TRice32_12 ) */ {13380u, 32u, 12u, "info:12 default bit width values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 32-bit stamp.\n"},
+ /* trice ( trice32_12 ) */ {13382u, 32u, 12u, "info:12 default bit width values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and without stamp.\n"},
+ /* TRice ( TRice32_12 ) */ {13383u, 32u, 12u, "info:12 default bit width values %d, %zu, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 32-bit stamp.\n"},
+ /* TRICE ( TRICE32_12 ) */ {13499u, 32u, 12u, "info:12 values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 16-bit stamp.\n"},
+ /* TRICE32 ( TRICE32_12 ) */ {13502u, 32u, 12u, "info:12 values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 16-bit stamp.\n"},
+ /* TRICE ( TRICE32_12 ) */ {13498u, 32u, 12u, "info:12 values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 32-bit stamp.\n"},
+ /* TRICE32 ( TRICE32_12 ) */ {13501u, 32u, 12u, "info:12 values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and a 32-bit stamp.\n"},
+ /* TRICE ( TRICE32_12 ) */ {13500u, 32u, 12u, "info:12 values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and without stamp.\n"},
+ /* TRICE32 ( TRICE32_12 ) */ {13503u, 32u, 12u, "info:12 values %d, %u, %x, %X, %t, %e, %f, %g, %E, %F, %G, 0xb%08b and without stamp.\n"},
+ /* Trice ( Trice_0 ) */ {16340u, 32u, 0u, "info:A Buffer:\n"},
+ /* TRICE8_F ( TRICE8F ) */ {13296u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameWa"},
+ /* TRICE8_F ( TRICE8F ) */ {15292u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameWa"},
+ /* TRICe8_C ( TRICe8_C ) */ {15689u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameWa"},
+ /* TRIce8_C ( TRIce8_C ) */ {16111u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameWa"},
+ /* TRICE8_C ( TRICE8_C ) */ {16176u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameWa"},
+ /* TRice8F ( TRice8F ) */ {15293u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameWb"},
+ /* Trice8F ( Trice8F ) */ {15294u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameWc"},
+ /* trice8F ( trice8F ) */ {15295u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameWd"},
+ /* TRICE16_F ( TRICE16F ) */ {13300u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameXa"},
+ /* TRICE16_F ( TRICE16F ) */ {15296u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameXa"},
+ /* TRICe16_C ( TRICe16_C ) */ {15547u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameXa"},
+ /* TRICE16_C ( TRICE16_C ) */ {15754u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameXa"},
+ /* TRIce16_C ( TRIce16_C ) */ {15996u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameXa"},
+ /* TRice16F ( TRice16F ) */ {15297u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameXb"},
+ /* Trice16F ( Trice16F ) */ {15298u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameXc"},
+ /* trice16F ( trice16F ) */ {15299u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameXd"},
+ /* TRICE32_F ( TRICE32F ) */ {13304u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa"},
+ /* TRICE32_F ( TRICE32F ) */ {15300u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa"},
+ /* TRIce32_C ( TRIce32_C ) */ {15311u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa"},
+ /* TRIce32_C ( TRIce32_C ) */ {15374u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa"},
+ /* TRIce32_C ( TRIce32_C ) */ {15519u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa"},
+ /* TRICe32_C ( TRICe32_C ) */ {15578u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa"},
+ /* TRICE32_C ( TRICE32_C ) */ {15606u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa"},
+ /* TRIce32_C ( TRIce32_C ) */ {15698u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa"},
+ /* TRIce32_C ( TRIce32_C ) */ {16246u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameYa"},
+ /* TRICE64_F ( TRICE64F ) */ {13308u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameZa"},
+ /* TRICE64_F ( TRICE64F ) */ {15304u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameZa"},
+ /* TRIce64_C ( TRIce64_C ) */ {15354u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameZa"},
+ /* TRICE64_C ( TRICE64_C ) */ {15607u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameZa"},
+ /* TRICe64_C ( TRICe64_C ) */ {15657u, 64u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:FunctionNameZa"},
+ /* Trice ( Trice32_1 ) */ {13490u, 32u, 1u, "info:This is a message with one value %d and a 16-bit stamp.\n"},
+ /* TRICE ( TRICE32_1 ) */ {13496u, 32u, 1u, "info:This is a message with one value %d and a 16-bit stamp.\n"},
+ /* TRice ( TRice32_1 ) */ {13489u, 32u, 1u, "info:This is a message with one value %d and a 32-bit stamp.\n"},
+ /* TRICE ( TRICE32_1 ) */ {13495u, 32u, 1u, "info:This is a message with one value %d and a 32-bit stamp.\n"},
+ /* trice ( trice32_1 ) */ {13491u, 32u, 1u, "info:This is a message with one value %d and without stamp.\n"},
+ /* TRICE ( TRICE32_1 ) */ {13497u, 32u, 1u, "info:This is a message with one value %d and without stamp.\n"},
+ /* Trice ( Trice_0 ) */ {13032u, 32u, 0u, "info:This is a message without values and a 16-bit stamp.\n"},
+ /* TRICE ( TRICE_0 ) */ {13493u, 32u, 0u, "info:This is a message without values and a 16-bit stamp.\n"},
+ /* TRice ( TRice_0 ) */ {13031u, 32u, 0u, "info:This is a message without values and a 32-bit stamp.\n"},
+ /* TRICE ( TRICE_0 ) */ {13492u, 32u, 0u, "info:This is a message without values and a 32-bit stamp.\n"},
+ /* trice ( trice_0 ) */ {13033u, 32u, 0u, "info:This is a message without values and without stamp.\n"},
+ /* TRICE ( TRICE_0 ) */ {13494u, 32u, 0u, "info:This is a message without values and without stamp.\n"},
+ /* TRICE8_F ( TRICE8F ) */ {15253u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:TryoutBufferFunction"},
+ /* TRICE8_F ( TRICE8F ) */ {15252u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "info:TryoutStructFunction"},
+ /* TRICE ( TRICE_0 ) */ {13721u, 32u, 0u, "info:cyan+b:default+h\n"},
+ /* trice ( trice_0 ) */ {13771u, 32u, 0u, "info:cyan+b:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13821u, 32u, 0u, "info:cyan+b:default+h\n"},
+ /* Trice ( Trice_0 ) */ {13871u, 32u, 0u, "info:cyan+b:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13921u, 32u, 0u, "info:cyan+b:default+h\n"},
+ /* TRice ( TRice_0 ) */ {13971u, 32u, 0u, "info:cyan+b:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13731u, 32u, 0u, "interrupt:magenta+i:default+h\n"},
+ /* trice ( trice_0 ) */ {13781u, 32u, 0u, "interrupt:magenta+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13831u, 32u, 0u, "interrupt:magenta+i:default+h\n"},
+ /* Trice ( Trice_0 ) */ {13881u, 32u, 0u, "interrupt:magenta+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13931u, 32u, 0u, "interrupt:magenta+i:default+h\n"},
+ /* TRice ( TRice_0 ) */ {13981u, 32u, 0u, "interrupt:magenta+i:default+h\n"},
+ /* trice ( trice32_1 ) */ {13007u, 32u, 1u, "isr:TIM17_FDCAN_IT1_IRQHandler! (%u ms)\n"},
+ /* TRICE ( TRICE32_1 ) */ {13194u, 32u, 1u, "isr:TRICE isr message, SysTick is %6d\n"},
+ /* TRICE ( TRICE32_1 ) */ {13195u, 32u, 1u, "isr:TRICE isr message, SysTick is %6d\n"},
+ /* TRICE ( TRICE32_1 ) */ {13196u, 32u, 1u, "isr:TRICE isr message, SysTick is %6d\n"},
+ /* TRICE ( TRICE32_1 ) */ {13197u, 32u, 1u, "isr:TRICE isr message, SysTick is %6d\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {13186u, 16u, 1u, "isr:TRICE16_1 isr message, SysTick is %6d\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {13187u, 16u, 1u, "isr:TRICE16_1 isr message, SysTick is %6d\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {13188u, 16u, 1u, "isr:TRICE16_1 isr message, SysTick is %6d\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {13189u, 16u, 1u, "isr:TRICE16_1 isr message, SysTick is %6d\n"},
+ /* TRICE_1 ( TRICE32_1 ) */ {13190u, 32u, 1u, "isr:TRICE_1 isr message, SysTick is %6d\n"},
+ /* TRICE_1 ( TRICE32_1 ) */ {13191u, 32u, 1u, "isr:TRICE_1 isr message, SysTick is %6d\n"},
+ /* TRICE_1 ( TRICE32_1 ) */ {13192u, 32u, 1u, "isr:TRICE_1 isr message, SysTick is %6d\n"},
+ /* TRICE_1 ( TRICE32_1 ) */ {13193u, 32u, 1u, "isr:TRICE_1 isr message, SysTick is %6d\n"},
+ /* trice ( trice32_1 ) */ {13178u, 32u, 1u, "isr:trice isr message, SysTick is %6d\n"},
+ /* trice ( trice32_1 ) */ {13179u, 32u, 1u, "isr:trice isr message, SysTick is %6ld\n"},
+ /* trice ( trice32_1 ) */ {13180u, 32u, 1u, "isr:trice isr message, SysTick is %6lld\n"},
+ /* trice ( trice32_1 ) */ {13181u, 32u, 1u, "isr:trice isr message, SysTick is %6zd\n"},
+ /* trice_1 ( trice32_1 ) */ {13182u, 32u, 1u, "isr:trice_1 isr message, SysTick is %6d\n"},
+ /* trice_1 ( trice32_1 ) */ {13183u, 32u, 1u, "isr:trice_1 isr message, SysTick is %6d\n"},
+ /* trice_1 ( trice32_1 ) */ {13184u, 32u, 1u, "isr:trice_1 isr message, SysTick is %6d\n"},
+ /* trice_1 ( trice32_1 ) */ {13185u, 32u, 1u, "isr:trice_1 isr message, SysTick is %6d\n"},
+ /* trice64 ( trice64_6 ) */ {13091u, 64u, 6u, "len:float-L %Le %Lf %Lg %LE %LF %LG\n"},
+ /* trice64 ( trice64_6 ) */ {13090u, 64u, 6u, "len:float-l %le %lf %lg %lE %lF %lG\n"},
+ /* trice16 ( trice16_8 ) */ {13084u, 16u, 8u, "len:h %hd %hi %hu %ho %hO %hx %hX %hb\n"},
+ /* trice8 ( trice8_8 ) */ {13083u, 8u, 8u, "len:hh %hhd %hhi %hhu %hho %hhO %hhx %hhX %hhb\n"},
+ /* trice64 ( trice64_8 ) */ {13087u, 64u, 8u, "len:j %jd %ji %ju %jo %jO %jx %jX %jb\n"},
+ /* trice32 ( trice32_8 ) */ {13085u, 32u, 8u, "len:l %ld %li %lu %lo %lO %lx %lX %lb\n"},
+ /* trice64 ( trice64_8 ) */ {13086u, 64u, 8u, "len:ll %lld %lli %llu %llo %llO %llx %llX %llb\n"},
+ /* trice64 ( trice64_8 ) */ {13089u, 64u, 8u, "len:t %td %ti %tu %to %tO %tx %tX %tb\n"},
+ /* trice64 ( trice64_8 ) */ {13088u, 64u, 8u, "len:z %zd %zi %zu %zo %zO %zx %zX %zb\n"},
+ /* trice ( trice32_2 ) */ {1126u, 32u, 2u, "log:from=%u phase=%u\n"},
+ /* trice ( trice32_2 ) */ {1219u, 32u, 2u, "log:from=%u phase=%u\n"},
+ /* trice ( trice32_2 ) */ {3310u, 32u, 2u, "log:from=%u phase=%u\n"},
+ /* trice ( trice32_2 ) */ {5460u, 32u, 2u, "log:from=%u phase=%u\n"},
+ /* triceS ( triceS ) */ {1861u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "log:text=%s\n"},
+ /* triceS ( triceS ) */ {4470u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "log:text=%s\n"},
+ /* triceS ( triceS ) */ {5017u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "log:text=%s\n"},
+ /* triceS ( triceS ) */ {7615u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "log:text=%s\n"},
+ /* trice ( trice32_1 ) */ {2034u, 32u, 1u, "log:tick=%u\n"},
+ /* trice ( trice32_1 ) */ {4364u, 32u, 1u, "log:tick=%u\n"},
+ /* trice ( trice32_1 ) */ {5074u, 32u, 1u, "log:tick=%u\n"},
+ /* trice ( trice32_1 ) */ {6949u, 32u, 1u, "log:tick=%u\n"},
+ /* trice ( trice_0 ) */ {14811u, 32u, 0u, "m:12"},
+ /* trice ( trice_0 ) */ {14812u, 32u, 0u, "m:123\n"},
+ /* trice ( trice_0 ) */ {14804u, 32u, 0u, "message:J"},
+ /* TRICE ( TRICE_0 ) */ {13725u, 32u, 0u, "message:green+h:black\n"},
+ /* trice ( trice_0 ) */ {13775u, 32u, 0u, "message:green+h:black\n"},
+ /* TRICE ( TRICE_0 ) */ {13825u, 32u, 0u, "message:green+h:black\n"},
+ /* Trice ( Trice_0 ) */ {13875u, 32u, 0u, "message:green+h:black\n"},
+ /* TRICE ( TRICE_0 ) */ {13925u, 32u, 0u, "message:green+h:black\n"},
+ /* TRice ( TRice_0 ) */ {13975u, 32u, 0u, "message:green+h:black\n"},
+ /* trice16B ( trice16B ) */ {13285u, 16u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg: %04x\n"},
+ /* trice32 ( trice32_6 ) */ {13166u, 32u, 6u, "msg: message = %08x %08x %08x %08x %08x %08x\n"},
+ /* trice32 ( trice32_6 ) */ {13172u, 32u, 6u, "msg: messge = %08x %08x %08x %08x %08x %08x\n"},
+ /* Trice64 ( Trice64_1 ) */ {16343u, 64u, 1u, "msg:%.20f (double with more ciphers than precision)\n"},
+ /* Trice ( Trice32_1 ) */ {16342u, 32u, 1u, "msg:%.20f (float with more ciphers than precision)\n"},
+ /* Trice8B ( Trice8B ) */ {16339u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%02x \n"},
+ /* Trice32B ( Trice32B ) */ {16338u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%08x \n"},
+ /* trice32 ( trice32_1 ) */ {13413u, 32u, 1u, "msg:%O (%%O)\n"},
+ /* trice64 ( trice64_1 ) */ {13420u, 64u, 1u, "msg:%O (%%O)\n"},
+ /* trice32 ( trice32_1 ) */ {13414u, 32u, 1u, "msg:%X (%%X)\n"},
+ /* trice64 ( trice64_1 ) */ {13421u, 64u, 1u, "msg:%X (%%X)\n"},
+ /* trice32 ( trice32_1 ) */ {13411u, 32u, 1u, "msg:%b (%%b)\n"},
+ /* trice64 ( trice64_1 ) */ {13418u, 64u, 1u, "msg:%b (%%b)\n"},
+ /* trice32 ( trice32_1 ) */ {13416u, 32u, 1u, "msg:%d (%%d)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {13990u, 64u, 1u, "msg:%d (%%d)\n"},
+ /* Trice ( Trice32_1 ) */ {16341u, 32u, 1u, "msg:%f (default rounded float)\n"},
+ /* trice32 ( trice32_1 ) */ {13412u, 32u, 1u, "msg:%o (%%o)\n"},
+ /* trice64 ( trice64_1 ) */ {13419u, 64u, 1u, "msg:%o (%%o)\n"},
+ /* TRICE_N ( TRICE_N ) */ {15042u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15043u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15044u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15045u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15046u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15047u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15048u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15049u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15050u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15051u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15052u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15053u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15054u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15055u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15056u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15057u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15058u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15059u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15060u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15061u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15062u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15063u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15064u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15065u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15066u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15067u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15068u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15069u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15070u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {15071u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15072u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15073u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15074u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15075u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15076u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15077u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15078u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15079u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15080u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15081u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15082u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15083u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15084u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15085u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15086u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15087u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15088u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15089u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15090u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15091u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15092u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15093u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15094u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15095u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15096u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15097u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15098u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15099u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15100u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* triceN ( triceN ) */ {15101u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:%s\n"},
+ /* trice32 ( trice32_1 ) */ {13410u, 32u, 1u, "msg:%u (%%u)\n"},
+ /* trice64 ( trice64_1 ) */ {13417u, 64u, 1u, "msg:%u (%%u)\n"},
+ /* trice32 ( trice32_1 ) */ {13415u, 32u, 1u, "msg:%x (%%x)\n"},
+ /* trice64 ( trice64_1 ) */ {13422u, 64u, 1u, "msg:%x (%%x)\n"},
+ /* TRiceS ( TRiceS ) */ {13312u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:Hi %s!\n"},
+ /* TriceS ( TriceS ) */ {13313u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:Hi %s!\n"},
+ /* triceS ( triceS ) */ {13314u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:Hi %s!\n"},
+ /* TRiceN ( TRiceN ) */ {13315u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:Hi %s!\n"},
+ /* TriceN ( TriceN ) */ {13316u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:Hi %s!\n"},
+ /* triceN ( triceN ) */ {13317u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:Hi %s!\n"},
+ /* TRice ( TRice_0 ) */ {13008u, 32u, 0u, "msg:StartDefaultTask\n"},
+ /* TRice ( TRice_0 ) */ {13019u, 32u, 0u, "msg:StartDefaultTask\n"},
+ /* TRice ( TRice_0 ) */ {13009u, 32u, 0u, "msg:StartTask02:Diagnostics and TriceTransfer\n"},
+ /* TRice ( TRice_0 ) */ {13022u, 32u, 0u, "msg:StartTask02:Diagnostics and TriceTransfer\n"},
+ /* TRice64 ( TRice64_12 ) */ {15283u, 64u, 12u, "msg:Twelve 64-bit values: %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n"},
+ /* TRice64 ( TRice64_12 ) */ {15289u, 64u, 12u, "msg:Twelve 64-bit values: %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n"},
+ /* TRICE_S ( TRICE_S ) */ {13265u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:With TRICE_S:%s\n"},
+ /* TRICE_S ( TRICE_S ) */ {13267u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:With TRICE_S:%s\n"},
+ /* TRICE_S ( TRICE_S ) */ {13269u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:With TRICE_S:%s\n"},
+ /* TRiceS ( TRiceS ) */ {13263u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:With TRiceS:%s\n"},
+ /* TriceS ( TriceS ) */ {13261u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:With TriceS:%s\n"},
+ /* triceS ( triceS ) */ {13259u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "msg:With triceS:%s\n"},
+ /* trice8 ( trice8_12 ) */ {13563u, 8u, 12u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_12 ) */ {13575u, 16u, 12u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice32 ( trice32_12 ) */ {13587u, 32u, 12u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice64 ( trice64_12 ) */ {13599u, 64u, 12u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice8_12 ( trice8_12 ) */ {13611u, 8u, 12u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16_12 ( trice16_12 ) */ {13623u, 16u, 12u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice32_12 ( trice32_12 ) */ {13635u, 32u, 12u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice64_12 ( trice64_12 ) */ {13647u, 64u, 12u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8 ( Trice8_11 ) */ {13562u, 8u, 11u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice16 ( Trice16_11 ) */ {13574u, 16u, 11u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32 ( Trice32_11 ) */ {13586u, 32u, 11u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64 ( Trice64_11 ) */ {13598u, 64u, 11u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8_11 ( Trice8_11 ) */ {13610u, 8u, 11u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice16_11 ( Trice16_11 ) */ {13622u, 16u, 11u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32_11 ( Trice32_11 ) */ {13634u, 32u, 11u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64_11 ( Trice64_11 ) */ {13646u, 64u, 11u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8 ( TRice8_10 ) */ {13561u, 8u, 10u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice16 ( TRice16_10 ) */ {13573u, 16u, 10u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32 ( TRice32_10 ) */ {13585u, 32u, 10u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice64 ( TRice64_10 ) */ {13597u, 64u, 10u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8_10 ( TRice8_10 ) */ {13609u, 8u, 10u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice16_10 ( TRice16_10 ) */ {13621u, 16u, 10u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32_10 ( TRice32_10 ) */ {13633u, 32u, 10u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice64_10 ( TRice64_10 ) */ {13645u, 64u, 10u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice8 ( trice8_9 ) */ {13560u, 8u, 9u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_9 ) */ {13572u, 16u, 9u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice32 ( trice32_9 ) */ {13584u, 32u, 9u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice64 ( trice64_9 ) */ {13596u, 64u, 9u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice8_9 ( trice8_9 ) */ {13608u, 8u, 9u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16_9 ( trice16_9 ) */ {13620u, 16u, 9u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice32_9 ( trice32_9 ) */ {13632u, 32u, 9u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice64_9 ( trice64_9 ) */ {13644u, 64u, 9u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8 ( Trice8_8 ) */ {13559u, 8u, 8u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice16 ( Trice16_8 ) */ {13571u, 16u, 8u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32 ( Trice32_8 ) */ {13583u, 32u, 8u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64 ( Trice64_8 ) */ {13595u, 64u, 8u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8_8 ( Trice8_8 ) */ {13607u, 8u, 8u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice16_8 ( Trice16_8 ) */ {13619u, 16u, 8u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32_8 ( Trice32_8 ) */ {13631u, 32u, 8u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64_8 ( Trice64_8 ) */ {13643u, 64u, 8u, "msg:value=%d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8 ( TRice8_7 ) */ {13558u, 8u, 7u, "msg:value=%d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice16 ( TRice16_7 ) */ {13570u, 16u, 7u, "msg:value=%d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32 ( TRice32_7 ) */ {13582u, 32u, 7u, "msg:value=%d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice64 ( TRice64_7 ) */ {13594u, 64u, 7u, "msg:value=%d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8_7 ( TRice8_7 ) */ {13606u, 8u, 7u, "msg:value=%d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice16_7 ( TRice16_7 ) */ {13618u, 16u, 7u, "msg:value=%d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32_7 ( TRice32_7 ) */ {13630u, 32u, 7u, "msg:value=%d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice64_7 ( TRice64_7 ) */ {13642u, 64u, 7u, "msg:value=%d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice8 ( trice8_6 ) */ {13557u, 8u, 6u, "msg:value=%d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_6 ) */ {13569u, 16u, 6u, "msg:value=%d, %d, %d, %d, %d, %d\n"},
+ /* trice32 ( trice32_6 ) */ {13581u, 32u, 6u, "msg:value=%d, %d, %d, %d, %d, %d\n"},
+ /* trice64 ( trice64_6 ) */ {13593u, 64u, 6u, "msg:value=%d, %d, %d, %d, %d, %d\n"},
+ /* trice8_6 ( trice8_6 ) */ {13605u, 8u, 6u, "msg:value=%d, %d, %d, %d, %d, %d\n"},
+ /* trice16_6 ( trice16_6 ) */ {13617u, 16u, 6u, "msg:value=%d, %d, %d, %d, %d, %d\n"},
+ /* trice32_6 ( trice32_6 ) */ {13629u, 32u, 6u, "msg:value=%d, %d, %d, %d, %d, %d\n"},
+ /* trice64_6 ( trice64_6 ) */ {13641u, 64u, 6u, "msg:value=%d, %d, %d, %d, %d, %d\n"},
+ /* Trice8 ( Trice8_5 ) */ {13556u, 8u, 5u, "msg:value=%d, %d, %d, %d, %d\n"},
+ /* Trice16 ( Trice16_5 ) */ {13568u, 16u, 5u, "msg:value=%d, %d, %d, %d, %d\n"},
+ /* Trice32 ( Trice32_5 ) */ {13580u, 32u, 5u, "msg:value=%d, %d, %d, %d, %d\n"},
+ /* Trice64 ( Trice64_5 ) */ {13592u, 64u, 5u, "msg:value=%d, %d, %d, %d, %d\n"},
+ /* Trice8_5 ( Trice8_5 ) */ {13604u, 8u, 5u, "msg:value=%d, %d, %d, %d, %d\n"},
+ /* Trice16_5 ( Trice16_5 ) */ {13616u, 16u, 5u, "msg:value=%d, %d, %d, %d, %d\n"},
+ /* Trice32_5 ( Trice32_5 ) */ {13628u, 32u, 5u, "msg:value=%d, %d, %d, %d, %d\n"},
+ /* Trice64_5 ( Trice64_5 ) */ {13640u, 64u, 5u, "msg:value=%d, %d, %d, %d, %d\n"},
+ /* TRice8 ( TRice8_4 ) */ {13555u, 8u, 4u, "msg:value=%d, %d, %d, %d\n"},
+ /* TRice16 ( TRice16_4 ) */ {13567u, 16u, 4u, "msg:value=%d, %d, %d, %d\n"},
+ /* TRice32 ( TRice32_4 ) */ {13579u, 32u, 4u, "msg:value=%d, %d, %d, %d\n"},
+ /* TRice64 ( TRice64_4 ) */ {13591u, 64u, 4u, "msg:value=%d, %d, %d, %d\n"},
+ /* TRice8_4 ( TRice8_4 ) */ {13603u, 8u, 4u, "msg:value=%d, %d, %d, %d\n"},
+ /* TRice16_4 ( TRice16_4 ) */ {13615u, 16u, 4u, "msg:value=%d, %d, %d, %d\n"},
+ /* TRice32_4 ( TRice32_4 ) */ {13627u, 32u, 4u, "msg:value=%d, %d, %d, %d\n"},
+ /* TRice64_4 ( TRice64_4 ) */ {13639u, 64u, 4u, "msg:value=%d, %d, %d, %d\n"},
+ /* trice8 ( trice8_3 ) */ {13554u, 8u, 3u, "msg:value=%d, %d, %d\n"},
+ /* trice16 ( trice16_3 ) */ {13566u, 16u, 3u, "msg:value=%d, %d, %d\n"},
+ /* trice32 ( trice32_3 ) */ {13578u, 32u, 3u, "msg:value=%d, %d, %d\n"},
+ /* trice64 ( trice64_3 ) */ {13590u, 64u, 3u, "msg:value=%d, %d, %d\n"},
+ /* trice8_3 ( trice8_3 ) */ {13602u, 8u, 3u, "msg:value=%d, %d, %d\n"},
+ /* trice16_3 ( trice16_3 ) */ {13614u, 16u, 3u, "msg:value=%d, %d, %d\n"},
+ /* trice32_3 ( trice32_3 ) */ {13626u, 32u, 3u, "msg:value=%d, %d, %d\n"},
+ /* trice64_3 ( trice64_3 ) */ {13638u, 64u, 3u, "msg:value=%d, %d, %d\n"},
+ /* Trice8 ( Trice8_2 ) */ {13553u, 8u, 2u, "msg:value=%d, %d\n"},
+ /* Trice16 ( Trice16_2 ) */ {13565u, 16u, 2u, "msg:value=%d, %d\n"},
+ /* Trice32 ( Trice32_2 ) */ {13577u, 32u, 2u, "msg:value=%d, %d\n"},
+ /* Trice64 ( Trice64_2 ) */ {13589u, 64u, 2u, "msg:value=%d, %d\n"},
+ /* Trice8_2 ( Trice8_2 ) */ {13601u, 8u, 2u, "msg:value=%d, %d\n"},
+ /* Trice16_2 ( Trice16_2 ) */ {13613u, 16u, 2u, "msg:value=%d, %d\n"},
+ /* Trice32_2 ( Trice32_2 ) */ {13625u, 32u, 2u, "msg:value=%d, %d\n"},
+ /* Trice64_2 ( Trice64_2 ) */ {13637u, 64u, 2u, "msg:value=%d, %d\n"},
+ /* TRice8 ( TRice8_1 ) */ {13552u, 8u, 1u, "msg:value=%d\n"},
+ /* TRice16 ( TRice16_1 ) */ {13564u, 16u, 1u, "msg:value=%d\n"},
+ /* TRice32 ( TRice32_1 ) */ {13576u, 32u, 1u, "msg:value=%d\n"},
+ /* TRice64 ( TRice64_1 ) */ {13588u, 64u, 1u, "msg:value=%d\n"},
+ /* TRice8_1 ( TRice8_1 ) */ {13600u, 8u, 1u, "msg:value=%d\n"},
+ /* TRice16_1 ( TRice16_1 ) */ {13612u, 16u, 1u, "msg:value=%d\n"},
+ /* TRice32_1 ( TRice32_1 ) */ {13624u, 32u, 1u, "msg:value=%d\n"},
+ /* TRice64_1 ( TRice64_1 ) */ {13636u, 64u, 1u, "msg:value=%d\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {13504u, 8u, 1u, "msg:value=%u\n"},
+ /* TRICE8_1 ( TRICE8_1 ) */ {13505u, 8u, 1u, "msg:value=%u\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {13506u, 8u, 1u, "msg:value=%u\n"},
+ /* TRICE8_1 ( TRICE8_1 ) */ {13507u, 8u, 1u, "msg:value=%u\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {13508u, 8u, 1u, "msg:value=%u\n"},
+ /* TRICE8_1 ( TRICE8_1 ) */ {13509u, 8u, 1u, "msg:value=%u\n"},
+ /* trice8 ( trice8_1 ) */ {13510u, 8u, 1u, "msg:value=%u\n"},
+ /* trice8_1 ( trice8_1 ) */ {13511u, 8u, 1u, "msg:value=%u\n"},
+ /* Trice8 ( Trice8_1 ) */ {13512u, 8u, 1u, "msg:value=%u\n"},
+ /* Trice8_1 ( Trice8_1 ) */ {13513u, 8u, 1u, "msg:value=%u\n"},
+ /* TRice8 ( TRice8_1 ) */ {13514u, 8u, 1u, "msg:value=%u\n"},
+ /* TRice8_1 ( TRice8_1 ) */ {13515u, 8u, 1u, "msg:value=%u\n"},
+ /* TRICE16 ( TRICE16_1 ) */ {13516u, 16u, 1u, "msg:value=%u\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {13517u, 16u, 1u, "msg:value=%u\n"},
+ /* TRICE16 ( TRICE16_1 ) */ {13518u, 16u, 1u, "msg:value=%u\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {13519u, 16u, 1u, "msg:value=%u\n"},
+ /* TRICE16 ( TRICE16_1 ) */ {13520u, 16u, 1u, "msg:value=%u\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {13521u, 16u, 1u, "msg:value=%u\n"},
+ /* trice16 ( trice16_1 ) */ {13522u, 16u, 1u, "msg:value=%u\n"},
+ /* trice16_1 ( trice16_1 ) */ {13523u, 16u, 1u, "msg:value=%u\n"},
+ /* Trice16 ( Trice16_1 ) */ {13524u, 16u, 1u, "msg:value=%u\n"},
+ /* Trice16_1 ( Trice16_1 ) */ {13525u, 16u, 1u, "msg:value=%u\n"},
+ /* TRice16 ( TRice16_1 ) */ {13526u, 16u, 1u, "msg:value=%u\n"},
+ /* TRice16_1 ( TRice16_1 ) */ {13527u, 16u, 1u, "msg:value=%u\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {13528u, 32u, 1u, "msg:value=%u\n"},
+ /* TRICE32_1 ( TRICE32_1 ) */ {13529u, 32u, 1u, "msg:value=%u\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {13530u, 32u, 1u, "msg:value=%u\n"},
+ /* TRICE32_1 ( TRICE32_1 ) */ {13531u, 32u, 1u, "msg:value=%u\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {13532u, 32u, 1u, "msg:value=%u\n"},
+ /* TRICE32_1 ( TRICE32_1 ) */ {13533u, 32u, 1u, "msg:value=%u\n"},
+ /* trice32 ( trice32_1 ) */ {13534u, 32u, 1u, "msg:value=%u\n"},
+ /* trice32_1 ( trice32_1 ) */ {13535u, 32u, 1u, "msg:value=%u\n"},
+ /* Trice32 ( Trice32_1 ) */ {13536u, 32u, 1u, "msg:value=%u\n"},
+ /* Trice32_1 ( Trice32_1 ) */ {13537u, 32u, 1u, "msg:value=%u\n"},
+ /* TRice32 ( TRice32_1 ) */ {13538u, 32u, 1u, "msg:value=%u\n"},
+ /* TRice32_1 ( TRice32_1 ) */ {13539u, 32u, 1u, "msg:value=%u\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {13540u, 64u, 1u, "msg:value=%u\n"},
+ /* TRICE64_1 ( TRICE64_1 ) */ {13541u, 64u, 1u, "msg:value=%u\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {13542u, 64u, 1u, "msg:value=%u\n"},
+ /* TRICE64_1 ( TRICE64_1 ) */ {13543u, 64u, 1u, "msg:value=%u\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {13544u, 64u, 1u, "msg:value=%u\n"},
+ /* TRICE64_1 ( TRICE64_1 ) */ {13545u, 64u, 1u, "msg:value=%u\n"},
+ /* trice64 ( trice64_1 ) */ {13546u, 64u, 1u, "msg:value=%u\n"},
+ /* trice64_1 ( trice64_1 ) */ {13547u, 64u, 1u, "msg:value=%u\n"},
+ /* Trice64 ( Trice64_1 ) */ {13548u, 64u, 1u, "msg:value=%u\n"},
+ /* Trice64_1 ( Trice64_1 ) */ {13549u, 64u, 1u, "msg:value=%u\n"},
+ /* TRice64 ( TRice64_1 ) */ {13550u, 64u, 1u, "msg:value=%u\n"},
+ /* TRice64_1 ( TRice64_1 ) */ {13551u, 64u, 1u, "msg:value=%u\n"},
+ /* TRice ( TRice32_5 ) */ {13332u, 32u, 5u, "msg:x = %g = %d.%03d, %d.%03d\n"},
+ /* TRice ( TRice_0 ) */ {13453u, 32u, 0u, "no value\n"},
+ /* Trice ( Trice_0 ) */ {13454u, 32u, 0u, "no value\n"},
+ /* trice ( trice_0 ) */ {13455u, 32u, 0u, "no value\n"},
+ /* TRice8 ( TRice_0 ) */ {13456u, 32u, 0u, "no value\n"},
+ /* Trice8 ( Trice_0 ) */ {13457u, 32u, 0u, "no value\n"},
+ /* trice8 ( trice_0 ) */ {13458u, 32u, 0u, "no value\n"},
+ /* TRice16 ( TRice_0 ) */ {13459u, 32u, 0u, "no value\n"},
+ /* Trice16 ( Trice_0 ) */ {13460u, 32u, 0u, "no value\n"},
+ /* trice16 ( trice_0 ) */ {13461u, 32u, 0u, "no value\n"},
+ /* TRice32 ( TRice_0 ) */ {13462u, 32u, 0u, "no value\n"},
+ /* Trice32 ( Trice_0 ) */ {13463u, 32u, 0u, "no value\n"},
+ /* trice32 ( trice_0 ) */ {13464u, 32u, 0u, "no value\n"},
+ /* TRice64 ( TRice_0 ) */ {13465u, 32u, 0u, "no value\n"},
+ /* Trice64 ( Trice_0 ) */ {13466u, 32u, 0u, "no value\n"},
+ /* trice64 ( trice_0 ) */ {13467u, 32u, 0u, "no value\n"},
+ /* TRice_0 ( TRice_0 ) */ {13468u, 32u, 0u, "no value\n"},
+ /* Trice_0 ( Trice_0 ) */ {13469u, 32u, 0u, "no value\n"},
+ /* trice_0 ( trice_0 ) */ {13470u, 32u, 0u, "no value\n"},
+ /* TRice8_0 ( TRice_0 ) */ {13471u, 32u, 0u, "no value\n"},
+ /* Trice8_0 ( Trice_0 ) */ {13472u, 32u, 0u, "no value\n"},
+ /* trice8_0 ( trice_0 ) */ {13473u, 32u, 0u, "no value\n"},
+ /* TRice16_0 ( TRice_0 ) */ {13474u, 32u, 0u, "no value\n"},
+ /* Trice16_0 ( Trice_0 ) */ {13475u, 32u, 0u, "no value\n"},
+ /* trice16_0 ( trice_0 ) */ {13476u, 32u, 0u, "no value\n"},
+ /* TRice32_0 ( TRice_0 ) */ {13477u, 32u, 0u, "no value\n"},
+ /* Trice32_0 ( Trice_0 ) */ {13478u, 32u, 0u, "no value\n"},
+ /* trice32_0 ( trice_0 ) */ {13479u, 32u, 0u, "no value\n"},
+ /* TRice64_0 ( TRice_0 ) */ {13480u, 32u, 0u, "no value\n"},
+ /* Trice64_0 ( Trice_0 ) */ {13481u, 32u, 0u, "no value\n"},
+ /* trice64_0 ( trice_0 ) */ {13482u, 32u, 0u, "no value\n"},
+ /* TRice0 ( TRice_0 ) */ {13483u, 32u, 0u, "no value\n"},
+ /* Trice0 ( Trice_0 ) */ {13484u, 32u, 0u, "no value\n"},
+ /* trice0 ( trice_0 ) */ {13485u, 32u, 0u, "no value\n"},
+ /* TRice ( TRice_0 ) */ {13486u, 32u, 0u, "no value\n"},
+ /* Trice ( Trice_0 ) */ {13487u, 32u, 0u, "no value\n"},
+ /* trice ( trice_0 ) */ {13488u, 32u, 0u, "no value\n"},
+ /* TRICE ( TRICE_0 ) */ {13735u, 32u, 0u, "notice:blue:white+h\n"},
+ /* trice ( trice_0 ) */ {13785u, 32u, 0u, "notice:blue:white+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13835u, 32u, 0u, "notice:blue:white+h\n"},
+ /* Trice ( Trice_0 ) */ {13885u, 32u, 0u, "notice:blue:white+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13935u, 32u, 0u, "notice:blue:white+h\n"},
+ /* TRice ( TRice_0 ) */ {13985u, 32u, 0u, "notice:blue:white+h\n"},
+ /* Trice ( Trice_0 ) */ {15309u, 32u, 0u, "ok!\n"},
+ /* TRice ( TRice_0 ) */ {13056u, 32u, 0u, "ok\n"},
+ /* TRice ( TRice_0 ) */ {13058u, 32u, 0u, "ok\n"},
+ /* TRice ( TRice_0 ) */ {13060u, 32u, 0u, "ok\n"},
+ /* TRice ( TRice_0 ) */ {13062u, 32u, 0u, "ok\n"},
+ /* TRice ( TRice_0 ) */ {13064u, 32u, 0u, "ok\n"},
+ /* TRice ( TRice_0 ) */ {13066u, 32u, 0u, "ok\n"},
+ /* TRice ( TRice_0 ) */ {13068u, 32u, 0u, "ok\n"},
+ /* TRice ( TRice_0 ) */ {13070u, 32u, 0u, "ok\n"},
+ /* TRice ( TRice_0 ) */ {13072u, 32u, 0u, "ok\n"},
+ /* TRice ( TRice_0 ) */ {13074u, 32u, 0u, "ok\n"},
+ /* TRice ( TRice_0 ) */ {13076u, 32u, 0u, "ok\n"},
+ /* TRice ( TRice_0 ) */ {13078u, 32u, 0u, "ok\n"},
+ /* TRice ( TRice_0 ) */ {13079u, 32u, 0u, "ok\n"},
+ /* TRice ( TRice_0 ) */ {13080u, 32u, 0u, "ok\n"},
+ /* TRice ( TRice_0 ) */ {13081u, 32u, 0u, "ok\n"},
+ /* TRice ( TRice32_1 ) */ {13338u, 32u, 1u, "rd: 15\t%-4d\tPad with spaces (width 4, left justified)\n"},
+ /* TRice ( TRice32_1 ) */ {13337u, 32u, 1u, "rd: 15\t%4d \tPad with spaces (width 4, right justified)\n"},
+ /* trice8B ( trice8B ) */ {13279u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd: %02x\n"},
+ /* trice ( trice32_1 ) */ {13348u, 32u, 1u, "rd: 'A' \t%q \tQuoted character\n"},
+ /* TRice ( TRice32_1 ) */ {13336u, 32u, 1u, "rd: +15 \t%+d \tAlways show sign\n"},
+ /* TRice ( TRice32_1 ) */ {13339u, 32u, 1u, "rd: 0015\t%04d\tPad with zeroes (width 4)\n"},
+ /* TRice ( TRice32_1 ) */ {13344u, 32u, 1u, "rd: 0xf \t%#x \tBase 16, with leading 0x\n"},
+ /* trice ( trice32_1 ) */ {13361u, 32u, 1u, "rd: 1.234560e+02\t\t%e \t%%e Scientific notation\n"},
+ /* trice64 ( trice64_1 ) */ {13367u, 64u, 1u, "rd: 1.234560e+02\t\t%e \t%%e Scientific notation\n"},
+ /* TRice ( TRice32_1 ) */ {13340u, 32u, 1u, "rd: 1111 \t%b \tBase 2\n"},
+ /* trice ( trice32_1 ) */ {13365u, 32u, 1u, "rd: 123.456\t\t%g\t\t%%g Exponent as needed, necessary digits only\n"},
+ /* trice64 ( trice64_1 ) */ {13371u, 64u, 1u, "rd: 123.456\t\t%g\t\t%%g Exponent as needed, necessary digits only\n"},
+ /* trice ( trice32_1 ) */ {13362u, 32u, 1u, "rd: 123.456000\t\t%f \t%%f Decimal point, no exponent\n"},
+ /* trice64 ( trice64_1 ) */ {13368u, 64u, 1u, "rd: 123.456000\t\t%f \t%%f Decimal point, no exponent\n"},
+ /* trice ( trice32_1 ) */ {13363u, 32u, 1u, "rd: 123.46\t\t\t%.2f\t\t%%.2f Default width, precision 2\n"},
+ /* trice64 ( trice64_1 ) */ {13369u, 64u, 1u, "rd: 123.46\t\t\t%.2f \t%%.2f Default width, precision 2\n"},
+ /* TRice ( TRice32_1 ) */ {13335u, 32u, 1u, "rd: 15 \t%d \tBase 10\n"},
+ /* TRice ( TRice32_1 ) */ {13341u, 32u, 1u, "rd: 17 \t%o \tBase 8\n"},
+ /* triceS ( triceS ) */ {13378u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd: 63 61 66 c3 a9 \t% x\tHex dump with spaces\n"},
+ /* triceS ( triceS ) */ {13377u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd: 636166c3a9 \t\t%x\tHex dump of byte values\n"},
+ /* trice ( trice32_1 ) */ {13347u, 32u, 1u, "rd: A \t%c \tCharacter\n"},
+ /* TRice ( TRice32_1 ) */ {13343u, 32u, 1u, "rd: F \t%X \tBase 16, uppercase\n"},
+ /* trice ( trice32_1 ) */ {13349u, 32u, 1u, "rd: U+0041 \t%U \tUnicode\n"},
+ /* trice ( trice32_1 ) */ {13350u, 32u, 1u, "rd: U+0041 'A' \t%#U \tUnicode with character\n"},
+ /* triceS ( triceS ) */ {13376u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd: \"café\" \t\t%q\t\tQuoted string\n"},
+ /* triceS ( triceS ) */ {13373u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd: café \t\t\t%s\t\tPlain string\n"},
+ /* triceS ( triceS ) */ {13375u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd: café␣␣ \t\t%-6s \t\tWidth 6, left justify\n"},
+ /* TRice ( TRice32_1 ) */ {13342u, 32u, 1u, "rd: f \t%x \tBase 16, lowercase\n"},
+ /* trice ( trice32_1 ) */ {13364u, 32u, 1u, "rd: ␣␣123.46\t\t%8.2f\t%%8.2f Width 8, precision 2\n"},
+ /* trice64 ( trice64_1 ) */ {13370u, 64u, 1u, "rd: ␣␣123.46\t\t%8.2f \t%%8.2f Width 8, precision 2\n"},
+ /* triceS ( triceS ) */ {13374u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd: ␣␣café \t\t%6s \t\tWidth 6, right justify\n"},
+ /* trice ( trice32_1 ) */ {13398u, 32u, 1u, "rd:%E (%%E)\n"},
+ /* trice64 ( trice64_1 ) */ {13401u, 64u, 1u, "rd:%E (%%E)\n"},
+ /* trice ( trice32_1 ) */ {13399u, 32u, 1u, "rd:%F (%%F)\n"},
+ /* trice64 ( trice64_1 ) */ {13402u, 64u, 1u, "rd:%F (%%F)\n"},
+ /* trice ( trice32_1 ) */ {13400u, 32u, 1u, "rd:%G (%%G)\n"},
+ /* trice64 ( trice64_1 ) */ {13403u, 64u, 1u, "rd:%G (%%G)\n"},
+ /* trice ( trice32_1 ) */ {13404u, 32u, 1u, "rd:%e (%%e)\n"},
+ /* trice64 ( trice64_1 ) */ {13407u, 64u, 1u, "rd:%e (%%e)\n"},
+ /* trice ( trice32_1 ) */ {13405u, 32u, 1u, "rd:%f (%%f)\n"},
+ /* trice64 ( trice64_1 ) */ {13408u, 64u, 1u, "rd:%f (%%f)\n"},
+ /* trice ( trice32_1 ) */ {13406u, 32u, 1u, "rd:%g (%%g)\n"},
+ /* trice64 ( trice64_1 ) */ {13409u, 64u, 1u, "rd:%g (%%g)\n"},
+ /* TriceS ( TriceS ) */ {16344u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd:%s <- float number as string\n"},
+ /* trice ( trice32_12 ) */ {14003u, 32u, 12u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_12 ) */ {14015u, 32u, 12u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_12 ) */ {14027u, 32u, 12u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_12 ) */ {15114u, 32u, 12u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_11 ) */ {14002u, 32u, 11u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_11 ) */ {14014u, 32u, 11u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_11 ) */ {14026u, 32u, 11u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_11 ) */ {15113u, 32u, 11u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_10 ) */ {14001u, 32u, 10u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_10 ) */ {14013u, 32u, 10u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_10 ) */ {14025u, 32u, 10u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_10 ) */ {15112u, 32u, 10u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_9 ) */ {14000u, 32u, 9u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_9 ) */ {14012u, 32u, 9u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_9 ) */ {14024u, 32u, 9u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_9 ) */ {15111u, 32u, 9u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_8 ) */ {13999u, 32u, 8u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_8 ) */ {14011u, 32u, 8u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_8 ) */ {14023u, 32u, 8u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_8 ) */ {15110u, 32u, 8u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_7 ) */ {13998u, 32u, 7u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_7 ) */ {14010u, 32u, 7u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_7 ) */ {14022u, 32u, 7u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_7 ) */ {15109u, 32u, 7u, "rd:TRICE %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_6 ) */ {13997u, 32u, 6u, "rd:TRICE %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_6 ) */ {14009u, 32u, 6u, "rd:TRICE %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_6 ) */ {14021u, 32u, 6u, "rd:TRICE %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_6 ) */ {15108u, 32u, 6u, "rd:TRICE %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_5 ) */ {13996u, 32u, 5u, "rd:TRICE %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_5 ) */ {14008u, 32u, 5u, "rd:TRICE %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_5 ) */ {14020u, 32u, 5u, "rd:TRICE %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_5 ) */ {15107u, 32u, 5u, "rd:TRICE %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_4 ) */ {13995u, 32u, 4u, "rd:TRICE %d, %d, %d, %d\n"},
+ /* trice ( trice32_4 ) */ {14007u, 32u, 4u, "rd:TRICE %d, %d, %d, %d\n"},
+ /* trice ( trice32_4 ) */ {14019u, 32u, 4u, "rd:TRICE %d, %d, %d, %d\n"},
+ /* trice ( trice32_4 ) */ {15106u, 32u, 4u, "rd:TRICE %d, %d, %d, %d\n"},
+ /* trice ( trice32_3 ) */ {13994u, 32u, 3u, "rd:TRICE %d, %d, %d\n"},
+ /* trice ( trice32_3 ) */ {14006u, 32u, 3u, "rd:TRICE %d, %d, %d\n"},
+ /* trice ( trice32_3 ) */ {14018u, 32u, 3u, "rd:TRICE %d, %d, %d\n"},
+ /* trice ( trice32_3 ) */ {15105u, 32u, 3u, "rd:TRICE %d, %d, %d\n"},
+ /* trice ( trice32_2 ) */ {13993u, 32u, 2u, "rd:TRICE %d, %d\n"},
+ /* trice ( trice32_2 ) */ {14005u, 32u, 2u, "rd:TRICE %d, %d\n"},
+ /* trice ( trice32_2 ) */ {14017u, 32u, 2u, "rd:TRICE %d, %d\n"},
+ /* trice ( trice32_2 ) */ {15104u, 32u, 2u, "rd:TRICE %d, %d\n"},
+ /* trice ( trice32_1 ) */ {13992u, 32u, 1u, "rd:TRICE %d\n"},
+ /* trice ( trice32_1 ) */ {14004u, 32u, 1u, "rd:TRICE %d\n"},
+ /* trice ( trice32_1 ) */ {14016u, 32u, 1u, "rd:TRICE %d\n"},
+ /* trice ( trice32_1 ) */ {15103u, 32u, 1u, "rd:TRICE %d\n"},
+ /* trice ( trice32_1 ) */ {14942u, 32u, 1u, "rd:TRICE float %+.9f (%%.9f)\n"},
+ /* trice ( trice32_1 ) */ {14947u, 32u, 1u, "rd:TRICE float %+.9f (%%.9f)\n"},
+ /* trice ( trice32_1 ) */ {14944u, 32u, 1u, "rd:TRICE float %+9.6f (%%9.6f)\n"},
+ /* trice ( trice32_1 ) */ {14949u, 32u, 1u, "rd:TRICE float %+9.6f (%%9.6f)\n"},
+ /* trice ( trice32_1 ) */ {14943u, 32u, 1u, "rd:TRICE float %+9.f (%%9.f)\n"},
+ /* trice ( trice32_1 ) */ {14948u, 32u, 1u, "rd:TRICE float %+9.f (%%9.f)\n"},
+ /* trice ( trice32_1 ) */ {14941u, 32u, 1u, "rd:TRICE float %+9f (%%9f)\n"},
+ /* trice ( trice32_1 ) */ {14946u, 32u, 1u, "rd:TRICE float %+9f (%%9f)\n"},
+ /* trice ( trice32_1 ) */ {14940u, 32u, 1u, "rd:TRICE float %+f (%%f)\n"},
+ /* trice ( trice32_1 ) */ {14945u, 32u, 1u, "rd:TRICE float %+f (%%f)\n"},
+ /* trice ( trice32_1 ) */ {14952u, 32u, 1u, "rd:TRICE float %-.9f (%%.9f)\n"},
+ /* trice ( trice32_1 ) */ {14957u, 32u, 1u, "rd:TRICE float %-.9f (%%.9f)\n"},
+ /* trice ( trice32_1 ) */ {14954u, 32u, 1u, "rd:TRICE float %-9.6f (%%9.6f)\n"},
+ /* trice ( trice32_1 ) */ {14959u, 32u, 1u, "rd:TRICE float %-9.6f (%%9.6f)\n"},
+ /* trice ( trice32_1 ) */ {14953u, 32u, 1u, "rd:TRICE float %-9.f (%%9.f)\n"},
+ /* trice ( trice32_1 ) */ {14958u, 32u, 1u, "rd:TRICE float %-9.f (%%9.f)\n"},
+ /* trice ( trice32_1 ) */ {14951u, 32u, 1u, "rd:TRICE float %-9f (%%9f)\n"},
+ /* trice ( trice32_1 ) */ {14956u, 32u, 1u, "rd:TRICE float %-9f (%%9f)\n"},
+ /* trice ( trice32_1 ) */ {14950u, 32u, 1u, "rd:TRICE float %-f (%%f)\n"},
+ /* trice ( trice32_1 ) */ {14955u, 32u, 1u, "rd:TRICE float %-f (%%f)\n"},
+ /* trice ( trice32_1 ) */ {14932u, 32u, 1u, "rd:TRICE float %.9f (%%.9f)\n"},
+ /* trice ( trice32_1 ) */ {14937u, 32u, 1u, "rd:TRICE float %.9f (%%.9f)\n"},
+ /* trice ( trice32_1 ) */ {14934u, 32u, 1u, "rd:TRICE float %9.6f (%%9.6f)\n"},
+ /* trice ( trice32_1 ) */ {14939u, 32u, 1u, "rd:TRICE float %9.6f (%%9.6f)\n"},
+ /* trice ( trice32_1 ) */ {14933u, 32u, 1u, "rd:TRICE float %9.f (%%9.f)\n"},
+ /* trice ( trice32_1 ) */ {14938u, 32u, 1u, "rd:TRICE float %9.f (%%9.f)\n"},
+ /* trice ( trice32_1 ) */ {14931u, 32u, 1u, "rd:TRICE float %9f (%%9f)\n"},
+ /* trice ( trice32_1 ) */ {14936u, 32u, 1u, "rd:TRICE float %9f (%%9f)\n"},
+ /* TRICE ( TRICE32_1 ) */ {14976u, 32u, 1u, "rd:TRICE float %E (%%E)\n"},
+ /* trice ( trice32_1 ) */ {14995u, 32u, 1u, "rd:TRICE float %E (%%E)\n"},
+ /* TRICE ( TRICE32_1 ) */ {14977u, 32u, 1u, "rd:TRICE float %F (%%F)\n"},
+ /* trice ( trice32_1 ) */ {14996u, 32u, 1u, "rd:TRICE float %F (%%F)\n"},
+ /* TRICE ( TRICE32_1 ) */ {14978u, 32u, 1u, "rd:TRICE float %G (%%G)\n"},
+ /* trice ( trice32_1 ) */ {14997u, 32u, 1u, "rd:TRICE float %G (%%G)\n"},
+ /* TRICE ( TRICE32_1 ) */ {14973u, 32u, 1u, "rd:TRICE float %e (%%e)\n"},
+ /* trice ( trice32_1 ) */ {14992u, 32u, 1u, "rd:TRICE float %e (%%e)\n"},
+ /* trice ( trice32_1 ) */ {14930u, 32u, 1u, "rd:TRICE float %f (%%f)\n"},
+ /* trice ( trice32_1 ) */ {14935u, 32u, 1u, "rd:TRICE float %f (%%f)\n"},
+ /* TRICE ( TRICE32_1 ) */ {14974u, 32u, 1u, "rd:TRICE float %f (%%f)\n"},
+ /* trice ( trice32_1 ) */ {14993u, 32u, 1u, "rd:TRICE float %f (%%f)\n"},
+ /* TRICE ( TRICE32_1 ) */ {14975u, 32u, 1u, "rd:TRICE float %g (%%g)\n"},
+ /* trice ( trice32_1 ) */ {14994u, 32u, 1u, "rd:TRICE float %g (%%g)\n"},
+ /* trice16 ( trice16_12 ) */ {14262u, 16u, 12u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_12 ) */ {14274u, 16u, 12u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_12 ) */ {14286u, 16u, 12u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_11 ) */ {14261u, 16u, 11u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_11 ) */ {14273u, 16u, 11u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_11 ) */ {14285u, 16u, 11u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_10 ) */ {14260u, 16u, 10u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_10 ) */ {14272u, 16u, 10u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_10 ) */ {14284u, 16u, 10u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_9 ) */ {14259u, 16u, 9u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_9 ) */ {14271u, 16u, 9u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_9 ) */ {14283u, 16u, 9u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_8 ) */ {14258u, 16u, 8u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_8 ) */ {14270u, 16u, 8u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_8 ) */ {14282u, 16u, 8u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_7 ) */ {14257u, 16u, 7u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_7 ) */ {14269u, 16u, 7u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_7 ) */ {14281u, 16u, 7u, "rd:TRICE16 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_6 ) */ {14256u, 16u, 6u, "rd:TRICE16 %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_6 ) */ {14268u, 16u, 6u, "rd:TRICE16 %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_6 ) */ {14280u, 16u, 6u, "rd:TRICE16 %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_5 ) */ {14255u, 16u, 5u, "rd:TRICE16 %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_5 ) */ {14267u, 16u, 5u, "rd:TRICE16 %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_5 ) */ {14279u, 16u, 5u, "rd:TRICE16 %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_4 ) */ {14254u, 16u, 4u, "rd:TRICE16 %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_4 ) */ {14266u, 16u, 4u, "rd:TRICE16 %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_4 ) */ {14278u, 16u, 4u, "rd:TRICE16 %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_3 ) */ {14253u, 16u, 3u, "rd:TRICE16 %d, %d, %d\n"},
+ /* trice16 ( trice16_3 ) */ {14265u, 16u, 3u, "rd:TRICE16 %d, %d, %d\n"},
+ /* trice16 ( trice16_3 ) */ {14277u, 16u, 3u, "rd:TRICE16 %d, %d, %d\n"},
+ /* trice16 ( trice16_2 ) */ {14252u, 16u, 2u, "rd:TRICE16 %d, %d\n"},
+ /* trice16 ( trice16_2 ) */ {14264u, 16u, 2u, "rd:TRICE16 %d, %d\n"},
+ /* trice16 ( trice16_2 ) */ {14276u, 16u, 2u, "rd:TRICE16 %d, %d\n"},
+ /* trice16 ( trice16_1 ) */ {14251u, 16u, 1u, "rd:TRICE16 %d\n"},
+ /* trice16 ( trice16_1 ) */ {14263u, 16u, 1u, "rd:TRICE16 %d\n"},
+ /* trice16 ( trice16_1 ) */ {14275u, 16u, 1u, "rd:TRICE16 %d\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {14288u, 16u, 1u, "rd:TRICE16_1 %d\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {14300u, 16u, 1u, "rd:TRICE16_1 %d\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {14312u, 16u, 1u, "rd:TRICE16_1 %d\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {15031u, 16u, 1u, "rd:TRICE16_1 line %b (%%b -1)\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {15034u, 16u, 1u, "rd:TRICE16_1 line %d (%%d -1)\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {15032u, 16u, 1u, "rd:TRICE16_1 line %o (%%o -1)\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {15028u, 16u, 1u, "rd:TRICE16_1 line %t (%%t ,0)\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {15029u, 16u, 1u, "rd:TRICE16_1 line %t (%%t ,2)\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {15030u, 16u, 1u, "rd:TRICE16_1 line %u (%%u -1)\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {15033u, 16u, 1u, "rd:TRICE16_1 line %x (%%x -1)\n"},
+ /* TRICE16_10 ( TRICE16_10 ) */ {14297u, 16u, 10u, "rd:TRICE16_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_10 ( TRICE16_10 ) */ {14309u, 16u, 10u, "rd:TRICE16_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_10 ( TRICE16_10 ) */ {14321u, 16u, 10u, "rd:TRICE16_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_11 ( TRICE16_11 ) */ {14298u, 16u, 11u, "rd:TRICE16_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_11 ( TRICE16_11 ) */ {14310u, 16u, 11u, "rd:TRICE16_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_11 ( TRICE16_11 ) */ {14322u, 16u, 11u, "rd:TRICE16_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_12 ( TRICE16_12 ) */ {14299u, 16u, 12u, "rd:TRICE16_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_12 ( TRICE16_12 ) */ {14311u, 16u, 12u, "rd:TRICE16_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_12 ( TRICE16_12 ) */ {14323u, 16u, 12u, "rd:TRICE16_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_2 ( TRICE16_2 ) */ {14289u, 16u, 2u, "rd:TRICE16_2 %d, %d\n"},
+ /* TRICE16_2 ( TRICE16_2 ) */ {14301u, 16u, 2u, "rd:TRICE16_2 %d, %d\n"},
+ /* TRICE16_2 ( TRICE16_2 ) */ {14313u, 16u, 2u, "rd:TRICE16_2 %d, %d\n"},
+ /* TRICE16_3 ( TRICE16_3 ) */ {14290u, 16u, 3u, "rd:TRICE16_3 %d, %d, %d\n"},
+ /* TRICE16_3 ( TRICE16_3 ) */ {14302u, 16u, 3u, "rd:TRICE16_3 %d, %d, %d\n"},
+ /* TRICE16_3 ( TRICE16_3 ) */ {14314u, 16u, 3u, "rd:TRICE16_3 %d, %d, %d\n"},
+ /* TRICE16_4 ( TRICE16_4 ) */ {14291u, 16u, 4u, "rd:TRICE16_4 %d, %d, %d, %d\n"},
+ /* TRICE16_4 ( TRICE16_4 ) */ {14303u, 16u, 4u, "rd:TRICE16_4 %d, %d, %d, %d\n"},
+ /* TRICE16_4 ( TRICE16_4 ) */ {14315u, 16u, 4u, "rd:TRICE16_4 %d, %d, %d, %d\n"},
+ /* TRICE16_5 ( TRICE16_5 ) */ {14292u, 16u, 5u, "rd:TRICE16_5 %d, %d, %d, %d, %d\n"},
+ /* TRICE16_5 ( TRICE16_5 ) */ {14304u, 16u, 5u, "rd:TRICE16_5 %d, %d, %d, %d, %d\n"},
+ /* TRICE16_5 ( TRICE16_5 ) */ {14316u, 16u, 5u, "rd:TRICE16_5 %d, %d, %d, %d, %d\n"},
+ /* TRICE16_6 ( TRICE16_6 ) */ {14293u, 16u, 6u, "rd:TRICE16_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_6 ( TRICE16_6 ) */ {14305u, 16u, 6u, "rd:TRICE16_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_6 ( TRICE16_6 ) */ {14317u, 16u, 6u, "rd:TRICE16_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_7 ( TRICE16_7 ) */ {14294u, 16u, 7u, "rd:TRICE16_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_7 ( TRICE16_7 ) */ {14306u, 16u, 7u, "rd:TRICE16_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_7 ( TRICE16_7 ) */ {14318u, 16u, 7u, "rd:TRICE16_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_8 ( TRICE16_8 ) */ {14295u, 16u, 8u, "rd:TRICE16_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_8 ( TRICE16_8 ) */ {14307u, 16u, 8u, "rd:TRICE16_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_8 ( TRICE16_8 ) */ {14319u, 16u, 8u, "rd:TRICE16_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_9 ( TRICE16_9 ) */ {14296u, 16u, 9u, "rd:TRICE16_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_9 ( TRICE16_9 ) */ {14308u, 16u, 9u, "rd:TRICE16_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE16_9 ( TRICE16_9 ) */ {14320u, 16u, 9u, "rd:TRICE16_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_12 ) */ {14410u, 32u, 12u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_12 ) */ {14422u, 32u, 12u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_12 ) */ {14434u, 32u, 12u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_11 ) */ {14409u, 32u, 11u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_11 ) */ {14421u, 32u, 11u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_11 ) */ {14433u, 32u, 11u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_10 ) */ {14408u, 32u, 10u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_10 ) */ {14420u, 32u, 10u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_10 ) */ {14432u, 32u, 10u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_9 ) */ {14407u, 32u, 9u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_9 ) */ {14419u, 32u, 9u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_9 ) */ {14431u, 32u, 9u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_8 ) */ {14406u, 32u, 8u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_8 ) */ {14418u, 32u, 8u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_8 ) */ {14430u, 32u, 8u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_7 ) */ {14405u, 32u, 7u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_7 ) */ {14417u, 32u, 7u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_7 ) */ {14429u, 32u, 7u, "rd:TRICE32 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_6 ) */ {14404u, 32u, 6u, "rd:TRICE32 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_6 ) */ {14416u, 32u, 6u, "rd:TRICE32 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_6 ) */ {14428u, 32u, 6u, "rd:TRICE32 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_5 ) */ {14403u, 32u, 5u, "rd:TRICE32 %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_5 ) */ {14415u, 32u, 5u, "rd:TRICE32 %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_5 ) */ {14427u, 32u, 5u, "rd:TRICE32 %d, %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_4 ) */ {14402u, 32u, 4u, "rd:TRICE32 %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_4 ) */ {14414u, 32u, 4u, "rd:TRICE32 %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_4 ) */ {14426u, 32u, 4u, "rd:TRICE32 %d, %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_3 ) */ {14401u, 32u, 3u, "rd:TRICE32 %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_3 ) */ {14413u, 32u, 3u, "rd:TRICE32 %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_3 ) */ {14425u, 32u, 3u, "rd:TRICE32 %d, %d, %d\n"},
+ /* TRICE32 ( TRICE32_2 ) */ {14400u, 32u, 2u, "rd:TRICE32 %d, %d\n"},
+ /* TRICE32 ( TRICE32_2 ) */ {14412u, 32u, 2u, "rd:TRICE32 %d, %d\n"},
+ /* TRICE32 ( TRICE32_2 ) */ {14424u, 32u, 2u, "rd:TRICE32 %d, %d\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {14399u, 32u, 1u, "rd:TRICE32 %d\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {14411u, 32u, 1u, "rd:TRICE32 %d\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {14423u, 32u, 1u, "rd:TRICE32 %d\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {15008u, 32u, 1u, "rd:TRICE32 float %12.6E (%%12.6E)\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {15009u, 32u, 1u, "rd:TRICE32 float %12.6F (%%12.6F)\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {15010u, 32u, 1u, "rd:TRICE32 float %12.6G (%%12.6G)\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {15005u, 32u, 1u, "rd:TRICE32 float %12.6e (%%12.6e)\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {15006u, 32u, 1u, "rd:TRICE32 float %12.6f (%%12.6f)\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {15007u, 32u, 1u, "rd:TRICE32 float %12.6g (%%12.6g)\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {14970u, 32u, 1u, "rd:TRICE32 float %E (%%E)\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {14971u, 32u, 1u, "rd:TRICE32 float %F (%%F)\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {14972u, 32u, 1u, "rd:TRICE32 float %G (%%G)\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {14967u, 32u, 1u, "rd:TRICE32 float %e (%%e)\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {14968u, 32u, 1u, "rd:TRICE32 float %f (%%f)\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {14969u, 32u, 1u, "rd:TRICE32 float %g (%%g)\n"},
+ /* TRICE32_1 ( TRICE32_1 ) */ {14436u, 32u, 1u, "rd:TRICE32_1 %d\n"},
+ /* TRICE32_1 ( TRICE32_1 ) */ {14448u, 32u, 1u, "rd:TRICE32_1 %d\n"},
+ /* TRICE32_1 ( TRICE32_1 ) */ {14460u, 32u, 1u, "rd:TRICE32_1 %d\n"},
+ /* TRICE32_1 ( TRICE32_1 ) */ {14964u, 32u, 1u, "rd:TRICE32_1 float %E (%%E)\n"},
+ /* TRICE32_1 ( TRICE32_1 ) */ {14965u, 32u, 1u, "rd:TRICE32_1 float %F (%%F)\n"},
+ /* TRICE32_1 ( TRICE32_1 ) */ {14966u, 32u, 1u, "rd:TRICE32_1 float %G (%%G)\n"},
+ /* TRICE32_1 ( TRICE32_1 ) */ {14961u, 32u, 1u, "rd:TRICE32_1 float %e (%%e)\n"},
+ /* TRICE32_1 ( TRICE32_1 ) */ {14962u, 32u, 1u, "rd:TRICE32_1 float %f (%%f)\n"},
+ /* TRICE32_1 ( TRICE32_1 ) */ {14963u, 32u, 1u, "rd:TRICE32_1 float %g (%%g)\n"},
+ /* TRICE32_10 ( TRICE32_10 ) */ {14445u, 32u, 10u, "rd:TRICE32_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_10 ( TRICE32_10 ) */ {14457u, 32u, 10u, "rd:TRICE32_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_10 ( TRICE32_10 ) */ {14469u, 32u, 10u, "rd:TRICE32_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_11 ( TRICE32_11 ) */ {14446u, 32u, 11u, "rd:TRICE32_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_11 ( TRICE32_11 ) */ {14458u, 32u, 11u, "rd:TRICE32_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_11 ( TRICE32_11 ) */ {14470u, 32u, 11u, "rd:TRICE32_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_12 ( TRICE32_12 ) */ {14447u, 32u, 12u, "rd:TRICE32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_12 ( TRICE32_12 ) */ {14459u, 32u, 12u, "rd:TRICE32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_12 ( TRICE32_12 ) */ {14471u, 32u, 12u, "rd:TRICE32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_2 ( TRICE32_2 ) */ {14437u, 32u, 2u, "rd:TRICE32_2 %d, %d\n"},
+ /* TRICE32_2 ( TRICE32_2 ) */ {14449u, 32u, 2u, "rd:TRICE32_2 %d, %d\n"},
+ /* TRICE32_2 ( TRICE32_2 ) */ {14461u, 32u, 2u, "rd:TRICE32_2 %d, %d\n"},
+ /* TRICE32_3 ( TRICE32_3 ) */ {14438u, 32u, 3u, "rd:TRICE32_3 %d, %d, %d\n"},
+ /* TRICE32_3 ( TRICE32_3 ) */ {14450u, 32u, 3u, "rd:TRICE32_3 %d, %d, %d\n"},
+ /* TRICE32_3 ( TRICE32_3 ) */ {14462u, 32u, 3u, "rd:TRICE32_3 %d, %d, %d\n"},
+ /* TRICE32_4 ( TRICE32_4 ) */ {14439u, 32u, 4u, "rd:TRICE32_4 %d, %d, %d, %d\n"},
+ /* TRICE32_4 ( TRICE32_4 ) */ {14451u, 32u, 4u, "rd:TRICE32_4 %d, %d, %d, %d\n"},
+ /* TRICE32_4 ( TRICE32_4 ) */ {14463u, 32u, 4u, "rd:TRICE32_4 %d, %d, %d, %d\n"},
+ /* TRICE32_5 ( TRICE32_5 ) */ {14440u, 32u, 5u, "rd:TRICE32_5 %d, %d, %d, %d, %d\n"},
+ /* TRICE32_5 ( TRICE32_5 ) */ {14452u, 32u, 5u, "rd:TRICE32_5 %d, %d, %d, %d, %d\n"},
+ /* TRICE32_5 ( TRICE32_5 ) */ {14464u, 32u, 5u, "rd:TRICE32_5 %d, %d, %d, %d, %d\n"},
+ /* TRICE32_6 ( TRICE32_6 ) */ {14441u, 32u, 6u, "rd:TRICE32_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_6 ( TRICE32_6 ) */ {14453u, 32u, 6u, "rd:TRICE32_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_6 ( TRICE32_6 ) */ {14465u, 32u, 6u, "rd:TRICE32_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_7 ( TRICE32_7 ) */ {14442u, 32u, 7u, "rd:TRICE32_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_7 ( TRICE32_7 ) */ {14454u, 32u, 7u, "rd:TRICE32_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_7 ( TRICE32_7 ) */ {14466u, 32u, 7u, "rd:TRICE32_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_8 ( TRICE32_8 ) */ {14443u, 32u, 8u, "rd:TRICE32_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_8 ( TRICE32_8 ) */ {14455u, 32u, 8u, "rd:TRICE32_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_8 ( TRICE32_8 ) */ {14467u, 32u, 8u, "rd:TRICE32_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_9 ( TRICE32_9 ) */ {14444u, 32u, 9u, "rd:TRICE32_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_9 ( TRICE32_9 ) */ {14456u, 32u, 9u, "rd:TRICE32_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE32_9 ( TRICE32_9 ) */ {14468u, 32u, 9u, "rd:TRICE32_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_12 ) */ {14558u, 64u, 12u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_12 ) */ {14570u, 64u, 12u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_12 ) */ {14582u, 64u, 12u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_11 ) */ {14557u, 64u, 11u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_11 ) */ {14569u, 64u, 11u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_11 ) */ {14581u, 64u, 11u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_10 ) */ {14556u, 64u, 10u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_10 ) */ {14568u, 64u, 10u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_10 ) */ {14580u, 64u, 10u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_9 ) */ {14555u, 64u, 9u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_9 ) */ {14567u, 64u, 9u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_9 ) */ {14579u, 64u, 9u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_8 ) */ {14554u, 64u, 8u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_8 ) */ {14566u, 64u, 8u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_8 ) */ {14578u, 64u, 8u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_7 ) */ {14553u, 64u, 7u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_7 ) */ {14565u, 64u, 7u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_7 ) */ {14577u, 64u, 7u, "rd:TRICE64 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_6 ) */ {14552u, 64u, 6u, "rd:TRICE64 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_6 ) */ {14564u, 64u, 6u, "rd:TRICE64 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_6 ) */ {14576u, 64u, 6u, "rd:TRICE64 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_5 ) */ {14551u, 64u, 5u, "rd:TRICE64 %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_5 ) */ {14563u, 64u, 5u, "rd:TRICE64 %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_5 ) */ {14575u, 64u, 5u, "rd:TRICE64 %d, %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_4 ) */ {14550u, 64u, 4u, "rd:TRICE64 %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_4 ) */ {14562u, 64u, 4u, "rd:TRICE64 %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_4 ) */ {14574u, 64u, 4u, "rd:TRICE64 %d, %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_3 ) */ {14549u, 64u, 3u, "rd:TRICE64 %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_3 ) */ {14561u, 64u, 3u, "rd:TRICE64 %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_3 ) */ {14573u, 64u, 3u, "rd:TRICE64 %d, %d, %d\n"},
+ /* TRICE64 ( TRICE64_2 ) */ {13210u, 64u, 2u, "rd:TRICE64 %d, %d\n"},
+ /* TRICE64 ( TRICE64_2 ) */ {14548u, 64u, 2u, "rd:TRICE64 %d, %d\n"},
+ /* TRICE64 ( TRICE64_2 ) */ {14560u, 64u, 2u, "rd:TRICE64 %d, %d\n"},
+ /* TRICE64 ( TRICE64_2 ) */ {14572u, 64u, 2u, "rd:TRICE64 %d, %d\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {14547u, 64u, 1u, "rd:TRICE64 %d\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {14559u, 64u, 1u, "rd:TRICE64 %d\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {14571u, 64u, 1u, "rd:TRICE64 %d\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {15015u, 64u, 1u, "rd:TRICE64 double %12.6E (%%12.6E), aDouble(y)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {15016u, 64u, 1u, "rd:TRICE64 double %12.6F (%%12.6F), aDouble(y)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {15017u, 64u, 1u, "rd:TRICE64 double %12.6G (%%12.6G), aDouble(y)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {15012u, 64u, 1u, "rd:TRICE64 double %12.6e (%%12.6e), aDouble(y)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {15013u, 64u, 1u, "rd:TRICE64 double %12.6f (%%12.6f), aDouble(y)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {15014u, 64u, 1u, "rd:TRICE64 double %12.6g (%%12.6g), aDouble(y)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {14982u, 64u, 1u, "rd:TRICE64 double %E (%%E), aDouble(y)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {15001u, 64u, 1u, "rd:TRICE64 double %E (%%E), aDouble(y)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {14983u, 64u, 1u, "rd:TRICE64 double %F (%%F), aDouble(y)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {15002u, 64u, 1u, "rd:TRICE64 double %F (%%F), aDouble(y)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {14984u, 64u, 1u, "rd:TRICE64 double %G (%%G), aDouble(y)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {15003u, 64u, 1u, "rd:TRICE64 double %G (%%G), aDouble(y)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {14979u, 64u, 1u, "rd:TRICE64 double %e (%%e), aDouble(y)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {14998u, 64u, 1u, "rd:TRICE64 double %e (%%e), aDouble(y)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {14980u, 64u, 1u, "rd:TRICE64 double %f (%%f), aDouble(y)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {14999u, 64u, 1u, "rd:TRICE64 double %f (%%f), aDouble(y)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {14981u, 64u, 1u, "rd:TRICE64 double %g (%%g), aDouble(y)\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {15000u, 64u, 1u, "rd:TRICE64 double %g (%%g), aDouble(y)\n"},
+ /* TRICE64_1 ( TRICE64_1 ) */ {14584u, 64u, 1u, "rd:TRICE64_1 %d\n"},
+ /* TRICE64_1 ( TRICE64_1 ) */ {14596u, 64u, 1u, "rd:TRICE64_1 %d\n"},
+ /* TRICE64_1 ( TRICE64_1 ) */ {14608u, 64u, 1u, "rd:TRICE64_1 %d\n"},
+ /* TRICE64_1 ( TRICE64_1 ) */ {14988u, 64u, 1u, "rd:TRICE64_1 double %E (%%E), aDouble(y)\n"},
+ /* TRICE64_1 ( TRICE64_1 ) */ {14989u, 64u, 1u, "rd:TRICE64_1 double %F (%%F), aDouble(y)\n"},
+ /* TRICE64_1 ( TRICE64_1 ) */ {14990u, 64u, 1u, "rd:TRICE64_1 double %G (%%G), aDouble(y)\n"},
+ /* TRICE64_1 ( TRICE64_1 ) */ {14985u, 64u, 1u, "rd:TRICE64_1 double %e (%%e), aDouble(y)\n"},
+ /* TRICE64_1 ( TRICE64_1 ) */ {14986u, 64u, 1u, "rd:TRICE64_1 double %f (%%f), aDouble(y)\n"},
+ /* TRICE64_1 ( TRICE64_1 ) */ {14987u, 64u, 1u, "rd:TRICE64_1 double %g (%%g), aDouble(y)\n"},
+ /* TRICE64_10 ( TRICE64_10 ) */ {14593u, 64u, 10u, "rd:TRICE64_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_10 ( TRICE64_10 ) */ {14605u, 64u, 10u, "rd:TRICE64_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_10 ( TRICE64_10 ) */ {14617u, 64u, 10u, "rd:TRICE64_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_11 ( TRICE64_11 ) */ {14594u, 64u, 11u, "rd:TRICE64_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_11 ( TRICE64_11 ) */ {14606u, 64u, 11u, "rd:TRICE64_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_11 ( TRICE64_11 ) */ {14618u, 64u, 11u, "rd:TRICE64_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_12 ( TRICE64_12 ) */ {14595u, 64u, 12u, "rd:TRICE64_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_12 ( TRICE64_12 ) */ {14607u, 64u, 12u, "rd:TRICE64_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_12 ( TRICE64_12 ) */ {14619u, 64u, 12u, "rd:TRICE64_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_2 ( TRICE64_2 ) */ {14585u, 64u, 2u, "rd:TRICE64_2 %d, %d\n"},
+ /* TRICE64_2 ( TRICE64_2 ) */ {14597u, 64u, 2u, "rd:TRICE64_2 %d, %d\n"},
+ /* TRICE64_2 ( TRICE64_2 ) */ {14609u, 64u, 2u, "rd:TRICE64_2 %d, %d\n"},
+ /* TRICE64_3 ( TRICE64_3 ) */ {14586u, 64u, 3u, "rd:TRICE64_3 %d, %d, %d\n"},
+ /* TRICE64_3 ( TRICE64_3 ) */ {14598u, 64u, 3u, "rd:TRICE64_3 %d, %d, %d\n"},
+ /* TRICE64_3 ( TRICE64_3 ) */ {14610u, 64u, 3u, "rd:TRICE64_3 %d, %d, %d\n"},
+ /* TRICE64_4 ( TRICE64_4 ) */ {14587u, 64u, 4u, "rd:TRICE64_4 %d, %d, %d, %d\n"},
+ /* TRICE64_4 ( TRICE64_4 ) */ {14599u, 64u, 4u, "rd:TRICE64_4 %d, %d, %d, %d\n"},
+ /* TRICE64_4 ( TRICE64_4 ) */ {14611u, 64u, 4u, "rd:TRICE64_4 %d, %d, %d, %d\n"},
+ /* TRICE64_5 ( TRICE64_5 ) */ {14588u, 64u, 5u, "rd:TRICE64_5 %d, %d, %d, %d, %d\n"},
+ /* TRICE64_5 ( TRICE64_5 ) */ {14600u, 64u, 5u, "rd:TRICE64_5 %d, %d, %d, %d, %d\n"},
+ /* TRICE64_5 ( TRICE64_5 ) */ {14612u, 64u, 5u, "rd:TRICE64_5 %d, %d, %d, %d, %d\n"},
+ /* TRICE64_6 ( TRICE64_6 ) */ {14589u, 64u, 6u, "rd:TRICE64_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_6 ( TRICE64_6 ) */ {14601u, 64u, 6u, "rd:TRICE64_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_6 ( TRICE64_6 ) */ {14613u, 64u, 6u, "rd:TRICE64_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_7 ( TRICE64_7 ) */ {14590u, 64u, 7u, "rd:TRICE64_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_7 ( TRICE64_7 ) */ {14602u, 64u, 7u, "rd:TRICE64_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_7 ( TRICE64_7 ) */ {14614u, 64u, 7u, "rd:TRICE64_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_8 ( TRICE64_8 ) */ {14591u, 64u, 8u, "rd:TRICE64_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_8 ( TRICE64_8 ) */ {14603u, 64u, 8u, "rd:TRICE64_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_8 ( TRICE64_8 ) */ {14615u, 64u, 8u, "rd:TRICE64_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_9 ( TRICE64_9 ) */ {14592u, 64u, 9u, "rd:TRICE64_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_9 ( TRICE64_9 ) */ {14604u, 64u, 9u, "rd:TRICE64_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE64_9 ( TRICE64_9 ) */ {14616u, 64u, 9u, "rd:TRICE64_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_12 ) */ {14114u, 8u, 12u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_12 ) */ {14126u, 8u, 12u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_12 ) */ {14138u, 8u, 12u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_11 ) */ {14113u, 8u, 11u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_11 ) */ {14125u, 8u, 11u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_11 ) */ {14137u, 8u, 11u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_10 ) */ {14112u, 8u, 10u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_10 ) */ {14124u, 8u, 10u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_10 ) */ {14136u, 8u, 10u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_9 ) */ {14111u, 8u, 9u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_9 ) */ {14123u, 8u, 9u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_9 ) */ {14135u, 8u, 9u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_8 ) */ {14110u, 8u, 8u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_8 ) */ {14122u, 8u, 8u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_8 ) */ {14134u, 8u, 8u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_7 ) */ {14109u, 8u, 7u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_7 ) */ {14121u, 8u, 7u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_7 ) */ {14133u, 8u, 7u, "rd:TRICE8 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_6 ) */ {14108u, 8u, 6u, "rd:TRICE8 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_6 ) */ {14120u, 8u, 6u, "rd:TRICE8 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_6 ) */ {14132u, 8u, 6u, "rd:TRICE8 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_5 ) */ {14107u, 8u, 5u, "rd:TRICE8 %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_5 ) */ {14119u, 8u, 5u, "rd:TRICE8 %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_5 ) */ {14131u, 8u, 5u, "rd:TRICE8 %d, %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_4 ) */ {14106u, 8u, 4u, "rd:TRICE8 %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_4 ) */ {14118u, 8u, 4u, "rd:TRICE8 %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_4 ) */ {14130u, 8u, 4u, "rd:TRICE8 %d, %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_3 ) */ {14105u, 8u, 3u, "rd:TRICE8 %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_3 ) */ {14117u, 8u, 3u, "rd:TRICE8 %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_3 ) */ {14129u, 8u, 3u, "rd:TRICE8 %d, %d, %d\n"},
+ /* TRICE8 ( TRICE8_2 ) */ {14104u, 8u, 2u, "rd:TRICE8 %d, %d\n"},
+ /* TRICE8 ( TRICE8_2 ) */ {14116u, 8u, 2u, "rd:TRICE8 %d, %d\n"},
+ /* TRICE8 ( TRICE8_2 ) */ {14128u, 8u, 2u, "rd:TRICE8 %d, %d\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {14103u, 8u, 1u, "rd:TRICE8 %d\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {14115u, 8u, 1u, "rd:TRICE8 %d\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {14127u, 8u, 1u, "rd:TRICE8 %d\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {15024u, 8u, 1u, "rd:TRICE8 line %O (%%O ,-1)\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {15025u, 8u, 1u, "rd:TRICE8 line %X (%%X ,-1)\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {15022u, 8u, 1u, "rd:TRICE8 line %b (%%b ,-1)\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {15027u, 8u, 1u, "rd:TRICE8 line %d (%%d ,-1)\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {15023u, 8u, 1u, "rd:TRICE8 line %o (%%o ,-1)\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {15019u, 8u, 1u, "rd:TRICE8 line %t (%%t ,0)\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {15020u, 8u, 1u, "rd:TRICE8 line %t (%%t ,2)\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {15021u, 8u, 1u, "rd:TRICE8 line %u (%%u ,-1)\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {15026u, 8u, 1u, "rd:TRICE8 line %x (%%x ,-1)\n"},
+ /* TRICE8_1 ( TRICE8_1 ) */ {14140u, 8u, 1u, "rd:TRICE8_1 %d\n"},
+ /* TRICE8_1 ( TRICE8_1 ) */ {14152u, 8u, 1u, "rd:TRICE8_1 %d\n"},
+ /* TRICE8_1 ( TRICE8_1 ) */ {14164u, 8u, 1u, "rd:TRICE8_1 %d\n"},
+ /* TRICE8_10 ( TRICE8_10 ) */ {14149u, 8u, 10u, "rd:TRICE8_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_10 ( TRICE8_10 ) */ {14161u, 8u, 10u, "rd:TRICE8_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_10 ( TRICE8_10 ) */ {14173u, 8u, 10u, "rd:TRICE8_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_11 ( TRICE8_11 ) */ {14150u, 8u, 11u, "rd:TRICE8_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_11 ( TRICE8_11 ) */ {14162u, 8u, 11u, "rd:TRICE8_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_11 ( TRICE8_11 ) */ {14174u, 8u, 11u, "rd:TRICE8_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_12 ( TRICE8_12 ) */ {14151u, 8u, 12u, "rd:TRICE8_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_12 ( TRICE8_12 ) */ {14163u, 8u, 12u, "rd:TRICE8_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_12 ( TRICE8_12 ) */ {14175u, 8u, 12u, "rd:TRICE8_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_2 ( TRICE8_2 ) */ {14141u, 8u, 2u, "rd:TRICE8_2 %d, %d\n"},
+ /* TRICE8_2 ( TRICE8_2 ) */ {14153u, 8u, 2u, "rd:TRICE8_2 %d, %d\n"},
+ /* TRICE8_2 ( TRICE8_2 ) */ {14165u, 8u, 2u, "rd:TRICE8_2 %d, %d\n"},
+ /* TRICE8_3 ( TRICE8_3 ) */ {14142u, 8u, 3u, "rd:TRICE8_3 %d, %d, %d\n"},
+ /* TRICE8_3 ( TRICE8_3 ) */ {14154u, 8u, 3u, "rd:TRICE8_3 %d, %d, %d\n"},
+ /* TRICE8_3 ( TRICE8_3 ) */ {14166u, 8u, 3u, "rd:TRICE8_3 %d, %d, %d\n"},
+ /* TRICE8_4 ( TRICE8_4 ) */ {14143u, 8u, 4u, "rd:TRICE8_4 %d, %d, %d, %d\n"},
+ /* TRICE8_4 ( TRICE8_4 ) */ {14155u, 8u, 4u, "rd:TRICE8_4 %d, %d, %d, %d\n"},
+ /* TRICE8_4 ( TRICE8_4 ) */ {14167u, 8u, 4u, "rd:TRICE8_4 %d, %d, %d, %d\n"},
+ /* TRICE8_5 ( TRICE8_5 ) */ {14144u, 8u, 5u, "rd:TRICE8_5 %d, %d, %d, %d, %d\n"},
+ /* TRICE8_5 ( TRICE8_5 ) */ {14156u, 8u, 5u, "rd:TRICE8_5 %d, %d, %d, %d, %d\n"},
+ /* TRICE8_5 ( TRICE8_5 ) */ {14168u, 8u, 5u, "rd:TRICE8_5 %d, %d, %d, %d, %d\n"},
+ /* TRICE8_6 ( TRICE8_6 ) */ {14145u, 8u, 6u, "rd:TRICE8_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_6 ( TRICE8_6 ) */ {14157u, 8u, 6u, "rd:TRICE8_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_6 ( TRICE8_6 ) */ {14169u, 8u, 6u, "rd:TRICE8_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_7 ( TRICE8_7 ) */ {14146u, 8u, 7u, "rd:TRICE8_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_7 ( TRICE8_7 ) */ {14158u, 8u, 7u, "rd:TRICE8_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_7 ( TRICE8_7 ) */ {14170u, 8u, 7u, "rd:TRICE8_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_8 ( TRICE8_8 ) */ {14147u, 8u, 8u, "rd:TRICE8_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_8 ( TRICE8_8 ) */ {14159u, 8u, 8u, "rd:TRICE8_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_8 ( TRICE8_8 ) */ {14171u, 8u, 8u, "rd:TRICE8_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_9 ( TRICE8_9 ) */ {14148u, 8u, 9u, "rd:TRICE8_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_9 ( TRICE8_9 ) */ {14160u, 8u, 9u, "rd:TRICE8_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE8_9 ( TRICE8_9 ) */ {14172u, 8u, 9u, "rd:TRICE8_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_1 ( TRICE32_1 ) */ {14029u, 32u, 1u, "rd:TRICE_1 %d\n"},
+ /* TRICE_1 ( TRICE32_1 ) */ {14041u, 32u, 1u, "rd:TRICE_1 %d\n"},
+ /* TRICE_1 ( TRICE32_1 ) */ {14053u, 32u, 1u, "rd:TRICE_1 %d\n"},
+ /* trice ( trice32_1 ) */ {15116u, 32u, 1u, "rd:TRICE_1 %d\n"},
+ /* TRICE_10 ( TRICE32_10 ) */ {14038u, 32u, 10u, "rd:TRICE_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_10 ( TRICE32_10 ) */ {14050u, 32u, 10u, "rd:TRICE_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_10 ( TRICE32_10 ) */ {14062u, 32u, 10u, "rd:TRICE_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_10 ) */ {15125u, 32u, 10u, "rd:TRICE_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_11 ( TRICE32_11 ) */ {14039u, 32u, 11u, "rd:TRICE_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_11 ( TRICE32_11 ) */ {14051u, 32u, 11u, "rd:TRICE_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_11 ( TRICE32_11 ) */ {14063u, 32u, 11u, "rd:TRICE_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_11 ) */ {15126u, 32u, 11u, "rd:TRICE_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_12 ( TRICE32_12 ) */ {14040u, 32u, 12u, "rd:TRICE_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_12 ( TRICE32_12 ) */ {14052u, 32u, 12u, "rd:TRICE_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_12 ( TRICE32_12 ) */ {14064u, 32u, 12u, "rd:TRICE_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_12 ) */ {15127u, 32u, 12u, "rd:TRICE_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_2 ( TRICE32_2 ) */ {14030u, 32u, 2u, "rd:TRICE_2 %d, %d\n"},
+ /* TRICE_2 ( TRICE32_2 ) */ {14042u, 32u, 2u, "rd:TRICE_2 %d, %d\n"},
+ /* TRICE_2 ( TRICE32_2 ) */ {14054u, 32u, 2u, "rd:TRICE_2 %d, %d\n"},
+ /* trice ( trice32_2 ) */ {15117u, 32u, 2u, "rd:TRICE_2 %d, %d\n"},
+ /* TRICE_3 ( TRICE32_3 ) */ {14031u, 32u, 3u, "rd:TRICE_3 %d, %d, %d\n"},
+ /* TRICE_3 ( TRICE32_3 ) */ {14043u, 32u, 3u, "rd:TRICE_3 %d, %d, %d\n"},
+ /* TRICE_3 ( TRICE32_3 ) */ {14055u, 32u, 3u, "rd:TRICE_3 %d, %d, %d\n"},
+ /* trice ( trice32_3 ) */ {15118u, 32u, 3u, "rd:TRICE_3 %d, %d, %d\n"},
+ /* TRICE_4 ( TRICE32_4 ) */ {14032u, 32u, 4u, "rd:TRICE_4 %d, %d, %d, %d\n"},
+ /* TRICE_4 ( TRICE32_4 ) */ {14044u, 32u, 4u, "rd:TRICE_4 %d, %d, %d, %d\n"},
+ /* TRICE_4 ( TRICE32_4 ) */ {14056u, 32u, 4u, "rd:TRICE_4 %d, %d, %d, %d\n"},
+ /* trice ( trice32_4 ) */ {15119u, 32u, 4u, "rd:TRICE_4 %d, %d, %d, %d\n"},
+ /* TRICE_5 ( TRICE32_5 ) */ {14033u, 32u, 5u, "rd:TRICE_5 %d, %d, %d, %d, %d\n"},
+ /* TRICE_5 ( TRICE32_5 ) */ {14045u, 32u, 5u, "rd:TRICE_5 %d, %d, %d, %d, %d\n"},
+ /* TRICE_5 ( TRICE32_5 ) */ {14057u, 32u, 5u, "rd:TRICE_5 %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_5 ) */ {15120u, 32u, 5u, "rd:TRICE_5 %d, %d, %d, %d, %d\n"},
+ /* TRICE_6 ( TRICE32_6 ) */ {14034u, 32u, 6u, "rd:TRICE_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_6 ( TRICE32_6 ) */ {14046u, 32u, 6u, "rd:TRICE_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_6 ( TRICE32_6 ) */ {14058u, 32u, 6u, "rd:TRICE_6 %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_6 ) */ {15121u, 32u, 6u, "rd:TRICE_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_7 ( TRICE32_7 ) */ {14035u, 32u, 7u, "rd:TRICE_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_7 ( TRICE32_7 ) */ {14047u, 32u, 7u, "rd:TRICE_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_7 ( TRICE32_7 ) */ {14059u, 32u, 7u, "rd:TRICE_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_7 ) */ {15122u, 32u, 7u, "rd:TRICE_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_8 ( TRICE32_8 ) */ {14036u, 32u, 8u, "rd:TRICE_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_8 ( TRICE32_8 ) */ {14048u, 32u, 8u, "rd:TRICE_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_8 ( TRICE32_8 ) */ {14060u, 32u, 8u, "rd:TRICE_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_8 ) */ {15123u, 32u, 8u, "rd:TRICE_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_9 ( TRICE32_9 ) */ {14037u, 32u, 9u, "rd:TRICE_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_9 ( TRICE32_9 ) */ {14049u, 32u, 9u, "rd:TRICE_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE_9 ( TRICE32_9 ) */ {14061u, 32u, 9u, "rd:TRICE_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_9 ) */ {15124u, 32u, 9u, "rd:TRICE_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice ( TRice32_12 ) */ {13133u, 32u, 12u, "rd:TRice %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice ( TRice32_11 ) */ {13132u, 32u, 11u, "rd:TRice %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice ( TRice32_10 ) */ {13131u, 32u, 10u, "rd:TRice %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice ( TRice32_9 ) */ {13130u, 32u, 9u, "rd:TRice %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice ( TRice32_8 ) */ {13129u, 32u, 8u, "rd:TRice %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice ( TRice32_7 ) */ {13128u, 32u, 7u, "rd:TRice %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice ( TRice32_6 ) */ {13127u, 32u, 6u, "rd:TRice %d, %d, %d, %d, %d, %d\n"},
+ /* TRice ( TRice32_5 ) */ {13126u, 32u, 5u, "rd:TRice %d, %d, %d, %d, %d\n"},
+ /* TRice ( TRice32_4 ) */ {13125u, 32u, 4u, "rd:TRice %d, %d, %d, %d\n"},
+ /* TRice ( TRice32_3 ) */ {13124u, 32u, 3u, "rd:TRice %d, %d, %d\n"},
+ /* TRice ( TRice32_2 ) */ {13123u, 32u, 2u, "rd:TRice %d, %d\n"},
+ /* TRice ( TRice32_1 ) */ {13122u, 32u, 1u, "rd:TRice %d\n"},
+ /* TRice16 ( TRice16_12 ) */ {14360u, 16u, 12u, "rd:TRice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice16 ( TRice16_11 ) */ {14359u, 16u, 11u, "rd:TRice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice16 ( TRice16_10 ) */ {14358u, 16u, 10u, "rd:TRice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice16 ( TRice16_9 ) */ {14357u, 16u, 9u, "rd:TRice16 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice16 ( TRice16_8 ) */ {14356u, 16u, 8u, "rd:TRice16 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice16 ( TRice16_7 ) */ {14355u, 16u, 7u, "rd:TRice16 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice16 ( TRice16_6 ) */ {14354u, 16u, 6u, "rd:TRice16 %d, %d, %d, %d, %d, %d\n"},
+ /* TRice16 ( TRice16_5 ) */ {14353u, 16u, 5u, "rd:TRice16 %d, %d, %d, %d, %d\n"},
+ /* TRice16 ( TRice16_4 ) */ {14352u, 16u, 4u, "rd:TRice16 %d, %d, %d, %d\n"},
+ /* TRice16 ( TRice16_3 ) */ {14351u, 16u, 3u, "rd:TRice16 %d, %d, %d\n"},
+ /* TRice16 ( TRice16_2 ) */ {14350u, 16u, 2u, "rd:TRice16 %d, %d\n"},
+ /* TRice16 ( TRice16_1 ) */ {14349u, 16u, 1u, "rd:TRice16 %d\n"},
+ /* TRice16_1 ( TRice16_1 ) */ {14386u, 16u, 1u, "rd:TRice16_1 %d\n"},
+ /* TRice16_10 ( TRice16_10 ) */ {14395u, 16u, 10u, "rd:TRice16_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice16_11 ( TRice16_11 ) */ {14396u, 16u, 11u, "rd:TRice16_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice16_12 ( TRice16_12 ) */ {14397u, 16u, 12u, "rd:TRice16_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice16_2 ( TRice16_2 ) */ {14387u, 16u, 2u, "rd:TRice16_2 %d, %d\n"},
+ /* TRice16_3 ( TRice16_3 ) */ {14388u, 16u, 3u, "rd:TRice16_3 %d, %d, %d\n"},
+ /* TRice16_4 ( TRice16_4 ) */ {14389u, 16u, 4u, "rd:TRice16_4 %d, %d, %d, %d\n"},
+ /* TRice16_5 ( TRice16_5 ) */ {14390u, 16u, 5u, "rd:TRice16_5 %d, %d, %d, %d, %d\n"},
+ /* TRice16_6 ( TRice16_6 ) */ {14391u, 16u, 6u, "rd:TRice16_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRice16_7 ( TRice16_7 ) */ {14392u, 16u, 7u, "rd:TRice16_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice16_8 ( TRice16_8 ) */ {14393u, 16u, 8u, "rd:TRice16_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice16_9 ( TRice16_9 ) */ {14394u, 16u, 9u, "rd:TRice16_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32 ( TRice32_12 ) */ {14508u, 32u, 12u, "rd:TRice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32 ( TRice32_11 ) */ {14507u, 32u, 11u, "rd:TRice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32 ( TRice32_10 ) */ {14506u, 32u, 10u, "rd:TRice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32 ( TRice32_9 ) */ {14505u, 32u, 9u, "rd:TRice32 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32 ( TRice32_8 ) */ {14504u, 32u, 8u, "rd:TRice32 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32 ( TRice32_7 ) */ {14503u, 32u, 7u, "rd:TRice32 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32 ( TRice32_6 ) */ {14502u, 32u, 6u, "rd:TRice32 %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32 ( TRice32_5 ) */ {14501u, 32u, 5u, "rd:TRice32 %d, %d, %d, %d, %d\n"},
+ /* TRice32 ( TRice32_4 ) */ {14500u, 32u, 4u, "rd:TRice32 %d, %d, %d, %d\n"},
+ /* TRice32 ( TRice32_3 ) */ {14499u, 32u, 3u, "rd:TRice32 %d, %d, %d\n"},
+ /* TRice32 ( TRice32_2 ) */ {14498u, 32u, 2u, "rd:TRice32 %d, %d\n"},
+ /* TRice32 ( TRice32_1 ) */ {14497u, 32u, 1u, "rd:TRice32 %d\n"},
+ /* TRice32 ( TRice32_4 ) */ {13251u, 32u, 4u, "rd:TRice32 int %X, float %f (%%f), %08x, %032b\n"},
+ /* TRice32 ( TRice32_4 ) */ {13245u, 32u, 4u, "rd:TRice32 int %d, float %f (%%f), %08x, %032b\n"},
+ /* TRice32 ( TRice32_4 ) */ {13246u, 32u, 4u, "rd:TRice32 int %d, float %f (%%f), %08x, %032b\n"},
+ /* TRice32 ( TRice32_4 ) */ {13248u, 32u, 4u, "rd:TRice32 int %d, float %f (%%f), %08x, %032b\n"},
+ /* TRice32 ( TRice32_4 ) */ {13249u, 32u, 4u, "rd:TRice32 int %d, float %f (%%f), %08x, %032b\n"},
+ /* TRice32 ( TRice32_4 ) */ {13250u, 32u, 4u, "rd:TRice32 int %d, float %f (%%f), %08x, %032b\n"},
+ /* TRice32 ( TRice32_4 ) */ {13247u, 32u, 4u, "rd:TRice32 int %x, float %f (%%f), %08x, %032b\n"},
+ /* TRice32_1 ( TRice32_1 ) */ {14534u, 32u, 1u, "rd:TRice32_1 %d\n"},
+ /* TRice32_10 ( TRice32_10 ) */ {14543u, 32u, 10u, "rd:TRice32_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32_11 ( TRice32_11 ) */ {14544u, 32u, 11u, "rd:TRice32_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32_12 ( TRice32_12 ) */ {14545u, 32u, 12u, "rd:TRice32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32_12 ( TRice32_12 ) */ {14693u, 32u, 12u, "rd:TRice32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32_2 ( TRice32_2 ) */ {14535u, 32u, 2u, "rd:TRice32_2 %d, %d\n"},
+ /* TRice32_3 ( TRice32_3 ) */ {14536u, 32u, 3u, "rd:TRice32_3 %d, %d, %d\n"},
+ /* TRice32_4 ( TRice32_4 ) */ {14537u, 32u, 4u, "rd:TRice32_4 %d, %d, %d, %d\n"},
+ /* TRice32_5 ( TRice32_5 ) */ {14538u, 32u, 5u, "rd:TRice32_5 %d, %d, %d, %d, %d\n"},
+ /* TRice32_6 ( TRice32_6 ) */ {14539u, 32u, 6u, "rd:TRice32_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32_7 ( TRice32_7 ) */ {14540u, 32u, 7u, "rd:TRice32_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32_8 ( TRice32_8 ) */ {14541u, 32u, 8u, "rd:TRice32_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice32_9 ( TRice32_9 ) */ {14542u, 32u, 9u, "rd:TRice32_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice64 ( TRice64_12 ) */ {14656u, 64u, 12u, "rd:TRice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice64 ( TRice64_11 ) */ {14655u, 64u, 11u, "rd:TRice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice64 ( TRice64_10 ) */ {14654u, 64u, 10u, "rd:TRice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice64 ( TRice64_9 ) */ {14653u, 64u, 9u, "rd:TRice64 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice64 ( TRice64_8 ) */ {14652u, 64u, 8u, "rd:TRice64 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice64 ( TRice64_7 ) */ {14651u, 64u, 7u, "rd:TRice64 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice64 ( TRice64_6 ) */ {14650u, 64u, 6u, "rd:TRice64 %d, %d, %d, %d, %d, %d\n"},
+ /* TRice64 ( TRice64_5 ) */ {14649u, 64u, 5u, "rd:TRice64 %d, %d, %d, %d, %d\n"},
+ /* TRice64 ( TRice64_4 ) */ {14648u, 64u, 4u, "rd:TRice64 %d, %d, %d, %d\n"},
+ /* TRice64 ( TRice64_3 ) */ {14647u, 64u, 3u, "rd:TRice64 %d, %d, %d\n"},
+ /* TRice64 ( TRice64_2 ) */ {14646u, 64u, 2u, "rd:TRice64 %d, %d\n"},
+ /* TRice64 ( TRice64_1 ) */ {14645u, 64u, 1u, "rd:TRice64 %d\n"},
+ /* TRice64 ( TRice64_4 ) */ {13257u, 64u, 4u, "rd:TRice64 int %X, double %f (%%f), %016x, %064b\n"},
+ /* TRice64 ( TRice64_4 ) */ {13252u, 64u, 4u, "rd:TRice64 int %d, double %f (%%f), %016x, %064b\n"},
+ /* TRice64 ( TRice64_4 ) */ {13253u, 64u, 4u, "rd:TRice64 int %d, double %f (%%f), %016x, %064b\n"},
+ /* TRice64 ( TRice64_4 ) */ {13254u, 64u, 4u, "rd:TRice64 int %d, double %f (%%f), %016x, %064b\n"},
+ /* TRice64 ( TRice64_4 ) */ {13255u, 64u, 4u, "rd:TRice64 int %d, double %f (%%f), %016x, %064b\n"},
+ /* TRice64 ( TRice64_4 ) */ {13256u, 64u, 4u, "rd:TRice64 int %d, double %f (%%f), %016x, %064b\n"},
+ /* TRice64_1 ( TRice64_1 ) */ {14682u, 64u, 1u, "rd:TRice64_1 %d\n"},
+ /* TRice64_10 ( TRice64_10 ) */ {14691u, 64u, 10u, "rd:TRice64_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice64_11 ( TRice64_11 ) */ {14692u, 64u, 11u, "rd:TRice64_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice64_2 ( TRice64_2 ) */ {14683u, 64u, 2u, "rd:TRice64_2 %d, %d\n"},
+ /* TRice64_3 ( TRice64_3 ) */ {14684u, 64u, 3u, "rd:TRice64_3 %d, %d, %d\n"},
+ /* TRice64_4 ( TRice64_4 ) */ {14685u, 64u, 4u, "rd:TRice64_4 %d, %d, %d, %d\n"},
+ /* TRice64_5 ( TRice64_5 ) */ {14686u, 64u, 5u, "rd:TRice64_5 %d, %d, %d, %d, %d\n"},
+ /* TRice64_6 ( TRice64_6 ) */ {14687u, 64u, 6u, "rd:TRice64_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRice64_7 ( TRice64_7 ) */ {14688u, 64u, 7u, "rd:TRice64_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice64_8 ( TRice64_8 ) */ {14689u, 64u, 8u, "rd:TRice64_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice64_9 ( TRice64_9 ) */ {14690u, 64u, 9u, "rd:TRice64_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8 ( TRice8_12 ) */ {14212u, 8u, 12u, "rd:TRice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8 ( TRice8_11 ) */ {14211u, 8u, 11u, "rd:TRice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8 ( TRice8_10 ) */ {14210u, 8u, 10u, "rd:TRice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8 ( TRice8_9 ) */ {14209u, 8u, 9u, "rd:TRice8 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8 ( TRice8_8 ) */ {14208u, 8u, 8u, "rd:TRice8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8 ( TRice8_7 ) */ {14207u, 8u, 7u, "rd:TRice8 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8 ( TRice8_6 ) */ {14206u, 8u, 6u, "rd:TRice8 %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8 ( TRice8_5 ) */ {14205u, 8u, 5u, "rd:TRice8 %d, %d, %d, %d, %d\n"},
+ /* TRice8 ( TRice8_4 ) */ {14204u, 8u, 4u, "rd:TRice8 %d, %d, %d, %d\n"},
+ /* TRice8 ( TRice8_3 ) */ {14203u, 8u, 3u, "rd:TRice8 %d, %d, %d\n"},
+ /* TRice8 ( TRice8_2 ) */ {14202u, 8u, 2u, "rd:TRice8 %d, %d\n"},
+ /* TRice8 ( TRice8_1 ) */ {14201u, 8u, 1u, "rd:TRice8 %d\n"},
+ /* TRice8_1 ( TRice8_1 ) */ {14238u, 8u, 1u, "rd:TRice8_1 %d\n"},
+ /* TRice8_10 ( TRice8_10 ) */ {14247u, 8u, 10u, "rd:TRice8_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8_11 ( TRice8_11 ) */ {14248u, 8u, 11u, "rd:TRice8_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8_12 ( TRice8_12 ) */ {14249u, 8u, 12u, "rd:TRice8_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8_2 ( TRice8_2 ) */ {14239u, 8u, 2u, "rd:TRice8_2 %d, %d\n"},
+ /* TRice8_3 ( TRice8_3 ) */ {14240u, 8u, 3u, "rd:TRice8_3 %d, %d, %d\n"},
+ /* TRice8_4 ( TRice8_4 ) */ {14241u, 8u, 4u, "rd:TRice8_4 %d, %d, %d, %d\n"},
+ /* TRice8_5 ( TRice8_5 ) */ {14242u, 8u, 5u, "rd:TRice8_5 %d, %d, %d, %d, %d\n"},
+ /* TRice8_6 ( TRice8_6 ) */ {14243u, 8u, 6u, "rd:TRice8_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8_7 ( TRice8_7 ) */ {14244u, 8u, 7u, "rd:TRice8_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8_8 ( TRice8_8 ) */ {14245u, 8u, 8u, "rd:TRice8_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice8_9 ( TRice8_9 ) */ {14246u, 8u, 9u, "rd:TRice8_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice ( TRice_0 ) */ {13121u, 32u, 0u, "rd:TRice\n"},
+ /* TRice_1 ( TRice32_1 ) */ {14090u, 32u, 1u, "rd:TRice_1 %d\n"},
+ /* TRice_10 ( TRice32_10 ) */ {14099u, 32u, 10u, "rd:TRice_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice_11 ( TRice32_11 ) */ {14100u, 32u, 11u, "rd:TRice_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice_12 ( TRice32_12 ) */ {14101u, 32u, 12u, "rd:TRice_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice_2 ( TRice32_2 ) */ {14091u, 32u, 2u, "rd:TRice_2 %d, %d\n"},
+ /* TRice_3 ( TRice32_3 ) */ {14092u, 32u, 3u, "rd:TRice_3 %d, %d, %d\n"},
+ /* TRice_4 ( TRice32_4 ) */ {14093u, 32u, 4u, "rd:TRice_4 %d, %d, %d, %d\n"},
+ /* TRice_5 ( TRice32_5 ) */ {14094u, 32u, 5u, "rd:TRice_5 %d, %d, %d, %d, %d\n"},
+ /* TRice_6 ( TRice32_6 ) */ {14095u, 32u, 6u, "rd:TRice_6 %d, %d, %d, %d, %d, %d\n"},
+ /* TRice_7 ( TRice32_7 ) */ {14096u, 32u, 7u, "rd:TRice_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice_8 ( TRice32_8 ) */ {14097u, 32u, 8u, "rd:TRice_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRice_9 ( TRice32_9 ) */ {14098u, 32u, 9u, "rd:TRice_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice ( Trice32_12 ) */ {13119u, 32u, 12u, "rd:Trice %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice ( Trice32_11 ) */ {13118u, 32u, 11u, "rd:Trice %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice ( Trice32_10 ) */ {13117u, 32u, 10u, "rd:Trice %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice ( Trice32_9 ) */ {13116u, 32u, 9u, "rd:Trice %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice ( Trice32_8 ) */ {13115u, 32u, 8u, "rd:Trice %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice ( Trice32_7 ) */ {13114u, 32u, 7u, "rd:Trice %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice ( Trice32_6 ) */ {13113u, 32u, 6u, "rd:Trice %d, %d, %d, %d, %d, %d\n"},
+ /* Trice ( Trice32_5 ) */ {13112u, 32u, 5u, "rd:Trice %d, %d, %d, %d, %d\n"},
+ /* Trice ( Trice32_4 ) */ {13111u, 32u, 4u, "rd:Trice %d, %d, %d, %d\n"},
+ /* Trice ( Trice32_3 ) */ {13110u, 32u, 3u, "rd:Trice %d, %d, %d\n"},
+ /* Trice ( Trice32_2 ) */ {13109u, 32u, 2u, "rd:Trice %d, %d\n"},
+ /* Trice ( Trice32_1 ) */ {13108u, 32u, 1u, "rd:Trice %d\n"},
+ /* Trice ( Trice32_1 ) */ {15038u, 32u, 1u, "rd:Trice line %b (%%b)\n"},
+ /* Trice ( Trice32_1 ) */ {15041u, 32u, 1u, "rd:Trice line %d (%%d)\n"},
+ /* Trice ( Trice32_1 ) */ {15039u, 32u, 1u, "rd:Trice line %o (%%o)\n"},
+ /* Trice ( Trice32_1 ) */ {15035u, 32u, 1u, "rd:Trice line %t (%%t -1)\n"},
+ /* Trice ( Trice32_1 ) */ {15036u, 32u, 1u, "rd:Trice line %t (%%t -1)\n"},
+ /* Trice ( Trice32_1 ) */ {15037u, 32u, 1u, "rd:Trice line %u (%%u)\n"},
+ /* Trice ( Trice32_1 ) */ {15040u, 32u, 1u, "rd:Trice line %x (%%x)\n"},
+ /* Trice16 ( Trice16_12 ) */ {15153u, 16u, 12u, "rd:Trice16 %X, %X, %X, %X, %X, %X, %X, %X, %X, %X, %X, %X\n"},
+ /* Trice16 ( Trice16_11 ) */ {15152u, 16u, 11u, "rd:Trice16 %X, %X, %X, %X, %X, %X, %X, %X, %X, %X, %X\n"},
+ /* Trice16 ( Trice16_10 ) */ {15151u, 16u, 10u, "rd:Trice16 %X, %X, %X, %X, %X, %X, %X, %X, %X, %X\n"},
+ /* Trice16 ( Trice16_9 ) */ {15150u, 16u, 9u, "rd:Trice16 %X, %X, %X, %X, %X, %X, %X, %X, %X\n"},
+ /* Trice16 ( Trice16_8 ) */ {15149u, 16u, 8u, "rd:Trice16 %X, %X, %X, %X, %X, %X, %X, %X\n"},
+ /* Trice16 ( Trice16_7 ) */ {15148u, 16u, 7u, "rd:Trice16 %X, %X, %X, %X, %X, %X, %X\n"},
+ /* Trice16 ( Trice16_6 ) */ {15147u, 16u, 6u, "rd:Trice16 %X, %X, %X, %X, %X, %X\n"},
+ /* Trice16 ( Trice16_5 ) */ {15146u, 16u, 5u, "rd:Trice16 %X, %X, %X, %X, %X\n"},
+ /* Trice16 ( Trice16_4 ) */ {15145u, 16u, 4u, "rd:Trice16 %X, %X, %X, %X\n"},
+ /* Trice16 ( Trice16_3 ) */ {15144u, 16u, 3u, "rd:Trice16 %X, %X, %X\n"},
+ /* Trice16 ( Trice16_2 ) */ {15143u, 16u, 2u, "rd:Trice16 %X, %X\n"},
+ /* Trice16 ( Trice16_1 ) */ {15142u, 16u, 1u, "rd:Trice16 %X\n"},
+ /* Trice16 ( Trice16_12 ) */ {14348u, 16u, 12u, "rd:Trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice16 ( Trice16_11 ) */ {14347u, 16u, 11u, "rd:Trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice16 ( Trice16_10 ) */ {14346u, 16u, 10u, "rd:Trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice16 ( Trice16_9 ) */ {14345u, 16u, 9u, "rd:Trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice16 ( Trice16_8 ) */ {14344u, 16u, 8u, "rd:Trice16 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice16 ( Trice16_7 ) */ {14343u, 16u, 7u, "rd:Trice16 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice16 ( Trice16_6 ) */ {14342u, 16u, 6u, "rd:Trice16 %d, %d, %d, %d, %d, %d\n"},
+ /* Trice16 ( Trice16_5 ) */ {14341u, 16u, 5u, "rd:Trice16 %d, %d, %d, %d, %d\n"},
+ /* Trice16 ( Trice16_4 ) */ {14340u, 16u, 4u, "rd:Trice16 %d, %d, %d, %d\n"},
+ /* Trice16 ( Trice16_3 ) */ {14339u, 16u, 3u, "rd:Trice16 %d, %d, %d\n"},
+ /* Trice16 ( Trice16_2 ) */ {14338u, 16u, 2u, "rd:Trice16 %d, %d\n"},
+ /* Trice16 ( Trice16_1 ) */ {14337u, 16u, 1u, "rd:Trice16 %d\n"},
+ /* Trice16 ( Trice16_12 ) */ {15140u, 16u, 12u, "rd:Trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\n"},
+ /* Trice16 ( Trice16_11 ) */ {15139u, 16u, 11u, "rd:Trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\n"},
+ /* Trice16 ( Trice16_10 ) */ {15138u, 16u, 10u, "rd:Trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\n"},
+ /* Trice16 ( Trice16_9 ) */ {15137u, 16u, 9u, "rd:Trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p\n"},
+ /* Trice16 ( Trice16_8 ) */ {15136u, 16u, 8u, "rd:Trice16 %p, %p, %p, %p, %p, %p, %p, %p\n"},
+ /* Trice16 ( Trice16_7 ) */ {15135u, 16u, 7u, "rd:Trice16 %p, %p, %p, %p, %p, %p, %p\n"},
+ /* Trice16 ( Trice16_6 ) */ {15134u, 16u, 6u, "rd:Trice16 %p, %p, %p, %p, %p, %p\n"},
+ /* Trice16 ( Trice16_5 ) */ {15133u, 16u, 5u, "rd:Trice16 %p, %p, %p, %p, %p\n"},
+ /* Trice16 ( Trice16_4 ) */ {15132u, 16u, 4u, "rd:Trice16 %p, %p, %p, %p\n"},
+ /* Trice16 ( Trice16_3 ) */ {15131u, 16u, 3u, "rd:Trice16 %p, %p, %p\n"},
+ /* Trice16 ( Trice16_2 ) */ {15130u, 16u, 2u, "rd:Trice16 %p, %p\n"},
+ /* Trice16 ( Trice16_1 ) */ {15129u, 16u, 1u, "rd:Trice16 %p\n"},
+ /* Trice16_1 ( Trice16_1 ) */ {14374u, 16u, 1u, "rd:Trice16_1 %d\n"},
+ /* Trice16_10 ( Trice16_10 ) */ {14383u, 16u, 10u, "rd:Trice16_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice16_11 ( Trice16_11 ) */ {14384u, 16u, 11u, "rd:Trice16_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice16_12 ( Trice16_12 ) */ {14385u, 16u, 12u, "rd:Trice16_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice16_2 ( Trice16_2 ) */ {14375u, 16u, 2u, "rd:Trice16_2 %d, %d\n"},
+ /* Trice16_3 ( Trice16_3 ) */ {14376u, 16u, 3u, "rd:Trice16_3 %d, %d, %d\n"},
+ /* Trice16_4 ( Trice16_4 ) */ {14377u, 16u, 4u, "rd:Trice16_4 %d, %d, %d, %d\n"},
+ /* Trice16_5 ( Trice16_5 ) */ {14378u, 16u, 5u, "rd:Trice16_5 %d, %d, %d, %d, %d\n"},
+ /* Trice16_6 ( Trice16_6 ) */ {14379u, 16u, 6u, "rd:Trice16_6 %d, %d, %d, %d, %d, %d\n"},
+ /* Trice16_7 ( Trice16_7 ) */ {14380u, 16u, 7u, "rd:Trice16_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice16_8 ( Trice16_8 ) */ {14381u, 16u, 8u, "rd:Trice16_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice16_9 ( Trice16_9 ) */ {14382u, 16u, 9u, "rd:Trice16_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32 ( Trice32_12 ) */ {14496u, 32u, 12u, "rd:Trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32 ( Trice32_11 ) */ {14495u, 32u, 11u, "rd:Trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32 ( Trice32_10 ) */ {14494u, 32u, 10u, "rd:Trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32 ( Trice32_9 ) */ {14493u, 32u, 9u, "rd:Trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32 ( Trice32_8 ) */ {14492u, 32u, 8u, "rd:Trice32 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32 ( Trice32_7 ) */ {14491u, 32u, 7u, "rd:Trice32 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32 ( Trice32_6 ) */ {14490u, 32u, 6u, "rd:Trice32 %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32 ( Trice32_5 ) */ {14489u, 32u, 5u, "rd:Trice32 %d, %d, %d, %d, %d\n"},
+ /* Trice32 ( Trice32_4 ) */ {14488u, 32u, 4u, "rd:Trice32 %d, %d, %d, %d\n"},
+ /* Trice32 ( Trice32_3 ) */ {14487u, 32u, 3u, "rd:Trice32 %d, %d, %d\n"},
+ /* Trice32 ( Trice32_2 ) */ {14486u, 32u, 2u, "rd:Trice32 %d, %d\n"},
+ /* Trice32 ( Trice32_1 ) */ {14485u, 32u, 1u, "rd:Trice32 %d\n"},
+ /* Trice32_1 ( Trice32_1 ) */ {14522u, 32u, 1u, "rd:Trice32_1 %d\n"},
+ /* Trice32_10 ( Trice32_10 ) */ {14531u, 32u, 10u, "rd:Trice32_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32_11 ( Trice32_11 ) */ {14532u, 32u, 11u, "rd:Trice32_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32_12 ( Trice32_12 ) */ {14533u, 32u, 12u, "rd:Trice32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32_2 ( Trice32_2 ) */ {14523u, 32u, 2u, "rd:Trice32_2 %d, %d\n"},
+ /* Trice32_3 ( Trice32_3 ) */ {14524u, 32u, 3u, "rd:Trice32_3 %d, %d, %d\n"},
+ /* Trice32_4 ( Trice32_4 ) */ {14525u, 32u, 4u, "rd:Trice32_4 %d, %d, %d, %d\n"},
+ /* Trice32_5 ( Trice32_5 ) */ {14526u, 32u, 5u, "rd:Trice32_5 %d, %d, %d, %d, %d\n"},
+ /* Trice32_6 ( Trice32_6 ) */ {14527u, 32u, 6u, "rd:Trice32_6 %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32_7 ( Trice32_7 ) */ {14528u, 32u, 7u, "rd:Trice32_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32_8 ( Trice32_8 ) */ {14529u, 32u, 8u, "rd:Trice32_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice32_9 ( Trice32_9 ) */ {14530u, 32u, 9u, "rd:Trice32_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64 ( Trice64_12 ) */ {14644u, 64u, 12u, "rd:Trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64 ( Trice64_11 ) */ {14643u, 64u, 11u, "rd:Trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64 ( Trice64_10 ) */ {14642u, 64u, 10u, "rd:Trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64 ( Trice64_9 ) */ {14641u, 64u, 9u, "rd:Trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64 ( Trice64_8 ) */ {14640u, 64u, 8u, "rd:Trice64 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64 ( Trice64_7 ) */ {14639u, 64u, 7u, "rd:Trice64 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64 ( Trice64_6 ) */ {14638u, 64u, 6u, "rd:Trice64 %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64 ( Trice64_5 ) */ {14637u, 64u, 5u, "rd:Trice64 %d, %d, %d, %d, %d\n"},
+ /* Trice64 ( Trice64_4 ) */ {14636u, 64u, 4u, "rd:Trice64 %d, %d, %d, %d\n"},
+ /* Trice64 ( Trice64_3 ) */ {14635u, 64u, 3u, "rd:Trice64 %d, %d, %d\n"},
+ /* Trice64 ( Trice64_2 ) */ {14634u, 64u, 2u, "rd:Trice64 %d, %d\n"},
+ /* Trice64 ( Trice64_1 ) */ {14633u, 64u, 1u, "rd:Trice64 %d\n"},
+ /* Trice64_1 ( Trice64_1 ) */ {14670u, 64u, 1u, "rd:Trice64_1 %d\n"},
+ /* Trice64_10 ( Trice64_10 ) */ {14679u, 64u, 10u, "rd:Trice64_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64_11 ( Trice64_11 ) */ {14680u, 64u, 11u, "rd:Trice64_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64_12 ( Trice64_12 ) */ {14681u, 64u, 12u, "rd:Trice64_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64_2 ( Trice64_2 ) */ {14671u, 64u, 2u, "rd:Trice64_2 %d, %d\n"},
+ /* Trice64_3 ( Trice64_3 ) */ {14672u, 64u, 3u, "rd:Trice64_3 %d, %d, %d\n"},
+ /* Trice64_4 ( Trice64_4 ) */ {14673u, 64u, 4u, "rd:Trice64_4 %d, %d, %d, %d\n"},
+ /* Trice64_5 ( Trice64_5 ) */ {14674u, 64u, 5u, "rd:Trice64_5 %d, %d, %d, %d, %d\n"},
+ /* Trice64_6 ( Trice64_6 ) */ {14675u, 64u, 6u, "rd:Trice64_6 %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64_7 ( Trice64_7 ) */ {14676u, 64u, 7u, "rd:Trice64_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64_8 ( Trice64_8 ) */ {14677u, 64u, 8u, "rd:Trice64_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice64_9 ( Trice64_9 ) */ {14678u, 64u, 9u, "rd:Trice64_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8 ( Trice8_12 ) */ {14200u, 8u, 12u, "rd:Trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8 ( Trice8_11 ) */ {14199u, 8u, 11u, "rd:Trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8 ( Trice8_10 ) */ {14198u, 8u, 10u, "rd:Trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8 ( Trice8_9 ) */ {14197u, 8u, 9u, "rd:Trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8 ( Trice8_8 ) */ {14196u, 8u, 8u, "rd:Trice8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8 ( Trice8_7 ) */ {14195u, 8u, 7u, "rd:Trice8 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8 ( Trice8_6 ) */ {14194u, 8u, 6u, "rd:Trice8 %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8 ( Trice8_5 ) */ {14193u, 8u, 5u, "rd:Trice8 %d, %d, %d, %d, %d\n"},
+ /* Trice8 ( Trice8_4 ) */ {14192u, 8u, 4u, "rd:Trice8 %d, %d, %d, %d\n"},
+ /* Trice8 ( Trice8_3 ) */ {14191u, 8u, 3u, "rd:Trice8 %d, %d, %d\n"},
+ /* Trice8 ( Trice8_2 ) */ {14190u, 8u, 2u, "rd:Trice8 %d, %d\n"},
+ /* Trice8 ( Trice8_1 ) */ {14189u, 8u, 1u, "rd:Trice8 %d\n"},
+ /* Trice8_1 ( Trice8_1 ) */ {14226u, 8u, 1u, "rd:Trice8_1 %d\n"},
+ /* Trice8_10 ( Trice8_10 ) */ {14235u, 8u, 10u, "rd:Trice8_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8_11 ( Trice8_11 ) */ {14236u, 8u, 11u, "rd:Trice8_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8_12 ( Trice8_12 ) */ {14237u, 8u, 12u, "rd:Trice8_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8_2 ( Trice8_2 ) */ {14227u, 8u, 2u, "rd:Trice8_2 %d, %d\n"},
+ /* Trice8_3 ( Trice8_3 ) */ {14228u, 8u, 3u, "rd:Trice8_3 %d, %d, %d\n"},
+ /* Trice8_4 ( Trice8_4 ) */ {14229u, 8u, 4u, "rd:Trice8_4 %d, %d, %d, %d\n"},
+ /* Trice8_5 ( Trice8_5 ) */ {14230u, 8u, 5u, "rd:Trice8_5 %d, %d, %d, %d, %d\n"},
+ /* Trice8_6 ( Trice8_6 ) */ {14231u, 8u, 6u, "rd:Trice8_6 %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8_7 ( Trice8_7 ) */ {14232u, 8u, 7u, "rd:Trice8_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8_8 ( Trice8_8 ) */ {14233u, 8u, 8u, "rd:Trice8_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice8_9 ( Trice8_9 ) */ {14234u, 8u, 9u, "rd:Trice8_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice ( Trice_0 ) */ {13107u, 32u, 0u, "rd:Trice\n"},
+ /* Trice_1 ( Trice32_1 ) */ {14078u, 32u, 1u, "rd:Trice_1 %d\n"},
+ /* Trice_10 ( Trice32_10 ) */ {14087u, 32u, 10u, "rd:Trice_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice_11 ( Trice32_11 ) */ {14088u, 32u, 11u, "rd:Trice_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice_12 ( Trice32_12 ) */ {14089u, 32u, 12u, "rd:Trice_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice_2 ( Trice32_2 ) */ {14079u, 32u, 2u, "rd:Trice_2 %d, %d\n"},
+ /* Trice_3 ( Trice32_3 ) */ {14080u, 32u, 3u, "rd:Trice_3 %d, %d, %d\n"},
+ /* Trice_4 ( Trice32_4 ) */ {14081u, 32u, 4u, "rd:Trice_4 %d, %d, %d, %d\n"},
+ /* Trice_5 ( Trice32_5 ) */ {14082u, 32u, 5u, "rd:Trice_5 %d, %d, %d, %d, %d\n"},
+ /* Trice_6 ( Trice32_6 ) */ {14083u, 32u, 6u, "rd:Trice_6 %d, %d, %d, %d, %d, %d\n"},
+ /* Trice_7 ( Trice32_7 ) */ {14084u, 32u, 7u, "rd:Trice_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice_8 ( Trice32_8 ) */ {14085u, 32u, 8u, "rd:Trice_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* Trice_9 ( Trice32_9 ) */ {14086u, 32u, 9u, "rd:Trice_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice8 ( trice8_1 ) */ {13354u, 8u, 1u, "rd:Use %%p to format a pointer in base 16 notation with leading 0x. (%p)\n"},
+ /* trice16 ( trice16_1 ) */ {13355u, 16u, 1u, "rd:Use %%p to format a pointer in base 16 notation with leading 0x. (%p)\n"},
+ /* trice32 ( trice32_1 ) */ {13356u, 32u, 1u, "rd:Use %%p to format a pointer in base 16 notation with leading 0x. (%p)\n"},
+ /* trice64 ( trice64_1 ) */ {13357u, 64u, 1u, "rd:Use %%p to format a pointer in base 16 notation with leading 0x. (%p)\n"},
+ /* trice ( trice32_1 ) */ {13358u, 32u, 1u, "rd:Use %%p to format a pointer in base 16 notation with leading 0x. (%p)\n"},
+ /* trice ( trice32_2 ) */ {13352u, 32u, 2u, "rd:Use %%t to format a boolean as true (%t) or false (%t).\n"},
+ /* trice ( trice_0 ) */ {14799u, 32u, 0u, "rd:e\n"},
+ /* trice ( trice_0 ) */ {14817u, 32u, 0u, "rd:e\n"},
+ /* TRICE_S ( TRICE_S ) */ {15238u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd:sizeof(%8s)"},
+ /* TRICE_S ( TRICE_S ) */ {15240u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rd:sizeof(%8s)"},
+ /* trice ( trice32_12 ) */ {13105u, 32u, 12u, "rd:trice %d, %ld, %d, %lld, %d, %zd, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_11 ) */ {13104u, 32u, 11u, "rd:trice %d, %ld, %d, %lld, %d, %zd, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice32_10 ) */ {13103u, 32u, 10u, "rd:trice %d, %ld, %d, %lld, %d, %zd, %d, %d, %d, %d\n"},
+ /* trice ( trice32_9 ) */ {13102u, 32u, 9u, "rd:trice %d, %ld, %d, %lld, %d, %zd, %d, %d, %d\n"},
+ /* trice ( trice32_8 ) */ {13101u, 32u, 8u, "rd:trice %d, %ld, %d, %lld, %d, %zd, %d, %d\n"},
+ /* trice ( trice32_7 ) */ {13100u, 32u, 7u, "rd:trice %d, %ld, %d, %lld, %d, %zd, %d\n"},
+ /* trice ( trice32_6 ) */ {13099u, 32u, 6u, "rd:trice %d, %ld, %d, %lld, %d, %zd\n"},
+ /* trice ( trice32_5 ) */ {13098u, 32u, 5u, "rd:trice %d, %ld, %d, %lld, %d\n"},
+ /* trice ( trice32_4 ) */ {13097u, 32u, 4u, "rd:trice %d, %ld, %d, %lld\n"},
+ /* trice ( trice32_3 ) */ {13096u, 32u, 3u, "rd:trice %d, %ld, %d\n"},
+ /* trice ( trice32_2 ) */ {13095u, 32u, 2u, "rd:trice %d, %ld\n"},
+ /* trice ( trice32_1 ) */ {13094u, 32u, 1u, "rd:trice %d\n"},
+ /* trice16 ( trice16_12 ) */ {13161u, 16u, 12u, "rd:trice16 %X, %lX, %X, %llX, %X, %zX, %X, %X, %X, %X, %X, %X\n"},
+ /* trice16 ( trice16_11 ) */ {13160u, 16u, 11u, "rd:trice16 %X, %lX, %X, %llX, %X, %zX, %X, %X, %X, %X, %X\n"},
+ /* trice16 ( trice16_10 ) */ {13159u, 16u, 10u, "rd:trice16 %X, %lX, %X, %llX, %X, %zX, %X, %X, %X, %X\n"},
+ /* trice16 ( trice16_9 ) */ {13158u, 16u, 9u, "rd:trice16 %X, %lX, %X, %llX, %X, %zX, %X, %X, %X\n"},
+ /* trice16 ( trice16_8 ) */ {13157u, 16u, 8u, "rd:trice16 %X, %lX, %X, %llX, %X, %zX, %X, %X\n"},
+ /* trice16 ( trice16_7 ) */ {13156u, 16u, 7u, "rd:trice16 %X, %lX, %X, %llX, %X, %zX, %X\n"},
+ /* trice16 ( trice16_6 ) */ {13155u, 16u, 6u, "rd:trice16 %X, %lX, %X, %llX, %X, %zX\n"},
+ /* trice16 ( trice16_5 ) */ {13154u, 16u, 5u, "rd:trice16 %X, %lX, %X, %llX, %X\n"},
+ /* trice16 ( trice16_4 ) */ {13153u, 16u, 4u, "rd:trice16 %X, %lX, %X, %llX\n"},
+ /* trice16 ( trice16_3 ) */ {13152u, 16u, 3u, "rd:trice16 %X, %lX, %X\n"},
+ /* trice16 ( trice16_2 ) */ {13151u, 16u, 2u, "rd:trice16 %X, %lX\n"},
+ /* trice16 ( trice16_1 ) */ {13150u, 16u, 1u, "rd:trice16 %X\n"},
+ /* trice16 ( trice16_12 ) */ {14336u, 16u, 12u, "rd:trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_11 ) */ {14335u, 16u, 11u, "rd:trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_10 ) */ {14334u, 16u, 10u, "rd:trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_9 ) */ {14333u, 16u, 9u, "rd:trice16 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_8 ) */ {14332u, 16u, 8u, "rd:trice16 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_7 ) */ {14331u, 16u, 7u, "rd:trice16 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_6 ) */ {14330u, 16u, 6u, "rd:trice16 %d, %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_5 ) */ {14329u, 16u, 5u, "rd:trice16 %d, %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_4 ) */ {14328u, 16u, 4u, "rd:trice16 %d, %d, %d, %d\n"},
+ /* trice16 ( trice16_3 ) */ {14327u, 16u, 3u, "rd:trice16 %d, %d, %d\n"},
+ /* trice16 ( trice16_2 ) */ {14326u, 16u, 2u, "rd:trice16 %d, %d\n"},
+ /* trice16 ( trice16_1 ) */ {14325u, 16u, 1u, "rd:trice16 %d\n"},
+ /* trice16 ( trice16_12 ) */ {13146u, 16u, 12u, "rd:trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\n"},
+ /* trice16 ( trice16_11 ) */ {13145u, 16u, 11u, "rd:trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\n"},
+ /* trice16 ( trice16_10 ) */ {13144u, 16u, 10u, "rd:trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\n"},
+ /* trice16 ( trice16_9 ) */ {13143u, 16u, 9u, "rd:trice16 %p, %p, %p, %p, %p, %p, %p, %p, %p\n"},
+ /* trice16 ( trice16_8 ) */ {13142u, 16u, 8u, "rd:trice16 %p, %p, %p, %p, %p, %p, %p, %p\n"},
+ /* trice16 ( trice16_7 ) */ {13141u, 16u, 7u, "rd:trice16 %p, %p, %p, %p, %p, %p, %p\n"},
+ /* trice16 ( trice16_6 ) */ {13140u, 16u, 6u, "rd:trice16 %p, %p, %p, %p, %p, %p\n"},
+ /* trice16 ( trice16_5 ) */ {13139u, 16u, 5u, "rd:trice16 %p, %p, %p, %p, %p\n"},
+ /* trice16 ( trice16_4 ) */ {13138u, 16u, 4u, "rd:trice16 %p, %p, %p, %p\n"},
+ /* trice16 ( trice16_3 ) */ {13137u, 16u, 3u, "rd:trice16 %p, %p, %p\n"},
+ /* trice16 ( trice16_2 ) */ {13136u, 16u, 2u, "rd:trice16 %p, %p\n"},
+ /* trice16 ( trice16_1 ) */ {13135u, 16u, 1u, "rd:trice16 %p\n"},
+ /* trice16_1 ( trice16_1 ) */ {14362u, 16u, 1u, "rd:trice16_1 %d\n"},
+ /* trice16_10 ( trice16_10 ) */ {14371u, 16u, 10u, "rd:trice16_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16_11 ( trice16_11 ) */ {14372u, 16u, 11u, "rd:trice16_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16_12 ( trice16_12 ) */ {14373u, 16u, 12u, "rd:trice16_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16_2 ( trice16_2 ) */ {14363u, 16u, 2u, "rd:trice16_2 %d, %d\n"},
+ /* trice16_3 ( trice16_3 ) */ {14364u, 16u, 3u, "rd:trice16_3 %d, %d, %d\n"},
+ /* trice16_4 ( trice16_4 ) */ {14365u, 16u, 4u, "rd:trice16_4 %d, %d, %d, %d\n"},
+ /* trice16_5 ( trice16_5 ) */ {14366u, 16u, 5u, "rd:trice16_5 %d, %d, %d, %d, %d\n"},
+ /* trice16_6 ( trice16_6 ) */ {14367u, 16u, 6u, "rd:trice16_6 %d, %d, %d, %d, %d, %d\n"},
+ /* trice16_7 ( trice16_7 ) */ {14368u, 16u, 7u, "rd:trice16_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16_8 ( trice16_8 ) */ {14369u, 16u, 8u, "rd:trice16_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice16_9 ( trice16_9 ) */ {14370u, 16u, 9u, "rd:trice16_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice32 ( trice32_12 ) */ {13163u, 32u, 12u, "rd:trice32 %X, %lX, %X, %llX, %X, %zX, %X, %X, %X, %X, %X, %X\n"},
+ /* trice32 ( trice32_12 ) */ {14484u, 32u, 12u, "rd:trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice32 ( trice32_11 ) */ {14483u, 32u, 11u, "rd:trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice32 ( trice32_10 ) */ {14482u, 32u, 10u, "rd:trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice32 ( trice32_9 ) */ {14481u, 32u, 9u, "rd:trice32 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice32 ( trice32_8 ) */ {14480u, 32u, 8u, "rd:trice32 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice32 ( trice32_7 ) */ {14479u, 32u, 7u, "rd:trice32 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice32 ( trice32_6 ) */ {14478u, 32u, 6u, "rd:trice32 %d, %d, %d, %d, %d, %d\n"},
+ /* trice32 ( trice32_5 ) */ {14477u, 32u, 5u, "rd:trice32 %d, %d, %d, %d, %d\n"},
+ /* trice32 ( trice32_4 ) */ {14476u, 32u, 4u, "rd:trice32 %d, %d, %d, %d\n"},
+ /* trice32 ( trice32_3 ) */ {14475u, 32u, 3u, "rd:trice32 %d, %d, %d\n"},
+ /* trice32 ( trice32_2 ) */ {14474u, 32u, 2u, "rd:trice32 %d, %d\n"},
+ /* trice32 ( trice32_1 ) */ {14473u, 32u, 1u, "rd:trice32 %d\n"},
+ /* trice32 ( trice32_12 ) */ {13148u, 32u, 12u, "rd:trice32 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\n"},
+ /* trice32_1 ( trice32_1 ) */ {14510u, 32u, 1u, "rd:trice32_1 %d\n"},
+ /* trice32_1 ( trice32_1 ) */ {13218u, 32u, 1u, "rd:trice32_1 %d\n"},
+ /* trice32_10 ( trice32_10 ) */ {14519u, 32u, 10u, "rd:trice32_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice32_11 ( trice32_11 ) */ {14520u, 32u, 11u, "rd:trice32_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice32_12 ( trice32_12 ) */ {14521u, 32u, 12u, "rd:trice32_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice32_2 ( trice32_2 ) */ {14511u, 32u, 2u, "rd:trice32_2 %d, %d\n"},
+ /* trice32_2 ( trice32_2 ) */ {13220u, 32u, 2u, "rd:trice32_2 %d,%d\n"},
+ /* trice32_3 ( trice32_3 ) */ {14512u, 32u, 3u, "rd:trice32_3 %d, %d, %d\n"},
+ /* trice32_4 ( trice32_4 ) */ {14513u, 32u, 4u, "rd:trice32_4 %d, %d, %d, %d\n"},
+ /* trice32_5 ( trice32_5 ) */ {14514u, 32u, 5u, "rd:trice32_5 %d, %d, %d, %d, %d\n"},
+ /* trice32_6 ( trice32_6 ) */ {14515u, 32u, 6u, "rd:trice32_6 %d, %d, %d, %d, %d, %d\n"},
+ /* trice32_7 ( trice32_7 ) */ {14516u, 32u, 7u, "rd:trice32_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice32_8 ( trice32_8 ) */ {14517u, 32u, 8u, "rd:trice32_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice32_9 ( trice32_9 ) */ {14518u, 32u, 9u, "rd:trice32_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice64 ( trice64_12 ) */ {14632u, 64u, 12u, "rd:trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice64 ( trice64_11 ) */ {14631u, 64u, 11u, "rd:trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice64 ( trice64_10 ) */ {14630u, 64u, 10u, "rd:trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice64 ( trice64_9 ) */ {14629u, 64u, 9u, "rd:trice64 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice64 ( trice64_8 ) */ {14628u, 64u, 8u, "rd:trice64 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice64 ( trice64_7 ) */ {14627u, 64u, 7u, "rd:trice64 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice64 ( trice64_6 ) */ {14626u, 64u, 6u, "rd:trice64 %d, %d, %d, %d, %d, %d\n"},
+ /* trice64 ( trice64_5 ) */ {14625u, 64u, 5u, "rd:trice64 %d, %d, %d, %d, %d\n"},
+ /* trice64 ( trice64_4 ) */ {14624u, 64u, 4u, "rd:trice64 %d, %d, %d, %d\n"},
+ /* trice64 ( trice64_3 ) */ {14623u, 64u, 3u, "rd:trice64 %d, %d, %d\n"},
+ /* trice64 ( trice64_2 ) */ {13203u, 64u, 2u, "rd:trice64 %d, %d\n"},
+ /* trice64 ( trice64_2 ) */ {13214u, 64u, 2u, "rd:trice64 %d, %d\n"},
+ /* trice64 ( trice64_2 ) */ {13217u, 64u, 2u, "rd:trice64 %d, %d\n"},
+ /* trice64 ( trice64_2 ) */ {14622u, 64u, 2u, "rd:trice64 %d, %d\n"},
+ /* trice64 ( trice64_1 ) */ {14621u, 64u, 1u, "rd:trice64 %d\n"},
+ /* trice64_1 ( trice64_1 ) */ {14658u, 64u, 1u, "rd:trice64_1 %d\n"},
+ /* trice64_1 ( trice64_1 ) */ {13219u, 64u, 1u, "rd:trice64_1 %d\n"},
+ /* trice64_10 ( trice64_10 ) */ {14667u, 64u, 10u, "rd:trice64_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice64_11 ( trice64_11 ) */ {14668u, 64u, 11u, "rd:trice64_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice64_12 ( trice64_12 ) */ {14669u, 64u, 12u, "rd:trice64_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice64_2 ( trice64_2 ) */ {14659u, 64u, 2u, "rd:trice64_2 %d, %d\n"},
+ /* trice64_2 ( trice64_2 ) */ {13221u, 64u, 2u, "rd:trice64_2 %d,%d\n"},
+ /* trice64_3 ( trice64_3 ) */ {14660u, 64u, 3u, "rd:trice64_3 %d, %d, %d\n"},
+ /* trice64_4 ( trice64_4 ) */ {14661u, 64u, 4u, "rd:trice64_4 %d, %d, %d, %d\n"},
+ /* trice64_5 ( trice64_5 ) */ {14662u, 64u, 5u, "rd:trice64_5 %d, %d, %d, %d, %d\n"},
+ /* trice64_6 ( trice64_6 ) */ {14663u, 64u, 6u, "rd:trice64_6 %d, %d, %d, %d, %d, %d\n"},
+ /* trice64_7 ( trice64_7 ) */ {14664u, 64u, 7u, "rd:trice64_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice64_8 ( trice64_8 ) */ {14665u, 64u, 8u, "rd:trice64_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice64_9 ( trice64_9 ) */ {14666u, 64u, 9u, "rd:trice64_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice8 ( trice8_12 ) */ {13162u, 8u, 12u, "rd:trice8 %X, %lX, %X, %llX, %X, %zX, %X, %X, %X, %X, %X, %X\n"},
+ /* trice8 ( trice8_12 ) */ {13147u, 8u, 12u, "rd:trice8 %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\n"},
+ /* trice8 ( trice8_12 ) */ {14188u, 8u, 12u, "rd:trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice8 ( trice8_11 ) */ {14187u, 8u, 11u, "rd:trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice8 ( trice8_10 ) */ {14186u, 8u, 10u, "rd:trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice8 ( trice8_9 ) */ {14185u, 8u, 9u, "rd:trice8 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice8 ( trice8_8 ) */ {14184u, 8u, 8u, "rd:trice8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice8 ( trice8_7 ) */ {14183u, 8u, 7u, "rd:trice8 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice8 ( trice8_6 ) */ {14182u, 8u, 6u, "rd:trice8 %d, %d, %d, %d, %d, %d\n"},
+ /* trice8 ( trice8_5 ) */ {14181u, 8u, 5u, "rd:trice8 %d, %d, %d, %d, %d\n"},
+ /* trice8 ( trice8_4 ) */ {14180u, 8u, 4u, "rd:trice8 %d, %d, %d, %d\n"},
+ /* trice8 ( trice8_3 ) */ {14179u, 8u, 3u, "rd:trice8 %d, %d, %d\n"},
+ /* trice8 ( trice8_2 ) */ {14178u, 8u, 2u, "rd:trice8 %d, %d\n"},
+ /* trice8 ( trice8_1 ) */ {14177u, 8u, 1u, "rd:trice8 %d\n"},
+ /* trice8_1 ( trice8_1 ) */ {14214u, 8u, 1u, "rd:trice8_1 %d\n"},
+ /* trice8_10 ( trice8_10 ) */ {14223u, 8u, 10u, "rd:trice8_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice8_11 ( trice8_11 ) */ {14224u, 8u, 11u, "rd:trice8_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice8_12 ( trice8_12 ) */ {14225u, 8u, 12u, "rd:trice8_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice8_2 ( trice8_2 ) */ {14215u, 8u, 2u, "rd:trice8_2 %d, %d\n"},
+ /* trice8_3 ( trice8_3 ) */ {14216u, 8u, 3u, "rd:trice8_3 %d, %d, %d\n"},
+ /* trice8_4 ( trice8_4 ) */ {14217u, 8u, 4u, "rd:trice8_4 %d, %d, %d, %d\n"},
+ /* trice8_5 ( trice8_5 ) */ {14218u, 8u, 5u, "rd:trice8_5 %d, %d, %d, %d, %d\n"},
+ /* trice8_6 ( trice8_6 ) */ {14219u, 8u, 6u, "rd:trice8_6 %d, %d, %d, %d, %d, %d\n"},
+ /* trice8_7 ( trice8_7 ) */ {14220u, 8u, 7u, "rd:trice8_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice8_8 ( trice8_8 ) */ {14221u, 8u, 8u, "rd:trice8_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice8_9 ( trice8_9 ) */ {14222u, 8u, 9u, "rd:trice8_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice ( trice_0 ) */ {13093u, 32u, 0u, "rd:trice\n"},
+ /* trice_1 ( trice32_1 ) */ {14066u, 32u, 1u, "rd:trice_1 %d\n"},
+ /* trice_10 ( trice32_10 ) */ {14075u, 32u, 10u, "rd:trice_10 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice_11 ( trice32_11 ) */ {14076u, 32u, 11u, "rd:trice_11 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice_12 ( trice32_12 ) */ {14077u, 32u, 12u, "rd:trice_12 %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice_2 ( trice32_2 ) */ {14067u, 32u, 2u, "rd:trice_2 %d, %d\n"},
+ /* trice_3 ( trice32_3 ) */ {14068u, 32u, 3u, "rd:trice_3 %d, %d, %d\n"},
+ /* trice_4 ( trice32_4 ) */ {14069u, 32u, 4u, "rd:trice_4 %d, %d, %d, %d\n"},
+ /* trice_5 ( trice32_5 ) */ {14070u, 32u, 5u, "rd:trice_5 %d, %d, %d, %d, %d\n"},
+ /* trice_6 ( trice32_6 ) */ {14071u, 32u, 6u, "rd:trice_6 %d, %d, %d, %d, %d, %d\n"},
+ /* trice_7 ( trice32_7 ) */ {14072u, 32u, 7u, "rd:trice_7 %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice_8 ( trice32_8 ) */ {14073u, 32u, 8u, "rd:trice_8 %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* trice_9 ( trice32_9 ) */ {14074u, 32u, 9u, "rd:trice_9 %d, %d, %d, %d, %d, %d, %d, %d, %d\n"},
+ /* TRICE ( TRICE_0 ) */ {13726u, 32u, 0u, "read:black+i:yellow+h\n"},
+ /* trice ( trice_0 ) */ {13776u, 32u, 0u, "read:black+i:yellow+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13826u, 32u, 0u, "read:black+i:yellow+h\n"},
+ /* Trice ( Trice_0 ) */ {13876u, 32u, 0u, "read:black+i:yellow+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13926u, 32u, 0u, "read:black+i:yellow+h\n"},
+ /* TRice ( TRice_0 ) */ {13976u, 32u, 0u, "read:black+i:yellow+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13728u, 32u, 0u, "receive:black+h:black\n"},
+ /* trice ( trice_0 ) */ {13778u, 32u, 0u, "receive:black+h:black\n"},
+ /* TRICE ( TRICE_0 ) */ {13828u, 32u, 0u, "receive:black+h:black\n"},
+ /* Trice ( Trice_0 ) */ {13878u, 32u, 0u, "receive:black+h:black\n"},
+ /* TRICE ( TRICE_0 ) */ {13928u, 32u, 0u, "receive:black+h:black\n"},
+ /* TRice ( TRice_0 ) */ {13978u, 32u, 0u, "receive:black+h:black\n"},
+ /* TRice32F ( TRice32F ) */ {13305u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rpc:FunctionNameYb"},
+ /* TRice32F ( TRice32F ) */ {15301u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rpc:FunctionNameYb"},
+ /* TRice32C ( TRice32C ) */ {15644u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rpc:FunctionNameYb"},
+ /* Trice32F ( Trice32F ) */ {13306u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rpc:FunctionNameYc"},
+ /* Trice32F ( Trice32F ) */ {15302u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rpc:FunctionNameYc"},
+ /* Trice32C ( Trice32C ) */ {15496u, 32u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rpc:FunctionNameYc"},
+ /* TRICE_S ( TRICE_S ) */ {13001u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rx:received command:%s\n"},
+ /* TRICE_S ( TRICE_S ) */ {13015u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "rx:received command:%s\n"},
+ /* trice ( trice32_1 ) */ {15255u, 32u, 1u, "sig:%3d:"},
+ /* TRICE_S ( TRICE_S ) */ {13389u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:%s\n"},
+ /* TRICE_S ( TRICE_S ) */ {13391u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:%s\n"},
+ /* TRICE_S ( TRICE_S ) */ {13393u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:%s\n"},
+ /* TRICE_S ( TRICE_S ) */ {13395u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:%s\n"},
+ /* TRICE_S ( TRICE_S ) */ {13397u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:%s\n"},
+ /* trice ( trice_0 ) */ {13351u, 32u, 0u, "sig:Boolean (true/false)\n"},
+ /* trice ( trice_0 ) */ {13346u, 32u, 0u, "sig:Character (quoted, Unicode)\n"},
+ /* TRICE ( TRICE_0 ) */ {14694u, 32u, 0u, "sig:Colors and ticks\n"},
+ /* trice ( trice_0 ) */ {13366u, 32u, 0u, "sig:Double (indent, precision, scientific notation)\n"},
+ /* trice ( trice_0 ) */ {13360u, 32u, 0u, "sig:Float (indent, precision, scientific notation)\n"},
+ /* TRice ( TRice_0 ) */ {13334u, 32u, 0u, "sig:Integer (indent, base, sign) - see https://yourbasic.org/golang/fmt-printf-reference-cheat-sheet/\n"},
+ /* TRICE ( TRICE_0 ) */ {14767u, 32u, 0u, "sig:Legacy TRICE16-64\n"},
+ /* TRICE ( TRICE_0 ) */ {14733u, 32u, 0u, "sig:Legacy TRICE8\n"},
+ /* trice ( trice_0 ) */ {13353u, 32u, 0u, "sig:Pointer (hex)\n"},
+ /* trice ( trice_0 ) */ {13387u, 32u, 0u, "sig:Runtime generated strings\n"},
+ /* trice ( trice_0 ) */ {13177u, 32u, 0u, "sig:Some time measurements\n"},
+ /* trice ( trice_0 ) */ {13372u, 32u, 0u, "sig:String or byte slice (quote, indent, hex)\n"},
+ /* trice ( trice_0 ) */ {15102u, 32u, 0u, "sig:TRICE with 1 to 12 values\n"},
+ /* TRice ( TRice_0 ) */ {15141u, 32u, 0u, "sig:TRICE16 with 1 to 12 hex\n"},
+ /* trice ( trice32_1 ) */ {14250u, 32u, 1u, "sig:TRICE16 with 1 to 12 values (line %d)\n"},
+ /* trice ( trice_0 ) */ {14847u, 32u, 0u, "sig:TRICE16 with variable param count 1 to 12\n"},
+ /* trice ( trice32_1 ) */ {14287u, 32u, 1u, "sig:TRICE16_n with 1 to 12 values (line %d)\n"},
+ /* trice ( trice32_1 ) */ {14398u, 32u, 1u, "sig:TRICE32 with 1 to 12 values (line %d)\n"},
+ /* trice ( trice_0 ) */ {14874u, 32u, 0u, "sig:TRICE32 with variable param count 1 to 12\n"},
+ /* trice ( trice32_1 ) */ {14546u, 32u, 1u, "sig:TRICE64 with 1 to 12 values (line %d)\n"},
+ /* trice ( trice_0 ) */ {14902u, 32u, 0u, "sig:TRICE64 with variable param count 1 to 12\n"},
+ /* trice ( trice_0 ) */ {13991u, 32u, 0u, "sig:TRICE8 with 1 to 12 values\n"},
+ /* trice ( trice_0 ) */ {14102u, 32u, 0u, "sig:TRICE8 with 1 to 12 values\n"},
+ /* trice ( trice_0 ) */ {14819u, 32u, 0u, "sig:TRICE8 with variable param count 1 to 12\n"},
+ /* trice ( trice_0 ) */ {14139u, 32u, 0u, "sig:TRICE8_n with 1 to 12 values\n"},
+ /* TRICE_N ( TRICE_N ) */ {13319u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TRICE_N=%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {13321u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TRICE_N=%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {13323u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TRICE_N=%s\n"},
+ /* TRICE_S ( TRICE_S ) */ {13318u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TRICE_S=%s\n"},
+ /* TRICE_S ( TRICE_S ) */ {13320u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TRICE_S=%s\n"},
+ /* TRICE_S ( TRICE_S ) */ {13322u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TRICE_S=%s\n"},
+ /* trice ( trice_0 ) */ {14028u, 32u, 0u, "sig:TRICE_n with 1 to 12 values\n"},
+ /* trice ( trice_0 ) */ {15115u, 32u, 0u, "sig:TRICE_n with 1 to 12 values\n"},
+ /* TRice ( TRice_0 ) */ {13120u, 32u, 0u, "sig:TRice with 32-bit stamp and with 0 to 12 values (common use cases)\n"},
+ /* TRiceN ( TRiceN ) */ {13329u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TRiceN=%s\n"},
+ /* TRiceS ( TRiceS ) */ {13328u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TRiceS=%s\n"},
+ /* TRICE ( TRICE_0 ) */ {14699u, 32u, 0u, "sig:This ASSERT error is just a demo and no real error:\n"},
+ /* Trice ( Trice_0 ) */ {13106u, 32u, 0u, "sig:Trice with 16-bit stamp and with 0 to 12 values (common use cases)\n"},
+ /* TRice ( TRice_0 ) */ {15128u, 32u, 0u, "sig:Trice16 with 1 to 12 pointer\n"},
+ /* TriceN ( TriceN ) */ {13327u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TriceN=%s\n"},
+ /* TriceS ( TriceS ) */ {13326u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:TriceS=%s\n"},
+ /* TRICE ( TRICE_0 ) */ {14714u, 32u, 0u, "sig:Various ranges and formats\n"},
+ /* TRICE_N ( TRICE_N ) */ {13266u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:With TRICE_N:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {13268u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:With TRICE_N:%s\n"},
+ /* TRICE_N ( TRICE_N ) */ {13270u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:With TRICE_N:%s\n"},
+ /* TRiceN ( TRiceN ) */ {13264u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:With TRiceN:%s\n"},
+ /* TriceN ( TriceN ) */ {13262u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:With TriceN:%s\n"},
+ /* triceN ( triceN ) */ {13260u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:With triceN:%s\n"},
+ /* trice ( trice_0 ) */ {14794u, 32u, 0u, "sig:colored single letters and several TRICE macros in one line\n"},
+ /* trice ( trice_0 ) */ {13082u, 32u, 0u, "sig:length modifier coverage for supported combinations\n"},
+ /* trice ( trice_0 ) */ {13092u, 32u, 0u, "sig:trice without stamp and with 0 to 12 values (most common use cases)\n"},
+ /* trice ( trice_0 ) */ {13149u, 32u, 0u, "sig:trice16 with 1 to 12 hex\n"},
+ /* trice ( trice_0 ) */ {13134u, 32u, 0u, "sig:trice16 with 1 to 12 pointer\n"},
+ /* trice ( trice32_1 ) */ {14324u, 32u, 1u, "sig:trice16 with 1 to 12 values (line %d)\n"},
+ /* trice ( trice32_1 ) */ {14361u, 32u, 1u, "sig:trice16_n with 1 to 12 values (line %d)\n"},
+ /* trice ( trice32_1 ) */ {14472u, 32u, 1u, "sig:trice32 with 1 to 12 values (line %d)\n"},
+ /* trice ( trice32_1 ) */ {14620u, 32u, 1u, "sig:trice64 with 1 to 12 values (line %d)\n"},
+ /* trice ( trice_0 ) */ {14176u, 32u, 0u, "sig:trice8 with 1 to 12 values\n"},
+ /* TRICE ( TRICE_0 ) */ {14213u, 32u, 0u, "sig:trice8_n with 1 to 12 values\n"},
+ /* triceN ( triceN ) */ {13325u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:triceN=%s\n"},
+ /* triceS ( triceS ) */ {13324u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "sig:triceS=%s\n"},
+ /* TRICE ( TRICE_0 ) */ {14065u, 32u, 0u, "sig:trice_n with 1 to 12 values\n"},
+ /* TRICE ( TRICE_0 ) */ {13732u, 32u, 0u, "signal:118+i\n"},
+ /* trice ( trice_0 ) */ {13782u, 32u, 0u, "signal:118+i\n"},
+ /* TRICE ( TRICE_0 ) */ {13832u, 32u, 0u, "signal:118+i\n"},
+ /* Trice ( Trice_0 ) */ {13882u, 32u, 0u, "signal:118+i\n"},
+ /* TRICE ( TRICE_0 ) */ {13932u, 32u, 0u, "signal:118+i\n"},
+ /* TRice ( TRice_0 ) */ {13982u, 32u, 0u, "signal:118+i\n"},
+ /* trice ( trice32_1 ) */ {14435u, 32u, 1u, "signal:TRICE32_n with 1 to 12 values (line %d)\n"},
+ /* trice ( trice32_1 ) */ {14583u, 32u, 1u, "signal:TRICE64_n with 1 to 12 values (line %d)\n"},
+ /* trice ( trice32_1 ) */ {14509u, 32u, 1u, "signal:trice32_n with 1 to 12 values (line %d)\n"},
+ /* trice ( trice32_1 ) */ {14657u, 32u, 1u, "signal:trice64_n with 1 to 12 values (line %d)\n"},
+ /* trice ( trice_0 ) */ {14802u, 32u, 0u, "t:H"},
+ /* TRICE ( TRICE_0 ) */ {13733u, 32u, 0u, "test:yellow+h:black\n"},
+ /* trice ( trice_0 ) */ {13783u, 32u, 0u, "test:yellow+h:black\n"},
+ /* TRICE ( TRICE_0 ) */ {13833u, 32u, 0u, "test:yellow+h:black\n"},
+ /* Trice ( Trice_0 ) */ {13883u, 32u, 0u, "test:yellow+h:black\n"},
+ /* TRICE ( TRICE_0 ) */ {13933u, 32u, 0u, "test:yellow+h:black\n"},
+ /* TRice ( TRice_0 ) */ {13983u, 32u, 0u, "test:yellow+h:black\n"},
+ /* trice16_1 ( trice16_1 ) */ {13171u, 16u, 1u, "tim: post TriceDecryption SysTick=%d\n"},
+ /* trice32 ( trice32_1 ) */ {13168u, 32u, 1u, "tim: post TriceEncryption SysTick=%d\n"},
+ /* trice16_1 ( trice16_1 ) */ {13170u, 16u, 1u, "tim: pre TriceDecryption SysTick=%d\n"},
+ /* trice32 ( trice32_1 ) */ {13167u, 32u, 1u, "tim: pre TriceEncryption SysTick=%d\n"},
+ /* TRICE ( TRICE_0 ) */ {13205u, 32u, 0u, "tim:TRICE START time message\n"},
+ /* TRICE ( TRICE_0 ) */ {13207u, 32u, 0u, "tim:TRICE START time message\n"},
+ /* TRICE ( TRICE_0 ) */ {13209u, 32u, 0u, "tim:TRICE START time message\n"},
+ /* TRICE ( TRICE_0 ) */ {13206u, 32u, 0u, "tim:TRICE STOP time message\n"},
+ /* TRICE ( TRICE_0 ) */ {13208u, 32u, 0u, "tim:TRICE STOP time message\n"},
+ /* TRICE ( TRICE_0 ) */ {13211u, 32u, 0u, "tim:TRICE STOP time message\n"},
+ /* trice ( trice_0 ) */ {13212u, 32u, 0u, "tim:trice --------------------------------------------------\n"},
+ /* trice ( trice_0 ) */ {13213u, 32u, 0u, "tim:trice --------------------------------------------------\n"},
+ /* trice ( trice_0 ) */ {13215u, 32u, 0u, "tim:trice --------------------------------------------------\n"},
+ /* trice ( trice_0 ) */ {13216u, 32u, 0u, "tim:trice --------------------------------------------------\n"},
+ /* trice ( trice_0 ) */ {13198u, 32u, 0u, "tim:trice START time message\n"},
+ /* trice ( trice_0 ) */ {13200u, 32u, 0u, "tim:trice START time message\n"},
+ /* trice ( trice_0 ) */ {13202u, 32u, 0u, "tim:trice START time message\n"},
+ /* trice ( trice_0 ) */ {13199u, 32u, 0u, "tim:trice STOP time message\n"},
+ /* trice ( trice_0 ) */ {13201u, 32u, 0u, "tim:trice STOP time message\n"},
+ /* trice ( trice_0 ) */ {13204u, 32u, 0u, "tim:trice STOP time message\n"},
+ /* TRICE ( TRICE32_1 ) */ {14713u, 32u, 1u, "time:TRICE32_1 message, SysTick is %6u\n"},
+ /* TRICE ( TRICE_0 ) */ {13724u, 32u, 0u, "time:blue+i:blue+h\n"},
+ /* trice ( trice_0 ) */ {13774u, 32u, 0u, "time:blue+i:blue+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13824u, 32u, 0u, "time:blue+i:blue+h\n"},
+ /* Trice ( Trice_0 ) */ {13874u, 32u, 0u, "time:blue+i:blue+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13924u, 32u, 0u, "time:blue+i:blue+h\n"},
+ /* TRice ( TRice_0 ) */ {13974u, 32u, 0u, "time:blue+i:blue+h\n"},
+ /* trice ( trice_0 ) */ {14803u, 32u, 0u, "time:i"},
+ /* TRICE ( TRICE_0 ) */ {13723u, 32u, 0u, "trace:default+i:default+h\n"},
+ /* trice ( trice_0 ) */ {13773u, 32u, 0u, "trace:default+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13823u, 32u, 0u, "trace:default+i:default+h\n"},
+ /* Trice ( Trice_0 ) */ {13873u, 32u, 0u, "trace:default+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13923u, 32u, 0u, "trace:default+i:default+h\n"},
+ /* TRice ( TRice_0 ) */ {13973u, 32u, 0u, "trace:default+i:default+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13729u, 32u, 0u, "transmit:black:black+h\n"},
+ /* trice ( trice_0 ) */ {13779u, 32u, 0u, "transmit:black:black+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13829u, 32u, 0u, "transmit:black:black+h\n"},
+ /* Trice ( Trice_0 ) */ {13879u, 32u, 0u, "transmit:black:black+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13929u, 32u, 0u, "transmit:black:black+h\n"},
+ /* TRice ( TRice_0 ) */ {13979u, 32u, 0u, "transmit:black:black+h\n"},
+ /* TRICE16 ( TRICE16_4 ) */ {14725u, 16u, 4u, "tst:TRICE16 %%6d -> %6d %6d %6d %6d\n"},
+ /* TRICE16 ( TRICE16_4 ) */ {14726u, 16u, 4u, "tst:TRICE16 %%7o -> %7o %7o %7o %7o\n"},
+ /* TRICE16 ( TRICE16_4 ) */ {14724u, 16u, 4u, "tst:TRICE16 %%05x -> %05x %05x %05x %05x\n"},
+ /* TRICE16 ( TRICE16_12 ) */ {14859u, 16u, 12u, "tst:TRICE16 %d %d %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE16 ( TRICE16_11 ) */ {14858u, 16u, 11u, "tst:TRICE16 %d %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE16 ( TRICE16_10 ) */ {14857u, 16u, 10u, "tst:TRICE16 %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE16 ( TRICE16_9 ) */ {14856u, 16u, 9u, "tst:TRICE16 %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE16 ( TRICE16_8 ) */ {14855u, 16u, 8u, "tst:TRICE16 %d %d %d %d %d %d %d %d\n"},
+ /* TRICE16 ( TRICE16_7 ) */ {14854u, 16u, 7u, "tst:TRICE16 %d %d %d %d %d %d %d\n"},
+ /* TRICE16 ( TRICE16_6 ) */ {14853u, 16u, 6u, "tst:TRICE16 %d %d %d %d %d %d\n"},
+ /* TRICE16 ( TRICE16_5 ) */ {14852u, 16u, 5u, "tst:TRICE16 %d %d %d %d %d\n"},
+ /* TRICE16 ( TRICE16_4 ) */ {14851u, 16u, 4u, "tst:TRICE16 %d %d %d %d\n"},
+ /* TRICE16 ( TRICE16_3 ) */ {14850u, 16u, 3u, "tst:TRICE16 %d %d %d\n"},
+ /* TRICE16 ( TRICE16_2 ) */ {14849u, 16u, 2u, "tst:TRICE16 %d %d\n"},
+ /* TRICE16 ( TRICE16_1 ) */ {14848u, 16u, 1u, "tst:TRICE16 %d\n"},
+ /* TRICE16 ( TRICE16_9 ) */ {14860u, 16u, 9u, "tst:TRICE16 %t %b %x %X %d %u %o %O %p\n"},
+ /* TRICE16_9 ( TRICE16_9 ) */ {14873u, 16u, 9u, "tst:TRICE16 %t %b %x %X %d %u %o %O %p\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {14861u, 16u, 1u, "tst:TRICE16_1 %d\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {14768u, 16u, 1u, "tst:TRICE16_1 %d\n"},
+ /* TRICE16_1 ( TRICE16_1 ) */ {14782u, 16u, 1u, "tst:TRICE16_1 %u\n"},
+ /* TRICE16_10 ( TRICE16_10 ) */ {14870u, 16u, 10u, "tst:TRICE16_10 %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE16_11 ( TRICE16_11 ) */ {14871u, 16u, 11u, "tst:TRICE16_11 %d %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE16_12 ( TRICE16_12 ) */ {14872u, 16u, 12u, "tst:TRICE16_12 %d %d %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE16_2 ( TRICE16_2 ) */ {14862u, 16u, 2u, "tst:TRICE16_2 %d %d\n"},
+ /* TRICE16_2 ( TRICE16_2 ) */ {14769u, 16u, 2u, "tst:TRICE16_2 %d %d\n"},
+ /* TRICE16_2 ( TRICE16_2 ) */ {14783u, 16u, 2u, "tst:TRICE16_2 %u %u\n"},
+ /* TRICE16_3 ( TRICE16_3 ) */ {14863u, 16u, 3u, "tst:TRICE16_3 %d %d %d\n"},
+ /* TRICE16_3 ( TRICE16_3 ) */ {14770u, 16u, 3u, "tst:TRICE16_3 %d %d %d\n"},
+ /* TRICE16_3 ( TRICE16_3 ) */ {14784u, 16u, 3u, "tst:TRICE16_3 %u %u %u\n"},
+ /* TRICE16_4 ( TRICE16_4 ) */ {14864u, 16u, 4u, "tst:TRICE16_4 %d %d %d %d\n"},
+ /* TRICE16_4 ( TRICE16_4 ) */ {14771u, 16u, 4u, "tst:TRICE16_4 %d %d %d %d\n"},
+ /* TRICE16_4 ( TRICE16_4 ) */ {14785u, 16u, 4u, "tst:TRICE16_4 %u %u %u %u\n"},
+ /* TRICE16_5 ( TRICE16_5 ) */ {14865u, 16u, 5u, "tst:TRICE16_5 %d %d %d %d %d\n"},
+ /* TRICE16_6 ( TRICE16_6 ) */ {14866u, 16u, 6u, "tst:TRICE16_6 %d %d %d %d %d %d\n"},
+ /* TRICE16_7 ( TRICE16_7 ) */ {14867u, 16u, 7u, "tst:TRICE16_7 %d %d %d %d %d %d %d\n"},
+ /* TRICE16_8 ( TRICE16_8 ) */ {14868u, 16u, 8u, "tst:TRICE16_8 %d %d %d %d %d %d %d %d\n"},
+ /* TRICE16_9 ( TRICE16_9 ) */ {14869u, 16u, 9u, "tst:TRICE16_9 %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE32 ( TRICE32_12 ) */ {14900u, 32u, 12u, "tst:TRICE32 %t %b %x %X %d %u %o %O %p %e %f %g\n"},
+ /* TRICE32 ( TRICE32_4 ) */ {14727u, 32u, 4u, "tst:TRICE32 %%09x -> %09x %09x %09x %09x\n"},
+ /* TRICE32 ( TRICE32_4 ) */ {14728u, 32u, 4u, "tst:TRICE32 %%10d -> %10d %10d %10d %10x\n"},
+ /* TRICE32 ( TRICE32_12 ) */ {14886u, 32u, 12u, "tst:TRICE32 %d %d %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE32 ( TRICE32_11 ) */ {14885u, 32u, 11u, "tst:TRICE32 %d %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE32 ( TRICE32_10 ) */ {14884u, 32u, 10u, "tst:TRICE32 %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE32 ( TRICE32_9 ) */ {14883u, 32u, 9u, "tst:TRICE32 %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE32 ( TRICE32_8 ) */ {14882u, 32u, 8u, "tst:TRICE32 %d %d %d %d %d %d %d %d\n"},
+ /* TRICE32 ( TRICE32_7 ) */ {14881u, 32u, 7u, "tst:TRICE32 %d %d %d %d %d %d %d\n"},
+ /* TRICE32 ( TRICE32_6 ) */ {14880u, 32u, 6u, "tst:TRICE32 %d %d %d %d %d %d\n"},
+ /* TRICE32 ( TRICE32_5 ) */ {14879u, 32u, 5u, "tst:TRICE32 %d %d %d %d %d\n"},
+ /* TRICE32 ( TRICE32_4 ) */ {14878u, 32u, 4u, "tst:TRICE32 %d %d %d %d\n"},
+ /* TRICE32 ( TRICE32_3 ) */ {14877u, 32u, 3u, "tst:TRICE32 %d %d %d\n"},
+ /* TRICE32 ( TRICE32_2 ) */ {14876u, 32u, 2u, "tst:TRICE32 %d %d\n"},
+ /* TRICE32 ( TRICE32_1 ) */ {14875u, 32u, 1u, "tst:TRICE32 %d\n"},
+ /* TRICE32 ( TRICE32_12 ) */ {14887u, 32u, 12u, "tst:TRICE32 %t %b %x %X %d %u %o %O %p %e %f %g\n"},
+ /* TRICE32_1 ( TRICE32_1 ) */ {14888u, 32u, 1u, "tst:TRICE32_1 %d\n"},
+ /* TRICE32_1 ( TRICE32_1 ) */ {14772u, 32u, 1u, "tst:TRICE32_1 %08x\n"},
+ /* TRICE32_1 ( TRICE32_1 ) */ {14773u, 32u, 1u, "tst:TRICE32_1 %d\n"},
+ /* TRICE32_1 ( TRICE32_1 ) */ {14786u, 32u, 1u, "tst:TRICE32_1 %u\n"},
+ /* TRICE32_10 ( TRICE32_10 ) */ {14897u, 32u, 10u, "tst:TRICE32_10 %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE32_11 ( TRICE32_11 ) */ {14898u, 32u, 11u, "tst:TRICE32_11 %d %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE32_12 ( TRICE32_12 ) */ {14899u, 32u, 12u, "tst:TRICE32_12 %d %d %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE32_12 ( TRICE32_12 ) */ {14901u, 32u, 12u, "tst:TRICE32_12 %t %b %x %X %d %u %o %O %p %e %f %g\n"},
+ /* TRICE32_2 ( TRICE32_2 ) */ {14889u, 32u, 2u, "tst:TRICE32_2 %d %d\n"},
+ /* TRICE32_2 ( TRICE32_2 ) */ {14775u, 32u, 2u, "tst:TRICE32_2 %d %d\n"},
+ /* TRICE32_2 ( TRICE32_2 ) */ {14787u, 32u, 2u, "tst:TRICE32_2 %u %u\n"},
+ /* TRICE32_2 ( TRICE32_2 ) */ {14774u, 32u, 2u, "tst:TRICE32_2 %x %x\n"},
+ /* TRICE32_3 ( TRICE32_3 ) */ {14890u, 32u, 3u, "tst:TRICE32_3 %d %d %d\n"},
+ /* TRICE32_3 ( TRICE32_3 ) */ {14777u, 32u, 3u, "tst:TRICE32_3 %d %d %d\n"},
+ /* TRICE32_3 ( TRICE32_3 ) */ {14788u, 32u, 3u, "tst:TRICE32_3 %u %u %u\n"},
+ /* TRICE32_3 ( TRICE32_3 ) */ {14776u, 32u, 3u, "tst:TRICE32_3 %x %x %x\n"},
+ /* TRICE32_4 ( TRICE32_4 ) */ {14891u, 32u, 4u, "tst:TRICE32_4 %d %d %d %d\n"},
+ /* TRICE32_4 ( TRICE32_4 ) */ {14779u, 32u, 4u, "tst:TRICE32_4 %d %d %d %d\n"},
+ /* TRICE32_4 ( TRICE32_4 ) */ {14789u, 32u, 4u, "tst:TRICE32_4 %u %u %u %u\n"},
+ /* TRICE32_4 ( TRICE32_4 ) */ {14778u, 32u, 4u, "tst:TRICE32_4 %x %x %x %x\n"},
+ /* TRICE32_5 ( TRICE32_5 ) */ {14892u, 32u, 5u, "tst:TRICE32_5 %d %d %d %d %d\n"},
+ /* TRICE32_6 ( TRICE32_6 ) */ {14893u, 32u, 6u, "tst:TRICE32_6 %d %d %d %d %d %d\n"},
+ /* TRICE32_7 ( TRICE32_7 ) */ {14894u, 32u, 7u, "tst:TRICE32_7 %d %d %d %d %d %d %d\n"},
+ /* TRICE32_8 ( TRICE32_8 ) */ {14895u, 32u, 8u, "tst:TRICE32_8 %d %d %d %d %d %d %d %d\n"},
+ /* TRICE32_9 ( TRICE32_9 ) */ {14896u, 32u, 9u, "tst:TRICE32_9 %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE64 ( TRICE64_4 ) */ {14730u, 64u, 4u, "tst:TRICE64 %%09x -> %09x %09x %09x %09x\n"},
+ /* TRICE64 ( TRICE64_4 ) */ {14731u, 64u, 4u, "tst:TRICE64 %%10d -> %10d %10d %10d %10x\n"},
+ /* TRICE64 ( TRICE64_12 ) */ {14914u, 64u, 12u, "tst:TRICE64 %d %d %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE64 ( TRICE64_11 ) */ {14913u, 64u, 11u, "tst:TRICE64 %d %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE64 ( TRICE64_10 ) */ {14912u, 64u, 10u, "tst:TRICE64 %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE64 ( TRICE64_9 ) */ {14911u, 64u, 9u, "tst:TRICE64 %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE64 ( TRICE64_8 ) */ {14910u, 64u, 8u, "tst:TRICE64 %d %d %d %d %d %d %d %d\n"},
+ /* TRICE64 ( TRICE64_7 ) */ {14909u, 64u, 7u, "tst:TRICE64 %d %d %d %d %d %d %d\n"},
+ /* TRICE64 ( TRICE64_6 ) */ {14908u, 64u, 6u, "tst:TRICE64 %d %d %d %d %d %d\n"},
+ /* TRICE64 ( TRICE64_5 ) */ {14907u, 64u, 5u, "tst:TRICE64 %d %d %d %d %d\n"},
+ /* TRICE64 ( TRICE64_4 ) */ {14906u, 64u, 4u, "tst:TRICE64 %d %d %d %d\n"},
+ /* TRICE64 ( TRICE64_3 ) */ {14905u, 64u, 3u, "tst:TRICE64 %d %d %d\n"},
+ /* TRICE64 ( TRICE64_2 ) */ {14904u, 64u, 2u, "tst:TRICE64 %d %d\n"},
+ /* TRICE64 ( TRICE64_1 ) */ {14903u, 64u, 1u, "tst:TRICE64 %d\n"},
+ /* TRICE64 ( TRICE64_12 ) */ {14915u, 64u, 12u, "tst:TRICE64 %t %b %x %X %d %u %o %O %p %e %f %g\n"},
+ /* TRICE64_1 ( TRICE64_1 ) */ {14916u, 64u, 1u, "tst:TRICE64_1 %d\n"},
+ /* TRICE64_1 ( TRICE64_1 ) */ {14780u, 64u, 1u, "tst:TRICE64_1 %d\n"},
+ /* TRICE64_1 ( TRICE64_1 ) */ {14792u, 64u, 1u, "tst:TRICE64_1 %u\n"},
+ /* TRICE64_1 ( TRICE64_1 ) */ {14790u, 64u, 1u, "tst:TRICE64_1 %x\n"},
+ /* TRICE64_10 ( TRICE64_10 ) */ {14925u, 64u, 10u, "tst:TRICE64_10 %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE64_11 ( TRICE64_11 ) */ {14926u, 64u, 11u, "tst:TRICE64_11 %d %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE64_12 ( TRICE64_12 ) */ {14927u, 64u, 12u, "tst:TRICE64_12 %d %d %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE64_12 ( TRICE64_12 ) */ {14928u, 64u, 12u, "tst:TRICE64_12 %t %b %x %X %d %u %o %O %p %e %f %g\n"},
+ /* TRICE64_2 ( TRICE64_2 ) */ {14917u, 64u, 2u, "tst:TRICE64_2 %d %d\n"},
+ /* TRICE64_2 ( TRICE64_2 ) */ {14781u, 64u, 2u, "tst:TRICE64_2 %d %d\n"},
+ /* TRICE64_2 ( TRICE64_2 ) */ {14793u, 64u, 2u, "tst:TRICE64_2 %u %u\n"},
+ /* TRICE64_2 ( TRICE64_2 ) */ {14791u, 64u, 2u, "tst:TRICE64_2 %x %x\n"},
+ /* TRICE64_3 ( TRICE64_3 ) */ {14918u, 64u, 3u, "tst:TRICE64_3 %d %d %d\n"},
+ /* TRICE64_4 ( TRICE64_4 ) */ {14919u, 64u, 4u, "tst:TRICE64_4 %d %d %d %d\n"},
+ /* TRICE64_5 ( TRICE64_5 ) */ {14920u, 64u, 5u, "tst:TRICE64_5 %d %d %d %d %d\n"},
+ /* TRICE64_6 ( TRICE64_6 ) */ {14921u, 64u, 6u, "tst:TRICE64_6 %d %d %d %d %d %d\n"},
+ /* TRICE64_7 ( TRICE64_7 ) */ {14922u, 64u, 7u, "tst:TRICE64_7 %d %d %d %d %d %d %d\n"},
+ /* TRICE64_8 ( TRICE64_8 ) */ {14923u, 64u, 8u, "tst:TRICE64_8 %d %d %d %d %d %d %d %d\n"},
+ /* TRICE64_9 ( TRICE64_9 ) */ {14924u, 64u, 9u, "tst:TRICE64_9 %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE8 ( TRICE8_4 ) */ {14719u, 8u, 4u, "tst:TRICE8 %%4O -> %4O %4O %4O %4O\n"},
+ /* TRICE8 ( TRICE8_4 ) */ {14720u, 8u, 4u, "tst:TRICE8 %%4X -> %4X %4X %4X %4X\n"},
+ /* TRICE8 ( TRICE8_4 ) */ {14716u, 8u, 4u, "tst:TRICE8 %%4d -> %4d %4d %4d %4d\n"},
+ /* TRICE8 ( TRICE8_4 ) */ {14718u, 8u, 4u, "tst:TRICE8 %%4o -> %4o %4o %4o %4o\n"},
+ /* TRICE8 ( TRICE8_4 ) */ {14717u, 8u, 4u, "tst:TRICE8 %%4u -> %4u %4u %4u %4u\n"},
+ /* TRICE8 ( TRICE8_4 ) */ {14721u, 8u, 4u, "tst:TRICE8 %%4x -> %4x %4x %4x %4x\n"},
+ /* TRICE8 ( TRICE8_4 ) */ {14722u, 8u, 4u, "tst:TRICE8 %%8b -> %8b %8b %8b %8b\n"},
+ /* TRICE8 ( TRICE8_9 ) */ {14845u, 8u, 9u, "tst:TRICE8 %t %b %x %X %d %u %o %O %p\n"},
+ /* TRICE8 ( TRICE8_4 ) */ {14715u, 8u, 4u, "tst:TRICE8 %%03x -> %03x %03x %03x %03x\n"},
+ /* TRICE8 ( TRICE8_4 ) */ {14723u, 8u, 4u, "tst:TRICE8 %%08b -> %08b %08b %08b %08b\n"},
+ /* TRICE8 ( TRICE8_12 ) */ {14831u, 8u, 12u, "tst:TRICE8 %d %d %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE8 ( TRICE8_11 ) */ {14830u, 8u, 11u, "tst:TRICE8 %d %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE8 ( TRICE8_10 ) */ {14829u, 8u, 10u, "tst:TRICE8 %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE8 ( TRICE8_9 ) */ {14828u, 8u, 9u, "tst:TRICE8 %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE8 ( TRICE8_8 ) */ {14827u, 8u, 8u, "tst:TRICE8 %d %d %d %d %d %d %d %d\n"},
+ /* TRICE8 ( TRICE8_7 ) */ {14826u, 8u, 7u, "tst:TRICE8 %d %d %d %d %d %d %d\n"},
+ /* TRICE8 ( TRICE8_6 ) */ {14825u, 8u, 6u, "tst:TRICE8 %d %d %d %d %d %d\n"},
+ /* TRICE8 ( TRICE8_5 ) */ {14824u, 8u, 5u, "tst:TRICE8 %d %d %d %d %d\n"},
+ /* TRICE8 ( TRICE8_4 ) */ {14823u, 8u, 4u, "tst:TRICE8 %d %d %d %d\n"},
+ /* TRICE8 ( TRICE8_3 ) */ {14822u, 8u, 3u, "tst:TRICE8 %d %d %d\n"},
+ /* TRICE8 ( TRICE8_2 ) */ {14821u, 8u, 2u, "tst:TRICE8 %d %d\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {14820u, 8u, 1u, "tst:TRICE8 %d\n"},
+ /* TRICE8 ( TRICE8_9 ) */ {14832u, 8u, 9u, "tst:TRICE8 %t %b %x %X %d %u %o %O %p\n"},
+ /* TRICE8_1 ( TRICE8_1 ) */ {14833u, 8u, 1u, "tst:TRICE8_1 %d\n"},
+ /* TRICE8_8 ( TRICE8_8 ) */ {14766u, 8u, 8u, "tst:TRICE8_1 %%d=%d, %%u=%u, 0x%%x=0x%x, 0x%%2x=0x%2x, 0x%%02x=0x%02x, 0x%%3x=0x%3x, 0x%%03x=0x%03x, %%b=%b\n"},
+ /* TRICE8_1 ( TRICE8_1 ) */ {14734u, 8u, 1u, "tst:TRICE8_1 %02x\n"},
+ /* TRICE8_1 ( TRICE8_1 ) */ {14742u, 8u, 1u, "tst:TRICE8_1 %d\n"},
+ /* TRICE8_1 ( TRICE8_1 ) */ {14750u, 8u, 1u, "tst:TRICE8_1 %d\n"},
+ /* TRICE8_1 ( TRICE8_1 ) */ {14758u, 8u, 1u, "tst:TRICE8_1 %u\n"},
+ /* TRICE8_10 ( TRICE8_10 ) */ {14842u, 8u, 10u, "tst:TRICE8_10 %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE8_11 ( TRICE8_11 ) */ {14843u, 8u, 11u, "tst:TRICE8_11 %d %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE8_12 ( TRICE8_12 ) */ {14844u, 8u, 12u, "tst:TRICE8_12 %d %d %d %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE8_2 ( TRICE8_2 ) */ {14834u, 8u, 2u, "tst:TRICE8_2 %d %d\n"},
+ /* TRICE8_2 ( TRICE8_2 ) */ {14735u, 8u, 2u, "tst:TRICE8_2 %02x %02x\n"},
+ /* TRICE8_2 ( TRICE8_2 ) */ {14743u, 8u, 2u, "tst:TRICE8_2 %d %d\n"},
+ /* TRICE8_2 ( TRICE8_2 ) */ {14751u, 8u, 2u, "tst:TRICE8_2 %d %d\n"},
+ /* TRICE8_2 ( TRICE8_2 ) */ {14759u, 8u, 2u, "tst:TRICE8_2 %u %u\n"},
+ /* TRICE8_3 ( TRICE8_3 ) */ {14835u, 8u, 3u, "tst:TRICE8_3 %d %d %d\n"},
+ /* TRICE8_3 ( TRICE8_3 ) */ {14736u, 8u, 3u, "tst:TRICE8_3 %02x %02x %02x\n"},
+ /* TRICE8_3 ( TRICE8_3 ) */ {14744u, 8u, 3u, "tst:TRICE8_3 %d %d %d\n"},
+ /* TRICE8_3 ( TRICE8_3 ) */ {14752u, 8u, 3u, "tst:TRICE8_3 %d %d %d\n"},
+ /* TRICE8_3 ( TRICE8_3 ) */ {14760u, 8u, 3u, "tst:TRICE8_3 %u %u %u\n"},
+ /* TRICE8_4 ( TRICE8_4 ) */ {14836u, 8u, 4u, "tst:TRICE8_4 %d %d %d %d\n"},
+ /* TRICE8_4 ( TRICE8_4 ) */ {14737u, 8u, 4u, "tst:TRICE8_4 %02x %02x %02x %02x\n"},
+ /* TRICE8_4 ( TRICE8_4 ) */ {14745u, 8u, 4u, "tst:TRICE8_4 %d %d %d %d\n"},
+ /* TRICE8_4 ( TRICE8_4 ) */ {14753u, 8u, 4u, "tst:TRICE8_4 %d %d %d %d\n"},
+ /* TRICE8_4 ( TRICE8_4 ) */ {14761u, 8u, 4u, "tst:TRICE8_4 %u %u %u %u\n"},
+ /* TRICE8_5 ( TRICE8_5 ) */ {14837u, 8u, 5u, "tst:TRICE8_5 %d %d %d %d %d\n"},
+ /* TRICE8_5 ( TRICE8_5 ) */ {14738u, 8u, 5u, "tst:TRICE8_5 %02x %02x %02x %02x %02x\n"},
+ /* TRICE8_5 ( TRICE8_5 ) */ {14746u, 8u, 5u, "tst:TRICE8_5 %d %d %d %d %d\n"},
+ /* TRICE8_5 ( TRICE8_5 ) */ {14754u, 8u, 5u, "tst:TRICE8_5 %d %d %d %d %d\n"},
+ /* TRICE8_5 ( TRICE8_5 ) */ {14762u, 8u, 5u, "tst:TRICE8_5 %u %u %u %u %u\n"},
+ /* TRICE8_6 ( TRICE8_6 ) */ {14838u, 8u, 6u, "tst:TRICE8_6 %d %d %d %d %d %d\n"},
+ /* TRICE8_6 ( TRICE8_6 ) */ {14739u, 8u, 6u, "tst:TRICE8_6 %02x %02x %02x %02x %02x %02x\n"},
+ /* TRICE8_6 ( TRICE8_6 ) */ {14747u, 8u, 6u, "tst:TRICE8_6 %d %d %d %d %d %d\n"},
+ /* TRICE8_6 ( TRICE8_6 ) */ {14755u, 8u, 6u, "tst:TRICE8_6 %d %d %d %d %d %d\n"},
+ /* TRICE8_6 ( TRICE8_6 ) */ {14763u, 8u, 6u, "tst:TRICE8_6 %u %u %u %u %u %u\n"},
+ /* TRICE8_7 ( TRICE8_7 ) */ {14839u, 8u, 7u, "tst:TRICE8_7 %d %d %d %d %d %d %d\n"},
+ /* TRICE8_7 ( TRICE8_7 ) */ {14740u, 8u, 7u, "tst:TRICE8_7 %02x %02x %02x %02x %02x %02x %02x\n"},
+ /* TRICE8_7 ( TRICE8_7 ) */ {14748u, 8u, 7u, "tst:TRICE8_7 %d %d %d %d %d %d %d\n"},
+ /* TRICE8_7 ( TRICE8_7 ) */ {14756u, 8u, 7u, "tst:TRICE8_7 %d %d %d %d %d %d %d\n"},
+ /* TRICE8_7 ( TRICE8_7 ) */ {14764u, 8u, 7u, "tst:TRICE8_7 %u %u %u %u %u %u %u\n"},
+ /* TRICE8_8 ( TRICE8_8 ) */ {14840u, 8u, 8u, "tst:TRICE8_8 %d %d %d %d %d %d %d %d\n"},
+ /* TRICE8_8 ( TRICE8_8 ) */ {14741u, 8u, 8u, "tst:TRICE8_8 %02X %02X %02X %02X %02x %02x %02x %02x\n"},
+ /* TRICE8_8 ( TRICE8_8 ) */ {14749u, 8u, 8u, "tst:TRICE8_8 %d %d %d %d %d %d %d %d\n"},
+ /* TRICE8_8 ( TRICE8_8 ) */ {14757u, 8u, 8u, "tst:TRICE8_8 %d %d %d %d %d %d %d %d\n"},
+ /* TRICE8_8 ( TRICE8_8 ) */ {14765u, 8u, 8u, "tst:TRICE8_8 %u %u %u %u %u %u %u %u\n"},
+ /* TRICE8_9 ( TRICE8_9 ) */ {14841u, 8u, 9u, "tst:TRICE8_9 %d %d %d %d %d %d %d %d %d\n"},
+ /* TRICE8_9 ( TRICE8_9 ) */ {14846u, 8u, 9u, "tst:TRICE8_9 %t %b %x %X %d %u %o %O %p\n"},
+ /* TRice ( TRice32_1 ) */ {13423u, 32u, 1u, "value=%d\n"},
+ /* Trice ( Trice32_1 ) */ {13424u, 32u, 1u, "value=%d\n"},
+ /* trice ( trice32_1 ) */ {13425u, 32u, 1u, "value=%d\n"},
+ /* TRice8 ( TRice8_1 ) */ {13426u, 8u, 1u, "value=%d\n"},
+ /* Trice8 ( Trice8_1 ) */ {13427u, 8u, 1u, "value=%d\n"},
+ /* trice8 ( trice8_1 ) */ {13428u, 8u, 1u, "value=%d\n"},
+ /* TRice16 ( TRice16_1 ) */ {13429u, 16u, 1u, "value=%d\n"},
+ /* Trice16 ( Trice16_1 ) */ {13430u, 16u, 1u, "value=%d\n"},
+ /* trice16 ( trice16_1 ) */ {13431u, 16u, 1u, "value=%d\n"},
+ /* TRice32 ( TRice32_1 ) */ {13432u, 32u, 1u, "value=%d\n"},
+ /* Trice32 ( Trice32_1 ) */ {13433u, 32u, 1u, "value=%d\n"},
+ /* trice32 ( trice32_1 ) */ {13434u, 32u, 1u, "value=%d\n"},
+ /* TRice64 ( TRice64_1 ) */ {13435u, 64u, 1u, "value=%d\n"},
+ /* Trice64 ( Trice64_1 ) */ {13436u, 64u, 1u, "value=%d\n"},
+ /* trice64 ( trice64_1 ) */ {13437u, 64u, 1u, "value=%d\n"},
+ /* TRice_1 ( TRice32_1 ) */ {13438u, 32u, 1u, "value=%d\n"},
+ /* Trice_1 ( Trice32_1 ) */ {13439u, 32u, 1u, "value=%d\n"},
+ /* trice_1 ( trice32_1 ) */ {13440u, 32u, 1u, "value=%d\n"},
+ /* TRice8_1 ( TRice8_1 ) */ {13441u, 8u, 1u, "value=%d\n"},
+ /* Trice8_1 ( Trice8_1 ) */ {13442u, 8u, 1u, "value=%d\n"},
+ /* trice8_1 ( trice8_1 ) */ {13443u, 8u, 1u, "value=%d\n"},
+ /* TRice16_1 ( TRice16_1 ) */ {13444u, 16u, 1u, "value=%d\n"},
+ /* Trice16_1 ( Trice16_1 ) */ {13445u, 16u, 1u, "value=%d\n"},
+ /* trice16_1 ( trice16_1 ) */ {13446u, 16u, 1u, "value=%d\n"},
+ /* TRice32_1 ( TRice32_1 ) */ {13447u, 32u, 1u, "value=%d\n"},
+ /* Trice32_1 ( Trice32_1 ) */ {13448u, 32u, 1u, "value=%d\n"},
+ /* trice32_1 ( trice32_1 ) */ {13449u, 32u, 1u, "value=%d\n"},
+ /* TRice64_1 ( TRice64_1 ) */ {13450u, 64u, 1u, "value=%d\n"},
+ /* Trice64_1 ( Trice64_1 ) */ {13451u, 64u, 1u, "value=%d\n"},
+ /* trice64_1 ( trice64_1 ) */ {13452u, 64u, 1u, "value=%d\n"},
+ /* trice8 ( trice8_1 ) */ {13648u, 8u, 1u, "value=%d\n"},
+ /* Trice8 ( Trice8_1 ) */ {13649u, 8u, 1u, "value=%d\n"},
+ /* TRice8 ( TRice8_1 ) */ {13650u, 8u, 1u, "value=%d\n"},
+ /* trice8_1 ( trice8_1 ) */ {13651u, 8u, 1u, "value=%d\n"},
+ /* Trice8_1 ( Trice8_1 ) */ {13652u, 8u, 1u, "value=%d\n"},
+ /* TRice8_1 ( TRice8_1 ) */ {13653u, 8u, 1u, "value=%d\n"},
+ /* trice16 ( trice16_1 ) */ {13654u, 16u, 1u, "value=%d\n"},
+ /* Trice16 ( Trice16_1 ) */ {13655u, 16u, 1u, "value=%d\n"},
+ /* TRice16 ( TRice16_1 ) */ {13656u, 16u, 1u, "value=%d\n"},
+ /* trice16_1 ( trice16_1 ) */ {13657u, 16u, 1u, "value=%d\n"},
+ /* Trice16_1 ( Trice16_1 ) */ {13658u, 16u, 1u, "value=%d\n"},
+ /* TRice16_1 ( TRice16_1 ) */ {13659u, 16u, 1u, "value=%d\n"},
+ /* trice32 ( trice32_1 ) */ {13660u, 32u, 1u, "value=%d\n"},
+ /* Trice32 ( Trice32_1 ) */ {13661u, 32u, 1u, "value=%d\n"},
+ /* TRice32 ( TRice32_1 ) */ {13662u, 32u, 1u, "value=%d\n"},
+ /* trice32_1 ( trice32_1 ) */ {13663u, 32u, 1u, "value=%d\n"},
+ /* Trice32_1 ( Trice32_1 ) */ {13664u, 32u, 1u, "value=%d\n"},
+ /* TRice32_1 ( TRice32_1 ) */ {13665u, 32u, 1u, "value=%d\n"},
+ /* trice64 ( trice64_1 ) */ {13666u, 64u, 1u, "value=%d\n"},
+ /* Trice64 ( Trice64_1 ) */ {13667u, 64u, 1u, "value=%d\n"},
+ /* TRice64 ( TRice64_1 ) */ {13668u, 64u, 1u, "value=%d\n"},
+ /* trice64_1 ( trice64_1 ) */ {13669u, 64u, 1u, "value=%d\n"},
+ /* Trice64_1 ( Trice64_1 ) */ {13670u, 64u, 1u, "value=%d\n"},
+ /* TRice64_1 ( TRice64_1 ) */ {13671u, 64u, 1u, "value=%d\n"},
+ /* TRICE ( TRICE32_1 ) */ {13672u, 32u, 1u, "value=%d\n"},
+ /* TRICE ( TRICE32_1 ) */ {13673u, 32u, 1u, "value=%d\n"},
+ /* TRICE ( TRICE32_1 ) */ {13674u, 32u, 1u, "value=%d\n"},
+ /* TRICE ( TRICE32_1 ) */ {13675u, 32u, 1u, "value=%d\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {13676u, 8u, 1u, "value=%d\n"},
+ /* TRICE8_1 ( TRICE8_1 ) */ {13677u, 8u, 1u, "value=%d\n"},
+ /* trice8 ( trice8_1 ) */ {13678u, 8u, 1u, "value=%d\n"},
+ /* trice8_1 ( trice8_1 ) */ {13679u, 8u, 1u, "value=%d\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {13680u, 8u, 1u, "value=%d\n"},
+ /* TRICE8_1 ( TRICE8_1 ) */ {13681u, 8u, 1u, "value=%d\n"},
+ /* Trice8 ( Trice8_1 ) */ {13682u, 8u, 1u, "value=%d\n"},
+ /* Trice8_1 ( Trice8_1 ) */ {13683u, 8u, 1u, "value=%d\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {13684u, 8u, 1u, "value=%d\n"},
+ /* TRICE8_1 ( TRICE8_1 ) */ {13685u, 8u, 1u, "value=%d\n"},
+ /* TRice8 ( TRice8_1 ) */ {13686u, 8u, 1u, "value=%d\n"},
+ /* TRice8_1 ( TRice8_1 ) */ {13687u, 8u, 1u, "value=%d\n"},
+ /* TRICE8 ( TRICE8_1 ) */ {13688u, 8u, 1u, "value=%d\n"},
+ /* TRICE8_1 ( TRICE8_1 ) */ {13689u, 8u, 1u, "value=%d\n"},
+ /* trice8 ( trice8_1 ) */ {13242u, 8u, 1u, "value=%x\n"},
+ /* trice8 ( trice8_1 ) */ {13243u, 8u, 1u, "value=%x\n"},
+ /* TRICE ( TRICE_0 ) */ {13739u, 32u, 0u, "verbose:blue:default\n"},
+ /* trice ( trice_0 ) */ {13789u, 32u, 0u, "verbose:blue:default\n"},
+ /* TRICE ( TRICE_0 ) */ {13839u, 32u, 0u, "verbose:blue:default\n"},
+ /* Trice ( Trice_0 ) */ {13889u, 32u, 0u, "verbose:blue:default\n"},
+ /* TRICE ( TRICE_0 ) */ {13939u, 32u, 0u, "verbose:blue:default\n"},
+ /* TRice ( TRice_0 ) */ {13989u, 32u, 0u, "verbose:blue:default\n"},
+ /* TRICE ( TRICE_0 ) */ {15154u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE ( TRICE_0 ) */ {15155u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE ( TRICE_0 ) */ {15156u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE ( TRICE_0 ) */ {15157u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* trice ( trice_0 ) */ {15158u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* Trice ( Trice_0 ) */ {15159u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRice ( TRice_0 ) */ {15160u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE_0 ( TRICE_0 ) */ {15161u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE_0 ( TRICE_0 ) */ {15162u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE_0 ( TRICE_0 ) */ {15163u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE_0 ( TRICE_0 ) */ {15164u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* trice_0 ( trice_0 ) */ {15165u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* Trice_0 ( Trice_0 ) */ {15166u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRice_0 ( TRice_0 ) */ {15167u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE0 ( TRICE_0 ) */ {15168u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE0 ( TRICE_0 ) */ {15169u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE0 ( TRICE_0 ) */ {15170u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE0 ( TRICE_0 ) */ {15171u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* trice0 ( trice_0 ) */ {15172u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* Trice0 ( Trice_0 ) */ {15173u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRice0 ( TRice_0 ) */ {15174u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE_0 ( TRICE_0 ) */ {15175u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE_0 ( TRICE_0 ) */ {15176u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE_0 ( TRICE_0 ) */ {15177u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE_0 ( TRICE_0 ) */ {15178u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* trice_0 ( trice_0 ) */ {15179u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* Trice_0 ( Trice_0 ) */ {15180u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRice_0 ( TRice_0 ) */ {15181u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE8 ( TRICE_0 ) */ {15182u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE8 ( TRICE_0 ) */ {15183u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE8 ( TRICE_0 ) */ {15184u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE8 ( TRICE_0 ) */ {15185u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* trice8 ( trice_0 ) */ {15186u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* Trice8 ( Trice_0 ) */ {15187u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRice8 ( TRice_0 ) */ {15188u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE8_0 ( TRICE_0 ) */ {15189u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE8_0 ( TRICE_0 ) */ {15190u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE8_0 ( TRICE_0 ) */ {15191u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE8_0 ( TRICE_0 ) */ {15192u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* trice8_0 ( trice_0 ) */ {15193u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* Trice8_0 ( Trice_0 ) */ {15194u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRice8_0 ( TRice_0 ) */ {15195u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* trice16 ( trice_0 ) */ {15196u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* trice16 ( trice_0 ) */ {15197u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* trice16 ( trice_0 ) */ {15198u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* trice16 ( trice_0 ) */ {15199u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* trice16 ( trice_0 ) */ {15200u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* Trice16 ( Trice_0 ) */ {15201u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRice16 ( TRice_0 ) */ {15202u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE16_0 ( TRICE_0 ) */ {15203u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE16_0 ( TRICE_0 ) */ {15204u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE16_0 ( TRICE_0 ) */ {15205u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE16_0 ( TRICE_0 ) */ {15206u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* trice16_0 ( trice_0 ) */ {15207u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* Trice16_0 ( Trice_0 ) */ {15208u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRice16_0 ( TRice_0 ) */ {15209u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE32 ( TRICE_0 ) */ {15210u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE32 ( TRICE_0 ) */ {15211u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE32 ( TRICE_0 ) */ {15212u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE32 ( TRICE_0 ) */ {15213u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* trice32 ( trice_0 ) */ {15214u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* Trice32 ( Trice_0 ) */ {15215u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRice32 ( TRice_0 ) */ {15216u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE32_0 ( TRICE_0 ) */ {15217u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE32_0 ( TRICE_0 ) */ {15218u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE32_0 ( TRICE_0 ) */ {15219u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE32_0 ( TRICE_0 ) */ {15220u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* trice32_0 ( trice_0 ) */ {15221u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* Trice32_0 ( Trice_0 ) */ {15222u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRice32_0 ( TRice_0 ) */ {15223u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE64 ( TRICE_0 ) */ {15224u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE64 ( TRICE_0 ) */ {15225u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE64 ( TRICE_0 ) */ {15226u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE64 ( TRICE_0 ) */ {15227u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* trice64 ( trice_0 ) */ {15228u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* Trice64 ( Trice_0 ) */ {15229u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRice64 ( TRice_0 ) */ {15230u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE64_0 ( TRICE_0 ) */ {15231u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE64_0 ( TRICE_0 ) */ {15232u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE64_0 ( TRICE_0 ) */ {15233u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRICE64_0 ( TRICE_0 ) */ {15234u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* trice64_0 ( trice_0 ) */ {15235u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* Trice64_0 ( Trice_0 ) */ {15236u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* TRice64_0 ( TRice_0 ) */ {15237u, 32u, 0u, "w: Hello! 👋🙂 \a\n"},
+ /* triceS ( triceS ) */ {16369u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "w: Hello! 👋🙂 \n\n ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ \n 🎈🎈🎈🎈%s🎈🎈🎈🎈\n 🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃🍃 \n\n\n"},
+ /* trice ( trice_0 ) */ {14796u, 32u, 0u, "w:B"},
+ /* trice ( trice_0 ) */ {14814u, 32u, 0u, "w:B"},
+ /* TRICE ( TRICE_0 ) */ {13719u, 32u, 0u, "warning:11+i:red\n"},
+ /* trice ( trice_0 ) */ {13769u, 32u, 0u, "warning:11+i:red\n"},
+ /* TRICE ( TRICE_0 ) */ {13819u, 32u, 0u, "warning:11+i:red\n"},
+ /* Trice ( Trice_0 ) */ {13869u, 32u, 0u, "warning:11+i:red\n"},
+ /* TRICE ( TRICE_0 ) */ {13919u, 32u, 0u, "warning:11+i:red\n"},
+ /* TRice ( TRice_0 ) */ {13969u, 32u, 0u, "warning:11+i:red\n"},
+ /* TRICE_N ( TRICE_N ) */ {15256u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:%s\n"},
+ /* trice ( trice_0 ) */ {13034u, 32u, 0u, "wr:X0 after 1\n"},
+ /* trice ( trice_0 ) */ {13035u, 32u, 0u, "wr:X0 before 2\n"},
+ /* trice ( trice_0 ) */ {13045u, 32u, 0u, "wr:X0 tail\n"},
+ /* trice8B ( trice8B ) */ {13038u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-B: %02x\n"},
+ /* trice8B ( trice8B ) */ {13039u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-B: %02x\n"},
+ /* trice8B ( trice8B ) */ {13044u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-B: %02x\n"},
+ /* triceS ( triceS ) */ {13036u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-S:%s\n"},
+ /* triceS ( triceS ) */ {13037u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-S:%s\n"},
+ /* triceS ( triceS ) */ {13043u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-S:%s\n"},
+ /* TRice8B ( TRice8B ) */ {13041u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-TRiceB: %02x\n"},
+ /* Trice8B ( Trice8B ) */ {13042u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-TriceB: %02x\n"},
+ /* TriceS ( TriceS ) */ {13040u, 8u, TRICE_LOG_PARAM_COUNT_DYNAMIC, "wr:X0-TriceS:%s\n"},
+ /* trice ( trice_0 ) */ {14798u, 32u, 0u, "wr:d"},
+ /* trice ( trice_0 ) */ {14816u, 32u, 0u, "wr:d"},
+ /* TRICE ( TRICE_0 ) */ {13727u, 32u, 0u, "write:black+u:yellow+h\n"},
+ /* trice ( trice_0 ) */ {13777u, 32u, 0u, "write:black+u:yellow+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13827u, 32u, 0u, "write:black+u:yellow+h\n"},
+ /* Trice ( Trice_0 ) */ {13877u, 32u, 0u, "write:black+u:yellow+h\n"},
+ /* TRICE ( TRICE_0 ) */ {13927u, 32u, 0u, "write:black+u:yellow+h\n"},
+ /* TRice ( TRice_0 ) */ {13977u, 32u, 0u, "write:black+u:yellow+h\n"},
+ /* trice16 ( trice16_1 ) */ {16374u, 16u, 1u, "wrn:TriceDynStringBufTruncateCount = %u\n"},
};
// triceLogElements is used by the RX resolver to bound the generated table.
diff --git a/trice_bindIDs_in_examples_and_test_folder.sh b/trice_bindIDs_in_examples_and_test_folder.sh
new file mode 100755
index 000000000..0937e7cc7
--- /dev/null
+++ b/trice_bindIDs_in_examples_and_test_folder.sh
@@ -0,0 +1,17 @@
+#!/usr/bin/env bash
+#
+# Generate bind sidecars for the canonical examples and PC target sources.
+
+set -euo pipefail
+
+ROOT="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
+# shellcheck source=./scripts/_trice_id_workflow.sh
+source "$ROOT/scripts/_trice_id_workflow.sh"
+
+(
+ cd "$ROOT" || exit 1
+ trice_id_workflow bind
+) || {
+ echo "FAIL: trice bind failed" >&2
+ exit 1
+}
diff --git a/trice_cleanIDs_in_examples_and_test_folder.sh b/trice_cleanIDs_in_examples_and_test_folder.sh
index 190b612a2..54bf4cfbf 100755
--- a/trice_cleanIDs_in_examples_and_test_folder.sh
+++ b/trice_cleanIDs_in_examples_and_test_folder.sh
@@ -1,14 +1,17 @@
-#!/bin/bash
+#!/usr/bin/env bash
# file name: trice_cleanIDs_in_examples_and_test_folder.sh
set -euo pipefail
-cd "$(dirname "$0")" || exit 1
-source ./scripts/_setup_trice_environment.sh
+ROOT="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
+# shellcheck source=./scripts/_trice_id_workflow.sh
+source "$ROOT/scripts/_trice_id_workflow.sh"
-# shellcheck disable=SC2086
-if ! trice clean $TRICE_DEFAULTS $TRICE_ALIASES $TRICE_PRJ_FILES; then
+(
+ cd "$ROOT" || exit 1
+ trice_id_workflow clean
+) || {
echo "FAIL: trice clean failed" >&2
exit 1
-fi
+}
diff --git a/trice_insertIDs_in_examples_and_test_folder.sh b/trice_insertIDs_in_examples_and_test_folder.sh
index 2c16c5144..8e1114630 100755
--- a/trice_insertIDs_in_examples_and_test_folder.sh
+++ b/trice_insertIDs_in_examples_and_test_folder.sh
@@ -1,16 +1,17 @@
-#!/bin/bash
+#!/usr/bin/env bash
# file name: trice_insertIDs_in_examples_and_test_folder.sh
set -euo pipefail
-cd "$(dirname "$0")" || exit 1
-source ./scripts/_setup_trice_environment.sh
+ROOT="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
+# shellcheck source=./scripts/_trice_id_workflow.sh
+source "$ROOT/scripts/_trice_id_workflow.sh"
-# shellcheck disable=SC2086
-if ! trice insert $TRICE_DEFAULTS $TRICE_ALIASES $TRICE_PRJ_FILES -IDMin 13000 -IDMax 16383; then
- echo "FAIL: trice insert failed"
+(
+ cd "$ROOT" || exit 1
+ trice_id_workflow insert
+) || {
+ echo "FAIL: trice insert failed" >&2
exit 1
-fi
-
-cd - >/dev/null || exit
+}
diff --git a/trice_remigrateBindToClean_in_examples_and_test_folder.sh b/trice_remigrateBindToClean_in_examples_and_test_folder.sh
new file mode 100755
index 000000000..d84ad67f9
--- /dev/null
+++ b/trice_remigrateBindToClean_in_examples_and_test_folder.sh
@@ -0,0 +1,17 @@
+#!/usr/bin/env bash
+#
+# Return the canonical examples and PC target sources from Bound to Clean.
+
+set -euo pipefail
+
+ROOT="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
+# shellcheck source=./scripts/_trice_id_workflow.sh
+source "$ROOT/scripts/_trice_id_workflow.sh"
+
+(
+ cd "$ROOT" || exit 1
+ trice_id_workflow remigrate
+) || {
+ echo "FAIL: Trice Bind-to-Clean re-migration failed" >&2
+ exit 1
+}