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

1
コンパイラがLSRを直接使用しないのはなぜですか
こんにちは、タイミングが非常に重要なArduino Uno(ATmega328p)を使用するプロジェクトに取り組んでいるため、コンパイラーがコードを変換する命令を確認したいと思いました。そしてそこに私はuint8_t使用する各反復で右に1ビットシフトするものを持っています、そしてdata >>= 1コンパイラーはこれを5つの命令に翻訳したようです(にdataありますr24): mov r18, r24 ldi r19, 0x00 asr r19 ror r18 mov r24, r18 しかし、命令セットのドキュメントを見ると、これを正確に実行する命令が見つかります。 lsr r24 私は何かを見落としたり、コンパイラがこれも使用しないのはなぜですか?レジスタr18とr19は他では使用されません。 私はArdunioを使用していますが、正しければ通常のavr-gccコンパイラを使用します。これは、シーケンスを生成するコード(トリミング)です。 ISR(PCINT0_vect) { uint8_t data = 0; for (uint8_t i = 8; i > 0; --i) { // asm volatile ("lsr %0": "+w" (data)); data >>= 1; if (PINB …
10 arduino  avr-gcc 

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 

1
AVR Atmega328pの静的ライブラリを作成するにはどうすればよいですか?
CのArduinoによく似たライブラリを作成しようとしています。 私は過去に試しましたが、コードを失いましたが、すべてのオブジェクトファイルを含む(avr-objdumpによってチェックされた)ヘッダーファイルとライブラリで指定された関数への未定義の参照を大量に取得したことを覚えています。 ライブラリ(サンプルmakefile)をコンパイルする方法と、プログラムをライブラリにコンパイルする方法を知りたい。また、すべてのAVRおよびクロック速度用にライブラリを再コンパイルする必要がありますか、それとも回避策がありますか? さらに情報が必要な場合は、質問してください。 ありがとう 編集:例(機能しない) program.c #include "test.h" int main(void) { test_function(); } test.c #include "test.h" void test_function() { int i; i++; } test.h #ifndef __TEST_H_ #define __TEST_H_ void test_function(void); #endif
8 avr  c  library  avr-gcc 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.