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/MSP430F2418:printf 问题已重定向至 UART#1。

Guru**** 2519780 points
Other Parts Discussed in Thread: MSP430F2418

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/968929/ccs-msp430f2418-problems-with-printf-redirected-to-uart-1

器件型号:MSP430F2418

工具/软件:Code Composer Studio

我正在使用 CCS9.30和 MSP430F2418、在将 printf()重定向到 UART#1时遇到问题。

我以前做过其他一些具有相同微控制器的项目、没有遇到任何问题、但现在似乎我错过了一些东西。

我定义了两个函数(见下面)、添加了#include ,增加堆栈(到160)和堆(到320)大小。

但当我调用 printf()函数时,执行点会跳转到 main()的开头,而不会丢失与 micro (!)的连接。 因此、它看起来不像 由于堆栈或堆的覆盖而重新启动的微控制器。

如果我单步进入 printf()-我要点击__TI_file_lock (stdout)函数,然后它跳转到 main(),请参见屏幕截图。

我忘记了什么、或者我做了什么错误?

int fputc (int _c、寄存器文件*_FP)
{
while




(UC1IFG&UCA1TXIFG);UCA1TXBUF =(unsigned char _c;return (unsigned char)_c);int fputs (const char *_ptr、register file *_fp)
{


i、unsigned i、tr = 0;unsigned <len ;  int flen (t = t);t = t = t = t (t);t = t = t = t = len (t i++)
{
while (!(UC1IFG&UCA1TXIFG));
UCA1TXBUF =(无符号字符)_PTR[i];
}
返回 len;
} 

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

    我不知道发生了什么。  但我可以给一些光亮。

    _TI_file_lock 是一个宏。  它在 printf.c 中已经存在了很长时间。  任何错误都可能在该点之前很久发生。

    宏被通过名为_lock 的函数指针进行的调用所取代。  请在 MSP430编译器手册中搜索 标题 为处理可重入性(_register_lock()和_register_unlock ()函数)的子章节。  您的代码、或者您使用的运行时执行程序、是否调用 register_lock 来注册通过函数指针_lock 调用的函数?  如果不是、则 _lock 指向不执行任何操作的存根函数、这意味 着_TI_file_lock 不执行任何操作。  如果是、则需要研究通过_lock 间接调用的函数

    很抱歉、这不是对发生的情况的完整解释。  但我认为这将为您指明一个良好的方向。  请告诉我您接下来会发现什么。

    谢谢、此致、

    乔治

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

    我记得  、如果_lock 中的函数指针被覆盖、则调用_TI_file_lock 时会崩溃。 例如、由于堆栈空间不足。