LwIP

Started by tha, August 29, 2021, 09:15:30 AM

Previous topic - Next topic

tha



SYS_ARCH_UNPROTECT กระทำการ a "fast" การตั้งค่าของ the protection level ไปยัง "lev". นี้สามารถถูกจัดให้มีใช้โดยการตั้งค่า the interrupt level ไปยัง "lev" ภายใน the MACRO หรือโดยการใช้ a semaphore หรือ mutex.  มาโครนี้จะมีค่าเริ่มต้นเพื่อเรียก the sys_arch_unprotect() function ซึ่งควรถูกจัดให้มีใช้ใน sys_arch.c. ถ้าพอร์ตใดพอร์ตหนึ่งต้องการการจัดให้มีใช้งานที่แตกต่างกัน, ดังนั้นมาโครนี้อาจถูกกำหนดใน sys_arch.h.

tha

https://www.nongnu.org/lwip/2_1_x/group__compiler__abstraction.html




Detailed Description

การ defines ทั้งหมดที่เกี่ยวข้องกับ section นี้ต้องไม่ถูกวางใน lwipopts.h, แต่ใน arch/cc.h! ถ้า the compiler ไม่จัดให้มี memset() ไฟล์นี้ต้องรวม a definition ของมัน, หรือ include ไฟล์ซึ่ง defines มัน. ทางเลือกเหล่านี้ไม่สามารถถูก #defined ใน lwipopts.h เนื่องจากพวกมันไม่เป็นทางเลือกของ lwIP มันเอง, แต่เป็นทางเลือกของ the lwIP ที่พอร์ตไปยังระบบของคุณ.

tha



กำหนด the byte order ของ the system. ที่จำเป็นสำหรับการแปลงของ network data ไปเป็น host byte order. ค่าที่ยอมให้: LITTLE_ENDIAN และ BIG_ENDIAN


tha



กำจัด alignment cast warnings (GCC -Wcast-align)

tha



C++ const_cast<target_type>(val) เทียบเท่ากับการลบค่า constness ออกจาก a value (GCC -Wcast-qual)

tha



จัดสรร a memory buffer ของขนาดที่ระบุทซึ่งเป็นขนาดที่พอเพียงเพื่อจัดวางตำแหน่ง start address ของมันโดยใช้ LWIP_MEM_ALIGN. คุณสามารถประกาศ version ของคุณเองได้ที่นี่ ตัวอย่างเช่นเพื่อบังคับ alignment โดยไม่มีการเพิ่ม trailing padding bytes (ดู LWIP_MEM_ALIGN_BUFFER) หรือ section placement requirements ของคุณเอง.
ตัวอย่างเช่น ถ้าคุณใช้ gcc และต้องการ 32 bit alignment:
#define LWIP_DECLARE_MEMORY_ALIGNED(variable_name, size) u8_t variable_name[size] __attribute__((aligned(4))) หรือพกพาได้สะดวกกว่า:
#define LWIP_DECLARE_MEMORY_ALIGNED(variable_name, size) u32_t variable_name[(size + sizeof(u32_t) - 1) / sizeof(u32_t)]

tha



จัดวางตำแหน่ง a memory pointer ไปยัง the alignment ที่กำหนดโดย MEM_ALIGNMENT ดังนั้น ADDR % MEM_ALIGNMENT == 0

tha



คำนวณ safe memory size สำหรับ an aligned buffer เมื่อใช้ an unaligned type เป็นที่เก็บข้อมูล. นี้จะรวม a safety-margin บน (MEM_ALIGNMENT - 1) ที่จุดเริ่มต้น (ตัวอย่างเช่น ถ้า buffer เป็น u8_t[] และ actual data จะเป็น u32_t*)