当前位置: 首页 > news >正文

EtherCAT主站IgH解析(二)-- 如何将Igh移植到Linux/Windows/RTOS等多操作系统

版权声明:本文为本文为博主原创文章,转载请注明出处 https://www.cnblogs.com/wsg1100
如有错误,欢迎指正。
本文简单介绍如何将 igh 移植到 zephyr、freertos、rtems、rtthread等RTOS ,甚至 windows 上。
##前言

目前,EtherCAT商用主站有:Acontis、TwinCAT3、KPA、Codesys等,开源EtherCAT主站则主要有两大方案:igh与SOEM,两者设计天差地别,SOEM开源于2008年底1.1.2版本,具备良好的可移植性,能够轻松适配各类操作系统乃至裸机环境,然而,在功能丰富度与实时性能表现上(除裸机外)远不如IgH,应用层面想要应对复杂的EtherCAT应用场景会非常困难,SOEM的协议栈运作依托于应用层接口的驱动,其内部并无独立任务(线程)。

相比之下,IgH诞生较早,IgH功能全面,同时注重实时性能,为了在linux上获得良好的实时性能和低CPU利用率,同时方便多主站使用时进程间隔离等原因,IgH设计之初就基于linux内核态,今天看来可移植性较差;

igh的高实时性能得益于linux内核态可直接操作网卡收发,功能全面得益于其内部采用的多任务状态机架构,这些任务驱动机制通过系统调用向用户空间的EtherCAT应用提供服务,极大简化了应用层面的接口交互,使得EtherCAT应用操作接口变得极为简单。

那么IgH能移植到linux用户态,或者其他RTOS吗?答案是当然能,本文做简单介绍。

IgH整体框架及运行原理本详见博客文章 【原创】EtherCAT主站IgH解析(一)–主站初始化、状态机与EtherCAT报文。

那么IgH能移植到裸机吗?理论上可以,但比较麻烦,但是IgH整体设计就是多任务的,关键点是没有任务调度,几个状态机如何驱动?不考虑权衡投入产出、可复用性,你可以自行尝试。

IgH依赖操作系统服务

IgH虽然运行在linux内核态,但并不与Linux内核的耦合,整个协议栈只用到了linux的基本服务。

操作系统服务描述
任务(线程)调度每个主站,内部状态机运行需要2个任务,EoE 1个(可选)、应用层周期任务
睡眠(定时服务)任务睡眠,让出CPU;应用层通信周期控制,如果RTOS没有高精度定时接口,可启一个硬件timer回调更加精确。
读取时间戳EtherCAT子报文对象维护需要收发时间戳
动态内存分配master、slave、datagram、eoe、eeprom等对象需要动态内存分配
event(非必须)应用调用主站服务时阻塞到事件等待,主站完成服务后通过事件唤醒应用
Semaphore/mutex同步互斥
TCP/IP网络协议栈主站已支持二层网络包转发,若设备本身需要TCP/IP网络远程调试工具需要TCP支持;可选实现主站EOE

关于RTOS 的高精度定时器详见博客文章不同RTOS中POSIX接口的实现差异 ,相关章节。

其他适配

其他一些数据结构以及网络接口相关:

  • 网卡驱动,主要实现轮询式无中断方式的二层网络包收发接口,原Linux ethernet设备的抽象及skb的替代实现;
  • EtherCAT主站初始化流程调整;
  • 链表、打印输出;
  • Linux相关特性删减修改:GNU C、unlikely、likely、prefetch,编译器特性等。
http://www.lryc.cn/news/381897.html

相关文章:

  • ansible copy模块参选选项
  • 展厅设计主要的六大要素
  • 【数据结构与算法】最小生成树,Prim算法,Kruskal算法 详解
  • 【启明智显产品分享】Model3工业级HMI芯片详解系列专题(三):安全、稳定、高防护
  • 【面试干货】Java中的四种引用类型:强引用、软引用、弱引用和虚引用
  • 对称/非对称加密
  • DDei在线设计器-API-DDeiSheet
  • 随想录 Day 69 并查集 107. 寻找存在的路径
  • Hi3861 OpenHarmony嵌入式应用入门--LiteOS Mutex
  • 使用STM32F103完成基于I2C协议的AHT20温湿度传感器的数据采集
  • Huffman树——AcWing 148. 合并果子
  • 05 Pytorch 数据读取 + 二分类模型
  • 数据仓库之Kappa架构
  • ReactNative进阶(二十八)Metro
  • python爬虫入门到精通路线
  • Java 笔记:常见正则使用
  • vue 2.0项目中使用tinymce富文本框遇到的问题
  • 【STM32+FPGA】先进算力+强安全+边缘AI,64位STM32MP2聚焦工业4.0应用
  • Git 和 TortoiseGit 安装和配置(图文详解)
  • OpenAI CTO谈GPT-5将达博士生智力水平;斯坦福评估排名前十两款来自中国
  • 焦化超低排平台组成部分
  • 鸿蒙 navigation路由跳转,页面struct 下的生命周期、onShow、onHidden等不会触发问题
  • BUUCTF [CISCN2019 华北赛区 Day2 Web1] Hack World
  • wsl2平台鸿蒙全仓docker编译环境快速创建方法
  • 商业秘密侵权
  • 高通安卓12-固件升级
  • 我的常见问题记录
  • Python 3.12 环境搭建(Windows版)
  • 植物大战僵尸杂交版如何手动修改金币钻石数
  • Salia PLCC cPH2 远程命令执行漏洞(CVE-2023-46359)