ブログ トピックス


ニュース

    年末年始休業のお知らせ (2014/12/25)

    2014年12月27日(土)~2015年1月4日(日)の間は、年末年始休業とさせていただきます。
    • 電話・FAXによるお問い合わせはお休みいたします。
    • 電子メールによるお問い合わせ及び、オンラインショップからのご注文は、2015年1月5日以降から順次対応させていただきます。
    • 緊急の際はご案内いたしております担当の直通電話にてお受けいたします。
    何卒ご了承くださいますようお願い申し上げます。

    管理部

    BTE023B 800mm IRリフレクタ リリースのお知らせ (2014/12/12)

    「BTE023 800mm光センサ」の後継として「BTE023B 800mm IR リフレクタ」の販売を開始いたしました。
    旧来との差異として、外形互換なし・感度調整廃止・コネクタからケーブルに変更といった点がありますが、検出距離の特性はほぼ同等となっております。

    なお、本リリース以前に製品情報を掲示しておりましたため、その間にご予約頂いたお客様には本日出荷させていただいております。


    ショップページへ
    商品名:800mm IRリフレクタ
    商品番号:BTE023B
    価格:¥2,700. (税別)
    付属品:センサ本体

    詳細はこちらをご覧ください。

    TINY JTAG-ICE2入荷のお知らせ (2014/12/05)

    TINY JTAG-ICE2が1年ぶりに入荷致しました。
    一部パーツを代替した上で互換性を有しております。



    なお、この間にopenocdのバージョンアップが頻繁に行われている都合、最新版を使用しますと従来の設定では利用できないケースが必ず発生すると思われます。
    各デバイスに応じた設定等はドキュメントホームページを参照ください。

    管理部

ニュースのトップへ

