問題タブ [greenhills]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
user-interface - ThreadX OS 用の埋め込み wxWidgets
ThreadX を使用して組み込みシステムに取り組んでいます。プロジェクトには GUI が含まれます。
ThreadX オペレーティング システムに組み込むための wxWidgets のポートを探しています。
私の検索では、組み込み Linux および WinCE 用の wxWidgets が見つかりました。
また、wxWidgets を新しい (別の) OS に移植するのは難しいですか?
ありがとう、
(プロジェクト ツールは、GreenhillsコンパイラとThreadXオペレーティング システムを使用する C++ であり、 ARM9プロセッサと控えめな量の RAM とフラッシュを備えています。)
optimization - ARM上のGCCとGreenhills
特にARMプラットフォームで生成されたコードのメモリフットプリントに関して、GCCとGreenhillsCコンパイラの比較に興味があります。
これらのコンパイラのベンチマークや比較はありますか?ここで共有したい経験はありますか?
embedded - GreenHills - 小さなデータ域のオーバーフロー
誰かがこれについて簡単に答えてくれることを願っていますが、本質的に最適化をオンにすると、次のエラーが発生します。
[elxr] (エラー) 小さなデータ領域のオーバーフロー: 場所 __sti___13_test_main_cpp_252229d3+0xc のファイル test_main.o でシンボル oe_init_intconn を参照するための再配置を実行中に、0xfff9f6fc (符号付き) が 16 ビットに収まりませんでした
このリンカー ディレクティブを挿入すると、同様のエラーが発生します。
-auto_sda
彼らのマニュアルでは、このリンカ エラーについて言及していません。Integrity 5.10 を使用しています
c - インライン関数を使用して定義されたリンカーエラーを乗算する
リンカは、インライン関数に対して複数定義されたエラーを報告しています。
ヘッダーファイルに次のコードがあります。
ヘッダーファイルを複数のソース(.c)ファイルにインクルードします。
上記の関数は、どこで呼び出されてもインラインで貼り付けてもらいたいです。
含まれている各ソースファイルに関数の複数の定義がない場合のこのための手法はありますか? はいの場合、例を挙げてください。
組み込みプラットフォームのパフォーマンスを最適化する必要があります。
コンパイラまたはリンカは、他の変換単位で定義されている場合に関数をインライン化するのに十分スマートですか?
組み込みARM9プラットフォームでGreenHillsコンパイラ4.2.4を使用しています。2000より前のC言語標準を想定します。これはC++ではなくCコードです。
gcc - gcc でコンパイルし、greenhills デバッガーでデバッグする
私はデバッグの初心者です。プロジェクトを gcc でコンパイルし、greenhills デバッガーでデバッグしようとしています。デバッグしようとすると、greenhills で「メモリが読み取れません」というエラーが表示されます。このエラーを修正する理由と方法を知っている人はいますか? どんな助けでも大歓迎です。
ありがとう。
c++ - IntegrityでのX.cpp/X.hppファイルの奇妙な動作
で完全にコンパイルされるプロジェクトがありますgcc
が、GreenhillsIntegrity環境ではコンパイルできません。
問題は次の3つのファイルに要約されます。
MyVector.hpp
ベクトルのtemplate-classがMyVector.cpp
含まれ、のテンプレートとは関係のないテスト関数が含まれていますMyVector.hpp
。
さて、でMyVector.hpp
のvector
テンプレートを使用しているとSomeFile.cpp
、どういうわけか、関数testVector
はに注入されSomeFile.cpp
ます。での使用をやめると(もちろん、まだ使用vector
していますが、テンプレートをインスタンス化していないだけです)、完全に機能します。SomeFile.cpp
#include
さらに、関数に警告を挿入すると、コンパイル時にtestVector
コンパイラーが警告を表示しました。SomeFile.cpp
SomeFile.cpp
さらに、で物事を変更すると、ビルドシステムが再コンパイルされMyVector.cpp
ます。
testVector
関数をから削除MyVector.cpp
して新しいものに移動すると、NewFile.cpp
コンパイルされます。
いいえ、誤ってファイルを含めなかっcpp
たので、正直に言って、ファイルを再確認し、grep
すべてのソースコードを編集しました。
何が起こっているのかわかりません。手がかりがあれば嬉しいです。
c - メモリセクションのすべての空き領域を占めるC配列を宣言するにはどうすればよいですか?
128KBのメモリ領域があると仮定します。リンカディレクティブでは、この領域を3つのセクションに分割しました。
- .section_text
- .section_data
- .section_bss
各セクションのサイズはコンパイル前には不明ですが、.section_textと.section_dataが割り当てられた後、メモリ領域内の残りのすべてのスペースを使用するように.section_bssを制限しました。
.region_bssで使用可能なすべてのスペースを使用するC配列を宣言する方法はありますか?リージョン全体を安全に使用できるように、.region_bssを使用しているのはそれだけであると想定します。たとえば、目的はあるが明らかに間違っている:
これがいくつかの予想される反応に対する私の事前回答です。まず、sizeof()がこのように機能しないことを私は知っています。私はそれを使ってアイデアを広めています。次に、これはポインターではなく配列を使用して実行する必要があると想定します(ポインターを使用した解決は可能であり、かなり単純です)。第三に、.region_bssの開始アドレスと終了アドレスを取得できることは知っていますが、それらを使用して配列のサイズを決定する方法はわかりません。少なくとも、Cで機能する方法はありません。
これを行う方法はないかもしれませんが、そこにいる天才がそれを理解してくれることを願っています。Green Hillsツールセットで動作させることができる場合は、追加のクレジット。
c++ - 主に C++ 向けの継続的なビルド インフラストラクチャの推奨事項。グリーンヒルズ インテグリティ
大規模な (1 ~ 2MLOC) ソフトウェア開発プロジェクト向けの継続的なビルド製品に関する推奨事項が必要です。特徴:
- ClearCase リビジョン管理
- 約 80% C++; 15% ジャワ; 5% スクリプトまたは低レベル
- Green Hills Integrity OS 用にコンパイルしますが、一部のウィンドウと JVM チャンクもコンパイルします
- ほとんどが組み込みシステムです。いくつかの UI 部分といくつかの開発サポート (シミュレーション ツール、構成ツールなど) も含まれています。
- 成果物の概念上の各「バージョン」には、多数のボード、UI マシンなどの展開イメージが含まれています (最大 10 の個別のイメージ、5 つの個別のオペレーティング システム)。
- 特に、さまざまな異なるボード サポート パッケージ用に構築された多数の同時バージョンを維持/追跡する必要がある
- ビルド サイクル タイムはプロジェクトの主要な問題であり、これに対処するのに役立つ機能のサポートが必要です (ほとんどの場合、ビルド マシンの大規模なファームを管理する必要があると思います..)
- セキュリティで保護された環境で動作します (これは政府のプログラムです) (追加するために編集: これは機密プログラムです。ビルド インフラストラクチャのアウトソーシングは開始できません。)
あなたが提供する可能性のあるベスト プラクティスまたは周辺のガイダンスに関心があります。ビルドの自動化の問題は、プログラムに欠けているように見えるいくつかの重複するベスト プラクティスの 1 つですが、ビルド インフラストラクチャの部分と直接関連する観察に焦点を当てた回答を維持するようにしてください。
コストは重要な問題ではありません。スケーラビリティと既存のインフラストラクチャへの改造の容易さが重要です。
(@Dan のコメントに対処するために編集されました。;-)
c - Greenhills コンパイラのインライン アセンブリでグローバル変数を使用するには?
インライン アセンブリでグローバル変数を使用したい。
asm(" LDR R0,g_TsInitStackPointerAddress");
ここで、g_TsInitStackPointerAddress はグローバル変数です。コンパイル中にエラーが表示されません。
しかし、リンク中に次のエラーが表示されます
[elxr] (エラー) 範囲外: 0x1001326 (符号なし) は、アドレス 0x10013e0 で InitStack+0x20 (drv.o(.text)+0x1a4) から g_TsInitStackPointerAddress への再配置タイプ R_ARM_POOL (4) を実行中に 12 ビットに収まりませんでした+0x0 ((コモン)+0xb6)
ここで、私の関数名は InitStack で、ファイル名は drv です。エラーを理解できません。
使用プロセッサ : Cortex R4
コンパイラ : Greenhills
linker - ARMDCDの動作とRAMからの実行
MBD9F126(ARM Cortex R4)マイクロコントローラーを使用しています。その中で私はコードをROMにフラッシュし、RAMのコピー後にRAMからコードを実行しています。Greenhillsコンパイラを使用しています。RAMコピーの前に、基本的なボード初期化コードを実行しています。
Start_PreInitはボード初期化関数です。BLXの後にこのように指定すると、RAMの場所に分岐します。RAMのコピーはまだ行われていないため、不明な領域に移動します。
これの代わりに私が書いているなら
コードのROMの場所に行くことは正しく動作しています。なぜコンパイラがそのような振る舞いをするのですか?
また、ADDRESS_START_PREINIT:DCDStart_PreInit。リンク中に行われますか?