PROFIBUS DP从站开发 VPC3源程序分析---user_chk_new_cfg_data(void)

2023-11-15

//
/// 以下程序注释由成都地质学院霸王猫添加,引用时请尊重作者劳动成果,标明引用者来自成都地质学院霸王猫。
//

UBYTE user_chk_new_cfg_data(void)

  入口参数:
         无

    出口参数:
        无

    返回值:
            VPC3_CFG_OK/VPC3_CFG_FAULT/VPC3_CFG_UPDATE

    调用格式:
        switch(user_chk_new_cfg_data())

    函数功能:
        
        比较配置缓冲器和读配置缓冲器中的数据是否完全一致,如果一致,则触发一次用户“VPC3+C收到一个Chk_Cfg报文,使CFG缓冲器中的数据可用”的用户事件。
            user.event |= VPC3_EV_NEW_CFG_DATA,让主程序继续进行处理。
        

    源程序:

/*---------------------------------------------------------------------------*/
/* function: user_isr_new_cfg_data                                           */
/*                                                                           */
/* todo  : check cfg data                                                    */
/*                                                                           */
/* return:  VPC3_CFG_OK      0                                               */
/*          VPC3_CFG_FAULT   1                                               */
/*          VPC3_CFG_UPDATE  2                                               */
/*---------------------------------------------------------------------------*/
#if( ISR_ENABLE_VPC3_INT_NEW_CFG_DATA == 1 )
UBYTE user_chk_new_cfg_data(void)
{
    UBYTE PTR_ATTR*  readcfg_ptr;    // pointer read config buffer
    UBYTE PTR_ATTR*  cfg_ptr;   // pointer check config buffer
    UBYTE    cfg_len;
    UBYTE    ret_value;
    UBYTE    i;
    
    ret_value = VPC3_CFG_OK;
    cfg_len = VPC3_GET_CFG_LEN();    

    if ( cfg_len == VPC3_GET_READ_CFG_LEN() )
    {
    

        readcfg_ptr = VPC3_GET_READ_CFG_BUF_PTR();
        cfg_ptr     = VPC3_GET_CFG_BUF_PTR();

        for (i = 0 ; i < cfg_len ; i++)
        {
            if (*(readcfg_ptr + i) != *(cfg_ptr + i))
            {
                ret_value = VPC3_CFG_FAULT;
                      
                break;
            }
        }
    }
    else
    {
        ret_value = VPC3_CFG_FAULT;

    }

    if ( ret_value == VPC3_CFG_OK )
    {
        user.event |= VPC3_EV_NEW_CFG_DATA;
    }
    return (ret_value);
}

//-------------------------------------------------------------------------------------
1. 执行下面语句 
//-------------------------------------------------------------------------------------
    ret_value = VPC3_CFG_OK;
    cfg_len = VPC3_GET_CFG_LEN();


已知:
    (1)、VPC3_GET_CFG_LEN() = 调用宏定义获取配置缓冲器长度(寄存器地址31H)
    (2)、ret_value = VPC3_CFG_OK (首先假定返回值 = VPC3_CFG_OK)


目的:
    获取配置缓冲器长度


结果:
    cfg_len = 配置缓冲器长度


//-------------------------------------------------------------------------------------
2. 执行下面语句 
//-------------------------------------------------------------------------------------
    if ( cfg_len == VPC3_GET_READ_CFG_LEN() )


已知:
    (1)、VPC3_GET_READ_CFG_LEN() = #define VPC3_GET_READ_CFG_LEN()   vpc3->len_read_cfg_data  (获取“读配置缓冲器”长度)
    (2)、cfg_len = 配置缓冲器长度


目的:
    判断“配置缓冲器”长度和“读配置缓冲器”长度是否相等


结果:
    逻辑条件为真


//-------------------------------------------------------------------------------------
3. 执行下面语句 
//-------------------------------------------------------------------------------------
    readcfg_ptr = VPC3_GET_READ_CFG_BUF_PTR();
        cfg_ptr     = VPC3_GET_CFG_BUF_PTR();


