реклама на сайте
подробности

 
 
> Алгоритм вычесления page overflow
Jenya7
сообщение Feb 18 2018, 07:40
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Есть несколько структу которые я записываю на флеш в камне
Код
if (status == FLASH_COMPLETE)
    {  
        size = sizeof(GLOB_MOTOR_DATA);
        addr = (uint32_t *)(flash_page + offset);
        status = WriteFlash(&glob_mot_data, addr, size);
        offset += (size + SEPARATOR);
        
        size = sizeof(IR_DATA);
        addr = (uint32_t *)(flash_page + offset);
    status = WriteFlash(&ir_data, addr, size);
        offset += (size + SEPARATOR);  
        
        size = sizeof(MOTOR_TASK) * MAX_TASKS;
        addr = (uint32_t *)(flash_page + offset);
        status = WriteFlash(&mot_task, addr, size);
        offset += size + SEPARATOR;
    }

размер данных постоянно растет, добавляются новые структуры и я задумался - нужно же как то мониторить переполнение страницы, она же не резиновая.
и чо то у меня какие то громоздкие вычисления получаются, что мне очень не нравиться. как бы это сделать покрасивше?

если последняя структура не влезает на страницу - дописать то что влезает и перескочить на следующую страницу или не париться и всю структуру записать на следующей странице?
а где хранить информацию что у меня данные раскинуты на нескольких страницах?

я тут нашел старый код для внешней памяти
Код
if(((address & (AT25_PAGE_SIZE - 1)) + lenght) >= AT25_PAGE_SIZE)
    {
        bytes_to_write = AT25_PAGE_SIZE - (address & (AT25_PAGE_SIZE - 1));
        //page_overflow = 1;
    }
    else
    {
        bytes_to_write = lenght;
        //page_overflow = 0;
    }

с какого перепугу я эндил, нифига не помню. сижу мучаю калькулятор, ничего не выходит. можно воспользоваться этим алгоритмом?

упс. только сейчас заметил. я offset вычисляю в байтах а надо size/4.

Сообщение отредактировал Jenya7 - Feb 18 2018, 11:11
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
arhiv6
сообщение Feb 18 2018, 14:51
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 633
Регистрация: 21-05-10
Из: Томск
Пользователь №: 57 423



Напишите прослойку с виртуальной адресацией и работайте через неё. Все проверки, в том числе о переполнении страницы, делаются внутри этой прослойки, там же это обрабатывается. Примеров подобной работы с флешем много, можете взять любой из гугла по запросу "eeprom emulation in flash".


--------------------
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th June 2025 - 20:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.01379 секунд с 7
ELECTRONIX ©2004-2016