Files
Balsam_167/Source/Internal/log_to_mem.c

51 lines
2.2 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.
/**
* @file log_to_mem.c
* @brief Кольцевой журнал событий во внешней области памяти.
*
* Резервирует секцию .logg, хранит границы и текущий адрес журнала и очищает
* всю отведённую область по запросу. LOG_PAGE_START/LOG_PAGE_LEN должны
* соответствовать linker command file; clear_mem() выполняет длительную
* блокирующую запись и не предназначена для вызова из обработчика прерывания.
*/
/****************************************************************/
/* TMS320C32 */
/* ====== BIOS, КЛАИН, КЛВСП ====== */
/* ЦНИИ СЭТ (с) 1998-2001г. */
/****************************************************************/
/* log_to_mem.c
****************************************************************
* Запись логов в памyть *
****************************************************************/
#include "log_to_mem.h"
int no_write = 0,
never_write = 0; // Флаги, чтобы не писать (если что)
#pragma DATA_SECTION(logs_block,".logg");
unsigned int logs_block[0xFA00];
LOG Log;
unsigned int flog=0;
// Очищение памати, где логи лежат
/**
* @brief Сбрасывает метаданные и физически очищает всю область журнала.
* @post Log.Adres установлен в LOG_PAGE_START, Log.Circl сброшен, а каждое
* слово выделенной области равно нулю.
* @warning Функция блокируется на LOG_PAGE_LEN операций внешней памяти.
*/
void clear_mem()
{
unsigned long i;
Log.Start = LOG_PAGE_START;
Log.Finis = LOG_PAGE_START + LOG_PAGE_LEN;
Log.Adres = Log.Start;
Log.Circl = 0;
/* Полуинтервал [Start, Finis) исключает запись за последним словом секции. */
for (i=Log.Start; i<Log.Finis; i++)
*(volatile int *)i = 0;
}