Программа Сервисный Центр
0

Подключение внешней SRAM 512 Кбайт к Arduino Mega. Часть 3 - ПО, базовые решения


Часть 1 – Теория
Часть 2 – Схема и подключение Примечание. Выборки исходного кода, размещенные в тексте описания, использовать в своих проектах не рекомендуется. В конце описания имеется ссылка на архив с исходными кодами. В заключительной части статьи мы рассмотрим основные моменты в программном обеспечении микроконтроллера при работе с внешней памятью объемом 512 КБайт применительно к среде Arduino. Все материалы доступны для скачивания в разделе загрузок в конце статьи. Для работы с внешней памятью в интегрированной среде разработки была составлена библиотека функций XMEM (xmem library), которые реализуют основные функции при работе с памятью. При разработке данной библиотеки ставилась цель позволить с помощью существующих функций для работы с памятью (malloc, free, new и delete) организовать работу с внешней памятью. Следует отметить, что функции содержатся в диапазоне имен с именем xmem, поэтому следует использовать префикс при вызове функций, например, xmem::begin(…). Все функции определены в файле xmem.h, поэтому необходимо включить его в свой проект. Инсталляция библиотеки в среде Arduino Загрузить zip-файл из раздела загрузок. Загруженный файл распаковать в установочную директорию Arduino, поддиректория Libraries, с созданием в ней новой папки с именем xmem. Например, C:Program Files ->(x86)arduino-0021-> libraries. Запустить среду Arduino и в настройках Tools -> Import Library -> xmem добавьте библиотеку в свой проект. Функции библиотеки XMEM Функция void begin(bool heapInXmem_); Эта функция должна быть вызвана перед тем, как использовать внешнюю память. Она настраивает регистры микроконтроллера AVR для доступа к внешней памяти и выбирает 0 банк памяти как текущий. Если выбрать значение параметра heapInXmem как истина (true) – рекомендованное значение – то область памяти Heap (динамическая память), используемая функциями malloc, free, new и delete, будет размещена во внешней памяти.
xmem::begin(true); Функция void setMemoryBank(uint8_t bank_, bool switchHeap_=true); Эта функция используется для переключения банков памяти. Значение переменной bank_ должно лежать в диапазоне 0 – 7. Если значение параметра switchHeap_ истинна (по умолчанию), то текущее состояние динамической памяти сохраняется до переключения банка памяти, пока не станет активным новый банк памяти. Управление динамической памятью (Heap) подразумевает, что вы можете свободно переключаться между банками, таким образом достигается оптимальное использование внешней памяти. xmem::begin(true);
// используем память банка 0
xmem::setMemoryBank(1,true);
// используем память банка 1
Функция SelfTestResults selfTest(): Это диагностическая функция, которая может использоваться для проверки корректного функционирования аппаратной части. Она записывает битовый шаблон в каждый байт каждого банка памяти и затем считывает их, это говорит о том, что данную функцию не следует использовать при работе основной программы приложения. Функция возвращает структуру, которая содержит результат теста. Структура определена следующим образом: struct SelfTestResults {
bool succeeded;
volatile uint8_t *failedAddress;
uint8_t failedBank;
}; Если тест завершился успешно, без ошибок, значение переменной succeeded будет истина. Если были обнаружены ошибки, то адрес ошибки будет храниться в переменной failedAddress, номер банка - в переменной failedBank. xmem::SelfTestResults results;
xmem::begin(true);
results=xmem::selfTest();
if(!results.succeeded)
fail(); Базовые решения Далее мы рассмотрим базовые решения с применением библиотеки xmem, а также методы конфигурирования внешней памяти. Область Heap по умолчанию, область глобальных данных по умолчанию, непосредственное управление внешней памятью
Подключение внешней SRAM 512 Кбайт к Arduino Mega. Часть 3 - ПО, базовые решения
В этом случае динамическая область памяти и область глобальных данных размещаются во внутренней памяти микроконтроллера, и пользователь непосредственно использует всю внешнюю память, определяя указатели на нее. #include < xmem.h >
void setup() {
// инициализация памяти
xmem::begin(false);
}
void loop() {
// определяем некоторые указатели в памяти
int *intptr=reinterpret_cast(0x2200);
char *charptr=reinterpret_cast(0x2200);

// храним целочисленные переменные в банке памяти 0
xmem::setMemoryBank(0,false);
intptr[0]=1;
intptr[10000]=2;
intptr[20000]=3;

// храним символьные переменные в банке памяти 1
xmem::setMemoryBank(1,false);
charptr[0]='a';
charptr[10000]='b';
charptr[20000]='c';

delay(1000);
}
Область глобальных данных по умолчанию, Heap во внешней памяти
Подключение внешней SRAM 512 Кбайт к Arduino Mega. Часть 3 - ПО, базовые решения
В этом решении мы перенесли область динамической памяти во внешнюю память. Кроме того, обслуживаются несколько состояний динамической памяти при переключении банков внешней памяти, таким образом, мы имеем 8 независимых областей динамической памяти по 56 КБайт, которые можно эффективно использовать в приложении. Это позволит использовать требовательные к оперативной памяти библиотеки и подпрограммы. #include < xmem.h >
byte *buffers[8];
void setup() {
uint8_t i;
xmem::begin(true);
// устанавливаем 8 буферов по 50K, один на каждый банк памяти
for(i=0;i<8;i++) {
xmem::setMemoryBank(i,true);
buffers[i]=(byte *)malloc(50000);
}
}

void loop() {
uint16_t i,j;
// заполняем каждый предопределенный банк некоторыми данными
for(i=0;i<8;i++) {
xmem::setMemoryBank(i,true);
for(j=0;j<50000;j++)
buffers[i][j]=0xaa+i;
}
delay(1000);
}
Загрузки: Библиотека xmem для Arduino, исходные коды базовых решений – скачать На английском языке: Add 512K of external SRAM to Arduino Mega. Part 3 - SoftwareПеревод: Vadim по заказу РадиоЛоцман

По материалам сайта www.rlocman.ru

Также рекомендуем:

 
 
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии в данной новости.
 
Обратная связь

Наши партнеры

 

Опросы

Есть ли справедливость в жизни?
Конечно есть, уверен!
Вроде как должна быть, но...
Затрудняюсь ответить...
Какая справедливость? О чем Вы?
Эх.., нет правды на свете!

 

Облако тегов

Требуется для просмотраFlash Player 9 или выше.

Показать все теги
 

Календарь публикаций

«    Февраль 2017    »
ПнВтСрЧтПтСбВс
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
 

Архив новостей

Февраль 2017 (45)
Январь 2017 (42)
Декабрь 2016 (45)
Ноябрь 2016 (42)
Октябрь 2016 (34)
Сентябрь 2016 (38)
 
Наверх Сервисные мануалы Даташиты Ремонт LCD, ЖК телевизоров LG Samsung Скрипт программы "Сервисный центр"