> 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.