南怀瑾 100句 渺小_让我们与tinyGo一起变得渺小
南怀瑾 100句 渺小
Go于2007年在Google设计,该语言的发展是巨大的。 如今,我们几乎可以使用Go从API,工具,游戏,库等创建任何类型的应用程序。 那么,对于嵌入式系统或当今作为IoT的热门术语,我们可以将Golang用于此类应用程序吗? 答案是肯定的,我们可以。
我们从未期望Go是一种嵌入式语言,因此它遇到了严重的问题……
— Rob Pike, GopherCon 2014开幕主题演讲
我们可以使用Go作为嵌入式语言来为嵌入式系统创建应用程序,嵌入式应用程序与非嵌入式应用程序之间的区别是:
- 在嵌入式板上运行,例如Arduino Nano33 IoT , Adafruit Feather M0等。
- 具有非常小的二进制大小。 因此,不要为不使用的东西付费。
- 使用外围设备(I2C,UART,模拟I / O)
- 一些功能特定于微控制器板
有一个工具TinyGo ( https://github.com/tinygo-org/tinygo ),本文将使用该工具将Go代码编译并闪存到微控制器中。
让我们开始使用Go创建第一个应用程序。 在所有编程书籍中,首次创建或使用编程语言的最常见做法是创建“ Hello World”程序。
“ Hello world ”程序被认为是可以编写的最简单的程序。 目的是验证您完全可以编写任何类型的程序。 所以我们开始吧...
在本文中,我们假设:
Go已安装和配置,如果未安装,则可以按照https://golang.org/doc/install中的说明在操作系统上安装和配置Go.TinyGo已安装(如果未安装),则可以按照https中的说明进行操作: //tinygo.org/getting-started/关于如何在操作系统上安装tinygo。
在Go工作区的“示例”命名空间中创建一个项目名称“ hello”。 项目结构将如下所示
[src]|-- [examples]|-- [hello]|--- main.go
我们在Go中的第一个“ Hello World”程序。
package mainimport "fmt"func main() {fmt.Println( "Hello tiny world" )
}
让我们逐行解释代码,
package main
Go编程语言中的程序包是组织代码的方式,旨在保持在一起并用作单个单元。 我们还告诉Go该文件中其余代码所属的包的名称。 在这种情况下,为“主”包装。
func main()
在Go语言中,关键字func表示程序正在定义一个函数,该函数由一行或多行代码组成,这些代码行将在调用该函数时按顺序执行。 我们将函数命名为“ main”,以告诉编译器在运行该程序时首先要做什么。
fmt.Println("Hello tiny world" )
我们使用Println()函数输出一条消息,在Go语言上它将被打印或输出到控制台。 但是由于我们将其编译为可在没有微控制器的微控制器上使用,因此输出将发送到微控制器的串行端口或UART。
编译“ Hello World”程序
编译“ Hello World”程序与编译另一个Go代码相同,不同之处在于,我们使用tinygo工具而不是go工具来编译代码
要编译代码,只需在命令下面运行
$ tinygo build -o main.go
命令构建告诉工具我们要编译Go代码,-o标志定义要编译的Go代码的输出文件(如果有)和输入文件。 如果未定义输出文件,则将使用与Go代码相同的名称创建输出文件,在本例中为main.go。
编译过程成功后,将创建一个可执行文件
$ ls
main main.go
如果我们想使用其他名称来编译代码,我们可以简单地在命令下面运行
$ tinygo build -o hello main.go
上面的命令将创建一个文件hello,它是main.go的可执行文件。
在上面的代码中,我们仅使用“ fmt” Go标准库,因此这意味着我们可以编译代码并在终端下运行。 但是,如果我们在tinyGo中使用特定的API,则无法使用上面的命令进行编译,我们必须在compile命令中添加指定的目标板。
创建另一个文件名“ LED.go”
package mainimport ( "machine" "time"
) // start here at main function
func main() { go blink(machine.LED1, 1000 * time.Millisecond) go blink(machine.LED2, 750 * time.Millisecond)
} // blink the LED with given duration
func blink(led machine.Pin, delay time.Duration) { led.Configure(machine.PinConfig{ Mode : machine.PinOutput}) for { led.Low() time.Sleep(delay) led.High() time.Sleep(delay) }
}
只需设置正确的TinyGo编译器目标,即可在Arduino Uno,Adafruit ItsyBitsy M0或任何具有内置LED的受支持板上对以上程序进行编译和运行,而无需进行修改。 我们还可以在tinyGo操场上运行代码,如下所示。
如果我们在编译代码时未设置指定的目标板,tinyGo编译器将引发错误。
因此,要编译“ LED.go”,我们必须在执行构建命令时添加目标板。
但是由于我们已经为编译后的程序指定了目标板,因此我们无法在终端下运行该程序,因为可执行文件已指定了目标体系结构(例如:Linux,Darwin,Windows,ARM等)。
要运行可执行文件,我们必须将其“刷”入微控制器板。
微控制器板上的程序闪烁。
在微控制器上运行程序,您需要将该板的程序编译为二进制文件,然后将该二进制文件传输到微控制器上。
在运行程序之前,我们必须确保开发板已插入计算机的USB端口,如果我们使用的是Arduino Nano33,请双击开发板上的“重置”按钮,最后运行以下命令:
<span id="dd68" class="jf hs ee bd pg b bv ph pi s pj" data-selectable-paragraph="" style="box-sizing: inherit; font-weight: 400 ; display: block; font-style: normal; font-size: 16 px; color: rgba(0, 0 , 0 , 0.84 ); letter-spacing: -0.022 em; line-height: 1.18 ; font-family: Menlo, Monaco, "Courier New", Courier, monospace; margin-top: -0.09 em; margin-bottom: -0.09 em; white-space: pre-wrap;">tinygo flash -target arduino-nano33 ./examples/hello/LED.go</span>
命令tinygo flash首先使用编译器构建一个临时二进制文件,该文件是该程序的可执行版本,然后再上传到指定为目标的任何微控制器。 微控制器必须连接到计算机,编译后的程序才能传输到微控制器板上。
但是,闪存特定类型的微控制器板可能会有细微差别。 请参阅TinyGo网站上的https://tinygo.org/microcontrollers/页面,以获取有关如何刷新当前支持的任何其他类型板的详细信息。
参考资料
- tinyGo网站( https://tinygo.org/ )
- tinyGo github( https://github.com/tinygo-org/tinygo )
翻译自: https://hackernoon.com/lets-go-tiny-with-tinygo-uob035t5
南怀瑾 100句 渺小
南怀瑾 100句 渺小_让我们与tinyGo一起变得渺小相关推荐
- python中常用英语口语_常用英语口语100句(超实用)_
学习资料整理 常用英语口语 100 句(超实用) 1 . how are you doing? (你好吗?) 2 . i'm doing great.(我过得很好. ) 3 . what's up?( ...
- 用C语言编程写高考祝福,2020高考祝福自己的句子_高考给自己加油打气的话精选100句...
诗书满腹才华高,高考成绩一枝俏,理想没有大和小,真实善良就美好,实现价值光闪耀,成功将会把你绕.祝福你被理想学校录龋.今天小编就给大家整理了高考祝福自己的句子_高考给自己加油打气的话,希望对大家的工作 ...
- python中常用英语口语_常用英语口语100句超实用-
常用英语口语 100 句(超实用) 1 . how are you doing? (你好吗?) 2 . i'm doing great. (我过得很好. ) 3 . what's up? (出什么事了 ...
- EXCEL VBA常用语句100句
以下转自:http://www.bbioo.com/blog/bio/guohui/1524.htm EXCEL VBA常用语句100句 定制模块行为 Option Explicit '强制对模块内所 ...
- 英语长句分析经典100句
英语长句分析经典100句 长难句结构分析最新经典一百句/ h; n, } G" o. N 1. The American economic system is, organized aro ...
- python的十句名言_十句名人名言
俗话说得好:会干的不如会说的.你想仅仅凭着熟练的技能和勤恳的工作,就在职场游刃有余.出人头地,未免有些天真了.虽然能力加勤奋很重要,但会说话,却能让你工作起来更轻松,并且可能帮助你加薪.升职.1.应答 ...
- [转]QQ经典签名100句 - [绝对经典]
QQ经典签名100句 - [绝对经典] 转自:http://www.digqq.com/show.php?tid=335 1.树不要皮,必死无疑;人不要脸,天下无敌 2.骚归骚,骚有骚的贞操;贱归贱, ...
- 学英语---(2)脱口而出100句经典英语口语
脱口而出100句经典英语口语,孩子大人都学起来! Any day will do. 哪一天都可以. Any messages for me? 有我的留言吗? Are you by yourself? ...
- 【引用】100句经典刺透人心,伤愈后才能更坚强
100句经典刺透人心,伤愈后才能更坚强 "狠心"说破的真话,希望你能懂,伤愈后更坚强-- 陌路相识不相认 1.风光的背后,不是沧桑,就是肮脏. 2.有一种感情叫无缘 ...
最新文章
- Java零拷贝续——DirectByteBuffer内存回收
- python怎样实现封装_大牛教你如何封装 Python 代码,实现自动发送邮件只需三行代码...
- Hadoop学习笔记03_Hive练习
- linux平台安装React Native遇到的坑
- java对象底层原存储结构图解_图解图库JanusGraph系列-一文知晓“图数据“底层存储结构...
- 手机芯片进入7纳米时代!高通确认年内发布,搭载5G,更强AI
- Linux shell命令提示符
- 局部内部类使用局部变量应注意什么?
- 关于Spring Cloud Netflix
- 查看Android手机CPU框架信息
- arcgis裁剪失败
- idea用token登陆github_Vue 页面权限控制和登陆验证
- ajax传参到后端 参数接收为空
- Auto.js蚂蚁森林自动偷能量脚本
- android模拟器玩手游,电脑上玩手游PC安卓模拟器哪个好用?哪个手机模拟器最好...
- 文献阅读:Improving neural networks by preventing co-adaptation of feature detectors
- java fft_java实现快速傅里叶变换(FFT)
- KERNEL_DATA_INPAGE_ERROR 蓝屏开机卡顿修复
- Mac上UltraEdit v18.00.0.22 分享
- 雅虎邮箱停用对网民的影响
热门文章
- zookeeper和k8s_Kubernetes(k8s)运行ZooKeeper,一个分布式系统协调器
- python中的repr_python中的 __repr__和__str__
- Python中for循环的使用
- Labview调用EXE形式COM组件
- 深耕5G云专网,阿里云祝顺民入选“2022年度5G创新人物”
- Nginx 报404问题,如何解决
- 前端VUE面试题总结
- RabbitMQ交换机类型
- idea配置git仓库(idea配置git)详细
- Java的字符串连接符(+)