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.

[参考译文] TMS320F28379D:软件观察点

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/690051/tms320f28379d-software-watchpoint

器件型号:TMS320F28379D

您好!

这是否可以在 F28379D CPU 中使用软件观察点? 我尝试根据 spra820文档为软件观察点配置寄存器、但这只能部分工作。

配置寄存器回答正确、例如、如果我在 CCS Studio 中有断点、我无法在软件中设置断点。 但是、如果我配置所有寄存器、RTOSINT 不会被执行。

有人能帮我解决这个问题吗? 这是我的代码:

file.h

#define STACK_GUARE_MARGINE 50
#define STKOV_RANGEEMASK 0x0007

struct watchpoint_regs{
uint32 WPMASK;
uint32 WPREF;
uint16 rsrvd1;
uint16 rsrvd2;
uint16 WPEVT_CNTL;
uint16 WPEVT_ID;
};

extern volatile struct watchpoint_regs watchpoint0Regs;
extern volatile struct watchpoint_regs watchpoint1Regs;
extern uint32 StackAddressBottom;
extern uint32 StackAddressTop;
extern uint32 STACKSIZE;


file.c
uint32 GuardAddress =(((uint32)(&StackAddressTop)- stack_guard_Margin)&(uint32)(~STKOV_RANGEEMASK);
if ((GuardAddress <(UINT32)(&StackAddressBottom))||(GuardAddress >(UINT32)(&StackAddressTop)))
{
asm (" ESTOP0");
StackErrorOccaled();
}

asm (" EALLOW");
Watchpoint1Regs.WPEVT_CNTL = 0x0001;
asm (" RPT #1 || NOP");
if ((watchpoint1Regs.WPEVT_ID & 0xC000)!= 0x4000)
{
asm (" EDIS");
asm (" ESTOP0");
StackErrorOccaled();
}

Watchpoint1Regs.WPMASK =(uint32) STKOV_RANGEEMASK;
Watchpoint1Regs.WPREF = GuardAddress |(uint32) STKOV_RANGEEMASK;
Watchpoint1Regs.WPEVT_CNTL = 0x081A;
IER |= 0x8000;

asm (" EDIS");


/**测试**/
uint32 * tst;
TST = 0x07D0;
* TST = 0xDEADBEEF; //<-不工作、RTOSINT 未被触发 

*。cmd 文件:

       WATCHPOINT0_regs   :origin = 0x000828,length = 0x000020
       WATCHPOINT1_REGS   :origin = 0x000848,length = 0x000020

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

    根据应用手册 SPRA820、EVT_CNTL 的位6应始终设置为1、因此应向该寄存器写入0x085A、而不是0x081A 值。 您可以再次检查所选的 TST 地址是否在写入前不需要 EALLOW、并且不在配置的堆栈范围内。 您共享的其余配置对我来说很好。

    为了澄清一些术语,可以将“软件断点”设置为停止执行–因为在从 RAM 编译配置运行时,可以在 CCS 中设置其中的许多断点。 但是当从闪存配置运行时,这不是一个选项,因此“调试分析(硬件)单元”可以配置为“硬件断点”,当断点被置位时 CCS 将使用该断点。 因此,如果程序从闪存运行,您将无法使用您尝试在代码中配置的“硬件监视点”并通过 CCS 设置断点,因为设备上可用的“调试分析单元”有限。

    因此,如果代码正确配置了“硬件监视点”,则无论设置了多少“软件断点”,RTOSINT 都应在 RAM 配置中生成,如果没有设置任何“硬件断点”,则应在闪存配置中生成。 请告诉我们这是否不是您看到的行为。

    应用手册中提到了以下注意事项:
    “堆栈溢出代码可能只能正常工作一分钟,但是,例如,如果用户设置硬件断点或启用 Profiler,Code Composer Studio 将控制分析单元,而不会提供任何警告。”

    以下是有关硬件断点/观察点的资源: processors.wiki.ti.com/.../Hardware_Breakpoints_and_Watchpoints_for_C28x_in_CCS
    “C28x 器件一次有两个分析资源。 一个资源可用作硬件断点、观察点或计数器。 另一个可用作硬件断点或观察点。 因此、当使用硬件断点时、您只能使用2个硬件断点。 "

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

    您好!

    感谢您的回答。

    我已将0x081A 更正为0x085A、但观察点仍然不起作用。 值0x081A 取自 SPRA820中的代码示例。

    我的代码正在从闪存存储器运行、但我的问题不仅与2个可用的断点有关、而且 RTOSINT 未被触发。 我可能需要做的事情远不止 IER |= 0x8000才能打开 RTOSINT? 此外、我在测试之后检查看门狗寄存器是否发生更改-但不会、CCS 不会覆盖该寄存器。

    所以-也许在这个内核观察点中必须以不同的方式配置、或者我必须用除了只写 IER |= 0x8000之外的其他方式启用 RTOSINT?

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

    除了设置 IER 之外、还必须在 PIE 矢量表的 RTOSINT 条目中注册要执行的中断服务例程、如下所示:PieVectTable.RTOSINT = 's="" isr="" name="">。

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

    设置矢量表对我来说很明显。 还有其他建议吗?

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

    您可以尝试使用 CODE_SECTION pragma 将 ISR 放到 RAM 中。 最好将任何时间关键型函数/ISR 复制到 RAM 中。
    #pragma CODE_SECTION ( 's="" isr="" name="">,".TI.ramfunc");

    此外、您是否已在 CCS 调试会话中双击断点窗口(通过导航至 View->Breakpoints 打开)并确认没有设置?

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

    您好!

    在本周、我将进一步调查此问题、然后我将回答。

    此致、Łukasz B.

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

    感谢您的更新。 请告诉我是否可以提供帮助。 如果问题得到解决、最好按下"这已解决我的问题"按钮。

    此外、请注意、线程在60天后锁定、没有任何活动。 如果此帖子出现这种情况、并且您有后续问题、请随时单击"提出相关问题"进行跟进。 谢谢!

    此致、
    Elizabeth