ブログ

    OpenOCDとLPC82x (2015/04/01)

    最近のOpenOCDはCMSIS-DAPを活性化してあり、LPC-LINK2CMSIS-DAP化したものが使えるので、LPC82xもOpenOCDから触れるという事になる。
    既存のlpc8xx.cfgはワークエリアの指定が小さいので、そこだけ変えたlpc82x.cfgを使ってほしい。
    openocd -s ./tcl -f daemon.cfg -f interface/cmsis-dap.cfg -c "adapter_khz 1000" -f target/lpc82x.cfg
    GCC Developer Liteに同梱されるFlash Writerはデーモン化させたOpenOCDとお話しできるので、Flash Write用にスクリプトさえ用意すればこちらも1クリックで書き込みできたりする。
    init
    adapter_khz 1000
    reset init
    flash erase_sector 0 0 31
    flash write_image erase unlock ($PGENE) 0 bin
    dump_image ($PGENETMP) 0x0 ($PGENESIZE)
    #verify_image ($PGENE) 0 bin
    reset run
    exit
    GCC Developer Liteでサポートされるのはもうすぐかな?

    技術

    CoFlashとLPC824 (2015/03/10)

    NXP LPC824のフラッシュメモリへの書き込みを行う場合、LPCXPressoのデバッガを介してLPC-Link 2で書き込むか、標準で内蔵されているブートローダを使用してシリアルポートから書き込む(ISP)方法がある。
    前者は統合環境が必要、後者はUSARTの端子が決め打ちされいる、といった感じでどちらもお気楽感がない。

    分身を沢山あつらえたいとなると、ライセンスやら操作手順やらが野暮ったい事も多い。そこで白羽の矢が立ったのがCooCoxCoFlashである。

    CoIDEは色々なデバイスに対応しているのとフリーの統合環境という事も合って結構使われている方も多いがと思うが、CoFlashもフリーかつシンプルな書き込みツールで対応するICEも結構多い。

    今回はデフォルトではCoFlashがサポートしていないLPC824を、LPC-Link 2を使って書き込めるようにしてみた。その手法が開示されているのと、LPC11xxシリーズと互換性があるので、そのままソースを流用すれば結構さくっとイケる。

    詳しくは修正したソースをここに置いておくのでそれを見てもらえればと思うが、違いはセクタサイズやページサイズ程度である。ついでにページ書き込みのルーチンの中で書き込み後にコンペアを行った上で応答を返しているので、ツール上でベリファイを指定しなくても良い筈。
    同梱のファイルをCooFlashをインストールしたフォルダにt適宜コピーすればDeviceツリーのNXPにLPC822とLPC824が追加される。後はSWDからガシガシ書き込むだけである。

    なお、LPC-Link 2CMSIS-DAPのファームを書き込んだ物を使用する事。

    技術

    GCC Developer Liteの更新は? (2015/01/13)

    新しもの好きの作者の割には、パブリック向けの更新が滞っている様です。
    カスタムターゲット向けのパッケージはそこそこ更新されていますが、ツール類は特段変わった様子も無く枯れたままだったり。

    そんな中、作者より更新の案内がありました。
    ソースの編集は1ファイルに限定している事もあって有用性は無いと判断し、公には活性化されていないタグジャンプ機能を、今後のリリースでは使えるようにするらしく。

    既にターゲットによってはサポートファイル類が肥大化しており、それらを使用する場合はソースやヘッダファイルを参照せざるを得ない状況です。
    また、シングルソースであっても、長大であれば短期記憶をアテに自分のソースを移動するのは骨が折れますし、数日もすればおぼろげな記憶のレイアウトはアテにならなくなってくるでしょう。

    Eclipseをはじめ、最近のIDEの類はプロジェクト中のファイルを解析して、編集作業をしやすくする機能が当然の様に備わっています。
    GCC Developer Liteは単なるテキストエディタと称している割に、そこそこ中途半端に変な機能が備わってはいますが、広大なソースファイル類を手に取る様に見渡す事はできません。

    これらから、タグジャンプ機能の公開が迫られていたという背景がありました。

    今回の機能解放では、外部のコマンドを併用してソースファイル中の単語の関連性を簡易的に調べて、宣言されている場所を渡り歩く事ができる様になります。

    タグファイルが生成されてさえいれば、カーソル位置の単語をタグファイルから検索させ、その単語を含むソースファイルの該当位置へジャンプ(タグジャンプ)させる事ができますし、ジャンプした履歴を逆に辿る事もできます。

    背反事項として、設定によってはタグファイルのサイズがソースファイルのサイズとは関係なく大きくなる事がありますが、ハードディスクもSSD化が進み速度的に有利な環境が整いつつあるので、本ツールを活用されている方向けに活性化する事としました。

    ちなみに、ゼロからプログラムを書き進める時よりも既存のソースファイルを読み進めるための機能なため、とりあえずは大きめのサイズになりがちのFDIII-HCやUD3のサンプルプログラムを読むには良いでしょう。

    近々公開されるであろう更新版では、この機能が活性化していると思います。

    技術

    ROM API (2014/12/26)

    NXPのMCUにはROM APIなる機能が備わっている物がある。内蔵ROM上にいろいろなルーチンが予め書き込まれているので、そのルーチンを使えばFLASHメモリ上にそれらの機能を別途作り込む必要が無いという事の様だ。

    トラ技の付録だったLPC810の様に、FLASHの容量が少ないデバイスではこのROM APIの恩恵に与る事も多いはず。UART・I2C・SPI・ADCといったペリフェラルは、ROMに用意されたルーチンに任せる事でFLASHの容量を消費せずに利用できるという物。

    特にROM APIの中でありがたいのが割り算で、ソースに「/」や「%」を使ったとたんに数キロバイトしかないFLASHの大半をライブラリが占めてしまうのを解消してくれる。
    使い方はマニュアルに書いてあるが、何やら特定の環境を前提としている様でよく分からないので、今回はたぶん公知の情報でしょうがLPC82xを前提としてちょっとだけ簡単に使える方法を備忘録として書いておく。
    概ねAPIの名称はマニュアルの記述を踏襲しつつ、まずはAPIへの入り口を作る。APIの呼び出しにいちいち変数なんぞ作って初期化して使うのは野暮ったいので直接アドレッシングで。
    typedef struct { int quot; int rem; } idiv_return;
    typedef struct { unsigned quot; unsigned rem; } uidiv_return;

    typedef struct {
      int (*sidiv) (int numerator, int denominator);
      unsigned (*uidiv) (unsigned numerator, unsigned denominator);
      idiv_return (*sidivmod) (int numerator, int denominator);
      uidiv_return (*uidivmod) (unsigned numerator, unsigned denominator);
    } TLPC_ROM_DIV_STRUCT;

    typedef TLPC_ROM_DIV_STRUCT *pTLPC_ROM_DIV_STRUCT;

    typedef struct {
      const uint32_t p_dev1;
      const uint32_t p_dev2;
      const uint32_t p_dev3;
      const uint32_t p_dev4;
      pTLPC_ROM_DIV_STRUCT pROMDiv;
      const uint32_t p_dev6;
      const uint32_t p_dev7;
      const uint32_t p_dev8;
    } TROMAPIs;

    #define LPCAPI (*(TROMAPIs **)(0x1FFF1FF8UL))
    #define LPC_DIV_API ((LPCAPI)->pROMDiv)
    これらの宣言をしておけば後は使うだけ。
    割り算をしたければ、
    int ans, numerator, denominator;
    ans = LPC_DIV_API->sidiv (numerator, denominator);
    // ans = numerator / denominator;
    余りが欲しければ、
    int ans, numerator, denominator;
    ans = LPC_DIV_API->sidivmod (numerator, denominator).rem;
    // ans = numerator % denominator;
    それすらも野暮ったかったら、gccであれば
    int __aeabi_idiv (int numerator, int denominator) {
    return LPC_DIV_API->sidiv (numerator, denominator);
    }

    unsigned __aeabi_uidiv (unsigned numerator, unsigned denominator) {
    return LPC_DIV_API->uidiv (numerator, denominator);
    }

    idiv_return __aeabi_idivmod (int numerator, int denominator) {
    return LPC_DIV_API->sidivmod (numerator, denominator);
    }

    uidiv_return __aeabi_uidivmod (unsigned numerator, unsigned denominator) {
    return LPC_DIV_API->uidivmod (numerator, denominator);
    }
    としておけば、「/」やら「%」を使用するとリンクされる除算のライブラリ自体を置き換える素地となる。

    割り算に限らずペリフェラルを扱うAPIもこの様なマクロを介して呼び出せるので、お気楽感が増すでしょう。

ブログのトップへ