STC单片机Flash做EEPROM的代码
STC官方给出的建议:

/***************************************************************Author:Liming***
* @brief 读取参数
* @param None
* @retval None
****************************************************************0x49E7FC7B*****/
void ReadParam(void)
{
uint16_t i;
uint8_t buffer[][];//1扇区分为64块存储区 1块内的8个字节 EepromReadBytes(IAP_SECTOR0, &buffer[][], 0x200); #ifdef DEBUG
for(i=; i<; i++)//调试模式输出数据
{
SendBytes(&buffer[i][], );
SendString("\r\n");
Delay();
}
#endif for(i=; i<; i++)
{
if((buffer[i][] == 0xff) && buffer[i][] != 0xff)
{
LocalID = buffer[i][];
return;
}
}
} /***************************************************************Author:Liming***
* @brief 保存参数
针对STC单片机Flash作为EEPROM,0只能通过扇区擦除才能变为1,但是1可以
写入改为0,发现如果对单个字节写入一次数据比如0x63,再写入0x00,读出的值为0x40并
不是理论上的0x00,但第一次写入数据都没问题。所以采用以下方法:
一扇区512字节以8字节为一块分为64块,每一块的第一字节为标志位,如果为0xff则后面
的7字节为有效数据,如果为0x00则后面的7字节已经作废。
* @param
* @retval None
****************************************************************0x49E7FC7B*****/
void SaveParam(void)
{
uint16_t i;
uint8_t buffer[][];//1扇区分为64块存储区 1块内的8个字节 EepromReadBytes(IAP_SECTOR0, buffer, 0x200); for(i=; i<; i++)
{
if((buffer[i][] == 0xff) && (buffer[i][] == 0xff))
{
IapProgramByte(IAP_SECTOR0+(i*)+, LocalID);
if(i != 0x00)
{
IapProgramByte(IAP_SECTOR0+(i*)-, 0x00);//用过的存储块更改标志
}
return;
}
}
IapEraseSector(IAP_SECTOR0);
IapProgramByte(IAP_SECTOR0+, LocalID);
}
STC单片机Flash做EEPROM的代码的更多相关文章
- STC单片机 IAP(EEPROM)的使用
STC89C51.52内部都自带有2K字节的EEPROM,54.55和58都自带有16K字节的EEPROM,STC单片机是利用IAP技术实现的EEPROM,内部Flash擦写次数可达100,000 次 ...
- FLASH和EEPROM的最大区别
源:http://www.cnblogs.com/bingoo/p/3551753.html FLASH和EEPROM的最大区别是FLASH按扇区操作,EEPROM则按字节操作,二者寻址方法不同,存储 ...
- 大话FLASH和EEPROM
最近在看代码的时候,遇到了一个使用FLASH模拟EEPROM的情况,看到这个我当时是一脸蒙蔽啊,对于一个有时候连FLASH和EEPROM都分不清的人来说,怎么可能读懂用FLASH来模拟EEPROM呢? ...
- AVR单片机中的EEPROM
1.EEPROM介绍 Electrically Erasable Programmable Read Only Memory 电气可拭除可编程只读存储器 发展过程:ROM – > PROM –& ...
- FLASH和EEPROM的区别
FLASH和EEPROM的最大区别是FLASH按扇区操作,EEPROM则按字节操作,二者寻址方法不同,存储单元的结构也不同,FLASH的电路结构较简单,同样容量占芯片面积较小,成本自然比EEPROM低 ...
- Flash,EEPROM差别
flash是用来存储代码的,在执行过程中不能改:EEPROM是用来保存用户数据,执行过程中能够改变,比方一个时钟的闹铃时间初始化设定为12:00,后来在执行中改为6:00,这是保存在EEPROM里,不 ...
- 单片机成长之路(51基础篇) - 002 STC单片机冷启动和复位有什么区别
STC单片机简介 STC单片机是一款增强型51单片机,完全兼容MCS-51,还增加了新的功能,比如新增两级中断优先级,多一个外中断,内置EEPROM,硬件看门狗,具有掉电模式,512B内存等.还支持I ...
- STM32学习笔记:读写内部Flash(介绍+附代码)
一.介绍 首先我们需要了解一个内存映射: stm32的flash地址起始于0x0800 0000,结束地址是0x0800 0000加上芯片实际的flash大小,不同的芯片flash大小不同. RAM起 ...
- 时空上下文视觉跟踪(STC)算法的解读与代码复现(转)
时空上下文视觉跟踪(STC)算法的解读与代码复现 zouxy09@qq.com http://blog.csdn.net/zouxy09 本博文主要是关注一篇视觉跟踪的论文.这篇论文是Kaihua Z ...
随机推荐
- 关于单片机的RAM
一块RAM 分为了 堆 和 栈 名词而已,知道就可以了, 各种内存溢出问题: 全局数组访问越界 出现的问题:直接重启,或者死机 解决办法 : 额,写好自己的程序吧!!!!!!! 函数的局部变量过 ...
- c++ map内置类型的默认值(std::map default value for build-in type)
大神的帖子,留着自己备忘:http://www.it1352.com/455626.html 结论:你看到的value是整数.浮点(初始化为零)的行为是由标准定义的,你可以依赖它. 网上还有好多帖子说 ...
- oracle 如何快速删除两表非关联数据(脏数据)?
1.情景展示 现在有两者表,表1中的主键id字段和表2的index_id相对应.如何删除两表非关联数据? 2.解决方案 --第1步 delete from VIRTUAL_CARD t where ...
- 模拟26A 题解
A. marshland 考试时想到了网络流,然而不会建图,就死了. 正解是最大费用可行流. 比较容易想到的是将每个点拆为两个点, s连没有危险值的入点, 没有危险值的入点连有危险值的入点,入点出点之 ...
- maven 左边空了
看一下maven: 解决方法:进入maven的配置,把maven的路径配置一下,就好了: 结果:
- sql脱库的几种方法
当发现sql注入之后,脱库的方法,有以下几种: (1)当目标主机支持外部连接时,使用Navicat 进行连接!当时目标主机不同,使用的Navicat种类不一样: mysql : Navicat f ...
- Java里方法的参数传递方式
Java里方法的参数传递方式只有一种:值传递. Java中参数传递的都是参数值 下面从两个维度来看 1.传递的参数是8种基本数据类型 这个比较好理解,8种基本数据类型,作为参数时,可以理解为原来的一个 ...
- java实现的一个【快速排序 】算法【原创】
import java.util.Arrays; import org.apache.commons.lang.ArrayUtils; public class Test { public stati ...
- HDFS部署测试记录(2019/05)
目录 HDFS部署测试记录 0.HDFS基础知识 1.基本组成结构与文件访问过程 2.NameNode启动时如何维护元数据 3.HDFS文件上传流程 1.系统环境 1.安装大致记录: 2.磁盘分区 3 ...
- pytesseract.pytesseract.TesseractNotFoundError: tesseract is not installed or it's not in your path
使用pytesseract识别验证码中遇到异常如下: pytesseract.pytesseract.TesseractNotFoundError: tesseract is not installe ...