Forums: Help (Thread #37523)

H8 3664F サンプル の動作がおかしい (2016-02-21 08:18 by komet #77702)

ITORONプログラミング入門
H8マイコンとHOSではじめる組込開発 という本で勉強しています。
マイコンは3664Fです。

HEWで
カーネルライブラリの作成、
サンプルのビルドまでエラー警告無しまでたどり着きました。
マイコンにMOTを転送すると

HOS
00000:Task1
HOSOS

とテラタームに表示され
3行目のHOSOSをカーソルが激しく往復します。

フォーラム内で似たような現象による質問があり
wdtの無効で解決したようでしたが、
私の現象とは関係ありませんでした。

ostimer.cの割込みハンドラ内で
*を表示させることをしましたが、
表示されませんでした。

ためしに、オーム社のダウンロードしたMOTを
転送すると正常に動きました。

すみませんが、御教授お願いします。


Reply to #77702×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

Re: H8 3664F サンプル の動作がおかしい (2016-02-21 20:40 by hamayan #77703)

H8/3664なので起動時にWDTが動いておらず、確かにWDTは影響していないと思います。
スタックの設定かなぁ?と言う気もしますが確かめる環境が無いのでHEWの実行環境について教えていただけたらと思います。
コンパイラ等のツールバージョンとかですね。それがまずインストールできるか?からになってしまうのですが。


[メッセージ #77702 への返信]
> ITORONプログラミング入門
> H8マイコンとHOSではじめる組込開発 という本で勉強しています。
> マイコンは3664Fです。
>
> HEWで
> カーネルライブラリの作成、
> サンプルのビルドまでエラー警告無しまでたどり着きました。
> マイコンにMOTを転送すると
>
> HOS
> 00000:Task1
> HOSOS
>
> とテラタームに表示され
> 3行目のHOSOSをカーソルが激しく往復します。
>
> フォーラム内で似たような現象による質問があり
> wdtの無効で解決したようでしたが、
> 私の現象とは関係ありませんでした。
>
> ostimer.cの割込みハンドラ内で
> *を表示させることをしましたが、
> 表示されませんでした。
>
> ためしに、オーム社のダウンロードしたMOTを
> 転送すると正常に動きました。
>
> すみませんが、御教授お願いします。
>
>

Reply to #77702

Reply to #77703×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

無事動作しました (2016-02-22 06:55 by komet #77704)

[メッセージ #77703 への返信]
スタックの設定とのことで
書籍p300 A.5.4 STACKの指定
でH8内蔵メモリの最後のアドレスを指定します。
とあるので、H8 3664Fのデータシートのメモリマップから
RAMの最終番地H'FF7Fを
HEWのツールチェーン 最適化リンカ 入力 シンボル定義 STACK の
アドレスにRAMの最終番地H'FF7Fとしたことが原因なのかもと思い、
こんどは、RAMのユーザーエリアの先頭番地H'FB80(内蔵RAMの中間番地)
を設定したところ、正常に動作をしました。

ただこれも間違いのようで、
スタックポインタはメモリの一番最後で
H8関連の書籍で「必ず偶数番地でなければならない」とありました。
自分が指定していたのは奇数番地でした。
ですので、その(H'FF7F)下の
内蔵レジスタの先頭アドレス(H'FF80)を指定しました。
ビルドし転送実行で無事動作しました。

ようやくRTOSが動いて感動しています。
素直に動くより、
プログラミング、マイコンに関する勉強になり
RTOSを勉強してよかったと思います。

ご助言ありがとうございました。
Reply to #77703

Reply to #77704×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

Re: 無事動作しました (2016-02-22 09:16 by hamayan #77705)

[メッセージ #77704 への返信]

無事動いて良かったです。
私も初めてHOSでiTRONに触れて動いたときは感動しました。HOSやiTRONで覚えたことは今の血肉になっています。

> ですので、その(H'FF7F)下の
> 内蔵レジスタの先頭アドレス(H'FF80)を指定しました。

H8の16bitアクセスは偶数番地に限られますので、スタックポインタには偶数を指定します。
またレジスタ関節アドレッシングの場合、アドレスが減る方向はプレデクリメントになりますので、まず現在のSPの値から2引き算して、そのアドレスにアクセスします。
なのでRAMの底の次の番地のH'FF80で大丈夫です。


> [メッセージ #77703 への返信]
> スタックの設定とのことで
> 書籍p300 A.5.4 STACKの指定
> でH8内蔵メモリの最後のアドレスを指定します。
> とあるので、H8 3664Fのデータシートのメモリマップから
> RAMの最終番地H'FF7Fを
> HEWのツールチェーン 最適化リンカ 入力 シンボル定義 STACK の
> アドレスにRAMの最終番地H'FF7Fとしたことが原因なのかもと思い、
> こんどは、RAMのユーザーエリアの先頭番地H'FB80(内蔵RAMの中間番地)
> を設定したところ、正常に動作をしました。
>
> ただこれも間違いのようで、
> スタックポインタはメモリの一番最後で
> H8関連の書籍で「必ず偶数番地でなければならない」とありました。
> 自分が指定していたのは奇数番地でした。
> ですので、その(H'FF7F)下の
> 内蔵レジスタの先頭アドレス(H'FF80)を指定しました。
> ビルドし転送実行で無事動作しました。
>
> ようやくRTOSが動いて感動しています。
> 素直に動くより、
> プログラミング、マイコンに関する勉強になり
> RTOSを勉強してよかったと思います。
>
> ご助言ありがとうございました。
Reply to #77704

Reply to #77705×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login