On Mon, Jan 30, 2012 at 9:20 AM, David Henry <dav...@zickel.net> wrote:
> This mail describes how I implemented SQLite3 on a resource limited > processor. The attached zip file contains sources and the IAR project > files. > Attachments are stripped from the mailing list. Please send me the ZIP file by private email and I'll make it available on the SQLite website. > > Any missing sources e.g. fatfs are part of the IAR IDE and are freely > available. > > > > Enjoy. > > > > Development Environment > > ======================= > > 1) Stellaris LM3S9B96 ARM processor, 256KB ROM, 96KB RAM, Stellaris > Peripheral Library in ROM > > 2) IAR IDE (you must use the licensed version because of code size. The > free > KickStart version is limited to 32 KB code) > > 3) SQlite3 Version 3.7.9 source > > 4) The file system is on a 4GB microSD controlled via the thirdparty/fatfs > code supplied with the IAR IDE. This allows > > file sizes up to 4GB and 8.3 filenames. > > > > SQLite Compilation Options > > ========================== > > SQLITE_THREADSAFE 0 // single thread > > SQLITE_DISABLE_LFS // no large file system > > SQLITE_OMIT_WAL > > SQLITE_OMIT_LOAD_EXTENSION > > SQLITE_DISABLE_DIRSYNC > > SQLITE_OMIT_VACUUM > > SQLITE_ENABLE_MEMSYS5 > > SQLITE_ENABLE_8_3_NAMES 2 // only 8.3 names > > > > SQLITE_DEFAULT_CACHE_SIZE 10 > > SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT 1000000 > > SQLITE_DEFAULT_PAGE_SIZE 1024 > > SQLITE_MAX_PAGE_COUNT 102400 // 1K = max database size 100M > > SQLITE_MAX_SQL_LENGTH 1000 // set by trial and error to avoid > corruptSchema messages > > YYSTACKDEPTH 20 > > > > Linker Options > > ============== > > Reserve 83KB RAM for SQLite MALLOC as shown by this excerpt from the linker > configuration file > > > > // > > // Define a region for the on-chip SRAM. > > // also reserve top 83K for sqlite malloc > > // > > // default is 96KB for application, this split gives 13K for app > > // and 83K for SQLite. Adjust as necessary > > // > > //define region SRAM = mem:[from 0x20000000 to 0x20017fff]; > > define region SRAM = mem:[from 0x20000000 to 0x200033ff]; > > define region SQLITEMALLOC = mem:[from 0x20003400 to 0x20017fff]; > > > > Stack size is set to 4K. Less than this caused processor FAULT interrupts. > > > > Implementation > > ============== > > My main program simply opens up a UART which connect to Hyperterminal on a > PC. > > An endless loop receives a line of SQL from hyperterminal and does an > sqlite3_exec on it. > > An empty line signals no more SQL and the database is closed by > sqlite3_close(). > > > > Before calling sqlite3_open(), prepare malloc as follows > > > > #define END_RAM 0x20017fff -- match these to SQLITEMALLOC above > > #define START_SQL 0x20003400 > > sqlite3_config(SQLITE_CONFIG_HEAP,START_SQL,END_RAM-START_SQL+1,32); > > // Also do the following to avoid "Out Of Memory" errors. > > sqlite3_config(SQLITE_CONFIG_LOOKASIDE,0,0); > > > > Posix Interface > > =============== > > A wrapper between Posix API e.g. open, close, fstat etc and the fatfs API > was written. > > The version I have is a work in progress. See apimap.c in the zip file. > > > > MSD.c does the file system initialize/mount stuff for the microSD card. > > SQLite3 Source Changes > > ====================== > > function sqlite3PagerOpen() tries to create a journal file by appending > "-journal" to the database name, in spite of the SQLITE_ENABLE_8_3_NAMES > option. I changed it to append "_j" and make sure that my database names > are > 6 characters or less. > > > > Performance > > =========== > > The compilation was optimized for balance between speed and size. Code and > RO data occupies 248KB of ROM. > > Two tables were created, table A having a primary key and table B having a > foreign key referencing the primary key in table A. > > An index was created for the foreign key in table B. > > > > 1000 rows were inserted into table A and 10000 rows to table B. > > > > Typical time to insert a row to table B, 160 millisec. > > Typical time to select a row from table B, selected by its indexed column, > 35msec. > > > > > _______________________________________________ > sqlite-users mailing list > sqlite-users@sqlite.org > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > > -- D. Richard Hipp d...@sqlite.org _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users