微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > 电子工程师杂谈 > 菜鸟笔记.1

菜鸟笔记.1

时间:10-02 整理:3721RD 点击:
/*****
*@file      SD卡读写.doc
*date      2016/9/7
*@author  乌云踏雪
*@brief    基于K60FX系列单片机的SDHC功能,在文件系统下往SD卡里多次写入文件
*****/
        最近这两天学习了一下SD卡,在此记录分享一下我的感受。
因为工作需要,我要写一个可以往SD卡里分别写多个文件的单片机程序。本来挺简单的事情,我却弄了很长时间,问题并不是出现在FATFS文件系统的移植上面,而是一些参数传递、数据类型的问题,究其本质还是我的基础不牢。
        FATFS 是面向小型嵌入式系统的一种通用的 FAT 文件系统。它完全是由 AISI C 语言编写并且完全独立于底层的 I/O 介质。因此它可以很容易地不加修改地移植到其他的处理器当中。而由于时间原因,我相当于只学了怎么翻阅使用手册和调用函数,并没有对底层函数做深入了解。这当然是正确的选择,但正因为对它的不了解,所以我一直怀疑问题出在FATFS的移植上,对自己码的几行代码深信不疑。
(FATFS 文件系统的源码可以从 fatfs 官网下载:
http://elm-chan.org/fsw/ff/00index_e.html)
        废话少说,举一个让我纠缠半天的例子。
void save_sd(uint8 *data_sd)
{
  int  bw_sd;
  
  f_open( &fdst_sd , file_name , FA_CREATE_ALWAYS | FA_WRITE );  //打开文件,总是创建,当文件存在则覆盖,写模式
  
  f_write( &fdst_sd , data_sd , sizeof(data_sd) , &bw_sd );  //写入文件数据
  
  f_close(&fdst_sd);     //关闭文件
}
发现问题在哪儿了没?就在f_write函数的第三个参数那儿,因为这个函数参数是个指针,它把文件位置准确的“指引”出来了。但用它计算数据大小的时候就变成了计算指针的大小,在32位单片机里它也“准确无误”的把每个文件的大小限制在了4个字节。
哈哈,我是不是很菜。还是要好好学基础的C,基础牢才能走的更高。
同样的代码放在主函数里正常,封装成函数就不能用,但我没想到是参数的问题,也是给自己上了一课。时候不早了,附上成功后的几张图片,睡觉去喽~

         



1图是SD卡的文件
2图是文件里的数据

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top