Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F2xx - как разместить структуру в BACKUP-памяти?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Firer
Братья!
В примере от STM доступ к регистрам BACKUP RAM вот такой:
w = *(__IO u32*) (BKPSRAM_BASE + 0);

А как структуру разместить в BACKUP-памяти?
Например
struct data
{
char a;
char b;
}

Как ее адрес указать?
_Артём_
Интересно что сейчас считается "default compiler for ARM"? Кейл?
Код
int MyVar __attribute__((at(0x5000)));  // Place at 0x5000


Placing data....
Firer
Спасибо!
Да, для меня Keil sm.gif
Вот выйду на пенсию и прочту всю документацию, и тогда сам буду здесь всем на вопросы отвечать. А пока некогда, надо работать sm.gif

Как я понимаю ее еще с атрибутом __IO надо объявить чтобы ее не оптимизил Кеил. И если структура - то с __packed чтобы впустую ячейки памяти не расходовались на выравнивание?
scifi
Кстати, __attribute__((at(0x5000))) - это нестандартное расширение языка, то есть работает не на всех компиляторах.
А вот такое
Код
struct data volatile *ptr = (struct data volatile*)(BKPSRAM_BASE + 1234);

будет работать на любом компиляторе.
Да, и я не понимаю, зачем писать __IO вместо volatile. Лишние буквы им лень набивать что ли? Кстати, нужен ли тут volatile - не так уж и очевидно, но лучше перестраховаться.
Да, можете написать
Код
__packed struct data
{
char a;
char b;
};

если жалко байтов для выравнивания. Много байтов не выгадаете, я думаю, зато компилятор будет генерить более толстый код доступа к структуре.
Сергей Борщ
QUOTE (scifi @ Oct 5 2012, 08:40) *
А вот такое
CODE
struct data volatile *ptr = (struct data volatile*)(BKPSRAM_BASE + 1234);

будет работать на любом компиляторе.
Но с таким решением, увы, придется самому вручную следить, чтобы данные не пересекались.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.