2011-01-05 51 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