ControllerZ 0 7 ноября, 2012 Опубликовано 7 ноября, 2012 · Жалоба Подскажите как правильно включить CRP защиту для LPC2300 в среде программирования uvision4 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 7 ноября, 2012 Опубликовано 7 ноября, 2012 · Жалоба Подскажите как правильно включить CRP защиту для LPC2300 в среде программирования uvision4 Нужно записать по соответствующему адресу (0x1FC кажется) число ( например 0x876543321 ) в зависимости от нужного уровня CRP . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ControllerZ 0 8 ноября, 2012 Опубликовано 8 ноября, 2012 · Жалоба Это все я знаю из даташита, но как грамотно это можно сделать в uvision, на данном этапе я после таблици прерывания добавляю код CRP_Level EQU 0x87654321 IF :LNOT::DEF:NO_CRP AREA |.ARM.__at_0x01FC|,CODE,READONLY CRP_Key DCD CRP_Level ENDIF после этого видно что по нужному адресу записано нужное значение, но вокруг этого адреса присутсвует код, больше чем уверен что в микровижене эта прочидура делается более грамотнее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lotor 0 8 ноября, 2012 Опубликовано 8 ноября, 2012 · Жалоба Реализация записи константы по определенному адресу от 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 0 8 ноября, 2012 Опубликовано 8 ноября, 2012 · Жалоба Реализация записи константы по определенному адресу от 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 7 8 ноября, 2012 Опубликовано 8 ноября, 2012 · Жалоба Реализация записи константы по определенному адресу от IDE мало зависит. От компилятора и линкера подобные вещи всё-таки зависят. Как вариант, можно просто написать const int CRP __attribute__ ((at(0x1FC))) = ...; без редактирования скаттер-файла. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lotor 0 8 ноября, 2012 Опубликовано 8 ноября, 2012 · Жалоба Ок попробую ваш метод, а в линкере. Но этот метод я видел на сайте KEIL и он почемуто у меня не прокатил, т.к. там отличия в моем sct файле и sct файле в документации. Вокруг этого адреса я бы хотел видеть, код после векторов прерывания начинался допустим с 0x200 адреса, а промежуток от векторов до CRP в 0xFF Резервирование в линкере области памяти и подразумевает редактирование sct файла. От компилятора и линкера подобные вещи всё-таки зависят. Для Вас компилятор/линкер и IDE одно и тоже? Можно компилятор iar/keil прикрутить к ide эклипсу. ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ivan Panov 0 8 ноября, 2012 Опубликовано 8 ноября, 2012 · Жалоба Подскажите как правильно включить CRP защиту для LPC2300 в среде программирования uvision4 В файле "LPC2300.s", в самом его конце, перед последней строкой, содержащей слово "END", вставляете вот это: AREA |.ARM.__at_0x01FC|, CODE, READONLY ABS_ADDRESS DCD 0x87654321 AREA |.text|, CODE, READONLY Больше ничего править не надо. Разумеется, число 0x87654321 для CRP2. Для других режимов защиты примяняйте соответствующуие коды Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 8 ноября, 2012 Опубликовано 8 ноября, 2012 · Жалоба В файле "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 0 8 ноября, 2012 Опубликовано 8 ноября, 2012 · Жалоба ВСЕМ СПАСИБО ЗА ОТВЕТЫ!!!! ВСЕ РАЗОБРАЛСЯ ВСЕ РАБОТАЕТ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться