タグ付けされた質問 「gcc」

7
埋め込みコードの場合、「unsigned int」ではなく「uint_t」タイプを使用する必要があるのはなぜですか?
gccを使用して、STM32F105用のアプリケーションをcで作成しています。 (単純なプロジェクトで)過去には、私はいつものように、変数定義されているchar、int、unsigned int、などを。 私は、次のような、stdint.hで定義された型を使用するのが一般的であることがわかりint8_t、uint8_t、uint32_tそれは私が使用していることを複数のAPIのでは、ともSTからARM CMSISライブラリにtrueこの、など。 なぜそうするべきかを理解していると思います。コンパイラがメモリ空間をより最適化できるようにします。他にも理由があると思います。 ただし、cの整数プロモーションルールのため、2つの値を追加したり、ビットごとの演算を実行したりするたびに、変換警告に対して実行し続けますconversion to 'uint16_t' from 'int' may alter its value [-Wconversion]。この問題については、こことここで説明します。 intまたはとして宣言された変数を使用する場合は発生しませんunsigned int。 これを考えて、いくつかの例を挙げます。 uint16_t value16; uint8_t value8; これを変更する必要があります。 value16 <<= 8; value8 += 2; これに: value16 = (uint16_t)(value16 << 8); value8 = (uint8_t)(value8 + 2); いですが、必要に応じてできます。私の質問は次のとおりです。 変換する場合があり、符号なしに署名したとするバック符号なしの結果が不正確になりますか? stdint.h整数型を使用する/使用しない他の大きな理由はありますか? 私が受け取った答えに基づいて、cが変換uintしint、戻っても、stdint.hタイプが一般的に好まれているようです。これはより大きな質問につながります: 型キャスト(例value16 = (uint16_t)(value16 << 8);)を使用して、コンパイラの警告を防ぐことができます。問題を隠しているだけですか?それについてもっと良い方法はありますか?
22 c  embedded  gcc 

5
Code Sourcery G ++ Liteはまだ実行可能なプロジェクトですか?
ARM用Code Sourcery G ++ Liteの新しいバージョンをダウンロードしようとすると、別の会社にリダイレクトされていることに気づきました。そのサイトでARM用Sourcery G ++ Liteについて何かを見つけるのは非常に困難です。 Sourcery G ++ Lite for ARMプロジェクトのステータスを知っている人はいますか?それはまだ生きていますか、人々はまだそれで働いていますか?将来的に利用可能になりますか? 更新:彼らはプロジェクトの名前をSourcery CodeBench Liteに変更したようですので、質問は関係ないのでしょうか? 更新:Mentor Graphicsはプロジェクトを終了しますが、もはや実行可能な代替手段ではありません。 注:ARMのgccを入手する現在の実行可能な場所は、Linaroからであるようです。 https://www.linaro.org/about/ https://www.linaro.org/downloads/ https://launchpad.net/gcc-arm-embedded
18 arm  compiler  gcc 

2
STM32F2:商用IDEを使用しないMakefile、リンカースクリプト、起動ファイルの組み合わせ
私はSTM32F2で働いている(具体的には、開発ボード上のSTM32F217IGH6)約2ヶ月間。はるかに私の最大の問題はメイクファイル、リンカスクリプトと起動ファイルを含む「セットアップ」、としなければなりませんでした。 特に、割り込みベクターテーブルを適切に設定できず、割り込みハンドラーを呼び出すことができませんでした。STは、商用IDEに合わせた例を提供しています。代わりに、私は(JTAG経由で画像をロードし、OpenOCD)GCCツールチェーンの自由YAGARTOの再コンパイルを使用しています。 呼び出される割り込みハンドラ用に設定されている非商用のIDEに適したメイクファイル、リンカスクリプトと起動ファイルの組み合わせを含むが例の私のボードのためのプロジェクト(またはそれの近いいとこ)がありますか?
16 c  stm32  gcc 

4
STM32のエンディアンの問題
arm gcc(CooCox)を使用してSTM32F4discoveryをプログラムしていますが、エンディアンの問題と格闘しています。 SPIを介して24ビットADCでサンプリングしています。3バイトが入ってくるので、MSBを最初に、それらを共用体にロードして、少しでも使いやすくすることを考えました(とにかく希望!)。 typedef union { int32_t spilong; uint8_t spibytes [4]; uint16_t spihalfwords [2];} spidata; spidata analogin0; spi読み取りを使用してデータをanalogin0.spibytes [0]-[2]にロードし、[0]をMSBにしてから、USARTを介して8ビットずつメガボーで吐き出します。問題はありません。 問題は、データを12ビットDACに渡そうとしたときに始まりました。このSPI DACは、MSBで始まる4ビットのプレフィックスとそれに続く12ビットのデータで構成される16ビットワードを必要とします。 最初の試みは、ADCから与えられた2の補数を変換して、analogin0.spihalfwords [0]を0x8000とxor-ingし、結果を下位12ビットにシフトし、算術的にプレフィックスを追加することでした。 analogin0.spibytes [0] = 0xFFおよびanalogin0.spibytes [1] = 0xB5の場合、analogin0.halfwords [0]は0xFFB5ではなく0xB5FFに等しかったことに気付くまで、非常にイライラします。 これに気づいた後、算術演算とハーフワードの使用を停止し、ビット単位のロジックとバイトに固執しました uint16_t temp=0; . . . // work on top 16 bits temp= (uint16_t)(analogin0.spibytes[0])<<8|(uint16_t)(analogin0.spibytes[1]); temp=temp^0x8000; // convert twos complement …
11 c  stm32  cortex-m  gcc 

3
Eclipse + GNU ARM + STM32-HALまたはSPL
ARM開発(2年間のAVRの後)から始めて、stm32f4マイクロプロセッサが搭載されたSTM DISCOVERYボードを入手しました。 Keilのコード制限が気に入らず、有料版を入手するお金がないため、Eclipse + ARM gccを使用することにしました。 チュートリアルに従って、gcc ARMツール+ openocd + make utilsなどとともにeclipseをインストールしました。 私の質問は「パッケージ」プラグインについてです。すべての初心者と同様に、新しいSTM HALと古いSPLのどちらを使用するかについて混乱しています。 私の理解では、HALは、Arduinoと同等のアームと呼ばれるレベルまで抽象化を実装しました。一方、SPLは、コーディングを高速化するのに十分な抽象化を提供しますが、チップレベルで処理する必要があります。 これを理解した上で、HALを使用するよりもSPLを使用して物事をよりよく理解したいと思います。 知りたいのは、STMのパッケージを使用すると、暗黙的にHALを使用する必要があるのですか?もしそうなら、私のセットアップでSPLを使用する方法について誰かが私に指摘できますか?
10 arm  stm32  gcc  cortex  hal-library 

4
GCCコンパイラが一部のコードを省略しているのはなぜですか?
GCCコンパイラが近隣のまったく同じコードを保持しながら、なぜコードの一部を切り取るのか理解できません。 Cコード: #define setb_SYNCO do{(PORTA|= (1<<0));} while(0); ISR(INT0_vect){ unsigned char i; i = 10; while(i>0)i--; // first pause - omitted setb_SYNCO; setb_GATE; i=30; clrb_SYNCO; while(i>0)i--; // second pause - preserved clrb_GATE; } LSSの対応する部分(コンパイラーによって作成されたアセンブラーファイル): ISR(INT0_vect){ a4: 1f 92 push r1 a6: 0f 92 push r0 a8: 0f b6 in r0, 0x3f …
9 avr  c  avr-gcc  optimization  gcc 

2
組み込みプログラミングをKeilからLinuxに移行する
現在、STM32ディスカバリーボード用の開発にKeilを使用しています。私のプロジェクトはほぼ完成しているので、Linuxベースのビルド環境に移行したいと思います。私は事前に構成されたフラッシュツールとWindows用のSTLinkドライバーを使用してボードをフラッシュし、qeilを使用してLinuxファイルでフラッシュするように管理したbinファイルをエクスポートしました。ここまでは順調ですね。 今、私はプロジェクト全体を構築するプロセスを動かすことにこだわっています。具体的には: 「startup_stm32l1xx_md.s」スタートアップファイルなどを考慮しながら、.uvprojをメイクファイルに移植するにはどうすればよいですか?
9 stm32  linux  gcc  keil 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.