已知:
    (1)、VPC3_GET_READ_CFG_BUF_PTR() = #define VPC3_GET_READ_CFG_BUF_PTR() (UBYTE PTR_ATTR *)(((VPC3_ADR)(vpc3->read_cfg_buf_ptr << SEG_MULDIV)+((VPC3_ADR)VPC3_ASIC_ADDRESS))) = 寄存器地址= 34H,读取“读配置缓冲器”的段地址 
    (2)、VPC3_GET_CFG_BUF_PTR() = #define VPC3_GET_CFG_BUF_PTR()      (UBYTE PTR_ATTR *)(((VPC3_ADR)(vpc3->cfg_buf_ptr << SEG_MULDIV     )+((VPC3_ADR)VPC3_ASIC_ADDRESS))) =  寄存器地址= 32H,读取“配置缓冲器的段地址”


目的:
    (1)、获取“读配置缓冲器”的段地址
    (2)、获取配置缓冲器”的段地址


结果:
    (1)、readcfg_ptr = 读配置缓冲器段地址
    (2)、cfg_ptr = 配置缓冲器段地址

//-------------------------------------------------------------------------------------
4. 执行下面语句 
//-------------------------------------------------------------------------------------
        for (i = 0 ; i < cfg_len ; i++)
        {
            if (*(readcfg_ptr + i) != *(cfg_ptr + i))
            {
                        ret_value = VPC3_CFG_FAULT;
                      
                        break;
            }
        }


已知:
    (1)、cfg_len = 配置缓冲器长度( FOR 循环中比较次数)
    (2)、readcfg_ptr = 读配置缓冲器段地址
    (3)、cfg_ptr = 配置缓冲器段地址


目的:
    (1)、依次比较配置缓冲器和读配置缓冲器中的数据是否完全一致。

结果:
    (1)、配置缓冲器和读配置缓冲器中的数据完全一致。

//-------------------------------------------------------------------------------------
5. 执行下面语句 
//-------------------------------------------------------------------------------------
    if ( ret_value == VPC3_CFG_OK )
    {
    user.event |= VPC3_EV_NEW_CFG_DATA;
    }


已知:
    (1)、ret_value


目的:
    (1)、如果配置缓冲器和读配置缓冲器中的数据完全一致,触发一次用户“VPC3+C收到一个Chk_Cfg报文,使CFG缓冲器中的数据可用”的用户事件。
           让主程序继续进行处理。     

