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.

TMS320C6678 系统如何获得CPU



我们目前在使用DSP做一个算法处理服务器,客户端通过TCP网络,按照网络协议将需要处理的数据发送给DSP服务器,DSP接到数据后进行运算,运算结束后将运算结果,再发送给客户端。

现在的现象是,当客户端连续发送多个数据请求时,发送到中间某一个时网络会中断,当前算法特点是,由于运算最较大,运算时间比较长,暂未进行优化,比如30s,50s,我们现在就是希望能让程序正常运行,完成我们的算法要求,下一步工作再进行优化,但是现在这个中断的问题让我们比较头疼,请专家指教。

经过多次试验,最后我将我们的算法注掉,换成了下面代码,网络是正常的,不会中断。

void Test(指定时间间隔)

{

    获取系统当前时间1

    while(1)

    {

         获取系统当前时间2

         if(时间2-时间1 >= 指定时间间隔)

             return;

    }

}

我又将我们的算法换成了下面代码,网络很快就会中断。

void Test()

{

     while(...)

    {

         for(...)

        {

             纯算法,加减剩除,专门用来耗时。

         }

    }

}

从上面的现象看,我们猜测,是由于算法占用CPU时间过长,系统无法获得CPU,没有时间处理网络相关信息,造成的,各位大侠有什么好办法,请多多回复。

  • 你好,

    因为你在DSP上没有跑RTOS操作系统,而你的代码是一段无限的死循环,因此CPU的Cycle都消耗在你的算法代码里了(即PC指针一直在里面,没有出来)。

    在跑RTOS操作系统的情况下,任务按照优先级来进行运行,如果网络属于更高优先级任务,那么即使算法在持续运行,调度器也会切换到网络任务,并优先运行,网络也就不会断了。

    我们Enea是TI的白金合作伙伴,在6678上提供整套的商用平台软件解决方案,可以解决您的问题,有后续问题欢迎联系我 william.dong@enea.com

    我们可以在C6678上提供全套的平台软件,包括操作系统、BSP驱动、中间件和开发工具。

    OSEck RTOS 软件平台包括:
    ? OSEck RTOS内核:
    o 稳定可靠,支持所有DSP,有20+年历史。
    o 专门针对C66x优化。没有内存碎片的内存管理。
    o 内存自动裁剪,统一的出错处理机制。
    o …….
    ? BSP(驱动)源代码:优化高效的驱动,如RapidIO,Ethernet等。
    ? LINX IPC: 支持分布式系统的IPC.
    o 使多核、多DSP、多板卡的编程好像单核编程一样。
    o 支持任何物理介质,如C66x多核之间(EDMA),多DSP之间(RapidIO),多板卡之间(RapidIO, Ethernet)。
    ? TCP/IP协议
    ? Package Flow 软件加速包
    ? Optima开发优化工具:CPU,内存等性能优化工具。


    Enea在DSP RTOS领域有近20年的开发、现场使用经验,针对复杂的C6678,从2010年起专门投入30多人的专家团队来支持优化6678软件平台,包括:
    ? 内核、重写高性能驱动、分布式支持、网络加速、优化工具等,现在以及有30多个客户使用Enea针对6678的软件平台:
    1. 成熟、稳定、可靠、现场验证的,专门针对6678 DSP特别优化的OSEck RTOS。
    2. 成熟稳定的针对C6678的驱动程序,支持包括SRIO、以太网、PA、Multicore Navigator、MPAX、中断管理等。
    3. 跨核、跨DSP、跨板卡系统的透明传输模块LINX。

    Best Regards

    William

    William.dong@enea.com