SQLite3 for TOPPERS/ASP SQLite3 for TOPPERS/ASPは、TOPPERS/ASPカーネル上でSQLite3を動作させられるように したものです。ASPカーネル以外のカーネルを用いる場合でも、無改造または若干の改造 で使用できるはずです。 【ベースとなったSQLite3のバージョン】 SQLite 3.7.15.2をベースとしています。 sqlite3.cおよびsqlite3.hにはまったく変更を加えていないため、他のバージョンでも そのまま使用できる可能性があります。 【動作確認に用いた環境】 Sourcery CodeBench Lite 2012.09-63 (GCC 4.7.2 + Newlib 1.18.0) もしくは Sourcery CodeBench Lite 2011.03-42 (GCC 4.5.2 + Newlib ????) KPIT GNUSH_v12.02 (GCC) (GCC 4.7 + Newlib ???) Cygwin 1.7.17 TOPPERS/ASPカーネル 1.7.0 at91skyeye_gcc簡易パッケージ (asp_at91skyeye_armcc-20120310.tar.gz) TOPPERS/ASPカーネル 1.7.0 apsh2a6a_gcc簡易パッケージ TOPPERSカーネル向けシミュレーション環境1.0.5 (skyeye_devm_package-1.0.5.zip) 【ファイル構成】 ./README.txt : 本ファイル ./sqlite3 ./sqlite3.h : SQLite 3.7.15.2 のヘッダー ./sqlite3.c : SQLite 3.7.15.2 のソース ./sqlite3_toppers.c : TOPPERSで動作させるための各種定義 ./sqlite3_toppers.cfg : TOPPERSで動作させるためのカーネルオブジェクト ./sample ./sample1.c : サンプルプログラムのCファイル ./sample1.cfg : サンプルプログラムのCFGファイル ./sample1.h : サンプルプログラムのHファイル ./libc ./libc_syscall.c : sqliteで使用するnewlib用の下請け関数. 【開発環境への依存状況】 - プロセッサアーキテクチャへの依存状況 sqlite3.cには、一部インラインアセンブラを用いたコードがある。しかし、それらは パフォーマンス計測用などであり、通常は使用しません。 それ以外は、特定のアーキテクチャに依存する要素はありません。 - コンパイラへの依存状況 sqlite3.cには、マクロ__GNUC__の定義状態によって条件付きコンパイルを行っている 個所が多数存在します。したがって、GCC以外のコンパイラにポーティングする場合は、 それらの個所を適切に修正する必要があります。 - ライブラリへの依存状況 sqlite3.cは、UnixまたはWindowsに依存した実装になっています。 SQLite3 for TOPPERS/ASPでは、sqlite3.cのUnix用のコードを使用し、必要に応じて Unixの機能をエミュレートすることで動作させています。 コンパイルするには、下記のヘッダが必要になります。 ・標準Cのヘッダ ・Unix依存ヘッダ また、標準関数に加えて下記のUnix依存関数(システムコール)に依存しています。 open close lseek kill getpid access getcwd stat fstat ftruncate fcntrl read write fchmod unlink mkdir rmdir fchown umask getuid geteuid sleep utimes fsync pthread_self pthread_equal pthread_mutex_init pthread_mutex_lock pthread_mutex_trylock pthread_mutex_unlock pthread_mutex_destroy これらの関数はsqlite3_toppers.cで最低限の実装を提供していますが、必要に応じて、 再実装するようにしてください。 【使用方法】 SQLite3 for TOPPERS/ASPは、次のように使用する. 1.sqlite3_toppers.c とlibc_syscall.c をコンパイル対象とする. 2.newlib(libc)をリンクするように -lc を指定する. 3.アプリのコンフィギュレーションファイルから,sqlite3_toppers.cfg を 読み込む. 4.アプリのCファイルからsqlite3.h をインクルードする. 【SQLite機能の制約】 SQLite3 for TOPPERS/ASPでは、インメモリデータベースのみをサポートしています。 したがって、sqlite3_open関数に渡すデータベース名には、必ず":memory:"を指定して ください。 ファイルを使うためには、open等のシステムコールを適切に再定義する必要があります。 また、sqlite3ext.hで提供されるAPIはサポートしていません。 【使用するカーネルリソース】 SQLite3 for TOPPERS/ASPでは、以下のカーネルリソースを使用する.使用す るカーネルリソースは次の通りである.これは sqlite3_toppers.cfg に定義 されている. セマフォ : 6個 【newlib(libc)の下請け関数】 SQLite3 for TOPPERS/ASPでは、newlib(libc)の下請け関数を幾つか用意する 必要があり,これらをターゲット毎に用意する必要がある. void *_sbrk_r(struct _reent *ptr, ptrdiff_t incr) void __malloc_lock (struct _reent *ptr) void __malloc_unlock (struct _reent *ptr) libc_syscall.c ではこれらのサンプル実装があり,それぞれ次のように実装 している. _sbrk_r() ・1Mの配列をグローバル変数として確保して,そこから領域を確保して返す. サイズを変更する場合は,HEAP_SIZE を変更すればよい. __malloc_lock() ・タスクコンテキスの場合は,ディスパッチ禁止によりロックを実現. __malloc_unlock() ・タスクコンテキスの場合は,ディスパッチ禁止によりロックを実現. 【コンフィギュレーション】 libc_syscall.c ・HEAP_SIZE ・sbrkで確保するメモリ領域のサイズの指定. sqlite3_toppers.c ・TOPPERS_SQLITE_OMIT_DEFAULT_SYSCALL ・UNIXのシステムコールの最低限の実装を使用しない. ・TOPPERS_SQLITE_OMIT_DEFAULT_TIME ・sqlite3_toppers.c における time() の実装を使用しない. ・TOPPERS_SQLITE_OMIT_DEFAULT_PTHREAD ・sqlite3_toppers.c における pthread 関連の関数の実装を使用しない. 以上