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.

[参考译文] RTOS/MSP432P401M:未显示错误,但是UART和闪存LED对我的编程不起作用

Guru**** 2587365 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/616914/rtos-msp432p401m-no-error-shows-up-however-uart-and-flash-led-are-not-working-for-my-programe

部件号:MSP432P401M

工具/软件:TI-RTOS

/* XDCtools头文件*/
#include <XDC/runtime
/System.h>
#include <XDC/runtime /Log.h>/*

BIOS头文件*/
#include <ti/SysBIOS/BIOS.h>
#include <ti/GPIO SysBIOS/KNL/Task.h>

/* TI-RTOS头文件/<ti/spi/





<wd/</spi>包含#ti/头 驱动
程序#TI /</</fed/</focm.h>#TI /</</</fu/<///foc>#ti/</<//foc>


"Board.h"

#include <stdint.h>
#include <stddef.h>

char 输入;
const char echoPrompt[]="回音字符:\r\n";
UART_HANDLE UART;


#define TASKSTACKSIZE 512

Task_Struct task0Struct;
Char task0Stack[TASKSTACKSIZE];

/*
=== 心跳BeatFxn =========
*切换Board_LED0。 Task_sleep由arg0确定,arg0
*是为心跳任务实例配置的。
*/
void HeartBeatFxn (UArg arg0,UArg arg1)
{
而(1){
TASK_SLEEP ((UINT) arg0);
GPIO切换(Board_LED0);
UART_READ (UART,输入和1);
UART_WRITE (UART,输入和1);
}
}/*


==== 主====
*/
int main (void)
{
task_Params taskParams;
UART_Params uartParams;

/*呼叫板初始化函数*/
Board_initGeneral ();
Board_initGPIO ();
// Board_initI2I2();
// Board_initSDSPI();
// Board_initSPI();
Board_initUART();
// Board_initWatchdog ();
// Board_initWiFi();

/*构造心跳任务线程*/
task_params_init(&taskParams);
taskParams.arg0 = 1000;
taskParams.STACKSIZE = TASKSTACKSIZE;
taskParams.stack =&task0Stack;
task_construct (&task0Struct,(Task_FuncPtr)中心BeatFxn,&taskParams,NULL);

UART_PARAM_INIT (&uartParams);
uartParams.writeDataMode = UART_DATA_binary;
uartParams.readDataMode = UART_DATA_binary;
uartParams.readReturnMode = UART_RETURE_FULL;
uartParams.readEcho = UART_ECHO_OFF;
uartParams.baudrate = 11.52万;

UART = UART_OPEN (Board_UART0,&uartParams);

/*打开用户LED */
GPIO写入(Board_LED0,Board_LED_ON);

IF (UART ==空){
/* UART_OPEN ()失败*/
同时(1);}

UART_WRITE (UART,echoPrompt,sizeof (echoPrompt));


system_printf ("启动示例\n系统提供程序设置为SYSMIN。 "
"停止目标以查看ROV中的任何SYSMIN内容。\n");
/*只有在调用flush或exit */时,SYSMIN才会打印到控制台
system_flush();

/*启动BIOS */
BIOS_START();

返回(0);
} 

附件是我的文件。 我的代码有什么问题吗?e2e.ti.com/.../LED_5F00_UART.zip

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

    Ben_cy,

    您编写代码的方式有一些问题。 首先,您需要将UART代码包含在某种线程中。 您编辑并放置UART代码的文件基本上是RTOS的启动代码。 一旦执行BIOS_START();,RTOS将运行您分配给它运行的任何线程。 这是你在main()函数中设置的内容。

    int main (void)
    {
    pthread_t 螺纹;
    pthread_attr_t. 特拉;
    结构sched_param priParam;
    内部 Retc;
    内部 分遣国;
    
    /*调用驱动程序初始化函数*/
    Board_initGeneral ();
    
    /*设置优先级和堆栈大小属性*/
    pthread_attr_init(&atts);
    priParam.sched_priority = 1;
    
    detachState = pthread_create_detach;
    retc = pthread_attr_setdetachstate(&atts, detachstate);
    如果(retc !=0){
    /* pthread_attr_setdetachstate()失败*/
    同时(1);}
    
    
    pthread_attr_setschedparam(&atts,&priParam);
    
    retc |= pthread_attr_setstacksize(&atts, THREADSTACKSIZE);
    如果(retc !=0){
    /* pthread_attr_setstacksize()失败*/
    同时(1);}
    
    
    retc = pthread_create(&thread,&atts, uartThread, NULL);
    如果(retc !=0){
    /* pthread_create()失败*/
    同时(1);}
    
    
    BIOS_START();
    
    返回(0);
    }
    


    uartThread,将会产生以下影响:

    void *uartThread(void *arg0)
    {
    字符 输入;
    const char echoPrompt[]="回声字符:\r\n";
    UART_HANDLE UART;
    UART_Params uartParams;
    
    /*调用驱动程序初始化函数*/
    GPIO初始化();
    UART_INIT();
    
    /*打开用户LED */
    GPIO写入(Board_GPIO _LED0,Board_GPIO _LED_ON);
    
    /*创建数据处理关闭的UART。 */
    UART_PARAM_INIT (&uartParams);
    uartParams.writeDataMode = UART_DATA_binary;
    uartParams.readDataMode = UART_DATA_binary;
    uartParams.readReturnMode = UART_RETURE_FULL;
    uartParams.readEcho = UART_ECHO_OFF;
    uartParams.baudrate = 11.52万;
    
    UART = UART_OPEN (Board_UART0,&uartParams);
    
    IF (UART ==空){
    /* UART_OPEN ()失败*/
    同时(1);}
    
    
    UART_WRITE (UART,echoPrompt,sizeof (echoPrompt));
    
    /*循环永久回声*/
    而(1){
    UART_READ (UART,输入和1);
    UART_WRITE (UART,输入和1);
    }
    }
    

    例如,您可以创建另一个线程来处理LED的闪烁。 我建议您在SimpleLink Academy上阅读有关多线程RTOS程序和RTOS概念的一般信息。 请参阅以下链接:

    多线程RTOS:

    RTOS概念: dev.ti.com/.../

    TI-RTOS基础知识也是一个很好的起点: dev.ti.com/.../

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复,我没有使用pthread函数,我使用的是TI-RTOS内核,它有一个cfg文件而不是main_tirtos.c,这就是为什么我在main中创建一个任务。这真的让我在阅读SimpleLink Academy之前开始时感到困惑
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Ben_cy,

    我们可否认为这问题已获解决? 很高兴SimpleLink Academy帮助了我们! :)