【问题标题】:PIC24 Breakpoint on Either Read Or Write Memory AccessPIC24 读或写存储器访问断点
【发布时间】:2013-03-01 21:25:46
【问题描述】:

我的环境...

  • PIC24
  • MpLab (V.8.80)
  • ICD 3

我想观察一个字节,看看哪些例程正在读取,哪些例程正在实际写入,以及何时发生

我只能在上面设置断点

  • 字节写入时,或
  • 读取时

有谁知道我可以在任一访问上设置断点的方法吗?即,我想看看写了什么,读了什么,以什么顺序,通过哪个指令,在哪个例程中。

我只有一个 PICkit 3 和这个 ICD-3。这是一个双处理器系统,两个芯片通过一些连接(最终通过外设引脚选择)到各自的 UART 的电线进行通信

我从未使用过、接触过甚至见过真正的冰。那会让我这样做吗?即任何总线内存访问。

这就是 MpLab 让我现在用 ICD-3 做的事情

【问题讨论】:

  • 你不能设置两个断点,“读”和“写”各一个吗?
  • 不,当我尝试你的建议时,我得到一个 MessageBox,There is already a break point set for address NNNN
  • 即使有“高级断点”?
  • 我认为我没有“高级断点”。我编辑了我的原始帖子以包含 MpLab 此处在内存断点中提供的选项的屏幕截图。
  • 你有你的例程的源代码吗?如果是,您可以使用 eclipse 来实现:在变量上按 Ctrl+Alt+H 将显示哪些函数读取和写入变量。只需将您的代码复制到一个新的 eclipse 项目中即可尝试(确保启用了索引)。

标签: embedded pic mplab pic24


【解决方案1】:

您能否将您的变量包含在如下函数中到一个新的 .c 文件中。在头文件中设置define。

它可能有点重,但更换它可能会有所帮助。 FILELINE 是编译器标志,让您知道从源代码上的哪个文件以及在哪一行调用它。 Nop();是否存在,因为中断可能会延迟几条指令。

在文件和行上添加一个监视以查看它的调用位置。

#define setvar(x) zsetvar(x, __FILE__, __LINE__)
#define getvar() zgetvar( __FILE__, __LINE__)


byte my_var;

void zsetvar(byte val, volatile char * file, volatile char * line)
{
 my_var = val;// set breakpoint
 Nop(); 
}
byte zreadvar(volatile char * file, volatile char * line)
{
 Nop(); //set breakpoint
 Nop();
 return my_var;
}

【讨论】:

    猜你喜欢
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    • 2023-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多