ARM Cortex-M Microcontroller startup files
Mike via Digitalmars-d
digitalmars-d at puremagic.com
Thu Apr 30 16:03:46 PDT 2015
On Thursday, 30 April 2015 at 20:45:28 UTC, Martin Nowak wrote:
>>
>> * Can ModuleInfo be leveraged, without introducing overhead,
>> to call
>> module constructors and static constructors? They might be
>> useful for
>> hardware initialization.
>
> Currently D sorts modules by initialization order,which
> requires every
> moduleinfo to contain an array of imported modules. Quite a lot
> of RAM
> for a nice to have feature, so we should drop it or at least
> provide a
> -fno-moduleinfo switch.
Agreed. Luckily -fno-emit-moduleinfo is already implemented, but
without a ModuleInfo implementation, this will be a required
switch to get a successful build.
>> * Is dynamic memory allocation a requirement of D, or a
>> library feature?
>
> Definitely a library feature, though many language features,
> like array
> appending, won't work without it (delegate closures won't even
> work
> without a GC).
Good!
>
>> * Does D need the C runtime, or can it init on its own?
>
> It shouldn't need a C runtime.
Good!
>
>> * Should the C standard library bindings be part of the
>> runtime, or
>> exist as an external Deimos library? Either way they can
>> still be used
>> by the runtime, I'm just suggesting that they should be
>> encapsulated.
>
> It doesn't cost you anything to include the bindings in a
> release, they
> could be maintained in a separate project if that helps.
Yes, that helps. There's already a project created in Deimos:
https://github.com/D-Programming-Deimos/libc
>
>> * What will be done about TypeInfo for now? It's causing me
>> some
>> serious code-bloat problems. See
>> http://forum.dlang.org/post/quemhwpgijwmqtpxukiv@forum.dlang.org
>
> Implement a -fno-rtti switch for GDC.
What about https://issues.dlang.org/show_bug.cgi?id=12270?
...perhaps in addition to -fno-rtti.
>
>> * Is data and bss initialization part of the runtime, or
>> delegated to
>> toolchain, silicon, and BSP vendors?
>
> We should provide appropriate linker scripts and do the
> initialization.
The linker script can give the location of the data and bss
segments. My question is really about whether or not the
druntime implementation should assume responsibility for loading
the data segment from flash and zeroing bss. I suppose that
should be left to the vendor's BSP, not part of druntime itself.
I guess what I'm trying to articulate is that currently when you
download an MCU toolchain, it contains a collection of things
from many different vendors (GCC, binutils, newlib, startup
files, linker scripts, multilibs, etc...), all in one package. I
recommend, not doing that with this druntime. druntime should
just be the implementation of D language features for
microcontrollers.
Once a minimal druntime is created, some other effort can take
that druntime and package it with a compiler, linker, startup
files, linker scripts, c standard library, debugger, flash
programmer, etc... and make a convenient downloadable/installable
package for immediate use.
Assuming that is an appropriate strategy, what does the first
druntime release look like.
* For example: What will `assert` do? Is that just a stub to be
implemented by the programmer?
* What are druntime's "syscalls" that need to be implemented by
the silicon vendor, BSP, and/or programmer (I'm using a newlib
port analogy here)? What does druntime do, and what does it
require its users to do?
My mind is currently seeing an object.d with some aliases and
some TypeInfo stubs, __entrypoint.d, and a minimal rt/dmain2.d.
That will give you a build and get you to main() for a trivial
program, but you'll start getting linker errors, and potentially
runtime errors, as you begin to employ more of D's features; even
the simple ones like `assert`.
That is one of the things that's making it difficult for me to
simply get a working language. druntime has features that really
seem to be more "standard library" features (e.g. `assert`), but
they are mingled with the language implementation. It,
therefore, makes it a challenge to get a build, separate
concerns, and delegate implementation to users.
Mike
More information about the Digitalmars-d
mailing list