ダウンロード
Magazine
開発
アカウント
ダウンロード
Magazine
開発
ログイン
アカウント/パスワードを忘れた
アカウント作成
言語
ヘルプ
言語
ヘルプ
×
ログイン
ログイン名
パスワード
×
アカウント/パスワードを忘れた
日本語の翻訳状況
カテゴリ:
ソフトウェア
人物
PersonalForge
Magazine
Wiki
検索
OSDN
>
ソフトウェアを探す
>
システム
>
オペレーティングシステム カーネル
>
Hyper Operating System(ITRON仕様OS)
>
フォーラム
>
ヘルプ
>
H8/36064での使用
Hyper Operating System(ITRON仕様OS)
Fork
概要
プロジェクト概要
開発ダッシュボード
Webページ
開発メンバー
画像ギャラリー
公開フィード一覧
活動
統計情報
活動履歴
ダウンロード
リリース一覧
統計
ソースコード
コードリポジトリリスト
Git
hos-v4a
CVS
リポジトリ閲覧
チケット
チケット一覧
マイルストーン一覧
チケットの種類一覧
コンポーネント一覧
よく使われるチケット一覧のリスト/RSS
新規チケット登録
文書
コミュニケーション
フォーラム
フォーラム一覧
開発者 (761)
ヘルプ (688)
公開討議 (342)
メーリングリスト
MLの一覧
hos-cvs
hos-git
ニュース
フォーラム:
ヘルプ
(スレッド #23796)
話題(スレッド)一覧に戻る
RSS
H8/36064での使用 (2009-09-03 22:30 by
o_yamamoto
#45689)
返信
チケットに引用
初めまして.
H8/36064を使用したボード(Vstone社VS-WRC003)上でHOSの利用を考えております.
「ITRONプログラミング入門」第2章最初のサンプルプログラムを動かそうとしておりま
すが上手く動作せず,皆様にご教授願えればと思い投稿させて頂きました.
症状は,
HOS
00000:Task1
が約0.2秒位の間隔で繰り返し表示され,次のような表示になってしまうというものです.
HOS
00000:Task1
HOS
00000:Task1
HOS
00000:Task1
…(繰り返し)
ビルドにはGCC(h8300-binutils-2.13.2.1)を使用し,
プログラムはFDT4.30によりROMに書き込んで実行しています(モニタは不使用).
各種ファイルのCPU依存部分は次のように変更しました.
src/h83/gcc/pacintn.s
.global _hos_vector025
+ .global _hos_vector026
+ .global _hos_vector027
+ .global _hos_vector028
+ .global _hos_vector029
+ .global _hos_vector030
+ .global _hos_vector031
+ .global _hos_vector032
+_hos_vector026: push.w r0
+ mov.b #26, r0l
+ bra int_handler:16
+_hos_vector027: push.w r0
+ mov.b #27, r0l
+ bra int_handler:16
+_hos_vector028: push.w r0
+ mov.b #28, r0l
+ bra int_handler:16
+_hos_vector029: push.w r0
+ mov.b #29, r0l
+ bra int_handler:16
+_hos_vector030: push.w r0
+ mov.b #30, r0l
+ bra int_handler:16
+_hos_vector031: push.w r0
+ mov.b #31, r0l
+ bra int_handler:16
+_hos_vector032: push.w r0
+ mov.b #32, r0l
sample/h83n/system.cfg
-HOS_MAX_INTNO(23); /* 使用する割り込み番号の最大値(省略時 0)
+HOS_MAX_INTNO(32); /* 使用する割り込み番号の最大値(省略時 0)
-ATT_ISR({TA_HLNG, 0, 19, OsTimer_TimerHandler});
+ATT_ISR({TA_HLNG, 0, 29, OsTimer_TimerHandler});/*タイマTB1の割り込みNo.*/
sample/h38n/h83664.x
- vectors : o = 0x0000, l = 0x0034
- rom : o = 0x0034, l = 0x7fcc
+ vectors : o = 0x0000, l = 0x0042
+ rom : o = 0x0042, l = 0x7fbe
- .text 0x0034 : {
+ .text 0x0042 : {
sample/h38n/ostimer.c
/*TAでなくTB1を用いることは,オーム社開発部を通じ,著者の方にお教え頂きました*/
/*誠にありがとうございました*/
- TA.TMA.BYTE = 0x03;*/ /* 00000011 */
+ TB1.TCB1 = -236; /* ( = 14745600L / 512 / 122 * (-1) )オートリロード値(8.192ms)*/
+ TB1.TMB1.BYTE = 0x80 | 0x02; /*オートリロード有効、φ/512*/
- IENR1.BIT.IENTA = 1; /* タイマ割り込み許可 */
+ IENR2.BIT.IENTB1 = 1; /*タイマ割り込み許可 */
/* 割り込み要因クリア */
- IRR1.BYTE &= 0xbf;*/ /* 10111111 */
+ IRR2.BIT.IRRTB1 &= 0;
sample/h38n/vector.s
.word _hos_vector025
+ .word _hos_vector026
+ .word _hos_vector027
+ .word _hos_vector028
+ .word _hos_vector029
+ .word _hos_vector030
+ .word _hos_vector031
+ .word _hos_vector032
sample/h38n/h8t_sci.h
- /* SCI通信速度定義 (16MHzのとき) */
- #define SCI_2400 207
- #define SCI_4800 103
- #define SCI_9600 51
- #define SCI_19200 25
- #define SCI_31250 15
- #define SCI_38400 12
- #define SCI_57600 8 /* 誤差 -3.5% ぎりぎりいけるかも (^^;; */
+ /* SCI通信速度定義 (14.7456MHzのとき) */
+ #define SCI_2400 191
+ #define SCI_4800 95
+ #define SCI_9600 47
+ #define SCI_19200 23
+ #define SCI_31250 14
+ #define SCI_38400 11
+ #define SCI_57600 7
ostimer.c内のタイマ割り込みハンドラ中に
Sci_PutChar('*');
を追加すると
****************HOS
00000:Task1
のように表示されるので,タイマ割り込みはかかっているようです.
また,sample.cにおいてTsk1内のfor文の先頭にdly_tsk(1000);を
持ってくると,文字列HOSのみが繰り返し表示されるため,dly_tskが
正しく動いていないようです.
宜しくお願い致します.
メッセージ #45689 への返信
×
題名
本文
メッセージ #45689 への返信 > 初めまして. > H8/36064を使用したボード(Vstone社VS-WRC003)上でHOSの利用を考えております. > 「ITRONプログラミング入門」第2章最初のサンプルプログラムを動かそうとしておりま > すが上手く動作せず,皆様にご教授願えればと思い投稿させて頂きました. > > 症状は, > > HOS > 00000:Task1 > > が約0.2秒位の間隔で繰り返し表示され,次のような表示になってしまうというものです. > > HOS > 00000:Task1 > HOS > 00000:Task1 > HOS > 00000:Task1 > …(繰り返し) > > ビルドにはGCC(h8300-binutils-2.13.2.1)を使用し, > プログラムはFDT4.30によりROMに書き込んで実行しています(モニタは不使用). > 各種ファイルのCPU依存部分は次のように変更しました. > > src/h83/gcc/pacintn.s > > .global _hos_vector025 > + .global _hos_vector026 > + .global _hos_vector027 > + .global _hos_vector028 > + .global _hos_vector029 > + .global _hos_vector030 > + .global _hos_vector031 > + .global _hos_vector032 > +_hos_vector026: push.w r0 > + mov.b #26, r0l > + bra int_handler:16 > +_hos_vector027: push.w r0 > + mov.b #27, r0l > + bra int_handler:16 > +_hos_vector028: push.w r0 > + mov.b #28, r0l > + bra int_handler:16 > +_hos_vector029: push.w r0 > + mov.b #29, r0l > + bra int_handler:16 > +_hos_vector030: push.w r0 > + mov.b #30, r0l > + bra int_handler:16 > +_hos_vector031: push.w r0 > + mov.b #31, r0l > + bra int_handler:16 > +_hos_vector032: push.w r0 > + mov.b #32, r0l > > sample/h83n/system.cfg > > -HOS_MAX_INTNO(23); /* 使用する割り込み番号の最大値(省略時 0) > +HOS_MAX_INTNO(32); /* 使用する割り込み番号の最大値(省略時 0) > -ATT_ISR({TA_HLNG, 0, 19, OsTimer_TimerHandler}); > +ATT_ISR({TA_HLNG, 0, 29, OsTimer_TimerHandler});/*タイマTB1の割り込みNo.*/ > > sample/h38n/h83664.x > > - vectors : o = 0x0000, l = 0x0034 > - rom : o = 0x0034, l = 0x7fcc > + vectors : o = 0x0000, l = 0x0042 > + rom : o = 0x0042, l = 0x7fbe > - .text 0x0034 : { > + .text 0x0042 : { > > sample/h38n/ostimer.c > > /*TAでなくTB1を用いることは,オーム社開発部を通じ,著者の方にお教え頂きました*/ > /*誠にありがとうございました*/ > - TA.TMA.BYTE = 0x03;*/ /* 00000011 */ > + TB1.TCB1 = -236; /* ( = 14745600L / 512 / 122 * (-1) )オートリロード値(8.192ms)*/ > + TB1.TMB1.BYTE = 0x80 | 0x02; /*オートリロード有効、φ/512*/ > - IENR1.BIT.IENTA = 1; /* タイマ割り込み許可 */ > + IENR2.BIT.IENTB1 = 1; /*タイマ割り込み許可 */ > > /* 割り込み要因クリア */ > - IRR1.BYTE &= 0xbf;*/ /* 10111111 */ > + IRR2.BIT.IRRTB1 &= 0; > > sample/h38n/vector.s > > .word _hos_vector025 > + .word _hos_vector026 > + .word _hos_vector027 > + .word _hos_vector028 > + .word _hos_vector029 > + .word _hos_vector030 > + .word _hos_vector031 > + .word _hos_vector032 > > sample/h38n/h8t_sci.h > - /* SCI通信速度定義 (16MHzのとき) */ > - #define SCI_2400 207 > - #define SCI_4800 103 > - #define SCI_9600 51 > - #define SCI_19200 25 > - #define SCI_31250 15 > - #define SCI_38400 12 > - #define SCI_57600 8 /* 誤差 -3.5% ぎりぎりいけるかも (^^;; */ > > + /* SCI通信速度定義 (14.7456MHzのとき) */ > + #define SCI_2400 191 > + #define SCI_4800 95 > + #define SCI_9600 47 > + #define SCI_19200 23 > + #define SCI_31250 14 > + #define SCI_38400 11 > + #define SCI_57600 7 > > > ostimer.c内のタイマ割り込みハンドラ中に > Sci_PutChar('*'); > を追加すると > > ****************HOS > 00000:Task1 > > のように表示されるので,タイマ割り込みはかかっているようです. > また,sample.cにおいてTsk1内のfor文の先頭にdly_tsk(1000);を > 持ってくると,文字列HOSのみが繰り返し表示されるため,dly_tskが > 正しく動いていないようです. > > 宜しくお願い致します.
Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。
ログインする
ニックネーム
プレビュー
投稿
キャンセル
RE: H8/36064での使用 (2009-09-04 09:47 by
hamayan
#45693)
返信
チケットに引用
はじめまして。と言いますか、ご購入ありがとうございます。
ちょっと確認させてください。
> +_hos_vector026: push.w r0
> + mov.b #26, r0l
> + bra int_handler:16
元々のソースは8bit相対で繋いでいますが(bra int_handler:8)、
全て16bit相対に変更していると言う事でしょうか。
すいません、こういうビット操作はした事が無いのですが、
> + IRR2.BIT.IRRTB1 &= 0;
アセンブラレベルではどう言ったコードに変換されるのでしょうか。
ちなみに0の代入なら
IRR2.BIT.IRRTB1 = 0;
よろしくお願いいたします。
#45689
への返信
メッセージ #45693 への返信
×
題名
本文
メッセージ #45693 への返信 > はじめまして。と言いますか、ご購入ありがとうございます。 > > ちょっと確認させてください。 > > > +_hos_vector026: push.w r0 > > + mov.b #26, r0l > > + bra int_handler:16 > > 元々のソースは8bit相対で繋いでいますが(bra int_handler:8)、 > 全て16bit相対に変更していると言う事でしょうか。 > > > すいません、こういうビット操作はした事が無いのですが、 > > + IRR2.BIT.IRRTB1 &= 0; > > アセンブラレベルではどう言ったコードに変換されるのでしょうか。 > ちなみに0の代入なら > IRR2.BIT.IRRTB1 = 0; > > よろしくお願いいたします。
Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。
ログインする
ニックネーム
プレビュー
投稿
キャンセル
RE: H8/36064での使用 (2009-09-04 10:19 by
hamayan
#45695)
返信
チケットに引用
一つ思い出しました。
> HOS
> 00000:Task1
>
> が約0.2秒位の間隔で繰り返し表示され,次のような表示になってしまうというものです.
確かこの型番のH8は初期状態でWDTが有効になっていた筈です。
マニュアルを読むと約14MHzのCPUクロックなら大体140ms周期でリセットが掛かるはずです。
WDTを解除するには起動直後、例えばcrt0内か、mainに入った直後にWDTを無効化するか、逆にWDTの延長処理を行う処理を追加する必要が有ります。
これら処置は行っているでしょうか?。
※延長処理を行うのは、一例としてIDLE LOOP内に書くと良いかもしれません。
#45689
への返信
メッセージ #45695 への返信
×
題名
本文
メッセージ #45695 への返信 > 一つ思い出しました。 > > > HOS > > 00000:Task1 > > > > が約0.2秒位の間隔で繰り返し表示され,次のような表示になってしまうというものです. > > 確かこの型番のH8は初期状態でWDTが有効になっていた筈です。 > マニュアルを読むと約14MHzのCPUクロックなら大体140ms周期でリセットが掛かるはずです。 > WDTを解除するには起動直後、例えばcrt0内か、mainに入った直後にWDTを無効化するか、逆にWDTの延長処理を行う処理を追加する必要が有ります。 > > これら処置は行っているでしょうか?。 > > ※延長処理を行うのは、一例としてIDLE LOOP内に書くと良いかもしれません。
Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。
ログインする
ニックネーム
プレビュー
投稿
キャンセル
RE: H8/36064での使用 (2009-09-04 12:47 by
o_yamamoto
#45699)
返信
チケットに引用
hamayan様
対策をご教授頂きまして大変ありがとうございます.
下記コードをmainの冒頭に加えてWDTを止めた所,無事動作しました.
WDT.TCSRWD.BYTE = 0x80; /*bit5=0(bit4への書き込み有効)*/
WDT.TCSRWD.BYTE = 0x90; /*bit4=1,bit3=0(bit2,0への書き込み有効)*/
WDT.TCSRWD.BYTE = 0x90; /*bit2=0(WDT停止)*/
私一人では,WDTが初期状態で有効になっていることには永久に気付けなかったと思います.
ありがとうございました.
>元々のソースは8bit相対で繋いでいますが(bra int_handler:8)、
>全て16bit相対に変更していると言う事でしょうか。
ご指摘の部分は全て16bit相対に変更しています.というのも,pacint.sの方では
一旦8bitで中継点に飛ばしてから16bitでint_handler1に飛ばしていたもので,
pacintn.sの方でもベクタが増えると飛べなくなるかと思ったからです.8bitで十分でした.
当時焦っていてよく考えずに変更してしまいました.
>すいません、こういうビット操作はした事が無いのですが、
>> + IRR2.BIT.IRRTB1 &= 0;
>
>アセンブラレベルではどう言ったコードに変換されるのでしょうか。
>ちなみに0の代入なら
>IRR2.BIT.IRRTB1 = 0;
これもなんとなくAND演算にしてしまいました.小さなプログラムで今確認しましたら,
上のどちらも同じand命令
and #-33,r2l
に変換されていました.
ここ数日の悩みが解消されました.
厚く御礼申し上げます.ありがとうございました.
#45689
への返信
メッセージ #45699 への返信
×
題名
本文
メッセージ #45699 への返信 > hamayan様 > > 対策をご教授頂きまして大変ありがとうございます. > 下記コードをmainの冒頭に加えてWDTを止めた所,無事動作しました. > WDT.TCSRWD.BYTE = 0x80; /*bit5=0(bit4への書き込み有効)*/ > WDT.TCSRWD.BYTE = 0x90; /*bit4=1,bit3=0(bit2,0への書き込み有効)*/ > WDT.TCSRWD.BYTE = 0x90; /*bit2=0(WDT停止)*/ > 私一人では,WDTが初期状態で有効になっていることには永久に気付けなかったと思います. > ありがとうございました. > > >元々のソースは8bit相対で繋いでいますが(bra int_handler:8)、 > >全て16bit相対に変更していると言う事でしょうか。 > > ご指摘の部分は全て16bit相対に変更しています.というのも,pacint.sの方では > 一旦8bitで中継点に飛ばしてから16bitでint_handler1に飛ばしていたもので, > pacintn.sの方でもベクタが増えると飛べなくなるかと思ったからです.8bitで十分でした. > 当時焦っていてよく考えずに変更してしまいました. > > >すいません、こういうビット操作はした事が無いのですが、 > >> + IRR2.BIT.IRRTB1 &= 0; > > > >アセンブラレベルではどう言ったコードに変換されるのでしょうか。 > >ちなみに0の代入なら > >IRR2.BIT.IRRTB1 = 0; > > これもなんとなくAND演算にしてしまいました.小さなプログラムで今確認しましたら, > 上のどちらも同じand命令 > and #-33,r2l > に変換されていました. > > ここ数日の悩みが解消されました. > 厚く御礼申し上げます.ありがとうございました.
Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。
ログインする
ニックネーム
プレビュー
投稿
キャンセル