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.

[参考译文] CCS/MSP432P401R:在不使用空闲模块的情况下获取CPU和任务负载。

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

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/606722/ccs-msp432p401r-get-cpu-and-task-load-without-using-idle-module

部件号:MSP432P401R
“Thread:SysBIOS”中讨论的其它部件

工具/软件:Code Composer Studio

下午好!

目前,我正在使用RTOS分析器中的负载分析来检查我的应用程序的任务负载。 但是,我禁用了空闲模块,因此,我需要在另一个任务中加载信息。 我已启用加载模块任务并将updateInIdle设置为False。 我将函数" Load_idleFxn()"放在其中一个任务中,但“加载分析”显示0个记录。 另一方面,我使用了Load_update(),但我的应用程序出现崩溃:

FSR = 0x0000
HFSR = 0x4000万
DFSR = 0x0.0001万
MMAR = 0x140f0500
BFAR = 0x140f0500
AFSR = 0x0万
正在终止执行...

我试图增加模块的堆栈大小,但没有成功。

关于如何使“任务负载”和“CPU负载”在没有空闲任务的情况下工作,有什么建议?

提前感谢!

卡门

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

    您正在使用哪个版本的SimpleLink SDK (或用于MSP43x的TI-RTOS)?  您是否可以附加.cfg文件以便我们尝试重现该问题?

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

    我正在使用TIRTOS MSP432 2.20 .00.06。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Carmen:

    谢谢。 是否可以附加.cfg文件?

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

    当然,在这里。

    VAR GateMutexPri = xdc.useModule('ti.sysbios.gates.GateMutexPri');
    VAR邮箱= xdc.useModule('ti.sysbios.knl.Mailbox');



    /*================= 默认(模块)配置================= */
    VAR默认值= xdc.useModule('xdc.runtime.Defaults');

    /*
    *允许在目标上装载模块名称的标志。 模块名称
    *字符串放置在.const节中以进行调试。
    *
    *选择一项:
    *- true (默认)
    * 将此参数设置为true将在.const中包括名称字符串
    * 部分,以便更容易调试错误和断言。
    *-错误
    * 将此参数设置为false将减少.const中的占用空间
    * 部分。 因此,Error和Assert消息将包含
    * “未知模块”前缀,而不是实际模块名称。
    */
    Defaults.common$.namedModule =正确;
    //Defaults.common$.namedModule =假;



    /*================= 错误配置================= */
    VAR错误= xdc.useModule('xdc.runtime.Error');
    /*
    *调用此函数是为了处理所有引起的错误,但与不同
    * Error.raiseHook,此函数负责完全处理
    *正确初始化的Error_Block出错。
    *
    *选择一项:
    *- Error.policyDefault (默认)
    * 使用已初始化的Error_Block结构和日志调用Error.raiseHook
    * 使用模块记录器时出现错误。
    *- Error.policySpin
    * 一种简单的替代方案,可在while (1)循环上捕获最小化目标
    * 占地面积。
    * 使用Error.policySpin时,将不会调用Error.raiseHook。
    */
    error.policyFxn = Error.policyDefault;
    //Error.policyFxn = Error.policySpin;

    /*
    *如果Error.policyFxn设置为Error.policyDefault,则调用此函数
    *当错误模块引发错误时。
    *
    *选择一项:
    *- Error.print (默认)
    * 错误通过System_printf()进行格式化和输出,以便于操作
    * 调试。
    *-空
    * 错误未格式化或记录。 此选项可减少代码占用空间。
    *-非空函数
    * 调用自定义用户函数时出错。 请参阅错误模块说明文件
    * 了解更多详细信息。
    */
    error.raiseHook = Error.print;
    //Error.raiseHook =空;
    //Error.raiseHook ="&myErrorFxn";

    /*
    *如果Error.policyFxn设置为Error.policyDefault,则此选项适用于
    * Error.raiseHook函数可递归的最大次数
    *已调用。 此选项限制无限递归的可能性
    *可能导致堆栈溢出。
    *默认值为16。
    */
    error.maxDepth = 2;
    VAR m3Hwi = xdc.useModule('ti.sysbios.family.arm.m3.Hwi');
    //halHwi.checkStackFlag =假;

    /*
    *以下选项会在出现硬件异常时改变系统的行为
    检测到*。
    *
    *选择一项:
    *- hwi.enableException = TRUE
    * 此选项将使默认的m3HWI.excHandlerFunc函数完全运行
    * 解码异常并将寄存器转储到系统控制台。
    * 此选项会在错误模块中产生错误并显示
    * ROV中出现异常。
    *- hwi.enableException = FALSE
    * 此选项通过不解码或打印来减少代码占用空间
    * 系统控制台异常。
    * 但它仍会在错误模块中产生错误并显示
    * ROV中出现异常。
    *- hwi.excHandlerFunc =空
    * 这是节省代码占用空间的最积极的选择;但它是
    * 很难调试异常。 它将闪存占用空间减少了
    * 出现异常时插入默认While (1)陷阱。 此选项
    * 错误模块未引起错误。
    */
    m3HWI.enableException =真;
    //m3HWI.enableException = FALSE;
    //m3HWI.excHandlerFunc =空;

    /*
    *除以零时启用硬件异常生成。
    *
    *选择一项:
    *- 0 (默认)
    * 除以零时禁用硬件例外
    *- 1.
    * 除以零时启用硬件例外
    */
    m3HWI.nvicccc.DIV_0_TRP = 0;
    //m3HWI.nvicccr.DIV_0_TRP = 1;

    /*
    *为无效数据对齐启用硬件异常生成。
    *
    *选择一项:
    *- 0 (默认)
    * 禁用数据对齐的硬件例外
    *- 1.
    * 启用数据对齐的硬件例外
    */
    m3HWI.nvicccc.UNALIGN_TRP = 0;
    /*
    *空闲模块用于指定要在否时调用的函数列表
    *系统中正在运行其他任务。
    *
    *此处添加的功能将在空闲任务中持续运行。
    *
    *功能签名:
    * void func(void);
    */
    //Idle.addFunc("&myIdleFunc");



    /*================= 内核(SYS/BIOS)配置================= */
    VAR BIOS = xdc.useModule('ti.sysbios.BIOS');
    /*
    *在BIOS库中启用断言。
    *
    *选择一项:
    *- true (默认)
    * 启用用于调试的断言。
    *-错误
    * 禁用断言以减少代码占用空间并提高性能。
    */
    bios.assertsEnabled =真;
    //bios.assertsEnabled =假;

    /*
    *指定BIOS的默认堆大小。
    */
    BIOS.heapSize = 8192;

    /*
    *用于确定是否将xdc.runtime源代码包括在自定义中的标志
    *构建的BIOS库。
    *
    *选择一项:
    *- FALSE (默认)
    * 预构建的xdc.runtime库由相应的目标提供
    * 用于构建应用程序。
    *-正确
    * xdc.runtime库源代码将包含在自定义BIOS中
    * 库。 此选项可在两个代码中生成最有效的库
    * 占用空间和运行时性能。
    */
    BIOS.includeXdcRuntime =假;
    //BIOS.includeXdcRuntime =真;

    /*
    * SYS/BIOS运行时以链接库的形式提供
    *。 随提供了此库的多种形式
    * SYS/BIOS产品。
    *
    *选择一项:
    *- BIOS.LibType_Custom
    * 针对代码占用空间和进行了高度优化的自定义构建库
    * 运行时性能。
    *- BIOS.LibType_Debug
    * 可用于的未优化的自定义构建库
    * 使用调试器的单步API。
    *
    */
    BIOS.libType = BIOS.LibType_Custom;
    //BIOS.libType = BIOS.LibType_Debug;

    /*
    *运行时实例创建启用标志。
    *
    *选择一项:
    *- true (默认)
    * 允许在运行时调用Mod_create()和Mod_delete()
    * 动态内存分配需要缺省堆。
    *-错误
    * 通过禁止Mod_create()和Mod_delete()到来减少代码占用空间
    * 在运行时调用。 对象实例是通过构建的
    * mod_construct()和通过Mod_析 构()销毁。
    */
    BIOS.runtimeCreatesEnabled =正确;
    //BIOS.runtimeCreatesEnabled =假;

    /*
    *在BIOS库中启用日志。
    *
    *选择一项:
    *- true (默认)
    * 启用日志以进行调试。
    *-错误
    * 禁用日志记录以减少代码占用空间和改进运行时
    * 性能。
    */
    bios.logsEnabled =真;
    //bios.logsEnabled =假;



    /*================= 内存配置================= */
    VAR内存= xdc.useModule('xdc.runtime.Memory');
    /*
    *内存模块本身只是为任何提供一个通用接口
    *各种系统和应用程序特定的内存管理策略
    *由IHeap模块实现(如 HeapMem,HeapBuf)。
    */



    /*================= 程序配置================= */
    /*
    * Program.stack在IAR中被忽略。 使用中的项目选项
    * IAR嵌入式工作台可更改系统堆栈大小。
    */
    如果(!Program.build.target.$name.match (/IAR/)){
    /*
    *减少要减小的系统堆栈大小(ISR和Swis使用)
    * RAM使用情况。
    */
    program.stack = 768;
    }



    /*
    *启用GNU目标半主机以打印到CCS控制台
    */
    如果(Program.builp.target.$name.match(/GNU/){
    VAR SemiHost = xdc.useModule('ti.sysbios.rts.gnu.SemiHostSupport');
    }
    /*
    *软件中断是将函数封装为的对象
    *已执行且为优先级。 软件中断按优先顺序排列,预先排除任务
    和被硬件中断服务例程抢占。
    *
    *包含此模块是为了允许用户应用程序中的Swi。
    */



    /*================= 系统配置================= */
    VAR系统= xdc.useModule('xdc.runtime.System');
    /*
    *当系统异常退出时,将调用Abort处理程序。
    *
    *选择一项:
    *- System.abortStd (默认)
    * 调用ANSI C标准'abort()'终止应用程序。
    *- System.abortSpin
    * 在while (1)陷阱中无限循环的轻量中止功能
    * 功能。
    *-自定义中止处理程序
    * 用户定义的函数。 请参阅的系统模块说明文件
    * 详细信息。
    */
    system.abortFxn = System.abortStd;
    //System.abortFxn = System.abortSpin;
    //System.abortFxn ="&myAbortSystem";

    /*
    *当系统正常退出时,调用Exit处理程序。
    *
    *选择一项:
    *- System.exitStd (默认)
    * 调用ANSI C标准'exit()'终止应用程序。
    *- System.exitSpin
    * 在while (1)陷阱中无限循环的轻量级退出功能
    * 功能。
    *-自定义退出功能
    * 用户定义的函数。 请参阅的系统模块说明文件
    * 详细信息。
    */
    System.exitFxn = System.exitStd;
    //System.exitFxn = System.exitSpin;
    //System.exitFxn ="&myExitSystem";

    /*
    *最小化系统模块中的退出处理程序数组。 系统模块包括
    *在System_atexit()中注册的函数数数数组,即
    *由System_exit()调用。 默认值为8。
    */
    System.maxAtexitHandlers = 2;

    /*
    * System.SupportProxy定义了System的低级实现
    *函数,如System_printf(),System_flush()等
    *
    *选择一对:
    *- SYSMIN
    * 此模块维护一个内部可配置循环缓冲区
    * 存储输出,直到调用System_flush()。
    * 循环缓冲区的大小通过SYSMIN.bufSize设置。
    *- SysCallback
    * SysCallback允许用户定义的系统API实现。
    * SysCallback支持代理的代码占用空间更小,而且可以
    * 用于提供自定义System_printf服务。
    * 默认SysCallback函数指向stub函数。 请参阅
    * SysCallback模块的文档。
    */
    VAR SYSMIN = xdc.useModule('xdc.runtime.SysMin');
    SYSMIN.bufSize = 128;
    System.SupportProxy = SYSMIN;
    //var SysCallback = xdc.useModule('xdc.runtime.SysCallback');
    //System.SupportProxy = SysCallback;
    //SysCallback.abortFxn ="&myUserAbort";
    //SysCallback.exitFxn ="&myUserExit";
    //SysCallback.flushFxn ="&myUserFlush";
    //SysCallback.putchFxn ="&myUserPutch";
    //SysCallback.readyFxn ="&myUserReady";




    /*================= 任务配置================= */
    VAR任务= xdc.useModule('ti.sysbios.knl.Task');
    /*
    *检查任务堆栈是否有溢出情况。
    *
    *选择一项:
    *- true (默认)
    * 在期间启用任务堆栈溢出条件的运行时检查
    * 上下文切换("从"和"到")
    *-错误
    * 禁用任务堆栈溢出条件的运行时检查。
    */
    Task.checkStackFlag =正确;
    //Task.checkStackFlag =假;

    /*
    *创建任务时设置默认任务堆栈大小。
    *
    *默认值取决于所使用的设备。 减少默认堆栈
    *大小可节省更多内存。
    */
    Task.defaultStackSize = 512;

    /*
    *启用空闲任务。
    *
    *选择一项:
    *- true (默认)
    * 创建优先级为0的任务,该任务调用空闲挂机功能。 这个
    * 选项必须设置为true才能获得电源提供的节能
    * 模块。
    *-错误
    * 未创建空闲任务。 此选项占用的内存与否一样少
    * 需要其他默认任务堆栈。
    * 要通过电源模块节省电源而不执行空闲任务,
    * 将Idle.run添加为Task.allBlockedFunc。
    */
    //Task.enableIdleTask =真;
    task.enableIdleTask = false;
    //Task.allBlockedFunc = Idle.run;

    /*
    *如果Task.enableIdleTask设置为true,则此选项将设置空闲任务的
    *堆栈大小。
    *
    *减少闲置堆栈大小可节省更多内存。
    */
    Task.idleTaskStackSize =512;

    /*
    *减少任务优先级的数量。
    *默认值为16。
    *减少任务优先级数量可节省内存。
    */
    task.numPriums = 32;



    /*================= 文本配置================= */
    VAR文本= xdc.useModule('xdc.runtime.Text');
    /*
    *这些字符串位于.const部分。 将此参数设置为
    * FALSE将节省.const部分的空间。 错误,断言和日志消息
    *将打印原始ID和参数,而不是格式化的消息。
    *
    *选择一项:
    *- true (默认)
    * 此选项将测试字符串加载到.const中,以便于调试。
    *-错误
    * 此选项可减少.const占用空间。
    */
    text.isLoded =真;
    //text.isLoded =假;



    /*================= 类型配置================= */
    VAR类型= xdc.useModule('xdc.runtime.Types');
    /*
    *本模块定义了整个中使用的基本常量和类型
    * xdc.runtime软件包。
    */



    /*================= TI-RTOS中间件配置================= */
    VAR mwConfig = xdc.useModule('ti.mw.Config');
    /*
    *包括TI-RTOS中间件库
    */



    /*================= TI-RTOS驱动程序的配置================= */
    VAR驱动程序Config = xdc.useModule('ti.drivers.Config');
    /*
    *包括TI-RTOS驱动程序
    *
    *选择一项:
    *-驱动程序Config.LibType_noninstrumented (默认)
    * 使用针对占用空间和性能进行优化的TI-RTOS驱动程序库
    * 没有断言或日志。
    *-驱动程序Config.LibType_Instrumented
    * 使用TI-RTOS驱动程序库在启用断言和日志的情况下进行调试。
    */
    driversConfig.libType =驱动程序Config.LibType_noninstrument;
    //driversConfig.libType = driversConfig.LibType_instrumented;



    /*================= 特定于应用程序的实例================= */

    /*================= 诊断配置================= */
    VAR Diags = xdc.useModule('xdc.runtime.Diags');
    /*
    *您可以使用Diags模块设置和清除模块诊断中的位
    *用于控制该模块内诊断的掩码。 A
    *模块诊断掩码控制Assert和Log语句
    *在该模块中,禁用这些语句将产生结果
    *代码节省。
    */

    /*================= 日志记录配置================== */
    VAR日志= xdc.useModule('xdc.runtime.Log');
    /*
    *模块和应用程序代码通过调用生成Log_Event事件
    *日志模块的功能。
    *在此处禁用所有Log语句将允许优化器完全运行
    *从应用程序中删除所有日志代码。
    *
    *注意:为了在应用程序中生成日志事件,需要同时使用Diags
    * 并且必须设置日志掩码。 请参阅的SYS/BIOS API指南
    * 更多信息。
    */

    /*
    *登录设置将TI-RTOS模块配置为捕获用户指定的信息
    *如CPU负载,任务负载和任务执行等
    *由系统分析仪显示。
    */
    VAR登录设置= xdc.useModule('ti.uia.sysbios.LoggingSetup');
    LoggingSetup.loadLoggerSize =256;
    LoggingSetup.mainLoggerSize =512;
    LoggingSetup.sysbiosLoggerSize =1024;



    /*================= 主配置================= */
    VAR主要= xdc.useModule('xdc.runtime.Main');
    /*此主模块的配置用于所有不在模块中的代码*/
    LoggingSetup.loadTaskLogging = true;
    VAR负载= xdc.useModule('ti.sysbios.utils.Load');
    load.updateInIdle =假;
    load.taskEnabled =真;


    卡门
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢。 我已经重现了这个问题。 我更深入地研究这个问题,但在美国度假的时候,它会被推迟一天左右。