Загрузка данных


#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);
}