spi

Dubbo系列<10>-Dubbo SPI

馋奶兔 提交于 2020-12-15 09:46:37
前面咱们已经了解了JDK SPI的原理、实现、优缺点。 Dubbo在JDK SPI基础之上做了一些优化。 大部分的思想都是和 SPI 是一样,只是下面两个地方有差异。 1. 需要在 resource 目录下配置 META-INF/dubbo 或者META-NF/dubbo/internal 或者 META-INF/services,并基于 SPI 接口去创建一个文件 2. 文件名称和接口名称保持一致,文件内容和 SPI 有差异,内容是 KEY 对应 Value 基于上面所说咱们自己来实现一个MyProtocol 第一步自定义一个类Protocl,并且实现com.alibaba.dubbo.rpc.Protocol。 package com.tian.dubbo.protocol; import com.alibaba.dubbo.common.URL; import com.alibaba.dubbo.rpc.Exporter; import com.alibaba.dubbo.rpc.Invoker; import com.alibaba.dubbo.rpc.Protocol; import com.alibaba.dubbo.rpc.RpcException; /** * 自定义协议 * (这里只是做一个演示,所以只是把端口调整了) * @Author tianweichang

迅为IMX6ULL开发板Linux RS232/485驱动实验(上)

本秂侑毒 提交于 2020-12-14 11:31:36
在 arm 设备中串口是很常用的一个外设,不仅可以用来打印信息,还可以用于外接设备和其他 传感器 通信。根据不同的电平,串口分为 TTL 和 RS232,但是在 Linux 内核中的驱动程序是一样的,在串口上外接RS485 类似的芯片就可以把 RS232 信号转换为 RS485 信号,非常方便。在 i.MX6UL 终结者开发板上,RS232、 RS485 和 GPS 模块都接到了 UART3 接口上,内核驱动都是一样的。在本章来学习一下串口驱动。 53.1 Linux 下的 UART 驱动框架 53.1.1 uart_driver 结构体 在 Linux 中 uart 和 I2C、SPI 一样,提供了串口驱动框架,只需要按照提供的串口框架函数编译驱动即可。一般来说串口驱动都已经实现好了,我们需要做的就是在设备树文件中,添加相应的设备节点。当设备和驱动匹配成功后,串口就能够正常工作。 在 Linux 中,用 uart_driver 结构体来描述串口,uart_driver 定义在 include/linux/serial_core.h 文件中,内容如下: 295 struct uart_driver { 296 struct module *owner; /* 模块所属者 */ 297 const char *driver_name; /* 驱动名字 */ 298 const

【分享】Xilinx FPGA伴你玩转USB3.0和LVDS

橙三吉。 提交于 2020-12-14 06:21:28
内容简介 本书主要使用Xilinx公司的Artix7 FPGA器件(引出自带的LVDS接口)和Cypress公司的USB 3.0控制器芯片FX3,以及一些常见的DDR3存储器、UART电路、扩展接口等,由浅入深地读者从板级设计、软件工具、相关驱动安装到基础的FPGA实例,从基于FPGA的UART、DDR3、USB 3.0、LVDS传输实例入手,掌握FPGA各种片内资源的应用以及接口时序的设计。 本书基于特定的FPGA开发平台,既有足够的理论知识深度进行支撑,也有丰富的例程进行实践讲解,并且穿插着笔者多年FPGA学习和开发过程中的各种经验和技巧。对于希望基于FPGA实现USB 3.0和LVDS开发的工程师,本书提供的很多实例都是很好的参考原型,可以帮助其实现快速系统原型的开发。 (1)《Xilinx FPGA伴你玩转USB3.0与LVDS》基于Xilinx Artix-7 FPGA LVDS USB 3.0的硬件开发平台,提供有丰富的例程讲解:从基础的FPGA入门实例到基于FPGA的UART、DDR3、LVDS、USB 3.0传输实例。(2)《Xilinx FPGA伴你玩转USB3.0与LVDS》提供一站式入门学习方案:板级设计、软件工具和相关驱动安装、丰富的例程讲解,让读者快速掌握FPGA各种片内资源的应用以及接口时序的设计。 Contents 目录 第1章FPGA

如何用一个实例来探讨嵌入式软件架构设计

