關于.c和.h 和定義變量的問題

最初調試的時候是因為有個錯誤在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卡不能初始化,具體是哪個還不太清楚????

轉載于:https://www.cnblogs.com/chulin/p/8776710.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453022.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453022.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453022.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

halcon中面到面的距離_halcon學習筆記——(8)由標定板得到測量平面位姿-阿里云開發者社區...

如圖&#xff1a;由標定板位姿獲取測量板位姿1.pose_to_hom_mat3d( : : Pose : HomMat3D)把三維位姿轉化為齊次變換矩陣2.hom_mat3d_translate_local( : : HomMat3D, Tx, Ty, Tz : HomMat3DTranslate)相對于新坐標系的平移變換/ 1 0 0 \ / Tx \HomMat3DTranslate HomMat3D *…

進程同步與互斥的區別

并發進程的執行會產生相互制約的關系&#xff1a;一種是進程之間競爭使用臨界資源&#xff0c;只能讓他們逐個使用&#xff0c;這種現象稱為互斥&#xff0c;是一種競爭關系。另一種是進程之間協同完成任務&#xff0c;在關鍵點上等待另一進程發來的消息&#xff0c;以便協同一…

《軟件調試分析技術》學習筆記

《軟件調試分析技術》學習筆記&#xff08;一&#xff09; 今天開始寫寫一些心得體驗。 《軟件調試分析技術》是好友Monster的處女作品。作為一直以的好伙伴&#xff0c;他是我看著長大的&#xff0c;(*^__^*) 嘻嘻……之所以有今天這樣的成績&#xff0c;是與他的努力和天賦…

new Date()時間

var myDate new Date(); myDate.toLocaleDateString()&#xff1b;可以獲取當前日期myDate.toLocaleTimeString(); 可以獲取當前時間擴展&#xff1a;myDate.getYear(); //獲取當前年份(2位)myDate.getFullYear(); //獲取完整的年份(4位,1970-????)myDate.getMonth(); //獲…

什么是對等網絡

對等網也稱工作組。在對等網絡中&#xff0c;計算機的數量通常不會超過10臺。所以對等網絡相對比較簡單。在對等網絡中&#xff0c;對等網上各臺計算機的有相同的功能&#xff0c;無主從之分&#xff0c;網上任一節臺計算機既可以作為網絡服務器&#xff0c;其資源為其它計算機…

python初中必背語法_一些python語法的合集

貼幾道自己做過的py題防止忘了&#xff0c;好像包含的語法還挺多的洛谷1018nn,mminput().split( )oint(input())nint(nn);mint(mm)a[[]];c[[]]for i in range (1,43):a.append([]);c.append([])for i in range (1,43):for j in range (1,43):a[i].append(0),c[i].append(0)b[]f…

微信 {errcode:48001,errmsg:api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]}

{"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"} 聲明&#xff1a;是已認證的服務號 這個問題已解決&#xff01;&#xff01; 前置說明 網頁授權獲取用戶基本信息&#xff1a;兩種 scope 域 https://open.w…

解決ubuntu首次安裝Mysql之后,首次登錄出現ERROR 1698 (28000): Access denied for user 'root'@'localhost'的方法

解決步驟&#xff1a; 1.打開終端&#xff0c;輸入sudo vi /etc/mysql/debian.cnf 打開/etc/mysql/debian.cnf文件&#xff0c;顯示如下&#xff1a; 2.mysql -udebian-sys-maint -p 打開mysql 輸入密碼為上圖中password字段 3.修改root密碼 ALTER USER rootlocalhost IDEN…

六十萬的成長_我的EA策略分析和實現

曾經看過一個故事&#xff1a;在流水線上需要檢測面包盒子是不是空的&#xff0c;科技人員使用各種紅外線等等高科技&#xff0c;達到了目的&#xff1b;有一個工人用一臺風扇就解決了這個問題......其實解決問題可以很簡單&#xff0c;只要能實現目標&#xff0c;過程越簡單越…

流量控制和擁塞控制

流量控制是用于控制調制解調器與計算機之間的數據流&#xff0c;具有防止因為計算機和調制解調器之間通信處理速度的不匹配而引起的數據丟失。通常有硬件流量控制&#xff08;RTS/CTS&#xff09;和軟件流量&#xff08;XON/XOFF&#xff09;控制。 擁塞現象是指到達通…

