#include <string.h>
#define GUARD_SIZE 512
// Размещаем в той же секции, что и стек, чтобы линкер поставил их рядом
// Используем __aligned, чтобы не нарушить требования MPU
static uint8_t lcd_guard_area[GUARD_SIZE] __aligned(4) __attribute__((section(".noinit.lcd_guard")));
// Функция для проверки
void check_guard_corruption(void)
{
int first_corrupted_byte = -1;
int corrupted_count = 0;
for (int i = 0; i < GUARD_SIZE; i++) {
if (lcd_guard_area[i] != 0xEE) {
if (first_corrupted_byte == -1) {
first_corrupted_byte = i;
}
corrupted_count++;
}
}
if (first_corrupted_byte != -1) {
printk("!!! DETECTED CORRUPTION !!!\n");
printk("First corrupted byte at offset: %d\n", first_corrupted_byte);
printk("Total corrupted bytes: %d\n", corrupted_count);
// Выведем кусок данных для опознания (может там текст или ключи)
printk("Data: %02x %02x %02x %02x\n",
lcd_guard_area[first_corrupted_byte],
lcd_guard_area[first_corrupted_byte+1],
lcd_guard_area[first_corrupted_byte+2],
lcd_guard_area[first_corrupted_byte+3]);
}
}
// В инициализации (например, в начале lcd_render_thread)
void init_guard(void) {
memset(lcd_guard_area, 0xEE, GUARD_SIZE);
}