循环队列存储数据

EEPROM EEPROM读写控制,以及多字节数据读写 阅读详情

再来一遍

 

  近来在项目中,要在EEPROM中存储最近48小数的数据,使用的MCU为兼容的8052芯片(V9001,电能计量SOC),考虑到使用的是模拟I2C和52的处理能力,使用一个循环队列来控制数据存储的位置.

一.队列构建

struct Queue
{
  uint16  xdata *DataID;
  uint8    Size;
  uint8 front;  //头指针
  uint8 rear;//尾指针
   
};

//================================
//初始化队列
//==================================
void InitQueue(struct Queue *p,uint8 DataNum,uint16 *dataID)
{
  p->DataID=dataID;
  p->front=1;
  p->rear=0;
  p->Size=DataNum;
  
}

//==================================
//队列满判断
//==================================
int IsFull(struct Queue *p)
{
  return (p->rear+2)%(p->Size)==p->front;
}

//========================
//队列空判断
//=========================
int IsEmpty(struct Queue *p)
{
    return (p->rear+1)%(p->Size)==p->front;
}
//========================
//队列插入
//=========================
int  Insert(struct Queue *p,uint16 DataID)
{
   if(IsFull( p))
    return 0;
    else
        {
          p->rear=(p->rear+1)%(p->Size);
      *(p->DataID+p->rear)=DataID;
      return 1      ;
        }
}


//==========================================
//队列删除
//==========================================
int Delete(struct Queue *p)
{
   if(IsEmpty(p))
       return 0;
   else
       {
          p->front=(p->front+1)%(p->Size);
       return 1;
       }
}

 

队列采用空出一个位置来判断队空和队满的问题.

二.如何在再次上电后回复队列状态

  每次进行队列操作,都会在EEPROM中保存队列首指针和尾指针的值,同时保存首指针所指的数组中的值.因为所要存储的是一个连续的值,只要恢复了这三个数据,就能得到上次系统运行时的队列状态.

  以7个数据项(0xc160~0XC167)为例子

   recover the front and rear pointer

   DataFront=EEPROM[Frontaddress]

   if(rear>front)

      index=front:rear

       if(DataFront>0xc167)

         DataFront=0xc160

       Data[index]=DataFront

      loop

  else

       index=front:7

       if(DataFront>0xc167)

         DataFront=0xc160

       Data[index]=DataFront

      loop

      index=0:rear

     if(DataFront>0xc167)

         DataFront=0xc160

       Data[index]=DataFront

       loop

 

三、数据存储和队列修改

     当需要存储当前小时电量数据的时候,只要调用队列的插入和删除方法,同时将队列信息写入EEPROM中,以防系统突然当机等问题。

Python数据结构与算法基础|第五期:代码实现——循环队列的链式存储结构 在上一次,我们通过取余等数学方法实现了顺序存储的循环队列。由于我们使用的是Python内置的列表类型作为底层,实际上我们的存储空间并不是首尾相连的。下面,我们使用链式存储结构来实现一个真正首尾相连的循环队列: class Node(object): '定义节点。' def __init__(self): '初始化:数据域与指针域。' self.data = None sel... 阅读详情

相关推荐

【UE5_蓝图】实时音频采集与动态WAV文件保存实战指南

本文详细介绍了在UE5中使用蓝图实现实时音频采集与动态WAV文件保存的完整流程。从插件配置、录音框架搭建到动态文件名生成和音频参数优化,提供了实用技巧和常见问题解决方案,特别适合需要快速实现音频采集功能的开发者。

weixin_29009669的博客 409

(9)存储和EEPROM管理

Ardupilot官网关于《Learning the code》的翻译 —《存储和EEPROM管理》。

无人机开发(开源Ardupilot) 1万+

用化学方法nmp溶剂从佳能cmos传感器上剥离拜耳矩阵和微透镜

将光刻胶暴露于 NMP 溶剂中 10-15 分钟,并进行轻微的机械搅拌,将溶解的光刻胶从基材表面带走,即可去除大部分光刻胶,之后再进行第二次溶剂浴,以洗去微量含有光刻胶的溶剂。我还担心传感器的校准问题,我觉得可以大致解决这个问题,比如在安装面上用刻度尺标记三个螺丝的位置,然后数着拧出螺丝的圈数,直到听到“咔哒”声(螺纹完全拧出)。我还担心传感器的校准问题,我觉得可以大致解决这个问题,比如在安装面上用刻度尺标记三个螺丝的位置,然后数着拧出螺丝的圈数,直到听到“咔哒”声(螺纹完全拧出)。在我看来,这是必读的;

