Need help making minimal bare metal ARM Cortex-M D program
Mike
none at none.com
Sun Nov 24 05:00:37 PST 2013
I am very new to D, but I finally got my toolchain compiled and
working. I'm using LDC. I failed with GDC and eventually gave
up.
I am trying to get an _extremely_ minimal bare metal ARM Cortex-M
HelloWorld-type program (no phobos, no runtime, nothing but what
I type myself) compiled and executed on my STM32F4-based
hardware. I know the toolchain is buggy for arm right now, but
I'm hoping I can do something about that if I can just get
started.
Here's the basic C code and linker script for my hardware. It
doesn't actually print "hello world". I intend to add that after
I get the following code compiled and downloaded to my hardware.
/***************************
* start.c
****************************/
// defined in linker script
extern unsigned long _stack_end;
void handler_reset(void)
{
//Print hello world using SWI
}
__attribute__ ((section(".interrupt_vector")))
void (* const table_interrupt_vector[])(void) =
{
(void *) &_stack_end,
handler_reset
};
/***************************
* linkerscript.ld
****************************/
MEMORY
{
CCRAM (rxw) : ORIGIN = 0x10000000, LENGTH = 64k
SRAM (rxw) : ORIGIN = 0x20000000, LENGTH = 128k
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 1024k
}
_stack_end = ORIGIN(CCRAM) + LENGTH(CCRAM);
SECTIONS
{
.isr_vector :
{
. = ALIGN(4);
KEEP(*(.isr_vector))
. = ALIGN(4);
} >FLASH
.text :
{
. = ALIGN(4);
KEEP(*(.interrupt_vector))
*(.text)
*(.text*)
*(.rodata)
*(.rodata*)
. = ALIGN(4);
} > flash
}
Can anyone out them tell me if/how this can be accomplished in D?
Is there some syntax equivalent to __attribute__
((section(".interrupt_vector")))?
Would the following give me a minimal reset_handler?
// compile with: ldc2 -c -nodefaultlib -noruntime
module reset_handler;
extern(C) __gshared void * _Dmodule_ref;
extern(C) void reset_handler()
{ }
I've seen some examples out on the web, but they all either use
C, or are written specifically for an x86/x86_64 platform. So
any help you could provide would be great to help me get started.
More information about the Digitalmars-d
mailing list