Protección de código selectivo

Los dispositivos PIC de 8 bits tienen bits de configuración de protección de código que le permiten evitar el acceso no autorizado de la memoria del programa. Algunos de estos dispositivos permiten la protección selectiva del espacio de memoria del programa, y ​​con estos dispositivos, puede especificar qué bloques están protegidos.
También hay diferentes tipos de protección, por ejemplo: protección contra escritura o protección contra lecturas de tablas de bloques externas.

Este artículo analiza cómo puede hacer para que el compilador MPLAB® XC8 coloque un código especial en las áreas de memoria que ha protegido y para que el resto de su programa se coloque en la memoria desprotegida. Hay cuatro pasos principales a seguir.

Coloque las funciones para protegerlas en su propia sección única

Crear una clase de enlazador que represente el área de memoria protegida

Enlace las secciones únicas en esta nueva clase de vinculador

Reserve el área protegida para evitar que sea utilizada por otras funciones

Las funciones se pueden colocar fácilmente en una nueva sección (o psect como también se les llama) usando el especificador __section (). El siguiente es un ejemplo de una función asignada a una sección llamada protected_text en lugar de su sección predeterminada:


El nombre de la sección puede ser cualquier identificador usando alfabéticos, numéricos y el carácter de subrayado. Cualquier sección que contenga código y cuyo nombre contenga el texto de la cadena podría optimizarse si los optimizadores del ensamblador están habilitados. Elija un nombre de sección alternativo si no desea que los contenidos de la sección estén optimizados.

Luego, determine los rangos de memoria protegida de la hoja de datos de su dispositivo objetivo. Por ejemplo, los dispositivos PIC18Fx3K20 tienen lo que se llama el bloque de arranque que abarca 0-1FF y otros dos bloques que abarcan 200-FFF y 1000-1FFF. Si, por ejemplo, decide proteger el bloque de arranque y colocar sus funciones protegidas en cualquier lugar de ese bloque, puede crear una clase de vinculador adecuada con la opción del compilador -L-APROTECT = 0h-1FFh. Esta es la opción -L del compilador, que pasa la opción del enlazador-A (y los argumentos) directamente a la aplicación del enlazador. Solicita que PROTECT se convierta en una clase de vinculador que consta de un bloque contiguo de memoria que abarca desde la dirección 0 a 0x1FF.
Ahora puede colocar sus nuevas secciones en la memoria definida por esta clase. Para hacer eso, use otra opción de enlazador (-P) pasada al enlazador a través de la opción -L- del compilador -L-Pprotected_text = PROTECT.

Es solo una convención lo que dicta que use un nombre de clase en mayúscula y un nombre de sección en minúscula, pero tenga en cuenta que el vinculador distingue entre mayúsculas y minúsculas cuando se trata de estos nombres.

Si está utilizando MPLAB X IDE, agregue las dos opciones anteriores al vinculador XC8> Opciones adicionales> Campo Opciones adicionales del enlazador, como se muestra a continuación.


Puede evitar que las funciones comunes se coloquen en el espacio protegido de la memoria reservando esta área usando la opción -ROM. Por ejemplo, use -ROM = predeterminado, -0-1FFh si está compilando en la línea de comando, o ingresando este argumento de opción en el enlazador XC8> Modelo de memoria> Campo rangos de ROM, como se muestra a continuación.


Finalmente, verifique el archivo del mapa para asegurarse de que todo esto funcionó como esperaba. Lo siguiente es un extracto del archivo del mapa, que muestra que la sección creada en este ejemplo se vinculó a la memoria del bloque de arranque.


Tenga en cuenta que no hay otras secciones vinculadas en este bloque. No se preocupe de que la nueva sección se muestre en la clase CODE en este ejemplo; esa es la clase predeterminada asignada a la nueva sección cuando se creó y esta clase predeterminada se usa para organizar secciones en el archivo de mapa.

Fuente: Selective Code Protection

Comentarios

Entradas más populares de este blog

Resistencias

Guía de introducción de XC8

Prefijos del sistema internacional de medidas