哪里可以找到有关嵌入式C++的信息?

Cha*_*hra 3 c++ embedded

我想找到关于"嵌入式平台上的C++编程"的信息.我用Google搜索,但我无法找到有关该主题的足够信息.我想要找到的是C++在具有详细描述和示例的嵌入式环境中是如何有用的(如果可用的话)

任何人都可以建议任何链接或任何免费的电子书下载,如果我能得到的?

Max*_*and 5

我还可以推荐Michael J.Pont的Embedded C一书.和编程嵌入式系统由Michael Barr 编写.

在我作为嵌入式开发人员的14年中,我了解到"实践"通常不适用于嵌入式系统.当本书说使用这种或那种模式时,如果你拥有无限的内存和CPU能力,那就是这样.

去年我为一家大公司设计新的FW平台时,我不得不打破几乎所有关于设计的规则.您需要问问自己,一个众所周知且被接受的解决方案是否最适合您的项目,代价是代码大小或速度?要记住的事情.

本地还是全球?

在声明变量之前请三思而后行.在运行时在堆栈上创建局部变量,而在启动系统时创建一次全局变量.

Const存储在闪存中,占用空间并具有与索引数组相同的访问时间.如果您不需要使用指针引用它们,最好使用类型转换定义:

#define kState_Idle (unsigned char)4
Run Code Online (Sandbox Code Playgroud)

这将在汇编代码中的4中编译,而不是从flash中作为只读变量获取它.

不要使用双重或浮动,这些都是死的慢.请改用整数数学.不惜一切代价避免使用数学库:)

在循环中访问的局部变量(例如for,while等等)正在减慢速度,将它们声明为寄存器变量以获得速度.

使用部分放置代码

C/C++框架将所有变量(包括常量)复制到RAM.如果它是只读变量,大浪费空间.字符串也属于这一类,例如"Hello world".

说到C++,模板不是很大的时间,因此也是RTTI和异常.躲开它!!

重载和变形将使您获得良好的规划,您的代码将紧凑而快速.

图书馆

根据微控制器的大小,您可能会避免包含任何STL.我们创建了自己的get(),put()printf()等版本来保持代码大小.

使用硬件

不要忘记研究您的微控制器/ CPU以将硬件利用到100%例如,如果您有,请使用DMA,而不是使用memset或memcpy填充内存.

研究装配.通常控制器具有专门的指令,需要几行C/C++代码才能完成.您可以在汇编中编写自己的C函数,以将它们连接到C/C++代码中.很好的例子是位设置/清除指令或块操作指令.

检查控制器使用的数据大小.例如,如果它是16位系统,它可能一直读取16位,即使您已声明了char.在这种情况下,读取char而不是short需要更长的时间,因为它必须进行额外的屏蔽.

记忆

请记住,内部RAM比外部RAM快得多.您可以将变量甚至代码放在内部RAM中以加快速度.

Flash通常比RAM慢,尤其是写入.但是,放置经常访问的只读变量通常不会反向绘制.编译器通常检测常用变量并分配内部寄存器.

测试

通常无法在不影响性能的情况下足够快地将调试信息发送到主机系统.在这些情况下,创建一个内部调试缓冲区来存储您的信息并在之后进行分析.

通过切换硬件引脚来测量执行时间,它需要一条汇编指令,虚拟对执行速度没有影响.使用逻辑分析仪或示波器监控引脚.我们在经常使用的函数中搜索ns以提高整体性能.

自动生成的代码文档也是查找"奇怪"设计或解决方案的好方法.我们使用Doxygen和Graphviz来生成类图和关系.在这里我们得到了一个很好的概述,可以很好地发现"过时的"类或非更新的子系统(我们使用敏捷开发方法)

嗯..我可以永远继续写一本关于这个的书:)

我们使用C++中的上述建议在20k RAM(RTOS,变量,通信缓冲区和堆)和64k Flash(引导块,应用程序代码和2个闪存盘)上打印150mm/s的打印机.

祝好运!

  • “模板没有什么大不了的”——根本不是真的。一个好的编译器会很好地处理这些。 (2认同)