¿Por qué MPLABX informa la cantidad incorrecta de memoria de programa utilizada?

0

He estado usando XC8 v1.34 por un tiempo, y desde que se lanzó v1.41 me actualicé a esa versión. Solo por el bien de la nada, recompilé un proyecto maduro y vi que el valor de "Programa utilizado" (en el tablero de instrumentos) disminuyó en uno, así que sentí mucha curiosidad por lo que estaba optimizado (ambos compiladores utilizaron la optimización del modo PRO) .

Encontré la opción de menú Windows - > Depuración - > Lista de desensamblaje en MPLAB y en el que había un código de ensamblador limpio (debajo de cada declaración C), así que corté y pegué el contenido de v1.34 y v1.41 en dos archivos separados y ejecuté una diferencia. Lo único que difiere es la marca de tiempo, lo cual fue extraño ya que MPLAB dice "Espacio de programa utilizado: 142" para v1.34 y 141 para v1.41, pero los desensambladores son exactamente iguales.

Luego trato de eliminar todas las líneas C y el encabezado de la salida con:

$ grep -v '^[0-9]*\:' 134 | grep ^[0-9] > 134_2
$ grep -v '^[0-9]*\:' 141 | grep ^[0-9] > 141_2

En los archivos eliminados no hay más que código de ensamblaje puro. Así que vuelvo a comprobar:

$ wc -l *_2
 139 134_2
 139 141_2
 278 total

$ md5sum 134_2 141_2
b6aa911111d43cf5251cda7d4e871fdb  134_2
b6aa911111d43cf5251cda7d4e871fdb  141_2

I.e exactamente el mismo código. 139 códigos de operación también, no 141 o 142.

¿Por qué MPLABX informa el valor incorrecto?

    
pregunta bos

1 respuesta

1

La lista de desmontaje de depuración solo muestra el código fuente compilado. No se muestra el código de inicialización de bajo nivel que se requiere para que su programa se ejecute, que el vinculador genera y combina con su código para producir el ejecutable final. Puede ver el código del ensamblador generado seleccionando 'mantener el inicio .as' en las opciones del enlazador del proyecto.

Aquí está la lista de desmontaje de depuración que XC8 V1.38 me dio para un programa PIC10F322 mínimo: -

9:             #include <xc.h>
10:            
11:            void main(void) {
12:                return;
13:            }
01FD  2800     GOTO 0x0

Claramente esto no es todo porque el código en 0x0 no se muestra. Mirando en la ventana 'Vistas de memoria PIC / Memoria de programa' vemos esto: -

000 GOTO 0x1FE   (execution starts here at reset/power on)
...
1FD GOTO 0x0
1FE CLRF STATUS
1FF GOTO 0x1FD 

Entonces, en realidad se usan 4 palabras de memoria de programa, aunque el informe de compilación dice 3 y la lista de desmontaje solo muestra 1. Intenté compilarlo con XC8 V1.41 y los resultados fueron idénticos.

¿Por qué ambas versiones muestran 1 palabra menos que el uso de memoria real? No lo sé, pero no es algo de lo que me preocupe. Si su código es tan grande que una palabra hace una diferencia, entonces debe refactorizarlo o cambiar a un chip con más memoria.

    
respondido por el Bruce Abbott

Lea otras preguntas en las etiquetas