D for embedded system
Timo Sintonen
t.sintonen at luukku.com
Sat Oct 20 01:23:19 PDT 2012
>
> Nobody has used GDC/D/druntime on a system without OS afaik. So
> you
> have to pioneer ;-)
So I have to try it on my own...
> * Create your own, simple runtime library. There's no real
> documentation on the minimum interface a runtime must
> implement (the
> compiler calls back into the runtime), so this would be a
> little
> tricky.
I have already made some tests:
I compiled a simple class without any library. The missing
symbols tell me what is the minimum that is expected to be in
Object class.
I tried to compile an empty Object class. There is some problems
because Object seems to be a reserved word in gdc. The biggest
problem is that gdc gets an internal error every time I try to
compile my own Object. If this is an unknown bug in gdc, I may
look it again. (an internal compiler error is always a bug, isn't
it?)
> * Adjust druntime. You can probably throw out 90% of the
> druntime code
I compiled object.d without imports and commented out everything
that failed the compilation. There is still some missing symbols
but I think this version would not work anyway.
I have a working glibc, newlib and my own minimum libc. So I
would follow the linux version as far as possible. Because Linux
is a reserved word I changed with sed all the linux version
checks to another word and got nearly all compiled. First time I
got over 400 lines of missisng symbols but I could see what
functions are expected from the c library.
>
>
> Your biggest
> problem is probably the GC and TLS.
To be more general, the library should have a minimum version
with no threads and gc and be configurable to have them. In
controller world resources are limited. We talk about kilobytes
when pc people talk about gigabytes. The advantage is that
everything is usually fixed and known at design time. Memory is
usually allocated once and kept as long as the device is
operating. The same is for threads. Threads are initiated at
startup and have only one instance. They keep running as long as
the device is operating. In the threading system I use now the
main loop of each thread is run once and at the end of the loop
control is returned to the scheduler which jumps to the next
thread.
So the application can run without gc and tls. On the other hand,
the amount of threads is known. It is even possible to hardcode
tls address for every thread if needed. Memory pool and stack are
also in fixed addresses and all pointers are available. So the
low level stuff would be quite simple. The biggest job is to get
it work with the higher level code.
More information about the D.gnu
mailing list