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

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

0 голосов
/ 15 июля 2009

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

Ответы [ 2 ]

6 голосов
/ 15 июля 2009

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

Основная часть файла будет преобразованием исходного кода 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

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

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

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

1 голос
/ 15 июля 2009

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


Например:

....................        return FALSE; 
0046:  MOVLW  00
0047:  MOVWF  21
0048:  GOTO   049
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...