OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3576|回复: 1

ucos操作系统下,临界区里用软件IIC写EEPROM出错,求帮助

[复制链接]

23

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
449
金钱
449
注册时间
2016-7-12
在线时间
121 小时
发表于 2017-11-7 13:38:17 | 显示全部楼层 |阅读模式
10金钱
本人在用407开发过程中,要将设备配置参数写入EEPROM,但是在ucos操作下,如果在临界区里使用AT24CXX_Write()会导致写入数据出错,读取出来的数据与写入的不一样,CRC校验通过不了。
BOOLEAN_MINE  SaveDefaultToEeprom(void)
{
    DATA_SAVE_TO_EEPROM   savedata_backup;
    OS_CPU_SR  cpu_sr;
    OS_ENTER_CRITICAL();   
    data_save_to_eeprom.EEP_Calibration=Common_CRC16_Check((u8 *)&data_save_to_eeprom,sizeof(DATA_SAVE_TO_EEPROM)-2);   
    AT24CXX_Read(EEP_STARTADDR,(u8*)&savedata_backup,sizeof(DATA_SAVE_TO_EEPROM));
    if(memcmp(&data_save_to_eeprom,&savedata_backup,sizeof(DATA_SAVE_TO_EEPROM)))     //如果发现EEPROM里的数据和要写入的数据不一样
    {
        AT24CXX_Write(EEP_STARTADDR,(u8*)&data_save_to_eeprom,sizeof(DATA_SAVE_TO_EEPROM));
    }
    OS_EXIT_CRITICAL();   
    return  TRUE;
}

但是将临界区注释掉之后,写入就没有问题,读取出来的数据也是对的。
BOOLEAN_MINE  SaveDefaultToEeprom(void)
{
    DATA_SAVE_TO_EEPROM   savedata_backup;
//    OS_CPU_SR  cpu_sr;
//    OS_ENTER_CRITICAL();   
    data_save_to_eeprom.EEP_Calibration=Common_CRC16_Check((u8 *)&data_save_to_eeprom,sizeof(DATA_SAVE_TO_EEPROM)-2);   
    AT24CXX_Read(EEP_STARTADDR,(u8*)&savedata_backup,sizeof(DATA_SAVE_TO_EEPROM));
    if(memcmp(&data_save_to_eeprom,&savedata_backup,sizeof(DATA_SAVE_TO_EEPROM)))     //如果发现EEPROM里的数据和要写入的数据不一样
    {
        AT24CXX_Write(EEP_STARTADDR,(u8*)&data_save_to_eeprom,sizeof(DATA_SAVE_TO_EEPROM));
    }
//    OS_EXIT_CRITICAL();   
    return  TRUE;
}

我又单独做了一份程序来验证的,只有EEPROM读写一个任务,没有用到中断。请问这是什么原因导致的,感觉进临界区不会影响软件模拟IIC端口的时序啊!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2017-11-8 16:55:59 | 显示全部楼层
我搞不懂你们动不动 写东西 要加开关中断,这是一种很不好的操作习惯,而且也根本不明白为什么要加看到别人加你也加是吧。你这完全没必要加
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-19 04:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表