字节对齐算法

ps:遇见这种算法纯属一个巧合,刚入职的我,在忙着调用各种SDK中的API,无暇顾及代码的具体实现,有些代码还被屏蔽了,在写flash的过程中,参考了前辈们的一些代码,在此记录。

if (!(erase_addr % FLASH_BLOCK_SIZE))
 {
    ret = hal_flash_erase(erase_addr, mem_info_ptr->block_type);
    LOGI("[FOTA] erase flash, ret = %d, address = 0x%x\r\n", ret, (unsigned int)erase_addr);
 }
erase_addr = (erase_addr + FLASH_BLOCK_SIZE) & (~(FLASH_BLOCK_SIZE - 1));

本段代码是需要在内存中寻找一个FLASH_BLOCK_SIZE对齐的地址,然后擦除,

参考来源于网络

原理:

  1.      一般的字节对齐的大小都为2的整数倍,所以能够被整除的地址的后几位一定是0,(e.g.    8字节对齐,能够被整除的数的二进制最后3位一定为0)

  2. + FLASH_BLOCK_SIZE的主要作用是增加步长。

  3. (~(FLASH_BLOCK_SIZE - 1))的主要作用是清除二进制最后几位,使结果可以被整除

    

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值