OS11 - RTOS for 68HC11
OS11 is a set of collaborating modules for the 68HC11 CPU that provides OS-called (or SWI / FCB for users of third-party assemblers) functions that allow, among other things, for simple to use pre-emptive or cooperative multi-tasking. Full assembly-language source-code is available in case you want to modify for your needs. It is sold separately (check our pricelist) or bundled free of charge (object code only) with our F1 Board and is free of royalties for object code use for either personal or commercial projects. Not a fully blown operating system in the sense that rarely used "features" that many people find confusing yet unnecessary for most applications are not present saving precious memory. But make no mistake, this is a very powerful RTOS.
OS11 does provide most of the functionality of larger RTOS but with:
- Less overhead
- A simpler interface
- A smaller memory footprint.
OS11 is being used in real-world applications with excellent results, and it is constantly improved.
A free cut-down version of the multitasker for hobby or personal use is available. This is a binary version (S19 file) with several limitations but usable for small projects. Ask for your copy now.
NOTE TO OUR CUSTOMERS: Current version is 1.18. Request your free update from firstname.lastname@example.org. You must include the registration name found in your copy of ASM11 that came with OS11 to verify your request.
Each function is fully documented and there is also example code in source form to demonstrate how to use the various system calls. OS11 is expected to continuously evolve and registered users will be eligible to receive free updates as they become available. To use with most systems (such as our F1 Board) all you have to do is #INCLUDE a certain file in the beginning of your programs, then use a set of simple rules for writing your code in such a way that it doesn't conflict with the RTOS. In addition to the modules already available for free within the freeware version of ASM11, you get:
- A registered version of the latest non-freeware ASM11 (Dos, Win, Linux-386).
- MTOS.MOD is a pre-emptive or co-operative round-robin multitasker. You can add/run/restart/suspend/resume/kill/waitfor from 1 to 255 tasks. You can also give up remaining time slice. In pre-emptive mode, it uses user-defined TOC (TOC4 by default) interrupts leaving the special TOC1 (optionally) and RTI interrupts free for your own use. Semaphore locks are available for tasks to gain exclusive access to resources without disabling interrupts. Message passing is available through a separate module. Up to 255 dynamically assigned concurrent tasks can be executing at any one time. Static and dynamic task slots (dynamic allows for an infinite number of thread-like tasks to share any available task slots).
- MESSAGES.MOD is a simple queued messaging module to provide simple IPC for MTOS based applications. Send byte message streams to a specific or any task. Receive message from specific or any task. Check if a message is waiting. Useful to implement pipes.
- An RTI module that lets you set up multiple callout functions that get called by priority when their specified time elapses. Can be used independently or in conjunction with MTOS.MOD to allow a timed execution of tasks. For example, you can have the RTI module set up a task to run every five seconds, a second task every half-second, a third task once after one minute, and so on.
- IO.MOD provides a unified Input / Output subsystem for SCI(s), LCD, A/D KEYBOARD or user-defined I/O.
- COMMAND.MOD Command Processor. This subsystem lets you write subroutines that are called automatically when the user gives the appropriate commands via the SCI. Commands are parsed and executed automatically. Commands may even ask for whatever command-line arguments they require. Also, NMEA.MOD is a variation of the command processor for GPS NMEA strings with automatic CRC screening of valid commands.
- LCD.MOD (bit-banging) and LCD_F1.MOD (bus) -- L1672 LCD driver routines specifically for the LCD port of the ASPiSYS F1 board, or the WSI DK68HC11 Development Kit, or other compatible hardware that has a memory-mapped LCD. Simple OS-call interface.
- VLCD.MOD -- Virtual LCD uses RAM space to store the LCD display which is updated asynchronously via a separate task under the RTOS.
- A 68HC68T1 real-time clock module for controlling reading from or writing to a 68HC68T1 chip via SPI. Includes a function to automatically determine the day of week based on date (for any 20xx year).
- A simple SORT module that sorts 16-bit values or ASCIZ string pointers.
- VECTORS.MOD lets you set up soft vectors in RAM and update them via OS calls. This allows for writing debugging software or for using multiple handlers for the same interrupt sources.
- ANSI.MOD provides functions for ANSI command sequences.
- BITS.MOD provides functions for setting/clearing bits by position in multi-byte variables, rotating multiple bytes a number of bit positions, etc.
- DOW.MOD day-of-week calculator based on YYMMDD.
- SCI_INT.MOD and SCI.MOD provide interrupt-driven and polled mode hardware SCI drivers. SCI_INT.MOD is capable of optionally recognizing hardware (RTS/CTS) and/or software flow control (X-On/X-Off).
- SCI_TX.MOD and SCI_RX.MOD provide a secondary interrupt-driven buffered SCI with hardware bps accuracies using one IC (RX) and one OC (TX) pin and corresponding interrupts. Unlike the built-in hardware SCI, these modules allow you to:  Set the transmitter and receiver to different bps rates,  use truly any bps rate within the limits of the CPU speed, without needing to match a specific crystal frequency.
- QUEUE.MOD provides a queue data structure.
- STACK.MOD provides a stack data structure (not related to the hardware stack).
- ATMEL.MOD for erasing/reading/writing Atmel 28C256 compatible EEPROM/Flash.
- EEPROM.MOD for erasing/reading/writing internal EEPROM.
- MMC.MOD for reading/writing to MMC cards (no filesystem).
- STRINGS.MOD provides calls for basic string manipulation (e.g., Insert, Delete, Length, etc.)
- BIGMATH.MOD for minimum to very big length unsigned math operations (e.g., multiply from 1-byte to 127-byte long numbers), shift left/right, rotate left/right, copy, zero, test for zero, add, subtract, divide, compare, in-place multiply by any byte or the value 10, convert binary to ASCIZ, convert ASCIZ to binary (all these for up to 255-byte long numbers), replace leading zeros with spaces, trim leading zeros/spaces (unlimited). A very handy utility for 'serious' computations.
- Practically all calls in all modules are coded fully re-entrant for safe use under the MTOS.
- Documentation in PDF.
- Example code.
- Improved versions of older freely available modules, such as MEMDUMP.MOD etc.
Design and Development of Electronics and Software Systems