qq_40247880的博客 1476

基础知识之EEPROM 掉电保存

EEPROM 掉电保护,数据保护 I2C

weixin_43981289的博客 3339

Spring Boot整合AWS S3文件上传实战:从配置到权限管理全流程解析

本文详细解析了Spring Boot整合AWS S3文件上传的全流程,包括基础配置、核心上传功能实现、高级权限控制及安全最佳实践。通过实战案例展示如何高效处理文件上传、大文件分片及权限管理,帮助开发者构建健壮的文件管理系统。特别强调AWS S3的高可用性和安全性,适用于企业级应用开发。

sam99的博客 283

CRC_16---ModBus 计算方法及代码实现

1、 CRC寄存器初始值为 0xFFFF;即16个字节全为1; 2、 CRC-16 / ModBus的多项式0xA001H (1010 0000 0000 0001B) ; ‘H’表示16进制数,‘B’表示二进制数。 计算步骤为: (1).预置 16 位寄存器为十六进制 0xFFFF(即全为 1) ,称此寄存器为 CRC 寄存器; (2).把第一个 8 位数据与 16 位 CRC 寄存器的低位相异或,把结果放于 CRC 寄存器; (3).检测相异或后的CRC寄存器的最低位,若最低位为1,CRC寄存器

1万+

数据结构——队列-循环队列

循环队列是顺序队列结构,将顺序存储队列元素的一维数组首尾相连。 也可以理解为:顺序队列的头尾相连=循环队列数据结构

2301_79998367的博客 3998

学Simulink--基础微电网场景实例:基于Simulink的微电网并网/孤岛无缝切换控制仿真

本文完成了基于 Simulink 的微电网并网/孤岛无缝切换控制仿真,实现了:✅ 构建含双模式逆变器的微电网模型✅ 实现预同步 + Stateflow 逻辑的智能切换✅ 验证计划与非计划切换的性能边界✅ 证明“无缝”在工程上是可实现的。

amy_mhd的博客 102

【Memory协议栈】EEPROM Abstraction模块详细介绍

EEPROM Abstraction模块详细介绍

qq_36056498的博客 2068

【S32K3 MCAL配置】-1.1-GPIO配置及其应用-DIO之高低电平输出-点亮LED灯(基于MCAL)

【S32K3 MCAL配置】-1.1-GPIO配置及其应用-点亮LED灯(基于MCAL)

「汽车电子助手」的博客 1937

海康VisionMaster与西门子PLC1200进行S7通信

通信是连通算法平台和外部设备的重要渠道,在海康VisionMaster算法平台中既支持外部数据的读入也支持数据的写出,当通信构建起来以后既可以把软件处理结果发送给外界,又可以通过外界发送字符来触发相机拍照或者软件运行。 本文以西门子PLC1200作为外部设备为例,讲解海康VisionMaster与西门子PLC1200进行S7通信。......

haier123888的博客 1万+

大话数据结构笔记:循环队列及队列的链式存储

一、循环队列 1.循环队列的顺序存储结构代码: #define MAXSIZE 20 typedef struct { int data[MAXSIZE]; int front; //头指针 int rear; //尾指针,若队列不为空,指向队列尾元素的下一个位置 }SqQueue;     &nb...

吴立赛的博客 1481

从零到一使用PXE实现系统的无人值守自动化安装的保姆级教程

本文是《从零到一使用PXE实现系统的无人值守自动化安装的保姆级教程》亲自实操可用,本文从PXE是什么?有啥用?及其亲自实践出通过以国产银河麒麟系统为例从零到一的搭建出PXE服务器端(适用于其他系统),且测试了该搭建的PXE服务端自动化无人值守安装系统的保姆级实操教程。适用于大批量设备系统安装部署场景。

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 581

【数据结构】-循环队列1(顺序存储)

顺序存储-循环队列11.头文件及类型定义2.循环队列类型定义3.函数声明4.基本操作4.1 初始化队列4.2 判空4.3 入队4.4 出队4.5 获取队头元素4.6 main函数5.小结 1.头文件及类型定义 #include<stdio.h> #define MaxSize 10 //定义队列中元素的最大个数 #define ElemType int using namespace std; 2.循环队列类型定义 typedef struct { //顺序队列类型定义 El

RunningSnail的博客 1002

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【数据结构】第三章(2)队列、队列的存储结构——顺序队列、循环队列(顺序循环队列、链循环队列)

【数据结构】第三章(2)队列、队列的存储结构——顺序队列、循环队列(顺序循环队列、链循环队列)

weixin_45991687的博客 1925

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【数据结构】队列的顺序存储实现-循环队列

