打印
[ZLG-ARM]

提倡在ADS下用C++和C混合编程

[复制链接]
3245|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wanglingnj|  楼主 | 2008-10-10 14:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

提倡用C++和C混合编程。

在一个项目中(基于ZLG提供的软件模板),我开始写一个应用程序时,用了太多全局变量,有人认为程序结构不够紧凑,向我提出,尝试用结构体和函数指针结合的方法,用C语言写出面向对象风格的代码。

在修改过程中,我尝试了使用C++和C混合编程的方法实现面向对象的方法,而不使用结构体和函数指针结合的方案,因为C++中类的封装性、继承性比结构体好得多,是面向对象编程更加“正统”的方法。(当然,在C语言下也可以对结构体进行“继承”,即把旧结构体作为新的结构体的成员)。

实现的方法很简单,就是把需要用C++写的代码的源程序后缀名换成.cpp就可以了,ADS本来有C++的编译器,如图1所示,把传统的main.c改成main.cpp。
https://bbs.21ic.com/upfiles/img/200711/2007112515951314.jpg图1

但如果编程是基于模板的,比如ZLG的模板全部是C语言写的,*.cpp是不可以直接使用*.c中的函数的。但看来ZLG的工程师们早就考虑到了这点,看图2,ZLG的模板中的config.h文件包含了extern "C",通知*.cpp导入模板中*.c写成的各种驱动函数。
https://bbs.21ic.com/upfiles/img/200711/20071125151143542.jpg图2

ADS软件为C++编程提供了丰富的向导和浏览工具,这也是提倡用C++写程序的原因之一。看这个类观察窗口,图3,成员变量、成员函数一目了然,这个浏览器还能像VC++一样向导生成类、继承类、生成新的成员变量和函数。
https://bbs.21ic.com/upfiles/img/200711/20071125151229462.jpg

使用C++编程,我们的各种应用程序都可以封装成类的形式,要想改进前人的驱动,就继承以前的类,结构清晰,不像现在有的程序N个工程师改,往往都是面目全非,错一处弄死人(封装性差的结果)。比如图4,就是ADS提供的继承关系图表,先有“基础类”,再派生出“应用类”,清清楚楚。
https://bbs.21ic.com/upfiles/img/200711/20071125151326125.jpg图4

总之,C++和C混合编程,简单易行,好处多多,值得推广!

相关帖子

沙发
王凌| | 2008-10-10 17:01 | 只看该作者

wanglingnj=>王凌

我改名了 
wanglingnj=>王凌

使用特权

评论回复
板凳
王凌| | 2008-10-10 18:44 | 只看该作者

我是LZ

对不起,我想了一下,这个思想是错误的。因为C++的可移植性不好!

套用ZLG的一句口号“基于驱动库编程,懂C语言就会开发ARM”。大家以后还是用C来写程序吧

使用特权

评论回复
地板
zb0908| | 2008-10-12 19:07 | 只看该作者

你变通好快呀

使用特权

评论回复
5
masashinakayama| | 2008-10-12 22:09 | 只看该作者

......

C is the best in MCU

使用特权

评论回复
6
db10| | 2008-10-12 22:21 | 只看该作者

。。。

 C++与C的区别是很大的,虽然可以理解C是C++子类,C++的编译效率差,代码执行就慢,如果用来做驱动程序,那是不行的。
 如果带操作系统的应用程序,一般ram 和flash比较大,由于C++的思想很好,对程序的找BUG和调试很方便,开发时间比较短。但是以类和方法的思想,要先对应用部分进行抽象,归类,建模处理,这样才能体现C++的优势,这样先期时间发得多点。
 所以驱动用C写,应用程序如果条件可以就用C++。

使用特权

评论回复
7
汽车电子| | 2008-10-14 11:53 | 只看该作者

谁说C++的可移植性不好???

    C++写驱动也很简单方便,在ARM中,特别是多个相同的硬件,如4个UART,用C++比C简单多了。

使用特权

评论回复
8
王凌| | 2008-10-14 16:06 | 只看该作者

C++向下的可移植性不好

51核的指令集有C++的编译器吗?我用C写,ARM、51都能用啊。向上可移植性C++是没话说的,都有编译器支持的。
但有一个不懂,C++编译效率低下一说从何而来,证据何在?写段代码比较一下吧。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

6

帖子

0

粉丝