LPCは@suikan_blackfinさんによってポーティングされました。氏は様々な鋭い洞察力で過去にも沢山の偉業を成し遂げている方です。ここに過去の沢山の偉業を挙げることは出来ませんが、素晴らしいポーティングに感謝すると共に、厚くお礼を申し上げます。ありがとうございます。氏のウェブサイトはhttp://d.hatena.ne.jp/suikan+embedded/にあります。LPCXpressoはNXPセミコンダクターズジャパンさんが積極的に国内市場への展開を行って下さっています。このような安価で優れたツールを手に入れることのできるのは、嬉しい限りです。NXPセミコンダクターズジャパンさんが運営されている日本語サイト(LPCZone)はhttp://www.nxp-lpc.com/cgi-bin/linkv.htmlにあります。いずれのサイトも沢山の面白い情報が盛り沢山ですので是非ご覧下さい。LPCはTOPPERS/ASPをNXPセミコンダクターズのLPCシリーズ上で動作するようにしたもので@suikan_blackfinさんがメインテナンスされています。http://sourceforge.jp/projects/toppersasp4lpc/公開当初から完成度が高く、私も簡単に動作させて楽しむことができました。TOPPERS/ASPはプロジェクトの性質上、商用のツールを使う前提でソースコードや周辺ファイルが公開されている事が多いのですが、これが障壁となって沢山の人が挫折するような状況でした。LPCを楽しんで頂くためにLPCXpressoさえあれば楽しめるようにしようと考えました。LPCXpressoを使えばLPCXpresso上で簡単に動作させることができるようになります。LPC1768(あるいはLPC1769)さえあれば良いのです。従来のように高価なデバッガやRTOSを購入する必要はありません。=ホストOS環境はLPCXpressoが対応しているLinux環境に今回は限定しました。TOPPERS/ASPのビルドシステムにはシェルとperlに依存する箇所があります。Windowsでも様々な外部ツールを使って、依存する環境に近い状況を作り出す事が可能ですが、今回は作業負担を軽減させるために割愛しました。Player上で簡単にLinux環境が構築できますし、WindowsとLinuxの両環境で対応できるように沢山の時間をかけるよりも、早く提供したいという思いが先行した結果でもあります。参考までに動作を確認した環境を記します。=@suikan_blackfinさんがお作りになったオリジナルから行った変更について記します。デバッグをIDE上でできるようにすること。TOPPERS/ASPのオリジナルとの差分を小さくすること。LPCXpressoのみで実現可能なこと。ソースコードとビルド用ファイルについては以下の変更を行っています。あったlpc1768_sram.ldとlpc1768_rom.ldを削除しました。LPCXpressoが生成したDebugとReleaseのリンカスクリプトを使用しました。ENTRY(ResetISR)をENTRY(_start)に変更しました。STARTUP(start.o)を追加しました。__bss_endを追加しました。__data_startを追加しました。init_hook関数をPROVIDEで追加しました。.isr_vectorを.vectorに名称を変更しました。kernel/target/lpc1768_generic_gcc/Makefile.targetに以下を追加しました。Makefileで生成されるオブジェクトの名称を変更しました。Makefileで生成されるオブジェクトの拡張子を変更しました。LPCXpressoのプロジェクトに対しては以下の変更を行っています。main_taskに変更しました。Trueに変更しました。automaticallyのチェックを外しました。これによりLPCXpressoは外部Makefileを参照するようになります。directoryからDebugとReleaseを削除しました。これによりプロジェクトのルートディレクトリを参照する形になりMakefileとの整合性が確保されます。=Linux上のLPCXpressoで使用できます。project(s)」で使用します。Browseボタンを押してダウンロードしたzipファイルを選択します。Nextボタンを押すとzipファイル内にあるプロジェクトが表示されます。Finishボタンを押すとワークスペースにプロジェクトがインポートされます。インポートができたらLPCXpresso上でビルドして下さい。場合によって、コンフィギュレータのビルドが必要かもしれません。展開したディレクトリのトップにconfigureがありますので、それを実行して下さい。'TOPPERS-ASP_LPCXpresso-LPC1768'でデバッグできます。Debugを選択してOKボタンを押してください。以下のようにmain_taskで実行が停止すると思います。ここまで来れば色んな事がIDE上で楽しめるようになっています。RunメニューからResumeを選択してみて下さい。LPCXpresso上のLEDがチカチカ点滅すると思います。次にRunメニューからSuspendを選択して下さい。実行が停止し、停止した箇所のソースコードが表示されます。Disassemblyパネルを見ればC言語のソースとアセンブラの両方を確認しながらデバッグできます。RTOS関連では欠かせないCPUレジスタも以下のように簡単に確認することができます。LPC1768のzipファイルをダウンロードするだけで、TOPPERS/ASPのアプリケーション開発を体験することができます。Suspendなど便利な機能が使用できる点も見逃せません。IDEはコードサイズ128KBの制限があります。手軽にRTOSを楽しむことのできる環境を構築できることを考えると、なかなか優れた投資効果が得られると言えるのではないでしょうか。=このファイルを使ったことによる如何なる結果も当方では責任を負えませんので、この点を御了承頂いた上で御利用下さい。ファイルのダウンロード:こちらをクリック(今後バージョン管理システムへの移行を考えています。=今回の対応は既存のTOPPERS/ASPのビルドの枠組みを超えない形で行ないました。本来であれば、LPCXpresso上のプリビルドやポストビルドを駆使してカーネルに対するコンフィギュレーションなどを行うのが筋ですが、先に述べたとおり早めの公開を目指して割愛したものです。何かシンプルな方法でコンフィギュレータまでを包括的に処理させることができる方法を思いついた場合、是非ご一報頂ければと思います。=今回の対応作業で参考にさせて頂いた書籍を紹介します。邑中雅樹さんの「TOPPERSで学ぶuITRONのブート・シーケンス」は必携です。邑中雅樹さんの「TOPPERS/JSPのよりどころとなっているuITRON4.0仕様」にある本文とコラムを楽しく拝見しました。高田広章さん(というか先生!)の「TOPPERSプロジェクトの概要と展開」にある本文とコラムを楽しく拝見しました。邑中雅樹さんの「XScaleへのデバイス・ドライバの移植とカーネル移植の完了」にある本文とコラムを楽しく拝見しました。DSPへの移植」にある本文とコラムを楽しく拝見しました。システム開発ガイドレジスタに関する詳細説明を日本語で楽しむことができます。各所で話題の格安Cortex-M3開発用ボードLPCXpressoシリーズですが、著名なブロガーの方々がデバッガ(LPC-LINK)とターゲットをザクザク切り離しているものですから、皆さんも切り離したくなる衝動を抑えられないのではないでしょうか?私も同じように切り離しては「あれがない」、「これがない」と騒いでいました。http://shinta-main-jp.blogspot.com/2010/12/lpcxpresso-lpc1768.htmlhttp://shinta-main-jp.blogspot.com/2010/12/lpcxpresso-lpc1768jtagkey2popenocd.html先日の記事でもUARTを手軽に使いたかったのですが、やはり切り離しただけの基板では「UARTがない!」病になり、ちょっと異なるアプローチが良いのではないだろうか?との考えに至りました。デバッガは自分が使いたいものを使いたい。(でも、たまにLPC-LINK使うかも。UARTをわざわざ接続しなくてもあるじゃん。(LPC-LINKの経路使えばさ・・・。1つの基板だったものが2つの基板になっちゃってポータビリティ落ちてない?(あ、切り離す人はLPC-LINKは捨てるのか?)など、切り離したくないシチュエーションも考えられるわけです.上記のような優柔不断な感じは開発環境を選択する過程では十分に起こり得る話です。今回ご紹介するアプローチはこういった選択に迷っている段階で役立つものです。LPCXpressoのデバッガとターゲットの間にある半田をハンダゴテと半田吸い取り線を使って取り除きます。取り除いたら念の為テスタで絶縁状態になっていることを確認して下さい。次に2x8のピンヘッダを取り付けます。LPC-LINKとターゲットを接続するには以下のようにジャンパを接続するだけで済みます。接続しているジャンパを取り外せばLPC-LINKとターゲットを分離することができます。ターゲットに自分の好きなデバッガを接続したり、LPC-LINKから別のターゲットに接続することも可能です。切断することを考えた場合、この2.54mmの間隔を綺麗に切断するのは意外に手間がかかります。切断することを考えて設計したのではなく、上記のようにピンヘッダを取り付けるための設計と考えるとなんとなく合点がいきそうだとも思いました。真相は是非聴いてみたいところですね。BlackTankには有機EL液晶が搭載される予定です。接続部分はFPCになっていて、例によってFPC用コネクタなのですが、最初の実装は思いっきり失敗してしまいました。半田を載せ過ぎてしまったのと、不要な半田を除去しようにも除去しきれなくてフラックスを付けながらグシグシとハンダゴテをあててどうにもならない状況になってしまいました。ピンが曲がってしまったようにも見えていましたし、パターンにダメージがあると思うと、取り外さざるを得ない様相です。仕方なく、最初に実装したコネクタは破壊することを前提に取り除くことにしました。作業対象箇所にフラックスを塗って作業します。フラックスを塗布することでハンダゴテ接触部位の急激な加熱を防いでくれます。パターンは加熱させた状態で無理な力をかけるとすぐに剥がれてしまいます。今回は幸いにもフラックスを塗りたくっているお陰・・・かどうかわかりませんが大丈夫でした。フラックスリムーバーを使って綺麗にします。当初付いていたコネクタには半田を盛りまくって取り外しました。初めに付いていたコネクタと同じ型の物を付けようかとも思いましたが、ネガティブな感情になっていて挑戦することができませんでした。形状の異なるものを付けました。フラックスを使うからといって、実装時に半田を山盛りにしても大丈夫というわけではありません。今回はそんなことを痛感した体験でした。ハンダ付けはこういった痛い思いをして上手になっていくものなのでしょう。BlackTank2011年2月18日金曜日LPC1769搭載オーディオ基板のハンダ付けを始めましたLPC1769搭載オーディオ基板のハンダ付けを始めました。方針は、プロセッサ周辺回路を搭載して基本動作を確認し、徐々にペリフェラルを実装するという方向で行こうと思っています。一気に実装してしまいたい気持ちもあるのですが、今回は搭載する部品もそれぞれ結構な単価ですので、慎重モードです。フラックスも当然ながら必須アイテム。LPC17692011年2月14日月曜日PCBCARTから4層基板が到着しました。先日PCBCARTに発注した4層基板が到着しました。気になる品質などについてレポートを。FedExの包装の中にこんな感じでくるまれていました。中身のパッキングは以下のような感じです。オーダー情報などが記載されたレッテルが貼られています。見た限り良さそうな感じではあります・・・。・・・見つけてしまいました中国品質。品質の均一さ加減をお伝えしようとスキャナで撮った映像を見た時に思わず笑ってしまいました。皆さんも間違い探ししてみませんか?こちらは部品面。わかりましたか?答えは・・・。デートコードを間違ったのでしょう。(笑)そして、極めつけはこれ。本当にこういうの好き。(笑)現場の人の人間臭さが出ています。あー、本当に4層なのかも気になってきました。ショートチェックと導通チェックもやらなくちゃ・・・。一応サポートには軽いクレームを入れる予定。中国と言うバイタリティに溢れた国を俄然気に入ってしまいました。PCBCART2011年2月13日日曜日eLuaをLPC1768で手軽に試してみる。mbedとLPCXpressoでお手軽eLuaライフ。eLuaとはLuaプログラミング言語のフル実装版を組み込みの世界に持ち込むというもの。Luaを略してeLuaと呼ばれています。従来、スクリプト言語をマイコンに移植する場合、機能を削減した仕様で実装されることが多いのですが、eLuaは「フル実装」が一つの特徴になっています。これによって例えば、パソコン上である程度の機能を実装した後で、ターゲットデバイス上で最終的なデバッグをするなど、様々な開発スタイルをとることもできます。今回はeLuaをソースコードからコンパイルして実行させてみることにしました。10.10を使用しました。ソースコードをSubversionリポジトリから取り出します。svn://svn.berlios.de/elua/trunkビルドにはmakeではなく、sconsを使います。sconsを試みましたが、私の環境ではパッケージのインストールができませんでした。そこでhttps://launchpad.net/ubuntu/maverick/+source/scons/2.0.0-1からscons_2.0.0.orig.tar.gzをダウンロードしてインストールします。installsconsはツールチェインを自動的に見つけてコンパイルしてくれるので楽ちんです。)ちなみにcpu=lpc1768とした場合、ターゲットボードはmbedが選択されるようになっています。cpu=lpc1768上記でビルドが完了すると思います。elfができますので、binに変換します。elua_lua_lpc1768.binこれで準備完了。LPC1768にコピーして試してみます。ターミナルにはminicomを使用しました。eLua側の通信速度設定はデフォルトで115200になっています。minicomもこれに合わせます。mbedのリセットボタンを押して以下のような表示が出てくれば動作しています。試しにlsと打ってみてください。byteseLua#/romと/semiというディレクトリが見えます。/semiはmbedのローカルファイルシステムです。LIFE.LUAはライフゲームのスクリプトです。試しに実行してみます。/semi/LIFE.LUAテキストベースのライフゲームが実行されます。このライフゲームは2000世代までになると終了するようになっています。LPC1768上で実行してみます。LPC1768上には外付けのフラッシュストレージは存在しません。先程の/semiに該当する部分です。そこでプラットフォーム設定からこれを除外します。BUILD_SEMIFSをコメントアウトします。BUILD_SEMIFS実行したいファイルはtrunk/romfsに予めコピーしておきます。再度コンパイルを実行して書き込みます。出来上がったバイナリはLPCXpressoの128KB制限を超えてしまいます。OpenOCDで書き込みます。KiB/s)それでは確認してみましょう。思いましたが・・・LPCXpressoのデバッガとターゲットを切り離してJTAGKey2Pを接続したのでシリアルが使えません。LPCXpressoのデバッガとターゲット間が切り離し辛いにも関わらず2.54mmピッチの間隔しかあいていません。いって、安易に切り離してしまうと、シリアル経由で何かやりたい時に不便です。これを考えると、半田ジャンパを取り除いた後で2列ピンヘッダを立てると良いかもしれません。書き込み時はジャンパを取り除いて他のツールでできるし、デバッグはジャンパを付けてシリアル経由でできます。それでもジャンパを付けたり取ったりするのは面倒ですね。シリアルインターフェースを付けますかね。LPC17682011年2月9日水曜日ソースコードから「asm」という文字を探す(だけの)スクリプトRTOS関係でゴニョゴニョしているとアセンブラで記述された箇所のみを抜き出したくなることがあります。今日はショートブレイクということで、ソースコードから「asm」という文字を探す(だけの)スクリプトを作ってみました。fidoneこれを使うと例えば以下のような出力が得られます。=_bss\n"findを使ってCソースとヘッダを探してgrepするだけのシェルスクリプトですが、意外に便利です。(Atom)自己紹介shinta基板が大好きな組み込み系エンジニア。電気図面を描いてPCB上に美しく配線できた時に何とも言えない快感を覚える。ソフトウェアとドライバが一式になったパッケージをダウンロードします。インストール後に本体を接続してソフトウェアを起動すると以下のような画面が表示されます。勢いよく「改良しました!」と宣言したh8writeですが、やっぱり書き込みに失敗するという事がわかりました。そもそも真の原因を掴めないまま改良したと言っても、何を改良したのか意味がわかりません。自分でもそんな突っ込みを入れたくなるのですが、その日はグ...システムにおけるレイテンシーとスループットの話題レイテンシーとは、あるシステムに何らかの入力を与え、それに対応する何らかの出力が出てくるまでの時間(遅延量)を指します。ある処理の実行を指令してから実際の結果が得られるまでに250ミリ秒かかったとすると、それは250ミリ秒のレイテンシーを持つシステムという事になります。放置を防ぐアイデアの1つとして「具体的な目標に繋げる」というものを挙げました。アップデートしました。このアップデートにより、以下の動画で示すような長い曲でも難なく再生させる事ができるようになりました。mkIIは便利なのですがオンフィールドで書き換えるには不便ですし、ユーザに書き変えを頼むわけにもいきません。Atmelが公開しているアプリケーションノートAVR109に自己プログラミングがありましたので試してみました。LPC824を使ったサウンドモジュールMicroSoundModuleを開発していました。このサウンドモジュールは、コマンドを受け取って色々な再生を行うもので、当初はこのコマンド処理部分の実装にNT-Shellを用いる計画でした。BlackTankには有機EL液晶が搭載される予定です。接続部分はFPCになっていて、例によってFPC用コネクタなのですが、最初の実装は思いっきり失敗してしまいました。猫も杓子もIoTと皆さんが仰るので、その声が大きくなればなるほど自分は遠ざかる方向で生きていたのですが、そうすると完全に煙に巻かれたお爺さんのようになりまして、今は世の中が進んでおるんじゃのぉと言うだけの人です。moduleにブートローダを載せる(AVR109対応)随分前に対応しようと思い立っていたAVR109にようやく対応させた。以前やった時にうまく書けなかったのはボードのクロック精度が原因。ここ数日モニタを実装していて、思った以上にRC内蔵クロックの精度が悪いことが分かった。エコーバックのテストでやたらと文字が化ける。痛い思いをしたFPC用コネクタのハンダ付けLPC1769搭載オーディオ基板のハンダ付けを始めましたPCBCARTから4層基板が到着しました。eLuaをLPC1768で手軽に試してみる。mbedとLPCXpressoでお手軽eLuaライフ。