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.

[参考译文] MSP430FR5989-RAM:MSP430FR5989 EP 特定功能的使用情况

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1420877/msp430fr5989-ep-msp430fr5989-ram-usage-for-specific-functions

器件型号:MSP430FR5989-MSP430FR5989-MSP430FR5989 EP

工具与软件:

您好!

我将使用宏进行一些计算。  我的函数收到一条警告、比如建议在运行时进行 ram、因此、我想使用 RAM 进行计算。 如何 在 RAM 中运行函数? 我将共享下面的宏和函数。

此致。

#define FGD_SW_CURR_VAL(VALUE)                (VALUE * 2.0 * 1000.0 * 2.0  /4095.0 / 8.0)
#define SYS_3V3_VOLT(VALUE)                   (VALUE * 2.0 *1000.0 * 2.0 /4095.0)
#define SYS_5V_VOLT(VALUE)                    (VALUE * 2.0 * 1000.0  * 6.9 / 2.2 / 4095.0)
#define VSENS_3V3_CURR(VALUE)                 (VALUE * 2.0 * 1000.0 / 4095.0 / 3.0)
#define SYS_5VA_SW_CURR(VALUE)                (VALUE * 2.0 *1000.0  *2.0 /4095.0 / 8.0)
#define SYS_3V3_SENSE_VOLT(VALUE)             (VALUE * 2.0 *1000.0 * 2.0 /4095.0)
#define SYS_5VA_VOLT(VALUE)                   (VALUE * 2.0 * 1000.0  * 6.9 / 2.2 / 4095.0)
#define SYS_5V_FGD_VOLT(VALUE)                (VALUE * 2.0 * 1000.0  * 6.9 / 2.2 / 4095.0)

#define IS_SYS_MON_VAL_IN_INTERVAL(VALUE, MIN_VAL, MAX_VAL) ((VALUE) >= (MIN_VAL) && (VALUE) <= (MAX_VAL))


//#pragma CODE_SECTION(CheckSysMonData, ".TI.ramfunc")
uint16_t CheckSysMonData(volatile S_SYS_MON_DATA *sys_mon_data){


     uint16_t sys_mon_status = SYS_MON_SUCCESS;

      if ( !IS_SYS_MON_VAL_IN_INTERVAL(SYS_3V3_VOLT(sys_mon_data->Sys_3V3), EXPECTED_SYS_3V3 - SYS_VOLT_EPSILON ,EXPECTED_SYS_3V3 + SYS_VOLT_EPSILON )){
          sys_mon_status |= VOLT_3V3_INTERV_ERR;
      }

      if( !IS_SYS_MON_VAL_IN_INTERVAL(SYS_5V_VOLT(sys_mon_data->Sys_5V), EXPECTED_SYS_5V - SYS_VOLT_EPSILON ,EXPECTED_SYS_5V + SYS_VOLT_EPSILON )){
          sys_mon_status |= VOLT_5V_INTERV_ERR;
      }

      if( !IS_SYS_MON_VAL_IN_INTERVAL(SYS_5VA_VOLT(sys_mon_data->Sys_5VA), EXPECTED_SYS_5V - SYS_VOLT_EPSILON ,EXPECTED_SYS_5V + SYS_VOLT_EPSILON )){
          sys_mon_status |= VOLT_5VA_INTERV_ERR;
      }

      if( !IS_SYS_MON_VAL_IN_INTERVAL(SYS_5V_FGD_VOLT(sys_mon_data->Sys_5V_FGD), EXPECTED_SYS_5V - SYS_VOLT_EPSILON ,EXPECTED_SYS_5V + SYS_VOLT_EPSILON )){
          sys_mon_status |= VOLT_5V_FGD_INTERV_ERR;
      }

      if( !IS_SYS_MON_VAL_IN_INTERVAL(SYS_3V3_SENSE_VOLT(sys_mon_data->Sys_3V3_SENSE), EXPECTED_SYS_3V3 - SYS_VOLT_EPSILON ,EXPECTED_SYS_3V3 + SYS_VOLT_EPSILON )){
           sys_mon_status |= VOLT_3V3_SENSE_INTERV_ERR;
      }

      return sys_mon_status;
}

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

    关于将函数移动到 RAM 的消息(据我所知)来自 ULP Advisor。 这是建议、而不是警告。 可以不负罪而忽视它。 如果这些消息太杂乱、可以在"Build Settings->Build->Compiler->ULP Advisor"中禁用它们。

    在编译器 UG (SLAU132Y)第5.16.2段和链接器 UG (SLAU131Y)段中描述了"ramfunc"机制  8.5.0.5.2.1。

    我认为 将代码迁移到 RAM 的好处 相对较小。 通过减少您执行的浮点算术运算量、您可能会获得更多收益。