A Scheme Interpreter for ARM Microcontrollers: Bugs and "Features"
Known Bugs and "Features"
- First Use:
Versions: 00.0241, 00.0250.
On MCUs supporting flash libraries, it may be necessary to erase all library
flash on first use after this snapshot has been installed (before adding
new libraries to the system). This can be done with the command (erase -536870912)
or (erase-libs) in 00.0250.
If the system was used before, with a previous version of ArmPit Scheme, it may
also be necessary to erase all file flash, with: (erase) if those files encroached
into the top of the library space (for systems where files and libraries share a
single flash space).
- Erasing Flash Libraries:
Versions: 00.0241, 00.0250.
When erasing flash libraries using (erase -1), (erase -2) ... (erase -536870912) on a
running system (on MCUs supporting such libraries), it is recommended
to first de-import all imported libraries by using: (import). The remaining (non-erased)
libraries can then be re-imported, preferrably after a system reset.
- On-board flash writing on SAM7-H256 and STR-H711:
Versions: 00.0250 (and possibly prior versions).
Writing large files to flash on the SAM7-H256 and STR-H711 is unreliable (possibly due
to the age of the chips used in developing the system).
For example, loading the ARMSchembler form SD-card on these boards frequently leads to
the onboard flash controller freezing.
Small sized writes, or writes with ample wait between pages (256 bytes) appear unaffected.
- Empty lists on OMAP3530:
Versions: 00.0241 (corrected in 00.0250).
On the OMAP 3530, a failed test for null lists (in the parser) made it
impossible to read empty lists and functions with no input arguments
(00.0241 only).
This has been corrected in 00.0250.
- Onboard flash on LPC-1768:
Versions: 00.0241 (corrected in 00.0250).
Some NXP LPC-1768 silicon has an undocumented non-writable flash sector
(second from top of flash).
ARMPit uses the top of flash for libraries (growing downwards) and this un-writable
sector is now avoided, such that, for example, the ARMSchembler and compiler can
now be properly installed (eg. by loading from an SD-card) on those non-standard
LPC-1768 MCUs.
- Importing libraries from within a file:
Versions: 00.0241 (corrected in 00.0250).
In 00.0241, libraries could not be imported from code loaded from a flash-stored
scheme code file (without a workaround) because of the way ARMPit Scheme wrote
tokens to ports: tokens were written followed by a space and a back-space.
The space-back-space combinations were then incorrectly interpreted as being part
of the library name when such a name was read from file.
This has been corrected in 00.0250 where no space-back-space follows written tokens
(and spaces, where needed, now have to be written explicitly, eg. (display #\space)).
- Parsing expressions that are not separated by a space or newline:
Versiosn: 00.0250 (and possibly prior versions).
The ARMPit Scheme parser requires top-level expressions to be separated by
spaces or newlines (newlines at the rep, spaces or newlines in files).
An error is now returned when this is not the case, for example:
(+ 1 2)(+ 3 4) ; without spaces -> (parse throw ?exp).
A lack of space is however ok within (i.e. inside) top-level expressions, for example:
(* (+ 1 2)(+ 3 4)) ; -> 21.
This is important in 00.0250, where spaces are no longer automatically written between tokens.
The programmer has to explicitly add spaces or newlines between top-level expressions
written to file or they won't be read back properly
(see end of ChangeLog also for details of a last minute modification related to reading code from file).
- Quoted library forms:
Versiosn: 00.0250 (and possibly prior versions).
Reading a quoted library form (eg. '(library (wawa) ...)) leaves the system in library-parse-eval
mode (i.e. non-null value on (_GLV) at index 14).
Subsequent evaluations take place in a reduced library environment.
The item at index 14 in (_GLV) has to be reset to null manually in this case, if possible
(otherwise, reset the chip).
It is recommended to not quote library forms.
To write a library form to an on-chip file, if needed, use a sequence of operations such as:
(write-char #\( port) (write 'library port) (display #\space port) (write '(lib name) port)
... (write-char #\) port).
- General:
Versions: 00.0250.
There are no other known new Bugs and "Features" (or corrected bugs)
in this release relative to release 00.0241.
Please consult the Change Log to identify other bugs that may have been fixed.
Last updated June 18, 2011
bioe-hubert-at-sourceforge.net