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/EK-TM4C1294XL:RTOS 示例 VS 正常示例

Guru**** 2601915 points
Other Parts Discussed in Thread: EK-TM4C1294XL

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/743232/rtos-ek-tm4c1294xl-rtos-example-vs-normal-example

器件型号:EK-TM4C1294XL

工具/软件:TI-RTOS

你(们)好

我正在尝试 EK-TM4C1294XL 上的一些示例(实验练习)。

我尝试了 CLP_Workbook.pdf 上的标准示例、也尝试了同一电路板上的 RTOS 示例。 我遵循了分步实验说明、它按照实验手册中的说明工作、非常好。

我想使用提供的标准示例并将其添加到 RTOS 中;即 、我从 RTOS 项目开始、然后根据需要导入/修改 USB 批量示例、并将其与 RTOS 模板一起使用。

是否可以将这两个示例混用(在进行必要的修改之后)?

USB 示例使用 Tx 和 Rx ISR 例程,我不知道它们是什么,因此我知道优先级分配是 RTOS 中的一项基本功能,如何为它们分配优先级。

在过去、我尝试过使用 RTOS 模板的触摸屏控件示例。 项目已成功编译、但未发生任何情况。 我相信 LCD 触摸屏控件使用中断(我不知道是哪一个),而 RTOS 不知道这种中断。

顺便说一下、RTOS 示例涉及打开/关闭 LED、这很好、很容易学习 RTOS、但接下来的步骤是仅调用一个 LED。

