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.

[参考译文] 编译器/TM4C1231H6PM:由于"未解析符号 I2CMInit&quot 而导致编译失败;

Guru**** 2484835 points
Other Parts Discussed in Thread: EK-TM4C123GXL

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/733247/compiler-tm4c1231h6pm-compilation-fails-due-to-unresolved-symbol-i2cminit

器件型号:TM4C1231H6PM
Thread 中讨论的其他器件:EK-TM4C123GXL

工具/软件:TI C/C++编译器

您好!

在我添加"I2CMInit"函数之前、下面的代码编译良好:

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include 
#include 
/////////////////////////////////////////////////////////////////////////////////////////#////////////////////////////////////////////#//////////////////////#///////////////////////////////////#///////////////////////////////////////////////












//我的 I2C 定义并包括
#include "driverlib/i2c.h"
#include "driverlib/interrv.h"
#include "inc/hw_i2c.h"
#include "inc/hw_ints.h"
#include "sensorlib/i2cm_drv.h"
#include "sensorlib/mpu6050.///

////////////




//我的 UART 定义并包括
#include "driverlib/uart.h"

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int main (void)
{

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//我的 I2C 初始化代码

//启用包含 I2C 2的 GPIO 外设
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);

//启用 I2C 模块2
SysCtlPeripheralEnable (SYSCTL_Periph_I2C2);

//为端口 E4和 E5上的 I2C2功能配置引脚多路复用。
GPIOPinConfigure (GPIO_PE4_I2C2SCL);
GPIOPinConfigure (GPIO_PE5_I2C2SDA);

//为这些引脚选择 I2C 功能。
GPIOPinTypeI2CSCL (GPIO_Porte _BASE、GPIO_PIN_4);
GPIOPinTypeI2C (GPIO_Porte _BASE、GPIO_PIN_5);

IntMasterEnable();

I2CMInit (&g_sI2CInst、I2C2_base、INT_I2C2、0xFF、0xFF、 SysCtlClockGet ();
SysCtlDelay (SysCtlClockGet ()/ 3);

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//我的 UART 初始化代码
SysCtlClockSet (SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHz);
SysCtlPeripheralEnable (SYSCTL_Periph_UART0);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
GPIOPinConfigure (GPIO_PA0_U0RX);
GPIOPinConfigure (GPIO_PA1_U0TX);
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));
UARTCharPut (UART0_BASE、"U");
UARTCharPut (UART0_BASE、'A');
UARTCharPut (UART0_BASE、"R");
UARTCharPut (UART0_BASE、"T");
UARTCharPut (UART0_BASE、');
UARTCharPut (UART0_BASE、"W");
UARTCharPut (UART0_BASE、'o');
UARTCharPut (UART0_BASE、"r");
UARTCharPut (UART0_BASE、"k");
UARTCharPut (UART0_BASE、'S);

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

volatile uint32_t ui32Load;
volatile uint32_t ui32PWMClock;
volatile uint8_t ui8Adcust;
ui8Ad只是= 83;

//此命令已用于设置 UART,因此被省略。
// SysCtlClockSet (SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHz);

SysCtlPWMClockSet (SYSCTL_PWMDIV_64);

SysCtlPeripheralEnable (SYSCTL_Periph_PWM1);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);

GPIOPinTypePWM (GPIO_PORTD_BASE、GPIO_PIN_0);
GPIOPinConfigure (GPIO_PD0_M1PWM0);

HWREG (GPIO_PORTF_BASE + GPIO_LO_LOCK)= GPIO_LOCK_KEY;
HWREG (GPIO_PORTF_BASE + GPIO_O_CR)|= 0x01;
HWREG (GPIO_PORTF_BASE + GPIO_LO_LOCK)= 0;
GPIODirModeSet (GPIO_PORTF_BASE、GPIO_PIN_4|GPIO_PIN_0、GPIO_DIR_MODE_IN);
GPIOPadConfigSet (GPIO_PORTF_BASE、GPIO_PIN_4|GPIO_PIN_0、GPIO_Strength _2mA、GPIO_PIN_TYPE_STD_WPU);

ui32PWMClock = SysCtlClockGet ()/64;
ui32Load =(ui32PWMClock/PWM_FREQUENCY)- 1;
PWMGenConfigure (PWM1_base、PWM_GEN_0、PWM_GEN_MODE_DOWN);
PWMGenPeriodSet (PWM1_base、PWM_GEN_0、ui32Load);

PWMPulseWidthSet (PWM1_base、PWM_OUT_0、ui8Adust * ui32Load / 1000);
PWMOutputState (PWM1_base、PWM_OUT_0_bit、true);
PWMGenEnable (PWM1_base、PWM_GEN_0);

while (1)
{
//一堆谎言...
}

}

现在、失败、出现以下错误:

未解析符号 I2CMInit、首先在./main.obj PID C/C++问题中引用

我在论坛中搜索错误并找到此帖子-建议安装较旧版本的编译器:

在执行此操作之前,代码中是否有我可以更改的内容,以便使其与当前版本配合使用?

