Download
Magazine
Develop
Account
Download
Magazine
Develop
Login
Forgot Account/Password
Create Account
Language
Help
Language
Help
×
Login
Login Name
Password
×
Forgot Account/Password
Category:
Software
People
PersonalForge
Magazine
Wiki
Search
OSDN
>
Find Software
>
System
>
Operating System Kernels
>
Hyper Operating System(ITRON仕様OS)
>
Forums
>
Help
>
H8/36064での使用
Hyper Operating System(ITRON仕様OS)
Fork
Description
Project Summary
Developer Dashboard
Web Page
Developers
Image Gallery
List of RSS Feeds
Activity
Statistics
History
Downloads
List of Releases
Stats
Source Code
Code Repository list
Git
hos-v4a
CVS
View Repository
Ticket
Ticket List
Milestone List
Type List
Component List
List of frequently used tickets/RSS
Submit New Ticket
Documents
Communication
Forums
List of Forums
Developers (761)
Help (688)
Open Discussion (342)
Mailing Lists
list of ML
hos-cvs
hos-git
News
Forums:
Help
(Thread #23796)
Return to Thread list
RSS
H8/36064での使用 (2009-09-03 22:30 by
o_yamamoto
#45689)
Reply
Create ticket
初めまして.
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が
正しく動いていないようです.
宜しくお願い致します.
Reply to #45689
×
Subject
Body
Reply To Message #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が > 正しく動いていないようです. > > 宜しくお願い致します.
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
Nickname
Preview
Post
Cancel
RE: H8/36064での使用 (2009-09-04 09:47 by
hamayan
#45693)
Reply
Create ticket
はじめまして。と言いますか、ご購入ありがとうございます。
ちょっと確認させてください。
> +_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;
よろしくお願いいたします。
Reply to
#45689
Reply to #45693
×
Subject
Body
Reply To Message #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; > > よろしくお願いいたします。
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
Nickname
Preview
Post
Cancel
RE: H8/36064での使用 (2009-09-04 10:19 by
hamayan
#45695)
Reply
Create ticket
一つ思い出しました。
> HOS
> 00000:Task1
>
> が約0.2秒位の間隔で繰り返し表示され,次のような表示になってしまうというものです.
確かこの型番のH8は初期状態でWDTが有効になっていた筈です。
マニュアルを読むと約14MHzのCPUクロックなら大体140ms周期でリセットが掛かるはずです。
WDTを解除するには起動直後、例えばcrt0内か、mainに入った直後にWDTを無効化するか、逆にWDTの延長処理を行う処理を追加する必要が有ります。
これら処置は行っているでしょうか?。
※延長処理を行うのは、一例としてIDLE LOOP内に書くと良いかもしれません。
Reply to
#45689
Reply to #45695
×
Subject
Body
Reply To Message #45695 > 一つ思い出しました。 > > > HOS > > 00000:Task1 > > > > が約0.2秒位の間隔で繰り返し表示され,次のような表示になってしまうというものです. > > 確かこの型番のH8は初期状態でWDTが有効になっていた筈です。 > マニュアルを読むと約14MHzのCPUクロックなら大体140ms周期でリセットが掛かるはずです。 > WDTを解除するには起動直後、例えばcrt0内か、mainに入った直後にWDTを無効化するか、逆にWDTの延長処理を行う処理を追加する必要が有ります。 > > これら処置は行っているでしょうか?。 > > ※延長処理を行うのは、一例としてIDLE LOOP内に書くと良いかもしれません。
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
Nickname
Preview
Post
Cancel
RE: H8/36064での使用 (2009-09-04 12:47 by
o_yamamoto
#45699)
Reply
Create ticket
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
に変換されていました.
ここ数日の悩みが解消されました.
厚く御礼申し上げます.ありがとうございました.
Reply to
#45689
Reply to #45699
×
Subject
Body
Reply To Message #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 > に変換されていました. > > ここ数日の悩みが解消されました. > 厚く御礼申し上げます.ありがとうございました.
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
Nickname
Preview
Post
Cancel