Перенесён из репозитория protocan-transport, который подключался сабмодулем в CAN_to_RS485. Кадрирование AA 55 с CRC16 поверх любого байтового потока (RS485, RS232, USB CDC), разбор 29-битного идентификатора, общее адресное пространство регистров и каталог с подпиской на поток значений для SETGUI. Состояние живёт в структурах вызывающего, поэтому в одной прошивке поднимается сколько угодно независимых каналов. Порт STM32F4 (USART + DMA) в комплекте. Хостовые тесты test_transport и test_gui проходят.
46 lines
1.7 KiB
C
46 lines
1.7 KiB
C
/**
|
||
* @file pcan_config.h
|
||
* @brief Настройки времени компиляции.
|
||
*
|
||
* Значения по умолчанию рассчитаны на МК без ОС. Переопределяются
|
||
* либо через -D, либо через собственный pcan_config_user.h.
|
||
*/
|
||
#ifndef PCAN_CONFIG_H
|
||
#define PCAN_CONFIG_H
|
||
|
||
#if defined(PCAN_USE_USER_CONFIG)
|
||
#include "pcan_config_user.h"
|
||
#endif
|
||
|
||
/** Максимальная длина поля данных CAN. */
|
||
#ifndef PCAN_DATA_MAX
|
||
#define PCAN_DATA_MAX 8U
|
||
#endif
|
||
|
||
/**
|
||
* @brief Барьер компилятора для разделяемых с прерыванием переменных.
|
||
*
|
||
* Библиотека не отключает прерывания сама: очереди рассчитаны на схему
|
||
* "один писатель + один читатель", где индексы обновляются атомарно.
|
||
* Если у вас несколько писателей, оберните вызовы своей блокировкой.
|
||
*/
|
||
#ifndef PCAN_BARRIER
|
||
# if defined(__GNUC__) || defined(__clang__) || defined(__ARMCC_VERSION)
|
||
# define PCAN_BARRIER() __asm volatile("" ::: "memory")
|
||
# else
|
||
# define PCAN_BARRIER() do { } while (0)
|
||
# endif
|
||
#endif
|
||
|
||
/** Таблица CRC (512 байт flash) вместо побитового расчёта. */
|
||
#ifndef PCAN_CRC_TABLE
|
||
#define PCAN_CRC_TABLE 0
|
||
#endif
|
||
|
||
/** Количество регионов, которые может содержать одна карта GAS. */
|
||
#ifndef PCAN_GAS_MAX_REGIONS
|
||
#define PCAN_GAS_MAX_REGIONS 16U
|
||
#endif
|
||
|
||
#endif /* PCAN_CONFIG_H */
|