On Saturday, 25 April 2015 at 04:21:06 UTC, Martin Nowak wrote:
The STM peripheral library really sux, verbose boilerplate for
the simplest stuff and no type safety for the enums (find the
difference of GPIO_PIN4 and GPIO_PinSource4 via debugging).
I couldn't agree more. I especially hate the fact that pointers
have to be type-casted into uint32_t!
I know, I know.. It's always 32-bit on the Cortex-M
microcontrollers, but ... it would make it easier to make a
sandbox application or some test-suite running on a computer, if
not having to type-cast everything.
It's also really hard to setup all the startup files, linker
scripts and debugger configs.
In constrast we could provide a really amazing D experience on
those platforms.
D is really suitable for microcontrollers; especially because
classes no longer cost a payload of memory. This will allow us to
make neat User-Interface objects easily, where a minimal UI
library would be 5K in C++. I also hope that associative arrays
and strings will fit most microcontrollers. I know that there
might be problems, when we have little RAM available. I do not
know how little memory is realistic at the moment; here I'm
especially thinking about fragmentation and the use of the 'new'
keyword.
I hope to find a good way to use import for microcontroller
libraries, so it'll be easy for everyone. I'm thinking about
something like ...
import mcu.stm32f439.all
... and I'm hoping to have this in a shared location instead of
including the library in every source file like it's usually done
in C and C++ based projects. But I will wait and see what the
more experienced D)everlopers recommend. ;)
While I remember it ... I had to nullify a number of imports in
stdint. They simply do not belong in there. :)
Eg. I do not want FILE* if I aks for stdint. But FILE* is forced
upon me, because wchar_t includes it. What does a wchar_t need a
file-system for ?
Things like these might need a slight cleanup at some point
(because normally, you don't have a file system on a
microcontroller; thus you will get errors, when trying to import
a simple file like stdint).