On Friday, 10 April 2015 at 00:05:29 UTC, Mike wrote:
On Wednesday, 8 April 2015 at 15:25:20 UTC, Jens Bauer wrote:

Question number 2: Is it possible to change the VectorFunc to be a real function pointer, rather than a void* ?

Can you successfully cast(ISR)&_stack ?

I don't know if that's a constraint of the language or a limitation of the current CTFE implementation, but either way, I never really liked it.
I don't really like typecasting myself, but I know a function pointer and a stack pointer are both pointers, thus they're the same size.

I know the C folks do this stuff all the time, but I think it's kinda janky.

True, but I need to write my files flexible, so that the majority of people will be able to use it out-of-the-box. I have to keep in mind that there are people who will make a part of their code in C during the transition phase, and I have to keep in mind that those who wrote the library in C, probably won't provide a complete library in D within the first week. ;)

I agree with you on the 'minimal' style. I too hate all the junk that's added. 'printf' has always been prohibited in my microcontroller code - I don't have a file system on my microcontroller; no screen, no keyboard and no harddisk, thus I don't want anything that has any connection to printf or a file system. ;)

Basically my startup.d will be very similar to the startup.s you already know (I translated my startup.s into a startup.c a long time ago - because I didn't want one for each type of assembler).

I know of two potential alternatives:
1)  Do it in the linker script (my current method):

Two things makes me little fond of this solution:
1: The "LONG" type. If it had been "PTR" or "UINT32", then it would be more attractive, but I do not expect those types exist. 2: I like people to be able to define the stack location inside the sources if they want to. That means: Typically the linker script will provide it, but some people need to move the stack, and I don't want them to need to change the linker script (if at all possible).

2) Use a union (See pp. 10 here:
This solution is probably more appealing to me.
I'll need to make some more tests.

My initial attempt was to create a function, which did the type conversion via a CTFE function, buuut it didn't like that the symbol was undefined and not a constant, so I'll have to make a few more attempts.

Thank you again for your valuable help. I hope that my fiddling will bring you something useful too. ;)

Reply via email to