[求助] FATFS BMP

mawenruinb   2015-3-16 15:32 楼主
大家好:
          我使用了TIVA 单片机里的SD_demo,里面的FATFS已经移植好了,我现在希望SD卡里面的单色BMP图片转成像素数组,下面是我的程序,我通过DEBUG发现在f_lseek()函数后的if(res==FR_OK)语句是没办法执行的 会直接跳出循环,也就是说f_lseek()函数返回值不是FR_OK,但是我通过单步的确发现指针已经被改变,就是说f_lseek()起作用了,单步的时候res也是FR_OK 但是后面的语句就是没法执行。
  • 程序

回复评论 (5)

前几天才用过 FATFS显示BMP图片,是庆科的例程修改的。

f_lseek()的返回值是判断它的定位状态的。只有OK状态才是正常的。
点赞  2015-3-16 15:45
我将f_lseek()直接放在read()后面运行也是这样,单步执行这条语句就直接跳出循环,不知道这个是什么原因
点赞  2015-3-16 15:47
“ 直到f_lseek最后一句都是OK的 一跳出函数 就不正常 ”,一般情况下不应该是这样的。

看看编译时有没有警告之类的没有处理好,使有些指针受影响了?
点赞  2015-3-16 18:30
1.if(res==FR_OK)增加一个else,设置一个中断仿真一下res的值,能看到什么原因读取.
2.参考原作者的描述http://www.elm-chan.org/fsw/ff/en/lseek.html
3.关闭IDE的优化选项试试
点赞  2015-3-17 08:59
引用: shower.xu 发表于 2015-3-17 08:59
1.if(res==FR_OK)增加一个else,设置一个中断仿真一下res的值,能看到什么原因读取.
2.参考原作者的描述http://www.elm-chan.org/fsw/ff/en/lseek.html
3.关闭IDE的优化选项试试

谢谢你,原因好像是IAR的优化问题,我把优化关闭之后就可以走通,但是我发现一个新问题。
res = f_open(&file,"ma.bmp", FA_OPEN_ALWAYS | FA_READ);  //定义ma.bmp为已存在,读取
res = f_read(&file, &bmp, sizeof(bmp), &br);  
  if((bmp.pic_head[0]=='B')&&(bmp.pic_head[1]=='M'))          //文件格式标记为BM
  {
         res = f_lseek(&file,((bmp.pic_data_address_h<<16)|bmp.pic_data_address_l)); //转移到数据存储区
          for(tx=0;tx<(bmp.pic_h_l);tx++)   //212
          {
             for(ty=0;ty               {
                      res = f_read(&file, buffer, sizeof(char), &br);
              }
          }
    }
在第二个f_read函数中出错了,而且错误是我不加第二个f_read程序可以正常跑完,加了第二个f_read函数,程序在f_open后就跑飞了,
点赞  2015-3-17 10:49
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复