Да, это дело несколько сложнее, чем у всех прочих / и в этом надежда :)/, ... (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено O.L. 04 сентября 2004 г. 09:36
В ответ на: Господа и товарищи! Памажите кто чем может по защите Cygnal. отправлено iK 03 сентября 2004 г. 18:02

но суть примерно в следующем. Самая последняя ячейка памяти программ является "замком" запись числа НУЛЯМИ в нее приводит к закрытию сегментов / записывемое число указывает на количество этих сегментов начиная с нулевого/ памяти программ на чтение/запись. Плюс к этому защищается последний сегмент в котором расположена ячейка "замка". У Cignal-ов SIZE CODE SEGMENT == 512 byte. Keil позволяет адресовать ячейки памяти по абсолютным адресам через _at_ .
Можно и вот так, - /8051f330/
#define Program_Lock (*(unsigned char code*) 0x1dff)
Program_Lock = 0xf8; // First seven FLASH pages + Lock Byte Page is lockeds
Операции чтения и записи памяти программ при этом становятся невозможными как из резидентной программы, так и средсвами внешнего программного интерфейса.
Это может оказатся несколько неудобным в том плане, что если нужно иметь внутри кристалла массивчик калибровачных констант или иных данных, которые переодически могут изменяться пользователем. В этом случае необходимое число предпоследних сегментов остаются "открытыми" и линкеру это нужно обязательно указать.
Последний сегмент в этом случае остается пустым и, если принудительно не указать линкеру имена процедур, которые нужно расположить там, то сам линкер Keil-а не станет использовать этот сегмент. В итоге стандартный error линкера OUT OF MEMORY, а на самом деле есть еще 510 byte.
Что располагать в этом сегменте строковые константы или исполняемые процедуры , - совершенно без разницы.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru