搜索
bottom↓
回复: 6

实时记录数据 难题

[复制链接]

出0入0汤圆

发表于 2011-5-10 09:01:56 | 显示全部楼层 |阅读模式
我想请问下高手们!我这里有个问题,中断不是要越短越好!但是我这里有个难题,那就是
我要实时的记录数据,并存储到EEPROM中,实时存储数据有两个操作,要把原来的数据读取出来
然后计算出现在的数据和原来的数据相加,然后再存储到EEPROM中,这个计算很简单,但是程序会
比较长,放在主函数中,起不到实时记录的功能!不知道我该怎么办

void Update_Power(void)
{
  int updata_flag = 0;  
  union Data
  {
    unsigned long ldata;
    struct
    {
      unchar c1;
      unchar c2;
      unchar c3;
      unchar c4;
    } cdata;
  } powert_lc;

  if(power_uflag == 1)
  {
//////////////////获取原始数据//////////////////////////////
      powert_lc.cdata.c1=BQ3287_gettime(ds_powert04);
      powert_lc.cdata.c2=BQ3287_gettime(ds_powert03);
      powert_lc.cdata.c3=BQ3287_gettime(ds_powert02);
      powert_lc.cdata.c4=BQ3287_gettime(ds_powert01);
//////////////////////////////////////////////////////////////////
      if(IAC>15
      {
        VAC &= 0x0fff;
        IAC &= 0x00ff;
        
        temp1 = 0;
        temp1 = IAC;
        temp1 = temp1*VAC;
        temp1 = temp1&0x000fffff;
      }
      else
      {
        IDC=IDC&0x00ff;
        temp1 = 0;
        temp1 = IDC;
        temp1 = temp1*VDC;
        temp1 = temp1&0x000fffff;
   
        if(temp1 < 1500) temp1 = 0;
              else temp1 -= 1500;
      }
      
      powert_lc.ldata += temp1;  
/////////////////计算并d得出现在的数据/////////////////////////////////      
      if(powert_lc.ldata > 360000000)
      {
       updata_flag=1;
   
        powert_lc.ldata -= 360000000;
        
        BQ3287_writecmd(ds_powert01,powert_lc.cdata.c4);
        BQ3287_writecmd(ds_powert02,powert_lc.cdata.c3);
        BQ3287_writecmd(ds_powert03,powert_lc.cdata.c2);
        BQ3287_writecmd(ds_powert04,powert_lc.cdata.c1);
        power_uflag = 0;
      }
////////////////大于1W记录//////////////////////////////      
      if(updata_flag==0)
      {
        BQ3287_writecmd(ds_powert01,powert_lc.cdata.c4);
        BQ3287_writecmd(ds_powert02,powert_lc.cdata.c3);
        BQ3287_writecmd(ds_powert03,powert_lc.cdata.c2);
        BQ3287_writecmd(ds_powert04,powert_lc.cdata.c1);
        power_uflag = 0;
      }
////////////没大于1W则继续//////////////////////////////
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2011-5-10 09:30:38 | 显示全部楼层
根据时间间隔确定是否需要缓冲,如果单位时间内总数据量太大,我觉得可以考虑多eeprom并行读写

出0入0汤圆

发表于 2011-5-10 09:58:24 | 显示全部楼层
软件上设定一个缓冲区或者一个FIFO,eeprom保存数据和记录数据并行发生。

出0入0汤圆

发表于 2011-5-10 12:13:40 | 显示全部楼层
RAM大的话,开辟一块内存作为E2PROM的镜像。

出0入0汤圆

发表于 2011-5-10 12:16:23 | 显示全部楼层
学习

出0入0汤圆

 楼主| 发表于 2011-5-10 12:48:09 | 显示全部楼层
E2PROM是并行接口的!我去是FIFO
我这错误出现在是FaultISR()中;
不知道怎么调试!

出0入0汤圆

 楼主| 发表于 2011-5-11 15:46:21 | 显示全部楼层
IAR为什么编写程序达到32K就写不下去了?
cortex-m3不是有256K吗?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-3 18:12

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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