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.

[参考译文] CCS/EK-TM4C129EXL:UART6编译错误

Guru**** 2482105 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/704976/ccs-ek-tm4c129exl-uart6-compilation-error

器件型号:EK-TM4C129EXL

工具/软件:Code Composer Studio

您好!

我正在使用 ccs8调试代码、以使用 UART 协议(UART6)从传感器接收数据

没有编译错误、但当我尝试执行程序时、它会指示 exit.c

如何解决此错误。

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

    其中一个原因(我遇到的最大原因)是访问外设而未启用外设。

    例如,由于拼写错误,您访问 portN (也就是说未启用),但实际上您打算访问 portF (已启用)。

    仔细检查代码中是否存在此类拼写错误。


    希望这对您有所帮助。

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

    [引用 user="Rahul Iyer"]没有编译错误,但当我尝试执行程序时,它会指示 exit.c[/quot]

    该文件名"exit.c"超出了我的"10多年-文件名识别"和"未找到"、通过我的 Windows 搜索"所有"TM4C 文件。

    正如另一张海报所建议的-但并未详述-"长期存在""FAULT_ISR"是否 已(现在)"数字化?"   (深入到"解释性较差/有用性较低"的地方... "exit.c?")

    与大多数此类错误一样、您的错误最好通过您的 代码库演示来解决。    (理想情况下仅限于您的 UART 设置和函数调用。)

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

    exit.c 文件是 Code Composer Studio ARM 编译器的一部分、因此您以前没有遇到过它。 它甚至不是 FaultISR。 这种情况很少发生、但有时会出现问题、导致编译器到达那里。

    您好 Rahul、

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

    谢谢你、Ralph -我不会(在这里有任何)得到这种认可。   客户和投资者要求我们(可能)提供所有 ARM MCU -不仅仅是(任何) -(因此非常有限)的选择。

    因此、我们对任何"单个供应商"解决方案没有兴趣或意识。    (怎么可能... 这样的自我限制是否会很好?)

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

    您好、Ralph、

    我正在尝试从 NEO 6m GPS 模块读取数据、并在虚拟 COM 端口上显示相同的数据

    我修改了 UART_ECHO 代码以接收 UART6上的数据并通过 UART0将其发送到终端

    代码为:

    #include

    #include

    #include "inc/hw_ints.h"

    #include "inc/hw_memmap.h"

    #include "driverlib/debug.h"

    #include "driverlib/fpu.h"

    #include "driverlib/gpio.h"

    #include "driverlib/interrupt.h"

    #include "driverlib/pin_map.h"

    #include "driverlib/rom.h"

    #include "driverlib/sysctl.h"

    #include "driverlib/uart.h"

    #include "stdio.h"

    #ifdef 调试

    无效

    _error__(char * pcFilename、uint32_t ui32Line)

    #endif

    // UART4上中断的处理函数

    //配置在 startup_ccs.c 文件中完成

    // startup_ccs.c 中的矢量表定义为

    /*...*/

    /* UART4IntHandler、                       // UART4 Rx 和 Tx *

    /*...*/

    无效

    UART4IntHandler (空)

        //清除 UART4上的中断

        uint32_t ui32Status;

        ui32Status = ROM_UARTIntStatus (UART4_base、true);

        ROM_UARTIntClear (UART4_base、ui32Status);

        //在读取开始时打开 LED

        GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_2、GPIO_PIN_2);

        while (ROM_UARTCharsAvail (UART4_base))

        {

            //将 GPS 数据(从 UART4读取)写入 UART0

            ROM_UARTCharPutNonBlocking (UART0_BASE、ROM_UARTCharGetNonBlocking (UART4_base));

        }

        //在读取结束时关闭 LED

        GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_2、0);

    内部

    main (空)

        //为中断处理程序启用怠惰堆栈。

        ROM_FPUEnable();

        ROM_FPULazyStackingEnable();

        //将时钟设置为直接从晶体运行。

        ROM_SysCtlClockSet (SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |

                           SYSCTL_XTAL_16MHz);

        //启用使用的外设:

        //端口 C 引脚将用作 UART4

        ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART4);

        ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOC);

        //端口 F 将用于板载 LED

        ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);

        //端口 A 引脚将用作 UART0 (虚拟串行连接调试)

        ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART0);

        ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);

        //启用处理器中断。

        ROM_IntMasterEnable();

        //将 PC4设置为 UART4 RX

        GPIOPinConfigure (GPIO_PC4_U4RX);

        ROM_GPIOPinTypeUART (GPIO_PORTC_BASE、GPIO_PIN_4);

        //将 GPIO A1设置为 UART0 Tx (发送)

        GPIOPinConfigure (GPIO_PA1_U0TX);

        ROM_GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_1);

        //将 UART0配置为115、200、8-N-1操作。

        //这是 TM4C 和 PC 之间的串行连接

        ROM_UARTConfigSetExpClk (UART0_BASE、ROM_SysCtlClockGet ()、115200、

                                (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |

                                 UART_CONFIG_PAR_NONE));

        //将 UART0配置为115、200、8-N-1操作。

        //这是 TM4C 和 PC 之间的串行连接

        ROM_GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_2);

        //将 UART 配置为9600、8-N-1操作。 GPS 模块提供9600 bps 的数据

        //这是 GPS 模块(U-blox NEO6M)之间的连接

        ROM_UARTConfigSetExpClk (UART4_base、ROM_SysCtlClockGet ()、9600、

                                (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |

                                 UART_CONFIG_PAR_NONE));

        //启用 UART4中断。 因此不需要其他中断

        //我们不希望 PC 中有任何内容,它用于显示 GPS 数据

        ROM_IntEnable (INT_UART4);

        ROM_UARTIntEnable (UART4_base、UART_INT_RX | UART_INT_RT);

        while (1)

        {

        }

    在编译程序时、我会遇到以下错误  

    说明资源路径位置类型

    • #10010 null:链接期间遇到错误;"UART_ECHOS.OUT"未构建 UART_ECHO C/C++问题

    "="">processors.wiki.ti.com/.../10234">

    • #10234-D null:未解析的符号仍然是 UART_echo C/C++问题
    • gmake:***[UART_ECHOS.OUT]错误1 UART_ECHO C/C++问题
    • gmake:目标"全部"不会由于错误而重新生成。 UART_echo C/C++问题
    • 未解析的符号 UARTIntHandler、首先在./startup_ccs.obj UART_echo C/C++ problem 中引用

    我已将 STARTUP_CCS.c 中 UART6的默认中断处理程序更改为 UART6Handler 函数

    请帮助我解决这些错误

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

    您好 Rahul、

    检查您的 ISR 名称、并确保在 startup_ccs.c 文件中像这样正确定义它。

    extern void UARTIntHandler (void); 

    如果未使用 extern 标签、则 UART_ECHO.c 文件将无法正确看到它。

    您谈到了将中断处理程序更改为 UART6Handler、因此请确保您具有如下内容:

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

    我是否替换 extern void UARTIntHandler (void)
    如所示
    extern void UART6Handler (void)
    或者只需将后者添加到文件中
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Rahul、

    对于要在主代码文件中访问的每个 ISR、您需要一个 extern void 语句。 因此、如果同时使用 UARTIntHandler 和 UART6Handler、则两者都需要外部处理。 如果您将主代码文件中的 UARTIntHandler 替换为 UART6Handler、则可以在 startup_ccs.c 文件中进行相同的替换。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好

    感谢您对代码编译无错误的所有帮助
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好

    在执行程序时、虚拟 COM 端口按如下方式读取数据

    $GNRMC、041342.755、V、、、、、、、 060718、、、M*5F

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

    检查 TM4C 代码、UART 终端和 COM 端口的波特率是否均已对齐。 这看起来就像您设置了错误的波特率、因此终端无法正确读取数据、因此输出乱码时发生的情况。 您可能在 TM4C 上使用9600或115200、因此请查找 UART 配置功能、确定波特率并在接收端(您的 PC 和终端软件)正确设置波特率。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ralph、

    在接收端、即 UART6、波特率设置为9600、因为 neo 6m 以9600位速率发送数据

    UART0和 COM 端口设置为115200

    还有一些东西是空的

    如何解决此问题

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

    您能否为此问题制作新主题? 它不再是编译错误、因此它不适合该线程。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好

    在同一代码中、如何将传入的数据(来自 UART6)存储在变量中、而不是回显数据