2009-07-15 122 views
0

編譯一些代碼後,編譯器生成一堆文件。我有統計,符號,調用樹,錯誤,列表,調試和exe。除了列表文件外,我已經想清楚了每個含義。什麼是列表文件的功能。是用於用戶還是計算機/嵌入式系統本身?列表文件在C(.LST)

回答

4

列表文件的確切內容通過工具和片稍有變化被使用。

該文件的主要部分將是將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 

被示爲十六進制值「....」上方是未在編譯時已知的地址,它們是將在鏈接時解析的符號。

該列表文件通常還會提供一些有關代碼大小,RAM要求和正在編譯的模塊的堆棧使用情況的統計信息。再次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

列表文件(.LST)包含一個C代碼塊[通過一系列句點字符註釋掉],後跟該塊的彙編代碼。


例如:

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