2009年08月11日

ARM: PICROS/ATROS for LPC2388 デモ

PICROS_for_LPC2388_demo

*LPC2388用

PICROS/ATROSをIF誌2009年5月号の付録基板のLPC2388 (ARM)に移植して簡単な
デモ動作をさせてみました。

 

posted by Copyright (C) avrin All Rights Reserved. at 23:14| Comment(0) | TrackBack(0) | PICROS | このブログの読者になる | 更新情報をチェックする

2009年06月16日

AVR: ATROS/(PICROS)を試す(3):ソフトA/D変換タスクを実装してみる

次はソフトA/D変換タスクを実装してみる。

「ソフトA/D変換」て変だけどコンパレータ使って6ビット精度くらいで
使うヤツのことです。アップノートにあるやつ。

A/D変換はtiny26系/45系列にはあってtiny2313にはないなどホントに変な
製品構成だと思いますよ。ATMELさん。
しょうがないんだけど。

アップノートの
「AVR400: Low Cost A/D Converter」。

80バイトくらいでできるらしい。

ほんの少しアップノート読んでみたけど充電用コンデンサのちょうどいいのを
持ってないのでダメっぽい(オイ
posted by Copyright (C) avrin All Rights Reserved. at 22:35| Comment(0) | TrackBack(0) | PICROS | このブログの読者になる | 更新情報をチェックする

2009年06月15日

AVR: ATROS/(PICROS)を試す(2):ソフトUARTを実装してみる

AVR: ATROS/(PICROS)を試す(2):ソフトUARTを実装してみる

ATROSのデモはいい感じで動きました。

次はATROSにtiny26/261/45 などUARTがないAVR用に「ソフトUART」を
組み込んでみます。

ソフトUARTはHEROさんのところの「AVRAPPNT.ZIP」のreadme.txtをみると
日本語化されていないけど英語版でサンプルソースがあることがわかる。
ソフトUARTサンプルは2種類あって

タイマを使うAVR304と使わないAVR305がある。

ATROSでタイマ0を使っているので、タイマを使わないAVR305の送信部分だけ
移植した。受信はちょっと難しそう。またそのうち。
送信だけでもデバッグには非常に有効だし内部データが確認できるのは
非常によい。

AVR305のソフトUARTは水晶発振子前提の書き方だけど
tiny2313の内蔵RCの8MHzで57600bpsまで送信できた。
57600bpsだと1バイト送るのに25usecしかかからないので
例えば10msec毎に起動するタスクで1バイトづつPCに転送すれば
十分使える。

10バイト20バイト単位でも0.5msecくらいで終わる感じなので余裕で
大丈夫な気がする。
と、思ったが実際やってみると約15文字の連続転送で2msec強かかっていた。

アプリケーションノートのAVR305のアセンブラはavrasm2.exe用なので
avr-as用に変更が必要だった。少し前にavrasm2.exeの勉強をしたことが
役にたった。実際にはC言語から呼び出す「アセンブラ関数」にした。
これは ELM chanさんのページが非常に参考になった。
http://elm-chan.org/docs/avrlib/asm_gcc.html

実際には意味不明のアセンブラエラーが出て結構つまずいた。
そのエラーが解決してからchanさんのページを良く読むと、
「; アセンブラスタイルコメント(cディレクティブの行には不可?)
」とあって同じような問題に遭遇したと思われる。

例えば以下の書き方をすると「エラーになるときとならない時」があるのだ、

#define FOOBAR 5     ;ここからコメント

「;」以降がコメントだけどセミコロンのコメントは使わない方が良いです。
自分の場合は以下のようにしてようやくアセンブル通りました。

#define FOOBAR 5     //;ここからコメント

コメントはCまたはC++のコメントを使うのがよいのです。

ついでに115.2kbps通信もやってみたけど内蔵RC発振8MHzでも問題なく通信できた。

やるなぁ〜 ソフトUART

ソフトUARTの代償として1バイトの通信期間中は全ての割り込みの禁止が
必要なこと。連続送信すると時間が直列にかかること。
例えば9600bpsだと1バイト送るのに1msecかかる。タスクの中で
10バイト以上連続送信すると10msec以上かかりタスクの時間管理が
破綻するし。割り込みの禁止期間も長くなる。

正直なところ全tinyシリーズでハードウエアUARTを付けといてほしかったぞATMEL君。

といいつつ、ソフトUARTで115.2kbpsまでOKなのでOKです。

tiny2313なのでtiny26でもOKか試そう。

ところで今気づいたがHEROさんところのATMELアップノート「avrsio.zip」
にシリアル通信関係はほとんと全部あるようだ。

それを見るとソフトUARTのサンプルは3〜4種類?くらいあるようだ。
それぞれ特徴があってどれがいいかはアレだけど今回は
タイマや割り込み資源を消費しないAVR305を採用したのだった。


 

posted by Copyright (C) avrin All Rights Reserved. at 21:13| Comment(0) | TrackBack(0) | PICROS | このブログの読者になる | 更新情報をチェックする

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 | このブログの読者になる | 更新情報をチェックする