⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 access_extended_sram.c

📁 本程序是用于访问空间大于 64 KB (即:地址指针数大于两个字节)外部扩展随机存取存储器的源程序文件。
💻 C
📖 第 1 页 / 共 4 页
字号:
                                       unsigned int read,
                                       // 读取操作的访问地址低位指针数值
                                       unsigned int write,
                                       // 写入操作的访问地址低位指针数值
                                       const unsigned char data_size)
                                       // 每次访问操作的地址个数(数据长度)
{
  unsigned int data_times;                    // 返回的次数值整数变量
  data_times = 0x01;
  if (read_h > write_h)                       // 说明写入操作已越过访问地址高位的终止地址
  {
    while (read_h != write_h)
    {
      if (read >= (IN_all_data_end_size - data_size))
      {
        data_times++;                         // 次数值+1
        read = (IN_all_data_start_size + data_size)-(IN_all_data_end_size - read);
        if (read_h == IN_all_data_h_end_size)
        {
          read_h = (IN_all_data_h_start_size + 1) - 1;
        }
        read_h++;
      }
      data_times++;                           // 次数值+1
      read = read + data_size;                // 读取操作的访问地址低位+数据长度
    }
    if (read >= write)
    {
      data_times--;                           // 次数值-1,以抵消上面最后一个+1
      read = read - data_size;                // 读取操作的访问地址低位-数据长度
      if (read >= write)
      {
        read = read - write;
        read = (unsigned int)data_size - read;
      }
      else
      {
        data_times++;                         // 次数值+1
        read = write - read;
      }
    }
    else
    {
      while (read <= (write - data_size))
      {
        data_times++;                         // 次数值+1
        read = read + data_size;
      }
      data_times++;                           // 次数值+1
      read = write - read;
    }
  }
  else if (read_h < write_h)
  {
    while (read_h != write_h)
    {
      if (read >= (IN_all_data_end_size - data_size))
      {
        data_times++;                         // 次数值+1
        read = (IN_all_data_start_size + data_size)-(IN_all_data_end_size - read);
        read_h++;
      }
      data_times++;                           // 次数值+1
      read = read + data_size;
    }
    if (read >= write)
    {
      data_times--;                           // 次数值-1,以抵消上面最后一个+1
      read = read - data_size;
      if (read >= write)
      {
        read = read - write;
        read = (unsigned int)data_size - read;
      }
      else
      {
        data_times++;                         // 次数值+1
        read = write - read;
      }
    }
    else
    {
      while (read <= (write - data_size))
      {
        data_times++;                         // 次数值+1
        read = read + data_size;
      }
      data_times++;                           // 次数值+1
      read = write - read;
    }
  }
  else
  {
    if (read > write)
    {
      while (read_h == write_h)
      {
        if (read >= (IN_all_data_end_size - data_size))
        {
          data_times++;                       // 次数值+1
          read = (IN_all_data_start_size + data_size)-(IN_all_data_end_size - read);
          if (read_h == IN_all_data_h_end_size)
          {
            read_h = (IN_all_data_h_start_size + 1) - 1;
          }
          read_h++;
        }
        data_times++;                         // 次数值+1
        read = read + data_size;
      }
      while (read_h != write_h)
      {
        if (read >= (IN_all_data_end_size - data_size))
        {
          data_times++;                       // 次数值+1
          read = (IN_all_data_start_size + data_size)-(IN_all_data_end_size - read);
          if (read_h == IN_all_data_h_end_size)
          {
            read_h = (IN_all_data_h_start_size + 1) - 1;
          }
          read_h++;
        }
        data_times++;                         // 次数值+1
        read = read + data_size;
      }
      if (read >= write)
      {
        data_times--;                         // 次数值-1,以抵消上面最后一个+1
        read = read - data_size;
        if (read >= write)
        {
          read = read - write;
          read = (unsigned int)data_size - read;
        }
        else
        {
          data_times++;                       // 次数值+1
          read = write - read;
        }
      }
      else
      {
        while (read <= (write - data_size))
        {
          data_times++;                       // 次数值+1
          read = read + data_size;
        }
        data_times++;                         // 次数值+1
        read = write - read;
      }
    }
    else
    {
      while (read <= (write - data_size))
      {
        data_times++;                         // 次数值+1
        read = read + data_size;
      }
      data_times++;                           // 次数值+1
      read = write - read;
    }
  }
  OUT_data_size_remainder = OUT_data_size_remainder;// 阻止编译器产生警告消息
  OUT_data_size_remainder = read;             // 最后一次的数据个数计数器等于余数
  return (data_times);                        // 返回的次数整数值
}



/*
********************************************************************************************
                                 本C语言源程序文件到此结束
********************************************************************************************
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -