最近接了个活,主要是给 FSU 动环监控单元白盒(芯片:NUC980,内存:128MB),开发一套监控软件,可以采集接在白盒上面的各种 DI,AI 设备的数据,并且上报到监控中心
查询了下,FSU 系统,好像都是通过 C/C++ 写的,可是我不太会,但是我会一点 golang 写,查询了下,golang 好像可以用于嵌入式开发
就想问下有没有使用过 golang 开发过类似的软件的,以及使用 golang 会不会有什么坑
1
wangritian 48 天前
不懂这块业务,但 go 可以读取 dll 或 so ,通过 cgo 调用 c 函数
|
2
sampeng 48 天前 2
如果连 link 都不明白的是大概率没戏的。
|
3
hefish 48 天前 2
行肯定是行的,但入 2 楼大佬所讲, 怎么也得知道点嵌入式的东西吧。 不然肯定有困难啊。。
实际 python ,php 都行啊。。。go 自然也行。 |
4
crackidz 48 天前
FsuOS 不行吧,它支持的是各种驱动,有 Python 支持但限设备
|
5
guanzhangzhang 48 天前
prometheus 的 metrics ,
你的白盒上运行 node_exporter 或者自己开发个 |
6
qq316107934 48 天前 1
128MB 内存用 Golang 太容易 OOM 了,不推荐,Golang runtime 对内存分配比较宽松
|
7
florentino OP @hefish 我说嵌入式可能不准确,这个盒子厂家提供编译好的 Linux 系统, 我只要写软件跑在上面就行, 我的想法是, 解决我的软件与串口之间的通讯,以及如何将数据上报到数据中心(就是中国铁塔的 B 接口)就行了, 担心的点也就是会不会最后我写完了, 跑起来发现系统资源不够,毕竟才 128M 内存
|
8
florentino OP @qq316107934 我的逻辑比较简单,就是采集数据,上报数据, 没有其他更复杂的逻辑, 想着应该够用吧
|
9
sampeng 48 天前
@florentino 128M 内存居然说是才。。。我看了一眼我手上的 stm32 的板子就 512K 。你别引一堆第三方包,尽量自己维护数据结构,内存都是能算出来的。虚拟机不是个大 sb ,只知道吃完内存才吐。所以要你自己控制和维护。尤其是调用 so 开的口子的时候千万别忘了回收内存之类的。因为大部分的接口都是只是申请了内存,但是释放一定会再给你另一个接口。这是最容易踩的坑。如果你直接是串口+http 。。。。。哪就没 so 啥事了。标准库标准操作。。内存多少都是看得到的。。
|
10
sampeng 48 天前 1
甚至更简单粗暴一点就是内存直接都是纯静态的。比如全局 1k 大的数组。多少内存都是能算出来的。就没 gc 啥事
|
11
yuedanwork 48 天前 1
嵌入式这内存够了。。。你这盒子本身功能就不多 要那么大内存干嘛
至于 Go 能有啥坑 都那么多用的了 最后,真决定用 Go ,请用 TinyGo |
12
qq316107934 48 天前
@florentino #8 少引用第三方 SDK 的话够用的,大不了 OOM 了之后再拉起或者计划性重启。看了下串口通信在 linux 下只需要 syscall 就行了,如果知道协议纯自己写的话,挺方便的,不用引用 so 库。如果要引用的话 cgo 是有点麻烦的,可以看下 SWIG
|
13
scopeccsky1111 48 天前 1
注意一下处理器架构, 如果引用库的话可能不兼容
|
14
jim9606 48 天前 via Android 1
行肯定是行的,更多是省不省心,例如 golang 并不是一个对 interprop 友好的语言,要引非 golang 的库会比较麻烦。如果你熟悉 golang ,需求又不存在调三方库全部自己写的那就无太大所谓。
|
15
mengzhuo 48 天前 1
大概看了下 FsuOS 的文档……好口语化啊……
不建议你在上面开发了,毕竟 Go 已经开始升级最低要求的 Linux 版本(貌似大于 3.0?),硬要开发的话,可以通过“联通白盒化标准”那里的东西进行采集和上报 |
16
Martens 48 天前 1
TinyGo
|
17
florentino OP @mengzhuo 嗯 不基于他们, 他们也是 C 写的打包成了系统, 我的软件是在 Linux4.9 上面跑, 就是使用 go 语言实现他们类似的功能,采集数据+告警+上报 就行了
|
18
viayie 48 天前
|
20
Vitumoc 48 天前
要不直接买个能采集动环数据的盒子呢?也不贵来着,肯定比开发便宜
|
21
GeekGao 48 天前
用 C 实现呗,如果只是读数据、通讯,多简单啊。。。
|
22
florentino OP @Vitumoc 给我活的人,就是想卖钱的,他咋可能去采购呢 🤣🤣
|
23
mengzhuo 48 天前
|
24
NathanInMac 48 天前
需求这么简单建议和 AI 一起写会儿 C 就好了
|
25
8355 48 天前
@florentino #7 要纯原生开发了,github 代码要 copy 出来精简了。
|
26
imes 48 天前 1
golang 嵌入式,最后还是会回到 cgo 上,那不如一开始就用 c/c++。话又说回来了,嵌入式不用 c/c++,那也得是 rust 顶上,无论如何也轮不到 golang 啊。哪怕是 microopython 和 tiny go ,也都是 demo 尺度上的东西,商业上也没几个人有胆子用。
|
27
yplam 48 天前 via Android
nuc980 感觉大概率用 nor flash ,这个反而是瓶颈
|
28
elechi 48 天前
如果功能就是你说的那么简单,并且系统中也没有其他程序抢内存,是没有问题的,因为我做过
|
29
elechi 48 天前 1
而且也用不到 cgo ,didoaiao 都是文件,go 直接读写文件就行,上传数据都是网络协议了,和 cgo 也没关系
|
31
florentino OP @elechi #29 感谢 我看看
|
32
higker 47 天前
建议使用 Java21 + graalvm.org 开发
|
33
anviod 46 天前 1
做过, 可行! 可以参考 gobot 项目 https://gobot.io/ 现成的代码示例
|
34
grzhan 29 天前
看需求更接近开发一个上报监控指标的 agent ,逻辑上应该比较简单。
解决资源问题(内存)可以看下 tinygo ,算是针对嵌入式环境的一个 go 编译器实现,如果没有用不到 go 关键字、反射等特性的话应该问题不大。 |