OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4663|回复: 2

lwip对齐问题

[复制链接]

2

主题

7

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2015-3-27
在线时间
0 小时
发表于 2015-5-22 14:24:44 | 显示全部楼层 |阅读模式
5金钱
  1. #ifndef MEM_ALIGNMENT  
  2. #define MEM_ALIGNMENT                   4 //表示4个字节对齐  
  3. #endif  
  4.   
  5. #ifndef LWIP_MEM_ALIGN_SIZE  
  6. #define LWIP_MEM_ALIGN_SIZE(size) (((size) + MEM_ALIGNMENT - 1) & ~(MEM_ALIGNMENT-1))  
  7. #endif 
///////////////////////////////////////////////////////////////////////////////////////////////////////
  1. #include <stdio.h>  
  2.   
  3. #ifndef MEM_ALIGNMENT  
  4. #define MEM_ALIGNMENT                   4  
  5. #endif  
  6.   
  7. #ifndef LWIP_MEM_ALIGN_SIZE  
  8. #define LWIP_MEM_ALIGN_SIZE(size) (((size) + MEM_ALIGNMENT - 1) & ~(MEM_ALIGNMENT-1))  
  9. #endif  
  10. /* 
  11.  *请注意LWIP的内存对齐size一定是2^n次方的方式对齐, 
  12.  *对齐计算方法如下 
  13.  */  
  14. //size = 14 为例, MEM_ALIGNMENT =4  
  15. //(14 + 4 - 1 ) & ~(4 - 1)  
  16. //所以size + MEM_ALIGNMENT - 1的范围是size < (size + MEM_ALIGNMENT - 1) < (size + MEM_ALIGNMENT)  
  17. //17 & ~3  //取反去除(MEM_ALIGNMENT - 1)上的位  
  18. //10001  
  19. //11100  
  20. //-----------  
  21. //10000     //得出正确的结果  
  22.   
  23. void main()  
  24. {  
  25.     int size = 14;  
  26.     printf("size:%d\n", LWIP_MEM_ALIGN_SIZE(size));  
  27.   
  28. }  


各各位老师、师兄:
求解答个问题:
//size = 14 为例, MEM_ALIGNMENT =4  
//(14 + 4 - 1 ) & ~(4 - 1)  
//所以size + MEM_ALIGNMENT - 1的范围是size < (size + MEM_ALIGNMENT - 1) < (size + MEM_ALIGNMENT)  
//17 & ~3  //取反去除(MEM_ALIGNMENT - 1)上的位  
//10001  
//11100  
//-----------  
//10000     //得出正确的结果  
  这具size=14   对齐后就变成了16了
有什么意思吗、?
求解答  这样有什么意思 意义 

电子设计 stm32 电路 仿真 电路 仿真 matlab 电力电子 单片机电路 数字电子技术 模拟电子技术 CAN总线技术 I2C技术 uart FPGA DSP
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-5-22 22:47:30 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

14

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
122
金钱
122
注册时间
2014-6-19
在线时间
0 小时
发表于 2015-5-29 09:06:44 | 显示全部楼层
用地址对其主要就是方便再次去取址,在物理内存上,数据好像是按8的倍数存放的(时间有点长,记不清了,印象中是8),所以14对齐成16后在物理内存上存放,下一个数据就可以从16的地址开始存放,读取时候能够加快速度
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 18:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表