SylixOS

SylixOS上EtherCAT实现

自古美人都是妖i 提交于 2019-12-01 08:29:17
1 EtherCAT开源协议栈介绍 目前常见开源的主站代码为RT-LAB开发的SOEM(Simple OpenSource EtherCAT Master)和EtherLab的the IgH EtherCAT® Master,SylixOS对两者都支持。其中IgH作为常用的EtherCAT开源协议栈,SylixOS已移植支持。 2 SylixOS-IgH使用框架 SylixOS-IgH的使用尽可能保留了Linux下IgH的使用方式,其中延续了命令行工具的功能,而在应用程序开发方面,借助SylixOS集成开发套件的优势,用户可以更方便编辑、调试基于SylixOS-IgH的应用程序。 SylixOS-IgH主要分为IgH主站协议栈、网络设备驱动、IgH用户层接口库以及用户应用程序。具体介绍如下所述: 2.1 IgH主站协议栈 IgH主站协议栈源代码经编译后是一具体的ec_master.ko内核模块,EtherCAT功能集中实现在该模块中,另外该模块注册之后会在/dev路径下创建一个EtherCAT字符设备,如图 2‑1所示。 图2‑1 /dev路径下的EtherCAT0主站 用户程序操作EtherCAT主站,会通过用户层接口函数最终调用I/O系统的open,ioctl函数完成EtherCAT协议栈的执行。 2.2 网络设备驱动 针对SylixOS

SylixOS Python扩展库开发

随声附和 提交于 2019-11-30 03:20:04
1 适用范围 本文档适用于希望使用基于SylixOS进行Python扩展库开发的用户。 2 SylixOS Python简介 Python是一门面向对象的解释型的脚本语言,Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,而后封装为Python可以调用的扩展类库。 目前SylixOS支持的Python为3.6.4版本,支持绝大多数内建库,但并未移植扩展库。 3 SylixOS Python扩展库开发 可扩展性是Python的一大特色,Python的扩展库可以基于Python语言开发,也可通过C、JAVA等语言进行开发。 本文将介绍如何使用RealEvo-IDE开发C语言版本的SylixOS Python扩展库。C语言版本Python扩展库开发有以下两种方式。 3.1 基于python ctypes模块开发 SylixOS下的Python支持ctypes内建模块。此模块的CDLL方法会调用SylixOS操作系统的dlopen()函数,从而导入用户开发的C/C++动态库。 编写简单的动态库lib_demo

SylixOS定时器测试误差分析

元气小坏坏 提交于 2019-11-29 14:38:41
测试模型 1.1 测试流程 图 1.1 运行流程 如图 1.1所示为测试代码运行流程,通过GPIO拉高到拉低的时间来判断定时器的精准度。 1.2 测试方法 1.2.1 测试模型 利用ZYNQ内部私有定时器,设置定时时间250μs并绑定中断。在中断服务程序中拉高GPIO,下一次进入中断服务程序时拉低GPIO并且发送二进制信号量。在应用程序中创建高优先级任务接收二进制信号量并且模拟负载,创建10个中优先级任务模拟负载,连接示波器测量时间。 1.2.2 测试干扰项 其他不同优先级的中断; 其他负载程序; 二进制信号量; 1.3 测试结果 程序运行时会产生如图 1.2所示波形。 图 1.2 正常波形 使用示波器抓波功能,如图 1.3图 1.4所示抓取电平拉低与拉高的时间间隔,经过12小时抓取小于242μs的的波形未出现,经过12小时抓取大于258μs的波形未出现。 图 1.3 抓取小于242μs波形 图 1.4 抓取大于258μs波形 测试结果可以看到误差范围在242μs到258μs之间,所以误差大小为±8μs。 误差分析 从程序运行流程来看,到达定时时间250μs后: ○1中断产生; ○2响应中断服务程序; ○3拉GPIO; (一) 如果到达250μs定时时间时,中断产生之前发生系统关中断,则中断无法响应;SylixOS最大关中断时间7μs;此时则可能产生误差; (二)

SylixOS 基于STM32平台的GPIO模仿I2C总线的驱动开发流程

蹲街弑〆低调 提交于 2019-11-29 14:38:34
1.概述 本文档以STM32F767平台为例,详细介绍SylixOS上GPIO模仿I2C总线的驱动开发流程。 2.初始化 GPIO模仿的I2C总线的初始化,实际上是I2C总线的SDA和SCL的GPIO管脚初始化。初始化流程如图 2.1所示。 图 2.1 I2C初始化流程图 代码实现,如程序清单 2.1所示。I2C总线的SDA和SCL两个GPIO管脚的GPIO速度要设置成快速模式,输出模式需要设置成推挽输出模式。 程序清单 2.1 I2C初始化代码 /* * 申请 I2C 1 通道的 SCL 的 GPIO */ if (ERROR_NONE != API_GpioRequest(I2C1_CHANNEL_SCL, I2C1_SCL_GPIO_NAME)) { return (PX_ERROR); } /* * 设置上拉 */ if (ERROR_NONE != API_GpioSetPull(I2C1_CHANNEL_SCL, GPIO_PUPD_PU)) { return (PX_ERROR); } /* * 设置为推挽输出模式,且 GPIO 速度为快速 */ if (ERROR_NONE != API_GpioDirectionOutput(I2C1_CHANNEL_SCL, (GPIO_SPEED_SET | GPIO_OTYPE_SET | LW_GPIOF_INIT