大家好、
我正在使用 TMS320C6678 DSP 并尝试在项目中实现 OpenMP。 原始项目是 SRIO 项目。我在使它们协同工作时遇到问题。
我从 e2e 和 wiki 搜索了很多、有些问题与我的问题相同。例如 、https://e2e.ti.com/support/processors/f/791/t/468231?OpenMP-QMSS-manual-setup#pi320966=1 、但我尝试时遇到了
与论坛相同的操作,项目无法正常运行。
首先、我的程序旨在通过 SRIO 实现 FPGA 向 DSP 传输数据、在传输完成后发送门铃中断、然后将数据处理分频为 core0-core7、以便使用进行计算
OMP 并行编程。
此程序根据 PDK 生成的 SRIO_LpbkDioIsr_evmc6678_C66BiosExampleProject 进行修改。 许多帖子以前都被引用过。 由于 SRIO 使用 qmss、omp 也使用 qmss、
按照 http://downloads.ti.com/mctools/esd/docs/openmp-dsp/integrating_apps_with_qmss.html 手动初始化 qmss。 由于 SRIO 使用128个描述符并使用 Qms_MemRegion_memory_REGION0、
在 cfg 文件中修改以下内容。
ompSettings.runtimeInitializesQmss = false;
OpenMP* qmsMemRegionIndex = 1;
OpenMP* qmsFirstDescIdxInLinkingRam = 128;
在 DDR.len 后面添加以下代码。
VAR Cache = xdc.useModule('ti.sysbios.family.c66.Cache');
Cache.setMarMeta(msmcNcVirt.base、msmcNcVirt.len、0);
Cache.setMarMeta(OpenMP.ddrBase、OpenMP*、ddrSize
cache.p|cache.pfx|cache.wTE);
Cache.setMarMeta(OpenMP.msmcBase、OpenMP*。msmmcSize
cache.p|cache.pfx|cache.wTE);
在 _TI_omp_initialize_rtsc_mode 之前添加定制的 qmss 函数
VAR 启动= xdc.useModule('xdc.runtime.Startup');
startup.lastFxns.$add ('&qmsInitOmp');
startup.lastFxns.$add ("&_TI_omp_initialize_rtsc_mode");
存在以下现象:
1如果 SRIO 的任务未启动、则 omp 程序正常运行;
2如果 omp 程序未启动、SRIO 程序正常运行、并且可以接收门铃中断;
3如果 SRIO 和 omp 程序同时启动、则仍然可以在 SRIO 程序中接收门铃中断、但 omp 程序报告错误内部错误:Unexpected NULL pointer-src/tomp_parallel.c、224
我的任务是通过 cfg 文件静态启动的。 SRIO 具有最低优先级、omp 程序具有最高优先级。 我严格遵循 omp2.0用户指南中的说明,例如,修改自动运行选项等等
我的问题是:
1我的 qmss 启动方法是否正确?
2当 omp 程序将显示此类错误内部错误时:Unexpected NULL Pointer-src / tomp_parallel.c、224;
在下面发布我的 cfg 文件和相关代码。
我想我在 QMSS init 中犯了一些错误、但我无法通过自己找到它。 提前感谢您。
此致
