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.

[参考译文] Linux/SW-EK-TM4C123GXL:未定义对`GPIOPinRead&#39的引用;

Guru**** 2460850 points
Other Parts Discussed in Thread: TM4C123GH6PM

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/653027/linux-sw-ek-tm4c123gxl-undefined-reference-to-gpiopinread

器件型号:SW-EK-TM4C123GXL
主题中讨论的其他器件:TM4C123GH6PM

工具/软件:Linux

你(们)好  

我正在尝试使 Tiva Launchpad 上的 LED 闪烁。

这是我闪烁 LED 的源代码

1 #include
2 #include
3.
4 #include "inc/hw_types.h"
5 #include "inc/hw_gpio.h"
6 #include "inc/hw_memmap.h"
7 #include "inc/hw_sysctl.h"
8 #include "driverlib/gpio.h"
9 #include "driverlib/rom.h"
10 #include "driverlib/sysctl.h"
11 #include "driverlib/pin_map.h"
12 #include "driverlib/CAN.h"
13.
14 #define LED_RED GPIO_PIN_1
15 #define LED_BLUE GPIO_PIN_2
16 #define LED_GREEN GPIO_PIN_3
17 #define SW2 GPIO_PIN_0
18 #define SW1 GPIO_PIN_4
19.
20 int main()
21{
22 ROM_SysCtlClockSet (SYSCTL_SYSDIV_4|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHz|SYSCTL_OSC_MAIN);
23 ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
24 ROM_GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、LED_RELED_LED_BLE|LED_GREEN);
25 ROM_GPIOPinTypeGPIOInput (GPIO_PORTF_BASE、SW2);
26
27适用于(;;){
28.
29 IF (GPIOPinRead (GPIO_PORTF_BASE、SW2)){
30 GPIOPinWrite (GPIO_PORTF_BASE、LED_GREEN、LED_GREEN);
31}否则{
32 GPIOPinWrite (GPIO_PORTF_BASE、LED_GREEN、0);
33}
34}
35}
36.

当我使用 make 编译上述代码时、遇到以下错误

Sudha@VCHN172:~/tmc4123/Embedded/led-project$ make
arm-none-eabi-gcc -o build/main.o src/main.c -g -mthumb -mcpu=cortex-M4 -mfp=fpv4-sp-D16 -mfloat-abi=softfp -os -ffunion-sections -fdata-sections -md -std=c99 -Wall -sudpv4-spi_t/dptift/tintratic -dtranit_g3 -dtranit_t/tandtatic -dtranime4pet/tat_gtranit_gm/tdtranime4pet
arm-no-eabi-ld -o build/a.out build/main.o build/startup_gcc.o -T TM4C123GH6PM.ld --entry ResetISR --gc 段
build/main.o:在函数`main'中:
/home/sudha/tmc4123/Embedded/led-project/src/main.c:29:对`GPIOPinRead'的引用未定义
/home/sudha/tmc4123/Embedded/led-project/src/main.c:32:对`GPIOPinWrite'的引用未定义
Makefile:57:目标'build/a.out'的配方失败
制造:***[build/a.out]错误1.

但是、当我使用 ROM_GPIOPinWrite 或 ROM_GPIOPinRead 时、代码会成功编译。

