Добавить пояснения к исходникам, заголовкам TI, настройкам CCS и существующим проверкам. Зафиксировать правила кодировки, обзор модулей и аудит комментариев.
95 lines
6.6 KiB
C
95 lines
6.6 KiB
C
/* Двухбанковый регистратор событий нагрузки во внешней 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
|
|
/* Задаёт UMP_LOG_WORDS = 42U; UMP LOG слова. */
|
|
#define UMP_LOG_WORDS 42U
|
|
/* Задаёт 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
|
|
/* Объявляет ump_dac_ramp — ump ЦАП ramp; ump_dac_duration — ump ЦАП duration; ump_dac_go10 — ump ЦАП go 10; ump_dac_stop10 — ump ЦАП stop 10; ump_dac_position — ump ЦАП position. Память определена в другом модуле. */
|
|
extern unsigned int ump_dac_ramp, ump_dac_duration, ump_dac_go10, ump_dac_stop10, ump_dac_position;
|
|
/* Явно инициализирует оба банка регистратора до включения 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 */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
|