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.

[参考译文] RTOS/TMS320C6670:优先级1

Guru**** 2562120 points
Other Parts Discussed in Thread: SYSBIOS

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/627011/rtos-tms320c6670-priority-1

器件型号:TMS320C6670
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

您好!

我将使用基本 NDK 示例。 我决定添加一个新任务。

我的网络增强:

void NetOpenHook ()
{
platform_write (" ok");
Error_init (&EB);
Task_Params_init (&taskParams);
taskParams.STACKSIZE = 2048;
taskParams.priority = 4; //OS_TASKPRINORM;//OS_TASKPRINORM;
ETH_Task_hndl = Task_create ((Task_FuncPtr) Task2Func、&taskParams、&EB);
if (ETH_Task_hndl = NULL){
printf ("任务创建失败");
}
hello = DemonNew (sock_DGRAM、0、12288、dtask_udp_hello、OS_TASKPRINORM、OS_TASKSTKNORM、0、1);

} 

我的任务:

void Task2Func (void)
{
printf ("这里没有 sock 或 NDK");
static int i=0;
int lichi;
int tmp1;
while (1)
{
printf ("这里没有 sock 或 NDK");
xx=xx+0.01;
yy= sin (xx);
res[iter]=yy;
ITER++;
如果(ITER=800)
ITER=0;
}

} 

一切都运行良好。 守护程序(服务器) 不 会中断我的任务,而它(任务)在没有中断的情况下工作。

但是、当我将 taskParams.priority 设置为1时。 服务器正常工作 、 我的 PC 应用程序从服务器接收答案。
但服务器 工作时间不长。 在3-4轮询后 、我 在   调试模式下的控制台中接收到错误消息。

错误:

TI.SYSBIOS.堆.HeapMem:第294行:内存不足:handle=0x138e88d8、size=4096
xdc.runtime.Error.raise:终止执行

我有两个问题:

1.为什么只有 当 taskParams.priority = 1时服务器中断任务?

2.导致此错误的原因和方法?

