通过 MSP430 Launchpad 和 CCStudio 使用终端 return "hello world"

Using the terminal to return "hello world" with MSP430 Launchpad and CCStudio

我正在尝试 运行“Hello world”,这是最简单和最基本的代码,在 MSP430 Launchpad 上(具体来说,the MSP430FR5994 Launchpad)。我想 运行 并将其显示在 CCStudio 控制台或其他屏幕上。但是,我找不到有关 运行 为 Launchpad 使用“hello world”并将其打印在计算机屏幕上的任何信息。

这感觉应该很简单,但是我似乎找不到任何解释。

当前代码,包括使灯闪烁:

#include <msp430.h>
#include <stdio.h>

int main(void) {
    WDTCTL = WDTPW | WDTHOLD;// Stop watchdog timer
    P1OUT &= ~BIT0;    // Meant to clear P1
    P1DIR = 0b00000010;     // Set P1.0 to output direction, p.131

    unsigned int i;   //Delay variable
    PM5CTL0 &= ~LOCKLPM5; //The datasheet told me to include it. Haven't found out why the datasheet asked me to do this.

    printf("Not C programming again!\n");

    while(1)
    {
        for(i=0;i<20000;i++){
        }

        P1OUT = 0x02;    //Turn on Port 1.1
        for(i=0;i<20000;i++){
        }

        P1OUT = 0x01;   //Turn on Port 1.0
    }
    return 0;
}

我尝试这样做是为了让自己熟悉电路板并获得更简单的调试方法。我最终想创建一个低频三角波,并将两个模拟输入与比较器进行比较,然后在计算机屏幕上显示该比较器信息。不知道这有什么帮助,但最好让您知道。

如果这个问题需要更多解释,请告诉我。如果这个问题变得简单得令人难以置信,我深表歉意,我花了几个小时寻找解释,但只找到了闪烁的灯。

我发现了为什么我的终端没有显示文本。这是动态内存分配的问题,没有足够的内存分配给 printf 成功 运行。事实证明 printf 的计算成本比我预期的要高。

为了处理分配问题,堆大小(在 page 155 of the MSP C Compiler Manual 中解释)需要增加到 320。这可以通过(我使用的是 CCStudio 11.1)打开您的项目或项目中的文件,转到项目(在顶部栏上),打开属性,然后打开 Build/MSP430 Linker/Basic 选项。

使用 Project 中的属性而不是 File 中的属性非常重要,因为 File 中的属性不包含链接器。

如果有效,打印的文本应该会从 CIO 终端输出。

声明:

"the most simple and basic code there"

是真的低估了printf()的复杂性。

首先,您必须定义与标准输出相关联的输出设备。在调试控制台输出,需要在项目调试属性中开启CIO(貌似...我只是Googling this stuff

然而,以这种方式输出仅在调试中有用,因为您需要 CCSTUDIO 调试器 运行 查看输出。

关于您的最终目标:

"displaying that comparator information on a computer screen."

... 为此,您需要实现支持 stdio 流所需的低级别 I/O。例如,您可以将 stdio 映射到 Launchpad 的“Application/Backchannel UART”(Launchpad manual 的第 2.2.4 节),这是一个 MSP430 UART1/USB 桥。然后,您可以在 PC 上使用 TeraTerm 或 PuTTY 等终端仿真器与开发板进行交互。这样做的好处是可以通过 Launchpad 的 USB 连接在您的主机上显示为虚拟串行端口。

要了解如何创建合适的设备驱动程序并将 stdio 从调试器重定向到应用程序 UART,请参阅 Compiler reference manual 的第 7.2.4 节以及关于所需设备驱动程序接口的前面部分。

您可能选择不考虑将应用程序 UART 与 stdio 集成的复杂性(尽管我很难相信有人还没有完成这项工作),而只是直接 read/write 到 UART。您还可以绕过标准库的 stdio 实现并实现您自己的简化格式 I/O。例如 this TinyPrint 实现,其中 tfp_printf() 工作你只需要实现一个单一的 putc() 函数来将一个字符写入你选择的任何输出设备(在本例中为 UART1)。

请注意,应用程序 UART 用于 Launchpad 的 Out-of-Box 演示以与主机上的 GUI 界面进行通信。如果您具备必要的 PC GUI 和串行 I/O 开发技能,您最终可以做类似的事情,这可能比简单的终端 I/O 更具吸引力。该演示的源代码(嵌入式 here)。