有人能不能在这上面放点光?

 

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

    我建议首先使用 TI-RTOS for Tiva-C 封装随附的示例。 您可以在[Install Path]\tirtos_tivac_2_16_01_14\tirtos_tivac_2_16_01_14_examples\TI\EK_TM4C1294XL 中找到它们

    这些实验只是让您开始、它们并不涵盖所有提供的示例。

    我没有看到批量示例、但我建议从 usbserialdevice 示例开始、熟悉该示例、然后通过查看我们的 TivaWare USB_DEV_BULK 示例如何实现批量功能来添加批量功能。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好
    感谢您一如既往地提供快速回复。 )
    我完成了您提到的两项任务。 我刚才在播放 USB 批量示例(固件端和 PC 端)。 我想 …TI RTOS、而不是只打开/关闭 LED、而是使用 USB、ADC Δ Σ 等其他应用
    正如我之前所说的、我自己尝试了 Widget、它确实起作用(在示例中)、但当我将示例与 RTOS 一起使用时、它编译成功、但没有发生任何情况(屏幕空白、触摸屏幕时不响应)。

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

    由于术语的原因、我有点不清楚。 您是指 USB_DEV_BULK TivaWare 示例吗? 如果是、您是如何尝试移植到 TI-RTOS 的? 您将哪个 TI-RTOS 示例项目用作移植的基础?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好
    控件是 LCD 屏幕上的形状或形状、当您触摸它们时、它们将执行某些操作。
    我尝试的小工具示例是、当您在屏幕上打开或关闭板上的 LED 用户时。 当我尝试该示例时、它确实起作用、但当我将其导入到 RTOS 时、它不起作用
    在 USB_bulk_example 中、我只尝试了标准示例。 我还没有尝试过 RTOS。 这就是为什么我在去之前提出这个问题
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Rab、

    那么、您是否使用了 DK-TM4C129X? 您的 E2E 帖子标题具有 EK-TM4C1294XL LaunchPad、但没有内置 LCD。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好
    我正在使用 EK-TM4C1294XL。 LCD 是一个附加组件。 它也可与其他开发板配合使用。 提供的示例适用于同一电路板。
    我的意思是、在 Code Composer Studio 提供的 RTOS 模板中、 编程器必须定义中断服务例程并定义其优先级、但对于导入示例、例如我在输入它们之前提到过的、它们自带了中断服务例程、并且您不知道中断的类型(硬件、软件、空闲...)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Rab:

    您正在使用哪个 RTOS 和版本。

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

    我使用的是 TI RTOS (tirtos_tivac_2_16_01_14)。 我尝试遵循" TI-RTOS 内核技术讲座实验室手册简介、版本4.00–2015年5月"。
    对于 Tiva C 系列非 RTOS 示例,我将使用 TivaWare_C_Series-2.1.4.178,并按照学员指南和实验手册《使用连接 TivaRegisteredC Series 的 LaunchPad 创建物联网解决方案》中的实验进行操作。 我使用的开发板是 EK-TM$C1294XL。

    Code Composer Studio 7.4.0版
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    本教程中使用的 RTOS 示例使用打开/关闭 LED 来使事情变得不容易理解、因为作者专注于展示 RTOS 本身的概念。 我想看一个来自现实应用的示例、例如使用 USB 或使用 RTOS 应用的 LCD 屏幕。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Rab Boud、您好!

    我的理解是、您希望将非 RTOS 示例移植到 TI-RTOS。

    限制因素是您之前提到的中断服务例程(ISR)。 RTOS 不知道 ISR、因此会导致未定义的行为。

    您将需要修改非 RTOS 示例并找到修改 NVIC 或插入 ISR 函数的任何代码。

    然后、您需要使用 硬件中断(Hwi)管理器代理 来创建支持 RTOS 的 ISR。

    下面我提供了一个您可能期望的伪代码示例:

    #include 
    
    void someFxn()
    {
    Hwi_Params HwiParams;
    hwi_handle hwiHandle;
    
    Hwi_Params_init (hwiParams);
    hwiParams.priority = USB_INT_priority;
    hwiParams.arg = somearg;
    
    hwiHandle = Hwi_create (USB_INT_number、
    usbInterruptServiceRoutine、
    hwiParams (&H)、
    null);
    
    if (hwiHandle ==空)
    {
    /*发生错误! */
    }
    }
    
    void usbInterruptServiceRoutine (UArg someArg)
    {
    /* ISR 代码在此处*/
    } 

    此致、
    Derrick

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Derrick、
    很抱歉、我错误地按下了"This resolve my issue"按钮。
    是的、你在头上按了指甲。 这正是我想知道的时候。

    "您将需要修改非 RTOS 示例并查找修改 NVIC 或插入 ISR 函数的任何代码。" :您是说在非 RTOS 源代码中找到 ISR 的代码吗?

    "然后、您需要利用硬件中断(Hwi)管理器代理来创建支持 RTOS 的 ISR。" :我没有得到这个。
    在 CCS IDE 上、有基于文本的 RTOS 配置工具可为 TI RTOS 配置.cfg、并且有一种" manager "(当您使用 XGCONF 打开.cfg 文件时)。 我只知道这02个工具可让您配置 RTOS 应用程序、例如添加和配置 SWI、HWI ...

    一个

    hwiHandle = Hwi_create (USB_INT_number、
    usbInterruptServiceRoutine、
    hwiParams (&H)、
    null);
    我采取了同样的方法、让 RTOS 知道 ISR 在哪里;我在非 RTOS 示例中找到 ISR 代码、然后我使用上面的代码指向此 ISR。
    我没有尝试 USB 示例、而是 LCD 示例。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Rab Boud:

    [引用 user="RAB boud"]您是指在非 RTOS 源代码中找到 ISR 代码吗?

    是的、没错。

    [引用 user="RAB boud"]我没有得到这一点。
    在 CCS IDE 上、有基于文本的 RTOS 配置工具可为 TI RTOS 配置.cfg、并且有一种" manager "(当您使用 XGCONF 打开.cfg 文件时)。 我只知道这02个工具可让您配置 RTOS 应用程序、例如添加和配置 SWI、HWI...[/quot]

    你在这里的赛道上。 您需要确保*。cfg 文件包含以下内容、以便在应用程序中使用 Hwi.h。 被阻止的代码使用多个选项进行注释。

    /*========================= Hwi 配置=================== //
    var halHwi = xdc.useModule('ti.sysbios.hal.Hwi');
    var m3Hwi = xdc.useModule('ti.sysbios.family.arm.m3.Hwi');
    //
    *在空闲循环中检查 Hwi (系统)堆栈溢出。
    *
    *选择一个:
    *- true (默认值)
    * 检查系统堆栈在空闲循环期间溢出的顶字和
    * 如果检测到错误、则会引发错误。
    *- false
    * 禁用运行时检查可提高运行时性能并产生
    * 减小了闪存尺寸。
    //
    //halHwi.checkStackFlag = true;
    halHwi.checkStackFlag = false;
    
    //
    *当
    检测到硬件异常时,以下选项会改变系统的行为*。
    *
    *选择一个:
    *- Hwi.enableException = true
    * 此选项会使默认的 m3Hwi.excHandlerFunc 函数完全
    * 解码异常并将寄存器转储到系统控制台。
    * 此选项会在错误模块中引发错误并显示
    * ROV 中出现异常。
    *- Hwi.enableException = false
    * 此选项通过不解码或打印
    *来减少代码占用 系统控制台异常。
    * 但是、它仍会在错误模块中引发错误、并显示
    * ROV 中出现异常。
    *- Hwi.exHandlerFunc =空
    * 这是节省代码空间的最积极的选择;但
    它* 很难调试异常。 它将闪存空间减小
    了* 发生异常时插入默认 while (1)陷阱。 此选项
    * 不会导致错误模块出错。
    //m3Hwi.enableException
    = true;
    //m3Hwi.enableException = false;
    m3Hwi.excHandlerFunc =空;
    
    //
    *在除以零时启用硬件异常生成。
    *
    *选择一个:
    *- 0 (默认值)
    * 在除以0
    *- 1
    *时禁用硬件异常 在除以0时启用硬件异常
    */
    m3Hwi.nvicCCR.DIV_0_TRP = 0;
    //m3Hwi.nvicCCR.DIV_0_TRP = 1; 

    [引用 user="RAB boud"]我采取了相同的方法,让 RTOS 知道 ISR 在哪里;我在非 RTOS 示例中找到了 ISR 代码,然后我使用上面的代码指向此 ISR。

    这是正确的做法。 但是、你还必须确保在中初始化 ISR 的非 RTOS 示例中的任何代码被删除、因为这将与 Hwi 管理器发生冲突。

    此致、
    Derrick

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

    "但是,您还必须确保在中初始化 ISR 的非 RTOS 示例中的任何代码都被删除"
    但愿如此简单。 我不记得我的头部顶部、但当我尝试 LCD 示例时、更有趣的是小组件示例、在该示例中、您触摸 LCD A 按钮、该按钮将打开/关闭用户 LED。
    我找不到有关使用了哪个硬件中断的任何信息。
    例如、对于 USB 发送中断或接收中断、您能否使用基于文本的或管理器在*。cfg 文件中配置该中断?

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

    尊敬的 Rab Boud:

    "中断编号"将对应于中断表中的索引。

    非 RTOS 示例中的某个位置将是 一个板级支持文件、该文件将 USB_ISR_Fxn()放置在一个特定的索引上。 此外、您还可以参阅数据表的嵌套矢量中断控制器(NVIC)部分。 根据数据表、我怀疑您需要与 USB MAC 相对应的中断58。

    [引用 user="RAB boud"]例如,对于 USB 发送中断或接收中断,您能否使用基于文本的或管理器在*。cfg 文件中配置该中断?
    您只需要通过粘贴上述代码块来修改*。cfg 文件(假设您尚未使用 Hwi 管理器)。 所有其他更改都将出现在您的 application.c 文件中。

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

     您好 Derrick、

    "interrupt number"将对应于中断表中的索引。

    非 RTOS 示例中的某个位置将是一个板级支持文件、该文件将 USB_ISR_Fxn()放置在一个特定的索引上。 此外、您还可以参阅数据表的嵌套矢量中断控制器(NVIC)部分。 根据数据表、我怀疑您需要与 USB MAC 相对应的中断58。"

    与我的 LCD 示例相关、我找到了上面的 NVIC 表。  在这种情况 下、LCD ISR 被称为 TouchScreenIntHandler、它连接到硬件中断 ADC 序列3 (或矢量编号65)。  这是您的意思吗?  

    如果是、RTOS 示例也是如此;我是否只需  将 NVIC 表中的" TouchScreenIntHandler "替换为 IntDefaultHandler (与所有其他处理程序一样)、并使*。cfg 文件指向 TouchScreenIntHandler 函数?

    同样的代码出现在两个不同的文件(hw_nvic.h 和 hw_type.h)中的原因。 但这会生成错误,如“”。 重新定义.. 当然、这里没有、但我无法理解原因。

    此外、RTOS 项目没有附加 NVIC 表文件。 我知道我可以在*。cfg 文件中定义我自己的 ISR、但我不需要的其他 ISR 是什么。 它们的默认状态是什么?

    此致、

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

    Rab Boud、您好!

    没错。

    对于 RTOS 示例、您需要使用 TouchScreenIniHandler 执行 Hwi_create、如下所示:

    #include 
    
    void someFxn()
    {
    Hwi_Params HwiParams;
    hwi_handle hwiHandle;
    
    Hwi_Params_init (hwiParams);
    hwiParams.priority = LCD_INT_priority;
    hwiParams.arg = somearg;
    
    hwiHandle = Hwi_create (65、
    TouchScreenIntHandler、
    hwiParams (&H)、
    null);
    
    if (hwiHandle ==空)
    {
    /*发生错误! */
    }
    }
    
    void TouchScreenIntHandler (UArg someArg)
    {
    /*预先存在的代码保持不变... */
    } 

    不确定为什么 hw_nvic.h 和 hw_type.h 中会出现相同的代码 或许 TM4C 的某个人可以在单独的线程中解决这个问题。

    [引用 USER="RAB boud">此外、RTOS 项目还没有附加 NVIC 表文件。 我知道我可以在*。cfg 文件中定义我自己的 ISR、但我不需要的其他 ISR 是什么。 它们的默认状态是什么?

    我不建议尝试在*。cfg 文件中配置 ISR。 相反、请使用我在上面提供的 C 代码作为示例。 对于非 RTOS 示例所需的每个 ISR、您将需要执行此操作。

    另外、请记住从将配置中断控制器的非 RTOS 示例中删除任何代码。 务必保留启用特定外设中断的任何代码;例如、启用外设中的 ADC 序列3中断。

    此致、
    Derrick

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

    LCD_INT_PRIORITY:这是预定义值还是用户必须设置它?
    如何设置 PRIORTIES、或者是否有好/坏的方法来设置它们?

    "我不建议尝试在*。cfg 文件中配置 ISR "

    在我所关注的 RTSO 示例中、作者使用*。cfg 管理器配置 HWI、SWI…
    我猜是因为它提供了更多的可能性、例如设置堆栈和堆。


    对于我的 LCD 示例、我认为、我必须从某个位置深入研究中断服务例程、因为它未显示在 Project Explorer 中。 在函数 main 中和所有初始化之后,只有一个函数,如下所示。

    while (1)

    WidgetMessageQueueProcess();


    此函数将在函数 main 中连续(始终)调用。 我想我可以使用*。cfg 管理器创建一个 SWI、该管理器将调用此函数并解决该问题。

    我还注意到、在其他示例中、ISR 代码可能未显示、因为它是.lib 文件或头文件的一部分。 如何使 RTOS 指向它们?
    很抱歉、我有很多问题、但希望发现更多问题的只是人类的本质。 )
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RAB、

    您可以在.cfg 中或运行时创建 Hwi。 您决定要以哪种方式执行它。 您现在有这两者的示例。

    很明显、TI-RTOS 会创建和管理矢量表。 您的应用程序无法直接提供或管理矢量表。 您可以通过 Hwi 模块对其进行修改。

    我们不熟悉 LCD 代码、因此无法对其进行评论。

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

    "很清楚、TI-RTOS 会创建和管理矢量表。 您的应用程序无法直接提供或管理矢量表。 您可以通过 Hwi 模块对其进行修改。"

    我的意思是   、默认情况下、非 RTOS 应用程序中未使用的中断定义为指向 NVIC 表中的 IntDefaultHandler。 RTOS 模板是相同的情况、还是只是未定义。 我知道用户必须在.cfg 文件中设置自己的 ISR。

    "我们不熟悉 LCD 代码、因此无法对其进行评论"

    我举例说明了这一点 、但总的来说、如果函数被连续调用、而不是 ISR 例程、您如何调整该函数以与 RTOS 应用程序配合使用?  

    此外、如果 ISR 例程嵌入在 *。lib (库文件)中;如何使*。cfg 文件指向它?

    此致

     

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

    [引用 user="RAB boud"]我的意思是、非 RTOS 应用程序中未使用的中断   默认定义为指向 NVIC 表中的 IntDefaultHandler。 RTOS 模板是相同的情况、还是只是未定义。 我知道用户必须在.cfg 文件中设置自己的 ISR。

    RTOS 分配一个缺省处理程序并在内部对此进行管理。 应用程序不需要执行任何操作。

    [引用 user="RAB boud"]我举例说明了这一点 、但总的来说、如果函数被连续调用、而不是 ISR 例程、您如何调整函数以使用 RTOS 应用程序?  [/报价]

    您应该找到此库的源代码并将其包含在您的应用中。

    此致、
    Derrick

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

    谢谢 Derrick。

    在某个时候、我将尝试 按照这些建议将 LCD 示例导入到 RTOS 应用程序中。 我将告诉您结果。

    手指交叉。

    此致