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.

DM385 nanosleep()误差严重

DM385 A8接收码流线程IpcBitsInLink_periodicTaskFxn(mcfw/src_linux/links/ipcbitsin/ipcBitsInLink_tsk.c )理论上每隔8毫秒去轮询一次通知其他线程去接收从片数据,但设备运行十来分钟后某一时刻会出现睡眠3秒多才返回,导致从片编码队列满视频丢帧。典型错误打印如下

[m3video] ==================== EncLink_PrintDetails ====================
[m3video] 81946: HDVICP-ID:0
[m3video] totalAcquire2wait in msec:74865391
[m3video] totalWait2Isr in msec: 64431
[m3video] totalIsr2Done in msec: 48
[m3video] totalWait2Done in msec: 64479
[m3video] totalDone2Release in msec: 0
[m3video] totalAcquire2Release in msec: 0
[m3video] totalAcq2acqDelay in msec: 0
[m3video] totalElapsedTime in msec: 0
[m3video] numAccessCnt: 0
[m3video] IVA-FPS : 0
[m3video] ====> Nov 20 2014 14:34:09
[m3video]
[m3video] *** ENCODE Statistics ***
[m3video]
[m3video] Elasped Time : 24 secs
[m3video]
[m3video]
[m3video] CH | In Recv In Skip In User Out Latency
[m3video] Num | FPS FPS Skip FPS FPS Min / Max
[m3video] --------------------------------------------
[m3video] 0 | 30 4 4 21 62 / 245
[m3video] 1 | 30 0 30 0 255 / 0
[m3video] 2 | 30 0 30 0 255 / 0
[m3video]
[m3video] Multi Channel Encode Average Submit Batch Size
[m3video] Max Submit Batch Size : 24
[m3video] IVAHD_0 Average Batch Size : 1
[m3video] IVAHD_0 Max achieved Batch Size : 1
[m3video] =================================================================

而正常情况打印信息如下

[m3video] ==================== EncLink_PrintDetails ====================
[m3video] 398940: HDVICP-ID:0
[m3video] totalAcquire2wait in msec:1946482584
[m3video] totalWait2Isr in msec: 367995
[m3video] totalIsr2Done in msec: 281
[m3video] totalWait2Done in msec: 368276
[m3video] totalDone2Release in msec: 0
[m3video] totalAcquire2Release in msec: 0
[m3video] totalAcq2acqDelay in msec: 0
[m3video] totalElapsedTime in msec: 0
[m3video] numAccessCnt: 0
[m3video] IVA-FPS : 0
[m3video] ====> Nov 20 2014 14:34:09
[m3video]
[m3video] *** ENCODE Statistics ***
[m3video]
[m3video] Elasped Time : 21 secs
[m3video]
[m3video]
[m3video] CH | In Recv In Skip In User Out Latency
[m3video] Num | FPS FPS Skip FPS FPS Min / Max
[m3video] --------------------------------------------
[m3video] 0 | 30 0 5 25 177 / 242
[m3video] 1 | 30 0 30 0 255 / 0
[m3video] 2 | 30 0 30 0 255 / 0
[m3video]
[m3video] Multi Channel Encode Average Submit Batch Size
[m3video] Max Submit Batch Size : 24
[m3video] IVAHD_0 Average Batch Size : 1
[m3video] IVAHD_0 Max achieved Batch Size : 1
[m3video] =================================================================

同时我把该优先级提到最大都无济于事,每次出错必然是该线程中OSA_getCurTimeInMsec()函数会阻塞3000多毫秒(理论应该是IPC_BITS_IN_PROCESS_PERIOD_MS = 8毫秒)

同一套SDK同一个应用在DM8127平台上则不会出现以上打印信息。

能否帮我分析一下是什么原因引起上述问题?

执行DEMO同样会出现上述问题(./bin/ipnc_rdk_mcfw.out TRISTREAM TRIPLE_H264 APPRO2A AEWB 3MP_D1 HIGH_SPEED1 HIGH_SPEED2 MJPEG 80 &)

  • 我在又进一步的定位该问题时发现了一个现象,当MMC 1(接SD卡)接口的CD引脚(SD卡自动检测)直接拉低时,CPU调度正常,不存在nanosleep严重超时问题,但把MMC接口的CD引脚(SD卡自动检测)直接悬空或上拉时则存在该问题。我本怀疑CD引脚信号不稳,导致内核一直处于中断状态,但我在CD引脚中断处理函数增加一些打印信息时,没发现进处理函数。 我把CD脚复用成GPIO,输出低电平,同样会出现该现象。