|
From: Anton S. <an...@so...> - 2012-03-18 17:45:02
|
I'm confused, or have miss-communicated. If you look again at what I
said, I explicitly said that __flash would imply const, not the other
way around. Of coarse you want to be able to have const types that
don't imply flash storage. And the examples I gave all used __flash,
not const. No where did I suggest that const should imply __flash.
Thanks,
Anton
On Sun, Mar 18, 2012 at 8:35 AM, Borja Ferrer <bor...@gm...> wrote:
> Heh I knew Eric was going to get a bit mad about what you said Anton xDD
>
> Anton, those examples you wrote work exactly the same way as you described.
> However you can't make that everything that is declared with const to mean
> that it comes from flash memory, because it may be a ptr to ram, it's not a
> safe assumption to do. That way, __flash has to be used explicitly, so the
> user is telling the compiler to change the storage of that piece of data
> from the generic address space to a custom one.
>
> Eric, about my decision of declaring variables always const, it is because
> they are really read-only by hardware, so writing to them is illegal and
> this way you're defining the data type as it should be, always readonly.
> Another reason is that by telling the compiler the data is not going to
> change throughout execution you benefit from a decent amount of
> optimizations and alias analysis, avoiding lots of memory reloads and many
> other goodies you get when using the const qualifier.
>
> Even if something is declared const, with a cast the constness can be
> removed and one could write to the variable, but I've added an error to
> handle this sort of behavior. In theory nobody should want to do this
> because it would be going against what flash memory does, so it would be
> more like wanting to trick the compiler, but erroring in this case would
> show it's robust and that you cant really trick it.
>
> 2012/3/18 Weddington, Eric <Eri...@at...>
>
>>
>>
>> > -----Original Message-----
>> > From: Anton Staaf [mailto:an...@so...]
>> > Sent: Saturday, March 17, 2012 2:15 PM
>> > To: Borja Ferrer
>> > Cc: avr...@li...
>> > Subject: Re: [avr-llvm-devel] Flash data
>> >
>> > Hmm, if __flash acts in the same way as const, as in it's a qualifier.
>> > Then could you make it a super set of const? In other words __flash
>> > implies const?
>>
>> No, no, no and no.
>>
>> One can have const data, but not want it in flash. And having const
>> imply a particular address space really does violate the C standard.
>>
>> However, what I do question is if the user writes __flash, are they
>> really required to use const? It seems implicit in the use of __flash.
>>
>> Eric Weddington
>
>
|