C/C++知识点之读写sd卡代码分析(vivado sdk c++)
小标 2018-12-14 来源 : 阅读 1476 评论 0

摘要:本文主要向大家介绍了 C/C++知识点之读写sd卡代码分析(vivado sdk c++),通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了 C/C++知识点之读写sd卡代码分析(vivado sdk c++),通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

 void ReadFloatsFromSDFile(float *weightsFromFile, const std::string file_name) 

{
    FIL fil;        /* File object */
    FATFS fatfs;
    FILINFO file_info;
    char *SD_File;
    FRESULT Res;
    UINT NumBytesRead;

    Res = f_mount(&fatfs, "0:/", 0);
    if (Res != FR_OK) printf( "Could not mount SD card.");

    //printf("SD Card Mounted successfully\n");
    SD_File = (char *)file_name.c_str();

    Res = f_open(&fil, SD_File, FA_READ | FA_OPEN_EXISTING);
    if (Res) throw Res;
    //printf("FILE Opened successfully\n");

    Res = f_lseek(&fil, 0);
    if (Res) throw "Failed to seek opened file.";



    Res = f_stat(SD_File, &file_info);
    //DWORD fil_size = file_info.fsize+1;

    //printf("Size: %u\n",file_info.fsize);
    Res = f_stat(SD_File, &file_info);
    //DWORD fil_size = file_info.fsize+1;
    for(int i = 0; i < 51902; i++) {

        float number;
        Res = f_read(&fil, &number, sizeof(number), &NumBytesRead);
        if (Res) throw "Failed to read file.";
        //if(i==49154)printf("the first weight value is %.2f\n", number);
        weightsFromFile[i] = number;
        //weightsFromFile[i+1] = number[2];


    }

const: const 类型的对象在程序执行期间不能被修改改变。
这个函数需要weightsFromFile和存在sd卡中的file_name。
命名空间
这里std::string file_name前面的std是为了指明命名空间,因为很多函数可能在很多的库中出现,指明了之后就不会引起混乱。
简单的说,命名空间是为了防止冲突而建立的。比如你在命名空间a声明一个方法c,在命名空间b也声明一个方法c,那么在使用的时候就可以通过a::c和b::c来分别调用两个方法。
使用命名空间的语句是:using namespace [命名空间的名称]
一旦使用了这个语句,你就可以直接写该命名空间的方法名,比如:
using namespace std; // 使用std命名空间
cout << "xxx" << endl; // 你还是可以写成std::cout << "xxx" << std::endl;的
延伸几点:


这里还有一点,使用标准函数库
endl为换行符,‘‘std::cout<<"love you"<<endl;``
"endl"与"\n"的区别是"endl"还调用输出流的flush函数,刷新缓冲区,让数据直接写在文件或者屏幕上。


std:string
之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。
详情://blog.csdn.net/debugconsole/article/details/8677313

main.cc
float *weightsFromFile = (float *) malloc(numOfParameters*sizeof(float));
int *test_labels = (int *) malloc(10000 * sizeof(int));
std::vector<std::vector<float> > test_images;
int correctPrediction;

malloc
float *weightsFromFile = (float *) malloc(numOfParameters*sizeof(float));
此句为分配numOfParameters个float型变量。
函数原型是void *malloc(unsigned int num_bytes);
但是void型不能赋值给float/int,因此要用(float *)强制转换。
sizeof(float)为float型变量的字节。
std::vector<std::vector<float> > test_images;

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程