2009年06月09日

AVR: ATROS/(PICROS) を試す(1)

AVR: リアルタイムOS ATROS/(PICROS) を試す

AVR用リアルタイムOSでATROS(PICROSからの移植) というのを発見したので
ちょっと動かしてみよう。

PICROS(PIC用簡易リアルタイムOS)
http://www.picfun.com/picrosframe.html

「PICROS」の概要と使い方
http://www.picfun.com/ros00.html

試すといってもLED点滅くらいか(爆

きっかけは以下の方のページ、

★20080815 ATROS ATtyny2313で動かしてみる
http://akiba.geocities.jp/atmel_avr_atros/20080815.html

へ〜っ 「ATtyny2313」でも動くんだ、
じゃぁ、自分の場合はtiny45とtiny26で動かしたいわけです。

もとはmega系に移植されたので「mega、tinyシリーズ」で動くRTOSてことになる。

AVRの共通アーキテクチャから考えるとほとんどのAVRで少しの変更で動いてしまう
可能性が高い。

さらにPICより高速処理が可能なAVRのほうが向いているんじゅあないかなぁ。


元になったPICROSは技術評論社のPIC本にも載るなどした割りには
Web検索で利用者情報がほとんど出てこないのは残念だった。

PICといえば1kバイト、2kバイトのFlashを
アセンブラでチマチマ(オイ 書くのが「通(つう)」なんかなぁ。

あとどこかにあったけどライセンスが明記されていないので
個人で使うのはよいけど改変したものの再配布には作者の許可がいるというのが
ネックなのかも。

ATROSの場合はさらにPICROSを翻案したものになるが公表にあたってはPICROS作者の方に
了解を得たとある。

@:
そうすると、ATROSを改変して公表、配布する場合はたぶん
「オリジナルのPICROSの作者の方とAVR用に翻案したATROSの作者の方、
両者の許可を得る必要がある」のである。たぶん。
A:
さて、例えば自分がATROSに改良を加えて上記「2名の方の許可」を得て
「ATROS for tiny45」として再配布したとする。

これを誰かが改良、再配布するためには上記3名の。。。以下延々とつづいて
100人目の人はその前99人に許可を得る必要がある。

これはライセンスが明記されていないので一応当たり前の構図なわけで。
まぁ、そうゆうことだと思います。


さて、RTOSといってもノンプリエンプティブな点もあるが、
自分的には十分かなぁ。

ただ、OS部分で1kバイトくらい取るのでFlashは2kバイトくらいはほしいと。


と、ブツブツいいつつコンパイルしてみるのだった。

Size after:
AVR Memory Usage
----------------
Device: attiny2313

Program:    1332 bytes (65.0% Full)
(.text + .data + .bootloader)

Data:         79 bytes (61.7% Full)
(.data + .bss + .noinit)

-------- end --------
2313atrossio.lzhをコンパイルしたのが上 コンパイラは以下の物だ。 gcc version 4.3.2 (WinAVR 20081205) コンパイラのバージョン違いでコードサイズが300バイトも増えてしまった。 が、がぁ〜〜〜!! これは まぁ想定内。 いつもの最適化方法で容量削減を試みる。 コンパイラのバージョンをWinAVR-20071221にするなどはうざったくてやってられない。 最新のコンパイラでいかに容量削減するかにかかっている。 。。。 。。。
Size after:
AVR Memory Usage
----------------
Device: attiny2313

Program:     856 bytes (41.8% Full)
(.text + .data + .bootloader)

Data:         79 bytes (61.7% Full)
(.data + .bss + .noinit)

-------- end --------
コンパイラは上と同じ物だ。 gcc version 4.3.2 (WinAVR 20081205) な、なんと、476バイトも減ったぞっ〜!! 1332 bytes が 856 bytes になった、わけな、わけです。 関数の先頭に「static」を付けまくっただけです。 結果として未使用関数は削除され、一度しか呼ばれない関数はインライン展開されて 容量が減るのだった。 static付けてインライン展開させる手法は同一ファイル内で1回だけ呼ばれる関数に効果が 大きく、逆に2回以上呼ばれる関数は「2回以上インライン展開」されてコードが大きく なる可能性があるので、はき出されたリストファイルを一応確認するのがよい。 この原理からすると1k、2kくらいのC言語ソースは分割コンパイルせず #includeで1本にまとめるのがサイズ縮小に効果的と思われる。 実はこの手法がうまく効くようにもともとのソースコードの構成が良く考えられていた のです。はい。PICROSからそうなっていると思われる。 ただし、これをやってしまうとデバッグがやりづらいのでアレな面もあるのだった。 このように最新のコンパイラでもFlash容量を削減可能なのです。 ちなみに WinAVR-20081205 WinAVR-20090313 は同一コードになるのを以前確認したので最新のコンパイラ、な、わけです。 *リアルタイムOSで「LEDチカチカしつつ」パソコンにデータ表示 ★20080815 ATROS ATtyny2313で動かしてみる http://akiba.geocities.jp/atmel_avr_atros/20080815.html このあやのすけさんが作ってくれたATROSのデモソフトが非常に簡単で分かり易くて グッドなのです。 LEDチカチカしつつパソコンにUARTでデータ表示するリアルタイム処理デモなわけです。 tiny2313を持っているなら是非一度おためし下さい。 リアルタイムOSブーム到来 間違いなしだと思います。 *リアルタイムOSでLEDチカチカ tiny45やtiny26などのtinyシリーズはハードウエアUARTがないのだった。 tiny2313だけ例外的のようだ。 なので上のデモソフトからUARTでPCにデータを送る部分をカットして 「LEDチカチカ」だけをさせるようにすると。
Size after:
AVR Memory Usage
----------------
Device: attiny2313

Program:     496 bytes (24.2% Full)
(.text + .data + .bootloader)

Data:         14 bytes (10.9% Full)
(.data + .bss + .noinit)

-------- end --------
と、 約500バイトで動作可能なのだ。 これが素(す)のATROSのオーバヘッドに近い感じ。 これならFlashを十分使える感じ。 *ATROSのメリット* これをうまく語るのは難しい(^^; けど たとえば、 0.5秒おきにON/OFFを繰り返すLEDチカチカソフトは普通こうなる #define bitRevs(bitno,port) port = ((port)^_BV(bitno))&_BV(bitno) void main(void) { DDRB=0xFF; ポートBを出力に設定 while(1){ bitRevs(PB0,PORTB); ビット0の状態をを反転 Delay_ms(500);    0.5秒待つ } } pic 27978c 11.19ms 10mhz 1996words avr 39145c 3.91ms 10mhz 1328words http://www.necel.com/ja/faq/f_tech.html


posted by Copyright (C) avrin All Rights Reserved. at 22:22| Comment(4) | TrackBack(0) | PICROS | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
こんにちは。
ATROSを試してもらってありがとうございます!
アプリケーション例が出てくると面白いんですけどね。
自分も試したレベルでおしまいですし(^^;
Posted by あやのすけ at 2009年06月13日 23:53
こんにちわ audinです。
ATROSおもしろいです。

導入時点でつまづかないようにシンプルで分かり易いデモになっているところに感心しました。

時間管理などは結局同じようなことを自分でつくったりするのでATROSに任せて統一性をもたせるのも手だと思いました。
Posted by audin at 2009年06月14日 11:36
すみません;
連続投稿になってしまいました。
出来れば、削除をお願いいたします。
(確認するボタンを押して、上側の書き込むボタンを押しても書き込まれたように見えますけど、じつは書き込まれていない?)
Posted by あやのすけ at 2009年06月15日 20:54
audinです。

このブログ・システムはイマイチな感じです。
「書き込む」を押しても反映されていないように
見えて自分でも連投してしまうことがよくあるんです。

こちらで気づいたら適当に削除しますので気にせずコメントしてください。(^^;
Posted by audin at 2009年06月15日 21:07
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。