parity

基于神念TGAM的脑波小车(2)

南楼画角 提交于 2020-05-02 19:29:28
将数据处理移植到STM32上,采用串口的DMA接收模式,注意的是DMA_MODE采用Circular,DMA_BufferSize>(8*512+36=4132)(小包8个字节,每秒512个,完整的大包36个字节) 代码如下: void usart_init() { // 声明结构体 // GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; // 时钟打开 // RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE); // DMA1时钟 // GPIO配置 // GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9; // TX GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode

c#上位机与三菱PLC(FX3U)串口通讯

故事扮演 提交于 2020-05-02 15:40:26
项目中会经常用到上位机与PLC之间的串口通信,本文介绍一下C#如何编写上位机代码 与三菱FX3U进行通讯 1. 第一种方法是自己写代码实现,主要代码如下: // 对PLC的Y7进行置1 byte [] Y007_ON = { 0x02 , 0x37 , 0x30 , 0x37 , 0x30 , 0x35 , 0x03 , 0x30 , 0x36 }; // 选择串口参数 SerialPort sp = new SerialPort( " COM5 " , 9600 , Parity.Even, 7 ); // 打开串口 sp.Open(); // 写入数据 sp.Write(Y007_ON, 0 , Y007_ON.Length); // 关闭串口 sp.Close();   该方法的缺点在于我们首先要熟悉三菱PLC的通讯协议,然后根据通信规程来编写通信代码   举例说就是要对三菱PLC的Y007口进行操作,我们需要知道要对三菱PLC发送什么参数,这   里可以参考百度文库的一篇文章:   https://wenku.baidu.com/view/157632dad05abe23482fb4daa58da0116c171fa8.html 2.使用MX COMPONENT软件   2.1 MX Component 是一个工具,通过使用该工具,可以在无需具备通信协议及模块知    

Codeforces Round #482 (Div. 2)

大城市里の小女人 提交于 2020-05-02 15:08:53
标签: codeforces 题目链接 http://codeforces.com/contest/979 A.Pizza, Pizza, Pizza!!! #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <queue> using namespace std; typedef long long ll; const int maxn=100050; const int MOD=1e9+7; int main(int argc, char const *argv[]) { ll x; cin>>x; x++; if(x==1) printf("0\n"); else if(x&1) printf("%lld\n", x); else printf("%lld\n", x/2); return 0; } B.Treasure Hunt #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <queue> using namespace std; const int maxn=100050; const int MOD=1e9+7; int b

正则匹配身份证有bug你知道么?

主宰稳场 提交于 2020-04-27 19:36:32
在开发中,我们需要验证用户的输入信息,多半采用正则验证,下面就是身份证证号的几种常用的正则表达式: var reg = /(^\d{ 15}$)|(^\d{ 18}$)|(^\d{ 17}(\d|X|x)$)/; var reg= /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/; var reg = /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$/; 但是这些并不能管用,是不是很气人? 这是为什么呢? 下面我们看一下身份证的规则 身份证查询系统说明: 输入准确的18位身份证号码即可查询身份证号码归属地,年龄,性别,通过身份证号码查询姓名。 输入不合法格式的身份证号码会提示身份证号码错误,本身份证号码查询系统也可作为身份证号码验证。 身份证号码和姓名格式科普:前1-6位为行政区划代码即归属地,第7-14位为出生年月日,第15-17位为顺序代码,在同一个地区出生同一个出生的人通过顺序号码区分,第17位奇数表示男性,偶数表示女性,第18位为校验码,用于校验身份证号码是否合法 很显然我们正则验证出错的原因就是 第18位,用于身份证号是否合法验证的校验 这是为什么呢?是不是很诡异?按照道理讲,不应该不符合就是false?但是返回的都是true;

学习笔记分享之汇编---3. 堆栈&标志寄存器

亡梦爱人 提交于 2020-04-19 13:33:56
前言:   此文章收录在本人的《学习笔记分享》分类中,此分类记录本人的学习心得体会,现全部分享出来希望和大家共同交流学习成长。附上分类链接:    https://www.cnblogs.com/tibbors/category/1729804.html 学习内容:堆栈 堆栈的优点:临时存储大量数据,便于查找 堆栈中越往顶部地址编号越小 压栈出栈变的都是栈顶 堆栈的操作分解: 前提操作: MOV EBX,13FFDC //BASE MOV EDX,13FFDC //TOP 操作一:压入数据 法一: MOV DWORD PTR DS:[EDX-4],0xAAAAAAAA //先压入数据 SUB EDX,4 //再上移地址(寄存器) 法二: SUB EDX,4 //先上移地址(寄存器) MOV DWORD PTR DS:[EDX],0xBBBBBBBB //再压入数据 法三: MOV DWORD PTR DS:[EDX-4],0xDDDDDDDD //先压入数据 LEA EDX,DWORD PTR DS:[EDX-4] //再通过LEA指令上移地址(寄存器) 法四: LEA EDX,DWORD PTR DS:[EDX-4] //先通过LEA指令上移地址(寄存器) MOV DWORD PTR DS:[EDX],0xEEEEEEEE //再压入数据 操作二:读取某个数据 法一: //通过

安卓开发-安卓串口转USB-小白入门

一笑奈何 提交于 2020-04-12 17:07:06
1.新建一个安卓项目。 2.引入jar包:CH34xUARTDriver.jar(下载后直接拖入项目的libs下就可以了) 3.右键点击jar包,导入项目中(到时会弹出一个框,直接点ok就可以了) 4.检查libs文件是否与图片一致 5.可以开始写入你的代码了。在MainActivity中就可以调用串口代码了。 //初始化,并判断手机是否支持 MyApp.driver = new CH34xUARTDriver( (UsbManager) getSystemService(Context.USB_SERVICE), this, ACTION_USB_PERMISSION); //initUI(); if (!MyApp.driver.UsbFeatureSupported())// 判断系统是否支持USB HOST { Dialog dialog = new AlertDialog.Builder(MainActivity.this) .setTitle("提示") .setMessage("您的手机不支持USB HOST,请更换其他手机再试!") .setPositiveButton("确认", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0,

浅谈STM32串口通信(一)基本介绍和一个字节传输的实现

自古美人都是妖i 提交于 2020-04-09 11:04:54
文章目录 0 传输引脚 1 传输一个字节 1.1 发送一个字节 1.2 接收一个字节 2 代码 2.1 配置 2.2 发送一个字节 2.3 接收一个字节 0 传输引脚 串口收发共需要三根线 其中,TX脚为发送引脚, RX脚为发送引脚, GND为地, 作为电平的参考. 如果A发B收, 只需要连接两条线: A的TX连接B的RX, 以及GND相连即可 1 传输一个字节 1.1 发送一个字节 首先, 从传输一个字节开始说起. 抛开奇偶校验,多个停止位的情况, 假设, 我们设置一帧数据有十位, 里边包含一个起始位, 八个数据位, 还有一个停止位. 那么,我们发送一个字节, 只需要一次传输. 我们以传输0x01为例, 它的时序图如下 那怎么把这个字节变成时序呢? 发送器会帮我们完成. 只要配置好相应的波特率和停止位等即可. 发送器在起始位之后, 加入0x01对应的八个数据位, 最后加上停止位, 即可完成发送一个字节的时序. (0x01会通过发送数据寄存器(TDR), 存放到移位寄存器, 在每个时钟沿触发移位). 1.2 接收一个字节 我们以接收0x01为例(假设接收来自1.1的时序).首先我们必须设置波特率, 停止位位数, 跟接收到的时序保持一致. 那接收这边怎么知道对方是时序是什么意思呢? 波特率一致. 假设波特率为9600, 那么发送一个位需要的时间位1/9600 秒.

8支团队正在努力构建下一代区块链以太坊Ethereum 2.0

时间秒杀一切 提交于 2020-03-02 08:36:52
“我们不想在构建 Ethereum 2.0时重新造轮子。” 谈到开发人员为 Ethereum 区块链进行两个独立的升级(一个称为 Ethereum 2.0,另一个称为 Ethereum 1x)所作出的补充努力,劳尔·乔丹坚持认为,在较短的时间内将升级包括在 Ethereum 1x 中,将对正在进行的 Ethereum 2.0研究有好处。 Jordan是当前为ethereum 2.0构建软件客户端的八个不同开发团队之一的共同领导。 (作为背景,客户端通常是用不同的编程语言编写的软件实现,用户部署这些语言以连接到以太网并参与以太网。) Jordan对CoinDesk说,保持在以太坊1x内提出的“增量增强”不影响主链的长期路线图: “我认为这两个组相当正交,但我们至少必须了解每个组正在执行什么。” 目前,这两种升级的技术指导方针也称为规范,仍在进行中。 在以太开发人员中仅在最近几周认真讨论过ethereum 1x之后,它打算成为侧重于对当前以太网络的增强的中间升级。 另一方面,Ethereum 2.0具有一个更雄心勃勃的议程,该议程可追溯到2014年,包括对连锁平台的根本性改变。 在以太坊2.0的早期项目名称为 Serenity 这众所周知,目前的规范可以概括为三个主要组件的组合: 从当前被称为工作量证明(PoW)的能源密集型共识协议切换到PoS。

Rust开发以太坊智能合约-Parity

我的未来我决定 提交于 2020-03-01 12:27:57
Parity 声称是世界上最快速最轻便的客户端。它用Rust语言写成,可靠性、性能和代码清晰度都有所增强。Parity由Ethcore开发。Ethcore由以太坊基金会的几个会员创建。 网站: https://ethcore.io/parity.html Github: https://github.com/ethcore/parity Gitter聊天: https://gitter.im/ethcore/parity Arch Linux 程序包由Afri Schoedon和quininer进行社群维护。 https://aur.archlinux.org/packages/parity/ (稳定,最新版本) https://aur.archlinux.org/packages/parity-git/ (不稳定,最新开发) 已经有人报告在树莓派2上成功运行了Parity。 如果你希望 高效的 学习以太坊DApp开发,可以访问汇智网提供的 最热门 在线互动教程: 适合区块链新手的以太坊DApp实战入门教程 区块链+IPFS+Node.js+MongoDB+Express去中心化以太坊电商应用开发实战 其他更多内容也可以访问 这个以太坊博客 。 来源: oschina 链接: https://my.oschina.net/u/3837977/blog/1805446

905. Sort Array By Parity

无人久伴 提交于 2020-03-01 07:40:54
leetcode 上面有900多道题了? 905. Sort Array By Parity 题意:给定一个一维数组,将数组中的偶数移动到数组的首部,奇数放在数组的尾部。 Input: [3,1,2,4] Output: [2,4,3,1] The outputs [4,2,3,1], [2,4,1,3], and [4,2,1,3] would also be accepted. 一看就知道用双指针。一个在数组头,一个在数组尾。左边的指针判断指向的值是否是奇数,是就判断右边指针是否是偶数。当左指针满足奇数,同时右指针满足偶数时,交换两边的值。如果左指针的值不是奇数,则+1.如果右边的指针不是偶数,则+1. 两个指针相遇,说明相遇的点的左面全是偶数,相遇点的右面全是奇数,完成。 先放代码,如下: class Solution { public int[] sortArrayByParity(int[] A) { if( A == null) return A; int l = 0; int r = A.length - 1; int temp ; while (l < r){ if(A[l] % 2 == 1 && A[r] % 2 == 0){ temp = A[l]; A[l] = A[r]; A[r] = temp; l++; r--; } if(A[l] % 2 == 0)