最近看EPICS的开发手册,因为手册中是分模块介绍的,所以看了一段时间还是写不出程序来,昨天去让师兄给我以具体的设备支持的例子讲述了下(因为我们室主要用到的还是设备支持),下面是构建设备支持程序的步骤,类似于一个Hello World程序,给同样在入门道路上的朋友一个参考。

1.      像ai、bi等这些类型的记录支持,EPICS已经提供,一般情况下不需要我们自己code,我们经常需要写的是设备支持即device support,下面是一个device support 简单程序的code和编译过程,包括support、ioc和boot。

2.      步骤

说明:我的EPICS_BASE路径为/root/myepics/base/

(1)       设备支持模块

1)  通过makeBaseApp.pl脚本添加support模块,命令如下:

/root/myepics/base/bin/linux-x86/makeBaseApp.pl  -t support firstSupport

2)  在firstSupportApp/src下面添加设备支持的C源程序文件devFirstSupport.c(文件内容见下面),这里面定义了设备支持程序入口表,会根据记                           录 类型DTYP字段值来查找相应的设备支持程序;

3)  修改firstSupportApp/src/firstSupport.dbd,添加device(bi,VME_IO,devFirstSupportBi, "firstSupport")

修改firstSupportApp/src/Makefile,适当位置添加firstSupport_SRCS +=devFirstSupport.c

4)firstSupportApp/目录下运行make命令

*5)可以添加自己的.c、.h文件,需要在本目录下的Makefile中添加firstSupport_SRCS +=×××.c来对其进行编译。

(2)       IOC模块

1)  通过makeBaseApp.pl添加ioc模块

返回到top,然后运行命令:

/root/myepics/base/bin/linux-x86/makeBaseApp.pl -t ioc firstIoc

2)/root/work/epics/myFirst/firstIocApp/src下面修改Makefile,在适当位置添加dbd和lib,格式如下:***

firstIoc_DBD+= firstSupport.dbd

firstIoc_LIBS+= firstSupport

3) /root/work/epics/myFirst/firstIocApp/Db下面添加记录实例db文件如firstIoc.db(文件内容见下面)

修改此目录下面的Makefile,适当位置添加db:DB += firstIoc.db

(3)boot模块

1)  通过makeBaseApp.pl添加boot模块

返回到top,然后运行命令:

/root/myepics/base/bin/linux-x86/makeBaseApp.pl -i -t ioc firstIocBoot

(这里会提示要你输入要启动的ioc名字,这里firstIoc)

2) 到/root/work/epics/myFirst/iocBoot/iocfirstBoot下修改st.cmd

在适当位置添加加载记录实例,dbLoadRecords("db/firstIoc.db"),然后将st.cmd添加执行权限。

(4)回到top目录(/root/work/epics/myFirst),make命令编译,

(5)到/root/work/epics/myFirst/iocBoot/iocfirstBoot运行st.cmd,会循环输出1,2,3….

上面的步骤中没指名每步是具体是什么意识,后面我在补充,当然最好是自己去查看官方的开发手册。

devFirstSupport.c

#include <string.h>
#include <alarm.h>
#include <cvtTable.h>
#include <dbDefs.h>
#include <devLib.h>
#include <dbAccess.h>
#include <recSup.h>
#include <devSup.h>
#include <link.h>
#include <dbScan.h>
#include <aiRecord.h>
#include <aoRecord.h>
#include <biRecord.h>
#include <boRecord.h>
#include <mbbiRecord.h>
#include <epicsExport.h>
#include <recGbl.h>
int i;
static long init_bi(struct biRecord *pbi);
static long read_bi(struct biRecord *pbi);
struct {
    long      number;
    DEVSUPFUN report;
    DEVSUPFUN init;
    DEVSUPFUN init_bi_record;
    DEVSUPFUN get_ioint_info;
    DEVSUPFUN read_bi;
} devFirstSupportBi = {
    5,
    NULL,
    NULL,
    init_bi,
    NULL,
    read_bi
};
epicsExportAddress(dset,devFirstSupportBi);
long init_bi(struct biRecord *pbi){
        int status = 0;
        pbi->udf = TRUE;
        return status;
}
long read_bi(struct biRecord *pbi){
        if(pbi->inp.type!=VME_IO){
                recGblRecordError(S_db_badField,(void*)pbi,
                        "bi (init_record) Illegal INP field");
                return S_db_badField;
        }
        struct vmeio *pvmeio = (struct vmeio *) &(pbi->inp.value);
        char *parm = pvmeio->parm;
        if(!strcmp(parm, "first")){
                pbi->val = i++ % 2;
                printf("%d\n", i);
        }
        return 2;
}

firstIoc.db
record(bi, "firstRecord")
{
        field(DTYP, "firstSupport")
        field(INP, "#C0 S0 @first")
        field(SCAN, "1 second")
        field(ZNAM, "off")
        field(ONAM, "on")
}

