2009-07-15 2 views
0

После компиляции некоторого кода компилятор генерирует кучу файлов. У меня есть статистика, символы, дерево вызовов, ошибки, список, debug и exe. Я выяснил, что означает каждый, кроме файла списка. Какова функция файла списка. Это для пользователя или самого компьютера/встроенной системы?Список файлов в C (.LST)

ответ

4

Точное содержание файла списка незначительно варьируется в зависимости от инструмента и чип используется.

Основной частью файла будет перевод исходного кода С в инструкции по сборке, выполненные компилятором. Это полезно для отладки кода и проверки эффективности компилятора при переводе определенных конструкций исходного кода. В приведенном ниже примере каждому Cline присваивается номер строки и ассемблер, указанный после. (этот пример для процессора AVR32).

171     /********************************************************** 
172     * Test for a receive interrupt 
173     **********************************************************/ 
174    if (USART_CHANNEL[ Channel ] -> CSR.rxrdy) 
    000008 F8051502  LSL  R5,R12,0x2 
    00000C ........  MOV  R7,LWRD(USART_CHANNEL) 
    000010 EA17....  ORH  R7,HWRD(USART_CHANNEL) 
    000014 EE0C0027  ADD  R7,R7,R12<<0x2 
    000018 6E0C   LD.w  R12,R7[0x0] 
    00001A ........  MOV  R6,LWRD(Serial_Receive_Queue) 
    00001E EA16....  ORH  R6,HWRD(Serial_Receive_Queue) 
    000022 785B   LD.w  R11,R12[0x14] 
    000024 A19B   LSR  R11,0x1 
    000026 C0B2   BRCC  ??USART_Process_Interrupt_1:C 

Значение HEX, которые показаны как «....» выше адрес, которые не известны во время компиляции, они являются символами, которые будут решены во время компоновки.

Файл списка также обычно дает некоторую статистику относительно размера кода, требований к ОЗУ и использования стека для скомпилированного модуля. Опять IAR набор инструментов для максимального использования стека AVR32

в байтах:

Function      CSTACK 
--------      ------ 
Serial_Ports_Initialise   36 
    -> gpio_enable_module   36 
    -> usart_init_rs232   36 
    -> Indirect call    36 
    -> Indirect call    36 
    -> Indirect call    36 
    -> Indirect call    36 
Serial_Transmit_With_Length  20 
    -> xQueueGenericSend   20 
    -> vTaskDelay     20 
USART0_INT_Handler    0 
    -> USART_Process_Interrupt  0 
USART1_INT_Handler    0 
    -> USART_Process_Interrupt  0 
USART2_INT_Handler    0 
    -> USART_Process_Interrupt  0 
USART_Process_Interrupt   32 
    -> xQueueGenericSendFromISR 32 
    -> xQueueReceiveFromISR  32 


    Segment part sizes: 

    Function/Label     Bytes 
    --------------     ----- 
    Serial_Receive_Queue    24 
    Serial_Transmit_Queue 
    USART_CHANNEL      12 
    USART0_INT_Handler     8 
    USART1_INT_Handler     8 
    USART2_INT_Handler     12 
    USART_Process_Interrupt   112 
    Serial_Ports_Initialise   172 
    USART_Channel_In_Use    56 
    USART_GPIO_MAP 
    USART_OPTIONS 
    Serial_Transmit_With_Length  116 
    ?<Initializer for USART_CHANNEL> 12 
    ??USART1_INT_Handler??handle  4 
     Others       24 



400 bytes in segment CODE32 
    56 bytes in segment DATA32_C 
    12 bytes in segment DATA32_I 
    12 bytes in segment DATA32_ID 
    24 bytes in segment DATA32_Z 
    28 bytes in segment EVSEG 
    4 bytes in segment HTAB 
    24 bytes in segment INITTAB 

400 bytes of CODE memory 
100 bytes of CONST memory (+ 24 bytes shared) 
    36 bytes of DATA memory 

Errors: none 
Warnings: 1 

Там будет также сообщения об ошибках или предупреждения сгенерирована вставлено в соответствующей строке кода.

Таким образом, файл списка можно использовать в качестве средства оценки использования стека и памяти, хотя использование стека является очень сложной проблемой в любой встроенной системе и для просмотра кода уровня ассемблера, созданного компилятором.

Из опыта, файл списка не особенно полезен при использовании средства отладки исходного уровня - обычно это показывает соответствующий дизассемблированный код напрямую.

1

Файл списка (.LST) содержит блок кода C [закомментирован последовательностью символов периода], за которым следует код сборки для этого блока.


Например:

....................  return FALSE; 
0046: MOVLW 00 
0047: MOVWF 21 
0048: GOTO 049