最初调试的时候是因为有个错误在wavplay.h文件中

于是我跳到了recorderl.h中:从图中看到引用了main.h

出现这个问题的具体原因还是不太清楚:

不过我任务是因为:

wavplay.h中定义了  __WaveHeader   变量

在main.h文件中引用了wavplay.h

而在wavplay.h中试图引用main.h里的 __WaveHeader  然而main.h里没有定义__WaveHeader;

最好在.h文件中不要 定义变量,,而是在.c中定义,在.h中extern该变量.

我想把全局变量都设置在,  main.c中

把所有头文件都集中在  main.h中

然后这样就可以在,所有.c和.h文件中引用main.h了...

现在就去试一下,,,看一下结果如何

其实在 #include各个头文件的时候是有次序的,,,只不过有的时候他们关联不大,就不需要排序了

比如: 要先include "sys.h"  然后才能定义一些东西,

否则会::我把 include "sys.h"  注释掉之后::

///////////////////////////////////////////////

编译的过程是从头文件开始的,,如果过程中有一个地方出错,它可能就不在往下编译了,

所以找到第一个错误,,解决它,,,其它的头文件才能起作用,,,

所以这种方法会带来很多次序的考虑

不知道这样程序占用的空间会不会变::应该不会变...

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef _main_H
#define _main_H
#include "sys.h"

//RIFF块
typedef __packed struct
{
    u32 ChunkID;               //chunk id;这里固定为"RIFF",即0X46464952
    u32 ChunkSize ;               //集合大小;文件总大小-8
    u32 Format;                   //格式;WAVE,即0X45564157
}ChunkRIFF ;

//fmt块
typedef __packed struct
{
  u32 ChunkID;               //chunk id;这里固定为"fmt ",即0X20746D66
  u32 ChunkSize ;               //子集合大小(不包括ID和Size);这里为:20.
  u16 AudioFormat;          //音频格式;0X01,表示线性PCM;0X11表示IMA ADPCM
    u16 NumOfChannels;        //通道数量;1,表示单声道;2,表示双声道;
    u32 SampleRate;            //采样率;0X1F40,表示8Khz
    u32 ByteRate;            //字节速率;
    u16 BlockAlign;            //块对齐(字节);
    u16 BitsPerSample;        //单个采样数据大小;4位ADPCM,设置为4
//    u16 ByteExtraData;        //附加的数据字节;2个; 线性PCM,没有这个参数
}ChunkFMT;

//fact块
typedef __packed struct
{
    u32 ChunkID;               //chunk id;这里固定为"fact",即0X74636166;
    u32 ChunkSize ;               //子集合大小(不包括ID和Size);这里为:4.
    u32 NumOfSamples;          //采样的数量;
}ChunkFACT;

//LIST块
typedef __packed struct
{
    u32 ChunkID;               //chunk id;这里固定为"LIST",即0X74636166;
    u32 ChunkSize ;               //子集合大小(不包括ID和Size);这里为:4.
}ChunkLIST;

//data块
typedef __packed struct
{
    u32 ChunkID;               //chunk id;这里固定为"data",即0X5453494C
    u32 ChunkSize ;               //子集合大小(不包括ID和Size)
}ChunkDATA;

//wav头
typedef __packed struct
{
    ChunkRIFF riff;    //riff块
    ChunkFMT fmt;      //fmt块
//    ChunkFACT fact;    //fact块 线性PCM,没有这个结构体    
    ChunkDATA data;    //data块        
}__WaveHeader;

//wav 播放控制结构体
typedef __packed struct
{
  u16 audioformat;            //音频格式;0X01,表示线性PCM;0X11表示IMA ADPCM
    u16 nchannels;                  //通道数量;1,表示单声道;2,表示双声道;
    u16 blockalign;                //块对齐(字节);  
    u32 datasize;                  //WAV数据大小

u32 totsec ;                    //整首歌时长,单位:秒
  u32 cursec ;                    //当前播放时长
    
  u32 bitrate;                     //比特率(位速)
    u32 samplerate;                //采样率
    u16 bps;                          //位数,比如16bit,24bit,32bit
    
    u32 datastart;                  //数据帧开始的位置(在文件里面的偏移)
}__wavctrl;

#include "stdio.h"
#include "usart.h"          
#include "malloc.h"

#include "ff.h"  
#include "exfuns.h"   
#include "wavedac.h"
#include "wavplay.h"
#include "timer4.h"     //现在改成了timer4
#include "stm32f10x_dac.h"
#include "stdlib.h"     //字符串和浮点数的相互转换库

#include "key.h"
#include "txt.h"
#include "adc.h"
#include "led.h"

//下面是录音头文件
#include "recorderl.h"
#include "timerl.h"
#include "adcl.h"
#include "dmal.h"
#include "ledl.h"

//#include "memory.h"
#include "string.h"

#include "flash.h"    //关于flash的头文件

#include "sdio_sdcard.h"

注意以上是我的一个头文件,,,,这个文件是main.h文件

因为我感觉头文件太多,所以就建立了一个总的头文件,

结果引入 main.h不但没有省下多少力气,反而更加费力了,

原因在于你需要弄好这个几个头文件的顺序<><><><>

