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/TM4C129ENCPDT:TI RTOS 在 I2C 和 UART 外设的动态初始化时崩溃

Guru**** 2448330 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/633172/rtos-tm4c129encpdt-ti-rtos-crashes-on-dynamic-initialization-of-i2c-and-uart-peripherals

器件型号:TM4C129ENCPDT

工具/软件:TI-RTOS

您好!  

我正在处理多线程 RTOS 环境,我正在为 UART 模块创建静态线程,它运行良好,但当我为同一模块创建动态线程时,我会收到一条错误消息  

错误:E_noIsr。

当我尝试使用 I2C 模块时也发生了同样的情况、它在 POC 中工作、这是一项单独的任务、但当我将它与多线程 环境集成时、它会崩溃、  

我认为 ISR 表已损坏或未正确初始化、我们可以做些什么来确保正确设置 ISR?  

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

    您是否在 ti/drivers 中使用 UART 模块? 当中断运行但没有插入任何函数时、会产生 E_noIsr。 您是手动设置矢量表还是让 TI-RTOS 执行该操作? 是否可以附加有问题的项目?

    您能否检查您的任务和系统堆栈、以查看是否发生溢出。 您可以查看 Tools->ROV->Tasks->Detailed 和 ROV->Hwi->Module。 您将看到尺寸和峰值。 一个简单的方法是针对错误执行 ROV->BIOS->Scann。 这将告诉您堆栈是否已熔断或是否出现任何其他状态错误。 注意:您需要连接 JTAG、且目标暂停 ATO 需要 ROV 读取目标。

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

    感谢您的回复
    我让 TI RTOS 设置矢量表。 在我们的项目中、我们使用 CAN、UART 和12C、因为 TI RTOS 具有用于 UART 和 I2C 的库、我使用这些库函数来设置矢量表、但对于 CAN、我们会手动设置矢量表、因为没有可用的库。
    我观察到的是、如果我们在 CAN 之前初始化这些 UART 和 I2C、那么它可以正常工作、但如果我们先初始化 CAN、则系统会崩溃、两者都出现 E_noIsr 错误。 因此、我假设我们的 CAN 初始化会破坏矢量表或操纵矢量表的地址

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

    如何设置 CAN 中断? 您应该使用 Hwi (而不是 TivaWare Driverlib 中断 API)。 您可以查看 tirtos_tivac_2_16_01_14\products\tidrivers_tivac_2_16_01_13\packages/ti\drivers\i2c\I2cT.c 文件以获取示例。

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

    您好 Todd、  

    再次感谢

    我正在使用此 API  

    CANIntRegister (CAN0_BASE、CAN0_HS_IntHandler);//使用动态矢量表分配 

    我也会尝试使用 Hwi、但您能告诉我为什么不能使用 API、ISR 表损坏的原因是什么?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    对于一件事情、对 CANIntRegister 的调用会调用 IntRegister、当首次调用时、该 IntRegister 会从闪存复制矢量表并将其放置到 RAM 中。 它会擦除 TI-RTOS 内核设置的所有内容。 基本上只能有一个矢量表的管理器。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Todd、

    感谢你的帮助