南怀瑾 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, &quot;Courier New&quot;, 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一起变得渺小相关推荐

  1. python中常用英语口语_常用英语口语100句(超实用)_

    学习资料整理 常用英语口语 100 句(超实用) 1 . how are you doing? (你好吗?) 2 . i'm doing great.(我过得很好. ) 3 . what's up?( ...

  2. 用C语言编程写高考祝福,2020高考祝福自己的句子_高考给自己加油打气的话精选100句...

    诗书满腹才华高,高考成绩一枝俏,理想没有大和小,真实善良就美好,实现价值光闪耀,成功将会把你绕.祝福你被理想学校录龋.今天小编就给大家整理了高考祝福自己的句子_高考给自己加油打气的话,希望对大家的工作 ...

  3. python中常用英语口语_常用英语口语100句超实用-

    常用英语口语 100 句(超实用) 1 . how are you doing? (你好吗?) 2 . i'm doing great. (我过得很好. ) 3 . what's up? (出什么事了 ...

  4. EXCEL VBA常用语句100句

    以下转自:http://www.bbioo.com/blog/bio/guohui/1524.htm EXCEL VBA常用语句100句 定制模块行为 Option Explicit '强制对模块内所 ...

  5. 英语长句分析经典100句

    英语长句分析经典100句 长难句结构分析最新经典一百句/ h; n, }  G" o. N 1. The American economic system is, organized aro ...

  6. python的十句名言_十句名人名言

    俗话说得好:会干的不如会说的.你想仅仅凭着熟练的技能和勤恳的工作,就在职场游刃有余.出人头地,未免有些天真了.虽然能力加勤奋很重要,但会说话,却能让你工作起来更轻松,并且可能帮助你加薪.升职.1.应答 ...

  7. [转]QQ经典签名100句 - [绝对经典]

    QQ经典签名100句 - [绝对经典] 转自:http://www.digqq.com/show.php?tid=335 1.树不要皮,必死无疑;人不要脸,天下无敌 2.骚归骚,骚有骚的贞操;贱归贱, ...

  8. 学英语---(2)脱口而出100句经典英语口语

    脱口而出100句经典英语口语,孩子大人都学起来! Any day will do. 哪一天都可以. Any messages for me? 有我的留言吗? Are you by yourself? ...

  9. 【引用】100句经典刺透人心,伤愈后才能更坚强

    100句经典刺透人心,伤愈后才能更坚强 "狠心"说破的真话,希望你能懂,伤愈后更坚强--         陌路相识不相认 1.风光的背后,不是沧桑,就是肮脏. 2.有一种感情叫无缘 ...

最新文章

  1. Java零拷贝续——DirectByteBuffer内存回收
  2. python怎样实现封装_大牛教你如何封装 Python 代码,实现自动发送邮件只需三行代码...
  3. Hadoop学习笔记03_Hive练习
  4. linux平台安装React Native遇到的坑
  5. java对象底层原存储结构图解_图解图库JanusGraph系列-一文知晓“图数据“底层存储结构...
  6. 手机芯片进入7纳米时代!高通确认年内发布,搭载5G,更强AI
  7. Linux shell命令提示符
  8. 局部内部类使用局部变量应注意什么?
  9. 关于Spring Cloud Netflix
  10. 查看Android手机CPU框架信息
  11. arcgis裁剪失败
  12. idea用token登陆github_Vue 页面权限控制和登陆验证
  13. ajax传参到后端 参数接收为空
  14. Auto.js蚂蚁森林自动偷能量脚本
  15. android模拟器玩手游,电脑上玩手游PC安卓模拟器哪个好用?哪个手机模拟器最好...
  16. 文献阅读:Improving neural networks by preventing co-adaptation of feature detectors
  17. java fft_java实现快速傅里叶变换(FFT)
  18. KERNEL_DATA_INPAGE_ERROR 蓝屏开机卡顿修复
  19. Mac上UltraEdit v18.00.0.22 分享
  20. 雅虎邮箱停用对网民的影响

热门文章

  1. zookeeper和k8s_Kubernetes(k8s)运行ZooKeeper,一个分布式系统协调器
  2. python中的repr_python中的 __repr__和__str__
  3. Python中for循环的使用
  4. Labview调用EXE形式COM组件
  5. 深耕5G云专网,阿里云祝顺民入选“2022年度5G创新人物”
  6. Nginx 报404问题,如何解决
  7. 前端VUE面试题总结
  8. RabbitMQ交换机类型
  9. idea配置git仓库(idea配置git)详细
  10. Java的字符串连接符(+)