您好!
我再次遇到了代码仅在与调试器连接时才工作的问题。 在论坛上看,这种情况似乎不是很少见。 不幸的是,也很少有一个好的答案。
我阅读了有关调试器连接的硬件问题的内容。 但可以吗? 我甚至不知道。 从处理器的角度来看、无论是否连接了调试器、从内部闪存运行代码有何区别?
这是我的实际问题:
- 我使用硬件计时器来获取一些计时信息。 该值由 HWREG (GPT0_NONBUF_BASE + GPT_O_TAR)读取;
- 现在、我有一个等待一些节拍的等待函数:
#pragma FUNCTION_OPTIONS ("-opt_level=0")
void Tbl_HW:::waitTicks (uint32_t nTicks)
{
uint32_t startValue = HWREG (GPT0_NONBUF_BASE + GPT_O_TAR);
uint32_t actValue;
操作
{
actValue = HWREG (GPT0_NONBUF_BASE + GPT_O_TAR);
}
while ((actValue-startValue)< nTicks);
}
我有一个使用 LED 的信号函数
void Tbl_HW::SignalPoint (int nSignals) { SwitchRedOff (); //switchGreenOn(); WAIT_ms (300); while (nSignals > 0) { nSignals-; SwitchBlueOn(); WAIT_ms (200); switchBlueOff(); wait_ms (200); } wait_ms (700); }
然后在类的临时实例的析构函数中调用该 SignalPoint 函数。 当我运行这个程序时、在连接调试器的情况下、我看到蓝色 LED 照明。 但是、当调试器断开连接时、LED 保持暗。
我考虑了一些优化、从编译器中删除了我的等待循环。 因此、我插入了函数选项 pragma。 但这似乎没有什么不同。 即使我使用调试器运行它、调试器也会将程序下载到目标并执行它。 断开调试器连接并执行下电上电后、将启动相同的程序、该程序仍位于内部闪存中。 因此、这也不可能是根本原因。
有什么想法、我可以在未连接调试器时执行什么操作来使它也运行?
大家好
Erwin