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/MSP432P401R:深度睡眠模式未执行

Guru**** 2577385 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/592095/rtos-msp432p401r-deep-sleep-mode-not-getting-executed

部件号:MSP432P401R
主题中讨论的其他部件:MSPWARE

工具/软件:TI-RTOS

大家好,

我设计的固件具有所有功能,并且设计的固件基于TI-RTOS。

问题是,即使将电源策略更改为"PowerMSP432_DeepPolicy",固件似乎也不会进入深度睡眠模式。

我验证了这一点,但逐步执行Power_Sleep函数和 PowerMSP432_deepPolicy函数,但固件不输入IF语句  

如果((((sleepState == PowerMSP432_DeepSleep_0)||
(sleepState == PowerMSP432_DeepSleep_1)&&
(PowerMSP432_config.enableParking == true))

原因是sleep_state的值始终显示1,表示 PowerMSP432_Sleep,但从不获得2的值(PowerMSP432_DeepSleep_0)两者都不是4(PowerMSP432_DeepSleep_1)

我还尝试逐步使用 PowerMSP432_deepPolicy函数,发现执行永远不会进入第一个IF语句  

如果(约束和(1 << PowerMSP432_disallow_sleep)|
(1 << PowerMSP432_Disallow_DeepSleep_0)|
(1 << PowerMSP432_Disallow_DeepSleep_1))= 0)

因为这是调用Power_Sle(PowerMSP432_DeepSleep_1)功能的设备。

请有人帮助我吗?

如果有任何使用RTOS的LPM3模式的示例代码,也很方便。

提前感谢您的参与,

Vikram

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好Vikram:
    据我了解,资源管理器中有一个LPM3示例。 我们将了解您所描述的顺序。

    dev.ti.com/.../

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

    谢谢Chris,

    我将等待您的回复。

    我看了示例代码,它在其中只调用函数Power_setPolicy()。

    即使我也尝试了同样的东西,但我仍然看不到MCU进入深度睡眠模式。

    谢谢你

    Vikram

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

    您是否有机会调查此问题?
    因为我尝试调试并发现即使它调用函数,但我们可以看到执行的深度睡眠策略。

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

    仍在等待任何人回复此问题,因为它进一步阻滞了我的发展。

    请提供帮助。

    谢谢你

    Vikram

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

    Vikram,

     为了测试这些命令,我正在运行当前MSP432 SDK (v_1_00_30_00_40)中的powerdeepsleep_MSP_EXP432P401R_TIrtos_CCS示例。 运行此示例时,我得到测量的IDD=9uA,表示设备未进入LPM3 (或更低)。 相反,此电流表示LPM0。

    我们目前正在测试MSP432 SDK的下一个季度版本,在运行新SDK中的_Same示例时,我获得了~1.6uA (LPM3或4)的测量电流。 因此,即使不跟踪代码,我认为我们可以说新的SDK解决了问题。  我正在跟进软件团队以了解所做的更改。

    我应该能够在星期一获得更多信息,但同时,您能否从您的安装中运行powerdeepsleep示例,并告诉我您在LaunchPad上获得的当前测量结果?  请注意,在对电路板编程后,您必须断开JTAG并关闭电源以获得准确的结果。

    此致,

     Bob

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

    谢谢你Bob。

    我将尝试你刚才提到的建议,并在今天回复你。

    Vikram

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

    我安装了CCSv7,还下载了用于MSP432的SDK,其中我获得了您提到的示例代码。
    运行该代码并按下按钮,MCU将进入DeepSleep模式并显示9.5 uA的电流消耗。

    现在有更多的疑问:SDK与非SDK版本的TI-RTOS for MSP432之间有何区别。
    从现在开始,我一直在运行和开发“tirtos_msp43x_2_20_00_06”集的固件,现在,SDK是您在论坛“simplelink_msp432_sdk_1_30_00_40”中提到的,因为后面的是DeepSleep示例。

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

    该命名(tirtos_msp43x_xxx)类似于MSPware。  对于MSP432行,应使用SimpleLink SDK代码,这是以后支持的代码。

    另外,请注意,您可以进一步降低将IOS设置为接地的功率。  下一个版本中的示例将包括执行此操作的代码。  我已附上初步版本供您使用here.e2e.ti.com/.../1526.powerdeepsleep.c

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

    感谢Bob提供的信息。

    我仍然怀疑这不是RTOS,而是MSPware,正如您所提到的,原因有两个。

    首先,命名文件夹的名称本身提到"tirtos_msp43x_2_20_00_06" tirtos,其次,我仍然可以从该命名文件夹中获取RTOS示例。

    我要附上提取 了e2e.ti.com/.../fatsdraw.rar的示例代码

    请给出建议。

    谢谢你

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    还有一件事我发现SDK版本的所有示例代码没有任何.cfg文件,该文件位于"tirtos_msp43x_2_20_00_06"命名文件夹中。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Vikram,
    我所说的不是太多,而是RTOS或不是。 相反,您提到的库是MSPware软件包的一部分,它将不会收到MSP432系列的进一步更新。 以后要使用的SDK是SimpleLink 432 SDK。 RTOS和非RTOS示例均可在该软件包中找到。 对于基于RTOS的示例,您将不会在CCS项目中找到.cfg文件,因为项目将TI-RTOS作为单独的依赖项目引用。 您将在该依赖项目中找到.cfg文件。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢Bob,

    这对我来说更清楚了。

    因此,接下来的最佳做法是使用SimpleLink SDK版本。

    还有一个问题。 是否有分步说明从我使用的版本迁移到SimpleLink SDK的文档。

    我在理解过程中遇到的挑战是FatF固件的实施,因为在提供的文档中,它指出应用程序必须处理SimpleLink SDK版本的FatF库。

    谢谢你

    Vikram

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    正确。 在TI驱动程序示例中找不到.cfg文件。 RTOS配置(.cfg文件)在RTOS项目中完成,而不是在用户应用程序中完成。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Bob,您好!

    我已经安装了用于MSP432的SDK版本,并执行了DeepSleep示例。

    在本例中,我看到deepsleep函数是在Power_setPolicy中设置的,当在PowerMSP432_tirtos.c文件中调用DeepSleep函数时,在执行“Power_getConstraintMask”函数后,约束的值显示为'0'。

    但是,当我尝试在我的固件中使用相同的概念时,我发现约束返回值为26。

    不知道这种情况的原因和方式。 请您解释一下。

    谢谢你

    Vikram

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此外,由于我们使用的是看门狗计时器概念,我在WatchdogMSP432.c驱动程序文件中阅读了“WatchdogMSP432_OPEN”函数,其中提到了以下陈述:
    如果处于看门狗模式或,则不支持低于LPM0的电源模式
    *在间隔模式下,使用SMCLK或ACLK作为时钟源。
    *此外,无法连接到3.5。

    这是否意味着,如果我们要在间隔模式下使用监视程序,则除了常规休眠模式外,我们不能使用任何其他休眠模式(即,不支持DeepSleep策略)
    Vikram
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS使用什么计时器来计时? 您使用的是默认设置还是将其更改为RTC (或其他)。 使用默认计时器时,您无法进入某些低功耗模式。 此页面详细介绍了它: processors.wiki.ti.com/.../TI-RTOS_MSP432_Timer

    请注意,如果愿意,您仍可以在应用程序项目中保留.cfg。 我们在单独的项目中提供了大多数驱动程序示例和.cfg文件,因为这样我们就可以1)轻松共享通用配置,2)更轻松地在TI-RTOS和FreeRTOS之间移动项目。 我们将.cfg保留在内核示例中,因为这样可以调整.cfg以突出显示特定功能。

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

    感谢Todd的回复。

    我将尝试您提供的网页链接上提到的变通方案。

    Vikram

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    听起来不错。 我刚刚调整了那一页。 有了新的SDK,WDT_A_CLOCKSOURCE_XCLK就消失了。 宏存在是一个错误,已被删除。 您需要将WDT_A_CLOCKSOURCE_BCLK与较新的SDK一起使用(如我提供的链接中所述)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Todd,您好!

    感谢您让我了解更新。

    有一个挑战。

    根据您发送链接的与MSP432计时器相关的文档,它表示为TI-RTOS使用看门狗计时器而不是MSP432计时器,以获得低功耗模式(LPM3)的优势。

    现在我所构建的应用程序已经在使用看门狗计时器每6小时做一些活动,看门狗在间隔模式下使用。

    那么,在这种情况下,我将如何为TI-RTOS使用相同的看门狗计时器来驱动计时?

    根据《了解》中的MSP432用户指南,只有一个看门狗计时器。

    您能提出建议吗?

    谢谢你

    Vikram

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请使用RTC代替内核。 您需要对它执行类似的driverlib set调用,而不是WDT。

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

    Todd,您好!

    我尝试使用您提到的将RTC用于内核时钟的概念,但没有成功。

    是否有任何示例显示使用RTC而不是MSP432计时器来驱动TI-RTOS计时的实施?

    如果有一个就好了。

    谢谢你

    Vikram

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

    Todd,您好!

    感谢您对使用RTC的建议。

    我确实实现了使用RTC进行RTOS计时而不是使用默认MSP432计时器的概念。

    我仍然面临同样的问题。

    根据您转发的文档,我将随附需要修改的文件

    以下是在这些文件中所做的更改:

    MSP_EXP432P401R.c文件

    void MSP_EXP432P401R_initGeneral (void)

    POWER_INIT();

    /*请勿进入LPM4,因为我们需要看门狗保持激活*/
    Power_setConstraint (PowerMSP432_Disallow_DeepSleep_1);

    //MAP_WDT_A_HoldTimer();
    MAP_RTC_C_HoldClock();
    //MAP_WDT_A_initIntervalTimer (WDT_A_CLOCKSOURCE_BCLK,WDT_A_CLOCKITERATIONS_8192);
    MAP_RTC_C_initCalendar (&CurrentTime,RTC_C_FORMAT_BINARY);
    //MAP_WDT_A_clearTimer();
    //MAP_WDT_A_startTimer();
    MAP_RTC_C_startClock();

    }

    /*
    *=================================== 电源===================================
    */
    CONST PowerMSP432_ConfigV1 PowerMSP432_config ={
    policyInitFxn =&PowerMSP432_initPolicy,
    .policyFxn =&PowerMSP432_deepPolicy,
    .initialPerfLevel = 2,
    .enablePolicy = TRUE,
    .enablePerf = TRUE,
    .enableParking = TRUE
    };

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    在执行任务后的应用程序文件中,我调用以下函数:

    Power_setPolicy((Power_PolicyFxn)PowerMSP432_deepPolicy);

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    在main_tirtos.c文件中,我定义了函数:

    /*
    *========= 内核时钟==========
    *这将使内核的时钟刻度提前
    */
    Void RTCIsrFun (UArg参数)

    Clock_tick();
    }

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    另外,我在修改后附加.cfg文件。

    /*
    版权所有(c) 2015-2017,2017,Texas Instruments Incorporated
    *保留所有权利。
    *
    **
    允许以源代码和二进制格式重新发布和使用,无论是否进行*修改,只要
    满足以下条件*:
    *
    ****重新发布源代码必须保留上述版权
    *声明,此条件列表和以下免责声明。
    *
    ***以二进制格式重新分发时,必须在
    
    随分发提供的*文档和/或其他材料中复制上述版权*声明,此条件列表和以下免责声明。
    *
    ***
    
    未经事先书面许可,不得使用德州仪器(TI)公司的名称或*其贡献者的名称来支持或促销由本软件衍生的产品*。
    *
    *本软件由版权所有者和贡献者"按原样"提供
    *,
    
    不提供任何明示或暗示的担保,包括但不限于*对适销性和特定*用途适用性的暗示担保。 在任何情况下,版权所有者或
    *贡献者均不对任何直接,间接,附带,特殊,
    *示范, 或后果性损害(包括但不限于
    *购买替代商品或服务;使用,数据或利润损失;
    (*或业务中断),但根据任何责任理论
    ,*无论是合同,严格责任还是侵权行为(包括疏忽或
    *其他),均因使用本软件而导致*
    ,即使已被告知此类损害的可能性。
    */
    
    
    
    /*================= 时钟配置================= */
    var Clock = xdc.useModule('ti.sysbios.knl.Clock');
    Clock.tickSource = Clock.TickSource_user;
    /*
    默认值取决于家族。 例如,Linux系统通常仅
    *支持最低1万 us和1万 us的倍数。
    * TI平台的默认值为1000 us。
    */
    Clock.tickPeriod =1000;
    
    
    
    /*================= 默认(模块)配置================= */
    var Defaults = xdc.useModule('xdc.runtime.Defaults');
    /*
    允许在目标上装载模块名称的标志。 模块名称
    *字符串放置在.const节中以进行调试。
    *
    **选择一项:
    *- TRUE (默认)
    * 将此参数设置为true将在.const
    *中包括名称字符串 部分,以便更容易调试错误和断言。
    *-错误
    * 将此参数设置为false将减少.const
    *中的占用空间 部分。 因此,Error和Assert消息将包含
    * “未知模块”前缀,而不是实际模块名称。
    */
    Defaults.common$.namedModule = true;
    //Defaults.common$.namedModule = false;
    
    
    
    /*================= 错误配置================= */
    var Error = xdc.useModule('xdc.runtime.Error');
    /*
    调用此函数来处理所有引起的错误,但与
    * Error.raiseHook不同,此函数负责使用
    正确初始化的Error_Block完全处理*错误。
    *
    **选择一个:
    *- Error.policyDefault (默认)
    * 使用已初始化的Error_Block结构和日志
    *调用Error.raiseHook 使用模块记录器时出现错误。
    *- Error.policySpin
    * 一种简单的替代方案,可在While (1)循环上捕获最小化目标
    * 占地面积。
    * 使用Error.policySpin时,将不会调用Error.raiseHook。
    *- Error.PolicyIn
    * 轻量级策略功能,可实现最少的处理和返回。
    */
    Error.policyFxn = Error.policyDefault;
    //Error.policyFxn = Error.policySpin;
    //Error.policyFxn = Error.PolicyMin;
    
    /*
    如果Error.policyFxn设置为Error.policyDefault,则每当
    错误模块引发错误时,都会调用此函数*。
    *
    **选择一项:
    *- Error.print (默认)
    * 错误通过System_printf()进行格式化和输出,以便更容易
    * 调试。
    *-空
    * 错误未格式化或记录。 此选项可减少代码占用空间。
    *-非空函数
    * 调用自定义用户函数时出错。 请参阅错误模块文档
    * 了解更多详细信息。
    */
    Error.raiseHook = Error.print;
    //Error.raiseHook = null;
    //Error.raiseHook ="&myErrorFxn";
    
    /*
    如果Error.policyFxn设置为Error.policyDefault,则此选项适用于
    * Error.raiseHook函数可递归
    *调用的最大次数。 此选项限制
    了可能导致堆栈溢出的无限递归的可能性。
    *默认值为16。
    */
    Error.maxDepth =2;
    
    
    
    /*================= HWI配置=================== */
    var halHwi = xdc.useModule('ti.sysbios.hal.Hwi');
    var m3Hwi = xdc.useModule('ti.sysbios.family.arm.m3.Hwi');
    /*
    在Idle循环中检查Hwi (系统)堆栈溢出。
    *
    **选择一项:
    *- TRUE (默认)
    * 检查空闲循环期间系统堆栈溢出的最前面的单词和
    * 如果检测到错误,则引发错误。
    *-错误
    * 禁用运行时检查可提高运行时性能并生成
    * 减少闪存占用空间。
    */
    halHwi.checkStackFlag = true;
    //halHwi.checkStackFlag = false;
    
    /*
    当
    检测到硬件异常*时,以下选项会改变系统的行为。
    *
    *选择一个:
    *- hwi.enableException = TRUE
    * 此选项使默认m3HWI.excHandlerFunc函数完全
    * 解码异常并将寄存器转储到系统控制台。
    * 此选项会在错误模块中引起错误并显示
    * ROV中出现异常。
    *- hwi.enableException = FALSE
    * 此选项通过不解码或打印
    *来减少代码占用空间 系统控制台异常。
    * 但它仍会在错误模块中产生错误并显示
    * ROV中出现异常。
    *- hwi.excHandlerFunc =空
    * 这是节省代码占用空间的最积极的选择;但它
    * 很难调试异常。 它将闪存占用空间减少
    * 出现异常时插入默认While (1)陷阱。 此选项
    * 错误模块未引起错误。
    */
    m3HWI.enableException = TRUE;
    //m3HWI.enableException = FALSE;
    //m3HWI.excHandlerFunc = null;
    
    /*
    除以零时启用硬件异常生成。
    *
    **选择一个:
    *- 0 (默认)
    * 除以零
    *-1
    *时禁用硬件例外 除以零
    时启用硬件例外*/
    m3HWI.nvicccr.DIV_0_TRP = 0;//m3HWI.nvicccr.DIV_0_TRP
    =1;
    
    /*
    将WDT插入HWI表。 这也可以在
    运行时代码中*完成。
    */
    
    var hwi0Params = new m3HWI.Params();
    hwi0Params.instance.name ="rtcHWi";
    Program.global.rtcHwi = m3HWI.create(45,"&RTCIsrFun",hwi0Params);
    
    
    /*================= 空闲配置=========== */
    var Idle = xdc.useModule('ti.sysbios.knl.Idle');
    /*
    Idle模块用于指定
    系统中没有*其他任务运行时要调用的函数列表。
    *
    **此处添加的功能将在空闲任务中持续运行。
    *
    ***函数签名:
    * void func(void);
    *//Idle.addFunc("&myIdleFunc")
    ;
    
    Idle.addFunc('&Power_idleFunc');/*添加电源模块的闲置函数*/*========
    
    
    
    内核(SYS/BIOS)配置================= */
    var BIOS = xdc.useModule('ti.sysbios.BIOS');
    /*
    在BIOS库中启用断言。
    *
    **选择一项:
    *- TRUE (默认)
    * 启用用于调试的断言。
    *-错误
    * 禁用断言以减少代码占用空间并提高性能。
    */
    bios.assertsEnabled = true;
    //bios.assertsEnabled = false;
    
    /*
    用于确定xdc.runtime源是否包含在自定义
    *构建的BIOS库中的标志。
    *
    **选择一项:
    *- FALSE (默认)
    * 预构建的xdc.runtime库由相应的目标
    *提供 用于构建应用程序。
    *-正确
    * xdc.runtime库源代码将包含在自定义BIOS
    *中 库。 此选项在两个代码
    中生成最有效的库* 占用空间和运行时性能。
    
    *///BIOS.includeXdcRuntime = false;
    BIOS.includeXdcRuntime = true;
    
    /*
    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 = true;
    //BIOS.runtimeCreatesEnabled = false;
    
    /*
    在BIOS库中启用日志。
    *
    **选择一项:
    *- TRUE (默认)
    * 启用日志以进行调试。
    *-错误
    * 禁用日志记录以减少代码占用空间和改进运行时
    * 性能。
    */
    bios.logsEnabled = true;
    //bios.logsEnabled = false;
    
    
    
    /*=========== 内存配置================= */
    var Memory = xdc.useModule('xdc.runtime.Memory');
    /*
    内存模块本身只是为IHeap
    
    模块实施的任何*各种系统和应用程序特定的内存管理策略*提供一个通用接口(如 HeapMem,HeapBuf)。
    */
    
    /*
    使用HeapMem主堆实例使用链接程序定义的内存区域
    *在顶部添加HeapTrack以查找超写,无效释放,
    以及*帮助查找正确的堆大小和内存泄漏。
    */
    HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
    
    
    
    
    
    
    
    
    
    
    
    
    Memory.defaultHeapInstance HeapMem.primaryHeapBaseAddr ="&__primary_heapMem_start_";HeapMem.primaryHeapEndAddr ="&__primary_heap_end_";var heapMemParams = new HeapMemMemMemMemMemMemMemMemMemMemMemMemMemMemMemParams.Params();heapMemParams.usePrimaryHeap = trapheapheapms.Params.Params= xdc.useModule('ti.sysbios.heaps.HeapTrack');;=
    
    
    
    /*================= 程序配置================= */
    /*
    Program.stack必须设置为0,以便在
    示例的链接程序命令文件中设置*栈大小。
    * Program.stack的任何其他值都将被忽略。
    */
    Program.stack =0;/*
    
    
    
    取消注释以启用GNU目标半宿主以打印到CCS控制台。
    *请阅读以下TIRTOS Wiki网页,了解更多有关半托管的信息:
    * processors.wiki.ti.com/.../TI-RTOS_Examples_SemiHosting
    */
    
    if (Program.builD.target.$name.Match (/GNU/)){
    VAR SemiHost = xdc.useModule('ti.sysbios.rts.gnu.SemiHostSupport');
    }/*
    
    
    
    ================= 信号量配置================= */
    var semaphore = xdc.useModule('ti.sysbios.knl.Semaphore');
    /*
    启用对任务优先级待装队列的全局支持。
    *
    **选择一项:
    *- TRUE (默认)
    * 这允许根据任务优先级来处理待处理的任务。
    *-错误
    * 待处理任务是基于先进先出基础的服务。
    *
    **在ROM中使用BIOS时:
    * 此选项必须设置为false。
    *///semaphore.supportsPriority
    = true;
    semaphore.supportsPriority = false;
    
    /*
    允许通过信号库隐式传递事件,
    *禁用以保存其他代码。
    *
    **请选择一项:
    *-正确
    * 这允许信号量模块发布信号量和事件
    * 同时。
    *- FALSE (默认值)
    * 必须明确发布事件以取消阻止任务。
    *
    **/
    //semaphore.supportsEvents = TRUE;
    semaphore.supportsEvents = FALSE;
    
    
    
    /*=========== SWI配置================= */
    var Swi = xdc.useModule('ti.sysbios.knl.Swi');
    /*
    软件中断是封装要
    *执行的函数和优先级的对象。 软件中断按优先顺序排列,抢占任务
    *,并被硬件中断服务例程抢占。
    *
    *包含此模块是为了允许用户应用程序中的Swi。
    */
    
    
    
    /*================= 系统配置================= */
    var System = xdc.useModule('xdc.runtime.System');
    /*
    当系统异常退出时调用Abort处理程序。
    *
    **选择一个:
    *- System.abortStd (默认)
    * 调用ANSI C标准'abort()'终止应用程序。
    *- System.abortSpin
    * 在while (1) trap
    *中无限循环的轻量中止功能 功能。
    *-自定义中止处理程序
    * 用户定义的函数。 请参阅*的系统模块说明文件
    详细信息。
    */
    System.abortFxn = System.abortStd;
    //System.abortFxn = System.abortSpin;
    //System.abortFxn ="&myAbortSystem";
    
    /*
    退出处理程序在系统正常退出时被调用。
    *
    **选择一个:
    *- System.exitStd (默认)
    * 调用ANSI C标准'exit()'终止应用程序。
    *- System.exitSpin
    * 在while (1) trap
    *中无限循环的轻量级退出功能 功能。
    *-自定义退出功能
    * 用户定义的函数。 请参阅*的系统模块说明文件
    详细信息。
    */
    System.exitFxn = System.exitStd;
    //System.exitFxn = System.exitSpin;
    //System.exitFxn ="&myExitSystem";
    
    /*
    最小化系统模块中的退出处理程序阵列。 系统模块包括
    *在System_atexit()中注册的函数数数组,该函数
    组被System_exit()调用。 默认值为8。
    */
    System.maxAtexitHandlers =2;/*
    
    
    启用System_printf()以显示浮点。 如果
    您的代码启用了SYS/BIOS工具(断言/错误/日志)
    ,请使用较长的'%f%$L%$S%$F'*,*与'dbug'配置文件的典型情况相同。
    */
    System.extendedFormats ='%f%$L%$S%$F';
    //System.extendedFormats ='%f%$S';
    
    /*
    System.SupportProxy定义系统
    *功能(如System_printf (),System_flush()等
    )的低级实现*
    **请选择一个:
    *- SYSMIN
    * 此模块维护一个内部可配置循环缓冲区
    ,即* 存储输出,直到调用System_flush()。
    * 循环缓冲区的大小通过SYSMIN.bufSize设置。
    *- SysCallback
    * SysCallback允许用户定义的系统API实现。
    * SysCallback支持代理的代码占用空间较小,可以
    是* 用于提供自定义System_printf服务。
    * 默认SysCallback函数指向stub函数。 请参阅
    * SysCallback模块的文档。
    */
    SYSMIN = xdc.useModule('xdc.runtime.SysMin');
    SYSMIN.bufSize = 1024;
    System.SupportProxy = SYSMIN;
    //var SysCallback = xdc.useModule('xdc.runtime.SysCallback');
    //System.SupportProxy = SysCallback;
    //SysCallback.abortFxn ="&myUserAbort";
    //SysCallback.exitFxn ="&myUserExit";
    //SysCallback.flush"
    //SysCallback.putchFxn ="&myUserPutch";
    //SysCallback.readyFxn ="&myUserReady";
    
    
    
    /*=========== 任务配置================= */
    var Task = xdc.useModule('ti.sysbios.knl.Task');
    /*
    检查任务堆栈是否有溢出情况。
    *
    **选择一项:
    *- TRUE (默认)
    * 在
    *期间启用任务堆栈溢出条件的运行时检查 上下文切换("从"和"到")
    *- FALSE
    * 禁用任务堆栈溢出条件的运行时检查。
    */
    Task.checkStackFlag = true;
    //Task.checkStackFlag = false;
    
    /*
    创建任务时设置默认任务堆栈大小。
    *
    *默认值取决于所使用的设备。 减少默认堆栈
    *大小可节省更多内存。
    */
    Task.defaultStackSize = 512;
    
    /*
    启用空闲任务。
    *
    **选择一项:
    *- TRUE (默认)
    * 创建优先级为0的任务,该任务调用空闲挂机功能。
    这* 选项必须设置为true才能获得Power
    *提供的节能效果 模块。
    *-错误
    * 未创建空闲任务。 此选项占用的内存比NO
    *少 需要其他默认任务堆栈。
    * 要通过电源模块节省电源而不执行空闲任务
    ,请按* 将Idle.run添加为Task.allBlockedFunc。
    */
    Task.enableIdleTask = true;//Task.enableIdleTask
    = false;
    //Task.allBlockedFunc = Idle.run;
    
    /*
    如果Task.enableIdleTask设置为true,则此选项设置空闲任务
    的*堆栈大小。
    *
    **减少空闲堆栈大小可节省更多内存。
    */
    Task.idleTaskStackSize =512;/*
    
    
    减少任务优先级的数量。
    *默认值为16。
    *减少任务优先级数量可节省内存。
    */
    Task.numPriority=16;
    
    
    
    /*================= 文本配置================= */
    var text = xdc.useModule('xdc.runtime.Text');
    /*
    这些字符串位于.const部分。 将此参数设置为
    * FALSE将节省.const部分的空间。 Error,Assert和Log消息
    *将打印原始ID和参数,而不是格式化的消息。
    *
    **选择一项:
    *- TRUE (默认)
    * 此选项将测试字符串加载到.const中,以便于调试。
    *-错误
    * 此选项可减少.const占用空间。
    */
    text.isLoded = true;
    //text.isLoded = false;
    
    
    
    /*=========== 类型配置================= */
    var types = xdc.useModule('xdc.runtime.Types');
    /*
    此模块定义整个
    * xdc.runtime软件包中使用的基本常量和类型。
    */
    
    
    
    
    /*================= 特定于应用程序的实例================= */
    
    /*================= 诊断配置================= */
    var Diags = xdc.useModule('xdc.runtime.Diags');
    /*
    您可以使用Diags模块来设置和清除模块诊断
    程序掩码中的位,以便控制该模块内的诊断。
    模块诊断掩码控制
    该模块中的Assert和Log语句*,禁用这些语句可
    节省*代码。
    */
    
    /*================= 日志记录配置================== */
    var Log = xdc.useModule('xdc.runtime.Log');
    /*
    模块和应用程序代码通过调用
    *日志模块的函数来生成Log_Event事件。
    *在此处禁用所有日志语句将允许优化器完全
    *从应用程序中删除所有日志代码。
    *
    *注:为了在应用程序中生成日志事件,两个Diags
    * 并且必须设置日志掩码。 请参阅
    *的SYS/BIOS API指南 更多信息。
    */*
    
    
    LoggingSetup将TI-RTOS模块配置为捕获用户指定的信息
    *,如CPU负载,任务负载和任务执行,以便
    系统分析器*可以显示这些信息。
    */
    var LoggingSetup = xdc.useModule('ti.uia.sysbios.LoggingSetup');
    LoggingSetup.loadLoggerSize =256;
    LoggingSetup.mainLoggerSize =512;
    LoggingSetup.sysbiosLoggerSize =1024;
    
    /*=========== 主配置================= */
    var Main = xdc.useModule('xdc.runtime.Main');
    /*此主模块的配置用于所有不在模块中的代码*/
    
    /*=========== POSIX配置================= */
    var Settings = xdc.useModule('ti.sysbios.posix.Settings');
    
    /*================= 事件配置================= */
    var Event = xdc.useModule('ti.sysbios.knl.Event');
    
    /*================= 邮箱配置================= */
    var Mailbox = xdc.useModule('ti.sysbios.knl.Mailbox');
    
    /*================= ClockFreqs配置================= */*
    MSP432电源驱动程序*/
    var ClockFreqs = xdc.useModule('ti.sysbios.family.arm.msp432.ClockFreqs');需要SYS/BIOS ClockFreqs模块
    

    请告诉我我出错了。

    如果需要,我也可以附加项目。

    谢谢你

    Vikram

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

    您将CurrentTime设置为什么(在MAP_RTC_C_initCalendar调用中使用)? 我正在尝试重现该问题。

    您看到的电流是多少?

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

    感谢您今天回来。
    对不起,低于当前使用的时间。
    Const RTC_C_Calendar CurrentTime =

    0x00,
    0x40,
    0x16,
    0x10,
    0x07,
    0x2017
    };
    MSP432.c文件中也对此进行了定义

    我看到的电流为怠速状态8.6mA。
    我提到的其他内容是,当我调用函数Power_setPolicy((Power_PolicyFxn)PowerMSP432_deepPolicy)时
    执行过程从不经过以下部分:
    如果(约束和(1 << PowerMSP432_disallow_sleep)|
    (1 << PowerMSP432_Disallow_DeepSleep_0)|
    (1 << PowerMSP432_Disallow_DeepSleep_1))= 0){

    /*转至DeepSleep_1 */
    Power_Sleep (PowerMSP432_DeepSleep_1);

    /*将'slept'设置为true*/
    睡眠=真实;
    }

    /*如果尚未入睡,现在检查是否可以进入DeepSleep_0*/
    如果(!Sleep &&(Constraints &(1 << PowerMSP432_disallow_sleep)|
    (1 << PowerMSP432_Disallow_DeepSleep_0))= 0)){

    /*转至DeepSleep_0 */
    Power_Sleep (PowerMSP432_DeepSleep_0);

    /*将'slept'设置为true*/
    睡眠=真实;
    }
    在PowerMSP432_tirtos.c文件中定义的,因此,在PowerMSP432.c文件中定义的Power_Sleep函数中的休眠值从不显示4,而始终显示1。
    因此,进入常规睡眠模式,而不是深度睡眠模式。

    谢谢你
    Vikram
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是否正在调用您的RTCIsrFun函数? 我将您的代码插入一个简单的TI-RTOS示例中进行验证,但我从未访问ISR。 ROV->时钟->模块->刻度值不会因此而增加。