【数据结构】队列的顺序存储实现-循环队列 //循环队列的实现 //队列向前删除,向后新增元素,实现先进先出,如排队 #include&lt;iostream&gt; using namespace std; ​ typedef int ElementType; #define MaxSize 10 #define ERROR -1 //定义循环队列,由一个数组,两个变量front和rear组成...

zhangxiafll的博客 1060

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

循环队列-顺序存储结构-数据结构

循环队列采用顺序存储结构, 简单的基本操作,入队,出队,取对头元素,判断是否空队列,队列长度 例代码: #include #include #include #define ERROR 0 #define OK 1 #define OVERFLOW -1 #define MAXSIZE 10 typedef int Elemtype; typedef int Status; type

小铅笔 780

数据结构:队列的顺序存储结构(循环队列)

队列的定义: 队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。 队列的抽象数据类型: ADT 队列(Queue) Data 同线性表,元素具有相同的类型,相邻元素具有前驱和后继关系。 Operation InitQueue(*Q): 初始化操作,建立一个空队列。 DestroyQueue(*Q): 若队列Q存...

weixin_34353714的博客 210

[数据结构-严蔚敏版]P64循环队列-队列的顺序存储结构

代码如下: #include <iostream> using namespace std; const int MAXQSIZE = 10; typedef int ElemType; typedef struct { ElemType *base; int front; int rear; }SqQueue; bool initQueue(SqQueue &q) { q.base = new ElemType[MAXQSIZE]; if (!q.base) retu

m0_51955470的博客 325

大话数据结构八:队列的顺序存储结构(循环队列)

1. 什么是队列? 队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。 2. 队列的特点: 队列是一种先进先出(First In First out)的线性表,允许插入的一端称为队尾,允许删除的一端称为队头。 3. 队列顺序存储有什么不足? 使用数组实现的顺序存储,当做出队列操作时,所有的元素都需要向前移动一位,

技术人生 4051

数据结构(五):队列——顺序存储(循环队列)与链式存储的定义与基本操作

数据结构(五):队列——顺序存储(循环队列)与链式存储的定义与基本操作

ReadyGo!!!的博客 1463

【原创】循环队列存储数据

  项目对数据存储和获取有一定的要求,循环队列能解决我的问题,上网查相关的资料,重新了解了一下循环队列。  在编写代码的时候尤其需要注意循环队列数组超出下界的情况,而且有一点得说明的是循环队列在初始化的时候指向对头的前指针Front和指向队尾的指针Rear初始化为0,循环队列为空的情况只有在Front == Rear下成立,而判断循环队列是否已满需要判断(Rear + 1) % Max_Size ...

weixin_30820077的博客 262

数据结构-循环队列顺序存储

目标效果: dsp0304.cpp: #include #include #include "sqqueue.h" //初始化系统 void Initialize(SqQueue &q); //显示操作菜单 void ShowMenu(); //读取用户命令 int GetCommand(); //执行用户命令 int DoCommand(int cmd, SqQueue &

Vivinia的博客 481

【数据结构】非循环队列-顺序存储

队列概念 队列是对头出、队尾入的先进先出线性表。 需要两个指针front和rear分别来指向队头和队尾。 front指向队头元素的前一个位置,rear总是指向队尾元素。 进队:rear+1 出队:front+1 队空条件:front=rear 队满条件:rear = MaxSize - 1 代码 #include <stdio.h> #include <stdlib.h> #include <malloc.h> #define E...

BUG从入门到精通 943

【数据结构】顺序存储的循环队列

循环队列 顺序存储的队列又被叫静态队列。如果队列不循环,会因不断出队入队,数据向后移动,产生假溢出现象。 主要就是2个整形一个表示队首一个表示队尾。其他跟顺序存储一样。 代码收获 循环队列的头指针和尾指针相等既表示队列满,也表示队列空,所以做入队时判断加一余最大大小不能等于头指针。这样数据永远差一个元素满,就可以判断这个栈到底是空栈还是满栈了。 循环队列打印也要注意需要进行取余的问题。 #...

不忘初心,坚定道路! 1600

数据结构:循环队列的顺序存储结构

队列只允许在队尾插入,在队头删除 循环队列防止假溢出现象 顺序存储结构用数组实现 #include <iostream> using namespace std; #define OK 1 #define ERROR 0 #define MAXSIZE 6 typedef int ElemType; typedef int Status; /* 定义顺序存储结构的循环队列:SqQue...

CSU_hhxyliang的博客 700
上一篇: CRC-16校验
下一篇: 高质量C++/C编程指南
海之渊
博客等级 码龄19年 15粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值