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/TM4C123GE6PM:无法使用 printf 函数在 CIO 控制台中输出字符串、从而进入 FaultISR 无限循环。

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/875178/ccs-tm4c123ge6pm-unable-to-output-strings-in-the-cio-console-using-printf-function-entering-faultisr-infinite-loop

器件型号:TM4C123GE6PM

工具/软件:Code Composer Studio

大家好、

我是嵌入式系统领域的绝对初学者。 我遇到了一个看似简单的问题、即  printf 函数不会触发 CIO 控制台窗口。 我在 MacOS 上使用 CCS v.9.3.0。 我已经尝试运行  hello  和  UART_echo 等示例项目 、但这些项目在 CIO 控制台中打印出字符串输出时没有成功。 实际上、CIO 控制台甚至没有出现。

我遵循了故障排除指南、例如配置堆大小、启用 CIO 功能、并转至 http://software-dl.ti.com/ccs/esd/documents/sdto_cgt_tips_for_using_printf.html 上提供的指令。  

在 使用 printf 的提示 页面上、我成功地在   CIO 控制台中使用 puts ("Hello World")打印了一个字符串"Hello、world"。 但是,当使用  printf 时,程序似乎  每次都进入无限 FaultIRs()循环。 此外 、由于    我无法完全了解在何处进行建议的修改、我在 C I/O 通信缓冲器放置和特殊断点部分遇到困难。 我想它与设置断点有关、但我不知道确切的执行位置。

我遇到的另一个不一致之处是、当我将  函数和  printf 函数放在一起时。 例如

PUs ("Hello、World");

printf ("Hello、World");

在本例中、printf 函数确实在 CIO 控制台中打印出"Hello、world"字符串。 但是、如果我将上述代码的顺序重新排列

printf ("Hello、World");

puts ("Hello、World"); 

这不奏效。

这是链接器文件的屏幕截图。

如果有人能提供帮助、我将不胜感激。 我已经为这个问题滞留了几天了。

Boris

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

    [引用 user="Sitthichat Sukpholtham"]我尝试运行  hello  和  UART_echo 等示例项目 ,但这些项目在 CIO 控制台中打印字符串输出时未成功。 实际上、CIO 控制台甚至没有显示出来。

    TivaWare 中的 hello 和 UART_echo 示例被写入以打印到 UART (使用 UARTprintf)、而不是 CCS 中的控制台视图。 对于这些示例、如果您打开连接到虚拟串行端口的终端(例如 Teraterm 或 CCS 中的"Terminal"视图)、则应该能够在那里查看输出。

    将 printf 添加到代码中应将其输出到 CCS 控制台。

    我通过执行以下操作修改了闪烁示例、并能够在控制台中看到"Hello World"打印:

    -在 blinky.c 中:添加了#include 并在 while 循环之前添加了 printf (Hello World\n")
    -在链接器选项中,将堆大小设置为1024

    在大多数情况下、增加堆和堆栈大小可以解决 printf 不起作用的问题。 尝试将堆大小增加到至少1024、看看这是否有用。

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

    您好!

    我打开了终端、能够看到打印出来的字符串。 谢谢!

    但是、当尝试使用 printf  输出字符串时、它仍然不起作用。 我使用的代码就像一样简单

    #include 
    
    int main (void){
    printf ("Hello、World");
    } 

    我将堆大小增加到1024、但 CIO 控制台仍然没有显示。 运行时、该软件只打印出内容、而是保持运行。 我暂停了调试器。 然后、我发现每次我暂停调试器时、它都会进入 FaultIRS 循环。 循环位于 startup_ccs.c 文件中。  

    //这是处理器收到故障
    时调用的代码//中断。 这只是进入一个无限循环、保持系统状态
    //供调试器检查。
    ////
    *****************
    静态空
    FaultISR (空)
    {
    //
    //输入无限循环。
    //
    while (1)
    {
    }
    } 

    再说一次、在我最了解的情况下、我认为它与设置断点有关吗?

    再次提前感谢您的善意帮助

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

    您是否正在使用 TivaC Launchpad?  

    我正在附加一个在 TivaC Launchpad 上运行的项目的 zip 文件、并确认 Hello World 已打印到 CCS 控制台。  

    将随附的 zip 文件解压缩、将工程导入 CCS、然后尝试按原样运行可执行文件。 为此、您可以手动启动调试器、连接到目标并加载程序(有关手动启动调试器的详细信息 、请单击此处)。  

    验证此操作是否正常后、您可以尝试在系统上重建项目、然后运行该项目。

    希望这有助于使事情在您的端工作

    e2e.ti.com/.../8738.blinky.zip