结果:
    (1)、user.event |= VPC3_EV_NEW_CFG_DATA

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PROFIBUS DP从站开发 VPC3源程序分析---user_chk_new_cfg_data(void) 的相关文章

  • 二分查找法

    二分查找法 1 基础二分查找 2 改进二分查找 3 平衡版二分查找法 4 查找目标值最左索引 5 查找目标值最右索引 6 查找大于等于目标值的最左索引 7 查找小于等于目标的最右索引值 1 基础二分查找 二分查找法 基础 public st
  • mysql系统错误216_MySQL异常 - Skqing - OSCHINA - 中文开源技术交流社区

    jdbc mysql localhost 3306 ry useUnicode true characterEncoding utf8 zeroDateTimeBehavior convertToNull useSSL true Druid
  • 【扫盲】机器学习图像处理中的深层/浅层、局部/全局特征

    浅层网络与深层网络浅层网络更注重于细节信息 深层网络更注重于语义信息 浅层网络 一般感受野较小 能够利用更多的细粒度特征信息 而且此时特征图每个像素点对应的感受野重叠区域还很小 这就保证了网络能够捕获更多细节 深层网络 随着下采样或卷积次数
  • 常见黑客渗透测试工具

    因为上面要转了一篇 里面好多我都觉得过时了 不过确实好多我也还在用 哈哈 留个备份吧 免得上面又要找我要 一 Nessus 是扫描UNIX漏洞的主力工具 随后栖身Windows 主要功能包括本地和远程安全审查 支持client server
  • 10亿个数字,内存限制100M,进行排序

    解题思路 分治法 拆分小文件 先对每个小文件进行排序 然后使用小顶堆或大顶堆合并文件 代码 python3 import threading from queue import Queue import time import random
  • 小程序页面收录sitemap.json的作用与使用方法

    desc 关于本文件的更多信息 请参考文档 https developers weixin qq com miniprogram dev framework sitemap html rules action allow page 微信现已
  • 毕业设计-基于GUI的模拟电路故障诊断仿真平台研究- Matlab

    目录 前言 课题背景和意义 实现技术思路 一 联合仿真平台设计与实现 二 系统测试 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校要
  • MySQL运行原理与基础架构

    1 MySQL基础 MySQL是一个开放源代码的关系数据库管理系统 原开发者为瑞典的MySQL AB公司 最早是在2001年MySQL3 23进入到管理员的视野并在之后获得广泛的应用 2008年MySQL公司被Sun公司收购并发布了首个收购
  • APP违法违规收集使用个人信息行为认定方法

    没有公开收集使用规则的情形 在App中没有隐私政策 或者隐私政策中没有收集使用个人信息规则 解读 APP内无法找到隐私政策或隐私政策内没有包含该APP收集使用个人信息的规则 在App首次运行时未通过弹窗等明显方式提示用户阅读隐私政策等收集使
  • 【Python】删除USB网络共享在win系统中递增的网络x

    删除之后还是挺干净的 软件环境 windows python3 winreg模块 自带 如果是python2请修改为 winreg 前置知识 所有已保存的网络存储HKEY LOCAL MACHINE SOFTWARE Microsoft W
  • Hive表的几种存储格式及在性能调优应用

    一 理论知识学习 底层决定上层建筑 此部分内容引用了 Hive表的几种存储格式 海贼王一样的男人 博客园 Hive的文件存储格式 textFile textFile为默认格式 存储方式 行存储 缺点 磁盘开销大 数据解析开销大 压缩的tex
  • QT background-color: transparent

    改行代码的作用是可以把背景颜色设为透明 transparent 是默认的 background color transparent 别小看这个 这个 css 代码 在 qt 样式表里应用 可以实现挺好看的效果 如果你遇到有些字体被背景颜色遮
  • 在指定内存上创建对象——placement new机制

    一 介绍 一般来说 使用new申请空间时 是从系统的 堆 heap 中分配空间 申请所得空间的位置是随机的 但是 在某些特殊情况下 可能需要在已分配的特定内存创建对象 比如内存池 这就是所谓的 定位放置new placement new 操
  • Contrastive Loss (对比损失)

    Contrastive Loss 对比损失 在caffe的孪生神经网络 siamese network 中 其采用的损失函数是contrastive loss 这种损失函数可以有效的处理孪生神经网络中的paired data的关系 cont
  • 【CSS】CSS基础知识

    选择器 element 直接选择全部的元素 如 div 选择所有的div元素 id 选择某一id的元素 如 title 选择id为title的元素 class 选择包含某个class的部分元素 如 item 选择class为item的元素

