打印

F4 SD Demo软件存在的Bug

[复制链接]
1925|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

粉丝