自作多情 提交于 2020-12-14 06:11:19
一、感慨 近公司新招了一个做嵌入式软件开发开发的童鞋,该童鞋是从上海的某一个上市公司出来的,因为我们这边人手不够,因此把他安排了去负责一个新产品的研发,前期让他负责加速度计、NB-IOT、舵机、外置Flash的功能测试,测试完成之后,准备让他做一个该产品的概要设计。然后他花了2个星期的时间,给我们写出来一个概要设计,说实话,我看到这个概要设计,我就觉得是刚毕业的大学生写的。 版本一的架构设计 2.1系统体系结构 系统分为两层:硬件驱动层、应用层。 2.1.1硬件驱动层 硬件驱动层包含板载硬件资源正常运行所需的所有驱动程序。 1)MCU初始化 2)I2C数据存取 3)SPI数据读取 4)加速度计初始化 5)蓝牙模块启动 6)BC95模块启动 7)485通讯模块启动 2.2.2应用层 1)Mcu运行模式切换 2)震动及倾斜 3)数据解析 4)开/关锁 5)数据发送 6)历史数据保存 看到版本一的架构设计之后,说实话,我还是第一次见到这样来写架构设计的,居然是以序号来写的,这个让别人读起来,特别的别扭。   版本二的架构设计 看到版本二的架构设计之后,虽然颇感欣慰,但是想到达到我们所要求的,还要很大的一段距离,该架构设计,主要有以下几点问题: 1.对架构的理解还不是很清晰,既然是做架构设计,那就应该从整体来看,而不是仅仅只是局限于一个模块,或者功能里面。 2

Sentinel 集群限流设计原理

时光毁灭记忆、已成空白 提交于 2020-12-13 16:34:54
点击上方 “中间件兴趣圈” , 选择 “设为星标” 做积极的人,越努力越幸运! 1、集群限流使用场景 首先一个服务有三个服务提供者,但这三台集群的硬件配置不一样,如图所示: 在这里插入图片描述 为了充分利用硬件的资源,诸如 Dubbo 都提供了基于权重的负载均衡机制,例如可以将8C16G的机器设置的权重是4C8G的两倍,这样充分利用硬件资源,假如现在需要引入 Sentinel 的限流机制,例如为一个 Dubbo 服务设置限流规则,这样由于三台集群分担的流量不均匀,会导致无法重复利用高配机器的资源。 假设经过压测,机器配置为C48G最高能承受的TPS为 1500,而机器配置为8C16G能承受的TPS为2800,那如果采取单机限流,其阔值只能设置为1500,因为如果超过1500,会将4C8G的机器压垮。 解决这种办法的方式就是针对整个集群进行限流,即为整个集群设置一个阔值,例如设置限流TPS为6000。 2、集群限流与单机限流的异同思考 限流的一个基本作用就是按照限流规则生成访问许可(Token),然后根据当前实时的调用信息进行判断是否可以获得许可而决定是否放行。 集群与单机限流在实时调用信息收集方面应该差别不大,都可以基于滑动窗口进行统计信息的收集。 集群与单机限流的最主要区别在与许可的生成,单机模式的许可直接在本地生成,但集群限流必须有一个统一的 Token 发放机制

Java中SPI机制详解

谁说我不能喝 提交于 2020-12-13 14:03:27
本文转载于 高级开发必须理解的Java中SPI机制 本文通过探析JDK提供的,在开源项目中比较常用的Java SPI机制,希望给大家在实际开发实践、学习开源项目提供参考。 一、 SPI是什么 SPI全称 Service Provider Interface ,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。 整体机制图如下: Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制。 系统设计的各个抽象,往往有很多不同的实现方案,在面向的对象的设计里,一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了可拔插的原则,如果需要替换一种实现,就需要修改代码。为了实现在模块装配的时候能不在程序里动态指明,这就需要一种服务发现机制。 Java SPI就是提供这样的一个机制:为某个接口寻找服务实现的机制。有点类似IOC的思想,就是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要。所以SPI的核心思想就是解耦。 二、使用场景 概括地说,适用于:调用者根据实际使用需要,启用、扩展、或者替换框架的实现策略。 比较常见的例子: 数据库驱动加载接口实现类的加载 JDBC加载不同类型数据库的驱动 日志门面接口实现类加载 SLF4J加载不同提供商的日志实现类 Spring

211-基于FMC的ADC-DAC子卡

╄→гoц情女王★ 提交于 2020-12-12 06:58:26
基于FMC的ADC-DAC子卡 一、板卡概述   FMC-1AD-1DA-1SYNC是我司自主研发的一款1路1G AD采集、1路2.5G DA回放的FMC、1路AD同步信号子卡。板卡采用标准FMC子卡架构,可方便地与其他FMC板卡实现高速互联,可广泛用于高频模拟信号采集、雷达系统测试等领域。       二、功能介绍 2.1 原理框图 2.2 硬件功能 Ø 标准FMC子卡,尺寸为69mmx76.5mm,安装孔为2.7mm; Ø 板上共5个SMA连接器,1个FMC/HPC接口; Ø 1通道1.5 GSPS模数转换,ADC采用TI公司的ADC081500,8位低功耗单通道1.5G采样率; Ø 1通道2.5 GSPS数模转换,DAC采用ADI公司的AD9739,14位2.5G射频数模转换器; Ø 可选本地时钟和外部时钟; Ø 本地时钟源采用低老化率、高稳定度的温补晶振(TCXO); Ø 时钟管理芯片采用AD9516,5路LVPEL时钟输出; Ø 支持外触发; Ø 支持1路AD同步采集、同步复位; Ø ADC芯片ADC081500高性能、低功耗 8 位、1.5 GSPS A/D 转换器;  Ø 模拟信号输入采用Balun交流耦合,单端输入,输入阻抗50Ω,输入频率范围300MHz~2.1GHz; Ø 模拟信号输入的电压范围750mVpp~1Vpp; Ø DAC芯片AD9739采用单总线模式

