TI中文支持网
TI专业的中文技术问题搜集分享网站

AM572X IPC调试

我用AM572X EVM 来测试IPC的hello例子,根据如下网址:http://processors.wiki.ti.com/index.php/Running_IPC_Examples_on_DRA7xx/AM572x

我建立了CCS工程"DSP1"并生成了DSP1.out文件,此时我加载该DSP1.out到DSP1核上,加载IPC包中的hello_dsp2.xe66到DSP2核上,此时我成功连接了两个核。

然而,我对工程"DSP1"稍作修改成工程"DSP2",此时仅仅是改了peer 从“DSP2”到“DSP1”,并加载DSP2.out到DSP2核上,此时却无法连接。

所以问题是什么呢?对单个工程来说,应该证明我程序没有问题,我想是不是因为CCS调试时的地址问题,因为CCS连接到DSP1核DSP2核时的起始地址都是0x00800000。我加载DSP1.out和DSP2.out分别到DSP1核和DSP2核上时,程序和数据都是从0x800000上开始的,而加载例程的hello_dsp1.xe66和hello_dsp2.xe66时却能正确映射到8C00_0000和8D00_0000,因为这样所以我单个工程结合例子能够成功吗?如果是这样,我该怎么修改程序使我的程序链接到正确的位置?

下面是我的DSP2.C的代码,DSP1.c的代码只是差别在了peer从DSP1改成了DSP2而已。

/*
* ======== HelloDsp2.c ========
* Platform: DRA7XX_bios_elf
*/

/* package header files */
#include <xdc/std.h>
#include <xdc/cfg/global.h>
#include <xdc/runtime/Diags.h>
#include <xdc/runtime/Error.h>
#include <xdc/runtime/Log.h>
#include <xdc/runtime/System.h>

#include <ti/ipc/Ipc.h>
#include <ti/ipc/MessageQ.h>
#include <ti/ipc/MultiProc.h>
#include <ti/ipc/SharedRegion.h>

#include <ti/sysbios/BIOS.h>
#include <ti/sysbios/knl/Task.h>

/* local header files */
#include "../SysCfg.h"

/* private functions */
Void App_taskFxn(UArg arg0, UArg arg1);

/* define application role */
#define Role_READER 1
#define Role_WRITER 2

Int role = Role_READER; /* role of this processor */
String peer = "DSP1"; /* name of peer processor */

/*
* ======== main ========
*/
int main(int argc, char *argv[])
{
Error_Block eb;
Task_Params taskParams;

Log_print0(Diags_ENTRY, "main: –>");

/* create main thread (interrupts not enabled in main on BIOS) */
Task_Params_init(&taskParams);
taskParams.instance->name = "App_taskFxn";
taskParams.arg0 = (UArg)argc;
taskParams.arg1 = (UArg)argv;
taskParams.stackSize = 0x1000;
Error_init(&eb);

Task_create(App_taskFxn, &taskParams, &eb);

if (Error_check(&eb)) {
System_abort("main: failed to create application thread");
}

/* start scheduler, this never returns */
BIOS_start();

/* should never get here */
Log_print0(Diags_EXIT, "main: <–");
return (0);
}

/*
* ======== App_taskFxn ========
*/
Void App_taskFxn(UArg arg0, UArg arg1)
{
Int status;
UInt16 remoteProcId;

Log_print0(Diags_ENTRY, "App_taskFxn: –>");

/*
* initialize the ipc layer
*/
status = Ipc_start();

if (status < 0) {
System_abort("Ipc_start failed\n");
}

remoteProcId = MultiProc_getId(peer);
do {
status = Ipc_attach(remoteProcId);

} while ((status < 0) && (status == Ipc_E_NOTREADY));

}

Denny%20Yang99373:

可以对比一下原始的DSP2程序和修改后的DSP2程序。

可能某些接口用法不对

赞(0)
未经允许不得转载:TI中文支持网 » AM572X IPC调试
分享到: 更多 (0)