at24c16如何划分出多个读写区_mega32数组、内存以及AT24C16读写相关

zz/2023/6/4 14:46:14

主控:mega32

编译器:iar2.31E

这两天折腾一个模块程序,一个温度补偿参数,本来是72个字节,现在扩展了三倍,变成288个,然后各种问题出现了。

第一次修改时想当然,直接把两个用到的全局变量数组改成了288个字节的,程序烧写进去以后,一旦同时调用这两个数组,mega32就会毫不犹豫的崩溃,反复重启,应该是内存溢出。

第二次,存储数据的数组不变,我把负责传输数据的改成了160,分两次向AT24C16写数据,这次程序没有崩溃,但是程序的结果让我崩溃了:首先是写入和读出来的数据乱七八糟,这也是我的原因,写入和读出的数据没有整理,随便写的,结果程序出错时看起来就很乱。等我意识到这点,半天已经过去了,后来学乖了,每次写0,就一个数写1,结果这次出现了更奇特的现象。由于数据分两次写入,第二次读写数据可以成功,但第一次死活不成功。两次的读写函数是同一个,当我把第二次读写屏蔽掉,第一次读写竟然又成功了!

又是崩溃的半天后,发现一个奇怪的现象,读写数据的时候,如果一包数据全是0,就会读写失败,其中哪怕有一个不是0,读写就没问题。我突然意识到,每次两包数据读写的时候,我随手在右下角敲个1,刚好在第二包里面,这样子第二包会成功,而第一包没有非零的数据,所以失败。于是,我在第一次、第二次读写中都加入一个1,果然,这下读写都成功了。我的读写函数是单字节操作,就是一次一个地址一个字节,不是按页写,竟然会有这种问题,只能说保护机制做的太好了。在一段时间内,如果一直保持高电平或者低电平(因为0不会有电平变化),就认为短路了,AT24C16会拒绝读写操作。

读写EEPROM没问题了,但是结果还是有问题,因为我的数据存储数据定义的是288个字节,在操作的时候,发现超过255的数据就把之前的覆盖了,数组大小有限制!没办法,改小吧,不知道是编译器原因还是什么。

总结:

1,mega32内存2K,全局变量太大很容易造成内存溢出;

2,mega32数组大小限制是256,我用的是无符号字符型,不知道整型的话限制是多少;

3,AT24C16在一段时间内的读写(10ms?),不能全部为0,不然芯片认为短路或者接地,拒绝操作;

打赏

f4daca01641a8e0761349c828c8aa605.png扫一扫,打赏作者吧~

http://www.ngui.cc/zz/2389968.html

相关文章

python输入年份打印全年日历_python使用calendar输出指定年份全年日历的方法

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技术人对外发布原创技术内容的最大平台&…

oracle做全年日历表,Oracle之一份标准日历表的构建

select TO_NUMBER(to_char(everyDay,‘yyyymmdd‘)) as ID,everyDay as CODE,to_char(everyday,‘yyyy‘)||‘年‘||TO_NUMBER(to_char(everyday,‘mm‘))||‘月‘||TO_NUMBER(to_char(everyday,‘dd‘))||‘日‘ AS NAME,TO_NUMBER(to_char(everyday,‘yyyy‘)) as YEAR_ID,to…

c java后端,【后端开辟】java与c言语的区分有哪些?

java与c言语的区分有哪些?1、Java与C内存分派差别:Java中内存分派五个区,分别为栈区(存储的是局部变量,运用终了,马上接纳),堆区(存储的是new出来的东西,实体,对象,每一个…

oppor11点击Android,OPPO R11怎么网络共享?OPPO R11三种共享网络设置教程

OPPO R11三种共享网络设置教程个人热点共享手机A通过建立热点,分享数据流量,使手机B可以连接上网。以下是具体的操作路径:1、通过桌面的设置--其他无线连接进入。2、点击个人热点--开启个人热点开关。3、会有原始的名称和密码,如果…

共享本地文件无服务器,与云服务器共享本地文件

与云服务器共享本地文件 内容精选换一换本文介绍如何在 Linux 系统的本地机器上使用 FTP 服务,将文件从本地上传到云服务器中。已在待上传文件的云服务器中搭建 FTP 服务。如果您的云服务器为 Windows 操作系统,具体操作请参考 搭建FTP 站点(Windows)。如…

android 桌面 快捷方式图标,android 创建快捷方式图标到桌面

public static void addShortcut(Context context) {String ACTION_INSTALL_SHORTCUT "com.android.launcher.action.INSTALL_SHORTCUT";// 快捷方式要启动的包Intent intent gotoWhere(context);// 设置快捷方式的参数Intent shortcutIntent new Intent(ACTION_I…

LEADTOOLS 20帮助说明文档

LEADTOOLS 20帮助说明文档 LEADTOOLS 20使用DICOM挂起协议创建多学科DICOM查看器 毫无疑问,DICOM挂起协议是忙碌的医生的重要功能。只需查看不同应用程序提供的大量显示布局选项,以及放射线医学,心脏病学,乳房X线照相术&#xff…

电子病历编辑器功能点六级试题库

袁永福 2014-8-25 本文档列出了电子病历编辑器一些常见的功能点需求清单,每个功能点有一个满分值,根据功能点的满足情况打出一个不超过满分值的有效分值参与累计总分。整个题库总满分是150分。 本题库仅仅针对于电子病历编辑器功能点,不涉及医…

利用Zotero进行文献检索与管理

本文链接:https://gaiuo.gitee.io/ 系统环境:win10 zotero5.0.84 Google Chrome本文主要从以下三方面介绍文献检索与管理: **①Zotero配置 ** **②文献检索与管理 ** ③追踪行业研究进展 Zotero配置 Zotero是一款进行文献收集、组织、…

我虽不是人类:且看我如何攻破Google的ReCAPTCHA

理解Recaptcha网页控件工作流程验证码类型解决方案 对风险分析系统的分析1 浏览历史2 浏览器环境Canvas着色用户机器屏幕分辨率和鼠标 3 网站限制 简单的验证码破解器1 获取Token2 评价 图片验证码1 图片验证码方案的灵活性2 重复的图片 图片验证码破解器1 图片注释服务与库GRI…