EPICS简单的设备支持程序相关推荐

  1. EPICS简单实例2 -- subroutine记录(sub)介绍与使用

    这个subroutine记录用于调用一个C初始化程序和一个重复出现的扫描程序.没有设备支持对应这个记录. 参数字段 在以下描述记录专用字段,按功能分组. 扫描参数 subroutine记录有用于指定这 ...

  2. Linux驱动编程 step-by-step (二) 简单字符设备驱动

    简单字符设备驱动 1.主次设备号 主设备号标识设备连接的的驱动,此设备好由内核使用,标识在相应驱动下得对应的设备 在linux中设备号是一个32位的dev_t类型 typedef __u32    _ ...

  3. 拍摄短视频需要哪些工具?一部手机还不够,简单的设备你得有

    拍摄短视频需要哪些工具?一部手机还不够,简单的设备你得有 正所谓,工欲善其事必先利其器,拍摄短视频亦是如此,跟专业的短视频拍摄团队比不了,我们如果只是个人做短视频,又想要做出来一些成绩,那么一部手机其 ...

  4. Linux 字符设备驱动开发基础(一)—— 编写简单 LED 设备驱动

    现在,我们来编写自己第一个字符设备驱动 -- 点亮LED.(不完善,后面再完善) 硬件平台:Exynos4412(FS4412) 编写驱动分下面几步: a -- 查看原理图.数据手册,了解设备的操作方 ...

  5. 内核实验(五):传统简单字符设备驱动

    文章目录 一.篇头 二.源码 2.1 驱动关键部分 2.2 APP:test\_3\_app.c 2.3 驱动完整源码 2.4 Makefile 三.编译 3.1 编译ko 3.2 编译app 四.测 ...

  6. 块设备驱动程序设计(3)—简单块设备驱动设计

    这节课的内容主要根据上一节课分析出来的块设备的初始化和操作流程,编写出自己的块设备驱动函数.因此这篇博文主要讲一下所用到函数的用法及其他框架. 1.编写一个模块框架 2.注册一个块设备major = ...

  7. Linux 字符设备驱动开发基础(二)—— 编写简单 PWM 设备驱动

    编写驱动的第一步仍是看原理图: 可以看到,该蜂鸣器由 GPD0_0 来控制 ,查手册可知该I/O口由Time0 来控制,找到相应的寄存器: a -- I/O口寄存器及地址 GPD0CON  0x114 ...

  8. android获取ro._Android 简单的设备信息获取

    在用python写自动化测试脚本的脚本的时候通常回需要获取一些android设备的硬件信息.网上给的很多方案都是通常通过/system/build.prop中去获取,但是回遇到permission d ...

  9. Linux嵌入式学习(简单 platform 设备驱动的实现)

    文章目录 编辑device.c 编辑driver.c 编辑Makefile 编辑app.c 编译.加载和测试 话不多说,直接开始吧- 工作环境:VMware14+Ubuntu18.04 内核版本:5. ...

最新文章

  1. 创建3层的服务模板 (1)--- 概述
  2. SharePoint中修改密码的WEB Part之终极版:即可以修改AD,又可以修改本机用户密码的Web Part!!...
  3. 【数据结构】栈的压入、弹出序列
  4. 微型计算机dec al,微机原理复习知识点
  5. mysql tdh_socket_thread_num_TDH_Socket的一些性能对比数据
  6. vue踩坑以及自己的解决办法总结,
  7. 分布有限传输速度高的计算机网络,第5章 计算机网络基础.ppt
  8. 快速开发:普元EOS平台简介
  9. [转] DevExpress GridView 排序状态下新增行不参与排序
  10. DiffMerge 工具记录
  11. Dram学习笔记(1) Dram相关基础知识
  12. 昆明站 · 参会指南 | 2018中国软件生态大会
  13. 阿里云自助建站方式汇总
  14. 【大学时光】回首向来萧瑟处,归去,也无风雨也无晴
  15. 7-46 新浪微博热门话题
  16. 浅说ksm的适用范围
  17. maven提示:Failed to execute goal on project ...: Could not resolve dependencies for project ...
  18. CES包罗万象 家用清洁机器人将亮相展会
  19. 本地文件搜索工具 Everything 为什么速度这么快?
  20. ChatGPT颠覆者来了,能替代90%的人的工作?

热门文章

  1. 关于微信小程序分享及分享朋友圈、复制链接
  2. unity animator动画融合时的上下半身速度分离控制
  3. 关系数据模型的三个组成部分(关系数据模型的三个组成部分)
  4. 浅谈ipad阅读类应用设计
  5. 4.8 期货每日早盘操作建议
  6. 为交付Semi卡车做准备 特斯拉招募技术服务人员
  7. 激活windows系列地址
  8. 数据库范式1NF 2NF 3NF详细阐述
  9. windows 7 UEFI 启动模式安装,解决win7 64 setup会提示GPT分区不支持的问题
  10. 基于深度学习的物体识别系统