/** * @file log_to_mem.h * @brief Разметка внешней памяти и состояние кольцевого журнала. * * LOG_PAGE_START и LOG_PAGE_LEN обязаны совпадать с картой линковщика. Флаги * no_write/never_write запрещают запись на разных уровнях, а clear_mem() * полностью обнуляет область и потому является длительной операцией. */ /****************************************************************/ /* TMS320C32 */ /* ====== BIOS, КЛАИН, КЛВСП ====== */ /* ЦНИИ СЭТ (с) 1998-2001г. */ /****************************************************************/ /* log_to_mem.h **************************************************************** * Запись логов в памyть * ****************************************************************/ #ifndef _LOG_TO_MEM #define _LOG_TO_MEM #ifdef __cplusplus extern "C" { #endif /* Определениa длa работы логгера */ #define LOG_PAGE_START 0x0200000 #define LOG_PAGE_LEN 0xFA00 extern int no_write, never_write; // Флаги, чтобы не писать (если что) typedef struct { unsigned long Start; unsigned long Finis; unsigned long Adres; unsigned int Circl; } LOG; extern LOG Log; /* Запись словa в памать, где логи лежат */ #define Log_to_mem(x) *(int *)(Log.Adres++) = x /* Проверка границы памати дла логов */ //#define Test_mem_limit(x) if(Log.Adres > (Log.Finis - (x))) Log.Adres = Log.Start #define Test_mem_limit(x) if(Log.Adres > (Log.Finis - (x))) Log.Adres -=(x) /* Очистка памати (обнуление) */ /** Полностью обнуляет область журнала и возвращает указатель записи в начало. */ void clear_mem(); #ifdef __cplusplus } #endif #endif /* _LOG_TO_MEM */