Flash memory E2Rom 等常用到的页写算法

来源:互联网 发布:python3网络编程 pdf 编辑:程序博客网 时间:2024/05/18 14:25
long xxxPageWrite(long uAddr, const void *pSrcData, long iLen){  #define PAGE_SIZE 128 //页面大小  #define MAX_ADDRESS  0x10000UL //最大地址  long iDoneBytes=0; //写入的长度  long iOffset, iNewWrLen;  unsigned char PageBuff[PAGE_SIZE]; //页面缓冲区    const char *pData = (const char *)pSrcData; //源数据    while(iDoneBytes < iLen)  {    iOffset = (uAddr % PAGE_SIZE); //页内偏移    uAddr -= iOffset; //地址对齐到页起始    if((uAddr + PAGE_SIZE) > MAX_ADDRESS)//超出最大地址      break;    //需要写入的字节数    iNewWrLen = min(PAGE_SIZE, iLen - iDoneBytes) - iOffset;        if(iOffset //起始部分没有对齐      || iNewWrLen != PAGE_SIZE //非整页数据      || 0)//需要读出原始数据    {      //整页读出      //读出从 uAddr 开始的 PAGE_SIZE 个字节数据到 PageBuff      //比如 I2cRead(uAddr, PageBuff, PAGE_SIZE);          }    //合并新写入数据    memcpy(PageBuff + iOffset, pData, iNewWrLen);    //页面写入    {      //循环写入PageBuff 的 PAGE_SIZE个字节的数据 到 uAddr      //比如 I2cWrite(uAddr, PageBuff, PAGE_SIZE);      }    //准备下帧    uAddr += PAGE_SIZE; //页写地址    pData += iNewWrLen; //源数据地址    iDoneBytes += iNewWrLen;  //写入的长度  }    return iDoneBytes;}

1 0
原创粉丝点击