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

 
 
> Алгоритм вычесления 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
Ответов
jcxz
сообщение Feb 18 2018, 11:43
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Jenya7 @ Feb 18 2018, 09:40) *
если последняя структура не влезает на страницу - дописать то что влезает и перескочить на следующую страницу или не париться и всю структуру записать на следующей странице?

Учтите, что во многих МК невозможна запись данных произвольного размера с произвольного места внутри страницы внутренней флешь программ.
Например в LPC17xx можно писать только по адресам кратным 16 и, соответственно, размер кратный 16.
Нет, можно конечно записать и не кратно 16, но потом, при чтении, получишь не то, что записал.

Цитата(Jenya7 @ Feb 18 2018, 09:40) *
а где хранить информацию что у меня данные раскинуты на нескольких страницах?

Ну если придерживаться некоего общего правила записи (правила, на основании которого надо перейти к след. странице), то и процедура чтения должна придерживаться этого же правила. Тогда всё будет ок.
Go to the top of the page
 
+Quote Post



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

 


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


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