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.

[参考译文] TM4C1230E6PM:跟踪分析

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1428320/tm4c1230e6pm-trace-analysis

器件型号:TM4C1230E6PM
Thread 中讨论的其他器件: SYSBIOS

工具与软件:

您好!

我尝试使用 Blackhawk TMDSEMU200-U 调试探针在 Tiva Ware TM4C1230E6PM 上运行跟踪分析(函数分析、CPU 负载测量)。

我的应用不使用 TI-RTOS、但我认为使用跟踪分析功能时需要执行此操作。 是这样吗?

在查找文档中、我找到了这本 系统分析仪用户指南、其中介绍了为 Code Composer v6.0设置 RTOS 和 UIA 的过程。 这是最新版本吗?

我最近 在将该调试探针与 CCS v12配合使用时遇到问题、因此我现在要使用 CCS 11.2。 然而、我发现用户指南中给出的很多指令没有意义、因为我猜程序结构已经改变了。 我可以从 这里安装 TI-RTOS

例如:

  • 我未找到"XGCONF"工具、也未找到任何"工程的配置文件(*。cfg)"。 我认为这已经成为"目标配置"(.ccxml)?
  • 我可以在"Project Properties/CCS General/Products"中导入用于 TivaC 的 TI-RTOS、但当我打开"View/Other/Available Products"(如第90页的"用户指南"中所述)时、此处不会列出任何内容。 这时会显示:"显示 RTSC 工程软件包路径上的模块。 该视图当前为空、因为没有打开 RTSC 配置文件。

调试探针适用于正常功能:我可以用它刷写代码、并使用断点暂停代码执行。 当我尝试使用任何跟踪功能时、会出现以下消息:

如何为我的应用正确启用 UIA 仪表?

