go语言硬件信息 go语言的性能

【原创】树莓派3B开发Go语言(四)-自写库实现pwm输出 在前一小节中介绍了点亮第一个LED灯,这里我们准备进阶尝试下,输出第一段PWM波形 。(PWM也就是脉宽调制,一种可调占空比的技术,得到的效果就是:如果用示波器测量引脚会发现有方波输出,而且高电平、低电平的时间是可调的 。)
这里爪爪熊准备写成一个golang的库,并开源到github上 , 后续更新将直接更新到github中,如果你有兴趣可以和我联系 。github.com/dpawsbear/bear_rpi_go
我在很多的教程中都看到说树莓派的PWM(硬件)只有一个GPIO能够输出,就是GPIO1。这可是不小的打击,因为我想使用至少四个PWM,还是不死心,想通过硬件手册上找寻蛛丝马迹,看看究竟怎么回事 。
手册上找寻东西稍等下讲述,这里先提供一种方法测试树莓派3B的PWM方法:用指令控制硬件PWM 。
这里通过指令的方式掌握了基本的pwm设置技巧,决定去翻一下手册看看到底PWM怎么回事,这里因为没有BCM2837的手册,根据之前文章引用官网所说,BCM2835和BCM2837应该是一样的 。这里我们直接翻阅BCM2835的手册 , 直接找到PWM章节 。找到了如下图:
图中可以看到在博通的命名规则中 GPIO 12、13、18、19、40、41、45、52、53 均可以作为PWM输出 。但是只有两路PWM0 PWM1 。根据我之前所学知识 , 不出意外应该是PWM0 和 PWM1可以输出不一样的占空比,但是频率应该是一样的 。因为没有示波器 , 暂时不好测试 。先找到下面对应图:
根据以上两个图对比可以发现如下规律:
对照上面的表可以看出从 BCM2837 中印出来的能够使用在PWM上的就这几个了 。
为了验证个人猜想是否正确,这里先直接使用指令的模式,模拟配置下是否能够正常输出 。
通过上面一系列指令模拟发现,(GPIO1、GPIO26)、(GPIO23、GPIO24)是绑定在一起的,调节任意一个,另外一个也会发生变化 。也即是PWM0、PWM1虽然输出了两路,可以理解成两路其实都是连在一个输出口上 。这里由于没有示波器或者逻辑分析仪这类设备(仅有一个LED灯),所以测试很简陋 , 下一步是使用示波器这类东西对频率以及信号稳定性进行下测试 。
小节:树莓派具有四路硬件输出PWM能力,但是四路中只能输出两个独立(占空比独立)的PWM , 同时四路输出的频率均是恒定的 。
上面大概了解清楚了树莓派3B的PWM结构,接下来就是探究如何使用Go语言进行设置 。
因为拿到了手册 , 这里我想直接操作寄存器的方式进行设置,也是顺便学习下Go语言处理寄存器的过程 。首先需要拿到pwm 系列寄存器的基地址,但是翻了一圈手册 , 发现只有偏移,没有找到基地址 。
【go语言硬件信息 go语言的性能】 经过了一段时间的努力后,决定写一个 树莓派3B golang包开源放在github上 , 只需要写相关程序进行调用就可以了,以下是相关demo(pwm)(在GPIO.12 上输出PWM波,放上LED灯会有呼吸灯的效果 , 具体多少频率还没有进行测试)
以下是demo(pwm) 源码
go的简介Go语言于2009年11月正式宣布推出,成为开放源代码项目,并在Linux及Mac OS X平台上进行了实现,后追加Windows系统下的实现 。
谷歌资深软件工程师罗布·派克(Rob Pike)表示 , “Go让我体验到了从未有过的开发效率 。”派克表示 , 和今天的C或C一样,Go是一种系统语言 。他解释道,“使用它可以进行快速开发,同时它还是一个真正的编译语言,我们之所以现在将其开源,原因是我们认为它已经非常有用和强大 。”
2007年 , 谷歌把Go作为一个20%项目开始研发,即让员工抽出本职工作之外时间的20%,投入在该项目上 。除了派克外,该项目的成员还有其它一些谷歌工程师 。
派克表示,编译后Go代码的运行速度与C语言非常接近,而且编译速度非常快 , 就像在使用一个交互式语言 。
现有编程语言均未专门对多核处理器进行优化 。派克表示,Go就是谷歌工程师为这类程序编写的一种语言 。它不是针对编程初学者设计的,但学习使用它也不是非常困难 。Go支持面向对象 , 而且具有真正的封装(closures)和反射(reflection)等功能 。
在学习曲线方面,派克认为Go与Java类似 , 对于Java开发者来说,应该能够轻松学会Go 。
之所以将Go作为一个开源项目发布,目的是让开源社区有机会创建更好的工具来使用该语言,例如Eclipse IDE中的插件 。目前还没有支持Go的IDE 。
在目前谷歌公开发布的所有网络应用中,均没有使用Go 。但是谷歌已经使用该语言开发了几个内部项目 。
派克表示,Go是否会对谷歌即将推出的Chrome OS产生影响,现在还言之尚早,不过Go的确可以和Native Client配合使用 。他表示,“Go可以让应用完美的运行在浏览器内 。”例如 , 使用Go可以更高效的实现Wave , 无论是在前端还是后台 。
Go语言是一种新的语言,一种并发的、带垃圾回收的、快速编译的语言 。它具有以下特点:
1.它可以在一台计算机上用几秒钟的时间编译一个大型的Go程序 。
2.Go语言为软件构造提供了一种模型,它使依赖分析更加容易,且避免了大部分C风格include文件与库的开头 。
3.Go语言是静态类型的语言,它的类型系统没有层级 。因此用户不需要在定义类型之间的关系上花费时间,这样感觉起来比典型的面向对象语言更轻量级 。
4.Go语言完全是垃圾回收型的语言,并为并发执行与通信提供了基本的支持 。
按照其设计,Go打算为多核机器上系统软件的构造提供一种方法 。
Go语言是一种编译型语言 , 它结合了解释型语言的游刃有余,动态类型语言的开发效率 , 以及静态类型的安全性 。它也打算成为现代的,支持网络与多核计算的语言 。要满足这些目标 , 需要解决一些语言上的问题:一个富有表达能力但轻量级的类型系统,并发与垃圾回收机制 , 严格的依赖规范等等 。这些无法通过库或工具解决好,因此Go也就应运而生了 。
Go-websocket最近在学习Go语言,利用之前的项目作为案例进行重构 。项目背景:php提供TCP服务,硬件连接服务器需要处理信息 , 然后将处理的信息在发送客户端,客户端拿到信息展示给用户 。第一种方案客户端对发送信息的接口进行轮询,检查硬件是否有信息返回 , 这样不好太浪费资源;第二种方案采用websocket将信息主动发送给客户端 , 客户端做后续的展示和处理工作;所以最终采用websocket 。PHP实现websocket采用GatewayWorker,经过商业论证还是很稳定的 。
在用Go语言重构项目的时候,需要用Go重新搭建Websocket,去网上查了一些资料,利用 gorilla/websocket 在嵌套web框架就可以实现websocket,目前采用Go语言的iris Web框架,接下来就说说我是怎么实现的 。
如何配置go语言开发环境1.1 Go 安装
Go的三种安装方式
Go有多种安装方式,你可以选择自己喜欢的 。这里我们介绍三种最常见的安装方式:
Go源码安装:这是一种标准的软件安装方式 。对于经常使用Unix类系统的用户,尤其对于开发者来说 , 从源码安装可以自己定制 。
Go标准包安装:Go提供了方便的安装包,支持Windows、Linux、Mac等系统 。这种方式适合快速安装,可根据自己的系统位数下载好相应的安装包,一路next就可以轻松安装了 。**推荐这种方式**
第三方工具安装:目前有很多方便的第三方软件包工具,例如Ubuntu的apt-get、Mac的homebrew等 。这种安装方式适合那些熟悉相应系统的用户 。
最后,如果你想在同一个系统中安装多个版本的Go,你可以参考第三方工具GVM,这是目前在这方面做得最好的工具,除非你知道怎么处理 。
Go源码安装
在Go的源代码中,有些部分是用Plan 9 C和ATT汇编写的,因此假如你要想从源码安装,就必须安装C的编译工具 。
在Mac系统中,只要你安装了Xcode,就已经包含了相应的编译工具 。
在类Unix系统中 , 需要安装gcc等工具 。例如Ubuntu系统可通过在终端中执行sudo apt-get install gcc
libc6-dev来安装编译工具 。
在Windows系统中,你需要安装MinGW,然后通过MinGW安装gcc,并设置相应的环境变量 。
你可以直接去官网下载源码,找相应的goVERSION.src.tar.gz的文件下载,下载之后解压缩到$HOME目录,执行如下代码:
cd go/src
./all.bash
运行all.bash后出现"ALL TESTS PASSED"字样时才算安装成功 。
上面是Unix风格的命令,Windows下的安装方式类似,只不过是运行all.bat , 调用的编译器是MinGW的gcc 。
如果是Mac或者Unix用户需要设置几个环境变量,如果想重启之后也能生效的话把下面的命令写到.bashrc或者.zshrc里面,
export GOPATH=$HOME/gopath
export PATH=$PATH:$HOME/go/bin:$GOPATH/bin
如果你是写入文件的,记得执行bash .bashrc或者bash
.zshrc使得设置立马生效 。
如果是window系统,就需要设置环境变量 , 在path里面增加相应的go所在的目录,设置gopath变量 。
当你设置完毕之后在命令行里面输入go,看到如下图片即说明你已经安装成功
图1.1 源码安装之后执行Go命令的图
如果出现Go的Usage信息,那么说明Go已经安装成功了;如果出现该命令不存在,那么可以检查一下自己的PATH环境变中是否包含了Go的安装目录 。
关于上面的GOPATH将在下面小节详细讲解
Go标准包安装
Go提供了每个平台打好包的一键安装,这些包默认会安装到如下目录:/usr/local/go
(Windows系统:c:\Go) , 当然你可以改变他们的安装位置,但是改变之后你必须在你的环境变量中设置如下信息:
export GOROOT=$HOME/go
export GOPATH=$HOME/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
上面这些命令对于Mac和Unix用户来说最好是写入.bashrc或者.zshrc文件,对于windows用户来说当然是写入环境变量 。
如何判断自己的操作系统是32位还是64位?
我们接下来的Go安装需要判断操作系统的位数 , 所以这小节我们先确定自己的系统类型 。
Windows系统用户请按Win R运行cmd,输入systeminfo后回车 , 稍等片刻,会出现一些系统信息 。在“系统类型”一行中,若显示“x64-based
PC” , 即为64位系统;若显示“X86-based PC”,则为32位系统 。
Mac系统用户建议直接使用64位的,因为Go所支持的Mac OS X版本已经不支持纯32位处理器了 。
Linux系统用户可通过在Terminal中执行命令arch(即uname
-m)来查看系统信息:
64位系统显示
x86_64
32位系统显示
i386
Mac 安装
访问下载地址,32位系统下载go1.4.2.darwin-386-osx10.8.pkg,64位系统下载go1.4.2.darwin-amd64-osx10.8.pkg,双击下载文件,一路默认安装点击下一步,这个时候go已经安装到你的系统中 , 默认已经在PATH中增加了相应的~/go/bin,这个时候打开终端 , 输入go
看到类似上面源码安装成功的图片说明已经安装成功
如果出现go的Usage信息,那么说明go已经安装成功了;如果出现该命令不存在,那么可以检查一下自己的PATH环境变中是否包含了go的安装目录 。
Linux 安装
访问下载地址 , 32位系统下载go1.4.2.linux-386.tar.gz , 64位系统下载go1.4.2.linux-amd64.tar.gz,
假定你想要安装Go的目录为 $GO_INSTALL_DIR,后面替换为相应的目录路径 。
解压缩tar.gz包到安装目录下:tar zxvf go1.4.2.linux-amd64.tar.gz -C
$GO_INSTALL_DIR 。
设置PATH,export PATH=$PATH:$GO_INSTALL_DIR/go/bin
然后执行go
图1.2 Linux系统下安装成功之后执行go显示的信息
如果出现go的Usage信息,那么说明go已经安装成功了;如果出现该命令不存在,那么可以检查一下自己的PATH环境变中是否包含了go的安装目录 。
Windows 安装
访问Google Code 下载页 , 32
位请选择名称中包含 windows-386 的 msi 安装包,64 位请选择名称中包含 windows-amd64 的 。下载好后运行,不要修改默认安装目录
C:\Go\,若安装到其他位置会导致不能执行自己所编写的 Go 代码 。安装完成后默认会在环境变量 Path 后添加 Go 安装目录下的 bin 目录
C:\Go\bin\,并添加环境变量 GOROOT,值为 Go 安装根目录 C:\Go\。
验证是否安装成功
在运行中输入 cmd 打开命令行工具,在提示符下输入 go,检查是否能看到 Usage 信息 。输入
cd %GOROOT%,看是否能进入 Go 安装目录 。若都成功,说明安装成功 。
不能的话请检查上述环境变量 Path 和 GOROOT 的值 。若不存在请卸载后重新安装 , 存在请重启计算机后重试以上步骤 。
第三方工具安装
GVM
gvm是第三方开发的Go多版本管理工具,类似ruby里面的rvm工具 。使用起来相当的方便,安装gvm使用如下命令:
bash(curl -s -S -L )
安装完成后我们就可以安装go了:
gvm install go1.4.2
gvm use go1.4.2
也可以使用下面的命令,省去每次调用gvm use的麻烦: gvm use go1.4.2 --default
执行完上面的命令之后GOPATH、GOROOT等环境变量会自动设置好,这样就可以直接使用了 。
apt-get
Ubuntu是目前使用最多的Linux桌面系统,使用apt-get命令来管理软件包,我们可以通过下面的命令来安装Go,为了以后方便,应该把
git mercurial 也安装上:
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:gophers/go
sudo apt-get update
sudo apt-get install golang-stable git-core mercurial
homebrew
homebrew是Mac系统下面目前使用最多的管理软件的工具,目前已支持Go,可以通过命令直接安装Go,为了以后方便 , 应该把
git mercurial 也安装上:
brew updatebrew upgrade
brew install go
brew install git
brew install mercurial
如何用got完成部件的转动? ??
当前位置: Language Tips Columnist 专栏作家 津津乐道
万能动词“GET”的主要用法
中国日报网 2016-10-12 11:27
分享到
? ? ? ? ?
英语中,“GET”作动词时 , 它不仅内涵非常丰富,而且其用法颇为复杂 。它是一个万能动词,备受英语人士青睐 。关于GET的使用频率和语体风格,英国著名词汇专家皮尔索尔(J. Pearsall)女士在1998年出版的《新牛津英语词典》中特地指出:GET是五个最常用的英语动词之一,但它常用于非正式的口语或书面语中 。为了叙述方便,下面从词性功能的角度,简要归纳一下GET的语义及语用特点,以便英语学习者能正确掌握这一万能动词的主要用法 。
?
一、及物动词
及物动词get的用法很多,但在每种搭配中get的意义是不完全相同的 。
1.用于get sb(sth);意为“叫来某人(得到某物)” 。例如:
Please go and get him. [请你去把他叫来 。]
She got high marks in the final examination. [她在期末考试中得了高分 。]
2.用于get sb sth/get sth for sb;意为“为某人弄到某物” 。例如:
I'll get you a drink. [我去个你拿杯饮料来 。]
Could you get a school timetable for me? [你能帮我弄张课程表吗?]
3.用于“get 名词 宾补”,该宾语补足语可以是:
1)不定式;意为“使……做……”(具有使役性) 。例如:
You must get them to come here. [你必须让他们来这里 。]
He couldn't get the car to start and went by bus. [他因无法发动车子,所以就乘公共汽车去 。]
2)现在分词;意为“使……(开始)起来”或处于某种状态 。例如:
What he said got us thinking. [他说话使我们思考起来 。]
Can you get the machine running? [你能把这机器发动起来吗? ]
3)过去分词;其中的过去分词表示被动关系 。例如:
We get our milk delivered. [我们订的牛奶送到了 。]
You must get the work done by Friday. [你必须最迟在星期五以前把工作做完 。]
值得注意的是,这种被动关系有时可能表示某种遭遇;这主要取决于过去分词的含义 。例如:
He got his watch stolen. [他的手表被偷了 。]
Ina got her fingers caught in the door. [艾娜的手指让门给夹住了 。]
另外 , “get sth done”和“have sth done”在语义及语用上都有区别;前者通常表示动作让别人完成 , 后者通常表示动作由自己完成 。例如:
She got her hair cut yesterday. [她昨天剪了头发(别人剪的) 。]
A week ago I had a hundred dollars saved. [一个星期前我节省了一百美元(自己省的) 。]
4)形容词;意为“使……(变成某种状态)” 。例如:
What he said got us angry. [他说的话让我们很生气 。]
We've got everything ready. [我们已把一切都准备好了 。]
二、不及物动词
不及物动词get的用法也很多,不同的搭配有不同的意义 。
1.用于“get 形容词”;get相当于系动词 , 构成系表结构说明主语的状况、性质、特征等情况 。例如:
She got sick. [她生病了 。]
Please don't get angry. [请不要生气 。]
值得一提的是,英国著名语法专家斯旺(M. Swan)先生在1980年出版的专著《实用英语惯用法》中指出:get不能与表示颜色的形容词构成系表结构 。例如不说:
* Leaves get brown.
但可以把get改为go:Leaves go brown.[树叶变棕色 。]
另外,get用进行时态来表示状态的改变 。例如:
The weather is getting cold. [天气逐渐变冷 。]
I'm getting very deaf, you know. [你知道,我的耳朵越来越聋了 。]
用进行时态的get还可以与形容词的比较级连用 , 强调渐进过程 。例如:
The things are getting worse. [事情变更糟了 。]
Our life is getting better and better. [我们的生活是越来越好了 。]
2.用于“get 副词”,表示位置的变换;其中一些已成为成语 。例如:
Where did you get on? [你上哪儿去了?]
The news soon got abroad. [这消息很快就传开了 。]
3.用于“get 不定式”(构成复合谓语) , 表示一种状态的变化 。例如:
How did you get to be captain? [你怎么当上队长的?]
I'll never get to understand him. [我永远不会理解他 。]
4.用于“get 现在分词”;这种用法主要见于美国英语 。例如:
We'd better get going, I suppose. [我想我们最好赶紧动身 。]
They got talking and didn't notice the time. [他们谈了起来并没有注意时间 。]
5.用于“get 过去分词”;这时get表示的是相当于become(即系动词)的意思,后面的过去分词属形容词范畴(即形容词化的过去分词),作主语补语 。例如:
He got very worried. [他变得很担心 。]
She gets easily excited. [她很容易激动 。]
三、助动词
get作为助动词,它与过去分词构成被动语态(即Get-Passive) 。中国著名语言学家周海中先生在1990年发表的论文《Get-Passive研究》中指出:目前 , Get-Passive的使用还没有Be-Passive那么广泛,一般限于口语和非正式书面语;然而 , 这一被动语态却有着用得愈来愈多的趋势,这种语言现象很值得我们重视和研究 。
Get-Passive除了在形式和语体上与Be-Passive有区别外,在语义及语用上也有其特点 。美国著名语言学家伯恩斯坦(T. Bernstein)先生在1981年出版的专著《注意你的语言》中认为:当强调状态时,最好使用Be-Passive;当强调动作时,最好使用Get-Passive 。他给了一个颇有趣的例句:She has been married, so often you might think she enjoys just getting married, not being married.
Get-Passive明确地表示做出动作的时间,而Be-Passive则表示动作造成的状态的持续时限 。例如:
At that time he was not yet married, but he got married in 1920. [当时他还没有结婚,但他在1920年结婚了 。]
因为Get-Passive具有这一语义特点,所以以下一句不能成立:
* He got married a long time.
但我们可以说:He was married a long time. [他结婚很长时间了 。]
就感情色彩而言, Get-Passive一般都有不利、不幸、不愉快或不如意的意义色彩;而Be-Passive可以表示褒义、贬义或中性意义 。例如:
John got arrested by the police. [约翰被警察逮捕了 。]
Mariah got dismissed from the service. [玛丽亚被解雇了 。]
某些动词用于Get-Passive时,虽然在形式上是被动的 , 但在意义上却是主动的 。例如:
We got started at noon. = We started at noon. [我们中午开始 。]
Good-bye and write me as soon as you get settled. = Good-bye and write me as soon as you settle. [再见,你安顿下来后尽快给我写信 。]
这类动词还有confuse[迷惑]、divorce[离婚]、dress[穿着]、engage[订婚]、lost[迷路]、marry[结婚]、wash[洗净]等 。
最后一提的是,由动词get构成的成语,如get hell[受严厉处罚]、get hot[恼怒,生气]、get nowhere[无效,徒劳]、get out[出去,离开]、get rid of[摆脱,除去]、get through with[做完,办完]等就有近百条 。这些成语既有字面意义,又有引申意义或比喻意义 。它们是英语宝库中的明珠,其用法同样值得学习者掌握 。
本文仅代表作者本人观点,与本网立场无关 。欢迎大家讨论学术问题 , 尊重他人,禁止人身攻击和发布一切违反国家现行法律法规的内容 。
(本文作者为英国牛津大学访问学者 林娜博士)
上一篇 : 《Madam Secretary》中的经典口语句型
下一篇 : 安全:到底是safety,还是security?
分享到
? ? ? ? ?
中国日报网英语点津版权说明:凡注明来源为“中国日报网英语点津:XXX(署名)”的原创作品 , 除与中国日报网签署英语点津内容授权协议的网站外,其他任何网站或单位未经允许不得非法盗链、转载和使用,违者必究 。如需使用,请与010-84883561联系;凡本网注明“来源:XXX(非英语点津)”的作品,均转载自其它媒体,目的在于传播更多信息,其他媒体如需转载,请与稿件来源方联系,如产生任何问题与本网无关;本网所发布的歌曲、电影片段,版权归原作者所有,仅供学习与研究,如果侵权,请提供版权证明 , 以便尽快删除 。
你可能还感兴趣的文章
?
川普推特撕X闯祸 美民众:你还是关了吧
?
《星球大战》粉丝要求把莱娅公主正式列入迪士尼公主
?
《单身日记3:好孕来袭》电影精讲(视频)
?
关于《神夏》你不知道的十件事
go语言硬件信息的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于go语言的性能、go语言硬件信息的信息别忘了在本站进行查找喔 。

    推荐阅读