繁体   English   中英

用于8051微控制器的C ++?

[英]C++ for 8051 microcontroller?

有人可以告诉我是否可以使用C ++程序刻录8051微控制器? 我试过在线搜索它,但似乎无法确定是否可能。 Keil使用C,但是我需要编写的程序是字符串密集型的,与C#相比,C是非常不符合字符串的,这是我以前习惯使用的。 目前,我正在尝试用C语言编写代码,但它变得非常混乱,所以如果我能用C ++编写它,我会非常放心。

我需要一个C ++编译器来创建一个Hex输出文件,然后可以将其烧录到微控制器上。 有人听说过我可以使用的东西吗? 而且,C使用一个头文件,让你引用端口,但当我试图找出这个头文件是否在C ++中使用时,我找不到任何关于它的信息。

另外:我正在使用的微控制器是Atmel AT89C51,具有4K字节的可重编程闪存和128 x 8位内部RAM。 这实际上是用于大学项目的机器人,编码实际上并不需要OOP。 它只有很多以2D字符串数组格式查找的表。 我想考虑C ++的唯一原因是因为操作字符串似乎有些混乱(由于我缺乏C语言专业知识)。

有没有人知道头文件? C使用#include reg51.h但我试图找出它是否适用于C ++并且无法在其上找到任何内容。

首先,我会怀疑这是否真的是一个好主意。 我理解在一般情况下想要在C语言上使用c ++的原因,但在8位哈佛架构微控制器的情况下,我会警告这一点。

要记住的事项包括:

  • 源级调试支持将介于较差和不可能之间。
  • 8位机器上OOP的运行时开销。 我强烈建议在提交工具之前做一些严肃的基准测试。
  • 内存在嵌入式系统中并不便宜,您无疑会遇到一些地址空间限制。

此外,如果您真的要进行一些严格的字符串处理,我建议使用C标准库而不是字符串对象库,因为您可以更好地控制就地替换,因此字符串副本在代码中变得非常明显。

请发布一些您计划使用的微控制器(数据存储器,程序存储器),以及是否有任何性能要求必须满足,以便我们可以更具体地帮助您。

IAR Systems有一个8051编译器 ,它可以本地编译C ++(不能转换为C),源代码级调试也不应该是一个问题。

ceibo有一个商业编译器。

但是,如果你可以使用c ++(特别是STL字符串)取决于你将拥有多少资源(ROM和RAM)。

有一个8051网站,有论坛,教程和下载,你可以获得更多资源来编程8051。

您可能需要考虑提供有关您打算在该微控制器上运行的程序类型的其他详细信息:

您在发布时提到了C ++和C#,这两者肯定不是理想用于微控制器上的重字符串处理,更不用说您可能正在考虑大量使用STL,这将进一步增加STL的大小。可执行文件?

那么你的主要限制是什么(RAM,CPU,ROM等)?

如果您真的认为需要以OO方式执行此字符串处理,您可能需要考虑在控制器上运行轻量级嵌入式脚本解释器,以便您可以使用脚本语言提供字符串处理例程,而解释器本身将ANSI C编译为HEX文件(例如luanasal似乎都是合适的候选者)。

但是,考虑到诸如lua之类的脚本语言通常会在空间中施加大约100kb +的开销,Nasal稍微更轻,如果禁用某些扩展,可以编译为50-70 kb。

此外,还有其他脚本解释器可用于嵌入式平台。

IAR似乎为8051的8051的 C / C ++编译器提供了一个C / C ++编译器 - 但在完全披露中,我只使用Keil的C编译器进行8051开发。

至于头文件问题:头文件通常由IDE供应商或硬件制造商分发,并且通常提供寄存器映射的符号表示。 可能需要适度的按摩量才能将基于C的头文件合并到C ++项目中。 - 如果您要切换IDE /编译器,您通常可以期望对源代码进行一些按摩以适应新的编译器。 (阅读:从C ++代码库访问C代码通常会让我停下来做一天正确。)

是的,您可以使用C ++程序刻录8051微控制器的内存,还有几个可用于创建Hex文件然后将文件发送到微控制器的免费编译器。 您可以在包含教程,编译器,模拟器等综合文章中找到有关编程微控制器过程的任何信息

有几种商业编译器可供使用。 业界第一名来自Keil Software

您可以尝试将C ++代码转换为C代码,然后使用现有的C编译器进行编译。

您应该能够创建一个调用C ++编译器的Makefile,然后运行C编译器。

它不是最优雅的解决方案,但在8051等小型设备上使用C ++确实很不寻常。

免责声明:我实际上没有尝试过这么好运! 如果是我,我会坚持使用C并编写一些强大的字符串处理函数。

其他人提到8051有C ++编译器。我猜你的主要问题是成本。 许多公司将允许您免费编写程序集,但对C或C ++编译器收费。 我们可能在这里说几百美元。

我的主要问题是你的代码中有什么“混乱”? 您试图在C ++中使用哪些功能在C中变得混乱? C ++中的某些功能无法很好地转换为这样的最小嵌入式环境(流,构造函数,析构函数等)。 C可以使用结构来执行许多面向对象的类型函数。 应该避免使用其他功能(任何具有动态内存管理的功能)。

我会努力让它在C中运行,然后才可能花费大量资金并获得大而缓慢且难以处理的代码。

听起来你想要一个C ++编译器,以便你可以使用std::string std::string需要一个堆。 你不会有一个只有128x8位内部RAM的可用堆,特别是对于std::string对象不会考虑如果你从串口读取一个80个字符的字符串,那么它占用了60%以上的可用内存。 你还要使用外置RAM吗? 多少?

您的固件是否真的需要在运行时处理字符串处理? 例如,它是通过串口还是其他接口发送/接收命令? 如果是这样,您应该尽可能地将字符串处理与其余代码隔离开来,并在别处使用标记(枚举类型或#defined积分常量)。 如果没有,通过使用令牌而不是字符串,您可以更轻松地将逻辑拟合到处理器的约束内存中。

此外,如果您确实需要进行字符串解析,最好还是编写一个一次处理一个字符的状态机,这样您就不必处理完整的字符串。 同样,128字节不是用于字符串处理的大量空间。

为什么不使用C字符串库? bstrlib或类似? C ++并不是你需要的微控制器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM