But what is your CPU type ?

Some CPU's can load/save an 8 Byte (64 bit) value (such as uint64_t, double) on a 4 Byte boundary, while some others cannot. I suspect you need to set MEM_ALIGNMENT to 8 for your CPU.

Terry

On 27/05/2019 06:49, [email protected] wrote:
Hi, Terry. Thanks for your reply.
The memory alignment I set in lwipopts.h is 4 as follows. Since I am using a 32 bit processor.

#define MEM_ALIGNMENT           4



    On 05/27/2019 13:16, Terry Barnaby <mailto:[email protected]> wrote:

    In your lwipopts.h what have you set for MEM_ALIGNMENT ?

    // MEM_ALIGNMENT: should be set to the alignment of the CPU for
    which lwIP is compiled.
    #define MEM_ALIGNMENT           4

    Terry

    On 27/05/2019 04:17, [email protected] wrote:
    Could anyone give me some advice?

    I recently use mem_alloc() to allocate a structure memory which
    have a int64 member. However, mem_alloc() returns a memory
    poniter which is 4 byte aligned which cause a memory unaligned fault.
    The code is as follows,

    ifp=mem_alloc(sizeof(structure interface));

    The structure intrface has a member flags which is int64. The
    size of structure interface is 112 which is a multiple of 8 while
    the address returned is 0x720ef324 which is not 8 byte aligned.
    So when I want to access ifp->flags, an unaligned fault will be
    triggered.

    Could any give some hint?
    Thanks!
    Best regards,

    yan



        On 05/25/2019 22:19, yanhc519 <mailto:[email protected]> wrote:
        Hi all.

        What is the memory alignment of the pointer returned by
        mem_alloc() in mem.c?
        Since the only argument of mem_alloc() is size, so what
        alignment will mem_alloc() choose?

        In http://man7.org/linux/man-pages/man3/malloc.3.html, it
        says "/The malloc() and calloc() functions return a pointer
        to the allocated memory, which is suitably aligned for any
        built-in type./"
        Since the largest type is double or int64 which are 8 bytes,
        so I guess /malloc() /in linux will choose alignment of 8 bytes.

        Is this guess also applied to mem_alloc() in LwIP?
        That is, does mem_alloc() in LwIP also choose alignment of 8
        bytes?

        Thanks!
        Best regard,

        yan


    _______________________________________________
    lwip-users mailing list
    [email protected]
    https://lists.nongnu.org/mailman/listinfo/lwip-users


_______________________________________________
lwip-users mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/lwip-users
_______________________________________________
lwip-users mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/lwip-users

Reply via email to