谢谢。



 

   

  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已将您的疑问转发给软件专家。 他们的反馈应发布在此处。

    BR
    Tsvetolin Shulev
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    在 NDK 中,netopenhook()创建的守护程序是 StackTest()函数的一部分,这是在.cfg 中配置的任务:

    var tskNdkStackTest= Task.create ("&StackTest");
    tskNdkStackTest.STACKSIZE=0x1400;
    tskNdkStackTest.priority =0x5;

    NetOpenHook()是如何开始的? 这是 SYSBIOS 任务的一部分吗? 如果使用6或10等更高的数字更改 Task2Func()任务优先级会怎样?

    如果 SYSBIOS 因堆问题而崩溃、您是否可以增加堆以查看它是否起作用?

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我的配置是

    var 内存= xdc.useModule('xdc.runtime.Memory');
    
    var BIOS = xdc.useModule('ti.sysbios.BIOS');
    
    var 任务= xdc.useModule('ti.sysbios.knl.Task');
    
    ////// SSS//////
    VAR HeapBuf = xdc.useModule('ti.sysbios.heaps.HeapBuf');
    
    var 日志 = xdc.useModule('xdc.runtime.Log');
    var 计时器= xdc.useModule('ti.sysbios.hal.Timer');
    var IP = xdc.useModule('ti.ndk.config.Ip');
    var UDP = xdc.useModule('ti.ndk.config.Udp');
    
    /*
    **允许存储任务名称。 默认情况
    下,如果使用友好的显示名称命名任务,则不会保存**以节省 RAM。 必须将其设置为 true 才能允许它。 我们在任务列表显示中使用友好名称。
    //
    //Defaults.common$.namedInstance = true;
    Task.common$.namedInstance = true;
    
    //
    **与 IPC 的接口。
    根据您使用的 BIOS 版本,**模块名称可能已更改。
    //
    //*将其用于预版 BIOS 6.30 *//
    * var 内存=xdc.useModule ('ti.sysbios.ipc.semaphore');*
    
    //*将此用于 BIOS 6.30 PLUS 以获取 IPC 模块*/
    var sem= xdc.useModule ('ti.sysbios.combul.semaphore');
    
    var Hwi= xdc.useModule ('ti.sysbios.hal.hwi');
    
    var ECM = xdc.useModule ('ti.combiner BIOS.semaphore'
    
    
    );将此函数配置为 CPU 系列。**用于配置 sysbios.cpi*。
    **
    */
    /*
    var Load (var 加载) = xdc.useModule('ti.sysbios.utils.Load');
    Load.common$.diags_USER4 = Diags.always_on;
    */
    
    var Diags = xdc.useModule('xdc.runtime.Diags');
    
    
    /*加载 CSL 软件包*/
    var CSl=xdc.useModule('ti.csl.Settings');
    
    /*加载 CPPI 软件包*/
    var cpi = xdc.loadPackage ('ti.drv.cppi');
    
    /*加载 QMSS 软件包*/
    var Qmss = xdc.loadPackage ('ti.drv.qmss');
    
    //加载 PA 软件包*/
    var Pa=xdc.useModule('ti.drv.pa.Settings');
    
    //加载 Platform/NDK 传输软件包*/
    //// SSS//////
    VAR PlatformLib = XDC.loadPackage ('ti.platform.evmc6670l');
    var NdkTransport = XDC.loadPackage ('ti.transport.NDK');
    
    /*
    **设置异常日志,以便您可以在 CCS 中使用 ROV 读取它
    */
    var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
    var EXC = xdc.useModule('ti.sysbios.family.c64p.Exception');
    Exc.common$.logger = LoggerBuf.create ();
    EXC.enablePrint = true; /*将异常详细信息打印到 CCS 控制台*/*
    
    
    **为加载模块提供它自己的 LoggerBuf,以确保
    **事件不会被覆盖。
    //
    //* var loggerBufParams = new LoggerBuf.Params ();
    logerBufParams.exitFlush = true;
    logerBufParams.numEntry = 64;
    Load.common$.logger = LoggerBuf.create (logerBufParams);
    *//
    
    
    ***使用此负载使用 RTSC 配置 NDK 2.2及更高版本。 在
    以前版本的**中,不支持 NDK RTSC 配置,您应该将其注释掉。
    */
    var Global = xdc.useModule('ti.ndk.config.Global');
    ////////// Global.autoOpenCloseFD = true;//SSS ////
    Global. stackLibType = Global. Min;
    /*
    **这允许创建心跳(轮询函数),但不生成栈线程
    **
    在 CDOC (帮助文件)中查看可以配置哪些 CfgAddEntry 项目。 我们告诉它不要
    **创建任何堆栈线程(服务),因为我们在主任务
    **线程 hpdspuaStart 中自行配置这些线程。
    //
    Global. enableCodeGeneration =
    true;
    // false;
    
    
    //定义一个变量,将 MSMCSRAM 的 MAR 模式设置为所有可高速缓存*/
    var Cache = xdc.useModule('ti.sysbios.family.c66.Cache');
    //Cache .MAR224_255 = 0x0000000f;
    
    
    var 启动 = xdc.useModule('xdc.runtime.Startup');
    
    var 系统 = xdc.useModule('xdc.runtime.System');
    
    
    
    /*
    **创建堆。
    //*//////////////////////////
    SSS Mamory 地图//////////////////////////// ///**/
    var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
    var heapMemParams = new HeapMem.Params ();
    heapMemParams.size = 0x30000;//0x30000;// 0x30000-min!!!!!;//// 0x300000;
    heapMemParams.sectionName ="systemHeap";
    Program.sectMap["systemHeap"]="MSMCSRAM";//SSS /////"DDR3";//
    Program.global.heap0 = HeapMem.create (heapMemParams);
    Memory.defaultHeapInstance = Program.global.heap0;
    
    //这是默认的内存堆。 //////////////////////
    SSS////
    //Memory.defaultHeapInstance = Program.global.heap0;
    Program.sectMap["sharedL2"]="L2SRAM";
    //// SSS//// Program.sectMap["systemHeap"]="MSMCSRAM";
    Program.sectMap[".sysmem"]="L2SRAM";
    Program.sectMap[".args"]="L2SRAM";
    Program.sectMap[".cio"] ="L2SRAM";
    Program.sectMap[".far"]="L2SRAM";
    Program.sectMap[".rodata"]="L2SRAM";
    Program.sectMap[".neardata"]="L2SRAM";
    Program.sectMap[".cppi"]="L2SRAM";
    Program.sectMap[".init_array"]="L2SRAM";
    Program.sectMap[".qmss"]="L2SRAM";
    Program.sectMap[".cinit"]="L2SRAM";
    Program.sectMap[".bss"]="L2SRAM";
    Program.sectMap[".const"]="L2SRAM";
    Program.sectMap[".text"]="L2SRAM";
    Program.sectMap[".code"]="L2SRAM";
    Program.sectMap[".switch"]="L2SRAM";
    Program.sectMap[".data"]="L2SRAM";
    Program.sectMap[".fardata"]="L2SRAM";
    //Program.sectMap[".args"]="L2SRAM";
    //Program.sectMap[".cio"]="L2SRAM";
    Program.sectMap[".vecs"]="L2SRAM";
    Program.sectMap["platform_lib"]="L2SRAM";
    
    Program.sectMap[".far:taskStackSection"]="L2SRAM";
    Program.sectMap[".stack"]="L2SRAM";
    Program.sectMap[".nimu_eth_ll2"]
    
    
    Program.sectMap[".resmgr_pa"]
    
    
    Program.sectMap[".far:NDK_PACKETMEM"]="L2SRAM";Program.sectMap[".resmgr_memregion"]={loadSegment:"L2SRAM"、loadAlas:128};//* QMSS 描述符区域*/ Program.sectMap[".resmgr_handles"] Program.sectMap[".far:NDK_OBJMEM"]={loadSegment:"L2SRAM"、loadSRAM:16};// CPPI/QMS/PA 句柄*={L2SRAM""、Program.sectMap[".far:IMAGEDATA"]={L2SRAM""}:={L2SRAM""}:: "L2SRAM"、loadAlign:128};
    
    
    
    如果使用 System_printf 在控制台上输出*/
    SysStd、则需要//= xdc.useModule('xdc.runtime.SysStd');
    System.SupportProxy = SysStd;
    
    /
    *定义将始终运行的挂钩和静态任务。*
    * /////DDR_CNTRL
    
    
    
    Startup.lastFxns.$add ('&DDR_CNTRL');////////////////////////////// SSS///////////////
    
    /*
    **为我们的应用程序创建堆栈线程任务。
    //
    var tskNdkStackTest= Task.create ("&StackTest");
    tskNdkStackTest.STACKSIZE=0x1400;
    tskNdkStackTest.priority =0x5;
    
    
    /*
    **创建一个周期性任务来处理所有 NDK 轮询函数。
    **如果您使用的是 NDK 2.2及更高版本的 RTSC 配置,则默认情况下会完成此操作
    ,**您不需要执行此操作。
    */
    * var prdNdkClkParams = new Clock.Params ();
    prdNdkClkParams.period = 0x64;
    prdNdkClkParams.startFlag = true;
    Program.global.clockInst1 = Clock.create ("&llTimerTick"、5、prdNdkClkParams);
    //
    
    *
    **如果您使用的是 NDK 2.2及以上版本的 RTSC 配置,则默认情况下会执行此操作
    ,否则**寄存器挂钩以便栈可以跟踪所有任务创建
    Task.common$.namedInstance = true;
    Task.addHookSet ({注册器 Fxn:'&NDK_hookInit',createFxn:'&NDK_hook',创建});
    
    /*启用 BIOS 任务调度程序*/BIOS.taskEnabled
    = true;
    
    //
    *在此处启用事件组并为特定 GEM 注册 ISR INTC *
    使用 EventCombiner_dispatchPlug()和 Hwi_EventMap() API
    */ecm.eventGroupHwiNum[0]
    
    = 7;
    ecmC.eventHwiNum[1]= 8;
    ecmc2[pargroup2.params]
    =
    0group2;vmcums/swiNum[new]= 0group3;
    sem0Params.instance.name ="semaNDK";
    sem0Params.mode = Sem.Mode_binary;
    Program.global.semaNDK = Sem.create (null、sem0Params);
    var timer0Params = new Timer.Params ();
    timer0Params.instance.name ="timer0";
    timer0Params.period = 50000;
    timer0Params.periodType = XDC.module ("ti.sysbios.interfaces.ITimer").PeriodType_COUNTS;
    Program.global.timer0 = Timer.create (-1、 "&Timer0_func"、timer0Params);
    BIOS.libType = BIOS.LibType_Debug;
    BIOS.cpufreq.lo = 1200000000;
    Global. ipv6 = false;
    Global.netSchedulerPri = Global. nC_Priority_Low;
    Global.networkOpenHook ="&NetOpenHook";
    Global.networkCloseHook ="&NetCloseHook";
    Ip.autoIp = false;
    ip.address ="192.168.30.78";
    ip.mask ="255.255.255.0;
    ip.gatewayIpAddr ="192.168.30.1";
    Global. kernTaskPriLevel = 9;
    Global. highTaskPriLevel = 7;
    Task.numPriorities = 16; 

    如果我将 Task2Func()优先级更改为另一个数字,则不会运行 dtask_udp_hello。 Task2Func()在没有中断的情况下工作。
    当我 增加堆时、它的工作时间会更长、但结果是我接收到相同的错误。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果我将 Task2Func()优先级更改为另一个数字,则不会运行 dtask_udp_hello。 Task2Func()在没有中断的情况下工作。当我增加堆时,它的工作时间会更长,但结果我会收到相同的错误。