цифровая электроника
вычислительная техника
встраиваемые системы

 
» » » tinyGo – язык программирования Go для микроконтроллеров. Первая программа, компиляция и прошивка

tinyGo – язык программирования Go для микроконтроллеров. Первая программа, компиляция и прошивка

Автор: Mike(admin) от 20-09-2019, 03:55

Язык программирования Go был разработан в Google в 2007 году, и эволюционный путь этого языка с тех пор значителен. В настоящее время мы почти можем создавать любые приложения, используя Go – API, инструменты, игры, библиотеки и так далее. Так как насчет встраиваемой системы или сегодняшней концепции Интернета вещей (IoT), можем ли мы использовать Golang для такого рода приложений? Ответ – да, мы можем.


tinyGo – язык программирования Go для микроконтроллеров

Мы можем использовать Go в качестве языка для создания приложения для встраиваемой системы, но для этого язык должен удовлетворять следующим условиям: запускаться на микроконтроллерах и соответствующих платах, например, Arduino Nano33 IoT, Adafruit Feather M0 и т. д., иметь очень малые размеры кода для встраивания в малые объемы памяти, иметь возможность использовать периферийные устройства (I2C, UART и т.п.) и другие функции, относящиеся к микроконтроллеру. И вот недавно появился инструмент TinyGo (https://github.com/tinygo-org/tinygo), который удовлетворяет всем этим условиям.


Для демонстрации некоторых возможностей языка давайте попробуем создавать наше первое приложение с помощью Go. Наиболее распространенной практикой создания или использования языка программирования впервые и во всех книгах по программированию является создание программы типа «Hello World». Программа «Hello world» считается самой простой программой, которую можно написать. Цель состоит в том, чтобы убедиться, что в дальнейшем вы можете написать любую программу. Итак, начнем.


Этот пример предполагает, что Go уже установлен и настроен. Создайте проект с именем «hello» в пространстве имён «examples» нашего рабочего пространства Go. Структура проекта будет такой:



[src]
  |-- [examples]
        |-- [hello]
             |--- main.go

Наша первая программа «Hello World» на Go:



package main

import "fmt"

func main() {
     fmt.Println("Hello tiny world")
}

Давайте объясним код построчно. Для начала «package main». Пакет (package) на языке программирования Go – это способ организации кода, который должен храниться вместе и использоваться как единое целое. Мы также сообщаем Go имя пакета, к которому принадлежит остальная часть нашего кода в этом файле. В этом случае имеем основной (main) пакет.


Далее идет строка func main().В языке Go ключевое слово func означает, что программа определяет функцию, которая состоит из одной или нескольких строк кода, которые будут выполняться одна за другой по порядку при вызове функции. Мы назвали нашу функцию «main», чтобы сообщить компилятору, что делать в первую очередь при запуске этой программы.


Затем мы видим строку «fmt.Println("Hello tiny world")». Мы используем функцию Println() для вывода сообщения, на языке Go оно будет напечатано или выведено на консоль. Но поскольку мы компилируем его для использования на микроконтроллере, которого у него нет, выходной сигнал будет отправлен на последовательный порт или UART микроконтроллера.


Теперь приступим к компиляции нашей первой программы на языке Go для микроконтроллеров. Компиляция программы «Hello World» аналогична компиляции другого кода Go, разница здесь в том, что мы компилируем код, используя инструмент tinygo, а не инструменты Go. Чтобы скомпилировать код, просто запустите такую команду:


$ tinygo build -o main.go

Команда build сообщает инструментам, что мы хотим скомпилировать код Go, флаг -o определяет выходной файл (если есть) и входной файл кода Go, который требуется скомпилировать. Если мы не определим выходной файл, он будет создан с тем же именем, что и код Go, в данном случае main.go. После успешного завершения процесса компиляции будет создан исполняемый файл.



$ ls
main main.go

Если мы хотим скомпилировать наш код под другим именем, мы можем просто запустить такую команду:


$ tinygo build -o hello main.go

Команда выше создаст файл hello, который является исполняемым файлом main.go. В приведенном выше коде мы используем только стандартную библиотеку «fmt» Go, так что это означает, что мы можем скомпилировать код и запустить под терминалом. Но если мы используем конкретный API в tinyGo, то мы не сможем скомпилировать с помощью приведенной выше команды, мы должны добавить указанную целевую плату в нашу команду компиляции. Создайте другой файл с именем «LED.go».



package main 

import ( 
   "machine" 
   "time"
) 

// начинаем здесь с главной функции
func main() { 
   go blink(machine.LED1, 1000 * time.Millisecond) 
   go blink(machine.LED2, 750 * time.Millisecond)
} 

// мигать светодиодом с заданной продолжительностью
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) 
    }
}

Вышеприведенную программу можно скомпилировать и запустить без изменений на Arduino Uno, Adafruit ItsyBitsy M0 или любой из поддерживаемых плат, имеющих встроенный светодиод, просто установив правильную цель компилятора TinyGo. Мы также можем запустить код на площадке tinyGo, как показано ниже.


tinyGo – язык программирования Go для микроконтроллеров

Компилятор tinyGo выдаст ошибку, если мы не установили указанную целевую плату при компиляции кода.


tinyGo – язык программирования Go для микроконтроллеров

Таким образом, чтобы скомпилировать «LED.go», мы должны добавить целевую плату при выполнении команды сборки.


tinyGo – язык программирования Go для микроконтроллеров

Но поскольку мы указали целевую плату для скомпилированной программы, мы больше не можем запускать программу под терминалом, поскольку исполняемый файл имеет заданную целевую архитектуру (например, Linux, Darwin, Windows, ARM и т. д.).


tinyGo – язык программирования Go для микроконтроллеров

Чтобы запустить исполняемый файл, мы должны «прошить» его на плату микроконтроллера. Для запуска программы на микроконтроллере, вам нужно скомпилировать программу для платы такого типа в двоичный файл, а затем перенести этот двоичный файл на микроконтроллер. Перед запуском программы мы должны убедиться, что плата подключена к 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: 16px; color: rgba(0, 0, 0, 0.84); letter-spacing: -0.022em; line-height: 1.18; font-family: Menlo, Monaco, &quot;Courier New&quot;, Courier, monospace; margin-top: -0.09em; margin-bottom: -0.09em; white-space: pre-wrap;">tinygo flash -target arduino-nano33 ./examples/hello/LED.go</span>

Команда tinygo flash сначала использует компилятор для создания временного двоичного файла, который является исполняемой версией этой программы, прежде чем она загружается в тот микроконтроллер, который указан в качестве цели. Микроконтроллер должен быть подключен к компьютеру для переноса скомпилированной программы на плату микроконтроллера. Учтите, что могут быть небольшие отличия при прошивке микроконтроллера определенного типа.




© digitrode.ru


Теги: Go



   Благодарим Вас за интерес к информационному проекту digitrode.ru.
   Если Вы хотите, чтобы интересные и полезные материалы выходили чаще, и было меньше рекламы,
   Вы можее поддержать наш проект, пожертвовав любую сумму на его развитие.


Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий