- 主题:go适用于小内存的嵌入式linux系统吗?
arm7+linux (32位),主频700Mhz
256M内存+256M Flash.
嵌入式linux系统带以太网接口联网, 设备运行时接入互联网.
此嵌入式设备的功能是接收互联网上控制服务端的指令,通过四路串口(波特率115200bps)控制和采集外设的状态和数据:
1.接收控制服务端的指令对外设进行控制(控制服务端与linux客户端, linux与外设(通过串口)之间走的是不同的二进制私有协议)
2.将采集到的数据(外设主动上报)传送到数据服务端(MQTT).
3.在局域网内接收PC调试客户端软件的连接,配置运行时参数,控制外设状态(json).
系统对实时性没有很苛刻的要求.
此设备上应用系统现有的实现是用C++写的.写这个版本的哥们已经提桶跑路了.
在他的C++实现中,共有四个线程:
A线程与控制服务端通信,作为其客户端,客户端与服务端维持长连接;
B线程与MQTT broker通信,是MQTT client
C线程通过四路串口与外设通信;
D线程在指定的端口上监听,接收局域网上PC调试/配置客户端的连接;
控制信息流是: 互联网服务端--->线程A --->线程C--->串口-->外设, 外设的回复信息流刚好相反.
外设主动上报的数据流是: 外设-->串口-->线程C-->线程B-->互联网MQTT broker-->数据服务端
以上说的外设不单是指与物理串口的直接相连的外设, 实际上这四个外设通过无线信号(Lora/BT等)连接了很多个子(下级)外设.绝大部分时候,这四个外设起的作用是下级子外设数据的上下行中转角色.
写C++这哥们,写出来的程序,C/C++的风格都不像,缺少像样的函数封装和复用的概念. 这里面,近2000行的单个函数,就有两个,近500行的函数,不下三四个.全局变量满天飞.
实际测试中,经常冒出一些奇怪的问题,定位和查找很费时间.
想尝试着用go来重新撸一遍,当作go学习练手的机会.
现在有两个疑问:
1)256M的内存,能不能撑住这个应用系统运行起来的内存需求?
2)go对串口进行读写,是否有现成好用的第三方库?还是用cgo?
--
修改:mykeyboard FROM 113.104.214.*
FROM 113.104.214.*
似乎go程序是编译成目标二进制文件,直接在目标版上运行的。
文件系统是ubifs, 没有跑数据库。
编一个hello world程序,8M左右字节。
256M存储空间肯定是够。
现在是担心256M内存是否够。
【 在 AIREE 的大作中提到: 】
: 256mflash够不?
: go的运行环境库大不大,什么文件系统,有没有数据库
--
修改:mykeyboard FROM 117.136.40.*
FROM 113.116.176.*
这是目标系统上free命令的输出:
total used free shared buffers cached
Mem: 247592 57924 189668 5708 0 22144
-/+ buffers/cache: 35780 211812
Swap: 0 0 0
【 在 gpmn 的大作中提到: 】
: 把linux裁剪下,肯定够了.
: 你的这个需求, 就算用go跑起来, 只要没有内存泄漏, 没可能超过30M内存的开销.
: 放狗搜索 golang 串口通信, 似乎库不少.
--
修改:mykeyboard FROM 113.116.176.*
FROM 113.116.176.*
在目标系统/usr/lib目录下没有找到glibc,只有这个:
-rwxr-xr-x 1 1000 1000 1240644 Oct 20 2017 libstdc++.so.6.0.21
【 在 kirbyzhou 的大作中提到: 】
: 你的系统大概率用的不是glibc吧。
: 谨慎踩坑
: :
--
修改:mykeyboard FROM 113.116.176.*
FROM 113.116.176.*
具体是指什么?
【 在 idoppler 的大作中提到: 】
: 这系统跑go,简直是自虐
--
FROM 117.136.40.*
不太明白你说的。
是指目标系统要求有这个?
【 在 kirbyzhou 的大作中提到: 】
: 你的系统大概率用的不是glibc吧。
: 谨慎踩坑
--
FROM 117.136.40.*
珍惜生命,远离C++
【 在 hany2017 的大作中提到: 】
: 修改c++代码吧,你说的那些问题不大。 总体代码规模还可控的情况下,小规模重构,划分一下功能
--
FROM 113.116.176.*
您的ARM板子内存有多大?
不会是新的苹果arm系统吧?
go程序是在arm板子的系统上编译的吗?还是linux上交叉编译生成的?
应用需要操作硬件吗?
【 在 Knightmare 的大作中提到: 】
: 我正在用go给ARM板子写程序
: go的虚拟内存占用很吓人,上来就2个G
: 但是真实内存占用才20多MB,所以应该是ok的。
: ...................
--
FROM 113.116.176.*
现在已经是烫山芋头了
【 在 laoshifu 的大作中提到: 】
: 趁码量小,赶紧重构一下,再大了就是一烫山芋头
:
--
FROM 113.116.176.*
谢版主鼓励。
有点不太明白第6楼 kirbyzhou 的问题。
go编译的可执行文件,在目标系统上运行,需要glibc.so吗?
在目标系统上,/usr/lib 目录及子目录下确实没有找到这个文件。
【 在 gpmn 的大作中提到: 】
: 还有180m内存,肯定够。
: 安心上go撸,别有内存泄露就好。
: 不放心的话,检测free的余量,太低了杀了重启一次就行了。
: ...................
--
FROM 113.116.176.*