Agregue el código fuente a la imagen flash al programar un AVR

3

¿Es posible que Arduino / ATmega / ATtiny al programar el dispositivo adjunte el código fuente C al final de la imagen flash del código de la máquina? De esa manera, si tengo el dispositivo, siempre puedo recuperar el código fuente leyendo la memoria flash.

La forma más fácil en que puedo pensar de mí mismo es una declaración de inclusión al final del programa C que lee el código fuente del archivo y lo adjunta como datos al programa. Pero no tengo ni idea de cómo hacerlo.

    
pregunta jippie

2 respuestas

5

Siempre debe poder agregar cualquier tipo de datos a su código. Simplemente crea una matriz de texto que rellenas con el código C.

char source_code[9189] = {'m', 'a', 'i', 'n', '(', ')', 13, 10, '{' ,'}', 0};

¡Definitivamente querrás escribir un programa para crear la matriz a partir de un archivo de texto!

Personalmente creo que esta es una mala manera de hacerlo. ¡Organizarse! Incluya una referencia de código que incluya el número de versión, que hace referencia al código en su PC . Incluso puede agregar la posibilidad de leer la referencia en el sistema. A menudo incluyo un código que genera la identificación del controlador a través de UART cuando un determinado pin de prueba se baja, como lo haría en un bloque de prueba. El bloque de prueba podría mostrarlo como, por ejemplo,

  

ID del programa: 10121
  Revisión: 02

Esto debería ser suficiente para encontrar el código fuente en tu PC.

editar
Si la idea es dejar que el código viaje con el controlador para que pueda pasarlo a otras PC, entonces también usaría la idea de Fake: en lugar de simplemente enviar la idea del programa, puede purgar la fuente completa de esa manera. Tenga en cuenta que todavía no estoy completamente convencido. Excepto por los programas más simples, el diseño de un programa es más que solo el código fuente. ¿Qué pasa con los diagramas de flujo u otros documentos de diseño?

    
respondido por el stevenvh
2

Encontró una pregunta similar aquí . Parece que no funciona para mí porque el archivo que estoy tratando de incluir tiene comillas dobles y simples. Funciona si se usa con un makefile, pero el IDE de Arduino no lo hace. Aunque funciona para la programación desde la línea de comandos.

Combina el:

$ echo hello world | xxd -i > xxd.txt

xxd.txt contiene:

  0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x0a

o

$ cat blinker.ccp | xxd -i > xxd.txt

Luego inclúyalo de la siguiente manera:

const char text[] = {
#include "xxd.txt"
};

Solo tiene que llamarlo desde el programa en alguna parte de una impresión o algo así, de lo contrario los datos se optimizarán.

    
respondido por el jippie

Lea otras preguntas en las etiquetas