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.

TMS320C6678: ti.sdo.ipc.transports.TransportShm: line 388

Part Number: TMS320C6678
Other Parts Discussed in Thread: SYSBIOS

尊敬的TI工程师,亲爱的前辈们,你们好:

我再使用CCS 5.5 使用SYSBIOS开发雷达的驱动程序,一片DSP+一片FPGA

使用多核核通信通信完成核心间的调度,主核在任务中不断循环调用MessageQ_put,从核在任务中通过MessageQ_get接收,在接收时,偶发的出现接收错误,错误讯息均为

ti.sdo.ipc.transports.TransportShm: line 388: assertion failure: A_regionInvalid: Region is invalid xdc.runtime.Error.raise: terminating execution

再出现这一信息后,从核在Expressions看messageQ中的消息都是乱了的,我怀疑时我内存冲突的问题,

参考了4.1. TI-RTOS Kernel — Processor SDK RTOS Documentation , TMS320C6678: ti.sdo.ipc.SharedRegion: line 380: assertion failure: A_idTooLarge: id cannot be larger than numEntries xdc.runtime.Error.raise: terminating execution - 处理器论坛 - 处理器 - E2ETm 设计支持,与文件中的doc

ipc_3_20_00_06

bios_6_35_04_50

备注:

在上一版本的文件中程序使用的时任务优先级都是0,跑的比较稳定,后来重新规划优先级以后,就老是出现MessageQ的各种问题,包含但不仅仅是:主核的信息从核收的到,但是从核回传的消息主核收不到;主核发了十多次就发送错误等。

主核配置

var MultiProc = xdc.useModule('ti.sdo.utils.MultiProc');
var procNameAry = MultiProc.getDeviceProcNames();
//var procNameAry = [ "CORE0", "CORE1"];
MultiProc.setConfig(null, procNameAry);


Ipc.procSync = Ipc.ProcSync_PAIR; /* Ipc_start 里同步所有核心*/
Ipc.sr0MemorySetup = true;

GateMP.maxRuntimeEntries = 8;
GateMP.RemoteCustom1Proxy = xdc.useModule('ti.sdo.ipc.gates.GateMPSupportNull');

SharedRegion.cacheLineSize = 128;
SharedRegion.numEntries = 8;
SharedRegion.translate = true;

/* 配置 SharedRegion #0 (IPC) */
var SHAREDMEM = 0x90000000
var SHAREDMEMSIZE = 0x10000000;

SharedRegion.setEntryMeta(0,
{ base: SHAREDMEM,
len: SHAREDMEMSIZE,
ownerProcId: 0,
isValid: true,
name: "DDR_IPC",
});
for (var i = 0; i < 8; i++) {
Ipc.setEntryMeta({
remoteProcId: i,
setupMessageQ: true,
});
}

从核配置

/* 配置核心名 */
var MultiProc = xdc.useModule('ti.sdo.utils.MultiProc');
var procNameAry = MultiProc.getDeviceProcNames();
MultiProc.setConfig(null, procNameAry);


Ipc.procSync = Ipc.ProcSync_PAIR; /* Ipc_start 里同步所有核心*/
Ipc.sr0MemorySetup = true;

GateMP.maxRuntimeEntries = 8;
GateMP.RemoteCustom1Proxy = xdc.useModule('ti.sdo.ipc.gates.GateMPSupportNull');

/* 配置 SharedRegion #0 (IPC) */
var SHAREDMEM = 0x90000000
var SHAREDMEMSIZE = 0x10000000;

SharedRegion.setEntryMeta(0,
{ base: SHAREDMEM,
len: SHAREDMEMSIZE,
ownerProcId: 0,
isValid: true,
name: "DDR_IPC",
});

for (var i = 0; i < 8; i++) {
Ipc.setEntryMeta({
remoteProcId: i,
setupMessageQ: true,
});
}

  • 堆栈使用是否有异常,通过ROV或者system analyzer工具分析看一下,是否能发现异常。

    在上一版本的文件中程序使用的时任务优先级都是0,跑的比较稳定

    When you configure tasks to have equal priority, they are scheduled in the order in which they are created in the configuration script.

    task优先级都为0,会按创建的顺序执行,是否是任务执行顺序影响了。

  • RVO发现不到问题,任务单步调试每次都是对的(我只是跑了20多次,但是不到问题)

  • 加大堆栈是否会有改善?

x 出现错误。请重试或与管理员联系。