> Wiadomość napisana przez David Brown <david.br...@hesbynett.no> w dniu 
> 25.02.2019, o godz. 18:19:
> 
> On 25/02/2019 18:09, Łukasz Kostka wrote:
>> 
>> 
>>> Wiadomość napisana przez David Brown <david.br...@hesbynett.no> w dniu 
>>> 25.02.2019, o godz. 08:43:
>>> 
>>> 
>>> On 24/02/2019 18:29, Łukasz Kostka wrote:
>>>>> Wiadomość napisana przez David Brown <david.br...@hesbynett.no> w dniu 
>>>>> 24.02.2019, o godz. 14:58:
>>>>> 
>>>>> 
>>>>> 
>>>>> On 24/02/2019 14:47, Łukasz Kostka wrote:
>>>>>>> Wiadomość napisana przez David Brown <david.br...@hesbynett.no 
>>>>>>> <mailto:david.br...@hesbynett.no>> w dniu 24.02.2019, o godz. 12:13:
>>>>>>> 
>>>>>>> 
>>>>>>> This sort of thing has been an issue for all sorts of small 
>>>>>>> microcontrollers, and all their compilers, since their inception.  It 
>>>>>>> is not solvable in an ideal way that gives maximal convenience to 
>>>>>>> programmers and still results in efficient code.  The only good 
>>>>>>> solution is to move away from such cpu designs - there are very few 
>>>>>>> reasons for choosing a core such as the AVR rather than an ARM, MIPS or 
>>>>>>> RISC-V alternative.  (You might choose the AVR device for its 
>>>>>>> peripherals, or pin package, or power usage - but not for its core.)
>>>>>> Yes I know that AVR are old architecture.
>>>>>> I will move sooner or later to RISC-V or ARM. In fact bought some board 
>>>>>> from sparkfun.
>>>>>> Does it mean that in newer cpu designs storing read only variables in 
>>>>>> flash is easier than in AVR ?
>>>>> 
>>>>> Most 16-bit and 32-bit cpus have a single address space.  Since the same 
>>>>> instructions are used to access data whether it is in ram or flash (or, 
>>>>> in most cases, IO register areas), there is no longer any issue.
>>>>> 
>>>>> The AVR uses different instructions for accessing data from flash and 
>>>>> from ram, which is what causes the complications.
>>>> Thx for clarification
>>>> BTW. Do you know if any ARM cortex or RISC-V provide such instructions to 
>>>> access data in flash / rodata ?
>>> 
>>> No, neither ARM nor RISC-V has instructions to access data in flash or 
>>> read-only data - that is /precisely/ the point.  Such data is accessed 
>>> exactly like ram data and any other data, using the same instructions and 
>>> from the same single flat memory space.
>> Aha :-) So I just declare variable static const and voila. Well that is 
>> great. Another strong paint to migrate to newer platforms.
>> 
> 
> Exactly, yes.  (Or you can use non-static const if that is more
> appropriate.)
> 
> With the AVR, you can also use "const" like normal - but the data will
> be allocated a space in ram and copied over from flash to ram at
> startup.  That way it can be read like any other data, without special
> consideration, address spaces, pgm_read_byte, etc.  But of course, it
> takes up space in ram - so it is fine for small constants, but perhaps a
> waste of valuable ram resources for tables or strings.
> 
> And remember that on any target, if you have "static const" data and the
> compiler can figure out that the data can be used directly for
> calculations, immediate data, etc., and no storage is necessary, then no
> storage will be allocated (in ram, flash, or anywhere else).
Thx again for clarification.

Reply via email to