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.

多核程序核运行其他核的任务



自己有一个多核程序,每一个核上单独运行一个任务,通过核的ID号在每一个核上创建不同的任务

Uint32 glbCoreId;
glbCoreId = CSL_chipReadReg (CSL_CHIP_DNUM);

if (glbCoreId == 0 {

Task_create(core0_func, &params, NULL);
}


if (glbCoreId == 1) {

Task_create(core1_func, &params, NULL);
}
if (glbCoreId == 2) {

Task_create(core2_func, &params, NULL);
}
if (glbCoreId == 3) {

Task_create(core3_func, &params, NULL);

}

自己发现有时不同的核会运行相同的任务;但是glbCoreId 的值是正确的。

这是怎么回事呢,每个核又是怎么知道自己要运行的任务呢?

  • 不应该出现这种问题,你看看是不是内存有重叠


  • cmd 

    MEMORY
    {
    MSMCSRAM (RWX) :   org = 0xc000000,    len = 0x200000
    L1DSRAM (RW) :          org = 0xf00000,        len = 0x8000
    L1PSRAM (RWX) :        org = 0xe00000,      len = 0x8000
    L2SRAM (RWX) :          org = 0x800200,       len = 0xffe00
    LOCAL_INT_VECT (RWX) : org = 0x800000, len = 0x100
    LOCAL_BOARD_INFO (RWX) : org = 0x800100,  len = 0x100
    DDR3 (RWX) : org = 0x80000000, len = 0x3e000000
    DDR3_1 (RWX) : org = 0xbf000000, len = 0x1000000
    }



    MEMORY
    {
    MSMCSRAM (RWX) : org = 0xc000000, len = 0x200000
    L1DSRAM (RW) : org = 0xf00000, len = 0x8000
    L1PSRAM (RWX) : org = 0xe00000, len = 0x8000
    L2SRAM (RWX) : org = 0x800200, len = 0xffe00
    LOCAL_INT_VECT (RWX) : org = 0x800000, len = 0x100
    LOCAL_BOARD_INFO (RWX) : org = 0x800100, len = 0x100
    DDR3 (RWX) : org = 0x80000000, len = 0x3e000000
    DDR3_1 (RWX) : org = 0xbf000000, len = 0x1000000
    }

    这是我.map中显示的内存配置

    LOCAL_INT_VECT          00800000   00000100   00000000   00000100       RW X
    LOCAL_BOARD_INFO   00800100    00000100  00000000    00000100      RW X
    L2SRAM                            00800200      000ffe00  00000200       000ffc00      RW X
    L1PSRAM                          00e00000   00008000  00000000    00008000      RW X
    L1DSRAM                           00f00000   00008000   00000000    00008000     RW
    MSMCSRAM                     0c000000   00200000    00025c8c    001da374     RW X
    DDR3                                 80000000   3e000000    00000000    3e000000     RW X
    DDR3_1                              bf000000   01000000    00000000    01000000     RW X

    我没有发现有重叠。

    我是把生成的.out文件通过以太网加载到DSP上的,通过JTAG下载是没有这个问题的,加载后就有这个问题了。

    代码和数据都是放在共享内存上的。

  • 以太网加载需要使用全局地址,不能使用局部地址,也就是不能使用0x008xxxxx这样的的地址。

  • 我把代码放到了共享内存上,使用的是全局地址。

  • LOCAL_INT_VECT 00800000 00000100 00000000 00000100 RW X

    LOCAL_BOARD_INFO 00800100 00000100 00000000 00000100 RW X

    L2SRAM 00800200 000ffe00 00000200 000ffc00 RW X

    这些也不行,都要用全局地址,否则无法加载到对应位置。

  • 你好,我现在都改成了全局地址
    MSMCSRAM 0c000000 00200000 00025ccc 001da334 RW X
    core0LOCAL_INT_VECT 10800000 00000100 00000000 00000100 RW X
    core0L2SRAM 10800200 000ffe00 00000000 000ffe00 RW X
    core0L1PSRAM 10e00000 00008000 00000000 00008000 RW X
    core0L1DSRAM 10f00000 00008000 00000000 00008000 RW
    DDR3 80000000 3e000000 00000000 3e000000 RW X
    DDR3_1 bf000000 01000000 00000000 01000000 RW X

    但是还是不行,即使通过JTAG下载程序也会出现这个问题,我应该怎么解决呢?