|
но суть примерно в следующем. Самая последняя ячейка памяти программ является "замком" запись числа НУЛЯМИ в нее приводит к закрытию сегментов / записывемое число указывает на количество этих сегментов начиная с нулевого/ памяти программ на чтение/запись. Плюс к этому защищается последний сегмент в котором расположена ячейка "замка". У 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