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.

6678 cmd文件



您好:

我想请教一下 cmd文件相关及空间分配的问题

cmd文件中.far 和sysmem 过大 SL2中放置不了,只能放在DDR3中,其余cmd文件中section 部分全部放置在L2(local address)中单核运行没有问题

简单的程序cmd文件中section 部分全部放到L2(local address)中 通过IPC可以实现多核并行,程序较大时,如上所示,多核运行不了

  • 请问多核是公用一个工程文件还是各自有自己的工程文件?
  • 您好:

    是多核公用一个工程文件

  • 是所有的核都运行不了还是某个核运行不了?
  • 您好:

    如果是对group运行的话 只有核0可以运行,单独每个核运行的话都可以正常运行

    麻烦您帮忙看下问题。

    我的程序设计是核0通过IPC向核123发送中断,核123完成后向核0发送中断,核0继续执行后面的程序

    将所有程序数据通过L2(local address) (将所有的.cmd文件的section部分放入L2中)group 后下载到多核后多核可以正确运行

    现在section中有些部分过大不能放入L2中只能放在DDR3中,下面不同CMD文件出现 不同错误但工程的其他部分是相同的

    情况1:
    cmd 文件设置
    -stack          0x00001000 //设置栈大小
    -heap           0x10000000 //设置堆大小
    -x
    MEMORY
    {
     LL2MEM: origin = 0x00800000 length = 0x00080000
     CORE1_L2_SRAM:   o = 0x11800000 l = 0x00080000  /* 512kB CORE1 L2/SRAM */
     CORE2_L2_SRAM:   o = 0x12800000 l = 0x00080000   /* 512kB CORE2 L2/SRAM */
     CORE3_L2_SRAM:   o = 0x13800000 l = 0x00080000   /* 512kB CORE3 L2/SRAM */
      /* M3 RAM */
     MSMCSRAM: origin = 0x0C000000 length = 0x00200000
     DDR3:     origin = 0x90000000 length = 0x30000000
    }
    SECTIONS
    {
      .csl_vect: > LL2MEM
      /* Boot Memory Sections */
      .boot: > LL2MEM
      /* Text Memory Sections */
      .text: > LL2MEM
      /* Data Memory Sections */
      .data: > LL2MEM
      .fasttext:  >       LL2MEM
      .cinit:     >       LL2MEM
      .stack:     >       LL2MEM
      .bss:       >       LL2MEM
      .const:     >       LL2MEM
      .far:       >       DDR3
      .switch:    >       LL2MEM
      .sysmem:    >       DDR3
      .cio:       >       LL2MEM
      .heap       >       LL2MEM
      .fardata    > LL2MEM
      .neardata   > LL2MEM
      .rodata     > LL2MEM
        a0_f_c1           >  CORE1_L2_SRAM
        a1_f_c2           >  CORE2_L2_SRAM
        a2_f_c3           >  CORE3_L2_SRAM
    }
    运行结果
    [TMS320C66x_0] Error: GEM-INTC CSL_INTC_CMD_EVTENABLE command failed
    [TMS320C66x_1] Error: GEM-INTC CSL_INTC_CM
    [TMS320C66x_2] Error: GEM-INTC CSL_INTC_CMD
    [TMS320C66x_3] Error: GEM-INTC CSL_INTC_CMD[TMS320C66x_0] 读数运行时间0
    [TMS320C66x_1] 读数运行时间0
    [TMS320C66x_2] 读数运行时间0
    [TMS320C66x_3] 读数运行时间0
    [TMS320C66x_0] 读数运行时间0
    Set interrupt from Core 0 to Core 1, cycle = 82644272
    Interrupt Info 16
    Set interrupt from Core 0 to Core 2, cycle = 82660109
    Interrupt Info 32
    Set interrupt from Core 0 to Core 3, cycle = 82675946
    Interrupt Info 48
    注:前面0123输出的错误是中断初始化的问题但初始化程序没有问题,是直接用的IPC核间通信的初始化例程,后面初始化在惊喜coreID判断前123都可以正常执行,判断后只有0核可以正常执行发送中断及之前的程序,后面核123都不能执行
    情况2
    cmd文件
    -stack          0x01000000
    -heap           0x10000000
    MEMORY
    {
        SHRAM:           o = 0x0C000000 l = 0x00400000   /* 4MB Multicore shared Memmory */
        CORE0_L2_SRAM:   o = 0x00800000 l = 0x00080000   /* 512kB CORE0 L2/SRAM */
        CORE0_L1P_SRAM:  o = 0x00E00000 l = 0x00008000   /* 32kB CORE0 L1P/SRAM */
        CORE0_L1D_SRAM:  o = 0x00F00000 l = 0x00008000   /* 32kB CORE0 L1D/SRAM */
        CORE1_L2_SRAM:    o = 0x11800000 l = 0x00080000
        CORE2_L2_SRAM:   o = 0x12800000 l = 0x00080000
        CORE3_L2_SRAM:   o = 0x13800000 l = 0x00080000
        CORE0_DDR3:      o = 0x80000000 l = 0x10000000   /* 256MB DDR3 SDRAM for CORE0 */
        CORE1_DDR3:      o = 0x90000000 l = 0x10000000   /* 256MB DDR3 SDRAM for CORE1 */
        CORE2_DDR3:      o = 0xA0000000 l = 0x10000000   /* 256MB DDR3 SDRAM for CORE2 */
        CORE3_DDR3:      o = 0xB0000000 l = 0x10000000   /* 256MB DDR3 SDRAM for CORE3 */
        CORE4_DDR3:      o = 0xC0000000 l = 0x10000000   /* 256MB DDR3 SDRAM for CORE4 */
        CORE5_DDR3:      o = 0xD0000000 l = 0x10000000   /* 256MB DDR3 SDRAM for CORE5 */
        CORE6_DDR3:      o = 0xE0000000 l = 0x10000000   /* 256MB DDR3 SDRAM for CORE6 */
        CORE7_DDR3:      o = 0xF0000000 l = 0x10000000   /* 256MB DDR3 SDRAM for CORE7 */
    }
    SECTIONS
    {
         .csl_vect:     >  CORE0_L2_SRAM
         .boot:        >  CORE0_L2_SRAM
         .fasttext :    >  CORE0_L2_SRAM
         .heap     :    >  CORE0_L2_SRAM
        .text          >  CORE0_L2_SRAM   //存放程序代码
       // .stack         >  CORE2_DDR3      //为程序系统堆栈保留存储空间,用于保存返回地址、函数间的参数传递,存储局部变量
                                            //                                                         和保存中间结果
        .bss           >  CORE0_L2_SRAM   //程序中的全局变量和动态变量保留空间
        .cio           >  CORE0_L2_SRAM
        .const         >  CORE0_L2_SRAM   //存放程序中的字符常量、浮点常量和用const声明常量
        .data          >  CORE0_L2_SRAM
        .switch        >  CORE0_L2_SRAM  //存放程序中switch语句的跳转地址表
      // .sysmem        >  CORE3_DDR3     //用于程序中malloc,calloc,realoc函数动态分配存储空间
       // .far           >  CORE4_DDR3     //程序中用far声明的全局和静态变量保留空间
        .args          >  CORE0_L2_SRAM
        .ppinfo        >  CORE0_L2_SRAM
        .ppdata        >  CORE0_L2_SRAM
        /* COFF sections */
        .pinit         >  CORE0_L2_SRAM
        .cinit         >  CORE0_L2_SRAM
        /* EABI sections */
        .binit         >  CORE0_L2_SRAM
        .init_array    >  CORE0_L2_SRAM
        .neardata      >  CORE0_L2_SRAM
        .fardata       >  CORE0_L2_SRAM
        .rodata        >  CORE0_L2_SRAM
        .c6xabi.exidx  >  CORE0_L2_SRAM
        .c6xabi.extab  >  CORE0_L2_SRAM
        a0_f_c1        >  CORE1_L2_SRAM
        a1_f_c2        >   CORE2_L2_SRAM
        a2_f_c3        >   CORE3_L2_SRAM
    }

    运行结果
    TMS320C66x_0: Warning: Illegal opcode (00000003) at pc = 0x90ffff48 Illegal opcode at pc = 0x90ffff48
    注意:第一次load 后程序没有任何反映,reload 后程序出现上述错误 所有核都不能运行
  • 把每个core的.system and .far 放到各自定义的DDR3空间内。或者从L2放到DDR3时,慢慢增加size。
  • 您好:
    谢谢您的帮助,问题已解决。