最近接了个活,主要是给 FSU 动环监控单元白盒(芯片:NUC980,内存:128MB),开发一套监控软件,可以采集接在白盒上面的各种 DI,AI 设备的数据,并且上报到监控中心
查询了下,FSU 系统,好像都是通过 C/C++ 写的,可是我不太会,但是我会一点 golang 写,查询了下,golang 好像可以用于嵌入式开发
就想问下有没有使用过 golang 开发过类似的软件的,以及使用 golang 会不会有什么坑

不懂这块业务,但 go 可以读取 dll 或 so ,通过 cgo 调用 c 函数

如果连 link 都不明白的是大概率没戏的。

行肯定是行的,但入 2 楼大佬所讲, 怎么也得知道点嵌入式的东西吧。 不然肯定有困难啊。。实际 python ,php 都行啊。。。go 自然也行。

FsuOS 不行吧,它支持的是各种驱动,有 Python 支持但限设备

prometheus 的 metrics ,你的白盒上运行 node_exporter 或者自己开发个

128MB 内存用 Golang 太容易 OOM 了,不推荐,Golang runtime 对内存分配比较宽松

我说嵌入式可能不准确,这个盒子厂家提供编译好的 Linux 系统, 我只要写软件跑在上面就行, 我的想法是, 解决我的软件与串口之间的通讯,以及如何将数据上报到数据中心(就是中国铁塔的 B 接口)就行了, 担心的点也就是会不会最后我写完了, 跑起来发现系统资源不够,毕竟才 128M 内存

我的逻辑比较简单,就是采集数据,上报数据, 没有其他更复杂的逻辑, 想着应该够用吧

128M 内存居然说是才。。。我看了一眼我手上的 stm32 的板子就 512K 。你别引一堆第三方包,尽量自己维护数据结构,内存都是能算出来的。虚拟机不是个大 sb ,只知道吃完内存才吐。所以要你自己控制和维护。尤其是调用 so 开的口子的时候千万别忘了回收内存之类的。因为大部分的接口都是只是申请了内存,但是释放一定会再给你另一个接口。这是最容易踩的坑。如果你直接是串口+http 。。。。。哪就没 so 啥事了。标准库标准操作。。内存多少都是看得到的。。

甚至更简单粗暴一点就是内存直接都是纯静态的。比如全局 1k 大的数组。多少内存都是能算出来的。就没 gc 啥事

嵌入式这内存够了。。。你这盒子本身功能就不多 要那么大内存干嘛至于 Go 能有啥坑 都那么多用的了最后,真决定用 Go ,请用 TinyGo

#8 少引用第三方 SDK 的话够用的,大不了 OOM 了之后再拉起或者计划性重启。看了下串口通信在 linux 下只需要 syscall 就行了,如果知道协议纯自己写的话,挺方便的,不用引用 so 库。如果要引用的话 cgo 是有点麻烦的,可以看下 SWIG

注意一下处理器架构, 如果引用库的话可能不兼容

行肯定是行的,更多是省不省心,例如 golang 并不是一个对 interprop 友好的语言,要引非 golang 的库会比较麻烦。如果你熟悉 golang ,需求又不存在调三方库全部自己写的那就无太大所谓。

大概看了下 FsuOS 的文档……好口语化啊……不建议你在上面开发了,毕竟 Go 已经开始升级最低要求的 Linux 版本(貌似大于 3.0?),硬要开发的话,可以通过“联通白盒化标准”那里的东西进行采集和上报

TinyGo

嗯 不基于他们, 他们也是 C 写的打包成了系统, 我的软件是在 Linux4.9 上面跑, 就是使用 go 语言实现他们类似的功能,采集数据+告警+上报 就行了

翻了一眼,同感:> "当作为仪表控制器软件时,由于 SMDDevice 只是负载采集告警和控制,具体仪表的业务逻辑还需要一个控制器实现,就是这个。"

TinyGo 有内存管理缺陷

要不直接买个能采集动环数据的盒子呢?也不贵来着,肯定比开发便宜

用 C 实现呗,如果只是读数据、通讯,多简单啊。。。