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

 
 
 
Reply to this topicStart new topic
> CRP защита LPC2300, в KEIL uvision4
ControllerZ
сообщение Nov 7 2012, 15:52
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 197
Регистрация: 6-08-05
Пользователь №: 7 409



Подскажите как правильно включить CRP защиту для LPC2300 в среде программирования uvision4
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Nov 7 2012, 17:04
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(ControllerZ @ Nov 7 2012, 17:52) *
Подскажите как правильно включить CRP защиту для LPC2300 в среде программирования uvision4

Нужно записать по соответствующему адресу (0x1FC кажется) число ( например 0x876543321 ) в зависимости от нужного уровня CRP .
Go to the top of the page
 
+Quote Post
ControllerZ
сообщение Nov 8 2012, 01:36
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 197
Регистрация: 6-08-05
Пользователь №: 7 409



Это все я знаю из даташита, но как грамотно это можно сделать в uvision, на данном этапе я после таблици прерывания добавляю код

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

после этого видно что по нужному адресу записано нужное значение, но вокруг этого адреса присутсвует код, больше чем уверен что в микровижене эта прочидура делается более грамотнее.
Go to the top of the page
 
+Quote Post
Lotor
сообщение Nov 8 2012, 04:23
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Реализация записи константы по определенному адресу от 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) *
после этого видно что по нужному адресу записано нужное значение, но вокруг этого адреса присутсвует код

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


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
ControllerZ
сообщение Nov 8 2012, 08:18
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 197
Регистрация: 6-08-05
Пользователь №: 7 409



Цитата(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
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Nov 8 2012, 08:23
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Цитата
Реализация записи константы по определенному адресу от IDE мало зависит.

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


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

без редактирования скаттер-файла.


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
Lotor
сообщение Nov 8 2012, 08:41
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(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


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
Ivan Panov
сообщение Nov 8 2012, 16:06
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 23-02-09
Из: Одесская обл.
Пользователь №: 45 249



Цитата(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. Для других режимов защиты примяняйте соответствующуие коды
Go to the top of the page
 
+Quote Post
toweroff
сообщение Nov 8 2012, 17:31
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(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
Go to the top of the page
 
+Quote Post
ControllerZ
сообщение Nov 8 2012, 21:44
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 197
Регистрация: 6-08-05
Пользователь №: 7 409



ВСЕМ СПАСИБО ЗА ОТВЕТЫ!!!! ВСЕ РАЗОБРАЛСЯ ВСЕ РАБОТАЕТ
Go to the top of the page
 
+Quote Post

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

 


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


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