是的,RT-Thread 3.0.4发布了

▼魔方 西西 提交于 2020-12-12 05:01:18
2018年已过去一半了,让我们先默默回顾下年初的计划和目标实现的怎么样了? RT-Thread基本上是按着既定的节奏在推进,离上一个版本发布也过去将近一个季度,在年中迎来v3.0.4版本发布,同时越来越多的开发者加入到了RT-Thread的建设中,如来一颗糖,liuguang,zhuangwei,bluebear,孙冬梅等开发者亦做出许多的贡献。 下面 们主要分新版本发布和社区两块来做一个介绍。 新版本发布 RT-Thread 3.0.4版本相比RT-Thread 3.0.3版本改动不算大,一部分也是bsp的调整,主体比较大的改动部分包括: 更完善的龙芯1C BSP:在龙芯1C智龙开发板上,RT-Thread可以不再依赖pmon就运行起来了。目前龙芯1C BSP也相对健全,可以购买一套龙芯1C300开发板支持下我们国家的龙芯处理器。 更完善的i.MX RT1052 BSP驱动支持,基本上(除了camera驱动)整套驱动都齐全了; 针对GNU GCC版本以及libc功能特性的侦测,以最大程度避免GCC不同版本而带来的编译问题; 其他主要是一些周边的改动,github上的master主干也在发布v3.0.4后,开始陆续的把v3.1.0开发分支的更改合并过去;而v3.0.4会做为v3.0.x分支继续进行维护。 内核 调整rt_event_send中hook调用位置

SylixOS EEPROM 驱动

谁说胖子不能爱 提交于 2020-12-08 12:01:10
EEPROM简介 EEPROM全称为Electrically Erasable Programmable read only memory,带电可擦除可编程只读存储器,是一种掉电数据不会丢失的存储芯片。 EEPROM的擦除不需要借助于其它设备,它是以电子信号来修改其内容的,而且是以Byte为最小修改单位,不必将资料全部洗掉才能写入,彻底摆脱了EPROM Eraser和编程器的束缚。EEPROM在写入数据时,仍要利用一定的编程电压,此时,只需用厂商提供的专用刷新程序就可以轻而易举地改写内容,所以,它属于双电压芯片。借助于EEPROM芯片的双电压特性,可以使BIOS具有良好的防毒功能,在升级时,把跳线开关打至“on”的位置,即给芯片加上相应的编程电压,就可以方便地升级;平时使用时,则把跳线开关打至“off”的位置,防止CIH类的病毒对BIOS芯片的非法修改。所以,至今仍有不少主板采用EEPROM作为BIOS芯片并作为自己主板的一大特色。 2.EEPROM举例 本章以FM25V20A 为例说明EEPROM 的工作原理。 2.1EEPROM的访问方式 根据芯片厂商不同的设计,可以通过SPI或者I2C访问EEPROM。FM25V20A是通过SPI总线访问的。访问芯片时,主机应该先发送操作码,EEPROM识别相应的操作码之后才能继续相应读写操作。FM25V20A定义命令码如图 2.1所示。 图

SylixOS SPI

随声附和 提交于 2020-12-08 10:28:41
目 录 1 SPI总线关键结构体... 1 1.1 总线传输控制消息块... 1 1.2 SPI总线适配器... 2 1.3 SPI设备... 3 2 SPI各个结构体之间的联系... 3 2.1 总线链表... 3 2.2 总线与设备... 3 3 参考资料... 4 SPI总线关键结构体 总线传输控制消息块 传输控制消息包括操作单位bits数、传输控制参数(时钟极性、相位和字节序等配置)、发送和接收缓冲区及其长度、传输结束的回调函数。如程序清单 1.1所示。 程序清单 1.1 typedef struct lw_spi_message { UINT16 SPIMSG_usBitsPerOp; /* 操作单位bits数 */ UINT16 SPIMSG_usFlag; /* 传输控制参数 */ #define LW_SPI_M_CPOL_0 0x0000 /* CPOL 配置 */ #define LW_SPI_M_CPOL_1 0x0001 #define LW_SPI_M_CPHA_0 0x0000 /* CPHA 配置 */ #define LW_SPI_M_CPHA_1 0x0002 #define LW_SPI_M_CPOL_EN 0x0004 /* 是否设置新的 CPOL 配置 */ /* 否则 CPOL 配置与上次传输相同*/ #define LW_SPI_M