IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 嵌入式Linux开发的编程语言选择-续 -> 正文阅读

[嵌入式]嵌入式Linux开发的编程语言选择-续

欢迎大家关注我的公*号:embedded_bug

嵌入式Linux开发的编程语言选择2-高级语言比较

这里的嵌入式Linux环境是指非标准Linux发行版环境,比如通过buildroot创建的,相比于标准的Linux发行版比如ubuntu,debian,fedora,系统比较简陋,提供的库很有限,而且系统的各种配置文件和配置方式与标准Linux发行版差别很大,总之,这里的嵌入式Linux只保证系统能够基本的启动运行起来。

直接说结论,个人推荐:go>C++(11)+boost>c,其他语言目前还都不太适合。

上一篇文章对C和C++进行了说明,这篇文章讨论go及其他高级语言。我自己实测过的有go,java,python,kotlin native,dotnet core,rust

一、java,内存和空间占用大,速度慢

? java的缺点:

  • 需要在嵌入式Linux中安装arm版本的java runtime,占用空间。

  • 程序编译之后占用存储空间也较大,因为一个程序通常包含好多java包,合起来之后程序也不小

  • 程序运行需要内存大,一个基本的hello world就需要几十兆内存,稍微写写程序内存占用就百兆了。

  • 程序运行速度慢,毕竟是通过java解释器翻译的。

    当然,java也有他的绝对优势,就是无敌的库,各种库简直太丰富了。总之,java可以适用于CPU,内存,磁盘都不是事的高性能嵌入式Linux环境中。

二、dotnet core(C#),目前只能用于标准Linux发行版

? dotnet core目前在嵌入式Linux环境中还无法正常使用,主要是dotnet core很多API需要访问Linux中的某些文件,而这些文件是与Linux发行版相关的,因此在嵌入式Linux这种不完整的环境下运行是有问题的。

? dotnet core程序运行有两种方式,方式一类似java,需要安装个dotnet core runtime,然后程序由dotnet core启动;另一个方式是直接将程序编译成可执行程序,但是这种方式会将dotnet core runtime也编译进程序中,造成程序很大,基本的hello world程序都要上百兆。

不过在dotnet core可以运行的情况下,个人还是十分推荐的,因为同样有很强大的库支持,并且运行速度,内存占用都不错。

三、python、php,依赖C库,速度慢

? python,php等脚本语言,主要问题如下:

  • 需要在嵌入式Linux中安装python, php等,不过这个占用空间不算很大。

  • 程序运行速度慢,毕竟是脚本型语言

  • 最主要的问题还是依赖与C库,别看python,php好像各种库很丰富,但是为了速度,底层其实很多都是用的C库,所以你要使用相应的库,还需要移植对应的C库,得不偿失。

    除非有特殊需要,不太建议嵌入式Linux中使用python,php等脚本语言。

四、kotlin native、rust,依赖C库

? kotlin native目前还比较初级,并且库也不是很丰富,很多功能底层还是依赖于C库,例如网络部分就高度依赖libcurl。导致的问题和python类似,你要使用相应的库,还需要移植对应的C库,得不偿失。

? rust的问题和kotlin native类似,也是很多功能还依赖于C库,需要移植C库。

? kotlin native和rust的交叉编译其实还是用的gcc交叉编译器,所以交叉编译的时候还需要下载对应的交叉编译器,对应平台的库函数等,不过这个过程可以通过命令自动完成。

五、go,不二选择

? 选用go的唯一缺点是可执行程序略大,但是也可以通过upx程序进一步压缩程序,压缩后的程序一般最大也就几MB,不是对空间要求十分苛刻的环境完全能够满足要求,选用go的优点就很多了:

  • 编译完的程序只是单文件,不依赖于任何C库。

  • 程序运行速度快,内存占用少。

  • 丰富的库可供选择,并且几乎都是开源的,可根据自己要求修改。

  • 交叉编译十分方便,只需要PC端安装go的sdk就行,完全不需要交叉编译器。

  • 调试方便,因为go交叉编译方便,不依赖于C库,因此程序完全可以在PC端调试完成之后只简单交叉编译一下就可以在目标设备上运行。

    go的交叉编译可看这两个链接:

    https://rakyll.org/cross-compilation/

    https://golang.org/doc/install/source#environment

    具体交叉编译命令如下:

GOOS=linux GOARCH=arm GOARM=7 go build .

GOARCH值为arm时表示32位arm,为arm64表示64位arm

当GOARCH为arm时,GOARM可以为5,6,7;具体含义如下:

GOARM=5: use software floating point; when CPU doesn't have VFP co-processor
GOARM=6: use VFPv1 only; default if cross compiling; usually ARM11 or better cores (VFPv2 or better is also supported)
GOARM=7: use VFPv3; usually Cortex-A cores

编译完的命令可以用readelf -d命令看下库依赖,可以看出程序不依赖于任何C库
在这里插入图片描述

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-11 12:35:13  更:2021-08-11 12:36:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:44:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码