Obtener instrucciones C en código ensamblador

Hola.
He estado buscando información al respecto, pues me imaginaba que era posible obtener el código en ensamblador de un sketch. Aunque de momento no creo que lo vaya a hacer, me parece bastante útil para tocar pequeñas cosas en procesos donde la velocidad es crítica. Como los entendidos sabrán, se puede obtener con la utilidad avr-objdump -S archivo.elf.
Sin embargo, a pesar de que sí obtengo el código ensamblador, en el mismo, contrariamente al resultado que he visto en varios tutoriales, no aparecen intercalados como comentarios los comandos del código fuente, con lo que pierde mucha de la gracia.
Supongo que en las versiones antiguas del IDE el objdump sí que incluía esas líneas. Lo que no sé es si el hecho de que no aparezcan ahora se debe al propio avr-objdump o (me inclino más por este lado) a que el archivo .elf que construye el IDE ya no contiene dicha información (¿tal vez algún modificador en el compilador? :roll_eyes:).
¿Cómo podría (espero que aún se pueda) obtener el código C incluido en el ensamblador?

No te lo recomiendo. Tuve la misma idea que tu, trastee hasta encontrar la manera de hacerlo (no me acuerdo como lo hice) y obtuve un código de assambler infumable. Era un montón de basura que para comprender lo que hacía (si es que hacía algo) me hiba a tirar media vida. Siento no poder ayudarte mas. Salu2

Estas seguro que ejecutas el comando completo?

avr-objdump -h -S demo.elf > demo.lst

Como dice aqui en esta pagina? http://www.nongnu.org/avr-libc/user-manual/group__demo__project.html

Yo buscaria compilar el programa a mano, sin la IDE. Por ahi por ese lado le podes pasar al compilador que incluya esa info (nunca lo hice).

antes de hacer eso directamente incluiria el codigo en asembler de las rutinas que quieras. Auque mejor seria en C++ que justamente los AVR estan diseñados para optimizar el codigo desde C.

http://www.nongnu.org/avr-libc/user-manual/inline_asm.html http://playground.arduino.cc/Main/AVR

Gracias por las contestaciones.
Realizado el avr-objdump del ejemplo blink, entre todo el batiburrillo de instrucciones, aparece lo que correspondería al loop:

00000248 <loop>:
 248:	80 91 00 02 	lds	r24, 0x0200
 24c:	61 e0       	ldi	r22, 0x01	; 1
 24e:	0e 94 06 03 	call	0x60c	; 0x60c <digitalWrite>
 252:	68 ee       	ldi	r22, 0xE8	; 232
 254:	73 e0       	ldi	r23, 0x03	; 3
 256:	80 e0       	ldi	r24, 0x00	; 0
 258:	90 e0       	ldi	r25, 0x00	; 0
 25a:	0e 94 eb 01 	call	0x3d6	; 0x3d6 <delay>
 25e:	80 91 00 02 	lds	r24, 0x0200
 262:	60 e0       	ldi	r22, 0x00	; 0
 264:	0e 94 06 03 	call	0x60c	; 0x60c <digitalWrite>
 268:	68 ee       	ldi	r22, 0xE8	; 232
 26a:	73 e0       	ldi	r23, 0x03	; 3
 26c:	80 e0       	ldi	r24, 0x00	; 0
 26e:	90 e0       	ldi	r25, 0x00	; 0
 270:	0e 94 eb 01 	call	0x3d6	; 0x3d6 <delay>
 274:	08 95       	ret

Sin embargo, como decía, no aparecen como comentarios las líneas del código (aunque se intuyen, al aparecer comentados los vectores de las funciones llamadas). Intuyo, al igual que luca_p, que puede ser que esa información no esté ya en el propio archivo.elf, y que tal vez sea que haya que compilar utilizando algún modificador específico.
Como he dicho, no tengo de momento pensado utilizar esta técnica, que consistiría en buscar secciones de código donde la velocidad sea crítica, optimizar algo el ensamblador y luego sustituir en el código original dichas instrucciones por el ensamblador, pero en C hace un porrón de años alguna vez recurrí a ello y me dio buenos resultados, así que no sería mala opción poder tener esa posibilidad en la recámara.

noter:
Gracias por las contestaciones.
Realizado el avr-objdump del ejemplo blink, entre todo el batiburrillo de instrucciones, aparece lo que correspondería al loop:

00000248 <loop>:

248: 80 91 00 02 lds r24, 0x0200
24c: 61 e0        ldi r22, 0x01 ; 1
24e: 0e 94 06 03 call 0x60c ; 0x60c
252: 68 ee        ldi r22, 0xE8 ; 232
254: 73 e0        ldi r23, 0x03 ; 3
256: 80 e0        ldi r24, 0x00 ; 0
258: 90 e0        ldi r25, 0x00 ; 0
25a: 0e 94 eb 01 call 0x3d6 ; 0x3d6
25e: 80 91 00 02 lds r24, 0x0200
262: 60 e0        ldi r22, 0x00 ; 0
264: 0e 94 06 03 call 0x60c ; 0x60c
268: 68 ee        ldi r22, 0xE8 ; 232
26a: 73 e0        ldi r23, 0x03 ; 3
26c: 80 e0        ldi r24, 0x00 ; 0
26e: 90 e0        ldi r25, 0x00 ; 0
270: 0e 94 eb 01 call 0x3d6 ; 0x3d6
274: 08 95        ret



Sin embargo, como decía, no aparecen como comentarios las líneas del código (aunque se intuyen, al aparecer comentados los vectores de las funciones llamadas). Intuyo, al igual que luca_p, que puede ser que esa información no esté ya en el propio archivo.elf, y que tal vez sea que haya que compilar utilizando algún modificador específico.
Como he dicho, no tengo de momento pensado utilizar esta técnica, que consistiría en __**buscar secciones de código donde la velocidad sea crítica**__, optimizar algo el ensamblador y luego sustituir en el código original dichas instrucciones por el ensamblador, pero en C hace un porrón de años alguna vez recurrí a ello y me dio buenos resultados, así que no sería mala opción poder tener esa posibilidad en la recámara.

Parece ser que no es tan buena idea…