我们的嵌入式项目使用基本的串口,大概每秒一共<1KB的数据进来,需要处理和存储。
我们需要TCP/IP,需要流行的基本库,比如gzip, JSON等。我们使用Linux来解决底层
的库,现在说说对C++11的感受。
目前,按照几位高手的启发,现在Visual Studio 2015下实验,TCP/IP的同步异步都试
过了,多线程也很简单。
我们目标是使用Xilinx SDK,还没有安装最新的2015.3,只装了2015.2,是g++4.9.1,
所以支持C++11,不完全支持C++14。Xilinx SDK用过几小时,基于Eclipse。Visual
Studio里面我建立一个Solution,然后建立多个Project,互相依靠。不知道Xilinx SDK
是不是也这样,可否把程序模块化,分成多个项目?按说Eclipse就可以这样,一个
workspace多个项目。网上很少能查到Xilinx SDK的信息,包括g++版本只能安装后看。
我原来虚拟机下的g++才4.4,费了好大劲才升级成4.9.3。公司还不让git,不让
sourceforge下载源代码,连asio都是自己在家下然后发给自己邮箱。
我们需要JSON,所以看了JSONcpp,似乎可以处理UTF-8的value,只要name是ASCII。似
乎Name是不是UTF-8也无关紧要。但是C++处理UTF-8还是不简单,连算个长度都需要<
codecvt>,转化成UTF-16。Visual Studio 2015居然报找不到symbol (std::codecvt..
.),8月就有人提了,还没有解决。对我们项目似乎影响不大,我们只需要保存用户存
的UTF-8信息,不用显示,因为我们的嵌入式系统也未必有他们的字体。所以我们只显
示第几个设备什么温度等,不需要显示设备的中文名什么的。
gzip在Java里直接支持,而C++需要下载第三方的库,比如boost。不知道是不是到了C+
+11/14里面?很多网上的信息都是2011年之前的。其他方面的信息也是这样不很清楚。
比如大部分boost都到了C++11里面,但是留了一些。幸亏有个asio处理TCP/IP,而
boost的gzipfilter就不知道现状。我不想用boost,因为太大,还有很多人说不成功。
看来,就是C++的用户少了,而C++11的用户更少。为什么用C++11呢?主要是为了尽量
节省自己开发轮子的时间,还有尽量模块化,封装等。至于继承什么的,用一些。高级
的特性基本不用。Lamda我都看不懂。所以我认为C帮不了我们什么,只能自己制造轮子
。感觉Java确实解决了很大问题,才这么流行。另外我们PC程序是C#的,所以如果Java
支持串口,GPIO,我们就真的都用Java了。