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/MSP432P401R:尝试获得TI RTOS的工作

Guru**** 2609285 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/656490/rtos-msp432p401r-trying-to-get-ti-rtos-work

部件号:MSP432P401R

工具/软件:TI-RTOS

大家好,

我是一名学生,正在尝试接触MSP432P401R启动板和一个简单的机箱,其中包括两个步进电机,两个霍尔传感器和一个小型操纵杆。

我想启动一些简单的线程:

-主LED闪烁

-adcThread -开始两个线程,以x和y为格式读取操纵杆的模拟值

-pwmTread -通过PWM控制电机速度

-hallTreread-对hallsensor数据输入进行计数,以了解输入的速度和距离

到目前为止,代码正在编译,所有内容似乎都在正常工作,但它被卡在某处,并且永远不会显示输出。 我尝试了具有不同优先级的不同配置,但没有任何效果。 PWM输出,adcTread和hallsensor线程从不启动。

我以为我把一切都做的很好,但我认为在TI-RTOS的实施中有一个简单的错误。 我对该主题不熟悉,我希望有人能帮助我,并向正确的方向推动我,让代码运行起来。

下面是指向我的Gitlab存储库的链接:

gitlab.com/cfritz182/TI_RTOS

提前感谢您的帮助,帮助您开始使用TI-RTOS。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    基督教,
    感谢您发布代码。 我将在星期四看一下,然后再与你们讨论。 您是否也尝试过其他示例或遇到过任何问题? 您添加线程的过程是什么?它何时停止运行?

    谢谢!
    Chris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我从名为恒温器的TI示例开始。在那里我将ADC读数更改为操纵杆。然后我将PWM输出更改为用于控制电机的端口。 这样看来,我就不工作了。 也许我在board.h文件或MSP432.h或.c文件中犯了错误。 我不确定。 我认为正常的过程就是初始化Msp432...c文件以及board.h和msp432....h中的PIN,以更改为正确的PIN和结构,依此类推。 还是不是?

    我认为这更像是一种初始化问题,而不是一个非常困难的调度任务。

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

    (1) 在main_tirtos.c文件中,创建4个具有相同属性的线程。 但是,您为每个创建了单独的属性,并且只有第一个属性是分离线程。 其他3个已初始化,但未配置为分离线程。 我在代码中找不到您加入这些线程的位置。 如果您不打算使用线程,我建议您保持线程分离,为了简单起见,您可以重复使用atts指针来创建所有线程。
    (2) mainThread与其他线程具有相同的优先级,但从不停止(休眠,pends等)。
    (3) GPIO _INIT()在PWM.c,hall.c和gpiomain.c中调用
    (4) 与mainThread类似,pwmThread不会停止。 如果它是最高优先级的任务,它将永远运行。
    (5) 在adcThread中创建的两个线程与mainThread具有相同的问题。

    我鼓励大家回顾一下SimpleLink Academy中的示例。 具体而言,请查看RTOS如何在不同线程之间移动。 在多线程RTOS自动调温器(dev.ti.com/.../ )中,注意每个线程都有一个usleep() API,允许执行其他线程。 或者,您可以根据信号量(参见以下示例: dev.ti.com/.../ )来待装(SEM_WAY_)操作。

    此致,
    Chris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢,
    这些是我对termostat示例有理解问题的要点。 现在,情况变得非常清楚,我总是认为调度程序从一个线程跳到另一个线程,如果它们都是相同的优先级。 所以我将把sleep命令添加到任务中。 我们的想法是创建永不停止的线程(当然,它们必须进入睡眠状态,并让其他线程运行)。

    所以我会回到代码,试着在周末解决我的问题。