內聚的極限: 軟件開發的不確定性原理

高內聚是有極限的. 當代碼在一個維度上高度內聚的時候, 在其它維度上是發散的. -- 代碼內聚設計的不確定性原理 大家都知道量子力學的不確定性原理: 在微觀世界里, 有幾對物理量不能同時精確的測定, 包括速度與位置, 以及能量與時間. 比如當我們精確的測定一個粒子的速度使其誤…

python獲取window共享目錄列表_利用Python獲取DICOM RTstructure勾畫列表

在《利用Python打開DICOM CT文件》一文中&#xff0c;我們利用pydicom.dcmread()讀取了CT圖像。本文中我們將修改load_scan()函數來讀取RTstructure文件并獲取勾畫列表1. 打開Jupyter notebook&#xff0c;導入需要的科學包import numpy as npimport mathimport pydicomimport …

sublime 自定義快捷鍵

[{ "keys": ["altspace"], "command": "auto_complete" }, // 自動提示、補全{ "keys": ["ctrlalti"], "command": "reindent" }, //整理代碼快捷鍵{ "keys": ["f12"…

Ubuntu中安裝、生成、導入、導出、Python3虛擬環境

1.安裝Ubuntu虛擬環境、以及可以支持虛擬環境的模塊 sudo apt install virtualenv sudo apt install virtualenvwrapper 安裝完成之后&#xff0c;進入home目錄&#xff0c;輸入命令ls -al查看是否出現.virtualenvs目錄&#xff0c;如果沒有則手動創建.virtualenvs目錄 重要…

Coursera課程 Programming Languages, Part C 總結

碎言碎語 和前面的 ML 和 Racket 感覺明顯不一樣了&#xff0c;一邊學著一邊覺得這真是一門奇怪的語言&#xff0c;有著各種奇怪的語法&#xff0c;不過真的算是一個奇妙的體驗&#xff08;相比前面的兩門語言&#xff0c;Ruby 的學習資源多了不少&#xff09;。week 1 的作業直…

如何判斷網絡是否進入擁塞狀態

通過觀察網絡的吞吐量與網絡負載間的關系 如果隨著網絡負載的增加&#xff0c;網絡的吞吐量明顯小于正常的吞吐量&#xff0c;那么網絡就進入例如輕度擁塞的狀況。 如果網絡得吞吐量隨著網絡負載的增大反而下降&#xff0c;那么網絡就可能進入擁塞狀態。 如果網絡的負載繼續…

如何拷貝工程_如何將premiere的工程及素材文件打包?

我們在剪輯視頻的時候經常會遇到素材丟失的情況&#xff0c;或者說需要換地方或換電腦繼續剪輯。特別是以前做的視頻現在需要修改一些地方&#xff0c;然后打開工程文件會發現素材丟失&#xff0c;如圖&#xff1a;這種情況要不就是素材已經刪除&#xff0c;要不就是素材改變了…

邁出從3K到1W的重要一步——掌握設計模式

IT職場的小菜經常有這樣的疑問&#xff1a; 為什么一個相似的功能&#xff0c;大牛一會兒就搞定&#xff0c;然后悠閑地品著下午茶逛淘寶&#xff1b;而自己加班加點搞到天亮還做不完。 為什么用戶提出需求變更后&#xff0c;大牛只需瀟灑地敲敲鍵盤&#xff0c;改改配置&#…

使用pip安裝virtualenv時出現問題

使用pip出現問題 fxd0ubuntu:~$ sudo pip install virtualenv [sudo] password for fxd0: env: ‘pip’: No such file or directory fxd0ubuntu:~$ pip insatall virtualenv Command pip not found, but can be installed with: sudo apt install python-pip 安裝pip fxd0…

jquery 獲取 outerHtml 包含當前節點本身的代碼

在開發過程中&#xff0c;jQuery.html() 是獲取當前節點下的html代碼&#xff0c;并不包含當前節點本身的代碼&#xff0c;然后我們有時候確需要&#xff0c;找遍jQuery api文檔也沒有任何方法可以拿到。 看到有的人通過parent().html()&#xff0c;如果當前元素沒有兄弟元素還…