使用头文件"utils/uartstdio.h"产生unresolved symbols remain的问题

使用头文件"utils/uartstdio.h"产生unresolved symbols remain的问题

此问题已被解答
All Replies
  • 秀才260分

    在引用头文件"utils/uartstdio.h"时一旦使用该头文件包含的函数时,CCS就会报错内容为

    <Linking>

    undefined first referenced
    symbol in file
    --------- ----------------
    UARTprintf ./main.obj

    error #10234-D: unresolved symbols remain
    error #10010: errors encountered during linking; "SSI.out" not built

    是不是工程配置有问题?

    源代码如下|

    #include<stdint.h>
    #include<stdbool.h>
    #include"inc/hw_memmap.h"
    #include"driverlib/gpio.h"
    #include"driverlib/pin_map.h"
    #include"driverlib/ssi.h"
    #include"driverlib/uart.h"
    #include"driverlib/sysctl.h"
    #include "utils/uartstdio.h"
    #define NUM_SSI_DATA 3
    //串口初始化函数
    void InitConsole(void)
    {
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
    GPIOPinConfigure(GPIO_PA0_U0RX);
    GPIOPinConfigure(GPIO_PA1_U0TX);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
    //使用16MHZ内部时钟源作为串口时钟
    UARTClockSourceSet(UART0_BASE,UART_CLOCK_PIOSC);
    GPIOPinTypeUART(GPIO_PORTA_BASE,GPIO_PIN_0|GPIO_PIN_1);
    //串口号、波特率、时钟频率
    UARTConfigSetExpClk(UART0_BASE,SysCtlClockGet(),115200,(UART_CONFIG_WLEN_8|UART_CONFIG_STOP_ONE|UART_CONFIG_PAR_NONE));
    }

    int main(void)
    {
    uint32_t pui32DataTX[NUM_SSI_DATA];
    uint32_t pui32DataRX[NUM_SSI_DATA];
    uint32_t ui32Index;

    SysCtlClockSet(SYSCTL_SYSDIV_1|SYSCTL_USE_OSC|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHZ);
    InitConsole();
    //UARTprintf("ssi ->\n");
    //UARTprintf("Mode:spi\n");
    //UARTprintf("Data:8-bit\n\n");
    SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
    GPIOPinConfigure(GPIO_PA2_SSI0CLK);
    GPIOPinConfigure(GPIO_PA3_SSI0FSS);
    GPIOPinConfigure(GPIO_PA4_SSI0RX);
    GPIOPinConfigure(GPIO_PA5_SSI0TX);

    GPIOPinTypeSSI(GPIO_PORTA_BASE,GPIO_PIN_5|GPIO_PIN_4|GPIO_PIN_3|GPIO_PIN_2);
    //SSI0_BASE/时钟频率、时钟协议,moto代表SPI协议、工作模式:主机模式、位速率1M、数据帧位数为8
    SSIConfigSetExpClk(SSI0_BASE,SysCtlClockGet(),SSI_FRF_MOTO_MODE_0,SSI_MODE_MASTER,1000000,8);
    SSIEnable(SSI0_BASE);
    while(SSIDataPutNonBlocking(SSI0_BASE,&pui32DataRX[0]));//确保RXFIFO中没有数据

    pui32DataTX[0]='s';
    pui32DataTX[1]='P';
    pui32DataTX[2]='i';

    UARTprintf("sent:\n");


    for(ui32Index=0;ui32Index<NUM_SSI_DATA;ui32Index++)
    {
    //UARTprintf("'%C'",pui32DataTX[ui32Index]);
    SSIDataPut(SSI0_BASE,pui32DataTX[ui32Index]);
    }
    //等待SSI0将所有数据发送到FIFO中
    while(SSIBusy(SSI0_BASE));

    //UARTprintf("\nReceived:\n");

    for(ui32Index=0;ui32Index<NUM_SSI_DATA;ui32Index++)
    {
    SSIDataGet(SSI0_BASE,&pui32DataRX[ui32Index]);
    pui32DataRX[ui32Index]&=0x00FF;
    //UARTprintf("'%C'",pui32DataRX[ui32Index]);
    }
    }

  • 秀才260分

    问题已经解决了,主要是没将不在diverlib库函数中的源文件添加到工程文件中

  • 秀才20分

    C:\ti\TivaWare_C_Series-2.1.3.156\utils是只要把这个路径里面的uartstdio.c添加到工程文件就可以吗?为什么我还是会报错,求指教

  • 状元35625分

    需要配置的文件路径多了,不止这么一个。官方有个TM4C123x的视频,开头就是教配置的,你可以看看。

    苦行僧。

  • 秀才644分

    能不能详细说明一下,如何添加

  • 状元35625分

    http://bbs.21ic.com/icview-857279-1-1.html 左键选择工程,右键选择添加文件,找到这个.c文件添加即可了。

    苦行僧。