トップ 新規 編集 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

AVR-LibC


AVR-LibC 1.4.3 & 1.6.5 の日本語訳(らしきもの)

上記は進行中です。FAQとmodulesは終了しました。それ以外は原文と1.2.3の和訳を参照

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

  • ホームページ/ソース&マニュアル/バイナリ
  • NEWS(120) avr-libc-1.4.4 2006-04-21
  • ChangeLog(132) avr-libc-1.4.4 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()マクロは廃止になりました
    • <compat/deprecated.h>に定義されてます
    • もともとこれは多重割り込み用なので使用している例は少ないでしょう
  • <avr/signal.h>は廃止になりました
    • 今後は<avr/signal.h>はincludeする必要はありません
    • ファイルは存在してますが中身はありません
    • 必要なものは<avr/interrupt.h>に移動されています
    • 今後は割り込みは<avr/interrupt.h>をincludeするだけです
  • <avr/interrupt.h>にISR()マクロが追加されています
    • 今後割り込みハンドラはISR()を使用することになります
    • SIGNAL()マクロは将来廃止になる予定
    • 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()は廃止なので今のうちから以下の様にして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>の最後でインクルードされています
    • 参考: 現在のバージョン version.h(137)
  • <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で廃止になった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.のパッチも必要です
    • avr-gcc bugs & PATCH
      • gccはsnapshots版を使用するとPATCH済みのものが入手できます(サポートMCUのPATCHは別途必要)
      • patch-binary-constants 2進表記パッチ
      • 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.3 の日本語訳(らしきもの)

WinAVR 20050214版に添付のAVR-Libc 1.2.3

  • 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を起動する方法などを追加

変な訳も多いと思いますが、チェックお願いします。おかしいところがあればここの雑談52chの電気・電子板-AVRスレまで。

原文が残っているところ、「??」がついているところは訳に自信がないところ、訳者がよく意味を理解できないところです。

 補足、誤訳訂正など

group__avr__delay.html

#define F_CPU 1000000UL  // 1 MHz

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

group__avr__sleep.html

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

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

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