In the meantime, getting an updated libc from elsewhere than the apt repos is 
an option?

C

> On Nov 11, 2015, at 11:40 AM, Matthias Urlichs <matth...@urlichs.de> wrote:
> 
>> On 11.11.2015 13:42, Johan Ström wrote:
>> Also try to search for pgm_read_ptr_near and/or pgm_read* in the include
>> files which your avr-libc package installs (check with your package
>> manager how to list installed files).
> 
> There seem to be some somewhat-incompatible and probably incompletely
> updated/patched AVR libc packages floating around, and Ubuntu LTR14
> appears to have caught one of them.
> 
> It's all in /usr/lib/avr/include/avr/pgmspace.h.
> 
> The complete code from that file, as far as pgm_read_ptr_near is
> concerned, is this:
> 
> #define __LPM_word_classic__(addr)          \
> (__extension__({                            \
>    uint16_t __addr16 = (uint16_t)(addr);   \
>    uint16_t __result;                      \
>    __asm__ __volatile__                    \
>    (                                       \
>        "lpm"           "\n\t"              \
>        "mov %A0, r0"   "\n\t"              \
>        "adiw r30, 1"   "\n\t"              \
>        "lpm"           "\n\t"              \
>        "mov %B0, r0"   "\n\t"              \
>        : "=r" (__result), "=z" (__addr16)  \
>        : "1" (__addr16)                    \
>        : "r0"                              \
>    );                                      \
>    __result;                               \
> }))
> 
> #define __LPM_word_tiny__(addr)             \
> (__extension__({                            \
>    uint16_t __addr16 = (uint16_t)(addr) + __AVR_TINY_PM_BASE_ADDRESS__; \
>    uint16_t __result;                      \
>    __asm__                                 \
>    (                                       \
>        "ld %A0, z+"     "\n\t"             \
>        "ld %B0, z"      "\n\t"             \
>        : "=r" (__result), "=z" (__addr16)  \
>        : "1" (__addr16)                    \
>    );                                      \
>    __result;                               \
> }))
> 
> #define __LPM_word_enhanced__(addr)         \
> (__extension__({                            \
>    uint16_t __addr16 = (uint16_t)(addr);   \
>    uint16_t __result;                      \
>    __asm__ __volatile__                    \
>    (                                       \
>        "lpm %A0, Z+"   "\n\t"              \
>        "lpm %B0, Z"    "\n\t"              \
>        : "=r" (__result), "=z" (__addr16)  \
>        : "1" (__addr16)                    \
>    );                                      \
>    __result;                               \
> }))
> 
> #if defined (__AVR_HAVE_LPMX__)
> #define __LPM_word(addr)    __LPM_word_enhanced__(addr)
> #elif defined (__AVR_TINY__)
> #define __LPM_word(addr)    __LPM_word_tiny__(addr)
> #else
> #define __LPM_word(addr)    __LPM_word_classic__(addr)
> #endif
> 
> #define pgm_read_ptr_near(address_short) \
>    (void*)__LPM_word((uint16_t)(address_short))
> 
> Thus if somebody could build a patch for MoaT that can work around
> whatever is missing from your avr libc (preferably without duplicating
> anything that _is_ there), please go ahead and submit a pull request.
> Thank you.
> 
> -- 
> -- Matthias Urlichs
> 
> 
> 
> ------------------------------------------------------------------------------
> _______________________________________________
> Owfs-developers mailing list
> Owfs-developers@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/owfs-developers

------------------------------------------------------------------------------
_______________________________________________
Owfs-developers mailing list
Owfs-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/owfs-developers

Reply via email to