2011-01-05 21 views
3

嗨我试图找出什么是和不可能与BrewMP上的C++。Brew(MP)不支持C++的哪些部分?

没有任何人有使用C++与啤酒,特别是BrewMP的第一手经验,可以说,如果他们已成功地得到这些东西的设备上工作没有太多的麻烦:

  • 静态变量/函数
  • 模板
  • 例外
  • 铸造 等

回答

2
  1. 在Brew3.X之前,不支持全局变量和静态变量。但是在Brew MP中,有一个ELF2MOD工具。有了这个,你可以使用全局和静态变量。
    请参阅您的SDK路径,如:
    C:\ Program Files文件\高通\的Brew MP SDK \工具集7.10版本10.0.1489821 \ BIN

    如果您的全局或静态数据是非POD(C++对象,必须调用C++类的构造函数),请不要使用它。见 https://developer.brewmp.com/forum/using-static-variables-classes-0

  2. 标准C库(LIB STDC或C运行时)是绝对禁止在BrewMP,如memset的的sprintf。原因:在具有main()条目的通用处理模块中,C运行时的那些模块在用户代码调用之前已经自动初始化。 BrewMP mod(mod1)文件是动态加载和链接的。没有适当的时间来调用初始化,并且这些MOD不应单独调用C运行时初始化。

  3. C++模板函数和模板类:模板代码实例化在编译时生成,它们不需要任何加载时间和运行时代码初始化。它们可以在设备中安全使用。

  4. C++异常:我没有测试它。在默认的ARM编译器选项中,异常未打开。异常需要启用C++ RTTI。

  5. C++类型cast:dynamic_cast是一个大问题,因为它需要支持运行时类型标识,并在运行时进行类型检查。其他强制转换(如static_cast,reinterpret_cast和const_cast)只是编译器在编译时检查的一个提示。

+0

因为这点2,你得重载operator new和使用malloc()和free()由提供删除。 – MikimotoH 2011-01-10 08:00:42

+0

感谢您的详细回复,我很感激。 – 2011-01-11 17:30:48

1

有一些问题:

  • 虚拟或抽象方法
  • 静态和全局变量支持
  • 使用自定义post-linker全球 对象

他们中的大多数是可以解决的静态初始化。它对我来说工作得很好,希望它也适合你。

+0

谢谢。你的意思是后链接机制?你能提供任何具体的例子吗? – 2011-01-09 22:12:35