F4 SD Demo软件存在的Bug

[复制链接]
2417|3
 楼主| seawwh 发表于 2012-7-26 21:44 | 显示全部楼层 |阅读模式
如果用下面文件中的代码读取大于4G SD卡内部的容量信息会出现错误。
  file:stm324xg_eval_sdio_sd.c(version V1.0.2)
  语句:
    cardinfo->CardCapacity = (cardinfo->SD_csd.DeviceSize + 1) * 512 * 1024;
  功能:
    计算SD卡的容量,表达式左侧是64位整型变量,SD_csd.DeviceSize是32位整型变量,
  Bug
    表达式右侧在进行32位的运算,然后赋值给左侧的64位变量,这样会导致结果的高位丢失。
    对于4G容量的SD卡,计算没有问题,但对于8G或更大容量的SD卡,结果是错误的。
  改正
    cardinfo->CardCapacity = ((uint64_t)cardinfo->SD_csd.DeviceSize + 1) * 512 * 1024;

   其实,这个错误从F103开始一直存在,在F103相应的代码中,CardCapacity是32位整形,表现的错误是对大于4G卡结果会溢出。
wuguoyan 发表于 2012-7-26 22:28 | 显示全部楼层
楼主真有心~·
sinadz 发表于 2012-7-26 22:43 | 显示全部楼层
很有参考价值
火箭球迷 发表于 2012-7-26 22:59 | 显示全部楼层
的确是有这种情况存在
您需要登录后才可以回帖 登录 | 注册

本版积分规则

145

主题

368

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部