请帮助我使用 GPIOPinWrite/GPIOPinRead 时出现了什么问题、以及如何解决该问题。

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

    您对问题的描述非常出色、您的主题行(此处有许多人错过)非常完美!     (明确识别您的问题-远远优于(经常出现)"inane" TM4xyx:TM4xyz"!)   (论坛设计人员在思考什么-不仅仅是"禁止"?)

    对您的问题-我感到(并分享)您的痛苦。    即使在查看您的代码后、我也无法提供有保证的指导。

    我选中了"GPIO.h"、实际上(个)您的"参考文献"(被称为"未定义")都存在已定义!     因此-您的编译器(似乎)会"找不到和/或(如果找到)拒绝结果!"

    我要注意的是、代码中存在"不一致"。    您的代码以"只调用 ROM 函数"开头-然后(突然)转换为"非 ROM 调用!"     虽然怀疑是"合法"、但它(可能)会使您易受您报告的状况的影响。

    通过快速检查、您可以删除那些早期的"ROM_GPIOPinType()调用"-替换为他们的"非 ROM"双胞胎 (使您的"未定义"调用保持不变)-和测试/报告...

    如果此"修复"失败-请阅读"映射"调用-并将其用于您的所有函数调用。   (一致性是(最常见的)好!

    注意是您的"有史以来第一篇论坛帖子"-欢迎加入-非常出色!

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

    我认为这不是编译错误、而是链接错误。

    [引用 user="Pathi sudharshan"]arm-no-eabi-ld -o build/a.out build/main.o build/startup gcc.o -T TM4C123GH6PM.ld--Entry ResetISR --gc 段
    build/main.o:在函数`main'中:
    /home/sudha/tmc4123/Embedded/led-project/src/main.c:29:对`GPIOPinRead'的引用未定义
    /home/sudha/tmc4123/Embedded/led-project/src/main.c:32:未定义对`GPIOPinWrite'[/quot]的引用

    通常、当错误提到未定义的引用时、它不是指缺少原型、而是指缺少定义。 检查相应的库是否包含在链接中、并在引用该库的任何位置显示。

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "快速检查会发现您删除了那些早期的"ROM_GPIOPinType()调用"-用它们的"非 ROM"双胞胎替换(使您的"未定义"调用保持不变)-和测试/报告..."

    我尝试通过删除函数来删除、这是 ROM 的前缀、这里是代码

    20 int main()
    21{
    22. SysCtlClockSet (SYSCTL_SYSDIV_4|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHz|SYSCTL_OSC_MAIN);
    23 SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
    24 GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、LED_RED_LED_BLED|LED_GREEN);
    25 GPIOPinTypeGPIOInput (GPIO_PORTF_BASE、SW2);
    26
    27. 对于(;;){
    28. //将红色 LED 引脚设置为高电平、其他引脚设置为低电平
    29. if (GPIOPinRead (GPIO_PORTF_BASE、SW2)){
    30 GPIOPinWrite (GPIO_PORTF_BASE、LED_GREEN、LED_GREEN);
    31} 否则{
    32 GPIOPinWrite (GPIO_PORTF_BASE、LED_GREEN、0);
    33}
    34}
    35}
    36.


    但我遇到了同样的问题

    Sudha@VCHN172:~/tmc4123/Embedded/led-project$ make
    arm-none-eabi-gcc -o build/main.o src/main.c -g -mthumb -mcpu=cortex-M4 -mfp=fpv4-sp-D16 -mfloat-abi=softfp -os -ffunion-sections -fdata-sections -md -std=c99 -Wall -sudpv4-spi_t/dptift/tintratic -dtranit_g3 -dtranit_t/tandtatic -dtranime4pet/tat_gtranit_gm/tdtranime4pet
    arm-none-eabi-gcc -o build/startup_gcc.c -g -mthumb -mcpu=cortex-M4 -izzpu=fpv4-sp-D16 -mfloat-abi=std fp -os -ffungcc-SECTIONS -fdata-SECTIONS -md -md -c99 =c99_spi_dspi -dstd /dspetic -dipt/d3c -dspi_dspi -dspi_dspi_dspi_dspi20dspi_dspi_dspi_dspi -dspotive/tdspi_
    arm-no-eabi-ld -o build/a.out build/main.o build/startup_gcc.o -T TM4C123GH6PM.ld --entry ResetISR --gc 段
    build/main.o:在函数`main'中:
    /home/sudha/tmc4123/Embedded/led-project/src/main.c:22:对`SSysCtlClockSet'的引用未定义
    /home/sudha/tmc4123/Embedded/led-project/src/main.c:23:对`SSysCtlPeripheralEnable'的引用未定义
    /home/sudha/tmc4123/Embedded/led-project/src/main.c:24:未定义对`GPIOPinTypeGPIOOutput'的引用
    /home/sudha/tmc4123/Embedded/led-project/src/main.c:25:对`GPIOPinTypeGPIOInput'的引用未定义
    /home/sudha/tmc4123/Embedded/led-project/src/main.c:29:对`GPIOPinRead'的引用未定义
    /home/sudha/tmc4123/Embedded/led-project/src/main.c:32:对`GPIOPinWrite'的引用未定义
    Makefile:57:目标'build/a.out'的配方失败
    制造:***[build/a.out]错误1.


    我已从链接 eehusky.wordpress.com/.../中读取

    Stellaris Launchpad 在 ROM 中预加载了 driverlib 副本、因此在创建程序时、您无需亲自链接 driverlib 副本。 MAP_和 ROM_前 缀旨在提高您为 LaunchPad 编写的应用程序的可移植性。 不同版本的硬件会将不同的 driverlib 子集加载到 ROM 中。

    请帮助我如何将 driverlib 作为编译过程的一部分进行链接。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Robert Adsett、
    driverlib 文件夹中存在 GPIOPinRead 函数。 请帮助我如何将此库与项目链接
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 USER="Pathi sudharshan]GPIOPinRead 函数出现在 driverlib 文件夹中。 请帮助我如何将此库与工程链接由于使用的是 GCC ARM 编译 器、因此需要链接 TivaWare 安装中的 driverlib/gcc/libdriver.a 库。 尝试在 makefile 中的命令中添加以下内容:

    -L /home/sudha/tmc4123/Embedded/tivaware/driverlib/gcc -l 驱动程序 

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

    非常整洁/灵感启发的解决方案切斯特!   您和 Robert 坐(高)在"编译器/连接器"领域的"食品链"上、发表"GCC "。