トップ 差分 一覧 ソース 検索 ヘルプ ログイン

AVR-Lib C

AVR-LibC

WinAVRのライブラリ(関数など)です。

  •  WinAVR 20050214添付のAVR-LibCは バージョン1.2.3です。
  •  WinAVR 20060125添付のAVR-LibCは バージョン1.4.3です。
  •  WinAVR 20100110添付のAVR-LibCは バージョン1.6.7です。

 AVR-LibC 1.4.x の日本語訳(らしきもの)

 avr-libc-1.4.x 情報 2006-04-21

  • ホームページ/ソース&マニュアル/バイナリ
  • オンラインドキュメント (English)
  • avr-libc-1.2.5/avr-libc-1.2.6に対してかなり整理されました
  • avr-libc-1.2.3/1.2.5/1.2.6から上書き更新可能ですがソースの変更が必要になる場合があります
  • avr-libc-1.4.1 が公開されました 2005-12-30
    • avr-libc-1.4.0からの変更点
      • util/delay.h の bug-fix
      • avr/iocanxx.h の IVSEL fix
      • avr/sleep.hの bug-fix
      • いくつかのSample demo Projectの追加
  • avr-libc-1.4.2 が公開されました 2006-01-7
    • demo projectの修正
    • ATtiny264/461/861のサポート
  • avr-libc-1.4.3 が公開されました 2006-01-23
  • avr-libc-1.4.4 が公開されました 2006-04-21
    • 1.4.3からの変更点はサポートCPUの追加とBug fixです
割り込み関連が変更になってます
  • <avr/signal.h>のINTERRUPT()マクロはdeprecatedになりました
    • <compat/deprecated.h>に定義されてます
    • もともとこれは多重割り込み用なので使用している例は少ないでしょう
  • <avr/signal.h>はobsoleteになりました
    • 今後は<avr/signal.h>はincludeする必要はありません
    • ファイルは存在してますが中身はありません
    • 必要なものは<avr/interrupt.h>に移動されています
    • 今後は割り込みは<avr/interrupt.h>をincludeするだけです
  • <avr/interrupt.h>にISR()マクロが追加されています
    • 今後割り込みハンドラはISR()を使用することになります
    • SIGNAL()マクロは将来deprecatedになる予定
    • SIGNAL()はそのままISR()に置き換え可能です
  • IOヘッダの割り込み定義にSIG_XXXと別にXXX_vectという定義が追加になっています
    • SIG_XXXの定義がMCU間で互換性がなかったので統一されました
      • 互換性のため古い定義もそのまま残されています
    • XXX_vectはAVRStudioのxmlファイルの定義から名称を拝借してます
      • そのxmlファイルも一部互換性のない定義があります
    • 今まで SIGNAL(SIG_INTERRUPT0) と記述していたものは ISR(INT0_vect) となります
      • ISR(SIG_INTERRUPT0)でも同じです
  • SIGNAL()はobsoleteなので今のうちから以下の様にしてISR()を使用すると良いかも
#if !defined(ISR)
  #ifdef __cplusplus
  #define ISR(vector)                 
    extern "C" void vector(void);  
    void vector (void) __attribute__ ((signal));  
    void vector (void)
  #else
    #define ISR(vector)              
    void vector (void) __attribute__ ((signal));  
    void vector (void)
  #endif
#endif
その他の変更点
  • <assert.h>が追加されました
  • <avr/version.h>が追加されました
    • avr-libcのバージョンをソフトから判断できるようになりました
    • defineで定義されているだけですが
    • <avr/io.h>の最後でインクルードされています
  • <stdio.h>に vscanf() と vprintf() が追加になりました
  • <stdio.h>のfdevopen()が拡張されました
    • 複数のstreamに対応
    • 以前の形式のfdevopen()を使用するときは<stdio.h>をincludeする前に__STDIO_FDEVOPEN_COMPAT_12を定義してください
#define __STDIO_FDEVOPEN_COMPAT_12
#include <stdio.h>
  • <string.h>に ffs() 関連関数が追加になりました
    • ffs(),ffsl(),ffsll(),_FFS()
    • ffs()関数はワードの中で最初にセットされているビット位置を返す
  • <stdint.h>と<inttypes.h>が C99準拠に変更されました
    • 知らない方も多いと思いますがC99の<stdbool.h>も以前からあります
      • WinAVR/lib/gcc/3.4.x/includeの中にあります
      • 検索PATHが効いているので #include <stdbool.h> で使えます
      • bool/true/falseが定義されています
  • <compat/deprecated.h>が追加されました
    • <avr/signal.h>関連がこちらに移動されてます
    • avr-libc-1.2.3でdeprecatedになったIO操作関連関数が追加されてます
      • inp/outp/sbi/cbi
  • includeディレクトリに "util/" サブディレクトリが追加されました
    • <avr/crc16.h>⇒<util/crc16.h>
    • <avr/delay.h>⇒<util/delay.h>
    • <avr/parity.h>⇒<util/parity.h>
    • <compat/twi.h>⇒<util/twi.h>
    • 互換性のため元のディレクトリにもファイルが存在してます
      • そのファイル中で新しいファイルにリンクされてます
  • avr-libcの構築方法が変更になりました
    • reconf/doconf/domakeから一般的な bootstrap/configure/makeとなりました