随机推荐

  • 【MySQL基础】MySQL基本数据类型

    序号 系列文章 1 MySQL基础 MySQL介绍及安装 2 MySQL基础 MySQL基本操作详解 3 MySQL基础 MySQL基本数据类型 文章目录 前言 1 数字类型 1 1 整型类型 1 2 浮点数类型 1 3 定点数类型 1 4
  • 如何用YOLOv5玩转半监督(附源码实现)

    目录 引言 背景 目标检测 域自适应 DA Faster SWDA SCL NLDA MEAA UMT MSDA USDAF SIGMA DTPL MTOR 方法 Mean Teacher Model Pseudo Training Ima
  • Redis系列三

    1 6 Redis事务 事务可以一次执行多个命令 并且带有以下两个重要的保证 事务是一个单独的隔离操作 事务中的所有命令都会序列化 按顺序地执行 事务在执行的过程中 不会被其他客户端发送来的命令请求所打断 事务是一个原子操作 事务中的命令要
  • python-正则表达式入门初级篇

    Python 正则表达式入门 初级篇 本文主要为没有使用正则表达式经验的新手入门所写 转载请写明出处 引子 首先说 正则表达式是什么 正则表达式 又称正规表示式 正规表示法 正规表达式 规则表达式 常规表示法 英语 Regular Expr
  • java深入体会

    javase01阶段 idea几个常用设置 1 调整字体大小 2 自动导包 3 不区分大小写 4 设置背景颜色 小数参与计算 1 小数参与计算才会出现小数 int a 10 int b 20 1 a b 30 1 2 小数参与计算有几率出现
  • Vue echart toolbox 工具栏点击 自定义全屏按钮 显示到弹出框中

    最终效果 说明 由于页面上的echart图表过多 写一个vue子组件 直接在父页面调取复用 安装插件 npm i echarts 在 main js 中引用 import echarts from echarts Vue prototype
  • 读标准03-IEEE1451.5标准协议尝鲜实现

    读标准03 IEEE1451 5标准协议尝鲜实现 前面两个文章里面已经详细描述了 TEDS 和 Message 的组成 这里 C 的实现分两个部分 分别对 TEDS 和 Message 的 数据结构实现 与 帧打包与解析的算法实现 第一版
  • java 程序猿必备技能——Debug详解

    Debug的引入和概述 IDEA中Debug的使用 Debug演示 一 前言 在我们以往的程序执行中 只能看到控制台上展示的最终结果 无法直观清晰地看到程序内部每一个变量的加载 更迭 以及代码执行的内部逻辑 而Debug 断点调试 可以让我
  • python3最新版本-mac下安装Python3.*(最新版本)

    前言 mac系统自带python 不过以当前mac系统的最新版本为例 自带的python版本都是2 版本 虽然不影响老版本项目的运行 但是python最新的3 版本的一些语法与2 版本并不相同 网上的教程大神们也肯定都更新出了最新版的教程
  • VC实现对话框文件拖拽

    使用过QQ的人都知道 只要把文件拖拽到消息框中就可以传送文件了 那么这种功能是如何实现的呢 其实很简单 只需要响应一个WM DROPFILES消息就可以了 在基于对话框的程序中 默认是没有这个消息的 按下Ctrl W 弹出类向导对话框 选择
  • kettle通过java步骤获取汉字首拼

    kettle通过java步骤获取汉字首拼 用途描述 一组数据 需要获取汉字首拼后 输出 实现效果 添加jar包 pinyin4j 2 5 0 jar 自定义常量数据 Java代码 完整代码 import net sourceforge pi
  • 用指针交换两个数

    题目描述 利用指针交换用户输入的两个数 输入 测试次数t 共t行 每行两个整数 输出 共t行 每行输出交换后的两个整数 输入样例1 2 1 2 35 21 输出样例1 2 1 21 35 思路分析 用a和b两个变量把数存储下来 再用两个指针
  • swift4.0自定义UITabBarController +UINavigationController

    首先开始项目之前我们需要搭建框架 首选UITabBarController UINavigationController 下面的代码是整理好的 包括我们会遇到的问题解决方法都在里面 自定义UINavigationController cla
  • TypeScript算法-19. 删除链表的倒数第 N 个结点

    TypeScript算法 19 删除链表的倒数第 N 个结点 思路 代码 思路 要删除倒数第N个节点 就要找到倒数第N 1个节点 然后直接将next指针指向next next即可 为了找到倒数第N 1个节点 可以使用快慢指针 让快指针先走n
  • openGL法线贴图和纹理贴图结合使用,以增强三维物体表面细节

    openGL系列文章目录 文章目录 openGL系列文章目录 前言 一 法线贴图 二 代码 1 主程序 2 着色器程序 运行效果 源码下载 前言 凹凸贴图的一种替代方法是使用查找表来替换法向量 这样我们就可以在不依赖数学函 数的情况下 对凸
  • JS复选框:获取选中的checkobx

    div div
  • 异常检测怎么做,试试孤立随机森林算法(附代码)

    点击上方 程序员小乐 关注 星标或置顶一起成长 每天凌晨00点00分 第一时间与你相约 每日英文 If someone hurts you please continue good good to enjoy life hurt the s
  • CentOS7中Docker常规安装Redis

    一 下拉redis docker pull redis 二 处理redis宿主机配置文件相关 mkdir p app redis data mkdir p app redis conf 三 上传一份redis官网默认原始的redis con
  • 超级详细的 Maven 教程(基础+高级)

    1 Maven 是什么 Maven 是 Apache 软件基金会组织维护的一款专门为 Java 项目提供构建和依赖管理支持的工具 一个 Maven 工程有约定的目录结构 约定的目录结构对于 Maven 实现自动化构建而言是必不可少的一环 就
  • PROFIBUS DP从站开发 VPC3源程序分析---user_chk_new_cfg_data(void)

    以下程序注释由成都地质学院霸王猫添加 引用时请尊重作者劳动成果 标明引用者来自成都地质学院霸王猫 UBYTE user chk new cfg data void 入口参数 无 出口参数 无 返回值 VPC3 CFG OK VPC3 CFG