BeeOS - A small
multitasking RTOS for the HC12.
Browse the doxygen documentation here.
2004/04/10:
Pre-emptive Real Time scheduler. Data structures are bloated, working
on reducing the scheduler. Working on a Dragon12 EVB (kinda).
Progress as of 2004/03/06:
These are very early days. Please go away.
Library stuff - in general, no attempt has been made to make these
compatible with traditional POSIXish libc functions. In fact, all the
functions listed below are actually pre-pended with the letter 'b' (eg.
bprintf()) to emphasize this point.
- malloc()/free(): fast bitmap-based allocation/free
- remalloc(): intelligent; can claim adjacent memory without
copy/clear/free if possible
- remalloc() can be disabled at build time
- realloc part of malloc() can be disabled at build time
- printf(): supports integer printing: binary, octal, decimal, hex.
- zero padding
- thousand grouping
- plus signs
- num2string() function is exported & usable outside bprintf.c
- can disable padding/grouping/sign integer printing
features at build time saving code space
- eg:
printf("Binary number: %08'+B.\n", number);
- splint annotations: mostly "done", still experimenting.
- scheduler: still designing, implementing... pre-emptive
multitasking, hopefully.
Below is some output from the elf binary profiling tool "bytewise". It
is nothing more than a perl script front-end for gdb. Check out the
files section at http://sourceforge.net/projects/beeos
for the download.
Current project status (all features enabled):
main.c, 0x4000..0x4277 = 631
bytes.
Address Length Symbol
0x4000 298 _start
0x412a 106 lbdrv_chg
0x4194 210 btnscan_chk
0x4266 17 misc
Total: 631 bytes.
vectors.s, 0x4277..0x4278 = 1
bytes.
Address Length Symbol
Total: 0 bytes, 1 bytes unaccounted for (1 bytes
actual).
bctype.c, 0x4278..0x42ee = 118
bytes.
Address Length Symbol
0x4278 32 bisnum
0x4298 50 bishex
0x42ca 36 bisalpha
Total: 118 bytes.
bbit.c, 0x42ee..0x439c = 174
bytes.
Address Length Symbol
0x42ee 59 bitnclr
0x4329 56 bitnset
0x4361 59 bitncheck
Total: 174 bytes.
bstring.c, 0x439c..0x4468 = 204
bytes.
Address Length Symbol
0x439c 37 bstrlen
0x43c1 74 bstrncpy
0x440b 38 bmemset
0x4431 55 bmemcpy
Total: 204 bytes.
bprintf.c, 0x4468..0x496d = 1285
bytes.
Address Length Symbol
0x4468 32 putchar
0x4488 42 bputs
0x44b2 635 int2stringpadded
0x472d 495 bvsnprintf
0x491c 33 bsnprintf
0x493d 48 bprintf
Total: 1285 bytes.
exec.c, 0x496d..0x51eb = 2174
bytes.
Address Length Symbol
0x496d 220 task_dumpinfo
0x4a49 240 create_task
0x4b39 87 unlink_time
0x4b90 87 unlink_prior
0x4be7 57 find_priority_lte
0x4c20 91 find_nextrun_lte
0x4c7b 102 insert_task_prior
0x4ce1 102 insert_task_time
0x4d47 101 addtask
0x4dac 108 bsleep
0x4e18 22 context_save2
0x4e2e 22 context_restore2
0x4e44 113 now_cmp
0x4eb5 79 find_imperative_task
0x4f04 113 find_urgent_task
0x4f75 234 task_select
0x505f 78 isr_exec_stuff
0x50ad 214 isr_exec
0x5183 60 execprep
0x51bf 44 exec_idle
Total: 2174 bytes.
bmalloc.c, 0x51eb..0x5512 = 807
bytes.
Address Length Symbol
0x51eb 53 bmallocinit
0x5220 91 bfree
0x527b 509 bmalloc
0x5478 154 bremalloc
Total: 807 bytes.
sort.c, 0x5512..0x55b6 = 164
bytes.
Address Length Symbol
0x5512 164 bubblesort
Total: 164 bytes.
sci.c, 0x55b6..0x566d = 183 bytes.
Address Length Symbol
0x55b6 131 sci0_init
0x5639 28 sci_tx
0x5655 24 sci_rx
Total: 183 bytes.
ect.c, 0x566d..0x5693 = 38 bytes.
Address Length Symbol
0x566d 38 ect_init
Total: 38 bytes.
crg.c, 0x5693..0x56a9 = 22 bytes.
Address Length Symbol
0x5693 22 rti_init
Total: 22 bytes.
TOTAL: 5800 bytes, 1 bytes
unaccounted for (5801 bytes actual).