找回密码
 立即注册
查看: 578|回复: 5

EPROM地址问题

[复制链接]

该用户从未签到

7

主题

35

回帖

211

积分

中级会员

积分
211
发表于 2023-5-24 16:45:40 | 显示全部楼层 |阅读模式
你好版主,如题问题如下,


while(1)
        {
                if (TIME_10ms == 1)
                {
                        TIME_10ms = 0;

//在10MS执行一次的框架内,


u8 xdata EEPROM_BUF_U1[1024]={0};             //两个扇区的EEPROM数据,U1参数
u8 xdata EEPROM_BUF_U2[1024]={0};             //两个扇区的EEPROM数据,U2参数
u8 xdata EEPROM_BUF_U3[1024]={0};             //两个扇区的EEPROM数据,U3参数
u8 xdata EEPROM_BUF_U4[1024]={0};             //两个扇区的EEPROM数据,U4参数

新建变量用来保存零时数据


        EEPROM_read_n(0,EEPROM_BUF_P,1024);       //读取掉电数据,将地址0开始的1024个字节的数据读出来保存到EEPROM_BUF数组
        EEPROM_read_n(1024,EEPROM_BUF_U1,1024);       //读取掉电数据,将地址1024开始的1024个字节的数据读出来保存到EEPROM_BUF_U1数组
        EEPROM_read_n(2048,EEPROM_BUF_U2,1024);       //读取掉电数据,将地址2048开始的1024个字节的数据读出来保存到EEPROM_BUF_U2数组
        EEPROM_read_n(3072,EEPROM_BUF_U3,1024);       //读取掉电数据,将地址3072开始的1024个字节的数据读出来保存到EEPROM_BUF_U3数组
        EEPROM_read_n(4096,EEPROM_BUF_U4,1024);       //读取掉电数据,将地址4096开始的1024个字节的数据读出来保存到EEPROM_BUF_U4数组

while循环之前读取数据,//如果不加读取这一行,那么数码管就可以显示0000,加了这4行就不能显示数据,直接黑屏,数码管使用TM1650控制,以下是数码管显示函数,

Seg_Show_Bit1(0,EEPROM_BUF_U1[PARM_Num_U]);                //数码管第一位显示数组U1对应的参数
Seg_Show_Bit1(1,EEPROM_BUF_U2[PARM_Num_U]);                //数码管第二位显示数组U2对应的参数
Seg_Show_Bit1(2,EEPROM_BUF_U3[PARM_Num_U]);                //数码管第三位显示数组U3对应的参数
Seg_Show_Bit1(3,EEPROM_BUF_U4[PARM_Num_U]);                //数码管第四位显示数组U4对应的参数

以下是零时数组变量写入EPROM


if( KEY_ReadState(Btn_Set)==KEY_LONGPRESS )                        //如果长按Btn_Set,则进入P参数二级分类值的设定
{
        EEPROM_SectorErase(1024);                                                        //擦除从1024开始的512字节的一个扇区                               
        EEPROM_SectorErase(1536);                                                           //擦除从1536开始的512字节的一个扇区
        EEPROM_SectorErase(2048);                                                        //擦除从2048开始的512字节的一个扇区                               
        EEPROM_SectorErase(2560);                                                           //擦除从2056开始的512字节的一个扇区
        EEPROM_SectorErase(3072);                                                        //擦除从3072开始的512字节的一个扇区                               
        EEPROM_SectorErase(3584);                                                           //擦除从3584开始的512字节的一个扇区
        EEPROM_SectorErase(4096);                                                        //擦除从4096开始的512字节的一个扇区                               
        EEPROM_SectorErase(4608);                                                           //擦除从4608开始的512字节的一个扇区
        EEPROM_write_n(1024,EEPROM_BUF_U1,1024);                                //重新写入掉电数据,将4096个数据重新写入地址0,方便下一次读取
        EEPROM_write_n(2048,EEPROM_BUF_U2,1024);                                //重新写入掉电数据,将4096个数据重新写入地址0,方便下一次读取
        EEPROM_write_n(3072,EEPROM_BUF_U3,1024);                                //重新写入掉电数据,将4096个数据重新写入地址0,方便下一次读取
        EEPROM_write_n(4096,EEPROM_BUF_U4,1024);                                //重新写入掉电数据,将4096个数据重新写入地址0,方便下一次读取
        PARM_Flow = 23;
}

以上是写入EPROM保存区,



现在遇到的问题是,添加读取函数,数码管直接黑屏,不显示任何数据,不添加读取函数,数码管即可以显示0000,  
请问这个是怎么回事?是10MS时间不够用吗?硬件是STC32G12K128

回复 送花

使用道具 举报

该用户从未签到

9

主题

304

回帖

1774

积分

版主

积分
1774
QQ
发表于 2023-5-24 17:08:54 | 显示全部楼层
本帖最后由 32位8051-STCAI 于 2023-5-24 17:10 编辑

建议参考STC32G实验箱例程包例程“19-使用LVD低压检测中断保存EEPROM”,在中断里周期性刷新数码管。
1.png

QQ:1463035472,微信:19952583954
回复 支持 反对 送花

使用道具 举报

该用户从未签到

7

主题

35

回帖

211

积分

中级会员

积分
211
 楼主| 发表于 2023-5-25 12:10:15 | 显示全部楼层
本帖最后由 zackwu 于 2023-5-25 14:14 编辑
32位8051-STCAI 发表于 2023-5-24 17:08
建议参考STC32G实验箱例程包例程“19-使用LVD低压检测中断保存EEPROM”,在中断里周期性刷新数码管。

谢谢,
还有一个问题是,已经下载了程序,设置了数据在EEPROM地址里面,此时再下载程序的话,EEPROM里面的数据回丢失,请问这个怎么处理?

在下载软件STC-ISP里面,硬件选项-旋转FLASH空白区域的填充值,这个是不是就可以理解为,我新建一个临时数组变量,u8 xdata EEPROM_BUF_J[1024],那么这个时候EEPROM_BUF_J[0]的值为FF,是这个意思吗?


如附件操作视频,我取消了,硬件选项-下次下载用户程序时擦除用户EEPROM区,下载程序后,数据丢失。


我重新看一下,好像上传不了视频。



@梁工,能否帮忙看一下。

操作视频

操作视频

视频.zip

85.46 KB, 下载次数: 28

回复 支持 反对 送花

使用道具 举报

该用户从未签到

9

主题

304

回帖

1774

积分

版主

积分
1774
QQ
发表于 2023-5-25 14:13:16 | 显示全部楼层
上传视频可以参考此帖:如何在本论坛发视频 - 开源广场及教学视频交流 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区  https://www.stcaimcu.com/forum.php?mod=viewthread&tid=1815
QQ:1463035472,微信:19952583954
回复 支持 反对 送花

使用道具 举报

该用户从未签到

7

主题

35

回帖

211

积分

中级会员

积分
211
 楼主| 发表于 2023-5-25 14:17:03 | 显示全部楼层
貌似解决了,待长时间,换不同的板子测试看看。就把下载软件里面,清除EEPROM缓冲区,和硬件选项-下次下载用户程序时擦除用户EEPROM区,取消勾选就行了,如果这样真的行的话(反正我测下来是行的),不止到官方为啥默认是勾选的。

点评

默认勾选,是考虑批量生产时,保证下载程序后,EEPROM是被清除的状态。同一片IC重复下载学习、研发,则自行去掉勾选。  详情 回复 发表于 2023-5-25 15:21
回复 支持 反对 送花

使用道具 举报

该用户从未签到

46

主题

3121

回帖

7041

积分

超级版主

积分
7041
发表于 2023-5-25 15:21:45 | 显示全部楼层
zackwu 发表于 2023-5-25 14:17
貌似解决了,待长时间,换不同的板子测试看看。就把下载软件里面,清除EEPROM缓冲区,和硬件选项-下次下载 ...

默认勾选,是考虑批量生产时,保证下载程序后,EEPROM是被清除的状态。同一片IC重复下载学习、研发,则自行去掉勾选。
回复 支持 反对 送花

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2024-6-1 17:10 , Processed in 0.067978 second(s), 56 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表