Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: const unsigned long crp __attribute__ ((at(0x1FC))) = 0x87654321;
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
mempfis_
Добрый день.
Хочу установить CRP для LPC2368. Имеется FlashMagic 5.72 и информация взятая по ссылке http://forum.flashmagictool.com/index.php?topic=3620.0

Цитата
Previously code read protection was enabled by checking a box in the main window of Flash Magic. This supported only level 2 of CRP.
Starting with Flash Magic 5.11 the code read protection setting is read from the hex file and all CRP levels are supported. If an attempt is made to set the device to CRP3 then the user is prompted for confirmation.
To set the CRP value in your project add something like the following (Keil RealView example):
Code:
const unsigned long crp __attribute__ ((at(0x1FC))) = 0x87654321;
or:
Code:
const unsigned long crp __attribute__ ((at(0x2FC))) = 0x87654321;

If you don't wish to use CRP then set the value to zero.


Т.е. чтобы установить CRP необх. прописать в проекте одну из констант. Пример приведён для Keil, я же пользуюсь IAR.

Пример из хелпа не работает
Код
#pragma location=0x1fc
__root const unsigned long crp = 0x87654321;


Кто знает подскажите пожалуйста как задать эту константу в IAR.
sergeeff
Код
volatile unsigned int * const pcrp = (volatile unsigned int *)0x1FC;

*pcrp = 0x87654321;


везде и всегда будет работать
Artem_Petrik
Цитата(mempfis_ @ Feb 9 2011, 17:09) *
Пример из хелпа не работает
Код
#pragma location=0x1fc
__root const unsigned long crp = 0x87654321;

Кто знает подскажите пожалуйста как задать эту константу в IAR.

Собственно присоединяюсь к вопросу. Я вместо pragma location обычно пользуюсь @, но сути это не меняет. При программировании под AVR я использовал конструкцию типа
Код
__root unsigned short __flash var_name @ 0x100 = 0x1234;


Но под ARM (в новых версиях EWARM) такая запись не катит. Пишет что переменная, размещенная по абсолютному адресу не может быть инициализируемой. Т. е. можно только так:
Код
__root __no_init const unsigned short var_name @ 0x100;

Но иногда хочется, чтоб данная переменная все же имела конкретное значение.
mempfis_
Всем спасибо за ответы. К сожалению ниодин из вариантов не прошёл.
Но решение проблемы нашлось в этом топике http://electronix.ru/forum/index.php?showt...%F2%E0%ED%F2%E0
Конкретно в последнем сообщении приводится ссылка на оффсайт IAR где доступно описано как разместить и проинициализировать переменную по необходимому адресу (не хотелось править icf-файл но как оказалось решение ужасно простое......).
GetSmart
Цитата(sergeeff @ Feb 9 2011, 23:09) *
Код
volatile unsigned int * const pcrp = (volatile unsigned int *)0x1FC;

*pcrp = 0x87654321;


везде и всегда будет работать

ржунимагу sm.gif
Artem_Petrik
Цитата(mempfis_ @ Feb 10 2011, 10:59) *
Но решение проблемы нашлось в этом топике http://electronix.ru/forum/index.php?showt...%F2%E0%ED%F2%E0
Конкретно в последнем сообщении приводится ссылка на оффсайт IAR где доступно описано как разместить и проинициализировать переменную по необходимому адресу (не хотелось править icf-файл но как оказалось решение ужасно простое......).


Спасибо. Про Migration guide я почему-то и не вспомнил.


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