ARM bare-metal programming in D (cont) - volatile
Mike
none at none.com
Wed Oct 23 23:59:09 PDT 2013
On Thursday, 24 October 2013 at 06:48:07 UTC, Walter Bright wrote:
> On 10/23/2013 11:19 PM, Mike wrote:
>> Thanks for the answer, Walter. I think this would be
>> acceptable in many (most?)
>> cases, but not where high performance is needed I think these
>> functions add too
>> much overhead if they are not inlined and in a critical path
>> (bit-banging IO,
>> for example). Afterall, a read/write to a volatile address is
>> a single atomic
>> instruction, if done properly.
>>
>> Is there a way to tell D to remove the function overhead, for
>> example, like a
>> "naked" attribute, yet still retain the "volatile" behavior?
>
> You have to give up on volatile. Nobody agrees on what it
> means. What does "don't optimize" mean? And that's not at all
> the same thing as "atomic".
>
> I wouldn't worry about peek/poke being too slow unless you
> actually benchmark it and prove it is. Then, your alternatives
> are:
>
> 1. Write it in ordinary D, compile it, check the code
> generated, and if it is what you want, you're golden (at least
> for that compiler & switches).
>
> 2. Write it in inline asm. That's what it's for.
>
> 3. Write it in an external C function and link it in.
Well, I wasn't rooting for volatile, I just wanted a way to
read/write my IO registers as fast as possible with D.
I think the last two methods you've given confirm my suspicions
and will work. But... I had my heart set on doing it all in D :-(
Thanks for the answers.
More information about the Digitalmars-d
mailing list