golang嵌入式系统开发语言插件库emgo的使用
Golang嵌入式系统开发语言插件库Emgo的使用
Emgo简介
Emgo包含一个编译器和一组包,允许你在小型32位微控制器上运行Go程序。该编译器生成C作为中间代码,并使用C编译器生成可加载的二进制文件。
如何开始
准备工作
- 首先需要安装Go编译器
- 当前Emgo编译器和整个流程需要类Unix操作系统支持(Windows+Cygwin可能可用但未经测试)
推荐使用git克隆仓库:
git clone https://github.com/ziutek/emgo.git
安装egc(Emgo编译器)
cd emgo/egc
go install
安装ARM嵌入式工具链
Emgo目前仅支持基于ARM Cortex-M的MCU。你需要安装ARM嵌入式工具链:
对于Debian/Ubuntu Linux:
apt-get install gcc-arm-none-eabi
或者从GNU ARM Embedded Toolchain网站下载最新工具链(推荐)。
设置环境变量
export EGCC=path_to_arm_gcc # 例如/usr/local/arm/bin/arm-none-eabi-gcc
export EGLD=path_to_arm_linker # 例如/usr/local/arm/bin/arm-none-eabi-ld
export EGAR=path_to_arm_archiver # 例如/usr/local/arm/bin/arm-none-eabi-ar
export EGROOT=path_to_egroot_directory # 例如$HOME/emgo/egroot
export EGPATH=path_to_egpath_directory # 例如$HOME/emgo/egpath
export PATH=$PATH:path_to_arm_bin_dir # 例如/usr/local/arm/bin
示例项目
编译示例代码
示例代码位于:
$EGPATH/src/stm32/examples
$EGPATH/src/nrf5/examples
例如,为STM32 NUCLEO-F411RE开发板构建blinky示例:
cd $EGPATH/src/stm32/examples/nucleo-f411re/blinky
../build.sh
首次编译可能需要一些时间,因为egc需要处理所有必需的库和运行时。成功编译后将生成cortexm4f.elf二进制文件。
加载和调试
你需要工具将编译后的二进制文件加载到MCU的RAM/Flash中并允许调试。对于STM32 Nucleo或Discovery开发板,可以使用OpenOCD或Texane的stlink。
安装itmsplit(用于处理SWO输出):
go get github.com/ziutek/itmsplit
使用Texane的stlink加载程序:
../load-stutil.sh
使用OpenOCD加载程序:
../load-oocd.sh
RAM与Flash加载
默认情况下,一些示例配置为从RAM运行。如果需要改为从Flash运行,编辑script.ld文件并修改:
INCLUDE stm32/loadflash
对于STM32F1xx系列,还需要注释两行:
// bootOffset = 0x1E0;
// ENTRY(bootRAM)
完整示例代码
以下是一个简单的STM32 LED闪烁示例:
package main
import (
"delay"
"stm32/hal/gpio"
"stm32/hal/system"
"stm32/hal/system/timer/systick"
)
var led gpio.Pin
func init() {
system.SetupPLL(8, 1, 48/8)
systick.Setup(2e6)
gpio.A.EnableClock(false)
led = gpio.A.Pin(5)
cfg := &gpio.Config{Mode: gpio.Out, Driver: gpio.OpenDrain}
led.Setup(cfg)
}
func main() {
for {
led.Clear()
delay.Millisec(500)
led.Set()
delay.Millisec(500)
}
}
文档资源
- 标准库文档
- STM32、nRF5等库文档
其他资源
- 博客
- YouTube频道
- 论坛
更多关于golang嵌入式系统开发语言插件库emgo的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复