доработан bit stuff

(он другой стмкой определялся как form error, а не stuff error)
This commit is contained in:
Razvalyaev 2025-09-12 14:51:32 +03:00
parent 43ac7e90fc
commit a373695c4b
3 changed files with 40 additions and 20 deletions

View File

@ -2,7 +2,7 @@
#define CANCONFIG_H #define CANCONFIG_H
#define CAN_ONLY_EMULATING #define CAN_ONLY_EMULATING
//#define CAN_ERROR_WITH_CORRECT_CRC #define CAN_ERROR_WITH_CORRECT_CRC
// Настройки GPIO и таймера // Настройки GPIO и таймера

View File

@ -36,29 +36,32 @@ uint16_t compute_crc15(const uint8_t *bits, uint32_t len) {
} }
return crc; return crc;
} }
int stuff_to_skip = 1;
void apply_bit_stuffing_with_error(const uint8_t *src, uint32_t src_len, uint8_t *dst, uint32_t *dst_len, uint8_t skip_stuff) { void apply_bit_stuffing_with_error(const uint8_t *src, uint32_t src_len, uint8_t *dst, uint32_t *dst_len, uint8_t skip_stuff) {
*dst_len = 0; *dst_len = 0;
uint8_t last_bit = src[0]; uint8_t last_bit = src[0];
uint8_t count = 1; uint8_t count = 1;
append_bit(dst, dst_len, last_bit); append_bit(dst, dst_len, last_bit);
for (uint32_t i = 1; i < src_len; i++) { for (uint32_t i = 1; i < src_len; i++) {
uint8_t bit = src[i]; uint8_t bit = src[i];
append_bit(dst, dst_len, bit); append_bit(dst, dst_len, bit);
if (bit == last_bit) { if (bit == last_bit) {
count++; count++;
if (count == 5) { if (count == 5) {
if (!skip_stuff) { if(skip_stuff != stuff_to_skip)
append_bit(dst, dst_len, !bit); // вставляем противоположный бит append_bit(dst, dst_len, !bit); // вставляем противоположный бит
} count = 0;
count = 0; if (skip_stuff) {
} skip_stuff++;
} else { }
count = 1; }
last_bit = bit; } else {
} count = 1;
last_bit = bit;
} }
}
} }
// Вспомогательная функция для инверсии бита // Вспомогательная функция для инверсии бита

View File

@ -180,7 +180,24 @@
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>raw_bits</ItemText> <ItemText>raw_bits</ItemText>
</Ww> </Ww>
<Ww>
<count>6</count>
<WinNumber>1</WinNumber>
<ItemText>can_bits</ItemText>
</Ww>
<Ww>
<count>7</count>
<WinNumber>1</WinNumber>
<ItemText>stuff_to_skip</ItemText>
</Ww>
</WatchWindow1> </WatchWindow1>
<WatchWindow2>
<Ww>
<count>0</count>
<WinNumber>2</WinNumber>
<ItemText>stuff_to_skip</ItemText>
</Ww>
</WatchWindow2>
<Tracepoint> <Tracepoint>
<THDelay>0</THDelay> <THDelay>0</THDelay>
</Tracepoint> </Tracepoint>