一个小程序被用来测试一组三个 PID 参数的 FRAM 保持、此参数被保持在浮点格式。
请注意、PID 参数可通过上传命令通过串行链路发送。
默认情况下、这些存储在 RAM 中、因此在下电上电后丢失。 因此、需要迁移到 FRAM 存储器:
#include
#include
#include
typedef float 32_t;
#define P_GAIN_LOCAL 0.8
#define I_GAIN_LOCAL 2.0
#define D_GAIN_LOCAL 0.6
//写入的 float32_t 值的数量。
#define WRITE_SIZE 3.
//为第一个 PID 集指定...
pragma PERSISTENT (FRAM_ARRATION_1)
float32_t FRAM_array_1[write_size]={0};
//定义
结构
{
float32_t p_gain_value;
float32_t I_gain_value;
float32_t d_gain_value;
}pid_gain ={P_GAIN_LOCAL、I_GAIN_LOCAL、D_GAIN_LOCAL};
float32_t sum_of_Gains = 0.0;
/**
* main.c
*
*使用#pragma PERSISTENT (FRAM_ARRAM_1)指令的测试、
*应用(现在适用)一组 pid_gain 参数。
*希望能够承受功率循环。
*
*
int main (空)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
//从 FRAM 块读取 PID 增益值以加载任何值
//以前的 FRAM 存储值。
PID_GAIN.p_GAIN_VALUE = FRAM_ARRAM_1[0];
PID_GAIN.I_GAIN_VALUE = FRAM_ARRAM_1[1];
PID_GAIN.d_GAIN_VALUE = FRAM_ARRAM_1[2];
//从 FRAM 获得的 PID 值...
总和_增益= pid_gain.p_gain_value + pid_gain.i_gain_value + pid_gain.d_gain_value;
//已加载 GAIN_VALUE 项
PID_GAIN.p_GAIN_VALUE = P_GAIN_LOCAL;
PID_GAIN.I_GAIN_VALUE = I_GAIN_LOCAL;
PID_GAIN.d_GAIN_VALUE = D_GAIN_LOCAL;
//已写入更新的 PID 值...
总和_增益= pid_gain.p_gain_value + pid_gain.i_gain_value + pid_gain.d_gain_value;
//使用 float32_t GAIN_VALUE 项写入 FRAM。
FRAM_array_1[0]= pid_gain.p_gain_value;
FRAM_array_1[1]= pid_gain.i_gain_value;
FRAM_array_1[2]= pid_gain.d_gain_value;
返回0;
}
写入的 FRAM 位置(通过 CCS 9.1调试器中的'Expressions'显示)在0x4000、0x4004和0x4008处报告。 这是 FR5994器件上 FRAM 的基础。
在单步调试器时、测试 PID 值似乎写入正常。
在对 Launchpad 开发套件进行下电上电并再次运行调试器后、上述存储器位置会被清除。
由于调试器不知道 FRAM 用于变量存储、因此当它加载程序进行调试时、假设 FRAM 存储可能已经工作、但已通过下一次调用调试器擦除。 在所需的下电上电后执行此操作、以测试 FRAM 保持。
我确信 FRAM 能够正常工作、因为会保留"闪存"代码、并且工作正常!
是否有办法使用调试器轻松测试 FRAM 数据保持?