当前位置:  开发笔记 > 编程语言 > 正文

用C或C++编写bootloader?

如何解决《用C或C++编写bootloader?》经验,为你挑选了5个好方法。

我正在为嵌入式系统编写程序,更具体地说是一个引导加载程序.我将使用C库与一些硬件组件进行交互,我可以选择用C或C++编写它.我有什么理由选择一个而不是另一个吗?我不需要C++的面向对象功能,但它确实有一个更强大的类型系统.它是否有其他语言功能可以使程序更健壮?我知道有些人会避免使用C++,因为它可以(但不总是)生成大型固件映像.



1> DrAl..:

这不是一个特别简单的问题.这取决于许多因素,包括:

您希望如何布局代码.

是否有可用于目标的C++编译器(以及您可能希望使用引导加载程序的任何其他目标).

代码大小对你的应用程序有多重要(我们说的可能是额外的10%,而不是另一个答案建议的MB).

就个人而言,我真的很喜欢课程来表达我的代码.即使在编写C代码时,我也倾向于将所有内容保存在模块化文件中,文件范围静态函数"模拟"成员函数和(一些)文件范围静态变量来"模拟"成员变量.话虽如此,我现有的大多数嵌入式项目(所有这些都是相对较小的规模,最多包括128kB闪存,包括引导加载程序,但通常更少)都倾向于用C编写.现在我已经有了C++编译器,我当然正在考虑转向C++.

简单地使用引用,重载和模板,C++有很多好处,即使你没有像类那么远.当然,我不会使用许多更高级的功能,包括使用动态内存分配(新).然后,如果可能的话,我还要避免嵌入式C中的动态内存分配(malloc等).

如果你有一个C++编译器(即使它只是g ++),那么值得运行你的代码只是为了进行额外的类型检查,这样你就可以减少代码中的问题数量.C++编译器可以提供一些甚至静态分析工具都不会发现的东西.

有关人们拒绝使用C++的许多无效原因的详细讨论,请参阅Dan Saks在Embedded.com上的文章.


好答案.我可能会根据目标做出选择.如果它比8位μC更大,我会尝试坚持使用C++.我已经学会了讨厌C++,但我认为如果你知道自己在做什么,它可以给你带来与使用C相同的好处.一如既往,一个非常好的建议:知道你在做什么和为什么.

2> Matt Joiner..:

对于引导加载程序,显而易见的选择是C,尤其是在嵌入式系统上.生成的代码需要接近金属,并且非常容易调试,可能通过放入汇编,这很快就变得很难在C++中无需关注.此外,C工具链比C++工具链更普遍,允许您的引导加载程序在更多平台上使用.最后,生成的二进制文件通常较小,并且在编写C风格时使用较少的内存.



3> Kyle Rozendo..:

如果您不需要使用面向对象,请使用C.简单选择.它更简单,更容易,同时完成相同的任务.

一些顽固分子会不同意,但OO是使C++> C的原因,反之亦然.


"你可以用任何语言编写OO" - OOP不是"在结构上使用方法",而是关于**动态绑定**方法.如果你已经在C++中使用它,那么在你自己的普通C中实现vtable机制是不合理的.
我不同意这一点.OOP支持可能是偏好C++的最不相关的理由,特别是在嵌入式设置中.正如Al的回答所示,C++包含大量的改进,只能产生比C更好,更强大的代码,但不以任何方式特定于OOP.
此外,OO是在很多情况下使C++
4> Gerhard..:

除非有特殊原因要使用C++,否则我会使用C. 对于Bootloader,您实际上并不需要OO.

使用最简单的工具完成工作.



5> Kirill V. Ly..:

用C语言编写程序与用C++编写程序不同.如果你知道如何只在C++中这样做,那么你的选择就是C++.对于编写引导加载程序,最好将代码最小化,因此您可能必须禁用标准C++库.如果您知道如何用C语言编写,那么您应该使用C - 对于这类任务来说,它是更常见的选择.

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有