欢迎大家关注我的公*号:embedded_bug
这里的嵌入式Linux环境是指非标准Linux发行版环境,比如通过buildroot创建的,相比于标准的Linux发行版比如ubuntu,debian,fedora,系统比较简陋,提供的库很有限,而且系统的各种配置文件和配置方式与标准Linux发行版差别很大,总之,这里的嵌入式Linux只保证系统能够基本的启动运行起来。
上图是现在编程语言的流行度排名,别看这么多语言,真正适合在嵌入式Linux中应用的并不多。
直接说结论,个人推荐:go>C++(11)+boost>c,其他语言目前还都不太适合。
本篇文章先讨论C和C++,下面一篇文章讨论go及其他语言。
一、C语言,迫不得已的选择
C语言作为最基本的编程语言,只要是个嵌入式Linux环境肯定都是支持的,但是同样使用C的问题很多,包括:
-
语言比较老旧,很多高级语言的特性比较缺乏,程序写起来比较费时间,容易出错,代码行数也多。
-
基础C库功能太少,需要什么新功能还得去找相当的函数库,然后交叉编译,测试函数库功能怎么样,是否满足需求,费时费力。
总之,C语言的问题是库少,写起来费事,容易出错。优点是程序运行速度快,空间占用小。
二、C++(基于11标准,配合boost库),不能用go时候的选择
选择C++有两个条件,基于C++11标准编写程序,并配合boost库。如果还是用C的思想在用C++,那还不如直接用C。使用C++,一定要将C++当成一个不同于C的全新语言使用,否则发挥不出C++的优势。
C++11相比于之前的C++是巨大的进步,并且gcc4.8.5的版本已经能够完整支持C++11了。C++11的特性包括自动类型推导,自动指针,lamba表达式等等。代码写起来更流畅,更精简了。唯一的缺点就是太复杂了,否则也就没go什么事了。
boost库为什么是一个必选项呢,因为boost库实在太强大了,嵌入式开发百分之九十以上的需求都可以通过boost库实现,完全不需要借助第三方库,包括串口操作boost库中都包含了。并且boost库大部分是头文件,交叉编译出来的so文件也并不大,占用不了太多空间。
https://www.boost.org/doc/libs/1_76_0/
看下boost的文档,你就知道boost库的功能有多强大。
C++11+boost库的缺点就是太复杂,学习起来比较困难,不过真要用熟了,绝对就成了C++大师了,跳槽升职加薪迎娶白富美走向人生巅峰不是梦!
下面列举几个C++ boost库的代码示例
用boost库解析命令行参数:
using namespace std;
namespace bpo = boost::program_options;
namespace blog = boost::log;
namespace baio = boost::asio;
// 解析命令行参数
int initFlag(int argc, char* argv[], string &configDir, string &logDir, int &logLevel)
{
//步骤一: 构造选项描述器和选项存储器
//选项描述器,其参数为该描述器的名字
bpo::