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.
您好、TI gurus
在上一篇文章之后、我能够在我的传统 C64x DSP 应用中使用 SWI_inc ()而不是 SWI_POST ()。
由于我无法使用 CCS 或其他工具、我添加了调试代码、我看到在执行第一个 SWI 队列之前有多个 SWI 被布置到 SWI 队列中的确切情况。
在这些情况下、C6000 DSP BIOS 用户指南(软件中断-线程调度)建议使用以下代码段。
myswiFxn()
{. 。 。
重复= SWI_getmbox ();
while (重复--){
‘运行 SWI 例程‘
}
。 。 。
}
我正在监视 SWI_getbox 值并计算重复次数=0、1或2
虽然我确实看到一个问题、即非常偶尔(在繁忙时段)重复返回值2、95%的时间该值为1。 但是、真正让我感到困惑的是、实际上导致上述代码失败的原因是重复值等于零的时间的另外5%。 这意味着上面的 while 循环根本不会执行。
我无法解释为什么会发生这种情况、因为要执行 SWI、mbox 值必须至少为零。
我缺少什么吗?
谢谢
Jim
您好!
事后才考虑。 这是否可能是无意中生成的 SWI_POST ()和生成 的 SWI_getmbox ()检查导致的?
我将检查这种情况、但如果不发生这种情况、还有其他什么可能吗?
谢谢!
Jim
您好、Jim、
从 TMS320C6000 DSP/BIOS 5.31 API 参考中、我发现:
[引述]
当从 SWI 上下文调用 SWI_getmbox 时、如果 SWI 通过调用 SWI_andn、SWI_andnHook 或 SWI_dec 发布、则返回的值为零。 因此、只有通过调用 SWI_inc、SWI_OR、SWI_orHook 或 SWI_POST 来发布 SWI 时、SWI_getmbox 才会提供相关信息。
[/报价]
这是否会在您的应用中发生?
Derrick
您好 Derrick,似乎是错误的,5%的调用仍是 SWI_POST()调用(其余的是 SWI_inc()调用)。 所以 在 SWI_POST()的上下文中,SWI_getmbox 在这些情况下读回零。 在 SWI_inc ()情况下,SWI_getmbox 返回一个[或者在我尝试解决的问题情况下,有时返回两个]。 我想这也可能取决于 SWI_POST 调用中使用的 SWI 的初始化值(在本例中可能为零)。 这有道理吗?
谢谢
Jim
Jim、
根据我的理解,您现在只使用了 SWI_inc()调用。
在进入 SWI 函数之前、您的应用程序可能会调用两次 SWI_inc ()? 从 SWI_getmbox()返回的值2表示完全正确。
您是否从 HWI 上下文调用 SWI_inc ()?
Derrick
这是否得到了解决?
[10/2更新:标记为 TI 认为已解决、因为原始海报中没有回复]