This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] EK-TM4C1294XL:编译 FATFS 时出现未解析的符号错误

Guru**** 1791630 points
Other Parts Discussed in Thread: EK-TM4C1294XL
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/569606/ek-tm4c1294xl-unresolved-symbols-error-while-compiling-fatfs

器件型号:EK-TM4C1294XL

大家好、

我正在尝试编译程序、但遇到以下错误

未定义      的首次引用
 符号                 
 ------       --------
 disk_initialize ./main.obj      
 f_close        ./main.obj      
 f_mount        ./main.obj      
 f_open         ./main.obj      
 f_write        ./main.obj      

错误#10234-D:未解析的符号仍然存在
错误#10010:链接期间遇到错误;未构建"main communication.out"

我正在将 CCSv6与 TIvaware 版本2.1.0.12573配合使用。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Sumit

    在编译工程期间、您可能尚未包含 FAT 文件系统源文件。 请参阅 DK-TM4C129X 中的现有示例、以查看编译期间需要包含哪些文件。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Amit、您好!

    我在 DK-TM4C129X 中参考了 SDCARD.c 示例、并检查我的以下项目设置。 IAM 发布屏幕截图供您参考

    此外,我对 SPI 引脚设置感到困惑。 假设我要使用 SSI3连接 SD 卡模块,是否必须在 main()函数中进行 SPI 引脚配置? 我之所以提出这个问题、是因为在 MMC-dk-tm4c129x.c 文件中、SPI 引脚已经被定义。

    CS 引脚被称为 PH4、其中 EK-TM4C1294xl launchpad 上不提供 PH4引脚!

    /******** SD 卡的测试代码******** /#include
    
    
    #include 
    
    include "inc/hw_memmap.h"
    #include "inc/hw_types.h"
    #include "inc/hw_udma.h"
    #include "inc/hw_adc.h"
    #include "driverlib/syssctl.h"
    #include "driverlib/gpio.h"
    #include "driverlib/pin_map.h"
    
    
    #include "driverlib.包含"driver.h"#driverlib.intradc.h"#include "driver.h"#include "driverlib.包含"driverlib"#driver.h"#interrude"#driverlib.包含"driverlib_math.intrunic"#include "driver.h"#include "driverlib.包含"driver.h"#driver.h"#include "driverlib.intrl.包含"driverlib
    
    
    
    
    
    #include "driverlib/fpu.h"
    #include "driverlib/udma.h"
    #include "driverlib/ssi.h"
    //#include "math_helper.h"
    
    #include "fatfs/src/ff.h"
    #include "fatfs/src="/diskio.h"
    
    static FATFS g_sfs;//数据结构使用以下数据。
    静态 FIL fil;
    
    int
    main (void)
    {
    INT nStatus;
    FRESULT iFResult;
    
    ui32SysClkFreq= SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz | SYSCTL_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、120000000);
    
    SysCtlSysCtlSysEnable(SYSCTL_PERIPH
    )(SYSCTL_PERIPQ);GPIOPTL (while (while)
    SysCtlPeripheralEnable (SYSCTL_Periph_SSI3);//对于 SD 卡
    GPIOPinConfigure (GPIO_PQ0_SSI3CLK);
    GPIOPinConfigure (GPIO_PQ1_SSI3FSS);
    GPIOPinConfigure (GPIO_PQ2_SSI3XDAT0);
    GPIOPinConfigure (GPIO_PQ3_SSI3XDAT1);
    
    GPIOPinTypeSSI (GPIO_PORTQ_BASE、GPIO_PIN_3 | GPIO_PIN_2 | GPIO_PIN_1 |
    GPIO_PIN_0);
    
    
    SSIConfigSetExpClk (SSI3_base、ui32SysClkFreq、SSI_FRF_MOTO_MOTO_MODE_0、
    SSI_MODE_MASTER、400000、8);
    
    SSIEnable (SSI3_base);
    
    
    iFResult = f_mount (0、&g_sFatFS);
    
    
    POWER_ON();
    bool a = wait_ready();
    状态错误;
    如果(a){
    send_inition_clock_train ();
    errd = disk_initialize (0);
    
    uint32_t count = 8*512;
    iFResult = f_open (&fil、"testfile.txt"、fa_create_new|fa_write);
    
    
    iFResult = f_write (&fil、"Hello world"、11、&count);
    
    iFResult = f_close (&fil);
    f_mount (0、NULL);
    
    } 


    我仍然会遇到如下错误

    未定义                 的首次引用     
     符号                                 
     ------                  --------     
     ROM_GPIOPinTypeGPIOOutput ./MMC-dk-tm4c129x.obj
     ROM_GPIOPinTypeSSI        ./MMC-dk-tm4c129x.obj
     ROM_GPIOPinWrite          ./MMC-dk-tm4c129x.obj
     ROM_SSIConfigSetExpClk    ./MMC-dk-tm4c129x.obj
     ROM_SSIDataGet            ./mmc-dk-tm4c129x.obj
     ROM_SSIDataPut            ./MMC-dk-tm4c129x.obj
     ROM_SSIDisable            ./MMC-dk-tm4c129x.obj
     ROM_SSIEnable             ./MMC-dk-tm4c129x.obj
     ROM_SysCtlPeripheralEnable ./MMC-dk-tm4c129x.obj
     G_ui32SysClock            ./mmc-dk-tm4c129x.obj

     power_on                  ./main.obj           
    >>编译失败
     send_inition_clock_train  ./main.obj           
     wait_ready                ./main.obj           

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Sumit

    您尚未包含 ROM_XXX 错误消息所需的 rom.h 和 rom_map.h 文件

    其他原因是 Fat 文件系统中缺少文件编译。 在 main.c 中调用函数的方法不是正确的方法、在 SD 卡示例中也不存在该方法。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Amit、您好!

    我已包含 rom.h 和 rom_map.h 文件、但仍然收到相同的错误。

    由于 I'am 使用 SSI3和 EK-TM4C1294XL launchpad 引脚图显示端口 Q 用于 SSI3

    我已更改 MMC-EK-tm4c1294xl.c 文件中的 SSI 引脚配置、如下所示

    /* EK-TM4C129EXL 电路板的外设定义*//
    /* SSI 端口*/
    #define SDC_SSI_base SSI3_base
    #define SDC_SSI_SYSCTL_PERIPh SYSCTL_PERIPH_SSI3
    
    // SSI 引脚的 GPIO *//
    *//*#define
    SDC_SSI_CLK_GPIO_PORT_base GPIO_PORTQ_BASE
    #define SDC_SSI_CLK GPIO_PIN_0
    /* TX 引脚*/
    #define SDC_SSI_TX_GPIO_PORT_BASE GPIO_PORTQ_BASE // GPIO_PORTF_BASE
    #define SDC_SSI_TX GPIO_PIN_2//GPIO_PIN_0
    /* RX 引脚*/
    #define SDC_SSI_RX_GPIO_PORT_BASE GPIO_PORTQ_BASE
    #define SDC_SSI_RX GPIO_PIN_3//GPIO_PIN_2
    /* CS 引脚*/
    #define SDC_SSI_FSS_GPIO_PORT_BASE GPIO_PORTQ_BASE//GPIO_Porth_BASE
    #define SDC_SSI_FSS GPIO_PIN_1//GPIO_PIN_4
    
    //必须由应用程序提供*/
    extern uint32_t ui32SysClkFreq;//g_ui32SysClock 

    此外,我已更改了 POWER_ON()函数,如下所示。

    静态
    void power_on (void)

       /*
        *这并不是真正打开电源、而是初始化
        *与卡通信所需的 SSI 端口和引脚。
        *

       /*启用用于驱动 SSI 上 SDC 的外设*/


       ROM_SysCtlPeripheralEnable (SDC_SSI_SYSCTL_Periph);
       ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOQ);
     

       
       /*
        *自定义添加
        
        *
       ROM_GPIOPinConfigure (GPIO_PQ3_SSI3XDAT1);
       ROM_GPIOPinConfigure (GPIO_PQ2_SSI3XDAT0);
     
       ROM_GPIOPinConfigure (GPIO_PQ0_SSI3CLK);
       /*
        *将相应的引脚配置为 SSI 而不是 GPIO。 FSS (CS)
        *信号被直接驱动、以确保我们可以通过将其保持在低电平
        *完成与 SD 卡的交易。
        *
       ROM_GPIOPinTypeSSI (SDC_SSI_TX_GPIO_PORT_BASE、SDC_SSI_TX);
       ROM_GPIOPinTypeSSI (SDC_SSI_RX_GPIO_PORT_BASE、SDC_SSI_RX);
       ROM_GPIOPinTypeSSI (SDC_SSI_CLK_GPIO_PORT_BASE、SDC_SSI_CLK);
       ROM_GPIOPinTypeGPIOOutput (SDC_SSI_FSS_GPIO_PORT_BASE、SDC_SSI_FSS);
       
     

       /*
        *将 SSI 输出引脚设置为4mA 驱动强度并接合
        *接收线上的上拉电阻。
        *
       MAP_GPIOPadConfigSet (SDC_SSI_RX_GPIO_PORT_BASE、SDC_SSI_RX、
                            GPIO_Strength _4mA、GPIO_PIN_TYPE_STD_WPU);
       MAP_GPIOPadConfigSet (SDC_SSI_CLK_GPIO_PORT_BASE、SDC_SSI_CLK、
                            GPIO_Strength _4mA、GPIO_PIN_TYPE_STD);
       MAP_GPIOPadConfigSet (SDC_SSI_TX_GPIO_PORT_BASE、SDC_SSI_TX、
                            GPIO_Strength _4mA、GPIO_PIN_TYPE_STD);
       MAP_GPIOPadConfigSet (SDC_SSI_FSS_GPIO_PORT_BASE、SDC_SSI_FSS、
                            GPIO_Strength _4mA、GPIO_PIN_TYPE_STD);

       /*配置 SSI3端口*/
       ROM_SSIConfigSetExpClk (SDC_SSI_base、ui32SysClkFreq、
                              SSI_FRF_MOTO_MODE_0、SSI_MODE_MASTER、400000、8);
       ROM_SSIEnable (SDC_SSI_base);

       /*将 DI 和 CS 设置为高电平并向卡的 SCLK 施加超过74个脉冲*/
       /*才能接受本机命令。 *
       send_inition_clock_train ();

       PowerFlag = 1;

    但是,当我在 power_on ()函数中添加以下行时

       ROM_GPIOPinConfigure (GPIO_PQ3_SSI3XDAT1);
       ROM_GPIOPinConfigure (GPIO_PQ2_SSI3XDAT0);
      
       ROM_GPIOPinConfigure (GPIO_PQ0_SSI3CLK);

    它给出了错误、如下所示

    "C:/ti/TivaWare_C_Series-2.1.0.12573/third_party/fatfs/port/mmc-ek-tm4c1294xl.c、第211行:错误:标识符"GPIO_PQ3_SSI3XDAT1"未定义
    "C:/ti/TivaWare_C_Series-2.1.0.12573/third_party/fatfs/port/mmc-ek-tm4c1294xl.c、第212行:错误:标识符"GPIO_PQ2_SSI3XDAT0"未定义
    "C:/ti/TivaWare_C_Series-2.1.0.12573/third_party/fatfs/port/mmc-ek-tm4c1294xl.c、第214行:错误:标识符"GPIO_PQ0_SSI3CLK"未定义

    IAM 向项目中添加文件的方式

    右键单击项目名称->选择"Add Files"->浏览 Tivaware 文件夹中的 MMC-dk-tm4c1294xl.c 文件->单击"Link to files"

    右键单击项目名称->选择"Add Files"->浏览到 Tivaware 文件夹中的 ff.c 文件->单击"Link to files"

    下面是我的简单代码

    #include 
    #include 
    #include 
    include "inc/hw_memmap.h"
    #include "inc/hw_types.h"
    #include "inc/hw_udma.h"
    #include "inc/hw_adc.h"
    
    
    #include "driverlib/hw_adc.h"
    #include "driverlib/driverlib/gpio.h"
    
    
    
    
    
    
    
    
    
    #include "driverlib#driver.h"#include "driverlib.包含"drivermath/driver.h"#include "driverlib#driverlib#include "driverlib.包含"#driverlib#driver.h"#include "driverlib#driverlib.包含"#driverlib#driver.h"#include "driverlib.intrl.包含"#driverlib"#driverlib.包含"driverlib.包含"driver.h"#driverlib#driverlib#driver.h"#include "driverlib#driverlib#driver.h"#include "driverlib#driverlib#driverlib.in.
    
    
    
    
    
    #include "driverlib/fpu.h"
    #include "driverlib/udma.h"
    #include "driverlib/ssi.h"
    //#include "math_helper.h"
    #include "utils/ustdlib.h"
    #include "utils/cmdline.h"
    
    
    #include "Fatfs/sc/ff.h"#fatfatfs/ufatfs/ufatfs/ufatfs/i32kfs/ufs/ufatfs.h
    
    
    
    
    
    ;32 ufstatic static status/ufs/idlinufs.h 使用的结构。
    静态 FIL fil;
    
    int main (void)
    {
    
    
    FRESULT iFResult;
    
    FPULazyStackingEnable();
    
    FPUEnable();
    
    ui32SysClkFreq= SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz | SYSCL_MAIN | SYSCTL_USE_PLL | SysCtl_CFG_VCO_VCO_100MHz
    
    
    
    );SysC2000t
    (T3000);SysTick InteQ100);SysC000()
    
    
    iFResult = f_mount (0、&g_sFatFs);
    
    
    
    uint32_t count = 8*512;
    iFResult = f_open (&fil、"testfile.txt"、fa_create_new|fa_write);
    
    iFResult = f_write (&fil、 "hello world"、11、&count);
    
    iFResult = f_close (&fil);
    
    f_mount (0、 null); 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Sumit、

    您能否压缩项目并将其发送到其他地方? 我们不会因为所提供的粗略信息而获得任何建设性的地方。。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    e2e.ti.com/.../sd-card-test.rarHelloAmit、

    我已附加压缩的项目。 我使用的是 CCSv6和 TIVAWARE 版本2.1.0.12573

    我还在项目中包含了 MMC-EK-tm4c1294xl.c 和 ff.c 文件。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Sumit

    我看到您的代码有3个问题

    构建选项中缺少 define TARGET_IS_TM4C129_RA1。
    2.未在工程的 Build Settings 中定义变量 SW_ROOT。
    uint32_t ui32SysClkFreq 必须声明为 volatile uint32_t g_ui32SysClkFreq、并且所有 ui32SysClkFreq 必须在 main.c 中被 g_ui32SysClkFreq 替换

    更正了相同的内容后、工程正在编译。 但我不能保证它能正常工作…
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Amit、您好!

    非常感谢您的帮助!! 项目已启动并正在运行。 代码也可以正常工作。

    现在、我正在研究如何将 ADC 数据值连续写入 SD 卡(例如、大约1000个数据值)。

    如果遇到任何问题,还会再来的!

    再次感谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Sumit、

    很高兴听到它正在为您服务。 请打开一个新帖子、而不是延长当前帖子。