バグフィックス
  • かなりの数のヘッダファイル&ライブラリが修正されています
  • <avr/eeprom.h>関連
  • <avr/boot.h>関連
  • <avr/sleep.h>関連
  • <avr/delay.h>関連
  • <avr/ioXXX.h>関連 (レジスタ名の定義ミス)
  • <string.h>関連
サポートMCU
at90s1200 at90s2313 at90s2323 at90s2333 at90s2343 at90s4433 
at90s4414 at90s4434 at90s8515 at90s8535 at90c8534 at86rf401
attiny10 attiny11 attiny12 attiny15 attiny13 attiny22
attiny26 attiny28 attiny2313 attiny25 attiny45 attiny85
at43usb320 at43usb355 at76c711 at90pwm2 at90pwm3 
atmega603 atmega103 atmega8515 atmega8535 
atmega8 atmega48 atmega88 atmega16 atmega161 atmega162
atmega163 atmega164 atmega165 atmega168 atmega169
atmega32 atmega323 atmega324 atmega325 atmega3250 atmega329 atmega3290
atmega64 atmega640 atmega644 atmega645 atmega6450 atmega649 atmega6490
atmega128 atmega1280 atmega1281
atmega406 at90can32 at90can64 at90can128 at94k
スクラッチからavr-libcを構築する場合の注意
  • avr-libcのtarボールやcvs版をとってきてコンパイルしても上記の全てのMCUが使用可能とはなりません
  • コンパイルで使用するbinutils/gccがサポートしているMCU用のライブラリのみが作成されます
  • 最新のcvs版binutils/gccでも全てのMCUはサポートしていません
    • binutils-2.16.1/gcc-3.4.x/gcc-4.0.2/gcc-4.1でも追加パッチが必要
    • 対応パッチをしたbinutils/gccを作成してからavr-libcを作成します
    • binutils/gccにはその他にavr関連のbug-fix.のパッチも必要です
      • gccはsnapshots版を使用するとPATCH済みのものが入手できます(サポートMCUのPATCHは別途必要)
      • mingw版(Windows)を作成するには更にMinGW用PATCHが必要
    • avr-binutils/gcc/libc サポートMCU追加PATCH
      • savannahのOpen/ClosedはAnyを指定して表示してください

 avr-libc-1.2.6 2005-11-12

  • avr-libc-1.2.5のbugfix-onlyバージョンです
  • avr-libc-1.2.3からの変更点も少ないのでそのまま上書き更新可能です
  • ホームページ/ソース&マニュアル/バイナリ
    • オリジナルでATtiny45等いくつかサポートしてませんでしたので追加しました

 AVR-LibC 1.2.3 の日本語訳(らしきもの)

WinAVR 20050214版に添付のAVR-Libc 1.2.3

  • オリジナルはこちら(既に1.4.3になっています):http://www.nongnu.org/avr-libc/user-manual/index.html
  • 7/02:delay-loop関連の誤り訂正その他
  • 3/24:SLEEP関連とdelay関連を修正しています。
  • 3/29:SLEEP修正。TINY26/TINY2313の問題点について
  • 3/28:avr-gcc MLのWebPageが変更になっていたので修正
  • 3/29:using_avrprog.html 簡単なオプションの説明、-Uの説明、avrdude-guiの紹介、makeでavrdudeを起動する方法などを追加

変な訳も多いと思いますが、チェックお願いします。
原文が残っているところ、「??」がついているところは訳に自信がないところ、訳者がよく意味を理解できないところです。

 補足、誤訳訂正など

#define F_CPU 1000000UL  // 1 MHz

って感じでシステムクロックを定義してディレイルーチンその他で使えることになっていますが、現行(20050214)のwinavrだとF_CPUはmakefile内で定義して-Dオプション経由で渡しているようです。ソース内で定義せず、makefileのF_CPU定義を書き換えるとよいようです。
avr-gccのE.Weddingtonさんによると、これはソースファイル内ではなくmakefileかavrgccのコマンドラインで指定すべきものだと言うことのようです。

設定関数の使い方の説明を補足しました。

TINY26/TINY2313がうまくサポートされないようです。補足しました。

  • MLにその話題がなさそうなので、avrgcc MLに(ひどい英語で(^^;))書いてみました。documentに解説がない理由もわかるかもしれません。
    • その avrgcc ML というのが探しても見当たりません。どちらでしょうか。
    • [http://lists.nongnu.org/mailman/listinfo/avr-gcc-list]だな。まさに上のAVR-LibC和訳のトップページにある。
    • AVR-LibC documentのURLから引っ越しているみたいね。これも修正っと
    • とりあえず、こちらに誘導されましたので登録しました。