Files
Balsam_167/Source/Internal/Include/log_to_mem.h
Andrey 1e911e5250 Обновить логгер УМП и исправить запуск UART и EEPROM
Перейти на компактные 12-словные записи v4 и сохранять 10 процентов банка после отключения. Добавить трёхсекундное ожидание роста ЗПТ и настраиваемый лимит пусков. Явно инициализировать состояние UART и гарантировать публикацию параметров EEPROM перед запуском Timer2. Сохранить воспроизводимые сборки, регрессионные проверки, документацию и обновлённые результаты сборки; исключить временные артефакты.
2026-10-12 12:25:41 +03:00

93 lines
6.4 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* Двухбанковый регистратор событий нагрузки во внешней RAM. Русские пояснения сохранены в UTF-8. */
/* Начинает условие: _LOG_TO_MEM ещё не определён; защищает повторное включение или задаёт значение сборки. */
#ifndef _LOG_TO_MEM
/* Определяет защитный символ или переключатель _LOG_TO_MEM для последующей компиляции. */
#define _LOG_TO_MEM
/* Включает следующий блок только при определённом символе __cplusplus. */
#ifdef __cplusplus
/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */
extern "C" {
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Определениa длa работы логгера */
/* Задаёт LOG_PAGE_START = 0x0200000; данные LOG_PAGE_START. */
#define LOG_PAGE_START 0x0200000
/* Задаёт LOG_PAGE_LEN = 0xFA00; данные LOG_PAGE_LEN. */
#define LOG_PAGE_LEN 0xFA00
/* Объявляет no_write — no запись; never_write — never запись. Память определена в другом модуле. */
extern int no_write, never_write; // Флаги, чтобы не писать (если что)
/* Начинает объявление типа, используемого структурами и интерфейсами этого модуля. */
typedef struct
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Объявляет Start — данные Start. */
unsigned long Start;
/* Объявляет Finis — данные Finis. */
unsigned long Finis;
/* Объявляет Adres — данные Adres. */
unsigned long Adres;
/* Объявляет Circl — данные Circl. */
unsigned int Circl;
/* Продолжает список аргументов, полей или выражение } LOG;; порядок элементов сохраняется. */
} LOG;
/* Объявляет Log — данные Log. Память определена в другом модуле. */
extern LOG Log;
/* Запись словa в памать, где логи лежат */
/* Задаёт Log_to_mem = *(int *)(Log.Adres++) = x; данные Log_to_mem. */
#define Log_to_mem(x) *(int *)(Log.Adres++) = x
/* Проверка границы памати дла логов */
//#define Test_mem_limit(x) if(Log.Adres > (Log.Finis - (x))) Log.Adres = Log.Start
/* Задаёт Test_mem_limit = if(Log.Adres > (Log.Finis - (x))) Log.Adres -=(x); данные Test_mem_limit. */
#define Test_mem_limit(x) if(Log.Adres > (Log.Finis - (x))) Log.Adres -=(x)
/* Очистка памати (обнуление) */
/* Обнуляет выделенный диапазон внешней RAM журнала и задаёт границы кольцевого буфера. */
void clear_mem();
/* Логгер УМП: отдельное адресное пространство Modbus, без изменения
* 128 технологических регистров. Два банка по 760 записей:
* текущий кольцевой журнал и зафиксированный фрагмент отключения. */
/* Задаёт UMP_LOG_BASE = 0x1000U; данные UMP_LOG_BASE. */
#define UMP_LOG_BASE 0x1000U
/* Задаёт UMP_LOG_DATA = 0x1010U; UMP LOG данные. */
#define UMP_LOG_DATA 0x1010U
/* Запись v4 содержит 12 слов: время, событие, дискреты, ток, уставки, два ЗПТ и нулевой резерв для пар CAN. */
#define UMP_LOG_WORDS 12U
/* Задаёт UMP_LOG_CAPACITY = 760U; данные UMP_LOG_CAPACITY. */
#define UMP_LOG_CAPACITY 760U
/* Задаёт UMP_LOG_LIVE_RECORDS = (120U / UMP_LOG_WORDS); данные UMP_LOG_LIVE_RECORDS. */
#define UMP_LOG_LIVE_RECORDS (120U / UMP_LOG_WORDS)
/* Задаёт UMP_LOG_LIVE = 0x1100U; данные UMP_LOG_LIVE. */
#define UMP_LOG_LIVE 0x1100U
/* Явно инициализирует оба банка регистратора до включения IRQ; повторный старт записи архив не стирает. */
void ump_log_init(void);
/* Продвигает время регистратора в Timer1 и снимает записи с заданным периодом. */
void ump_log_tick(void);
/* Обслуживает изменения дискретных входов и выходов из главного цикла. */
void ump_log_io(void);
/* Обновляет последние CAN-данные и напряжения для следующего снимка регистратора. */
void ump_log_can(unsigned int header, unsigned int a, unsigned int b, unsigned int c);
/* Регистрирует изменение слова команд после записи по последовательному интерфейсу. */
void ump_log_rs(void);
/* Проверяет область чтения регистратора и возвращает слова состояния либо архивной записи. */
unsigned int ump_log_read(unsigned int address);
/* Применяет допустимые команды управления регистратором, сохраняя ограничения адресов. */
int ump_log_write(unsigned int address, unsigned int value);
/* Включает следующий блок только при определённом символе __cplusplus. */
#ifdef __cplusplus
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
#endif /* _LOG_TO_MEM */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */