Список файлов в C (.LST)

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


person quest49    schedule 15.07.2009    source источник


Ответы (2)


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

Большая часть файла будет переводом исходного кода C в инструкции по ассемблеру, выполненным компилятором. Это полезно для отладки кода и проверки эффективности компилятора при переводе определенных конструкций исходного кода. В приведенном ниже примере каждому 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

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

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

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

person uɐɪ    schedule 15.07.2009

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


Например:

....................        return FALSE; 
0046:  MOVLW  00
0047:  MOVWF  21
0048:  GOTO   049
person quest49    schedule 15.07.2009