Other Parts Discussed in Thread: AWRL1432
器件型号: AWRL1432BOOST-BSD
主题: AWRL1432 中讨论的其他器件
尊敬的 TI 团队:
我们正在根据毫米波演示流程调试 AWRL1432 工程中的失速问题、我们想确认该行为是指向 DPU 级问题还是流水线级问题。
系统运行一段时间后、UART 输出停止、处理流程似乎停止。 为了缩小范围、我们添加了一个带有计数器和阶段标记的小型调试机制。
以及我们添加的内容
1.内部的最小计数器打印 MMW Demo_Transmit 进程输出任务 ()
2.主要 DPU 阶段的入口和出口处的阶段标志
3. CLI 命令 统计 在系统出现停止后转储当前的内部调试状态
我们使用的相位计数器
- 坐标系
中导出 gMmwMssMCB.stats.frameStartIntCounter
这表示帧开始中断计数、因此我们将其用作仍在进行帧开始的指示器。
- txTaskCnt
我们每次添加一个计数器并使其递增 MMW Demo_Transmit 进程输出任务 () 唤醒 tlvSemHandle 并开始运行。
我们使用此参数表示输出任务仍在执行中。
- FRAME_COUNTER
主处理流程中现有的已处理帧计数器。
我们使用此参数来指示实际完成处理路径的帧数。
我们添加了阶段标记
我们在主要处理阶段周围放置标记:
- range_enter / range_exit
范围 DPU_RangeProcHWA_Process ()
- 多普勒_输入/多普勒_退出
范围 DPU_DopplerProcHWA_Process ()
- CFAR_ENTER/CFAR_EXIT
范围 DPU_CFARProcHWA_Process ()
- AOA_ENTER/AOA_EXIT
范围 DPU_Aoa2dProc_Process ()
- CLTR_ENTER / CLTR_EXIT
范围 DPU_CltrmvProcess ()
- Tracker_enter / Tracker_exit
范围 DPU_TrackerProc_Process ()
- trigger_nex_frame
解决方案 DPU_RangeProcHWA_CONTROL(…… CMD_triggerProc ...)
- POST_TLV
解决方案 SEMAPHOREP_POST (&gMmwMssMCB.tlvSemHandle)
其目的很简单:如果系统停转、最后一个标记仍保留在某个位置 *_enter 、则代码已进入该阶段、但从未返回到相应的阶段 *_exit 。
内部具有最小输出测试 MMW Demo_Transmit 进程输出任务 ()
我们在中添加了一个非常小的打印件 MMW Demo_Transmit 进程输出任务 () :
txTaskCnt=14480 帧=14480
txTaskCnt=14481 帧=14481
txTaskCnt=14482 帧=14482
这只是为了观察:
-帧开始仍在进行中
-输出任务仍在计划中
我们在输出停止后观察到的情况
UART 输出停止后、我们需要手动键入 统计 并获得:
DebugStat frameStartInt=77463 FRAME_COUNTER=14482 txTaskCnt=14482 txTaskFrame=14482 stage=9 (AOA_enter) stageFrame=14482 procToken=62981 uartToken=1 uartOverflow=0
几秒钟后、我们再次键入 stat 并得到:
DebugStat frameStartInt=78017 FRAME_COUNTER=14482 txTaskCnt=14482 txTaskFrame=14482 stage=9 (AOA_enter) stageFrame=14482 procToken=63535 uartToken=1 uartOverflow=0
我们的解释
从上面:
- frameStartInt 不断增加
因此仍在发生帧启动中断。
- FRAME_COUNTER 频率 14482.
因此、主处理流程不再完成新帧。
- txTaskCnt 也会保留 14482.
所以 MMW Demo_Transmit 进程输出任务 () 新帧不再推进。
- SAR ADC 保持不变 AoA_enter
因此、代码似乎已输入 AoA 处理、但从未达到 AoA_EXIT 。
- procToken 不断增加
因此、帧开始会不断发生、但帧间处理不会返回和清除令牌。
- uartToken=1 和 uartOverflow=0
由此、问题看起来不会立即出现、因为 UART 输出任务本身是主要失速点。
因此至少在这个观察结果中、似乎流水线在进入 AoA 处理后停止。
其他实验:绕过 AoA
因为失速经常出现 AoA_enter 、我们还执行了另一项测试:
-我们绕过了在主处理流中的 AoA,所以 DPU_Aoa2dProc_Process () 未实际执行的
-我们让其余的处理流程继续以简化的方式
但是、系统在运行一段时间后仍然停止运行。
差异如下:
-当 AoA 被绕过时,失速并不总是保持在 AoA
-相反,失速点移动到其他 DPU 级,如多普勒或距离
这使我们怀疑该问题可能并非仅限于 AoA、而可能是涉及以下方面的流水线级问题:
- DPU 链
-同步
- HWA/EDMA 资源
-令牌/信标行为
-在处理路径中调度/阻止
问题 SEMAPHOREP_PEND (SystemP_WAIT_FOREVER)
我们还检查了应用层代码。
在应用程序级别、主 DPU 流程编写为同步函数调用、例如:
- DPU_RangeProcHWA_Process ()
- DPU_DopplerProcHWA_Process ()
- DPU_CFARProcHWA_Process ()
- DPU_Aoa2dProc_Process ()
- DPU_TrackerProc_Process ()
我们可以看到 SEMAPHOREP_PEND (SystemP_WAIT_FOREVER) 在以下任务中:
- MMW Demo_Transmit 进程输出任务 ()
- init/task 同步路径
-其他实用程序任务
但我们看不到一个明确的 SEMAPHOREP_PEND (SystemP_WAIT_FOREVER) 在应用程序级别绕过每个 DPU 调用。
因此、我们目前的理解是:
-在应用层,DPU 链被调用为同步函数调用
-但我们不能排除 DPU 实现或其较低级别的 SDK / HWA /内部的阻塞等待或事件同步
向 TI 提问
1. 根据这种观察、有理由将失速解释为处理流水线卡在 DPU 级内、或者在最后一个标记保持在其内部同步点周围 *_enter 从未达到 *_exit ?
2. 标记保持在以下位置 AoA_enter 、TI 是否会建议首先检查:
- DPU_Aoa2dProc_Process () 元件引起的
- HWA/EDMA 状态
-内存/令牌/信标状态
-还是演示流程中的一些已知同步条件?
3. 如果绕过 AoA 并且仍然发生失速、但转而出现其他 DPU 级(例如多普勒或距离)、TI 会将这解释为流水线级问题而不是单 DPU 特定问题吗?
4. 在 AWRL1432 毫米波演示参考架构中、是否存在以下任何已知情况:
-帧启动中断继续
-但处理流水线从某个阶段停止返回
-导致进程令牌不断累积?
5. TI 是否建议使用首选调试方法来进一步区分失速情况:
-在特定 DPU 函数内
-或者在 DPU 之前或之后的某个内部等待/事件/资源同步点?
请提供任何指导。 如果需要、我们还可以共享我们添加的调试工具的简化版本。
谢谢。