やまちゃんのオーディオブログ

真空管アンプ、最近は資金調達のためのFX,MetaTrader4ネタもやっています。

STM32F4 wavファイル再生

STM32F4 COIDE2.0用playbackプロジェクトの移植、作成(パート2)

投稿日:2016年5月12日 更新日:

前申したプロジェクトの公開だけど、著作権侵害などが怖いので、とりあえず延期しました。

前回に引き続き、STM32のデバッグネタ。
前回の続きで、stm32のエラー修正ネタTIPS。
ちょっとだけエラー対策に慣れてきたので、報告します。

1 ファイルの重複エラーまたは宣言の重複エラーと出てきた場合
(1)「Search」タブ→「file」で、プロジェクト全部から、同じワードを使っているものを調べる。
(2)その言葉(定義、関数など)をなぞり、右クリック。→「Open declearation」とすると、定義が出てくる。
(3)その言葉(定義、関数など)をなぞり、右クリック。→「Open Call Hierarchy」とすると、その関数や定義を使った関数などを探せる。→関数の利用関係が分かる。
これらのファイル横断検索をする方法が、CoIDEさんすばらしい。
(4)通常は、宣言の重複エラーと出る場合には、違った2か所の場所に同じ宣言がされているものだが、初心者が.cファイルを引用してしまった場合、まったく同じ箇所で、重複していますというわけのわからないえらが出てしまう。この場合、.hファイルへも関数宣言を書き、.hファイルをインクルードする。このときくれぐれも、インクルードを循環させないように注意する。
(5)#IFDEF~#ENDIFを効果的に使う。同じファイルを引用しているが、2つの引用先が同時に使うはずがない場合、#IFDEF~#ENDIFを用いて、片方のみをコンパイルさせるように制御する。
例えば、USBOTGのHOSTと、DEVICEは、前者がマスター、後者がスレーブのような役割になるけれども、HOSTライブラリー、DEVICEライブラリーは同時に使う可能性はほとんどなく、これらを同時に、プロジェクトに入れていると重複エラーが生じやすいが、適切な定義を追加すれば、エラーを減らせる。

2 引数が違うなどとのエラー
(1)原因としては、ソースコードのバージョンが違うことが多い。
特に、FATFSは少しずつ改良されているので、
元のソースにないソースは、FATFSの元サイトを当たるしかないが、引数が変わっている場合がある。
これは、もとの関数か、利用先の引数を修正するしかない。
(2)上記1(4)、(5)で引数を確認する。

3 未定義等のエラー
(1)原因としては、上位のプログラムから外部変数やdefineなどで定義するはずが、
その上位プログラムとセットとなっていないため、定義していない。
例えば、FATFSの中のdiskio.cの中で、
USB_OTG_COREなどという定義は、構造体(複数の定数等のセット)の型(INTも型の1つ)なのだけれども、定義されていないとのエラーが出る。
ここは、usbh_core.cで、diskio.cをOTG用に改造した、同内容のvoid USBH_Connect (void *pdev)があり、
USB_OTG_CORE_HANDLE *ppdev = pdev;などと定義があるので、こちらのファイルを使い、
diskio.cは使わない。
(2)このようなファイルの依存関係は、上記1(4)、(5)で引数を確認して分かったことである。
サーチや定義のサーチを駆使すれば、未定義などのエラーをかなり消滅できる。
(3)IFDEFによる定義の分岐
例えば、OTGモードは、3者択一モードに分かれており、
スレーブ側?というべきデバイスモードと、
マスター側というべきホストモード、デバイスと直接やり取りするOTGモードがある。
デバイスモードは、PCではない別のデバイスと通信するが、
「USE_OTG_MODE」を定義するときは、USE_DEVICE_MODEは定義されておらず、
したがって、構造体USB_OTG_handleの要素としてのdevという構成員は定義されていないことになる。
typedef struct USB_OTG_handle
{
USB_OTG_CORE_CFGS cfg;
USB_OTG_CORE_REGS regs;
#ifdef USE_DEVICE_MODE
DCD_DEV dev;
#endif
#ifdef USE_HOST_MODE
HCD_DEV host;
#endif
#ifdef USE_OTG_MODE
OTG_DEV otg;
#endif
}
USB_OTG_CORE_HANDLE , *PUSB_OTG_CORE_HANDLE;

4 C言語のポインタ、構造体を理解する。
上記のtypedefによる構造体の定義は、INTと同じようにUSB_OTG_handleという型を定義し、その型の1つの名称として、USB_OTG_CORE_HANDLEおよびそのポインタ*PUSB_OTG_CORE_HANDLEを定義するというもので、
USB_OTG_handle USB_OTG_CORE_HANDLE, *PUSB_OTG_CORE_HANDLE;はUSB_OTG_handle型の2つの構造体を定義している。
int a,b;と同じ感覚である。上記のtypedefによる構造体の定義は多用されている。
構造体であるか、関数であるかぐらいは読めないと、ファイルを理解できない。
後は、「ポインタ完全制覇」という本で勉強した。

5 デバッグについて
CoIDEでは、そのうえでそのまま、ボードへのプログラムのインストール「DOWNLOAD COAD TO FLASH」とソースコード上でのデバッグができるが、
The program is not being run.というエラーが出て困った。
上記インストールすることは当然の前提として、デバッグのボタンを押し、しばらく待っている中にエラーが多発するときは、パソコンを立ち上げなおすのが一策と分かった。
デバッグの準備が出来ても、直ちに、printfが使えるのではなくて(USARTなどは不要だが)、
「CoIDEを使ってSTM32F4 DiscoveryでTDD(Unity)をやってみた – Qiita」のサイトなどを参考に改造すべきことが分かった。

-STM32F4 wavファイル再生

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

no image

STM32F4 COIDE2.0プロジェクトの移植、作成4 ファイルの一覧表示、漢字表示1

ファイルの一覧表示、漢字表示1 ファイルの一覧表示をするには、stm32で提供されたものではなくて、 別途chaN氏のfatfsをダウンロードして、その中のscanfilesをコピーし、 scanfi …

no image

STM32F4でwavファイル再生!COIDE2.0用playbackプロジェクトの移植、作成

STM32F4discoveryでwavファイルを再生できました!! マイコンが実用的に見えてきた初めての出来事で、私にとっては記念すべきことでした。 COIDEは、フリーで容量制限がない開発環境です …

no image

STM32F4 COIDE2.0プロジェクトの移植、作成3 ソースデバッグprintfできました!

STM32F4discovery COIDE2.0 ソースデバッグprintfもどきができました。 CoIDE上で、表示したい情報を表示できます。 COIDEを使えばだれでもできます。 コムポートも、 …

[最近の記事]
2016年5月
1234567
891011121314
15161718192021
22232425262728
293031