我正在使用 CCS 版本:7.1.0.00016和 TivaWare 2.1.4.178

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

    您好!

     您是否有机会查看中的 TivaWare I2C 示例 /examples/peripherals/i2c 文件夹? 下面是将 I2C0初始化为环回模式的代码片段。

    SysCtlPeripheralEnable (SYSCTL_Periph_I2C0);
    
    //
    //对于本示例,I2C0与 PortB[3:2]一起使用。 实际端口和
    //使用的引脚可能与您的器件不同、请参阅的数据表
    //更多信息。 GPIO 端口 B 需要启用、因此这些引脚可以
    //使用。
    // TODO:将其更改为您正在使用的 GPIO 端口。
    //
    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);
    
    //
    //为端口 B2和 B3上的 I2C0功能配置引脚复用。
    //如果您的器件不支持引脚复用、则无需执行此步骤。
    // TODO:更改此选项以选择您正在使用的端口/引脚。
    //
    GPIOPinConfigure (GPIO_PB2_I2C0SCL);
    GPIOPinConfigure (GPIO_PB3_I2C0SDA);
    
    //
    //为这些引脚选择 I2C 功能。 此函数也会
    //为 I2C 操作配置 GPIO 引脚,将其设置为
    //开漏操作,弱上拉。 请参阅数据表
    //查看每个引脚分配了哪些功能。
    // TODO:更改此选项以选择您正在使用的端口/引脚。
    //
    GPIOPinTypeI2CSCL (GPIO_PORTB_BASE、GPIO_PIN_2);
    GPIOPinTypeI2C (GPIO_PORTB_BASE、GPIO_PIN_3);
    
    //
    //启用环回模式。 环回模式是一个内置的特性
    //可用于调试 I2C 操作。 它在内部连接 I2C
    //主机和从机终端,这可以有效地让您按发送数据
    //主设备并作为从设备接收数据。
    //注意:对于外部 I2C 操作,您需要使用外部上拉电阻
    //比内部上拉电阻器强。 请参阅的数据表
    //更多信息。
    //
    I2CLoopbackEnable (I2C0_BASE);
    
    //
    //启用和初始化 I2C0主机模块。 使用的系统时钟
    // I2C0模块。 最后一个参数设置 I2C 数据传输速率。
    //如果为 false,则数据速率设置为100kbps,如果为 true,则数据速率将设置为
    //设置为400kbps。 在本示例中、我们将使用100kbps 的数据速率。
    //
    #if defined (target_IS_TM4C129_RA0)|| \
    已定义(TARGET_IS_TM4C129_RA1)|| \
    已定义(TARGET_IS_TM4C129_RA2)
    I2CMasterInitExpClk (I2C0_BASE、ui32SysClock、false);
    #else
    I2CMasterInitExpClk (I2C0_BASE、SysCtlClockGet ()、false);
    #endif
    
    //
    //启用 I2C0从机模块。 此模块仅用于测试
    //目的。 无需启用它即可正常运行
    // I2Cx 主机模块。
    //
    I2CSlaveEnable (I2C0_BASE);
    
    //
    //将从地址设置为 SLAVE_ADDRESS。 在回送模式下、它是一个
    //发送到的任意7位数(在上面的宏中设置)
    // I2CMasterSlaveAddrSet 函数。
    //
    I2CSlaveInit (I2C0_BASE、SLAVE_ADDRESS);
    
    //
    //告诉主模块何时将在总线上放置什么地址
    //与从设备通信。 将地址设置为 SLAVE_ADDRESS
    //(在从机模块中设置)。 接收参数设置为 false
    //表示 I2C 主设备正在向从设备发起写入操作。 如果
    // true、这表示 I2C 主设备正在启动读取
    //从器件。
    //
    I2CMasterSlaveAddrSet (I2C0_BASE、SLAVE_ADDRESS、FALSE); 

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

    如果您想要使用作为 sensorlib 一部分的 I2CMInit、则需要链接该库。 请参见下面的。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    为什么"driverlib.lib"不需要此步骤?
    我也使用它...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    driverlib.lib 通常已包含在链接器的 include 搜索路径中。 对于 sensorlib、默认情况下不包含在 SearchPath 中。 如果要使用它、您需要将其包括在内。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的帮助。
    在哪里可以看到包含哪些内容?哪些不包含?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您从一个简单的 TivaWare 示例开始、如 hello 或下的任何示例 然后、/examples/boards/ek-tm4c123gxl 这些项目被构建为仅包含 driverlib.lib、而不包含其他库、因为这些示例无需引用其他库、而只能引用 driverlib.lib。 假设您正在创建一个需要使用图形库的新项目、则需要包含 链接器搜索路径中的/grlib/ccs/Debug/grlib.lib。 如果您参考中的图形示例项目 /examples/boards /ek-tm4c123gxl -boostxl-kentec-s1、则您会注意到在搜索路径中已经指定了 grlib.lib。 同样、如果您尝试下面的示例 然后、/examples/ek-tm4c123gxl-boostxl-senshub 您将看到 sensorlib.lib 在项目的链接器搜索路径中指定、因为这些项目使用 sensorlib.lib。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     我添加了搜索路径并进行了编译-但现在我收到了以下警告:

    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段"i.I2CMInit"

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请参阅我之前附加的图片。 您需要 driverlib.lib 和 sensorlib.lib。 您丢失了 driverlib.lib。 请先解决此问题。