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.

[参考译文] RM46L852:通过 SEGGER SystemView 使用 TI FreeRTOS

Guru**** 2048860 points
Other Parts Discussed in Thread: HALCOGEN, SEGGER
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1191251/rm46l852-using-ti-freertos-with-segger-systemview

器件型号:RM46L852
主题中讨论的其他器件:HALCOGENSEGGER

大家好!

我将 FreeRTOS 用于由 HalCoGen 生成的 TI Hercules 项目、并想 使用 SEGGER SystemView 来调试我的项目。

将跟踪代码移植到内核时遇到问题。
例如、官方 Segger 补丁需要修改  TI 端口中不存在的 xPortSysTickHandler 函数。

我们还需要定义 SEGGER_SysView_X_GetInterruptId ()函数。
不知道如何获得 IRQ 中断号吗?

有没有关于将 FreeRTOS 的 TI 端口与 SystemView 配合使用的指南?  
如何移植 TI 内核以使用 SystemView?

此致、
加布里埃尔

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

    尊敬的 Gabriel:

    我们已开始着手解决您的问题、我们将很快提供更新。

    --

    谢谢。此致、

    Jagadish。

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

    Jagadish、您好!

    以下是自我撰写该问题以来的一些更新。  

    我仍然不确定应该如何处理 SysTick 处理程序。

    我设法 使用 TI PMU 来实现 SEGGER_SysView_X_GetInterruptId。
    该解决方案仍然有一些 问题(请参阅我的其他 e2e 问题)、但我很快就要解决了。

    我还 使用 IRQVECREG 寄存器实施了 SEGGER_SysView_X_GetInterruptId。  
    我不确定这是否是正确的方法。 如果您有任何想法、请告诉我。


    我现在最大的问题是 portraise_privacy 和 portENTER_critical ()之间的摩擦。
    让我举一个例子:

    我的任务调用 vTaskDelay。
    正如预期的那样、它进入了 MPU 包装程序函数内部、所以提升了它的特权



    在 vTaskDelay 中,FreeRTOS 使我们能够使用 traceTASK_DELAY ()跟踪此事件,该 traceTASK_DELAY ( )定义为 SEGGER_Sysview_RecordU32x3 ()


     我们的跟踪引擎 SystemView 希望确保跟踪操作是原子操作。
    因此它将其日志记录函数包含在 record_start()和 record_end()中。


    这些包装器称为 FreeRTOS portENTER_critical ()和 portEXIT_critical ()。

    问题是调用 record_end()时, portEXIT_critical ()重置了我们的特权。
    导致 MPU 崩溃。
     


    您是否有办法解决 portraise_privacy 和 portENTER_critical ()之间的冲突?

    很抱歉后面有一个大的跟进。
    希望对其他论坛的用户有所帮助

    此致、
    加布里埃尔

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

    尊敬的 Gabriel:

    将主题帖传输给专家。

    --

    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!

    感谢您的回答。
    我正在慢慢进步,但我仍然遇到问题,正如你可以看到我的 新问题。

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

    尊敬的 Cabriel:

    我不知道  portEXIT_Critical ()在你的项目中做了什么。 如果 portEXIT_critical ()要重新启用中断、并且在中断服务例程中调用此函数、则  TMS570 ARM-R 器件不支持嵌套中断、因此可能会生成数据中止。

    在 HAL FreeRTOS 示例中、RTI 比较0用于生成计时器节拍。  

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

    您好、QJ:

    很抱歉延迟了、 在过去的2周里、我还需要注意其他事情。

    portEXIT_critical 是 HalCoGen 的 FreeRTOS 端口提供的函数、前提是我没有错。

    尽管我仍需要支持、以便将 SystemView 与 TI 软件配合使用、但 我已在论坛中打开了一个新问题、该问题专门针对 ISR 问题:  

    https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1192579/rm46l852-ti-freertos---calling-portreset_privilege-in-a-irq-raise-prefetch-abort/4496275?tisearch=e2e-sitesearch&keymatch=%2520user%253A550002#4496275

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Unknown 说:
    portEXIT_critical 是 HalCoGen 的 FreeRTOS 端口提供的函数

    是的、但它是一个空函数。 Hercules 器件不支持 nextes 中断。 当 IRQ 中断被处理时、IRQ 被自动禁用。