提前感谢您的任何帮助!

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

    您好!

    [报价用户 id="622437" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1428320/tm4c1230e6pm-trace-analysis "]

    调试探针适用于正常功能:我可以用它刷写代码、并使用断点暂停代码执行。 当我尝试使用任何跟踪功能时、会出现以下消息:

    如何为我的应用正确启用 UIA 仪表?

    [报价]

     抱歉、我不是这些工具的专家。 我个人来说、我没有将 System Analyzer/UIA 用于 TI-RTOS 项目、但 ROV 偶尔使用。 我认为 Todd 的这篇文章提供了很多关于如何使用系统分析器通过示例项目来调试 TI-RTOS 项目的信息。

    https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/953527/faq-ccs-how-can-i-use-system-analyzer-rtos-analyzer-to-debug-a-ti-rtos-sys-bios-application

    [报价用户 id="622437" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1428320/tm4c1230e6pm-trace-analysis "]

    我的应用不使用 TI-RTOS、但我认为使用跟踪分析功能时需要执行此操作。 是这样吗?

    [报价]

    我相信是这样。  

    [报价用户 id="622437" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1428320/tm4c1230e6pm-trace-analysis "]
    • 我未找到"XGCONF"工具、也未找到任何"工程的配置文件(*。cfg)"。 我认为这已经成为"目标配置"(.ccxml)?
    • 我可以在"Project Properties/CCS General/Products"中导入用于 TivaC 的 TI-RTOS、但当我打开"View/Other/Available Products"(如第90页的"用户指南"中所述)时、此处不会列出任何内容。 这时会显示:"显示 RTSC 工程软件包路径上的模块。 该视图当前为空、因为没有打开 RTSC 配置文件。
    [报价]

    假设您已经从 Resource Explorer 中导入了用于 TM4C123的 TI-RTOS 工程、则会在工程目录中找到.cfg。 请参见下文。  

    如果你右键点击.cfg 文件、你将看到一个菜单、在这个菜单中可以选择 Open With->XCONF 以在 GUI 模式中打开.cfg 文件。  

    然后、您将看到以下页面显示。  

    我也想给你一个标题。 我将是 OOO 一个星期,如果你有任何后续问题,我的答复将非常延迟。 很抱歉给您带来不便。  

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

    尊敬的 Charles:

    感谢您的答复。

    我尝试设置一个 emtpy RTOS 项目来测试东西。 我发现只要向项目添加任何具有.cfg 扩展名的文件、就可以将其转换为 RTOS 项目、并且出现了用户指南中提到的内容。

    然后、在编译示例之前、我在安装和使用这些完全版本的 TI-RTOS [2.16.1.14]和 XDCtools [3.32.0.06]之前遇到了问题。

    现在运行我的代码会显示错误"#10099-Dprogram not fit into available memory。  对于段".vtable"大小0x26c、运行对齐放置失败、与".vecs"重叠、大小为0x360 (第0页)   tm4c1230e6p.cmd"

    我在 论坛这里也描述了这个问题、这里说、这是来自 TivaWare 的中断和来自启用了 SYS/BIOS 的中断。

    如何解决此问题的冲突? 我需要 TivaWare 中断、因为它们是我的应用不可或缺的一部分、但我仍然想使用高级跟踪分析功能。 我可以禁用 Sys/BIOS 中断、仍进行代码分析等吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="622437" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1428320/tm4c1230e6pm-trace-analysis/5477256 #5477256"]

    然后、在编译示例之前、我在安装和使用这些完全版本的 TI-RTOS [2.16.1.14]和 XDCtools [3.32.0.06]之前遇到了问题。

    [报价]

    是的、请仅使用这些版本。

    [报价 userid="622437" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1428320/tm4c1230e6pm-trace-analysis/5477256 #5477256"]

    现在运行我的代码会显示错误"#10099-Dprogram not fit into available memory。  对于段".vtable"大小0x26c、运行对齐放置失败、与".vecs"重叠、大小为0x360 (第0页)   tm4c1230e6p.cmd"

    [报价]

    您导入了哪个示例?  

    [报价 userid="622437" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1428320/tm4c1230e6pm-trace-analysis/5477256 #5477256"]

    我在 论坛这里也描述了这个问题、这里说、这是来自 TivaWare 的中断和来自启用了 SYS/BIOS 的中断。

    [报价]

    不可以、切勿 使用 TivaWare 将中断与使用 TI-RTOS 的中断混用。 否则将破坏由 TI-RTOS 创建的矢量表。 您应该只使用 TI-RTOS 的 Hwi 模块来处理中断。

    很抱歉、我目前在度假、我的回复将延迟很多。

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

    尊敬的 Charles:

    感谢您的答复。 我希望你有一个美好的假期,只有当你回来阅读这篇!

    我使用了 TI-RTOS 示例中的 helloworld 示例。 这个确实运行正常。

    我自己的应用使用 TivaWare 中断。 将其禁用以进行调试没有意义。

    总之:对于使用 TivaWare 中断的 TivaWare 应用、不能使用跟踪功能、是否正确?

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

    您好、Dominic:

     请参阅这篇由 Todd 回答的帖子、了解为什么您不能将 TivaWare 生成的中断与 TI-RTOS 管理的中断混合。 无论您当前在 TivaWare 中使用何种中断、您都可以让 TI-RTOS Hwi 对其进行处理、以便中断矢量表不会混乱。  

    https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/849627/faq-can-i-update-the-vector-table-with-intregister-when-using-ti-rtos?tisearch=e2e-sitesearch&keymatch=ti-rtos%20vector%20table#

    如果您要在 TI-RTOS 中使用零延迟中断、这篇文章将非常有用。  

    /cfs-file/__key/communityserver-discussions-components-files/908/8358.C28_5F00_zero_5F00_latency.pdf

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

    尊敬的 Charles:

    感谢您的答复。 我理解这两者不兼容。

    无论您当前在 TivaWare 中使用的是什么中断、您都可以让 TI-RTOS Hwi 对其进行处理、以便中断矢量表不会混乱。  [报价]

    我怎么能做到这一点? 你能举一个具体的例子 吗(例如使用 ADCIntRegister 和 GPIOIntRegister 的程序)?

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

    您好、Dominic:

     请查看以下示例。 在此、使用 Hwi 模块通过矢量39管理 Timer2A 中断。 如果您有一个 ADC0序列0中断、您将使用矢量30并插入 ISR 函数。  

    //----------------------------------------
    // BIOS header files
    //----------------------------------------
    #include <xdc/std.h> //mandatory - have to include first, for BIOS types
    #include <ti/sysbios/BIOS.h> //mandatory - if you call APIs like BIOS_start()
    #include <xdc/runtime/Log.h> //needed for any Log_info() call
    #include <xdc/cfg/global.h> //header file for statically defined objects/handles
    #include <xdc/runtime/System.h>
    #include <xdc/runtime/Error.h>
    #include <ti/sysbios/hal/Hwi.h>


    //------------------------------------------
    // TivaWare Header Files
    //------------------------------------------
    #include <stdint.h>
    #include <stdbool.h>

    #include "inc/hw_types.h"
    #include "inc/hw_memmap.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/gpio.h"
    #include "inc/hw_ints.h"
    #include "driverlib/interrupt.h"
    #include "driverlib/timer.h"


    //----------------------------------------
    // Prototypes
    //----------------------------------------
    void hardware_init(void);
    void ledToggle(void);


    //---------------------------------------
    // Globals
    //---------------------------------------
    volatile int16_t i16ToggleCount = 0;


    //---------------------------------------------------------------------------
    // main()
    //---------------------------------------------------------------------------
    void main(void)
    {

    hardware_init(); // init hardware via Xware

    Hwi_Params hwiParams;
    Hwi_Handle myHwi;
    Error_Block eb;
    /* Initialize error block and hwiParams to default values */
    Error_init(&eb);
    Hwi_Params_init(&hwiParams);
    hwiParams.enableInt = FALSE;
    myHwi = Hwi_create(39, (Hwi_FuncPtr)ledToggle, &hwiParams, &eb);
    if (myHwi == NULL) {
    System_abort("Hwi create failed");
    }
    Hwi_enableInterrupt(39);


    BIOS_start();

    }


    //---------------------------------------------------------------------------
    // hardware_init()
    //
    // inits GPIO pins for toggling the LED
    //---------------------------------------------------------------------------
    void hardware_init(void)
    {
    uint32_t ui32Period;

    //Set CPU Clock to 40MHz. 400MHz PLL/2 = 200 DIV 5 = 40MHz
    SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);

    // ADD Tiva-C GPIO setup - enables port, sets pins 1-3 (RGB) pins for output
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
    GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);

    // Turn on the LED
    GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 4);

    // Timer 2 setup code
    SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER2); // enable Timer 2 periph clks
    TimerConfigure(TIMER2_BASE, TIMER_CFG_PERIODIC); // cfg Timer 2 mode - periodic

    ui32Period = (SysCtlClockGet() /2); // period = CPU clk div 2 (500ms)
    TimerLoadSet(TIMER2_BASE, TIMER_A, ui32Period); // set Timer 2 period

    TimerIntEnable(TIMER2_BASE, TIMER_TIMA_TIMEOUT); // enables Timer 2 to interrupt CPU

    TimerEnable(TIMER2_BASE, TIMER_A); // enable Timer 2

    }


    //---------------------------------------------------------------------------
    // ledToggle()
    //
    // toggles LED on Tiva-C LaunchPad
    //---------------------------------------------------------------------------
    void ledToggle(void)
    {
    TimerIntClear(TIMER2_BASE, TIMER_TIMA_TIMEOUT); // must clear timer flag FROM timer

    // LED values - 2=RED, 4=BLUE, 8=GREEN
    if(GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_2))
    {
    GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 0);
    }
    else
    {
    GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 4);
    }

    i16ToggleCount += 1; // keep track of #toggles

    Log_info1("LED TOGGLED [%u] TIMES",i16ToggleCount); // send toggle count to UIA

    }