使用C ++编码PIC是否有可能?是否有任何硬件限制使我们无法使用C ++?当我们使用C ++而不是C时,生成的.hex文件的大小和程序的运行时间增加了多少?在当前的PIC中实际上可以使用C ++吗?有没有未来的计划或正在进行的发展?
使用C ++编码PIC是否有可能?是否有任何硬件限制使我们无法使用C ++?当我们使用C ++而不是C时,生成的.hex文件的大小和程序的运行时间增加了多少?在当前的PIC中实际上可以使用C ++吗?有没有未来的计划或正在进行的发展?
Answers:
使用C ++编码PIC是否有可能?
是的,现在有可能。对于dsPIC,有IAR Systems C ++编译器(尽管它很旧并且不受支持)。
另一种选择是使用C ++到C的转换器。使用预构建步骤,将C ++转换为C,然后将(讨厌的)C提供给常规C编译器。看一下LLVM或Comeau的C ++编译器都可以做到这一点。Comeau的价格仅为50美元,但可能需要一些努力才能使整个工具链和库正常工作。
是否有任何硬件限制使我们无法使用C ++?
简短的回答,不,没有硬件限制。长话大说,C ++肯定会鼓励使用堆和/或堆栈,而内存有限的小型MCU会遇到困难。
他们为什么要在堆/堆栈上挣扎?原因有两个:A)许多MCU的RAM有限,肯定不足以容纳堆,而不足以容纳堆栈。B)许多MCU不能很好地处理指针,因此在堆栈上使用变量确实会降低性能。
当人们问到在MCU上使用C ++时,我发现将C ++与C进行比较很有建设性。关于(仍然是)关于MCU上的C的问题完全相同。人们过去常常不赞成这个主意。256字节RAM MCU上的高级语言 不可能。但是现在我们都知道这是可能的。我已经为PIC12写了C语言。没问题。可能是因为A)软件开发人员知道他们必须加倍小心:不要使用malloc()等。B)专门为MCU编写的编译器。编译器在分配内存时也要格外小心,它不会尝试创建堆,也可能不会创建堆栈。有些C编译器根本不允许您编写绝对需要堆栈的可重入(递归)代码。
知道可以为MCU编写C,因此相同的答案也适用于在MCU上编写C ++的问题。只要编译器了解目标设备的局限性,并且用户也了解该语言,就真的没有问题。在C ++中,您只需为使用的东西付费。完全有可能编写C ++(包含对象和所有内容)来产生与使用C时所获得的asm输出完全相同的输出。
现在,PIC32无疑可以应付C ++。它们具有高达64kB的RAM,并且基于MIPS内核,该内核是一个适当成长的32位处理器。它可以处理指针,堆栈以及PC。确实,有一些基于MIPS的PC(或者至少是以前的MIPS)。
可悲的是,围绕C ++的理解如此之多。即使是非常有经验的编码人员似乎也不知道该语言如何工作。请参阅我的答案,以了解C ++为什么适用于嵌入式CPU。
当我们使用C ++而不是C时,生成的.hex文件的大小和程序的运行时间增加了多少?
正如我所说,可能没有区别。Bjarne Stroustrup对一堆C / C ++编译器进行了比较,以比较许多操作的时间和空间性能。结果差异很大。在某些情况下,C ++的速度变慢而变大,在某些情况下,速度变慢而变小,或者速度越来越大,甚至变得越来越快!因此,您的问题的答案是它在很大程度上取决于编译器,但总的来说,它根本不需要任何改变。有关更多详细信息,请参见有关C ++性能的技术报告。
有没有未来的计划或正在进行的发展?
我不知道 我确实知道Microchip C32编译器是开源的,您可以下载源代码。我也知道,与我一起工作的人实际上在网上找到了一些指令,并设法使编译器编译C ++代码。但是他在能够为我建立合适的工具链之前就离开了公司。
更新
Microchip现在为其PIC32系列嵌入式MCU提供了一个C ++编译器。
当我们使用C ++而不是C时,生成的.hex文件的大小和程序的运行时间增加了多少?
取决于您使用的功能。如果使用核心的面向对象功能(类+方法),则效果可能很小(变量/函数名称混杂在一起,因此符号表可能会有所增加)。模板也不应通过良好的编译器添加太多内容。
如果您全力以赴,使用标准模板库之类的东西,并使用动态内存分配和异常,那么您很可能会陷入代码膨胀。
已经有用于图片的c ++编译器,例如http://www.sourceboost.com/Products/BoostCpp/Overview.html
除了它存在之外,我没有使用过它,对此一无所知...
可能是的..但是无论如何都不应该... C是嵌入式语言,使用C ++没有任何优势。确切地说,C的优势远远超过C ++的嵌入式优势。不要浪费你的时间。