(57)【要約】【課題】組み込み分野におけるプログラムの開発効率を向上させる。【解決手段】本発明の一態様において、情報処理装置は、対応するデバイスへのアクセスを実行する複数のデバイスアクセス手段９１〜９ｍと、デバイス情報識別データと複数のデバイスアクセス手段のうちのいずれかを示すアクセス方法識別情報とを含む複数のデバイス情報３１〜３ｎを記憶する記憶手段４と、組み込み分野のプログラム６に、アクセス命令とアクセスに用いるデバイス情報識別データとが含まれている場合に、記憶手段４から、組み込み分野のプログラム６に含まれているデバイス情報識別データに対応するデバイス情報を読み出す第１の手段１０と、読み出されたデバイス情報に含まれているアクセス方法識別情報に対応するデバイスアクセス手段に、アクセスを実行させる第２の手段１１，１２とを具備する。【選択図】      図１
2011065588.tif 000002
【特許請求の範囲】
【請求項１】
対応するデバイスへのアクセスを実行する複数のデバイスアクセス手段と、
デバイス情報識別データと前記複数のデバイスアクセス手段のうちのいずれかを示すアクセス方法識別情報とを含む複数のデバイス情報を記憶する記憶手段と、
組み込み分野のプログラムに、アクセス命令とアクセスに用いるデバイス情報識別データとが含まれている場合に、前記記憶手段から、前記組み込み分野のプログラムに含まれているデバイス情報識別データに対応するデバイス情報を読み出す第１の手段と、
前記読み出されたデバイス情報に含まれているアクセス方法識別情報に対応するデバイスアクセス手段に、アクセスを実行させる第２の手段と
を具備する情報処理装置。
【請求項２】
請求項１記載の情報処理装置において、
前記読み出されたデバイス情報は、さらに、アドレス決定に用いられるアドレス決定情報を含み、
前記組み込み分野のプログラムは、前記アクセス命令と前記デバイス情報識別データと第１のアドレス情報を含み、
前記第２の手段は、さらに、前記第１のアドレス情報と、前記アドレス決定情報とに基づいて、前記デバイスアクセス手段で実行させるアクセスで用いられるアドレスを決定する
ことを特徴とする情報処理装置。
【請求項３】
請求項１又は請求項２記載の情報処理装置において、
前記読み出されたデバイス情報は、さらに、ビットフィールドを指定するビットフィールド情報を含み、
前記第２の手段は、
データ読み出しを行う場合に、前記デバイスアクセス手段によって読み出されたデータから、前記ビットフィールドに対する部分のデータを抽出し、
データ書き込みを行う場合に、前記デバイスアクセス手段によってデータの読み出しを実行させ、読み出されたデータにおける前記ビットフィールドに対応する部分を更新し、当該更新されたデータの書き込みを前記デバイスアクセス手段に実行させる
ことを特徴とする情報処理装置。
【請求項４】
請求項１乃至請求項３のいずれか１項に記載の情報処理装置において、
前記複数のデバイス情報は、木構造を形成し、
前記デバイス情報識別データは、前記木構造における経路を特定する情報であり、
前記第１の手段は、前記デバイス情報識別データの示す経路上のすべてのデバイス情報に基づいて、アクセスに用いるデバイス情報を求め、
前記第２の手段は、前記アクセスに用いるデバイス情報に基づいて、前記デバイスアクセス手段にアクセスを実行させる
ことを特徴とする情報処理装置。
【請求項５】
コンピュータを、
対応するデバイスへのアクセスを実行する複数のデバイスアクセス手段、
デバイス情報識別データと前記複数のデバイスアクセス手段のうちのいずれかを示すアクセス方法識別情報とを含む複数のデバイス情報を記憶する第１の記憶手段と、組み込み分野のプログラムを記憶する第２の記憶手段とを参照し、前記組み込み分野のプログラムにアクセス命令とアクセスに用いるデバイス情報識別データとが含まれている場合に、前記第１の記憶手段から、前記組み込み分野のプログラムに含まれているデバイス情報識別データに対応するデバイス情報を読み出す第１の手段、
前記読み出されたデバイス情報に含まれているアクセス方法識別情報に対応するデバイスアクセス手段に、対応するデバイスへのアクセスを実行させる第２の手段
として機能させるためのプログラム。
【請求項６】
コンピュータが、対応するデバイスへのアクセスを実行する複数のデバイスアクセス手段と、デバイス情報識別データと前記複数のデバイスアクセス手段のうちのいずれかを示すアクセス方法識別情報とを含む複数のデバイス情報を記憶する第１の記憶手段と、組み込み分野のプログラムを記憶する第２の記憶手段とを実装し、
前記コンピュータが、前記第１の記憶手段と前記第２の記憶手段とを参照し、前記組み込み分野のプログラムにアクセス命令とアクセスに用いるデバイス情報識別データとが含まれている場合に、前記第１の記憶手段から、前記組み込み分野のプログラムに含まれているデバイス情報識別データに対応するデバイス情報を読み出し、
前記コンピュータが、前記読み出されたデバイス情報に含まれているアクセス方法識別情報に対応するデバイスアクセス手段に、対応するデバイスへのアクセスを実行させる
ことを特徴とする情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、組み込み分野における低レベルプログラミングを支援する情報処理装置及びプログラム並びに情報処理方法に関する。
【背景技術】
【０００２】
例えば、デバイスドライバや組み込みプログラムなどのようなデバイスを直接制御する従来の組み込み分野のプログラムにおいては、デバイスに対するアクセスの方法又はアクセス先のレジスタマップなどが定義されている。組み込み分野のプログラムにおいて、デバイスに対するアクセスの方法又はレジスタマップなどの定義は、デバイスの数だけ存在し、保守性、移植性、可読性、習得性はあまり検討されていない。
【０００３】
特許文献１（特開２００８−２４２８６０号公報）には、ネットワークを介して接続されるデバイスと連携動作するサーバ用のスケルトンコードを生成する連携動作プログラム生成ツールが開示されている。この連携動作プログラム生成ツールは、デバイスの設定情報を記述したデバイスデータを解析して連携動作に必要な情報を抽出し、デバイスと連携動作させるために必要なデバイスアクセス用のスケルトンコードを生成する。この特許文献１の発明では、デバイスの設定情報を記述したデバイスデータを入力するだけで、デバイスと連携動作するサーバに必要なデバイスアクセス用のスケルトンコードが自動的に生成される。
【０００４】
特許文献２（特開２００７−３１６７８６号公報）には、デバイス制御装置がデバイスを動作させ、他のコンピュータがデバイスによって得られたデータを処理し、この処理結果がデバイス制御装置へ反映されることが開示されている。この特許文献２のデバイス技術は、複数のデバイスが接続された制御装置の技術に係り、特に金融機関で用いられる行員端末又はＡＴＭなど、利用者との入出力を各種デバイスを介して行う端末システムに関する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−２４２８６０号公報
【特許文献２】特開２００７−３１６７８６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
組み込み分野のプログラムにおいて、広く普及しているプログラミング言語の定義文「#define」を用いてアクセス先のレジスタマップが定義される場合、デバイスのアドレスに対して簡単な名称を付けることができる。
【０００７】
しかしながら、このようなプログラミング言語の定義文を用いる場合には、アクセスされる情報の単位（８ビット、１６ビット、３２ビットなど）、及びアクセス先のレジスタ又はビットフィールドを読み込み専用又は書き込み専用で使用することなどを定義すること、そして、この定義に基づいて組み込み分野のプログラムの運用を行うことは、困難である。
【０００８】
デバイスを直接制御するプログラムのプログラミングを間違えた場合、この間違いを解消することが困難な場合がある。
【０００９】
組み込み分野のプログラムが実装される情報処理装置が異なる場合には、同じデバイスに対するアクセスであっても、アクセスの方法が異なるため、プログラムを修正する必要がある。
【００１０】
ＬＳＩの開発中においては、レジスタマップ又はレジスタマップの定義の変更が頻繁に発生する。従来においては、変更が発生するたびに、組み込み分野のプログラムにおけるレジスタの定義を変更し、すべてのプログラムをコンパイルし直す必要がある。したがって、規模の大きな組み込み分野のプログラムの変更には時間がかかる。
【００１１】
デバイスへ直接アクセスするプログラムを記述する機会は多い。しかしハードウェアの差異を意識した開発を行うことは困難である。一方、ハードウェアの差異を意識しない開発は保守性、移植性を低下させる原因となる。組み込み分野におけるプログラムの規模は年々増大している。製品サイクルの短縮や多品種少量生産の必要性から、プログラムの保守性、移植性を向上させることが必要である。
【００１２】
さらに、多人数での開発を行う必要性から、プログラムを記述する上で、可読性及び習得性が重要である。
【００１３】
本発明は、以上のような実情に鑑みてなされたもので、組み込み分野におけるプログラムの開発効率を向上させることを目的とする。
【課題を解決するための手段】
【００１４】
本発明の第１の態様に係る情報処理装置は、対応するデバイスへのアクセスを実行する複数のデバイスアクセス手段と、デバイス情報識別データと前記複数のデバイスアクセス手段のうちのいずれかを示すアクセス方法識別情報とを含む複数のデバイス情報を記憶する記憶手段と、組み込み分野のプログラムに、アクセス命令とアクセスに用いるデバイス情報識別データとが含まれている場合に、前記記憶手段から、前記組み込み分野のプログラムに含まれているデバイス情報識別データに対応するデバイス情報を読み出す第１の手段と、前記読み出されたデバイス情報に含まれているアクセス方法識別情報に対応するデバイスアクセス手段に、アクセスを実行させる第２の手段とを具備する。
【００１５】
本発明の第２の態様に係るプログラムは、コンピュータを、対応するデバイスへのアクセスを実行する複数のデバイスアクセス手段、デバイス情報識別データと前記複数のデバイスアクセス手段のうちのいずれかを示すアクセス方法識別情報とを含む複数のデバイス情報を記憶する第１の記憶手段と、組み込み分野のプログラムを記憶する第２の記憶手段とを参照し、前記組み込み分野のプログラムにアクセス命令とアクセスに用いるデバイス情報識別データとが含まれている場合に、前記第１の記憶手段から、前記組み込み分野のプログラムに含まれているデバイス情報識別データに対応するデバイス情報を読み出す第１の手段、前記読み出されたデバイス情報に含まれているアクセス方法識別情報に対応するデバイスアクセス手段に、対応するデバイスへのアクセスを実行させる第２の手段として機能させる。
【００１６】
本発明の第３の態様に係る情報処理方法においては、コンピュータが、対応するデバイスへのアクセスを実行する複数のデバイスアクセス手段と、デバイス情報識別データと前記複数のデバイスアクセス手段のうちのいずれかを示すアクセス方法識別情報とを含む複数のデバイス情報を記憶する第１の記憶手段と、組み込み分野のプログラムを記憶する第２の記憶手段とを実装し、前記コンピュータが、前記第１の記憶手段と、前記第２の記憶手段とを参照し、前記組み込み分野のプログラムにアクセス命令とアクセスに用いるデバイス情報識別データが含まれている場合に、前記第１の記憶手段から、前記組み込み分野のプログラムに含まれているデバイス情報識別データに対応するデバイス情報を読み出し、前記コンピュータが、前記読み出されたデバイス情報に含まれているアクセス方法識別情報に対応するデバイスアクセス手段に、対応するデバイスへのアクセスを実行させる。
【発明の効果】
【００１７】
本発明においては、組み込み分野におけるプログラムの開発効率を向上させることができる。
【図面の簡単な説明】
【００１８】
【図１】本発明の第１の実施の形態に係る情報処理装置の構成の一例を示すブロック図。
【図２】第１の実施の形態に係るデバイスデータベースのバイナリファイル表現の一例を示す図。
【図３】第１の実施の形態に係るデバイスデータベースの１レコードのフィールド構成の一例を示す図。
【図４】第１の実施の形態に係る情報処理装置の処理の一例を示すフローチャート。
【図５】第１の実施の形態に係るdevice_open関数の処理の一例を示すフローチャート。
【図６】第１の実施の形態に係るdevice_read関数の処理の一例を示すフローチャート。
【図７】第１の実施の形態に係るdevice_write関数の処理の一例を示すフローチャート。
【図８】本発明の第２の実施の形態に係るデバイスデータベースの１レコードのフィールド構成の一例を示す図。
【図９】ビットフィールドへのアクセスを含むdevice_read関数の処理の一例を示すフローチャート。
【図１０】ビットフィールドへのアクセスを含むdevice_write関数の処理の一例を示すフローチャート。
【図１１】本発明の第３の実施の形態に係る文字列テーブルを含むデバイスデータベースのバイナリファイル表現の一例を示す図。
【図１２】第３の実施の形態に係るデバイス情報レコード群の１レコードのフィールド構成の一例を示す図。
【図１３】本発明の第４の実施の形態に係るデバイス情報レコード群の１レコードのフィールド構成の一例を示す図。
【図１４】第４の実施の形態に係るデバイスデータベースの木構造の一例を示す図。
【図１５】第４の実施の形態に係るdevice_open関数の処理の一例を示すフローチャート。
【図１６】本発明の第６の実施の形態に係るdevice_read関数の処理の一例を示すフローチャート。
【図１７】本発明の第１１の実施の形態に係る情報処理装置のハードウェア構成の一例を示すブロック図。
【発明を実施するための形態】
【００１９】
以下、図面を参照しながら本発明の実施の形態について説明する。なお、以下の各図において同一又はほぼ同一の要素には同一の符号を付して説明を省略するか又は簡単に説明し、異なる部分についてのみ詳しく説明する。
【００２０】
（第１の実施の形態）
本実施の形態においては、組み込み分野における低レベルプログラミングを支援する情報処理装置（電子計算機、システム）について説明する。
【００２１】
図１は、本実施の形態に係る情報処理装置の構成の一例を示すブロック図である。
【００２２】
情報処理装置１は、デバイス２１〜２ｋをアクセス可能である。情報処理装置１は、様々な種類のデバイスに対するデバイス情報３１〜３ｎを記憶する記憶装置４と、デバイス２１〜２ｋをアクセスするためのライブラリモジュール５と、組み込み分野における低レベルプログラミングによって開発されたプログラム６を記憶する記憶装置７とを具備する。
【００２３】
記憶装置４，７としては、例えば主記憶装置が用いられる。デバイス情報３１〜３ｎはデバイスデータベース８を用いて管理される。
【００２４】
記憶装置４は、デバイスデータベース８を格納する装置である。情報処理装置１は、オペレーティングシステムによって提供されるファイルマッピング機能を利用し、補助記憶装置からデバイスデータベース８の各種データを記憶装置４にマッピングする。なお、ファイルマッピングは使用しなくてもよい。組み込み分野のプログラムの場合には、オペレーティングシステムが存在しない場合がある。このような場合、デバイスデータベース８は、例えばリードオンリーメモリなどのような記憶装置などから直接主記憶装置上にロードされるとすることができる。
【００２５】
デバイスデータベース８のヘッダ１３は、デバイスデータベース８の全体情報（管理情報）を格納する。
【００２６】
デバイス情報３１〜３ｎは、それぞれデバイスデータベース８のレコードに格納される。デバイス情報３１〜３ｎは、例えば、アクセス方法、アドレスマップ、アクセス許可属性（読み出し可能、書き込み可能）などの情報を含む。
【００２７】
デバイス２１〜２ｋの種類としては、例えば、ＳＰＩプロトコルを用いるデバイス２１、Ｉ２Ｃプロトコルを用いるデバイス２２、ＭＭＩＯによってアクセスするデバイス２ｋなどがあるが、他の種類のデバイスが用いられるとしてもよい。
【００２８】
ライブラリモジュール５は、デバイス２１〜２ｋへのアクセス方法ごとに用意されたデバイスアクセス用関数９１〜９ｍと、デバイスデータベース８へアクセスしデバイス情報３１〜３ｎを得るためのdevice_open関数１０、データ読み出しを行う場合にデバイスアクセス用関数を呼び出すためのdevice_read関数１１、データ書き込みを行う場合にデバイスアクセス用関数を呼び出すためのdevice_write関数１２を具備する。
【００２９】
ライブラリモジュール５は、デバイスデータベース８からデバイス情報を読み出し、デバイスへアクセスするためのプログラムコードである。ライブラリモジュール５は、例えば記憶装置４又は記憶装置７に記憶され、プロセッサによって実行されることにより実現される。
【００３０】
プログラム６は、情報処理装置１によって利用されるプログラムコードであり、ユーザによって生成される。プログラム６は、例えばドライバ、モジュールなどのような組み込み分野のプログラムである。
【００３１】
プログラム６は、device_open関数１０を呼び出し、device_read関数１１とdevice_write関数１２とのうちの少なくとも一方を呼び出す。
【００３２】
device_open関数１０の引数には、例えばアクセス対象のデバイスに対応するデバイス情報を指定するデバイス情報識別データ（名称、デバイス情報ＩＤ）が含まれる。device_open関数１０は、デバイス情報識別データを受け取り、デバイスデータベース８からデバイス情報を読み出し、この読み出されたデバイス情報を返す関数である。
【００３３】
このdevice_open関数１０は、デバイス情報を一意に識別するためのデバイス情報識別データを解析し、デバイス情報識別データに基づいて、デバイスデータベース８からデバイス情報を抽出する。
【００３４】
device_read関数１１及びdevice_write関数１２の引数には、例えばデバイス情報、相対アドレス、バッファのアドレス、アクセスする回数を意味するサイズ情報などが含まれる。
【００３５】
device_read関数１１及びdevice_write関数１２は、デバイス情報、相対アドレス、バッファのアドレス、サイズ情報を受け取り、デバイスアクセス用関数を選択し、選択さえたデバイスアクセス用関数を用いてデバイスへアクセスする関数である。
【００３６】
device_read関数１１及びdevice_write関数１２は、デバイス情報に基づいてアクセス対象のデバイスのアドレスを計算するユニット１５と、デバイス情報に基づいてデバイスアクセス用関数を選択するユニット１６とを具備する。
【００３７】
device_read関数１１及びdevice_write関数１２は、アクセス方法を示す識別子に基づいて分岐し、デバイスアクセス用関数を実行する制御プログラムを含む。アクセス方法を示す識別子は、デバイスアクセス用関数９１〜９ｍの中から、アクセス対象のデバイスへアクセスを行うデバイスアクセス用関数を選択するために用いられる。
【００３８】
デバイスアクセス用関数９１〜９ｍは、デバイスごと又はアクセス方法ごとに生成されたプログラムである。デバイスアクセス用関数９１〜９ｍは、アクセスに用いられるアドレスに基づいて、対応するデバイスへアクセスするための関数である。このデバイスアクセス用関数９１〜９ｍは、各種のデバイス２１〜２ｋへアクセスすることを目的とするデバイスアクセス用のプログラムモジュールである。
【００３９】
デバイス２１〜２ｋは、デバイスアクセス用関数９１〜９ｍによってアクセスされるデバイス、メモリ、レジスタなどの装置である。
【００４０】
ユーザは、プログラム６を生成する場合に、このプログラム６に基づいてアクセスされるアクセス先に対応するデバイス情報識別データを引数とするdevice_open関数１０を記述し、また、デバイス情報、相対アドレス、バッファアドレス、サイズ情報を引数とするdevice_read関数１１とdevice_write関数１２とのうちの少なくとも一方を記述する。
【００４１】
これにより、ユーザは、デバイス２１〜２ｋへのアクセス方法又はアドレスマップを意識することなく、各種のデバイス２１〜２ｋへアクセス可能なプログラム６を生成できる。
【００４２】
図２は、本実施の形態に係るデバイスデータベース８のバイナリファイル表現の一例を示す図である。
【００４３】
デバイスデータベース８は、ヘッダ１３、デバイス情報レコード群１４の２つの構造を持つバイナリファイルによって実現される。
【００４４】
ヘッダ１３は、ファイル識別子、デバイス情報３１〜３ｎのレコード数などの各種情報を含む。
【００４５】
ヘッダ１３に含まれる情報は、デバイスデータベース８を読み込む際のファイル判定、デバイスデータベース８外への不正なアクセスの防止などに用いられる。
【００４６】
デバイス情報レコード群１４は、複数のデバイス情報３１〜３ｎのレコードを含む。
【００４７】
図３は、本実施の形態に係るデバイスデータベース８の１レコードのフィールド構成の一例を示す図である。
【００４８】
デバイスデータベース８のデバイス情報レコード群１４には、この図３に示す構造のレコードが複数格納される。デバイス情報３１〜３ｎをデバイスデータベース８により管理し、ライブラリモジュール３がこのデバイス情報３１〜３ｎを取得可能とするために、デバイスデータベース８のレコードの構造は定義されている。
【００４９】
デバイスデータベース８のバイナリファイルが記憶装置４上に直接マッピングされた場合においてアクセス容易とするために、数値、文字列などはメモリ上に展開された場合と同じ状態で格納される。
【００５０】
本実施の形態において、デバイスデータベース８の１レコードは、例えば６４バイト固定長のバイナリ情報である。
【００５１】
レコードは、デバイス情報識別データ４１のフィールド、アクセス方法４２のフィールド、先頭アドレス４３のフィールド、末尾アドレス４４のフィールド、アクセス単位４５のフィールド、アドレス増分４６のフィールド、オプション４７のフィールド、フラグ情報４８のフィールドを具備する。
【００５２】
デバイス情報識別データ４１のフィールドには、デバイスへアクセスする際に用いるデバイス情報に割り当てられた最大３７文字の文字列（識別情報）が格納される。このデバイス情報識別データ４１は、デバイスデータベース８において検索キーとして用いられる。
【００５３】
アクセス方法４２のフィールドには、デバイスアクセス用関数９１〜９ｍのうちのいずれかを一意に識別するための数値が格納されている。ライブラリモジュール５は、デバイスアクセス用関数９１〜９ｍの中から、このアクセス方法４２の示すデバイスアクセス用関数を選択する。
【００５４】
先頭アドレス４３、末尾アドレス４４、アクセス単位４５、アドレス増分４６、オプション４７のフィールドには、デバイス２１〜２ｋへアクセスするためにデバイスアクセス用関数９１〜９ｍに利用される情報がそれぞれ格納される。
【００５５】
先頭アドレス４３のフィールドには、アクセス可能なアドレス範囲における先頭アドレスが格納される。
【００５６】
末尾アドレス４４のフィールドには、アクセス可能なアドレス範囲における末尾アドレスが格納される。
【００５７】
アクセス単位４５のフィールドには、１度のアクセスを行う単位（例えばビット長）が格納される。
【００５８】
アドレス増分４６のフィールドには、１度のアクセスで増加されるアドレスの増分が格納される。例えば、アクセス単位４５が３２ビットの場合、アドレス増分４６は４と設定され、アクセス単位４５が６４ビットの場合、アドレス増分４６は８と設定される。
【００５９】
オプション４７のフィールドには、デバイスアクセス用関数に渡される追加情報が格納される。追加情報は、アクセス方法に応じて設定される。
【００６０】
デバイスアクセス用関数９１〜９ｍは、先頭アドレス４３から末尾アドレス４４までのアドレス範囲に対し、アドレス増分４６の値だけアドレスをインクリメントし、アクセス単位４５の示す大きさのデータのアクセスを繰り返す。このアクセスの際、デバイスアクセス用関数９１〜９ｍは、デバイスアクセス用関数９１〜９ｍが独自に必要とする情報をオプション４７から引き出し、対応するデバイスへのアクセスを行う。
【００６１】
フラグ情報４８のフィールドには、アクセス許可属性（読み込み可能、書き込み可能）、エンディアン情報（例えばビッグエンディアン，リトルエンディアンなど）などの各種情報が格納される。フラグ情報４８は、アクセス属性のエラーチェック、データ表示を行う際の表示方法選択などに用いられる。
【００６２】
図４は、本実施の形態に係る情報処理装置１のライブラリモジュール５の処理の一例を示すフローチャートである。
【００６３】
ステップＳ１において、情報処理装置１のライブラリモジュール５は、デバイスデータベース８のレコードに割り当てられたデバイス情報識別データ４１を引数として、プログラム６に記述されているdevice_open関数１０を呼び出す。
【００６４】
これにより、情報処理装置１は、デバイスデータベース８から、デバイス情報識別データに対応するデバイス情報を取得する。
【００６５】
ステップＳ２において、情報処理装置１のライブラリモジュール５は、device_open関数１０によって得られたデバイス情報、デバイス情報の先頭アドレス４３と末尾アドレス４４で表されるアドレス範囲に対する相対アドレス、読み込むデータを格納するためのバッファのアドレス、アクセスする回数を表すサイズ情報を引数として、device_read関数１１を呼び出す。
【００６６】
または、ステップＳ２において、ライブラリモジュール５は、device_open関数１０によって得られたデバイス情報、相対アドレス、書き込むデータが格納されているバッファのアドレス、アクセスする回数を表すサイズ情報を引数として、device_write関数１２を呼び出す。
【００６７】
このステップＳ２によって、デバイスへのアクセスが実行される。
【００６８】
指定された相対アドレス又はアクセス属性（読み込み、書き込み）が不正であった場合、デバイスへの読み込み又は書き込みに失敗した場合などは、device_read関数１１又はdevice_write関数１２は、エラーステータスを返す。
【００６９】
ステップＳ３において、ライブラリモジュール５は、同じデバイス情報を用いたデバイスへのアクセスを継続するか否か判断する。
【００７０】
同じデバイス情報を用いたデバイスへのアクセスを継続する場合、処理はステップＳ２に戻る。同じデバイス情報を用いたデバイスへのアクセスが継続されない場合、処理は終了する。このように、一度、デバイス情報識別データを引数としてdevice_open関数１０を呼び出すと、このdevice_open関数１０によって取得されたデバイス情報を用いて、その後は何度でもdevice_read関数１１又はdevice_write関数１２の呼び出しを行うことができる。
【００７１】
図５は、本実施の形態に係るdevice_open関数１０の処理の一例を示すフローチャートである。このdevice_open関数１０は、デバイスデータベース８にアクセスし、デバイス情報３１〜３ｎのうち引数で特定されたデバイス情報を取得するための関数である。
【００７２】
device_open関数１０は、デバイスデータベース８内に記述されているデバイス情報識別データ４１を文字列として受け取り、対応するデバイス情報を返す関数である。
【００７３】
ステップＴ１において、device_open関数１０は、デバイスデータベース８内のレコードを識別するデバイス情報識別データ４１を、引数として受け取る。
【００７４】
ステップＴ２において、device_open関数１０は、引数として受け取ったデバイス情報識別データ４１をキーに用いてデバイスデータベース８を検索し、受け取ったデバイス情報識別データ４１に対応するレコードを取得する。デバイスデータベース８に対する検索方法は任意である。例えば、検索のために特別なデータ構造を用いる場合は図２のファイル構造を変更する。
【００７５】
device_open関数１０は、デバイス情報を取得した後、必要であれば、デバイス情報に基づいてステップＴ３に示すデバイスの初期化又は初期設定などを行う。
【００７６】
そして、ステップＴ４において、device_open関数１０は、取得されたデバイス情報を呼び出し側に返す。
【００７７】
図６は、本実施の形態に係るdevice_read関数１１の処理の一例を示すフローチャートである。
【００７８】
device_read関数１１は、指定されたデバイスアクセス用関数を呼び出すことで、指定されたデバイスへのアクセスを行う関数である。より具体的に説明すると、このdevice_read関数１１は、device_open関数１０によって取得されたデバイス情報と、読み込むデータを格納するためのバッファのアドレス、アクセスする回数を意味するサイズ情報を受け取り、アクセス先として指定されたデバイスへのアクセス後にステータスコードを返す関数である。
【００７９】
ステップＵ１において、device_read関数１１は、デバイス情報、相対アドレス、バッファのアドレス、サイズ情報を引数として受け取る。
【００８０】
device_read関数１１は、引数で与えられたデバイス情報２１のうち、アクセス方法４２、先頭アドレス４３、末尾アドレス４４、アクセス単位４５、アドレス増分４６、オプション４７、アクセス許可属性などのフラグ情報４８に基づいて、ステップＵ２〜Ｕ５を実行する。
【００８１】
ステップＵ２において、device_read関数１１は、先頭アドレス情報４３と相対アドレスとに基づいて、アクセス対象のデバイスのアドレスを算出する。
【００８２】
ステップＵ３において、device_read関数１１は、算出されたアドレス、デバイス情報、サイズ情報に基づいて、算出されたアドレスが、デバイス情報から求められるアドレス範囲に含まれているか否か、アクセス許可属性によって許可されているアクセスか否かなどのエラーチェックを行う。
【００８３】
エラーチェックの結果が不正の場合には、ステップＵ６に移り、エラーステータスを返して関数から抜ける。
【００８４】
エラーチェックの結果が正常の場合には、ステップＵ４において、device_read関数１１は、デバイス情報のアクセス方法４２から、デバイスアクセス用関数にあらかじめ割り振られている識別子を取り出し、この識別子の示すデバイスアクセス用関数を選択する。このステップＵ４では、デバイスへのアクセス方法ごとに用意されたデバイスアクセス用関数９１〜９ｍのうち、識別子の示すデバイスアクセス用関数への分岐が実行される。
【００８５】
ステップＵ５において、device_read関数１１は、選択されたデバイスアクセス用関数を呼び出し、実行する。デバイスアクセス用関数の実行によって、アクセス対象のデバイスに対する読み込み操作が実行される。なお、選択されたデバイスアクセス用関数は、デバイス情報に含まれているアクセス単位４５、アドレス増分４６、オプション４７を利用し、算出されたアドレスに基づいて、バッファとデバイスとの間のデータ転送を指定サイズ分だけ行う。
【００８６】
そして、ステップＵ６において、device_read関数１１は、ステータスを返して関数から抜ける。
【００８７】
図７は、本実施の形態に係るdevice_write関数１２の処理の一例を示すフローチャートである。
【００８８】
device_write関数１２は、選択されたデバイスアクセス用関数を呼び出すことで指定されたデバイスへのアクセスを行う関数である。より具体的に説明すると、このdevice_write関数１２は、device_open関数１０によって取得されたデバイス情報と、書き込みデータが格納されているバッファのアドレス、アクセスする回数を意味するサイズ情報を受け取り、アクセス先として指定されたデバイスへのアクセス後にステータスコードを返す関数である。
【００８９】
ステップＶ１において、device_write関数１２は、デバイス情報、相対アドレス、バッファのアドレス、サイズ情報を受け付ける。
【００９０】
device_write関数１２は、アクセス方法４２、先頭アドレス４３、末尾アドレス４４、アクセス単位４５、アドレス増分４６、オプション４７、フラグ情報４８に基づいて、ステップＶ２〜Ｖ５を実行する。
【００９１】
ステップＶ２において、device_write関数１２は、先頭アドレス情報４３と相対アドレスとに基づいて、アクセス対象のアドレスを算出する。
【００９２】
ステップＶ３において、device_write関数１２は、算出されたアドレスがデバイス情報から求められるアドレス範囲に含まれているか否か、アクセス許可属性によって許可されているアクセスか否かなどのエラーチェックを行う。
【００９３】
エラーチェックの結果が不正の場合には、ステップＶ６に移り、エラーステータスを返して関数から抜ける。
【００９４】
エラーチェックの結果が正常の場合には、ステップＶ４において、device_write関数１２は、デバイス情報のアクセス方法４２から、デバイスアクセス用関数にあらかじめ割り振られた識別子を取り出し、この識別子の示すデバイスアクセス用関数を選択する。このステップＶ４では、デバイスへのアクセス方法ごとに用意されたデバイスアクセス用関数９１〜９ｍのうち、識別子の示すデバイスアクセス用関数への分岐が実行される。
【００９５】
ステップＶ５において、device_write関数１２は、選択されたデバイスアクセス用関数を実行する。選択されたデバイスアクセス用関数の実行によって、アクセス対象のデバイスに対する書き込み操作が実行される。
【００９６】
そして、ステップＶ６において、device_write関数１１は、ステータスを返して関数から抜ける。
【００９７】
以上説明した本実施の形態に係る情報処理装置１は、アクセス可能なデバイスのデバイス情報３１〜３ｎを記録したデバイスデータベース８と、各種のデバイスへアクセスするためのデバイスアクセス用関数（プログラムモジュール）９１〜９ｍとを、それぞれ独立した状態で備えている。情報処理装置１は、デバイス情報３１〜３ｎの中から検索されたデバイス情報、デバイスアクセス用関数９１〜９ｍの中から検索された関数を用いて、指定されたデバイスへアクセスを行う。
【００９８】
これにより、例えば、本実施の形態においては、デバイスのアドレスアップ変更などのようなデバイス情報３１〜３ｎのみの仕様変更、デバイス情報３１〜３ｎのみのバグ修正に対して、プログラムモジュールの再コンパイル及び置き換えが必要なく、デバイスデータベース８の修正又は置き換えのみで対処可能である。
【００９９】
本実施の形態において、デバイス２１〜２ｋの全てのバージョンに対応するプログラム６を書く必要があり、各バージョンの間でデバイス情報３１〜３ｎのみが相違している場合には、デバイス２１〜２ｋのバージョンごとに用意したデバイスデータベース８を、プログラム６の実行前に１つ選択するだけでよい。したがって、ユーザによる組み込み分野のプログラム６の開発労力を軽減できる。
【０１００】
例えば、異なるプラットフォームで同じデバイスに対してアクセスする場合、アドレスマップは同一であるがアクセス方法が異なる場合がある。このような場合に、本実施の形態においては、デバイスアクセス用関数の置き換えを行い、アクセス方法４２の識別子のみを入れ替えたデバイスデータベース８を用いることで対処可能である。アクセス対象のデバイス情報が記録されているレコードは、修正前と同じデバイス情報識別データ４１によって識別されるため、情報処理装置１で使用されるプログラム６側が、プログラムコードを修正する必要はない。
【０１０１】
本実施の形態においては、同じアクセス方法によってアクセスされるデバイスが複数ある場合、作成すべきデバイスアクセス用関数は１種類のみでよく、アクセス方法が同じ各デバイスに対して専用のアクセス用プログラムを作成する必要はない。また、本実施の形態においては、既に開発済みのデバイスアクセス用関数と同じアクセス方法でデバイスをアクセスする場合、この開発済みのデバイスアクセス用関数を変更なしにそのまま流用できる。このため、本実施の形態においては、組み込み分野のプログラムについて移植性を向上させることができる。
【０１０２】
本実施の形態においては、デバイスデータベース８内のレコードをレジスタごとに作成することができ、それぞれのレコードに対してアクセス可能なアドレス範囲、アクセス単位４５、アクセス許可属性（読み込み可能、書き込み可能）を設定することができる。デバイスデータベース８内のデバイス情報３１〜３ｎを用いることで、情報処理装置１内でエラーチェックを自動的に行うことができる。このため、組み込み分野のプログラム６を生成する際に、個々のデバイス及びレジスタに対して最低限のエラーチェックを行うためのプログラムの記述を省略することができる。
【０１０３】
本実施の形態に係る情報処理装置１を利用してデバイス２１〜２ｋへアクセスするプログラム６は、システムが提供するＡＰＩ（Application Program Interface）を通してデバイス２１〜２ｋへアクセスする。これにより、情報処理装置１のユーザはどのようなデバイス２１〜２ｋに対しても同じ方法でデバイス２１〜２ｋへアクセスすることができる。したがって、プログラムコードの可読性および習得性を向上させることができる。
【０１０４】
本実施の形態に係る情報処理装置１で利用されるプログラム６、デバイスアクセス用関数９１〜９ｍ、デバイス情報３１〜３ｎを管理するデバイスデータベース８は、それぞれ独立して管理されている。したがって、本実施の形態においては、例えば、情報処理装置１に利用されるプログラム６をソフトウェア開発担当者が管理し、デバイスアクセス用関数９１〜９ｍをファームウェア開発担当者が管理し、デバイスデータベース８をハードウェア開発担当者が管理する、などのように、専門の担当者がソフトウェアを種別に応じて管理することが可能である。これにより、本実施の形態においては、管理が一極集中することを避けることができ、人員リソースを効率的に運用でき、開発作業を並列化することができ、工期を短縮できる。また、デバイス情報３１〜３ｎをハードウェア開発担当者が管理することにより、例えば開発中に検査が行われるＬＳＩなどのように、頻繁に仕様変更が行われるデバイスについて、仕様変更に応じてデバイスデータベース８の内容を迅速に変更することができる。ゆえに、保守性を向上させることができ、管理コスト及び時間コストを削減できる。
【０１０５】
本実施の形態において、デバイスデータベース８を簡単に閲覧可能にしておくことにより、デバイスデータベース８をデバイス２１〜２ｋに対する仕様書として用いることができる。仕様書に記録すべき情報を格納するためのフィールドをデバイスデータベース８に含めることで、デバイスデータベース８に基づいて仕様書を自動で生成することもできる。
【０１０６】
（第２の実施の形態）
本実施の形態においては、上記第１の実施の形態の変形列について説明する。
【０１０７】
図８は、本実施の形態に係るデバイスデータベース８の１レコードのフィールド構成の一例を示す図である。
【０１０８】
本実施の形態においては、デバイスデータベース８の各レコードに、ビットフィールド情報４９を格納するフィールドが追加されている。
【０１０９】
ビットフィールド情報４９は、アクセス単位以下のビットアクセスを行うためのビット情報である。このビットフィールド情報４９を用いることにより、情報処理装置１では、アクセス単位４５以下のデータをアクセス可能になる。
【０１１０】
ビットフィールド情報４９として、実際にデバイスデータベース８に格納される値には、以下の情報が考えられる。
【０１１１】
第１の例において、ビットフィールド情報４９は、ビットフィールドの下限ビットの位置（８ビット長）と上限ビットの位置（８ビット長）を含むとする。これにより、ビットフィールド情報４９は、ビットフィールドの範囲を特定可能である。
【０１１２】
例えば、ビットフィールド情報４９は、３２ビット整数に対するビットフィールド２７：１６→２７，１６(リトルエンディアン方式)と表現される。
【０１１３】
例えば、ビットフィールド情報４９は、３２ビット整数に対するビットフィールド２７：１６→４，１５(ビッグエンディアン方式)と表現される。
【０１１４】
第２の例において、ビットフィールド情報４９は、ビットフィールドの下限ビットの位置（８ビット長）とビットフィールド幅（８ビット長）、または、ビットフィールドの上限ビットの位置（８ビット長）とビットフィールド幅（８ビット長）を含むとする。これにより、ビットフィールド情報４９は、ビットフィールドの範囲を表現可能である。
【０１１５】
例えば、ビットフィールド情報４９は、３２ビット整数に対するビットフィールド２７：１６→１６，１２(下限と幅)と表現する。
【０１１６】
例えば、ビットフィールド情報４９は、３２ビット整数に対するビットフィールド２７：１６→４，１２(上限と幅)と表現する。
【０１１７】
本実施の形態に係るdevice_read関数は、読み出されたデータの中から、ビットフィールド情報で指定されているデータを抽出することで、ビットフィールドに対応するデータの読み出しを行う。
【０１１８】
本実施の形態に係るdevice_write関数は、アクセス対象のデバイスから書き込み対象のデータを一時的に読み出し、この書き込み対象のデータのうちのビットフィールド情報の示す部分を更新し、更新後のデータを再びアクセス対象のデバイスに書き込むことで、ビットフィールドに対するデータの書き込みを行う。
【０１１９】
図９は、ビットフィールドへのアクセスを含むdevice_read関数の処理の一例を示すフローチャートである。
【０１２０】
本実施の形態に係るdevice_read関数のステップＷ１〜Ｗ５，Ｗ７と、上記第１の実施の形態に係るdevice_read関数１１のステップＵ１〜Ｕ６とは、ほぼ同様である。
【０１２１】
本実施の形態においては、デバイス情報を用いてデバイスへアクセスするステップＷ５とステータスを返すステップＷ７の間において、ビットフィールドのデータを抽出するステップＷ６が実行される。
【０１２２】
ステップＷ４において、device_read関数は、デバイス情報内のアクセス方法４２の識別子を用いてデバイスアクセス用関数ごとに分岐する。
【０１２３】
ステップＷ５において、device_read関数は、デバイス情報内のアクセス方法４２に対して用意されたデバイスアクセス用関数を呼び出し、デバイスからデータを読み出す。
【０１２４】
ステップＷ６において、device_read関数は、デバイス情報に含まれているビットフィールド情報を利用し、デバイスから読み出されたデータの中から、このビットフィールド情報によって指定されているビットフィールドのデータを抽出し、バッファに格納する。
【０１２５】
図１０は、ビットフィールドへのアクセスを含むdevice_write関数の処理の一例を示すフローチャートである。
【０１２６】
本実施の形態に係るdevice_write関数のステップＸ１〜Ｘ３と、上記第１の実施の形態に係るdevice_write関数１２のステップＶ１〜Ｖ３とは、ほぼ同様である。
【０１２７】
ステップＸ４において、device_write関数は、デバイス情報内のアクセス方法４２の識別子を用いてデバイスアクセス用関数に分岐する。
【０１２８】
ステップＸ５において、device_write関数は、デバイスへのアクセス方法に対して用意されたデバイスアクセス用関数を呼び出し、デバイスからデータを読み出し、一時バッファに格納する。
【０１２９】
ステップＸ６において、device_write関数は、デバイス情報に含まれているビットフィールド情報を利用し、一時バッファに格納されたデータのうち、ビットフィールド情報によって指定されているビットフィールドのデータを書き換える。なお、書き換え後のビットフィールドのデータは、device_write関数が引数として受け取ったバッファアドレスに格納されているデータである。
【０１３０】
ステップＸ７において、device_write関数は、デバイス情報内のアクセス方法４２の識別子を用いてデバイスアクセス用関数に分岐する。
【０１３１】
本実施の形態においては、ステップＸ８が実行されると、選択されたデバイスアクセス用関数が実行され、一時バッファに書き込まれておりビットフィールドが書き換えられたデータが選択されたデバイスに対して書き込まれる。
【０１３２】
本実施の形態においては、デバイスデータベース８に含まれるフラグ情報４８内のエンディアン情報に基づいて、正しいエンディアンでビットフィールドに対する操作が実行されなければならない。
【０１３３】
以上説明した本実施の形態においては、デバイスデータベース内に各デバイスのビットフィールド情報が管理され、ビットフィールド情報を用いたデバイスアクセスを実現することができる。
【０１３４】
本実施の形態においては、ビットフィールドに対する操作をdevice_read関数及びdevice_write関数が実行するため、デバイスアクセス用関数９１〜９ｍの生成負担、保守負担を軽減させることができる。
【０１３５】
本実施の形態においては、レジスタに対するアクセスと同様の方法で、ビットフィールドをアクセスすることができる。このため、ビットフィールドをアクセスするために特別な操作を行う必要がない。したがって、ユーザは仕様変更に対応しやすくなる。
【０１３６】
本実施の形態においては、プログラム６内で、ビットフィールドをアクセスするための特別なプログラムコードを記述する必要がなく、ビットフィールドのアクセスを意識する必要もない。このため、ユーザは、プログラム６の作成の労力を軽減することができる。
【０１３７】
本実施の形態においては、レジスタ内の各ビットフィールドに対して、アクセス単位４５、アクセス許可属性を設定することができる。
【０１３８】
（第３の実施の形態）
本実施の形態においては、上記第１又は第２の実施の形態の変形例であり、デバイスデータベース８内のデバイス情報識別データを、レコード内に格納するのではなく、レコードとは別のテーブル内に格納する情報処理装置について説明する。
【０１３９】
図１１は、文字列テーブルを含むデバイスデータベースのバイナリファイル表現の一例を示す図である。
【０１４０】
本実施例におけるデバイスデータベース５０は、ヘッダ１３、デバイス情報レコード群１４、文字列テーブル５１の３つの構造を持つバイナリファイルである。
【０１４１】
本実施の形態に係るデバイスデータベース５０は、上記第１の実施の形態に係る図２のバイナリファイル構造に対して文字列テーブル５１が追加されている。
【０１４２】
文字列テーブル５１にはデバイス情報レコード群１４から参照される可変長の文字列が少なくとも一つ格納される。
【０１４３】
図１２は、本実施の形態に係るデバイス情報レコード群１４の１レコードの構造の一例を示す図である。この図１２においては、デバイス情報レコード群１４の１レコードが３２バイト固定長のバイナリ情報で構成されている。この図１２のレコード構造は、デバイス情報識別データ４１が文字列ではなく、文字列の格納された文字列テーブル５１内のアドレスである点で、上記第２の実施の形態に係る図８のレコード構成と異なる。文字列テーブル５１内の指定されたアドレスには、ＮＵＬＬ文字で終わる可変長の文字列が格納される。
【０１４４】
以上説明した本実施の形態においては、デバイスデータベース５０内の文字列をレコードとは別の文字列テーブル５１内に格納する。これにより、レコードサイズを削減でき、デバイスデータベース５０内に設定される文字列の長さを自由に変更できる。
【０１４５】
（第４の実施の形態）
本実施の形態においては、上記第１乃至第３の実施の形態の変形例であり、デバイスデータベースが木構造を持つ場合について説明する。
【０１４６】
本実施の形態において、デバイス情報を特定するためのデバイス情報識別データは、デバイスデータベース内に存在する１レコードを指すのではなく、デバイスデータベース内に存在する複数のレコードの組み合わせを指す。
【０１４７】
本実施の形態においては、デバイスデータベースの複数のレコードが木構造を形成し、この木構造における１つの「パス（経路）」を例えば文字列などで表記することにより、デバイス情報の組み合わせを特定する。
【０１４８】
本実施の形態に係る情報処理装置は、デバイスデータベースをFATやextのような一般的なファイルシステムと同じような木構造として使用し、デバイス情報を「パス名」で管理する。
【０１４９】
図１３は、本実施の形態に係るデバイスデータベースの１レコードのフールド構成の一例を示す図である。この図１３においては、デバイスデータベースの１レコードは３２バイト固定長のバイナリ情報で構成されている。
【０１５０】
子要素集合情報５２のフィールドには、レコードを階層化するために用いる子要素集合の先頭アドレス（先頭レコードのインデックス）が格納される。子要素集合情報５２は、レコード間を結びつけて木構造を形成するための情報である。
【０１５１】
フラグ情報４８は、アクセス許可属性やエンディアン情報に加え、レコード集合の終端を示すフラグを含む。
【０１５２】
図１４は、デバイスデータベースの木構造の一例を示す図である。この図１４において、デバイスデータベース５３のレコード５３１〜５３９は、木構造のノードで表現される。デバイスデータベース５３は、デバイス情報ツリーへの変換が可能である。
【０１５３】
本実施の形態に係るデバイスデータベース５３は、２次元テーブルを用いてレコード５３１〜５３９の木構造を表現している。デバイスデータベース５３は、レコード５３１〜５３９を含むデバイス情報レコード群を具備する。
【０１５４】
レコード５３１〜５３９は、それぞれ、インデックス「１」〜「９」、デバイス情報識別データ「nameA」〜「nameI」を含む。子要素集合を持つレコード５３１〜５３３，５３５は、それぞれ、子要素集合の先頭アドレス「４」「６」「９」「６」を含む。レコード集合の終端のレコード５３３，５３５，５３８，５３９は、それぞれ、レコード集合の終端を表すフラグ情報「ＥＯＧ」を含む。
【０１５５】
この図１４の左側に記載されているデバイスデータベース５３のバイナリ表現を、木構造で表現すると、右側のデバイス情報ツリーとなる。
【０１５６】
先頭のレコード又は子要素集合の先頭として指定されたレコードから、終端フラグＥＯＧを持つレコードまでの間にある連続したレコードの集合は、１つの要素集合を形成する。
【０１５７】
レコード５３１〜５３３，５３５が持つ子要素集合の先頭アドレスが有効な値の場合、このレコード５３１〜５３３，５３５は、子要素集合の先頭アドレスによって示される１つの要素集合を子として持つ。
【０１５８】
上記の図１４では、インデックス１〜３(nameA, nameB, nameC)のレコード５３１〜５３３は、第１の要素集合に含まれる。
【０１５９】
インデックス４，５(nameD, nameE)のレコード５３４，５３５は、第２の要素集合に含まれる。
【０１６０】
インデックス６〜８(nameF〜nameH)のレコード５３６〜５３８は、第３の要素集合に含まれる。
【０１６１】
インデックス９(nameI)のレコード５３９は、第４の要素集合に含まれる。
【０１６２】
レコード５３１は、第２の要素集合を子要素（下位要素）として持つ。
【０１６３】
レコード５３２は、第３の要素集合を子要素として持つ。
【０１６４】
レコード５３３は、第４の要素集合を子要素として持つ。
【０１６５】
レコード５３５は、第３の要素集合を子要素として持つ。
【０１６６】
本実施の形態においては、レコード５３２とレコード５３５とが、同じ第３の要素集合を子要素として持つ。
【０１６７】
本実施の形態に係る情報処理装置は、図１４のようなデバイス情報ツリーを用いて、デバイス情報の取得を行う。
【０１６８】
デバイス情報は、デバイス情報ツリーの根（ＲＯＯＴ）から子要素の方向にレコードをたどり、経路上のレコードを組み合わせることで得られる。
【０１６９】
例えば、{nameA}のような単体、又は{nameA，nameE，nameF}のような組み合わせによってデバイス情報が得られる。なお、デバイス情報の探索が、デバイス情報ツリーの根から開始されていない{nameE，nameH}又は{nameB，nameI}のような組み合わせでは、デバイス情報を得ることはできないとする。
【０１７０】
本実施の形態においては、上記のようなレコードの組み合わせを「パス」と呼び、レコードの組み合わせをコロン「:」で区切った表記を「パス名」と呼ぶ。
【０１７１】
例えば、{nameA，nameE，nameF}の組み合わせのパス名は、「:nameA:nameE:nameF」と表記される。
【０１７２】
本実施の形態に係るdevice_open関数は、デバイスデータベース５３からパス名に対応する経路に存在するすべてのデバイス情報のレコードを検索する。そして、本実施の形態に係るdevice_open関数は、パス名に対応するすべてのデバイス情報のレコードに基づいて、デバイスのアクセスに必要な情報を計算する。
【０１７３】
図１５は、本実施の形態に係るパス名を用いるdevice_open関数の処理の一例を示すフローチャートである。device_open関数は、デバイスデータベース５３をアクセスし、デバイス情報を取得する。
【０１７４】
上記第１の実施の形態に係る図５の処理と、本実施の形態に係る図１５の処理とを比較すると、上記図５におけるデバイス情報識別データを受け付けるステップＴ１と、デバイス情報を取得するために行っていたデバイスデータベース５３の検索ステップＴ２が、本実施の形態では、パス名を受け付けるステップＹ１と、パス名を用いてデバイス情報を算出するステップＹ２〜Ｙ４に入れ替わっている。上記第１の実施の形態に係る図５の処理のステップＴ４，Ｔ５と本実施の形態に係る図１５の処理のステップＹ５，Ｙ６は、ほぼ同一である。
【０１７５】
ステップＹ１において、device_open関数は、デバイス情報を特定するためのパス名を受け取る。
【０１７６】
ステップＹ２において、device_open関数は、引数として受け取ったパス名の解析を行い、パス名を各要素に分解し、レコード名称の集合を取得する。
【０１７７】
ステップＹ３において、device_open関数は、パス名に含まれていたレコードの要素に基づいて、デバイス情報ツリーを根から探索し、この探索経路上の各レコードの情報を収集する。
【０１７８】
ステップＹ４において、device_open関数は、デバイス情報ツリーの探索経路上のレコード（エントリ）の情報を、デバイスデータベース５３のフィールドごとに収集して計算し、デバイス情報を得る。例えば、収集された全てのレコードに含まれるアドレス情報が合計され、デバイスのアドレス情報が生成される。
【０１７９】
ステップＹ５において、device_open関数は、デバイス情報を生成した後、必要であればデバイス情報に基づいてデバイスの初期化や初期設定などを行う。
【０１８０】
ステップＹ５において、device_open関数は、デバイス情報を返す。
【０１８１】
以上説明した本実施の形態においては、デバイスデータベース５３の各レコードによって木構造が形成され、木構造をトレースするためのパス名を用いてデバイス情報が取得される。
【０１８２】
これにより、本実施の形態においては、デバイス、レジスタ、メモリ、ビットフィールドなどの上下関係を明確にすることができ、デバイスデータベース５３の管理を容易化することができる。
【０１８３】
さらに、本実施の形態においては、複数のデバイス情報が同一の情報を持つ場合に、複数のレコードに、同じ子要素を持たせることができる。例えば、同じ種類のデバイスを複数個利用する場合、各デバイスを意味するレコードに対して、同じ子要素を割り当てることができる。これにより、本実施の形態においては、各デバイスに対するレジスタマップを個別に生成する必要がない。本実施の形態においては、ベースアドレスのみではなく、アクセス方法、アクセス許可属性などの情報をデバイスごとに個別に設定することができ、同じアドレスマップを持つ異なる種類のデバイスを、同じように使用することができる。
【０１８４】
（第５の実施の形態）
上記各実施の形態におけるデバイスデータベースの各エントリには、任意のフィールドを追加することができる。デバイスデータベースのエントリに含まれる各フィールドのサイズは搭載するプラットフォームの特性に合わせて自由に設定可能である。
【０１８５】
例えば、デバイスデータベースの各レコードに、コメントを記述するための「自由記述」フィールドが追加される。これにより、デバイスデータベースのユーザは、デバイスデータベース内の構造を容易に理解することができる。
【０１８６】
例えば、デバイスへアクセスする際のクロック周波数を任意に設定可能なデバイスに対応するために、デバイスデータベースのレコードに、クロック周波数を記述するフィールドが追加される。
【０１８７】
なお、このような各種の情報は、各デバイス独自に持っている情報であり、オプションフィールドに格納されるとしてもよい。オプションフィールド内に格納される情報が多い場合には、オプションフィールドのサイズを８バイト、１６バイト、それ以上に設定することも可能であり、オプションフィールドを可変長としてもよい。
【０１８８】
（第６の実施の形態）
上記各実施の形態においては、デバイス情報を取得するdevice_open関数と、デバイスアクセス用関数を呼び出すdevice_read関数及びdevice_write関数とがそれぞれ独立した構成が採用されている。
【０１８９】
これに対して、本実施の形態においては、device_open関数とdevice_read関数とを一つにまとめた関数、及びdevice_open関数とdevice_write関数とを一つにまとめた関数について説明する。
【０１９０】
なお、以下においては、device_open関数とdevice_read関数とを組み合わせた関数について説明するが、device_open関数とdevice_write関数とを組み合わせる場合についても同様の手法を用いることができる。
【０１９１】
device_open関数とdevice_read関数とを組み合わせる場合においては、device_open関数を明示的に呼び出さず、device_read関数内の先頭でdevice_open関数が呼ばれる。
【０１９２】
図１６は、本実施の形態に係るdevice_read関数の処理の一例を示すフローチャートである。
【０１９３】
本実施の形態に係るdevice_read関数は、上記第１の実施の形態に係る図５及び図６の組み合わせに対応する。本実施の形態に係るdevice_read関数は、device_open関数の呼び出しを必要としない。
【０１９４】
ステップＺ１において、device_read関数は、デバイス情報識別データ（パス名）、相対アドレス、バッファアドレス、サイズ情報を引数として受け取る。
【０１９５】
ステップＺ２において、device_read関数は、デバイス情報識別データを用いてデバイスデータベース内を検索し、対応するレコードの情報を取得する。
【０１９６】
ステップＺ３において、device_read関数は、必要であれば、検索されたデバイス情報を用いて、デバイスの初期化、初期設定を行う。
【０１９７】
ステップＺ４において、device_read関数は、デバイス情報内の先頭アドレスと相対アドレスとに基づいて、アクセスするデバイスのアドレスを計算する。
【０１９８】
ステップＺ５において、device_read関数は、算出されたアドレス、デバイス情報、サイズ情報を用いて、アドレス、アクセス許可属性などのエラーチェックを行う。
【０１９９】
エラーチェックの結果が不正の場合には、ステップＺ８に移り、エラーステータスを返して関数から抜ける。
【０２００】
エラーチェックの結果が正常の場合には、ステップＺ６において、device_read関数は、デバイス情報２１のアクセス方法の識別子を用いて、デバイスアクセス用関数ごとへの分岐を実行する。
【０２０１】
ステップＺ７において、device_read関数は、選択されたデバイスアクセス用関数を呼び出し、実行する。
【０２０２】
そして、ステップＺ５において、device_read関数は、読み出しが正常に行えたか否かを示すステータスを返して関数から抜ける。
【０２０３】
（第７の実施の形態）
ライブラリモジュールから参照されるデバイスデータベースは、バイナリファイルの形式であることが効率面から望ましい。しかしながら、デバイスデータベースが編集される場合には、デバイスデータベースはバイナリファイルを用いて管理されなくてもよい。例えば、２次元テーブルのテキストファイル、表計算ソフトで作成された２次元テーブルをソースファイルとし、このソースファイルをバイナリファイル形式に変換することにより、ライブラリモジュールからバイナリファイル形式のデバイスデータベースへのアクセスを可能にしてもよい。同様に、既存のデータベースソフトウェアによって作成されたデバイスデータベースを情報処理装置内に組み込む際に、デバイスデータベースがバイナリファイルへ変換されるとしてもよい。
【０２０４】
（第８の実施の形態）
デバイスデータベースには、デバイスデータベースに対する検索に用いられるキーであるデバイス情報識別データが、レコードごとに格納されている。このようなデータ構造をデバイスデータベースが採用している場合、デバイス情報識別データをキーとしたレコードの検索は、レコード数に比例した時間がかかる。そこで、本実施の形態においては、より効率的な検索を行うために、デバイスデータベースは、例えば、ハッシュ、２分探索木、Ｂ木、Trieなどのデータ構造を持つとする。
【０２０５】
これらのデータ構造の中で最も簡単に実装できるのは２分探索木であるため、本実施の形態においては、２分探索木を用いた例を示す。
【０２０６】
２分探索木を用いたデバイスデータベースの検索を行う場合には、上記第１乃至第７の実施の形態で説明したレコードの構造を変更する必要はない。
【０２０７】
デバイスデータベースを作成する際に、「（要素集合内の）各レコードは、名称順にソートされる」という条件を追加するだけでよい。
【０２０８】
これにより、ソートされた配列内の要素に対する２分木探索を行うアルゴリズムと同様の方法で、ｌｏｇ2(レコード数)に比例した時間でレコード検索を行うことが可能となる。
【０２０９】
（第９の実施の形態）
上記各実施の形態においては、１つのバイナリファイルからデバイスデータベースが構成される場合について説明している。これに対して、本実施の形態においては、デバイスデータベースが複数に分割されたバイナリファイルを含むとする。これにより、バイナリファイルごとにバージョンの管理を行うことができるため、１つのレジスタ定義を修正することによってデバイスデータベース全体を作り直すことを回避することができる。
【０２１０】
第１の例では、上記図１４のデバイス情報ツリーで示す構造を持つバイナリファイルを分割する。
【０２１１】
バイナリファイルを分割する方法の１つの例として、デバイス情報ツリーの根の直接の子要素となっているノード(nameA，nameB，nameC)を、それぞれ別々のバイナリファイルに割り当てる方法が用いられる。この場合、ノード(nameA，nameD，nameE)と、ノード(nameB，nameF，nameG，nameH)、ノード(nameC，nameI)を別々のバイナリファイルで管理することができる。なお、この場合、レコードnameEからノード(nameF，nameG，nameH) へのリンクを張るのは不可能になる。
【０２１２】
第２の例では、デバイスデータベースにおける上記図１３の子要素集合情報５２のフィールドに格納される値の一部を、外部バイナリファイルにリンクするための識別子とする方法が用いられる。例えば、子要素集合情報５２の上位８ビットをバイナリファイルのインデックス、下位２４ビットを子要素集合の先頭レコードのインデックスとする。この場合、２５６個のバイナリファイルと、これらの中に含まれる約１６７７万個のレコードを使用可能である。どの要素集合をどのバイナリファイル内に格納するかは任意に設定できるため、自由度の高いファイル構成のデバイスデータベースを構築することができる。
【０２１３】
（第１０の実施の形態）
上記第６の実施の形態と同様に、仕様書に記録される情報を格納するためのフィールドをデバイスデータベースに用意し、デバイスデータベースを簡単に閲覧可能な状態とすることにより、デバイスデータベースをデバイスに対する仕様書として使用することができる。
【０２１４】
上記第７の実施の形態で説明したように、デバイスデータベースのソースファイルを用いる場合、バイナリファイル内に仕様書として用いられるフィールドを確保する必要はなく、ソースファイル上にのみ存在すればよい。
【０２１５】
これにより、ソースファイルが閲覧しやすい状態にあれば、ソースファイル自体をデバイスの仕様書として用いることができる。また、ソースファイル上に仕様書として必要な多くの情報が存在しても、バイナリファイルが必要以上に大きくなることを防止できる。
【０２１６】
本実施の形態においては、デバイスデータベースに基づいて、仕様書を自動的に生成することが可能である。情報処理装置は、デバイスデータベースのソースファイルをバイナリファイルへ変換する際に、バイナリファイルを生成するとともに、仕様書ファイルを出力する。これにより、簡単にデバイスの仕様書を作成することができる。情報処理装置は、ソースファイルに存在する余分な情報を削除し、仕様書として必要な情報のみを選択してレイアウトする。本実施の形態では、自由な書式の仕様書を作成することができる。
【０２１７】
（第１１の実施の形態）
図１７は、上記各実施の形態に係る情報処理装置のハードウェア構成の一例を示すブロック図である。
【０２１８】
情報処理装置５４は、１以上のプロセッサ５５、バス５６、記憶装置５７を具備する。
【０２１９】
プロセッサ５は、バス５６を経由して記憶装置５７、デバイス２１〜２ｋをアクセス可能である。プロセッサ５５は、上記各実施の形態で説明した様々な関数、プログラムモジュールを実行する。プロセッサ５５は、記憶装置５７、及び、デバイス２１〜２ｋをバス５６経由でアクセスしつつ、上記各実施の形態で説明した処理を実行する。
【０２２０】
記憶装置５７は、例えば記憶装置５，７として用いられる。
【０２２１】
デバイス２１〜２ｋは、情報処理装置５４に対して外付けの装置でもよく、内蔵されている装置でもよい。
【０２２２】
なお、情報処理装置５４は、外部からこの情報処理装置５４に対するアクセス及び操作を受け付けるインタフェースを備えるとしてもよい。
【産業上の利用可能性】
【０２２３】
本発明は、組み込み分野における低レベルプログラミングの技術分野に有効である。
【符号の説明】
【０２２４】
１，５４…情報処理装置、２１〜２ｋ…デバイス、３１〜３ｎ…デバイス情報、４，７，５７…記憶装置、５…ライブラリモジュール、６…プログラム、８，５０，５３…デバイスデータベース、９１〜９ｍ…デバイスアクセス用関数、１０…device_open関数、１１…device_read関数、１２…device_write関数、１３…ヘッダ、１４…デバイス情報レコード群、１５…アドレス計算ユニット、１６…選択ユニット、４１…デバイス情報識別データ、４２…アクセス方法、４３…先頭アドレス、４４…末尾アドレス、４５…アクセス単位、４６…アドレス増分、４６…オプション、４８…フラグ情報、４９…ビットフィールド情報、５１…文字列テーブル、５２…子要素集合、５３１〜５３９…レコード、５６…バス。
【図１】
2011065588.tif 000003
【図２】
2011065588.tif 000004
【図３】
2011065588.tif 000005
【図４】
2011065588.tif 000006
【図５】
2011065588.tif 000007
【図６】
2011065588.tif 000008
【図７】
2011065588.tif 000009
【図８】
2011065588.tif 000010
【図９】
2011065588.tif 000011
【図１０】
2011065588.tif 000012
【図１１】
2011065588.tif 000013
【図１２】
2011065588.tif 000014
【図１３】
2011065588.tif 000015
【図１４】
2011065588.tif 000016
【図１５】
2011065588.tif 000017
【図１６】
2011065588.tif 000018
【図１７】
2011065588.tif 000019