(57)【特許請求の範囲】
【請求項１】
集積回路型無線通信デバイスを構成する方法であって、
前記デバイスは、プロセッサと、メモリと、無線通信ロジックと、を備え、
前記メモリには、所定の無線プロトコルに従って前記無線通信ロジックを制御するための命令を含むソフトウェアファームウェアモジュールがファームウェアメモリアドレスに格納され、
前記プロセッサは、各々にスーパーバイザ呼び出し番号が関係付けられたスーパーバイザ呼び出し命令を受信し、（ｉ）前記ソフトウェアファームウェアモジュールのスーパーバイザ呼び出し処理部を起動して、（ｉｉ）前記呼び出し処理部が前記スーパーバイザ呼び出し番号を利用できるようにすることによって、スーパーバイザ呼び出し命令に応答するように構成され、
前記方法は、所定のアプリケーションメモリアドレスに格納されるようにソフトウェアアプリケーションを前記デバイスの前記メモリ内に読み込むことを含み、
前記ソフトウェアアプリケーションは、起動すべき無線通信機能に対応する所定のスーパーバイザ呼び出し番号が関係付けられたスーパーバイザ呼び出し命令を前記プロセッサに発行することによって、前記ソフトウェアファームウェアモジュールから前記無線通信機能を起動するように設定される
ことを特徴とする、集積回路型無線通信デバイスを構成する方法。
【請求項２】
プロセッサと、メモリと、無線通信ロジックと、を備えた集積回路型無線通信デバイスを構成する方法であって、前記方法は、
ソフトウェアアプリケーションを、所定のアプリケーションのメモリアドレスに格納されるように、前記デバイスの前記メモリに読み込むことと、
所定の無線プロトコルに従って前記無線通信ロジックを制御するための命令を含むソフトウェアファームウェアモジュールを、所定のファームウェアメモリアドレスに格納されるように、前記デバイスの前記メモリに読み込むことと、を含み、
前記プロセッサは、各々にスーパーバイザ呼び出し番号が関係付けられたスーパーバイザ呼び出し命令を受信し、（ｉ）前記ソフトウェアファームウェアモジュールのスーパーバイザ呼び出し処理部を起動して、（ｉｉ）前記呼び出し処理部が前記スーパーバイザ呼び出し番号を利用できるようにすることによって、スーパーバイザ呼び出し命令に応答するように構成され、
前記ソフトウェアアプリケーションは、起動すべき無線通信機能に対応する所定のスーパーバイザ呼び出し番号が関係付けられたスーパーバイザ呼び出し命令を前記プロセッサに発行することによって、前記ソフトウェアファームウェアモジュールから前記無線通信機能を起動するように設定される
ことを特徴とする、集積回路型無線通信デバイスを構成する方法。
【請求項３】
前記ソフトウェアファームウェアモジュールは、リンクされた二進数モジュールである
ことを特徴とする、請求項１または２に記載の方法。
【請求項４】
前記ソフトウェアファームウェアモジュールは、前記ソフトウェアファームウェアモジュールによって提供されるすべての無線通信機能が、番号と機能との間の所定の対応関係に従って、それぞれのスーパーバイザ呼び出し番号を有するスーパーバイザ呼び出し命令によって起動されるように設定される
ことを特徴とする、請求項１乃至請求項３のいずれかに記載の方法。
【請求項５】
前記方法は、さらに、
前記ソフトウェアアプリケーションをコンパイルすることと、
前記コンパイルするときに、スーパーバイザ呼び出し番号と無線通信機能との対応関係を用いることと、を含む
ことを特徴とする、請求項１乃至請求項４のいずれかに記載の方法。
【請求項６】
前記方法は、さらに、
前記ソフトウェアアプリケーションをコンパイルしたり読み込んだりするときに、前記所定のソフトウェアアプリケーションメモリアドレスを利用することを含む
ことを特徴とする、請求項１乃至請求項５のいずれかに記載の方法。
【請求項７】
前記ソフトウェアアプリケーションは、専用のＳＶＣプロセッサ命令を実行することによって、スーパーバイザ呼び出し命令を発行するように設定される
ことを特徴とする、請求項１乃至請求項６のいずれかに記載の方法。
【請求項８】
前記ソフトウェアファームウェアモジュールと前記ソフトウェアアプリケーションは、各々が割り込みベクタテーブルをそれぞれ有し、前記デバイスは、割り込みを処理するときに前記ソフトウェアファームウェアモジュールの前記ベクタテーブルを使用するように構成され、前記ソフトウェアファームウェアモジュールは、自分が処理するようにプログラムされていない割り込みはすべて前記ソフトウェアアプリケーションに渡すように設定される
ことを特徴とする、請求項１乃至請求項７のいずれかに記載の方法。
【請求項９】
前記ソフトウェアファームウェアモジュールと前記ソフトウェアアプリケーションの前記割り込みベクタテーブルは、互いに同じ割り込みベクタアドレス相対位置を使用する
ことを特徴とする、請求項８に記載の方法。
【請求項１０】
前記デバイスは、メモリアクセス命令を横取りするように配置され、前記ソフトウェアアプリケーションが前記ソフトウェアファームウェアモジュールを読み取るか、または、上書きすることを防止するように構成されるメモリ保護ロジックを備える
ことを特徴とする、請求項１乃至請求項９のいずれかに記載の方法。
【請求項１１】
集積回路型無線通信デバイスであって、
前記デバイスは、プロセッサと、メモリと、無線通信ロジックと、を備え、
前記メモリには、所定の無線プロトコルに従って前記無線通信ロジックを制御するための命令を含むソフトウェアファームウェアモジュールがファームウェアメモリアドレスに格納され、
前記プロセッサは、各々にスーパーバイザ呼び出し番号が関係付けられたスーパーバイザ呼び出し命令を受信し、（ｉ）前記ソフトウェアファームウェアモジュールのスーパーバイザ呼び出し処理部を起動して、（ｉｉ）前記呼び出し処理部が前記スーパーバイザ呼び出し番号を利用できるようにすることによって、スーパーバイザ呼び出し命令に応答するように構成され、
前記メモリには、前記ソフトウェアファームウェアモジュールから無線通信機能を、起動すべき前記無線通信機能に対応する所定のスーパーバイザ呼び出し番号が関係付けられたスーパーバイザ呼び出し命令を前記プロセッサに発行することによって、前記ソフトウェアファームウェアモジュールから前記無線通信機能を起動するように設定されるソフトウェアアプリケーションが、所定のアプリケーションメモリアドレスに格納される
ことを特徴とする、集積回路型無線通信デバイス。
【請求項１２】
前記ソフトウェアファームウェアモジュールは、前記ソフトウェアファームウェアモジュールによって提供されるすべての無線通信機能が、番号と機能との間の所定の対応関係に従って、それぞれのスーパーバイザ呼び出し番号を有するスーパーバイザ呼び出し命令によって起動されるように設定される
ことを特徴とする、請求項１１に記載のデバイス。
【請求項１３】
前記ソフトウェアファームウェアモジュールは、前記ソフトウェアファームウェアモジュールによって提供されるすべての機能が、前記スーパーバイザ呼び出し命令を発行することによって起動されるように設定される
ことを特徴とする、請求項１１または１２に記載のデバイス。
【請求項１４】
前記デバイスで前記ソフトウェアアプリケーションを実行するときに実行時リンクが不必要であるように構成される
ことを特徴とする、請求項１１乃至請求項１３のいずれかに記載のデバイス。
【請求項１５】
前記ソフトウェアアプリケーションは、専用のＳＶＣプロセッサ命令を実行することによって、スーパーバイザ呼び出し命令を発行するように設定される
ことを特徴とする、請求項１１乃至請求項１４のいずれかに記載のデバイス。
【請求項１６】
前記プロセッサおよび／または前記ソフトウェアアプリケーションは、一つ以上の引数の値を前記スーパーバイザ呼び出し処理部が利用できるように構成される
ことを特徴とする、請求項１１乃至請求項１５のいずれかに記載のデバイス。
【請求項１７】
前記プロセッサは、前記ソフトウェアアプリケーションからのスーパーバイザ呼び出し命令を例外として処理するように構成され、前記プロセッサは、複数の割り込み優先度をサポートし、前記ソフトウェアファームウェアモジュールの一部の機能は、比較的高い優先度が割り当てられ、前記ソフトウェアファームウェアモジュールのその他の機能は、比較的低い優先度が割り当てられる
ことを特徴とする、請求項１１乃至請求項１６のいずれかに記載のデバイス。
【請求項１８】
前記ソフトウェアアプリケーションは、一部のイベント駆動型機能に対しては比較的高い優先度を与え、その他のイベント駆動型機能に対しては比較的低い優先度を与えて、割り込みを処理するように設定される
ことを特徴とする、請求項１７に記載のデバイス。
【請求項１９】
前記ソフトウェアアプリケーションの高い優先度および低い優先度は、前記ファームウェアモジュールの高い優先度および低い優先度と交互配置される
ことを特徴とする、請求項１８に記載のデバイス。
【請求項２０】
ファームウェアの最も高い優先度レベルは、ソフトウェアアプリケーションの最も高い優先度レベルよりも高い
ことを特徴とする、請求項１８または請求項１９に記載のデバイス。
【請求項２１】
前記ソフトウェアファームウェアモジュールは、割り込みを受け取ると前記ソフトウェアアプリケーションの機能を起動するように設定される
ことを特徴とする、請求項１１乃至請求項２０のいずれかに記載のデバイス。
【請求項２２】
前記ソフトウェアファームウェアモジュールと前記ソフトウェアアプリケーションは、各々が割り込みベクタテーブルをそれぞれ有し、前記デバイスは、割り込みを処理するときに前記ソフトウェアファームウェアモジュールの前記ベクタテーブルを使用するように構成され、前記ソフトウェアファームウェアモジュールは、自分が処理するようにプログラムされていない割り込みはすべて前記ソフトウェアアプリケーションに渡すように設定される
ことを特徴とする、請求項１１乃至請求項２１のいずれかに記載のデバイス。
【請求項２３】
前記ソフトウェアファームウェアモジュールと前記ソフトウェアアプリケーションの前記割り込みベクタテーブルは、互いに同じ割り込みベクタアドレス相対位置を使用する
ことを特徴とする、請求項２２に記載のデバイス。
【請求項２４】
前記ソフトウェアファームウェアモジュールは、前記ソフトウェアファームウェアモジュールへの呼び出しを介し、リソースを前記ソフトウェアアプリケーションに返すために、前記ソフトウェアファームウェアモジュールがプロトコルスタックをリセットしメモリ保護機能をすべて無効にするようにして、実質的に無効になることができ、無効になると、前記ソフトウェアファームウェアモジュールは、すべての割り込みを前記ソフトウェアアプリケーションに転送する
ことを特徴とする、請求項１１乃至請求項２３のいずれかに記載のデバイス。
【請求項２５】
前記プロセッサは、ある割り込み優先度レベルから別のレベルへの継ぎ目ない推移をサポートする
ことを特徴とする、請求項１１乃至請求項２４のいずれかに記載のデバイス。
【請求項２６】
前記デバイスは、メモリアクセス命令を横取りするように配置され、前記ソフトウェアアプリケーションが前記ソフトウェアファームウェアモジュールを読み取るか上書きすることを、および／または、前記ソフトウェアファームウェアと関係付けられたＲＡＭを読み取るか書き込むことを防止するように構成されるメモリ保護ロジックを備える
ことを特徴とする、請求項１１乃至請求項２５のいずれかに記載のデバイス。
【請求項２７】
前記メモリは、ランダムアクセス読み取りをサポートする不揮発性メモリであり、前記デバイスは、前記ソフトウェアファームウェアモジュールと前記ソフトウェアアプリケーションを前記不揮発性メモリから直接実行することができるように構成される
ことを特徴とする、請求項１１乃至請求項２６のいずれかに記載のデバイス。
【請求項２８】
前記ソフトウェアファームウェアモジュールは、リンクされた二進数モジュールであって、前記ソフトウェアアプリケーションにはリンクされていない、
ことを特徴とする、請求項１１乃至請求項２７のいずれかに記載のデバイス。
【請求項２９】
プロセッサと、メモリと、無線通信ロジックと、を備える集積回路型無線通信デバイス上のファームウェアメモリアドレスに読み込まれるソフトウェアファームウェアモジュールであって、前記ソフトウェアファームウェアモジュールは、リンクされた二進数モジュールであり、
所定の無線プロトコルに従って前記無線通信ロジックを制御するための命令と、
ソフトウェアアプリケーションによって発行されるスーパーバイザ呼び出し命令に対し、前記スーパーバイザ呼び出し命令と関係付けられたスーパーバイザ呼び出し番号に対応する無線通信機能を実行することによって、応答するように設定されたスーパーバイザ呼び出し処理部と、を含む
ことを特徴とするソフトウェアファームウェアモジュール。
【請求項３０】
リンクされた二進数モジュールである
ことを特徴とする、請求項２９に記載のソフトウェアファームウェアモジュール。
【請求項３１】
プロセッサと、メモリと、無線通信ロジックと、を備える集積回路型無線通信デバイス上の所定のソフトウェアアプリケーションメモリアドレスに読み込まれるソフトウェアアプリケーションであって、前記ソフトウェアアプリケーションは、起動すべき無線通信機能に対応する所定のスーパーバイザ呼び出し番号が関係付けられたスーパーバイザ呼び出し命令を前記プロセッサに発行することによって、前記無線通信機能を起動する複数の命令を含む
ことを特徴とするソフトウェアアプリケーション。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、集積回路型無線通信デバイスおよびそのようなデバイスを構成する方法に関するものである。
【発明の概要】
【０００２】
集積回路型無線通信デバイスは、典型的には、シリコンチップ上でプロセッサ、メモリおよび無線通信ロジックを集積したものである。アンテナは、シリコン上に製造してもよいし、外部接続してもよい。該デバイスは、電源と、クロック源と、センサ、タイマー、デジタル・アナログ変換器および出力デバイスなどの外部周辺機器と、に接続するためのピンを有することになる。該プロセッサは、無線メッセージの送受信を監視するために、無線通信ロジックと相互接続している。
【０００３】
このような無線通信デバイス、またはチップは、ワイヤレスのマウスおよびキーボード、ゲーム機用コントローラ、自転車の速度計、リモートコントロール、ガレージドア開閉器、無線スピーカなど、広範囲の無線製品で使用することができる。
【０００４】
そのようなデバイス上のプロセッサは、ブルートゥースやジグビーなどの所定の無線プロトコルに従って無線通信ロジックを制御するために、不揮発性メモリからソフトウェアを直接実行することもある。
【０００５】
そのような無線通信チップを内蔵する、ワイヤレスマウスなどの完成品の製造には、通常、該チップを製品の残りの部分と集積する製品メーカーに供給する、無線チップメーカーが必要である。チップメーカーは、クロスコンパイラ、ローダ、デバッガなどのツール、およびドキュメントを含み、製品メーカーが無線デバイス用の専用アプリケーションソフトウェアを開発し、導入し、デバッグすることを可能にする、開発キットも提供することがある。専用アプリケーションソフトウェアは、例えば、所望のプロトコルに従って、ワイヤレスマウスのモーションセンサからの入力を受信し、適切な無線メッセージを送信するためのルーチンを含むことがある。 
【０００６】
開発キットは、さらに、チップメーカーによって書かれたソフトウェアライブラリ、および／またはオペレーティングシステムのソースコードも含むことがある。そうすれば、製品メーカーは、付属のソースコードを自社の専用ソフトウェアアプリケーションとコンパイル・リンクして、各チップのメモリ内の所定アドレスに読み込まれる単一オブジェクトファイルを作成することができる。
【０００７】
ライブラリまたはオペレーティングシステムは、特定の無線プロトコルを実施する命令を含むことができる。メモリ管理、プロセッサスケジューリング、プロセス間通信などの他の機能を含めてもよい。アプリケーション開発者は、付属するこれらの関数を、ゼロから開発することなく、自身のアプリケーションコードから呼び出すことができる。このようにすれば、アプリケーションソフトウェアの開発をより簡単でより迅速に行なうことができる。また、異なる無線チップモデル間での移植性を容易にすることもできる。
【０００８】
しかし、出願人は、このような従来のアプローチには改善の余地があることを理解するに至った。
【０００９】
一態様の観点では、本発明は、集積回路型無線通信デバイスを構成する方法を提供するものであって、
前記デバイスは、プロセッサと、メモリと、無線通信ロジックと、を備え、
前記メモリには、所定の無線プロトコルに従って前記無線通信ロジックを制御するための命令を含むファームウェアモジュールがファームウェアメモリアドレスに格納され、
前記プロセッサは、各々にスーパーバイザ呼び出し番号が関係付けられたスーパーバイザ呼び出し命令を受信し、（ｉ）前記ファームウェアモジュールのスーパーバイザ呼び出し処理機能を起動して、（ｉｉ）前記呼び出し処理機能が前記スーパーバイザ呼び出し番号を利用できるようにすることによって、スーパーバイザ呼び出し命令に応答するように構成され、
前記方法は、所定のアプリケーションメモリアドレスに格納されるようにソフトウェアアプリケーションを前記デバイスの前記メモリ内に読み込むことを含み、
前記ソフトウェアアプリケーションは、前記ファームウェアモジュールから無線通信機能を、起動すべき前記機能に対応する所定のスーパーバイザ呼び出し番号が関係付けられたスーパーバイザ呼び出し命令を発行することによって、起動するように設定される。
【００１０】
このようにすれば、本発明によって、無線制御機能を提供するファームウェアモジュールとスーパーバイザ呼び出し命令を介して相互接続するように、ソフトウェアアプリケーションを無線通信チップに読み込ませることができることを、当業者は理解できるであろう。
【００１１】
これにより、ソフトウェアアプリケーション開発者は、アプリケーションプログラムをチップメーカーによって供給されるライブラリやオペレーティングシステムとリンクする必要がなくなり、その結果、より単純でより効率的な開発プロセスとなる。リンク時における依存関係の必要性を無くすることによって、ソフトウェアアプリケーションの開発中に発生するバグの可能性を低減することができる。一連の開発段階で無線制御機能を提供するファームウェアモジュールをリンクし直し続ける必要がないため、構成オブジェクトのメモリ内の位置は、開発プロセス期間中変わらない可能性がある。メモリ位置のこの連続性のおかげでバグが発生するのを回避することができ、エラーが発生した場合、デバッグの助けともなる。
【００１２】
好ましい実施形態では、ファームウェアメモリアドレスに格納されたファームウェアモジュールは、リンクされた二進数である。したがって、ファームウェアモジュールとソフトウェアアプリケーションとのリンクは必要とせず、そもそも不可能である。ファームウェアモジュールは、マシンプログラムから直接アセンブルすることも可能であるが、通常は、（Ｃプログラミング言語からコンパイルされるなど）コンパイルされた二進数モジュールであると想定される。
【００１３】
ソフトウェアアプリケーションを開発するために、アプリケーション開発者が知っておくべき唯一の標準外（すなわち、プロセッサまたはデバイスアーキテクチャによって決まらない）情報は、所定のソフトウェアアプリケーションメモリアドレスと、ソフトウェアアプリケーションが使用するために利用可能な任意の（例えば、ＲＡＭ内の）データメモリの量に関する情報と、スーパーバイザ呼び出し番号とファームウェアモジュール内の無線通信機能との間の所定の対応関係と、である。デバイスのソフトウェアアプリケーションを記述し、コンパイルし、読み込むためには、この情報で十分であると言える。アプリケーション開発者には、便利なように、この情報を含む（例として、Ｃプログラミング言語では）ヘッダファイルを提供することができると想定される。（そのようなヘッダファイルには、もちろん、任意選択として、アプリケーション開発者にとってさらに助けとなる他の追加機能が含まれていてもよい。）
【００１４】
本発明の方法に従ってデバイスを構成する別の利点は、デバイスメーカーがアプリケーション開発者に自身のファームウェアモジュールの機密ソースコードを公開する必要がないことである。
【００１５】
集積回路型デバイスは、すでにデバイスに予め読み込まれたファームウェアモジュールといっしょにソフトウェアアプリケーション開発者に提供されることもある。こうすれば、ファームウェアモジュールに含まれる任意の機密情報の安全性をさらに高めることができる。しかし、これは必須ではない。アプリケーション開発者は、その代わりに、予めコンパイルされた命令の二進数イメージとしてファームウェアモジュールを受け取り、そのファームウェアモジュールをデバイスに読み込むこともある。
【００１６】
したがって、さらなる態様の観点では、本発明は、プロセッサと、メモリと、無線通信ロジックと、を備えた集積回路型無線通信デバイスを構成する方法を提供し、前記方法は、
ソフトウェアアプリケーションを、所定のアプリケーションのメモリアドレスに格納されるように、前記デバイスの前記メモリに読み込むことと、
所定の無線プロトコルに従って前記無線通信ロジックを制御するための命令を含むファームウェアモジュールを、所定のファームウェアメモリアドレスに格納されるように、前記デバイスの前記メモリに読み込むことと、を含み、
前記プロセッサは、各々にスーパーバイザ呼び出し番号が関係付けられたスーパーバイザ呼び出し命令を受信し、（ｉ）前記ファームウェアモジュールのスーパーバイザ呼び出し処理機能を起動して、（ｉｉ）前記呼び出し処理機能が前記スーパーバイザ呼び出し番号を利用できるようにすることによって、スーパーバイザ呼び出し命令に応答するように構成され、
前記ソフトウェアアプリケーションは、前記ファームウェアモジュールから無線通信機能を、起動すべき前記機能に対応する所定のスーパーバイザ呼び出し番号が関係付けられたスーパーバイザ呼び出し命令を発行することによって、起動するように設定される。
【００１７】
ファームウェアモジュールとソフトウェアアプリケーションは、任意の順序で、または実質的に同時にデバイス上に読み込むことができる。なお、それでも、二者を同時に読み込むことは、同業者が過去に行なったように、単一の、リンクされたソフトウェアアプリケーションとライブラリを読み込むこととは基本的に異なる。前述のように、ファームウェアモジュールは、コンパイルされてリンクされた（しかし、ソフトウェアアプリケーションにはリンクされない）二進数モジュールであることが好ましい。
【００１８】
本発明は、集積回路型無線通信デバイス自体にも拡張される。
【００１９】
したがって、第三の態様の観点では、本発明は、集積回路型無線通信デバイスを提供するものであって、
前記デバイスは、プロセッサと、メモリと、無線通信ロジックと、を備え、
前記メモリには、所定の無線プロトコルに従って前記無線通信ロジックを制御するための命令を含むファームウェアモジュールがファームウェアメモリアドレスに格納され、
前記プロセッサは、各々にスーパーバイザ呼び出し番号が関係付けられたスーパーバイザ呼び出し命令を受信し、（ｉ）前記ファームウェアモジュールのスーパーバイザ呼び出し処理機能を起動して、（ｉｉ）前記呼び出し処理機能が前記スーパーバイザ呼び出し番号を利用できるようにすることによって、スーパーバイザ呼び出し命令に応答するように構成され、
前記メモリには、前記ファームウェアモジュールから無線通信機能を、起動すべき前記機能に対応する所定のスーパーバイザ呼び出し番号が関係付けられたスーパーバイザ呼び出し命令を発行することによって、起動するように設定されるソフトウェアアプリケーションが、所定のアプリケーションメモリアドレスに格納される。
【００２０】
さらなる態様の観点では、本発明は、プロセッサと、メモリと、無線通信ロジックと、を備える集積回路型無線通信デバイス上のファームウェアメモリアドレスに読み込まれるファームウェアモジュール、および、前記モジュールを格納する一時的または非一時的媒体を提供するものであって、前記ファームウェアモジュールは、
所定の無線プロトコルに従って前記無線通信ロジックを制御するための命令と、
ソフトウェアアプリケーションによって発行されるスーパーバイザ呼び出し命令に対し、前記スーパーバイザ呼び出し命令と関係付けられたスーパーバイザ呼び出し番号に対応する無線通信機能を実行することによって、応答するように設定されたスーパーバイザ呼び出し処理機能と、を含む。
【００２１】
ファームウェアモジュールは、リンクされた二進数モジュールであることが好ましい。
【００２２】
さらに別の観点では、本発明は、プロセッサと、メモリと、無線通信ロジックと、を備える集積回路型無線通信デバイス上の所定のソフトウェアアプリケーションメモリアドレスに読み込まれるソフトウェアアプリケーション、および、前記ソフトウェアアプリケーションを格納する一時的または非一時的媒体を提供するものであって、前記ソフトウェアアプリケーションは、無線通信機能を、起動すべき前記機能に対応する所定のスーパーバイザ呼び出し番号が関係付けられたスーパーバイザ呼び出し命令を発行することによって、起動するように設定される。
【００２３】
上記の態様のいずれかの好ましい実施形態では、ファームウェアモジュールは、ファームウェアモジュールによって提供されるすべての無線通信機能が、番号と機能との間の所定の対応関係に従って、それぞれのスーパーバイザ呼び出し番号を有するスーパーバイザ呼び出し命令によって起動されるように設定される。このようにすれば、ファームウェア機能を起動するための他の機構をデバイスがサポートする必要はなくなり、その結果、静止時または実行時における実質的なリンク依存関係を無くし、そしてデバイスとソフトウェアアプリケーション開発を簡素化することができる。
【００２４】
なお、ファームウェアモジュールは、必ずしもソフトウェアアプリケーションが起動することができる無線通信に関係しない他の機能、例えば、暗号化アルゴリズムを提供することもある。デバイスは、すべてのそのような機能を起動することがスーパーバイザ呼び出し命令を発行することによって実行されるように構成されるのが好ましい。
【００２５】
デバイスの実施形態は、伝統的な、完全なオペレーティングシステムを含む必要がないので、アプリケーション開発者は、チップメーカーによって供給される独自のオペレーティングシステムと相互接続する方法を学ぶ必要がなく、プロセッサアーキテクチャ用のネイティブアプリケーションとしてソフトウェアアプリケーションを開発することが自由にできる。特に、プロセッサが当技術分野でよく知られている場合、これはアプリケーション開発者にとって非常に魅力的な特徴である。
【００２６】
デバイスが、ファームウェアモジュールに加えてハードウェア抽象化層を有する場合、ソフトウェアアプリケーションは、この層と直接に相互接続することができる。アプリケーション固有のドライバをデバイスに読み込むこともできる。
【００２７】
デバイスを構成することは、ソフトウェアアプリケーションをコンパイルするときにスーパーバイザ呼び出し番号と無線通信機能との対応関係を用いることを含むことがある。ソフトウェアアプリケーションをコンパイルしたり読み込んだりすることは、所定のソフトウェアアプリケーションメモリアドレスを利用することがある。いくつかの実施形態では、デバイスを構成することは、例えば、ヘッダファイルとして、スーパーバイザ呼び出し番号と無線通信機能との対応関係を入手すること、および／または、所定のソフトウェアアプリケーションメモリアドレスを入手することを含むことがある。このような情報は、次いで、ソフトウェアアプリケーションをコンパイルするときに使われることがある。
【００２８】
デバイスは、該デバイスでソフトウェアアプリケーションを実行するときに実行時リンクが不必要であるように構成されることが好ましい。
【００２９】
プロセッサは、スーパーバイザ呼び出し命令を任意の適切な方法で実施してもよい。一連の好ましい実施形態では、プロセッサは、Ｃｏｒｔｅｘ‐ＭシリーズのプロセッサのようなＡＲＭ社製プロセッサであり、したがって、スーパーバイザ呼び出し命令は、該プロセッサによってサポートされるＳＶＣ命令である。
【００３０】
ソフトウェアアプリケーションは、専用のＳＶＣプロセッサ命令を実行することによって、スーパーバイザ呼び出し命令を発行することができる。このような命令は、ソフトウェアアプリケーションをコンパイルするときに、例えば、開発者がソフトウェアアプリケーションのソースコード内に特定のプリプロセッサ指示文を含めることによってコンパイラが生成してもよい。
【００３１】
スーパーバイザ呼び出しと関係付けられた番号は、レジスタを介して、または呼び出しスタックを介して、または他の任意の適切な機構を介して、呼び出し処理機能が利用できるようにすることができる。
【００３２】
プロセッサおよび／またはソフトウェアアプリケーションは、一つ以上の引数の値をスーパーバイザ呼び出し処理機能が利用できるように構成されることが好ましい。このようにすれば、ソフトウェアアプリケーションは、送信すべきデータのような引数を無線通信機能に渡すことができる。呼び出し処理機能は、無線通信機能からの戻り値をソフトウェアアプリケーションに渡すことができてもよい。
【００３３】
プロセッサは、ソフトウェアアプリケーションからのスーパーバイザ呼び出し命令を例外（ソフトウェア割り込み）として処理するように構成されることが好ましい。このようにすれば、ソフトウェアアプリケーションは、緊急を要する無線通信機能を起動する必要があるとき、より低い緊急度の処理を中断することができる。
【００３４】
プロセッサは、複数の割り込み優先度をサポートすることが好ましい。いくつかの実施形態では、ファームウェアモジュールの一部のイベント駆動型機能は、比較的高い優先度が割り当てられ、その他は、比較的低い優先度が割り当てられる。緊急を要する無線通信動作と関係付けられた機能は、比較的高い優先度が割り当てられることが好ましい。
【００３５】
ソフトウェアアプリケーションは、（以下に説明するように、ファームウェアモジュールによって転送される）割り込みを処理するように設定されるが、一部のイベント駆動型機能に対しては比較的高い優先度を与え、その他に対しては比較的低い優先度を与えることができる。ソフトウェアアプリケーションの優先度は、ファームウェアモジュールの優先度と交互配置されることが好ましい。ファームウェアの最も高い優先度レベルは、ファームウェアモジュールで実施される緊急の無線通信動作が、ソフトウェアアプリケーションよりも常に優先されることが可能となるように、ソフトウェアアプリケーションの最も高い優先度レベルよりも高いことが好ましい。こうすれば、ソフトウェアアプリケーションの不注意なプログラミングに対する保護手段を提供することができる。
【００３６】
ファームウェアモジュールは、割り込みを受け取るとソフトウェアアプリケーションの機能を起動するように設定されることが好ましい。このような割り込みは、例えば、動作感知器のような周辺機器から生じることがある。
【００３７】
ファームウェアモジュールとソフトウェアアプリケーションは、各々が割り込みベクタテーブルをそれぞれ有するものとする。二つのテーブルは、互いに同じ割り込みベクタアドレス相対位置を使用することが好ましい。ファームウェアモジュールのベクタテーブル（および、二者が同じ相対位置を使用したときは、ソフトウェアアプリケーションのベクタテーブル）における割り込みベクタアドレスの相対位置は、通常は、プロセッサアーキテクチャによって固定される。デバイスは、割り込みを処理するときにファームウェアモジュールのベクタテーブルを（すなわち、システム割り込みのベクタテーブルとして）使用するように構成されることが好ましい。
【００３８】
しかし、ファームウェアモジュールは、自分が処理するようにプログラムされていない割り込みはすべてソフトウェアアプリケーションに渡すように設定されることが好ましい。これは、ファームウェアモジュールが、特定の割り込みを処理するように構成されていないときはいつでも、ソフトウェアアプリケーションのベクタテーブル内で対応する相対位置に含まれるアドレスに分岐させることによって実施することができる。これは、ソフトウェアアプリケーションは、そのアプリケーションがデバイスに読み込まれた後、ファームウェアモジュールがどこを探せばそのアプリケーションのベクタテーブルが見つかるのかを事前に知ることができるように、所定のメモリアドレスに読み込まれるので可能となる。
【００３９】
例えば、一部の実施形態では、ＲＥＳＥＴ割り込み処理機能のアドレスは、コンパイラによって常に相対位置が０（ゼロ）に配置される。そのため、ファームウェアモジュールのベクタテーブルにおけるＲＥＳＥＴ処理機能のアドレスは、メモリ内では０ｘ００００  ００００＋０＝０ｘ００００  ００００というアドレスになる。ソフトウェアアプリケーションのベクタテーブルにおけるＲＥＳＥＴ処理機能のアドレスは、ＣＬＥＮＲ０＋０＝ＣＬＥＮＲ０というアドレスになり、ここで、ＣＬＥＮＲ０は、ソフトウェアアプリケーションが配置される所定の基底メモリアドレスである。
【００４０】
この割り込み転送メカニズムによって、便宜上、ソフトウェアアプリケーションは、ファームウェアモジュールがデバイス上に存在しない場合と実質的に同じ方法でハードウェア割り込みを処理するようにプログラム化することができる。すなわち、ファームウェアモジュールは、割り込みを受け取る目的では、ソフトウェアアプリケーションに不可視とすることができる。該転送は、ハードウェア割り込みがソフトウェアアプリケーションに直接入る場合に比べて、約３０命令未満または約３マイクロ秒未満の待ち時間しか付加しないように実施されることが好ましい。
【００４１】
ファームウェアモジュールは、実質的に無効になるように構成することもできる。このような無効化は、ファームウェアモジュールへの呼び出しを介して（できれば、ＳＶＣ機構を使用して）行なうことができる。ファームウェアモジュールを無効にすると、ファームウェアモジュールは、プロトコルスタックをリセットし、また、リソースをソフトウェアアプリケーションに返すために（もし存在すれば）メモリ保護機能をすべて無効にすることができる。無効になると、ファームウェアモジュールは、（無効にしなければ自分が処理したものであれ）すべての割り込みをソフトウェアアプリケーションに転送することが好ましい。
【００４２】
プロセッサは、ある割り込み優先度レベルから別のレベルへの継ぎ目ない推移をサポートすることが好ましい。これは、時々テールチェインと呼ばれる。これによって、必要なときに緊急度の高い無線通信機能を優先させるように、ソフトウェアアプリケーションとファームウェアモジュールとの間（およびその逆）で制御を移管する洗練された手段が提供される。
【００４３】
デバイスは、メモリアクセス命令を横取りするように配置されたメモリ保護ロジックを備えることが好ましい。このロジックは、プロセッサとメモリの間にあるものとする。これは、アクセスを許可するかどうかを決定するために、メモリアクセス命令の位置（つまり、プロセッサが命令を読み取った場所）を使用することができる。メモリ保護ロジックは、ソフトウェアアプリケーションがファームウェアモジュールを読み取るか、または、上書きすること（あるいは両方）を防止するように構成されることが好ましい。
【００４４】
このようなメモリ保護は、ファームウェアモジュールの機密情報がソフトウェアアプリケーションの開発者によって読み取られることから守るという恩恵をもたらすことができる。また、ソフトウェアアプリケーションのバグの検出および訂正を助けるだけでなく、ソフトウェアアプリケーションのプログラムエラーによる潜在的な損傷を最小限にすることもできる。
【００４５】
メモリ保護ロジックは、ファームウェアモジュールと関係付けられたＲＡＭがソフトウェアアプリケーションによって読み取られるか、または、書き込まれること（あるいは両方）から守るように構成することができる。
【００４６】
プロセッサと、メモリと、無線通信ロジックと、は、単一のシリコンチップ上に集積されることが好ましい。しかしながら、それらは、別の方法として、マルチチップモジュールとして集積することもできる。
【００４７】
メモリは、ＥＥＰＲＯＭやフラッシュなどの不揮発性メモリであることが好ましい。ファームウェアモジュールとソフトウェアアプリケーションがメモリから直接実行することができるように、ランダムアクセス読み取りをサポートすることが好ましい。
【００４８】
デバイスが、典型的には、揮発性メモリも備えることを、当業者は理解するであろう。さらに、一つ以上の周辺機器を備えることもある。電力とクロック信号を受信するための接続を有してもよい。アンテナのための接続を有してもよい。シリアル接続のような一つ以上の入力インタフェースおよび／または出力インタフェースを有してもよい。
【００４９】
本明細書に記載の一態様または実施形態の任意選択な好ましい特徴は、適切でありさえすれば、他の任意の態様または実施形態にも適用することができる。
【図面の簡単な説明】
【００５０】
本発明の特定の好ましい実施形態について、付随する図面を参照しながら、ほんの一例として説明することにする。
【図１】本発明を具体化したマイクロコントローラの概略図である。
【図２】マイクロコントローラの構造の主要ソフトウェアコンポーネントを示す概略図である。
【図３】マイクロコントローラ用の概略的なメモリマップである。
【図４】異なるプロセッサ割り込み優先度レベルの比喩的な図である。
【図５】様々な割り込み状況を説明する、比喩的な図である。
【図６】ソフトウェアアプリケーションがファームウェアモジュール内の関数を呼び出すことを示す、ソースコード要素の比喩的な図である。
【図７】ソフトウェアアプリケーションがシステム呼び出しを使用して内部機能を起動することを示す、ソースコード要素の比喩的な図である。
【図８】ソフトウェアアプリケーションがハードウェア割り込みを受け取ることを示す、ソースコード要素の比喩的な図である。
【発明を実施するための形態】
【００５１】
図１は、場合によってはシステムオンチップとしても知られている集積回路マイクロコントローラ１を示すものであって、抵抗・コンデンサ発振器を備えるか、および／または、チップ外の水晶発振器（図示せず）からの入力を受信するクロックロジック３と、電力管理回路５と、プロセッサ７（例えば、ＡＲＭ社製Ｃｏｒｔｅｘ‐Ｍ０）と、メモリ保護ロジック９と、ＲＡＭ１１と、不揮発性フラッシュメモリ１３と、一つ以上の周辺機器１５と、無線通信ロジック１７と、入出力回路１９と、を備えている。
【００５２】
これらの構成要素は、従来の方法で、例えば、回線とバス（図示せず）を使って、相互接続されている。メモリ保護ロジック９は、プロセッサ７からＲＡＭ１１１とフラッシュメモリ１３への命令を横取りするように位置付けられている。製品に取り付けられるとき、マイクロコントローラ１は、電源、無線アンテナ、水晶発振器、センサ、出力デバイスなどの多くの外部構成要素に接続することができる。
【００５３】
図２は、マイクロコントローラ１を示しており、その上に、ＡＲＭ社製Ｃｏｒｔｅｘマイクロコントローラソフトウェアインタフェース規格のような、任意選択のハードウェア抽象化層２１が存在する。該構造は、ファームウェアモジュール２３と、ドライバ２５と、ソフトウェアアプリケーション２７と、を含む。ドライバ２５は、ソフトウェア・アプリケーション２７専用のことがある。
【００５４】
ファームウェアモジュール２３は、多くの組込みソフトウェアブロックを含む二進数アプリケーションである。無線プロトコルブロック３１は、一つ以上の無線プロトコルスタックを実装する。無線イベントマネージャ３３は、無線通信ロジック１７のためのアクセスのスケジュール化、およびイベントの多重化を提供する。ライブラリ３５は、共有ハードウェア資源管理と、乱数生成、割り込みと優先度の設定、（例えば、周辺機器を起動・停止するための）電力管理、暗号化機能、等の機能を提供する。ファームウェアマネージャ３７は、ファームウェアモジュールを有効化・無効化することと、無線プロトコルスタックを有効化・無効化することをサポートする。
【００５５】
ファームウェアモジュール２３は、システムベクタテーブルを所有し、すべてのリセットに関して該プログラムに対する入口点となる。
【００５６】
ファームウェアモジュール２３用のアプリケーションプログラミングインタフェース（ＡＰＩ）２９は、ソフトウェアアプリケーション２７がファームウェアモジュール２３内の関数を呼び出すことを可能にする。これは、全面的にシステム呼び出しを使用して実施される。ＡＲＭ社製プロセッサを使用する場合、各ＡＰＩ関数プロトタイプは、コンパイル時に、ファームウェアの機能が関係付けられたスーパーバイザ呼び出し（ＳＶＣ）番号を介して該機能にマッピングされる。このマッピングが提供されることによって、ソフトウェアアプリケーション２７の開発者は、関数を正しく呼び出すことができる。
【００５７】
ファームウェアモジュール２３は、イベントをソフトウェア割り込みとしてソフトウェアアプリケーション２７に伝えることができ、その内容は、ソフトウェアアプリケーション２７によって読み込まれる（ポーリングされる）までバッファに格納される。該読み込みは、ＡＰＩ呼び出し（例えば、ｅｖｅｎｔ＿ｇｅｔ（））を通して行われる。
【００５８】
ソフトウェアアプリケーション２７は、マイクロコントローラ１のハードウェアを、ファームウェアモジュール２３を利用して間接的に該ハードウェアを使用することができることに加えて、直接またはハードウェア抽象化層２１を介し、例えば、アプリケーション固有のドライバ２５を用いて、アクセスすることができる。
【００５９】
図３は、ＲＡＭ１１とフラッシュ１３がファームウェアモジュール２３と（任意のアプリケーション固有のドライバ２５を含む）ソフトウェアアプリケーション２７とでどのように共有されるのかを示している。ＡＲＭ社製Ｃｏｒｔｅｘ‐Ｍ０プロセッサ７を使用する場合、フラッシュ１３は、アドレスがゼロ（０ｘ００００  ００００）から上に向かって、その容量である、プログラムメモリサイズまで割り当てられ、ＲＡＭ１１は、アドレスが０ｘ２０００  ００００から上に向かって、（０ｘ２０００  ００００＋ＲＡＭサイズ）まで割り当てられる。異なるタイプのプロセッサを使用する場合、別のアドレス値を使用することもある。
【００６０】
フラッシュ１３は、アドレスＣＬＥＮＲ０（領域０のプログラムの長さ）の両側に二つの異なる領域を含む。ゼロとＣＬＥＮＲ０の間にある領域０は、ファームウェアモジュール２３がロードされる場所である。その割り込みベクタテーブルは、アドレスのゼロに格納されている。ＣＬＥＮＲ０から上方に延びる領域１は、ソフトウェアアプリケーション２７がロードされる場所である。それも、アドレスＣＬＥＮＲ０に割り込みベクタテーブルを有するが、割り込みベクタテーブルの目的は、以下で説明する。なお、デバイス１は、設定情報やフラグを格納するなどといった他の目的のために使用される不揮発性メモリ（図示せず）を別に有することがある。
【００６１】
ＲＡＭ１１も同様に、基底アドレス０ｘ２０００  ００００からＲＬＥＮＲ０までの領域０とＲＬＥＮＲ０から上方に延びる領域１を有する。ＲＡＭの領域０は、ファームウェアモジュール２３のためのデータ記憶域を提供し、ＲＡＭの領域１は、ソフトウェアアプリケーション２７のためのデータ記憶域を提供する。呼び出しスタックは、ファームウェアモジュール２３とソフトウェアアプリケーション２７とで共有され、例えば、０ｘ２０００  ００００＋ＲＡＭサイズから下方に拡がる。呼び出しスタックに割り当てられるメモリは、ソフトウェアアプリケーション２７とファームウェアモジュール２３の両方の必要性に十分に応える大きさでなければならない。
【００６２】
ファームウェアモジュール２３による呼び出しスタックの必要使用量は、デバイス１に関して、チップメーカーによって公開されることがある。したがって、ソフトウェアアプリケーション２７の開発者は、初期スタックポインタを定めて、ファームウェアモジュール２３と自分のソフトウェアアプリケーション２７の両方にとって十分なスタックメモリを予約する必要がある。ファームウェアモジュール２３は、リセット時にメインスタックポインタを初期化することになる。
【００６３】
メモリ保護ロジック９は、プロセッサ７からフラッシュ１３およびＲＡＭ１１に対するすべてのメモリアクセス要求（例えば、読み取り要求）を横取りするように構成される。該ロジックは、アクセス要求命令の発行元（例えば、該要求は、ファームウェアモジュール２３からのものであるか、またはソフトウェアアプリケーション２７からのものであるか）を決定する。また、様々な発行元に対してそれぞれのアクセス権限を指定する（例えば、一つ以上の専用レジスタに格納された）メモリ保護構成データにアクセスし、それに応じてアクセス要求を許可または拒否する。
【００６４】
本発明のいくつかの好ましい実施形態では、ソフトウェアアプリケーション２７は、フラッシュの領域０とＲＡＭの領域０に対する読み取りおよび／または書き込みのアクセスを拒否される。こうすれば、ファームウェアモジュール２３の機密性を保護し、また、ソフトウェアアプリケーション２７によって、ファームウェアモジュール２３に割り当てられたメモリ箇所に対し、不注意なまたは悪意のある書き込みが行なわれることを防止することができ、それによって堅牢性および安全性を向上させることができる。フラッシュのソフトウェアアプリケーション領域１も、例えば、外部デバッグインタフェースを介したリードバック行為から保護するなど、読み取りアクセスから保護することができる。
【００６５】
このことは、ソフトウェアアプリケーション２７にはＲＡＭ領域０への書き込みアクセス権がないので、初期スタックポインタをＲＡＭ領域０におくことはできないことを意味する。本発明の他の実施形態では、呼び出しスタックは、二つの部分から成るものとし、ファームウェアモジュール２３の呼び出しスタックはＲＡＭ領域０に置かれ、ソフトウェアアプリケーション２７の呼び出しスタックはＲＡＭ領域１に置かれる。
【００６６】
図４は、ＡＲＭ社製Ｃｏｒｔｅｘ‐Ｍ０プロセッサによって提供されて、矢印の方向に優先度が増加する、様々な割り込みレベル４１と、これらのレベルが、ファームウェアモジュール２３とソフトウェアアプリケーション２７によって使用される割込みレベル４３にどのようにマッピングされるかということと、を示している。
【００６７】
メインという背景の処理環境の上には、優先度の高くなる順に、ソフトウェアアプリケーション低優先度と、ファームウェアモジュール低優先度と、ソフトウェアアプリケーション高優先度と、ファームウェアモジュール高優先度として使用される四つの割り込み優先度がある。高優先度のソフトウェアアプリケーション割り込みは、短い待ち時間が要求される緊急割り込みに使用される。
【００６８】
図５は、優先度レベルが変化する可能性のある様々な例を示している。
【００６９】
図５（ａ）は、背景となるメイン処理が、低優先度のソフトウェアアプリケーション、例えば、シリアル用ドライバによって割り込みを受ける様子を示している。次いで、ソフトウェアアプリケーション２７は、（スーパーバイザ呼び出し（ＳＶＣ）例外を発生させることによって）ファームウェアモジュール２３にＡＰＩ呼び出しを行なう。ファームウェアモジュール２３は、該呼び出しをファームウェア低優先度レベルで処理した後に、アプリケーション低優先度レベルに戻る。最後に、ソフトウェアアプリケーション２７は操作を完了し、メインという背景レベルに実行が戻る。
【００７０】
図５（ｂ）は、ファームウェアモジュール２３へＡＰＩ呼び出しが（ＳＶＣ例外を発生させることによって）メインの処理環境から発生する様子を示している。ファームウェア低優先度で実行するＡＰＩ機能は、高優先度のソフトウェアアプリケーション例外によって割り込みされる。これは、例えば、センサ入力を処理することであるかもしれない。ソフトウェアアプリケーションが高優先度の実行を終了すると、ファームウェアのＡＰＩ呼び出しは、低優先度のレベルで処理を継続することができ、最終的に背景であるメイン処理に戻る。
【００７１】
図５（ｃ）は、背景であるメイン処理がファームウェアモジュール２３によって高優先度の割り込みを受けた様子を示している。これは、着信する無線パケットのような、無線イベントマネージャ３３が応答しなければならない、緊急を要する無線通信割り込みが原因である可能性がある。ファームウェアモジュール２３内の割り込みサービスルーチンは、低優先度のファームウェア例外フラグを設定して、無線プロトコルスタックのより高いレベルに通知する。高優先度のルーチンが完了すると、プロセッサ７のテールチェイン機能によって（つまり、途中で、背景であるメインのレベルに戻すことなく）、直ちに低優先度のルーチンが実行されている。今度は、低優先度のファームウェアルーチンが、例外フラグを設定して、無線データパケットが受信されたという信号をソフトウェアアプリケーション２７に通知する。この例外は、低優先度のファームウェアモジュールルーチンの完了後に直ちに実行される。この例では、ソフトウェアアプリケーション２７は、次に、ＳＶＣを介してファームウェアモジュール２３にＡＰＩ呼び出しを行ない、完了後に、処理環境をＳＶＣからソフトウェアアプリケーション２７に戻す。最後に、ソフトウェアアプリケーション低優先度操作が完了し、メインのレベルに実行が戻る。
【００７２】
図６〜図８は、ソフトウェアアプリケーション２７とファームウェアモジュール２３との間でどのように制御が渡されるのかを例を用いて説明している。説明のために、未コンパイルのＣ言語コードを抽出したものが使用されている。もちろん、実際には、プロセッサ７によってフラッシュメモリ１３からの二進数命令が実行される。番号の付いた矢印は、連続する実行ステップを示している。
【００７３】
図６は、ソフトウェアアプリケーション２７がファームウェアモジュール２３のＡＰＩ２９を通して機能を呼び出す様子を示している。アプリケーション２７は、チップメーカーによってソフトウェアアプリケーション開発者に供給されたファームウェアヘッダファイルを使用して、ファームウェアのＡＰＩ２９から取り込まれたプロトタイプを使ってある関数を呼び出す。＿ＳＶＣ(x) プラグマは、該関数がソフトウェアアプリケーション２３によって呼び出されると、スーパーバイザ呼び出し（ＳＶＣ）例外を発生させる命令を、コンパイラがオブジェクトコード中に挿入する。
【００７４】
プロセッサ７は、（システム割り込みベクタテーブルとして機能する）ファームウェアモジュールの割り込みベクタテーブルを介して、ＳＶＣ処理機能を起動する。ソフトウェアアプリケーション２７によって呼び出される関数と関係付けられたＳＶＣ番号は、引数と一緒に、ＳＶＣ処理機能に渡される。このような引数は、プロセッサによって、レジスタを介して、または、コールスタックを介して渡すことができる。ＳＶＣ処理機能は、ＳＶＣ番号を使用して正しいファームウェアモジュールの関数を呼び出す。これは、無線制御機能（例えば、無線でデータを送信する命令）、または（例えば、ファームウェアモジュールを無効化する）ファームウェア管理機能、または（例えば、乱数を生成する）ライブラリ関数、であってもよい。関数が実行されると、ソフトウェアアプリケーション２７に戻る。戻り値が、レジスタ内またはコールスタック上で利用可能であるようにできる。
【００７５】
図７は、ソフトウェアアプリケーション２７がシステム呼び出しを介して、自分自身の機能の一つを呼び出す様子を示している。実行レベルを低優先度から高優先度に変更するために、このようなことを行なう可能性がある。図６における状況と同様に、ソフトウェアアプリケーション２７は、ファームウェアモジュール２７にあるＳＶＣ処理機能に実行が渡されるようにＳＶＣを発生させる。しかしながら、この場合、該命令は、ソフトウェアアプリケーション自身の使用のために予約されている範囲にあるＳＶＣ番号を使用する。このようにして、ファームウェアモジュール２３は、おそらくそれまでの動作とは異なる優先度レベルで、ソフトウェアアプリケーション２７内の処理関数（ａｐｐ＿ｓｙｓｔｅｍｃａｌｌ＿ｆｕｎｃｔｉｏｎ（））に実行が分岐するようにする。
【００７６】
図８は、ハードウェア割り込みをソフトウェアアプリケーション２７がどのようにして受け取るのかを示している。ファームウェアモジュール２３は、ファームウェアモジュール２３が処理するように構成されている割り込みでない限り、初期設定ではソフトウェアアプリケーション２７に割り込みを転送するように設定されている。さらに、ファームウェアモジュール２３が（例えば、ファームウェアマネージャ３７への適切なＡＰＩ呼び出しを介して）ソフトウェアアプリケーション２７によって無効にされている場合、ファームウェアモジュールは、全ての割り込みをソフトウェアアプリケーション２７に転送する。
【００７７】
モーションセンサなどから割り込みを受信すると、ファームウェアモジュール２３の割り込み処理機能に制御が渡される。この処理機能は、ファームウェアモジュール２３が有効になっているかどうか、そして、ファームウェアモジュール２３が対処するように設定されている割り込みかであるかどうかを調べる。もしそうであれば、ファームウェアモジュール２３は、割り込みを処理する。そうでない場合は、ソフトウェアアプリケーション２７の割り込み処理ルーチンに実行を分岐させる。ファームウェアモジュール２３は、ソフトウェアアプリケーションベクタテーブルの（ＣＬＥＮＲ０という）位置が予め決められていて、このベクタテーブルでの相対位置がファームウェアモジュールのベクタテーブルでの相対位置と同じなので、このルーチンがどこにあるのかを知ることができる。
【００７８】
このようにして、集積回路無線通信チップのファームウェアメモリアドレスにプログラムされた、無線制御ロジックを実施するファームウェアモジュールを、安全かつ便利に構成・使用することができる。
【図１】
0006326047.tif 000002
【図２】
0006326047.tif 000003
【図３】
0006326047.tif 000004
【図４】
0006326047.tif 000005
【図５】
0006326047.tif 000006
【図６】
0006326047.tif 000007
【図７】
0006326047.tif 000008
【図８】
0006326047.tif 000009