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在SYS/BIOS系统下使用IPC多核触发问题请教

Other Parts Discussed in Thread: SYSBIOS

HI,各位,

       最近在调试6678在SYS/BIOS系统下使用IPC多核触发。我在裸跑的时候已经可以通过IPC使core0触发其他核了,但是在SYS/BIOS系统里面创建了一个task用于core0触发其他核,通过调试发现,core0已经正常的跑起来了,但是其他核并没有被触发 而跑起来。请问在这个问题中,还需要注意什么呢?

我在想SYS/BIOS的一个task是用一个while里面死循环的,说明一个task没调度的话是不会跳出的。但是core0的触发代码已经做好了,按理来说其他核会被加载上执行文件,请问这是什么情况呢?谢谢。

  • 您好,

    你是在SYS/BIOS中使用IPCGR来产生核间中断,还是使用的是MCSDK安装完之后的IPC Module测试?如果只是采用直接写IPCGR寄存器的方式的话,在裸机及带SYS/BIOS下是没有差异的。请确认

  • HI Andy Yin,

         我用的是 :DEVICE_REG32_W(IPCGR(core), 1),也就是使用IPCGR来产生核间中断的。我再确认下。谢谢

  • hi Andy Yin,

      想问下,如果在SYS/BIOS下使用IPCGR触发的那块库和裸跑下的那块库是一样的么?

    extern cregister volatile unsigned int DNUM;

    extern far uint32_t _c_int00;

    主要是上面这两句,在SYS/BIOS下也是相应的判断core和起始地址么?

    谢谢

  • 您好,Andy Yin

    我在MCSDK安装目录下搜索到image_processing.ipc这块的IPC,请问这块是IPC Module测试程序么?还是在其他什么安装路径下?谢谢

  • 您好,Andy Yin

          MCSDK安装完之后的IPC Module测试代码已经找到,在mcsdk_<version>\packages\ti\transport\ipc\qmss

                             谢谢

  • 您好,Andy Yin

        我反复看了代码,把裸跑写IPCGR寄存器来用IPC触发成功的代码移植到SYS/BIOS里面,但是在SYS/BIOS下就是没法通过core0触发其他核。在裸跑代码中,就是通过写magic地址和用中断触发其他核的,想问下在SYS/BIOS下用中断触发的会不会有影响?谢谢

  • 您好, Andy Yin

    我在SYS/BIOS的task1里面做了core0触发core1的代码,代码在附件中,core0触发其他核后,给一个地址赋值,而当core1被触发后会有闪灯效果。但是core0可以启动,说明进入了task任务,而闪灯没有效果,说明core1没有被触发,你能帮我看下问题么?谢谢

  • chunlei gan  你好

    方便把整个工程发来看下吗,包括core0和 core1的,

    请告诉我们必要的编译和运行注意事项,我们在EVM上复现一下,希望可以帮助到你

  • 您好,

    对你其中的DEVICE_REG32_W(BOOT_MAGIC_ADDR(core), (uint32_t)&_c_int00); 类似写magic addr的操作不是很理解,能否说明一下,谢谢

  • HI,Andy.

    这句是在裸跑代码里面参考的,也是参考你们的demo--pcieboot_helloworld的里面,在for循环里面将每个core的_c_int00都写一次?

    想问下如果用SYS/BIOS来写magic addr那需要怎么写呢?谢谢

  • 您好,

    关于IPC的裸机例程可以参考www.deyisupport.com/.../4899.aspx 其中包含的IPC例程;关于sysBios下IPC,CCS提供了一个基于Sysbios的IPC模板,在新建工程的时候选择SYSBIOS IPC往下一步步即可,有问题再沟通,谢谢。

  • 您好,THOMAS YANG

    我的core0和core1写在一个代码里面,也就是  ipc_trigger.c里面, 通过if语句判断核的;生成的也只有一个.out文件。(想问下.out是放在哪里?是放在core0 的_c_int00么,还是其他地方?)我在没有用SYS/BIOS系统的时候(裸跑)通过仿真器连接core0,同样也是ipc_trigger.c的那段代码。然后通过写IPCGR来触发其他核,并分别写其他core地址,让其他核跑起来的。
    而在跑SYS/BIOS系统的时候,我在main函数里面也就是创建了一个task,此task就是用作写IPCGR来触发其他核的,附件是我的工程是sysbios,想请您帮我看下有何问题,谢谢

    还有一个是我用IPC module创建的SYS/BIOS工程,同样也是无法在core0里面触发core1。附件是ipc1.。感觉我的两个工程问题是在同一点上,请帮我分析下。谢谢。

    附件工程.rar
  • 您好,andy

    您说的代码我刚开始看过。里面需要使用仿真器的groups将八个核绑定在一起才能触发所有核。而我是想通过core0在不groups的方式将多个核触发起来。原来也问过可以用全局变量的方式来同步其他核,但是也许是我领悟性比较差,并没有测试成功。还想问下core0是什么时候执行IPC_ISR()函数的?

    如果执行IPC_ISR()函数的话,在IPC_ISR函数代码中core0只会执行判断语句中的else打印输出部分,而不会执行IssueInterruptToNextCore()函数 。

    还有想问下执行文件是放在哪里的?core1是如何感知这个执行文件而让core1跑起来的?谢谢

    不好意思。对多核的加载方式还是很模糊。

  • 您好,andy

    接上提问:

    如果core0通过IssueInterruptToNextCore触发了core1的中断ISR,而core1是如何运行执行文件的?

  • Chunlei,

    core0触发位置提前到main()的入口试过没有?另外可以研究一下Sys Bois是否有reset hook函数可以更早的进行触发。

  • HI ,Yu Liu

      我已经在main入口后直接触发。core0可以启动,core1无法启动。

  • 问题已经解决,首先在这里感谢TI的技术支持,andy ,liu等在这两周里的大力帮助。万分感谢。。。

    问题在裸跑的时候程序数据段和代码段在L2上,而L2只有512K,可以放下裸跑的执行文件,

    而在SYS/BIOS下,执行文件超过512K,在L2不能放下,所以需要放到4M的MSM下,所以在SYS/BIOS下需要建立一个platform 来将代码段和数据段放在MSM里面,在tools-》RTSC tools下新建一个platform来使数据段和代码段放在MSM下。

    其实刚开始一直以为IPC多核触发在SYS/BIOS下会和中断有冲突等问题,其实主要问题还是在SYS/BIOS执行文件大于512K,无法放在L2上,需要开辟更大的空间。

    但是还有个好奇就是把SYS/BIOS执行文件放在L2里面,虽然多核没有被触发,但是core0是可以跑的,按理来说,既然放不下,那么core0也无法执行,有点疑惑。但是原始问题还是解决了。

  • 我想问下,怎么在core0上读取一个.out文件然后把它加载到其他核上,还有就是entrypoint是怎么确定的,MAGIC_ADDR是怎么确定的,谢谢!

  • chunlei gan您好,

    关于问题的解决方法,你的理解是不对的,请先参考关于多核BIOS应用程序的wiki 说明。processors.wiki.ti.com/.../BIOS_on_Multi-Core_DSP_Devices

  • water sea您好,

    入口地址是c_int00,将其写入MAGIC_ADDRESS即可,但是注意要写全局地址;多核加载时首先要根据不同的加载方式生成相应的镜像文件,然后由rom code负责解析与加载,不需要应用程序加载,应用程序需要负责将core0意外的core触发。具体参考可以根据自己的加载模式有选择地参考rom source code:www.deyisupport.com/.../6352.aspx

  •          请问 chunlei gan ,你的加载过程是怎么样的,就是加载一个.out文件到内存还是哪里,能说说你具体的步骤吗,要是有参考的代码能不能发上来看看,谢谢!

  • 你好,我也和楼主遇到同样的问题,也是将程序直接放在了L2中,但是我看过生成的map文件,根本没有大于512K,不知道chunlei gan说的“而在SYS/BIOS下,执行文件超过512K,在L2不能放下,所以需要放到4M的MSM下”是不是也适用于我的工程,我的工程也是0核可以正常启动,其他核BIOS下不被触发,裸跑可以触发。