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

 
 
> STM32F2xx - как разместить структуру в BACKUP-памяти?, Как указать адрес размещения структуры?
Firer
сообщение Oct 4 2012, 18:50
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 294
Регистрация: 7-01-05
Пользователь №: 1 832



Братья!
В примере от STM доступ к регистрам BACKUP RAM вот такой:
w = *(__IO u32*) (BKPSRAM_BASE + 0);

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

Как ее адрес указать?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Firer
сообщение Oct 5 2012, 04:55
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 294
Регистрация: 7-01-05
Пользователь №: 1 832



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

Как я понимаю ее еще с атрибутом __IO надо объявить чтобы ее не оптимизил Кеил. И если структура - то с __packed чтобы впустую ячейки памяти не расходовались на выравнивание?
Go to the top of the page
 
+Quote Post
scifi
сообщение Oct 5 2012, 05:40
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Кстати, __attribute__((at(0x5000))) - это нестандартное расширение языка, то есть работает не на всех компиляторах.
А вот такое
Код
struct data volatile *ptr = (struct data volatile*)(BKPSRAM_BASE + 1234);

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

если жалко байтов для выравнивания. Много байтов не выгадаете, я думаю, зато компилятор будет генерить более толстый код доступа к структуре.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 5 2012, 06:36
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (scifi @ Oct 5 2012, 08:40) *
А вот такое
CODE
struct data volatile *ptr = (struct data volatile*)(BKPSRAM_BASE + 1234);

будет работать на любом компиляторе.
Но с таким решением, увы, придется самому вручную следить, чтобы данные не пересекались.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



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

 


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


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