不过经验告诉我,,,还是不要建什么main.h了,,{不过总要有排序的,,在主函数中#include也是有顺序的.}

一开始我想初始化SD卡,,起初程序好好的

但是不知道为什么,,后来就不行了,,而且也没有报错

后来找到修改的地方,我只是在main.h中又加入了几个.h文件

可能是这个原因导致SD卡不能初始化,具体是哪个还不太清楚????

关于.c和.h 和定义变量的问题的更多相关文章

  1. fatal error LNK1169: 找到一个或多个多重定义的符号或多个.c/.cpp文件想同时调用定义在.h文件里面的全局变量,防止重定义变量问题。

    为什么.h文件中不能定义全局变量? 原因: 存在多次创建变量.如果头文件中可以定义全局变量,那么每个包含该头文件的文件里都会有该全局变量的定义.因为C语言的include是直接将文件嵌入到includ ...

  2. 不要在.h文件中定义变量

    今天在头文件.h中初始化了一个数组和函数,在编译的时候提示这个数组和函数重新定义了,检查后发现,犯了一个致命的错误,在头文件中定义变量... 以下引用别人的一篇说明,警示自己. C语言作为一种结构化的 ...

  3. [C/C++]在头文件中使用static定义变量意味着什么

    文章出处:http://www.cnblogs.com/zplutor/ 看到有一位同学在头文件中这么写: static const wchar_t* g_str1 = - static const ...

  4. 【2017-2-17】C#基础 - 定义变量,输入输出

    1.初学C#. C#是专门为.NET的应用而开发的语言,他吸收了C++.Visual Basic.Delphi.Java等语言的优点,提高了程序开发的效率. 2.Visual Studio.NET的集 ...

  5. 【2017-2-17】VS基本应用及C#基础第一节(定义变量、输入及输出)

    一VS基本应用 (一)新建项目 新建项目可有多种方法例如: 1.  在VS起始页面建立新项目 2.  在集成环境中,通过"文件"/"新建"/"项目&q ...

  6. C++ ---定义变量初始化

    定义变量时一定要进行初始化,尤其是数组和结构体这种占用内存大的数据结构.在使用数组的时候经常因为没有初始化而产生“烫烫烫烫烫烫”这样的野值,俗称“乱码”. 每种类型的变量都有各自的初始化方法,mems ...

  7. [Linux][C][gcc][tips] 在头文件中定义变量引发的讨论

    概述 本人的原创文章,最先发表在github-Dramalife-note中.转载请注明出处. Define variable(s) in header file referenced by mult ...

  8. SQL*Plus中替换变量与定义变量

    替换变量 SQL*Plus中的替换变量又叫替代变量,它一般用来临时存储相关数据:在SQL语句之间传递值.一般使用&或&&前缀来指定替换变量. 关于使用替换变量,一般是利用其创建 ...

  9. 【Python基础学习二】定义变量、判断、循环、函数基本语法

    先来一个愉快的Hello World吧,就是这么简单,不需要写标点符号,但是需要严格按照缩进关系,Python变量的作用域是靠tab来控制的. print("Hello World" ...

随机推荐

  1. git把本地文件上传到github上的步骤

    1.清除clean 2.返回上一级cd .. 3.克隆仓库地址git clone+地址 4.添加忽悠文件vim .gitignore 5查看cat .gitignore 6.进入到test,并且添加所 ...

  2. linux设置tab键的宽度为4

    先cd 到~目录 ~$ cd ~$ vi .vimrc set nu

  3. golang 建临时文件目录以及删除

    package main import ( "fmt" "os" "path/filepath" "strings" ) ...

  4. javascript中函数声明、变量声明以及变量赋值之间的关系与影响

    javascript中函数声明.变量声明以及变量赋值之间的关系与影响 函数声明.变量声明以及变量赋值之间有以下几点共识: 1.所有的全局变量都是window的属性 2.函数声明被提升到范围作用域的顶端 ...

  5. 决策树2 -- CART算法

    声明: 1,本篇为个人对<2012.李航.统计学习方法.pdf>的学习总结.不得用作商用,欢迎转载,但请注明出处(即:本帖地址). 2,因为本人在学习初始时有非常多数学知识都已忘记.所以为 ...

  6. [NPM] Update published npm packages using np

    When we want to update our package we need to do a few things: pull latest from our git remote, bump ...

  7. 课程与教学管理系统(CMS):Sakai

    课程与教学管理系统(CMS):Sakai 一.总结 java的spring.Hibernate等框架开发的 J2EE的开源cms 二.SAKAI Sakai是一个自由.开源的在线协作和学习环境,由Sa ...

  8. 数值溢出(arithmetic overflow)问题与解决方案

    0. 典型场景 两数相加(乘法).两数相减.一个数的阶乘,一个数的幂,这些统统可能造成数值的溢出: 避免数值溢出的方法: 当把一个计算出的很大的数赋值给一个 int(2^31-1)类型变量存储时,一般 ...

  9. 7,NULL与nullptr对比

    #include <iostream> #include <array> using namespace std; void show(int num) { cout < ...

  10. Flask项目之手机端租房网站的实战开发(七)

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/8 ...