Startup files for STM32F4xx

Jens Bauer via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Apr 25 01:52:48 PDT 2015


On Saturday, 25 April 2015 at 08:30:10 UTC, Rikki Cattermole 
wrote:
> On 25/04/2015 7:31 p.m., Jens Bauer wrote:
>>
>> Normally, one would want to import only the most necessary 
>> parts. Let's take an example: A microcontroller has USB, LCD 
>> controller, Ethernet, U(s)ART, SPI, CAN, I2S, I2C and also
>> supports SDRAM. -But the program being developed only
>> needs the LCD controller and the USART, so the Ethernet
>> should not be imported, because if it's seen by the linker,
>> the linker will include it in the final binary.

This is because some drivers implement interrupt routines, which 
are weak+alias by default and *always* referenced by the 
exception vectors.
Thus: In C: If you compile the C file containing the driver, the 
symbol will be found, and thus the code will be included in the 
final binary.

> If you have problems with too large a binaries, in D then it is 
> a bug in the compiler. Never used code, should not hit the 
> linker.
> Okay okay, it does happen. There is a trick with empty template 
> bracket which allows for this. But it is a work around.

It *should* happen (in this case).

Consider void ETH_Handler() to be referenced by my exception 
vector (which is just an array of function pointers).
If I do not import mcu.stm32f429.ethernet - then I will not get 
the driver.
If, however, I do import mcu.stm32f429.ethernet, then the 
function 'void ETH_Handler()' will be bulit and the linker will 
see it in one of the .o files, and it will include it in the 
final binary.

The developer can choose to use his own driver, because he's 
clever enough to write a better one than the one supplied by the 
vendor in this case. He then implements his own void 
ETH_Handler().

>> My current startup.d files do not support static constructors. 
>> static destructors are obsolete {...} main() never exits.
>
> You could definitely allocate the memory during linking. After 
> all e.g. drivers will be singleton right?

I think they will; I don't know if it will always be the case, 
but I currently can't think of a case where one would allocate a 
driver and then deallocate it, unless it's used only once for a 
short while.
This would be a rare case, and in such cases, I believe the user 
could probably solve it. ;)


More information about the Digitalmars-d-learn mailing list