Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: CRP защита LPC2300
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
ControllerZ
Подскажите как правильно включить CRP защиту для LPC2300 в среде программирования uvision4
_Артём_
Цитата(ControllerZ @ Nov 7 2012, 17:52) *
Подскажите как правильно включить CRP защиту для LPC2300 в среде программирования uvision4

Нужно записать по соответствующему адресу (0x1FC кажется) число ( например 0x876543321 ) в зависимости от нужного уровня CRP .
ControllerZ
Это все я знаю из даташита, но как грамотно это можно сделать в uvision, на данном этапе я после таблици прерывания добавляю код

CRP_Level EQU 0x87654321
IF :LNOT::DEF:NO_CRP
AREA |.ARM.__at_0x01FC|,CODE,READONLY
CRP_Key DCD CRP_Level
ENDIF

после этого видно что по нужному адресу записано нужное значение, но вокруг этого адреса присутсвует код, больше чем уверен что в микровижене эта прочидура делается более грамотнее.
Lotor
Реализация записи константы по определенному адресу от IDE мало зависит. Или Вы ждете волшебного окошечка с галочками? =)

PS: Вы должны зарезервировать в линкере область памяти (я создаю секцию под именем crp) и написать что-то типа:
Код
#define NO_CRP 0xFFFFFFFF
#define CRP1_MAGIC 0x12345678
#define CRP2_MAGIC 0x87654321
//#define CRP3_MAGIC 0x43218765

#define CURRENT_CRP_SETTING NO_CRP

const unsigned int g_crp_magic_word __attribute__((section("crp"))) = CURRENT_CRP_SETTING;


PPS:
Цитата(ControllerZ @ Nov 8 2012, 05:36) *
после этого видно что по нужному адресу записано нужное значение, но вокруг этого адреса присутсвует код

А что Вы хотите, чтобы было вокруг этого адреса?..
ControllerZ
Цитата(Lotor @ Nov 8 2012, 09:23) *
Реализация записи константы по определенному адресу от IDE мало зависит. Или Вы ждете волшебного окошечка с галочками? =)

PS: Вы должны зарезервировать в линкере область памяти (я создаю секцию под именем crp) и написать что-то типа:
Код
#define NO_CRP 0xFFFFFFFF
#define CRP1_MAGIC 0x12345678
#define CRP2_MAGIC 0x87654321
//#define CRP3_MAGIC 0x43218765

#define CURRENT_CRP_SETTING NO_CRP

const unsigned int g_crp_magic_word __attribute__((section("crp"))) = CURRENT_CRP_SETTING;


PPS:

А что Вы хотите, чтобы было вокруг этого адреса?..


Ок попробую ваш метод, а в линкере. Но этот метод я видел на сайте KEIL и он почемуто у меня не прокатил, т.к. там отличия в моем sct файле и sct файле в документации.
Вокруг этого адреса я бы хотел видеть, код после векторов прерывания начинался допустим с 0x200 адреса, а промежуток от векторов до CRP в 0xFF
esaulenka
Цитата
Реализация записи константы по определенному адресу от IDE мало зависит.

От компилятора и линкера подобные вещи всё-таки зависят.


Как вариант, можно просто написать
Код
const int CRP __attribute__ ((at(0x1FC))) = ...;

без редактирования скаттер-файла.
Lotor
Цитата(ControllerZ @ Nov 8 2012, 12:18) *
Ок попробую ваш метод, а в линкере. Но этот метод я видел на сайте KEIL и он почемуто у меня не прокатил, т.к. там отличия в моем sct файле и sct файле в документации.
Вокруг этого адреса я бы хотел видеть, код после векторов прерывания начинался допустим с 0x200 адреса, а промежуток от векторов до CRP в 0xFF

Резервирование в линкере области памяти и подразумевает редактирование sct файла.

Цитата(esaulenka @ Nov 8 2012, 12:23) *
От компилятора и линкера подобные вещи всё-таки зависят.

Для Вас компилятор/линкер и IDE одно и тоже?
Можно компилятор iar/keil прикрутить к ide эклипсу. wink.gif
Ivan Panov
Цитата(ControllerZ @ Nov 7 2012, 17:52) *
Подскажите как правильно включить CRP защиту для LPC2300 в среде программирования uvision4


В файле "LPC2300.s", в самом его конце, перед последней строкой, содержащей слово "END", вставляете вот это:

AREA |.ARM.__at_0x01FC|, CODE, READONLY
ABS_ADDRESS DCD 0x87654321
AREA |.text|, CODE, READONLY

Больше ничего править не надо. Разумеется, число 0x87654321 для CRP2. Для других режимов защиты примяняйте соответствующуие коды
toweroff
Цитата(Ivan Panov @ Nov 8 2012, 20:06) *
В файле "LPC2300.s", в самом его конце, перед последней строкой, содержащей слово "END", вставляете вот это:

AREA |.ARM.__at_0x01FC|, CODE, READONLY
ABS_ADDRESS DCD 0x87654321
AREA |.text|, CODE, READONLY

Больше ничего править не надо. Разумеется, число 0x87654321 для CRP2. Для других режимов защиты примяняйте соответствующуие коды


а почему не в сях?

я всегда примерно такое вставляю (разумеется, средства для заливки софта есть)
Код
#define IS_DEBUG  0
#define IS_EMC    0
#define IS_WDT    0
#define IS_UART   0
#define IS_SPI    0
#define IS_I2C    0

#if (IS_DEBUG)
unsigned int const CRP3  __attribute__((at(0x1FC))) = 0xFFFFFFFF;
#else
unsigned int const CRP3  __attribute__((at(0x1FC))) = 0x43218765;
#endif
ControllerZ
ВСЕМ СПАСИБО ЗА ОТВЕТЫ!!!! ВСЕ РАЗОБРАЛСЯ ВСЕ РАБОТАЕТ
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.