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