ラベル トラブルシューティング の投稿を表示しています。 すべての投稿を表示
ラベル トラブルシューティング の投稿を表示しています。 すべての投稿を表示

2015年8月15日土曜日

PSoC3の変数で迷う

PSoC5LPを開発するの様に
PSoC3でもPSoC5LPと同じように開発が出来る訳ですが
やっぱり、微妙に差があるのですね。



さて、変数と言うと
intやcharの様に文字や数値を入れておく道具ですね。
通常は、main()関数の中でも外でもどっちでも
平気なのですが、PSoC3ではどっちでも良いと言うわけでは無いようです。

下の写真はmain()関数の内側で変数の宣言(変数を使いますよ)をしています。
通常は、この方法で問題は無いのですがビルドをかけると



この通り、エラーが出てしまいます。
しかもエラーの説明も「近くに原因がありますよ」位なので
何が原因だったのかが良く分かりません。

ちょっと古い書き方でmain()関数の外側で変数の宣言をして
ビルドをかけると



ビルドが通りました。
使うコンパイラーがPSoC3では異なるので
ちょっとした違いはあるのかなと思います。

*すこし追加

手ほどきをしていただいて、分かったのですが
「 CyGlobalIntEnable」の前に変数の宣言をしてあげる必要があるようです。

つまり
int main(){

   uint32 cou;

 CyGlobalIntEnable;
・
・
・
}
としてあげれば良い様です。

2015年1月15日木曜日

Creator3.1環境でsprintf()の%fを使う場合

またも、トラブルシューティングの回です。

PSoC Creator3.1環境で
数値文字変換のSprintf();を使う場合
floatの変換をしたくても、出力されない場合があります。

PSoC Creator3.0では、リンカーが抜けていただけですが
3.1ではそれだけでは済みません。
ヒープサイズも変更してあげることで、3.1環境でも
%fを使うことが出来るようになります。


解決手順
先ず、3.0環境で行ったトラブルシューティング方法をする。

次に、ピンアサインやクロックの設定をする「****.cydwr」を開きます。


開いたら、「System」タブを開きます。

Heap Size(bytes)の項目が標準では0x80(128byte)となっているはずです。

これを0x80から0x200(512byte)に変更します。



変更したら再度コンパイルをして終了です。

3.0環境と比べると確かにヒープサイズの標準設定が小さくなっておりますが
3.0環境の半分の標準設定でもいいのにとつい、思ってしまいます。
リンカーの所も直してほしいです。(;´Д`)

*教えていただいた、のりたんさんありがとうございます。とても助かりました。

2014年12月16日火曜日

プログラムをモニターせよ~デバッグを使おう~

mb○dやArdui●oを通常の使い方をした場合では
プログラムのどこのコードが動いているかが分かりません。
お手軽の場合な場合では、マイコンのシリアル通信を使って
シリアル通信のプログラムを反して「どこが動いていますよ」みたいな
事を人力でする感じ。

ですがPSoC Creatorでは「デバック」と言う機能を使って
プログラムのどこのコードが動いていますよ。
と言うのが隅々まで分かるようになります。
また、デバッグ用のプログラムを作る必要もありません。

この機能を使うには
まずPSoC5LPへの書き込み方法を確認しましょう。
「ブートローダ」を使っている場合では「デバッグ」を使うことが出来ません。

ブートローダを使っている場合では
miniProg3やCro_Progキットのような書き込み機を用意しましょう。
PSoC5LPと書き込み機を接続すれば大丈夫です。

freeSoCのような海外のボードやCQ出版のボード、CY8CKIT-050、CY8CKIT-042等は
デバック対応の書き込み機が入っています。

さて、デバッグを使ってみましょう。
難しいことはありません。

LEDドライバーを使って、カウンターコンポーネットの数値を取り出すプログラム
を例にデバッグを使っていきましょう。



カウンターのピリオドを4000としてプログラムをしました。
任意でリセットが出来るようにコントロールレジスタコンポーネット
を使っています。

プログラムを書き終わって、コンパイルが終わったら
虫マークのボタンをクリックしてみましょう。



そうすると画面が少し変わって
下側にメモリーやレジスター、ローカルのタブが付いた画面が出てきます。
これがデバッグ画面になります。



まずは、「StepOver」のボタンを押してみましょう。



クリックすると黄色い矢印と帯が下に進みます。



このようにして、自分のプログラムを進めていきます。
もう一度押すと、7セグLEDに「PSoc」と表示され
プログラムの処理が終わり、次のコードに進みます。
今度は、「Step Into」を押してみましょう。



今度は、別のページに飛びます。




これは「Write7SegDigitHex()」に関するプログラムが表示されています。
用事が無い場合、「Strp Out」を押して自分のプログラムに戻りましょう。



Step Overを押してコードを進めていくと、変数 iに差し掛かります。



そうするとLocalsのタブ上にNameの行の隣のValueの行の数値が変わりました。



この画面では自分できめた変数が表示されます。
また、プルダウンメニューから数値に対する表記方法も変更出来ます。



何度かループを回してみると、変数 i が不思議とif 関数で
リセットをかけたつもりが、かかっていません。
この事から、カウンターコンポーネットのピリオド値を
変えてあげる必要がありそうという事がわかりました。

デバッグを終了するには、「Stop Debugging」をクリックして終了します。



この様に、ビルドの時のミスとは別に
プログラムの良くない所がわかるようになります。

この方法はm●edやArdu●noでは純正環境が無ければ出来ません。
また、無料の時点ではビルドのデータ量に制約が付くため
上位モデルにおいてはビルドすら出来ません。

デバッグを使うことによって、プログラムの裏側で動いている場合でも
何が動いているのが明らかになり、ビルドから漏れたエラーも分かるようになります。
サンプルプログラムからより多くの事も分かるようになるので、
デバッグが使えることは、プログラムに慣れない人にはうれしいですね。

2014年8月1日金曜日

sprintf(数値文字変換)のfloatが変換されない場合

今回はトラブルシューティングのブログですね。

PSoC Creator3.0以降で
数値文字変換のSprintf();を使う場合
floatでの変換をしたくても、出力されない場合があります。

これは、リンカーが抜けていた事によって
起こるようです。

・解決手順
メニューバーにある「Progect」から「Bild Settings」をクリックすると


セッティングのウインドウが出てくるので
「ARM GCC」ツリーにある「Linker」の中の「Command Line」をクリックします。
クリックしたら、「Custom Flags」の隣に

-u _printf_float

と入力して 「OK」をクリックします。

これで、もう一度ビルドすれば解決完了!

早めに更新プログラムが出てほしい限りです(泣)