1.写在前面

学习单片机或者从事嵌入式开发的,对于EEPROM绝不会陌生,尤其的24系列的EEPROM很是经典,如AT24C02、AT24C16等。 驱动起这个系列的EEPROM,可以说是轻而易举,各类教程、源码、驱动都可以轻松找到并作稍微改动即可使用。

2.EEPROM页写算法

驱动起一片EEPROM,实现的功能不外乎就是读、写,不多赘述。在写过程中,有一个“页写”功能,如果是大量数据写入,采用“页写”功能会大大提高效率。记得以前学习单片机的时候,遵循的是某开发板的教程,其中的“页写”算法过于复杂,包括现在看来依然是比较累赘,所以已经把好多人搞懵逼。而且网络上大部分的源码几乎都是大同小异,质量不算高。大体思路是这样的:用逻辑语句实现,检查写入总数据字节数是否大于一页,开始地址是否为页的开始,剩下未满一页的数据怎样处理。逻辑上来说,这样处理还是非常好理解,但显得过于累赘。逻辑用数学语句描述,则是算法,下面则是这样的实现。

工作后,从Linux系统的驱动源码中发现了EEPROM的“页写”新方法,几句代码即把前面一堆逻辑描述清楚,第一次体会到算法的神奇之处。作了一些修改,关键代码如下。

char ee_24clxx_writebytes(u16 write_addr, char* pwrite_buff, u16 writebytes)

{

u8   write_len,page_offset;

char error = 0;

while(writebytes > 0)

{

page_offset = EE24CLXX_PAGESIZE - (write_addr % EE24CLXX_PAGESIZE); /*EE24CLXX_PAGESIZE为页大小,如24c16为16*/

write_len   = writebytes > page_offset ? page_offset : writebytes;

i2c_24clxx_write(write_addr,pwrite_buff, write_len);           /*写一页函数*/

writebytes   = writebytes - write_len;

if(writebytes > 0)

{

pwrite_buff = pwrite_buff + write_len;

write_addr  = write_addr + write_len;

i2c_24clxx_waitstandby(0);                  /*页写判忙,FRAM则不用*/

}

}

return error;

}

3.参考源码

[1]  https://github.com/Prry/drivers-for-mcu

算法24c语言,EEPROM(AT24C16)页写算法相关推荐

  1. 田字格怎么用C语言编写程序,怎么写算法设计

    1. 什么叫算法描述啊 算法描述(Algorithm Description )是指对设计出的算法,用一种方式进行详细的描述,以便与人交流.算法可采用多种描述语言来描述,各种描述语言在对问题的描述能力 ...

  2. AT24C16页写和多页写

    AT24C16 2K字节(存储内存) = 128(页面数)* 16 (每页的字节数) = 2^11 (寻址地址位数 11位). AT24C16有128(2^7=128)页只需要7位地址,分为高3位和低 ...

  3. rsa算法c语言实现_数据结构与算法之线性表-顺序表实现(C语言版本)

    原文托管在Github: https://github.com/shellhub/blog/issues/52 数据结构与算法之线性表-顺序表实现(C语言版本) 前言 数据结构与算法是一个程序员必备的 ...

  4. 归并有效排序算法matlab,科学网—[用MATLAB写算法]之排序算法2)归并排序merge sort - 徐勇刚的博文...

    归并排序(merge sort)是一种利用分治策略(divide and conquer)进行排序的算法,算法复杂度为 $\Theta (nlog_{2}n)$ . filename: merge_s ...

  5. c语言代码先来先服务算法_C语言十大经典排序算法(动态演示+代码,值得收藏)...

    以前也零零碎碎发过一些排序算法,但排版都不太好,又重新整理一次,排序算法是数据结构的重要部分,系统地学习很有必要. 时间.空间复杂度比较 排序算法 平均时间复杂度 最差时间复杂度 空间复杂度 数据对象 ...

  6. java合一算法_Prolog语言的编译原理:合一算法

    Prolog语言的编译原理:合一算法 分类:软考 | 更新时间:2016-07-08| 来源:转载 Prolog是一种基于谓词演算的程序设计语言.Prolog是一种说明性语言,它的基本意思是程序员着重 ...

  7. c4.5算法 程序语言,决策树之C4.5算法详解-Go语言中文社区

    决策树之C4.5算法详解 主要内容 C4.5算法简介 分裂属性的选择--信息增益率 连续型属性的离散化处理 剪枝--PEP(Pessimistic Error Pruning)剪枝法 缺失属性值的处理 ...

  8. 最坏适应算法c语言源码,首次适应算法,最佳适应算法,最坏适应算法源代码

    这是一个非常完美的程序,输出显示的格式也很棒,里面包含首次适应算法,最佳适应算法,最坏适应算法 #include #include #define Free 0 //空闲状态 #define Busy ...

  9. 自适应对消算法c语言,LMS自适应对消算法

    LMS算法最小均方误差算法,是一种自适应滤波算法.该算法通过对输入信号进行滤波输出一个信号y(n),将输出信号与期望输出信号作差得到一个误差信号,再将误差信号输入到自适应滤波器中形成一个反馈回路.LM ...

最新文章

  1. ArcGIS Server 开发之鹰眼地图的实现
  2. Oracle-Listener log解读
  3. 浅谈js本地图片预览
  4. boost::hana::zip_shortest用法的测试程序
  5. springboot 拦截器_Spring Boot入门系列(十)如何使用拦截器,一学就会!
  6. Python学习笔记(三)数据类型--Number类型
  7. c# 获取键盘的输入
  8. flask从html中页面重定向,如何在成功登录后才将用户重定向到所需的HTML页面(flask python应用程序)?...
  9. Python和Matlab系统比较
  10. C语言把字符串转变为数字
  11. class文件反编译成java文件
  12. python桌面整理小助手
  13. mac无线连接打印机进行打印和扫描
  14. excel 第4讲:排序与筛选
  15. myscript 思路整理
  16. 爬虫笔记19:模拟登录jerry的QQ空间(selenium获取cookie的应用案例)、怎么保存cookie
  17. 计算机硬件组成框图,以及各部件的作用及计算机系统的主要技术指标概念理解
  18. python软著申请_软著申请注意事项放心选择
  19. MIT_单变量微积分_18
  20. linux 修改hosts

热门文章

  1. Elasticsearch 第三方工具包Bboss的简单使用
  2. Oracle Spatial中上载GIS空间数据方法研究
  3. WPS当中封面图如何快速对齐下划线
  4. Composite UI Application Block (CAB) 详解
  5. 项目管理师备考笔记:十大管理之范围管理
  6. python种颜色循环_使用matplotlib颜色图进行颜色循环 - python
  7. 第二讲:线性结构-Go语言实现
  8. 【概率论与数理统计】-排列组合笔试题汇总
  9. jQuery之浏览器打印插件
  10. 将有朋自远方来,不亦乐乎