This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Problem with linking : Error: L6218E: Undefined symbols

Hello,

I created a project on STM32F407ZET6 with Keil µVision V5 14.0.0.

When build project I have these errors:

compiling main.c...
compiling os_app_hooks.c...
linking...
.\Flash\Obj\output.axf: Error: L6218E: Undefined symbol UART1_Init (referred from bsp.o).
.\Flash\Obj\output.axf: Error: L6218E: Undefined symbol UART3_Init (referred from bsp.o).
.\Flash\Obj\output.axf: Error: L6218E: Undefined symbol UART1_RxDMA_ReceiveLeftStr (referred from main.o).
Not enough information to list image symbols.
Finished: 1 information, 0 warning and 3 error messages.
".\Flash\Obj\output.axf" - 3 Error(s), 3 Warning(s).
Target not created.
Build Time Elapsed: 00:00:33

I have included .h files, and added .c files to project group.

Thanks!

Parents
  • Because have writed description, so there's no post codes.

    some codes in bsp_uart.c:

    #include "bsp.h"
    
    /***************************** USART1 Definition *****************************/
    static   OS_EVENT           *UART1Sem;
    
    static   UART_Data_t         Uart1_Data;
    static   COMM_Q_char         UART1_RxTmpBuf[UART1_FIFO_LENGTH + 1];
    
    static   DMA_InitTypeDef     DMA_UART1TxStructure;
    static   DMA_InitTypeDef     DMA_UART1RxStructure;
    /*************************** End USART1 Definition ***************************/
    
    /***************************** USART3 Definition *****************************/
    static   OS_EVENT           *UART3Sem;
    
    static   UART_Data_t         Uart3_Data;
    /*************************** End USART3 Definition ***************************/
    
    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    // USART1 Function
    // USART1 work with DMA mode using DMA2_Stream5 and DMA2_Stream7.
    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    
    
    /*+++++ association code +++++*/
    /******************************************************************************
    *                                      UART1_Init()
    *
    * Description : Initialize the USART1 peripheral.
    * Argument(s) : none.
    * Return(s)   : TRUE or FALSE.
    * Caller(s)   : BSP_Init().
    * Note(s)     : none
    ******************************************************************************/
    u8 UART1_Init(void)
    {
            COMM_Q_Status tmpSts;
    
        UART1_GPIO_Config();
        UART1_Config();
        UART1_DMA_Config();
        UART1_NVIC_Config();
    
    
        tmpSts = COMM_QCreate(&Uart1_Rx_Q, Uart1_Data.RxBuffer, UART1_RxBufferSize);
        if (tmpSts == COMM_Q_FAILURE) {
            return FALSE;
        }
        tmpSts = COMM_QCreate(&Uart1_Tx_Q, Uart1_Data.TxBuffer, UART1_TxBufferSize);
        if (tmpSts == COMM_Q_FAILURE) {
            return FALSE;
        }
    
            UART1Sem   = OSSemCreate(1);
            if (UART1Sem == NULL) {
                    return FALSE;
            }
    
            return TRUE;
    }
    
    
    /*+++++ association code +++++*/
    /******************************************************************************
    *                                      UART3_Init()
    *
    * Description : Initialize the USART3 peripheral.
    * Argument(s) : none.
    * Return(s)   : TRUE or FALSE.
    * Caller(s)   : BSP_Init().
    * Note(s)     : none
    ******************************************************************************/
    u8 UART3_Init(void)
    {
            COMM_Q_Status tmpSts;
    
        UART3_GPIO_Config();
        UART3_Config();
        UART3_DMA_Config();
        UART3_NVIC_Config();
    
    
        tmpSts = COMM_QCreate(&Uart3_Rx_Q, Uart3_Data.RxBuffer, UART3_RxBufferSize);
        if (tmpSts == COMM_Q_FAILURE) {
            return FALSE;
        }
        tmpSts = COMM_QCreate(&Uart3_Tx_Q, Uart3_Data.TxBuffer, UART3_TxBufferSize);
        if (tmpSts == COMM_Q_FAILURE) {
            return FALSE;
        }
    
            UART3Sem   = OSSemCreate(1);
            if (UART3Sem == NULL) {
                    return FALSE;
            }
    
            return TRUE;
    }
    
    
    /*+++++ association code +++++*/
    /******************************************************************************
    *                                      UART1_RxDMA_ReceiveLeftStr()
    *
    * Description :
    * Argument(s) : none.
    * Return(s)   : none.
    * Caller(s)   : none.
    * Note(s)     : none
    ******************************************************************************/
    void UART1_RxDMA_ReceiveLeftStr(void)
    {
            u16 i;
    
            COMM_QPushStr(&Uart1_Rx_Q, UART1_RxTmpBuf);
    
            DMA_Cmd(DMA2_Stream5, DISABLE);
            DMA_UART1RxStructure.DMA_MemoryBaseAddr = (u32)UART1_RxTmpBuf;
            DMA_UART1RxStructure.DMA_BufferSize = (u32)UART1_FIFO_LENGTH;
            DMA_Init(DMA2_Stream5, &DMA_UART1RxStructure);
            DMA_Cmd(DMA2_Stream5, ENABLE);
    
            for (i=0; i<UART1_FIFO_LENGTH+1; i++) {
                    UART1_RxTmpBuf[i] = 0;
            }
    }
    

Reply
  • Because have writed description, so there's no post codes.

    some codes in bsp_uart.c:

    #include "bsp.h"
    
    /***************************** USART1 Definition *****************************/
    static   OS_EVENT           *UART1Sem;
    
    static   UART_Data_t         Uart1_Data;
    static   COMM_Q_char         UART1_RxTmpBuf[UART1_FIFO_LENGTH + 1];
    
    static   DMA_InitTypeDef     DMA_UART1TxStructure;
    static   DMA_InitTypeDef     DMA_UART1RxStructure;
    /*************************** End USART1 Definition ***************************/
    
    /***************************** USART3 Definition *****************************/
    static   OS_EVENT           *UART3Sem;
    
    static   UART_Data_t         Uart3_Data;
    /*************************** End USART3 Definition ***************************/
    
    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    // USART1 Function
    // USART1 work with DMA mode using DMA2_Stream5 and DMA2_Stream7.
    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    
    
    /*+++++ association code +++++*/
    /******************************************************************************
    *                                      UART1_Init()
    *
    * Description : Initialize the USART1 peripheral.
    * Argument(s) : none.
    * Return(s)   : TRUE or FALSE.
    * Caller(s)   : BSP_Init().
    * Note(s)     : none
    ******************************************************************************/
    u8 UART1_Init(void)
    {
            COMM_Q_Status tmpSts;
    
        UART1_GPIO_Config();
        UART1_Config();
        UART1_DMA_Config();
        UART1_NVIC_Config();
    
    
        tmpSts = COMM_QCreate(&Uart1_Rx_Q, Uart1_Data.RxBuffer, UART1_RxBufferSize);
        if (tmpSts == COMM_Q_FAILURE) {
            return FALSE;
        }
        tmpSts = COMM_QCreate(&Uart1_Tx_Q, Uart1_Data.TxBuffer, UART1_TxBufferSize);
        if (tmpSts == COMM_Q_FAILURE) {
            return FALSE;
        }
    
            UART1Sem   = OSSemCreate(1);
            if (UART1Sem == NULL) {
                    return FALSE;
            }
    
            return TRUE;
    }
    
    
    /*+++++ association code +++++*/
    /******************************************************************************
    *                                      UART3_Init()
    *
    * Description : Initialize the USART3 peripheral.
    * Argument(s) : none.
    * Return(s)   : TRUE or FALSE.
    * Caller(s)   : BSP_Init().
    * Note(s)     : none
    ******************************************************************************/
    u8 UART3_Init(void)
    {
            COMM_Q_Status tmpSts;
    
        UART3_GPIO_Config();
        UART3_Config();
        UART3_DMA_Config();
        UART3_NVIC_Config();
    
    
        tmpSts = COMM_QCreate(&Uart3_Rx_Q, Uart3_Data.RxBuffer, UART3_RxBufferSize);
        if (tmpSts == COMM_Q_FAILURE) {
            return FALSE;
        }
        tmpSts = COMM_QCreate(&Uart3_Tx_Q, Uart3_Data.TxBuffer, UART3_TxBufferSize);
        if (tmpSts == COMM_Q_FAILURE) {
            return FALSE;
        }
    
            UART3Sem   = OSSemCreate(1);
            if (UART3Sem == NULL) {
                    return FALSE;
            }
    
            return TRUE;
    }
    
    
    /*+++++ association code +++++*/
    /******************************************************************************
    *                                      UART1_RxDMA_ReceiveLeftStr()
    *
    * Description :
    * Argument(s) : none.
    * Return(s)   : none.
    * Caller(s)   : none.
    * Note(s)     : none
    ******************************************************************************/
    void UART1_RxDMA_ReceiveLeftStr(void)
    {
            u16 i;
    
            COMM_QPushStr(&Uart1_Rx_Q, UART1_RxTmpBuf);
    
            DMA_Cmd(DMA2_Stream5, DISABLE);
            DMA_UART1RxStructure.DMA_MemoryBaseAddr = (u32)UART1_RxTmpBuf;
            DMA_UART1RxStructure.DMA_BufferSize = (u32)UART1_FIFO_LENGTH;
            DMA_Init(DMA2_Stream5, &DMA_UART1RxStructure);
            DMA_Cmd(DMA2_Stream5, ENABLE);
    
            for (i=0; i<UART1_FIFO_LENGTH+1; i++) {
                    UART1_RxTmpBuf[i] = 0;
            }
    }
    

Children