Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Распределение ROM в Keil
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
bogdanov83
Добрый день. Может кто поделить знаниями. Есть ли в копиляторе от Keil дериктива задания адресса в памяти для данных. Задача вот в чем: у меня данные храняться во флеш. Часть из этих данных может меняться, т. е. перепрошиваеться при помощи IAP, а перед прошикой надо очистить сектор, задаваемый номером. Так вот вопрос: как разнести по отдельным секторам данные, которые константы и данные, которые перепрошиваються. И если это актуально использую кристал LPC2368. Заранее благодарен.
Nixon
Это для отдельной переменной
Код
long     CRP             __attribute__ ((at(0x1FC)))     = 0x87654321;

В общем же случае лучше работать через скаттер-файл. Создать необходимые секции и там размещать переменные
Код
long    DATA             __attribute__ ((section ("ROM3"))) = 0x123;
bogdanov83
Цитата(Nixon @ Nov 8 2010, 10:03) *
Код
u32     CRP             __attribute__ ((at(0x1FC)))     = 0x87654321;


А можно растоковать что здесь написано? smile3046.gif
Nixon
Определяется переменная CRP и размещается по адресу 0x1FC.
Во втором примере определяется переменная DATA и размещается в секции ROM3. Секцию ROM3 определяете в скаттер-файле или графически в настройках проекта.
Читайте help к keil'у. К компилятору и линкеру.
bogdanov83
Спасибо
scifi
Другой вариант: не париться с линкером, а работать с этими данными при помощи указателей.
Сергей Борщ
Цитата(scifi @ Nov 8 2010, 08:35) *
Другой вариант: не париться с линкером, а работать с этими данными при помощи указателей.
Шикарный совет. И париться с учетом размеров данных в уме - чтобы одна переменная частично или полностью случайно не оказалать на месте другой.
Nixon
Несомненно, принцип работы с указателями будет более переносим, но удобства он не добавляет.
bogdanov83
Может быть кто нибудь поделиться примерами для разных способов?
ViKo
Цитата(Сергей Борщ @ Nov 8 2010, 11:12) *
Шикарный совет. И париться с учетом размеров данных в уме - чтобы одна переменная частично или полностью случайно не оказалать на месте другой.

А что, с помощью __attribute__ ((at())) невозможно разместить переменные в перекрывающихся областях?
Проверил сам - нельзя!
psL
Цитата(bogdanov83 @ Nov 22 2010, 15:27) *
Может быть кто нибудь поделиться примерами для разных способов?

Например здесь:
http://electronix.ru/forum/index.php?showt...=77956&st=0

Цитата(ViKo @ Nov 23 2010, 13:09) *
А что, с помощью __attribute__ ((at())) невозможно разместить переменные в перекрывающихся областях?

А что такое "перекрывающиеся области"?
ViKo
Цитата(psL @ Nov 25 2010, 17:09) *
А что такое "перекрывающиеся области"?

Имел в виду то, о чем говорил Сергей Борщ
Например
Код
uint64_t  LL __attribute__ ((at(0x20001000))
uint32_t  L  __attribute__ ((at(0x20001004))

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