微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > osal_snv_write使用异常

osal_snv_write使用异常

时间:10-02 整理:3721RD 点击:

1.结构体:

typedef struct
{

uint8 pwm[4]; // 四路 pwm 的占空比值

}SYS_CONFIG;

SYS_CONFIG sys_config;

2.读取数据

void Init_Para(void)
{
int8 ret8 = osal_snv_read(0x80, sizeof(SYS_CONFIG), &sys_config);
if(NV_OPER_FAILED == ret8)
{

// 4路 pwm 设置, 相对于0xFF 的占空比
sys_config.pwm[0] = 255;
sys_config.pwm[1] = 255;
sys_config.pwm[2] = 255;//上电为白色
sys_config.pwm[3] = 0;

osal_snv_write(0x80, sizeof(SYS_CONFIG), &sys_config); // 写所有参数
}
}

3.写入数据

static void simpleProfileChangeCB( uint8 paramID )
{

case SIMPLEPROFILE_CHAR6: // pwm
SimpleProfile_GetParameter( SIMPLEPROFILE_CHARA, &newValue, &returnBytes);

#if (defined HAL_LCD) && (HAL_LCD == TRUE)
HalLcdWriteStringValue( "Char A[0]:", (uint16)(newValue[0]), 16, HAL_LCD_LINE_5 );
HalLcdWriteStringValue( "Char A[1]:", (uint16)(newValue[1]), 16, HAL_LCD_LINE_6 );
HalLcdWriteStringValue( "Char A[2]:", (uint16)(newValue[2]), 16, HAL_LCD_LINE_7 );
HalLcdWriteStringValue( "Char A[3]:", (uint16)(newValue[3]), 16, HAL_LCD_LINE_8 );
#endif // (defined HAL_LCD) && (HAL_LCD == TRUE)

if(returnBytes == 4)
{
sys_config.pwm[3] = 0; // 白色
sys_config.pwm[2] = newValue[1]; // 红色
sys_config.pwm[1] = newValue[2]; // 绿色
sys_config.pwm[0] = newValue[3]; // 蓝色
osal_set_event( simpleBLEPeripheral_TaskID, SBP_SET_PWM_EVT);//执行PWM事件
}

osal_snv_write(0x80, sizeof(SYS_CONFIG), &sys_config); // 写数据

}
break;

问  题:

当发送数据到两百多次后就失效了,等待几秒钟有恢复正常了,不知道是堆栈溢出还是哪里出现了问题,找了很久都没有找到问题;

有的人说每次写入数据都会覆盖原来的数据,我觉得数据都没有被覆盖啊,读取的时候只是读取了最后一次写入的数据而已,但是写入数据也是有限制的,同一个地址估计只能写252个字节:http://blog.csdn.net/feilusia/article/details/50190859  香瓜哥在博客中也是这么个意思

在此寻找解决方案;

我要实现的功能是掉电前,记住当前的状态,每次发的数据都不一样,又不知道什么时候掉电;

只有两种可能:

(1)每次发送的数据都记录到snv中,记录到252次后出现异常;

(2)检测掉电,在掉电的前一秒记录snv中,这样就不会溢出了,但这样会加一个电压检测,还要外接一个电容,让电压缓慢衰减。

如果都不用这两种方案,问是否还有其他解决方案,忘亲们指教!在此万分感谢!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top