下載
軟體開發
帳戶
下載
軟體開發
登入
我忘記帳戶名和密碼了
新增帳戶
語言
手冊
語言
手冊
×
登入
登入名稱
密碼
×
我忘記帳戶名和密碼了
繁體中文翻譯狀態
類別:
軟體
人
PersonalForge
Magazine
Wiki
搜尋
OSDN
>
軟體搜索
>
System
>
Operating System Kernels
>
Hyper Operating System(ITRON仕様OS)
>
討論區
>
幫助論壇
>
H8/36064での使用
Hyper Operating System(ITRON仕様OS)
Fork
描述
專案概要
開發人員儀表板
專案的網頁
Developers
Image Gallery
List of RSS Feeds
活動
使用統計
歷史
檔案下載
發布列表
Stats
原始碼
儲存庫列表
Git
hos-v4a
CVS
查看儲存庫
待辦事項
待辦事項列表
里程碑列表
類型列表
元件列表
List of frequently used tickets/RSS
新增待辦事項
文檔
溝通
討論區
討論區列表
開發者論壇 (761)
幫助論壇 (688)
公開討論 (342)
通信論壇
通信論壇列表
hos-cvs
hos-git
新聞
討論區:
幫助論壇
(Thread #23796)
Return to Thread list
RSS
H8/36064での使用 (2009-09-03 22:30 by
o_yamamoto
#45689)
回覆
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が
正しく動いていないようです.
宜しくお願い致します.
回覆 #45689
×
主題
內容
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.)
登入
Nickname
預覽
Post
取消
RE: H8/36064での使用 (2009-09-04 09:47 by
hamayan
#45693)
回覆
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;
よろしくお願いいたします。
回覆:
#45689
回覆 #45693
×
主題
內容
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.)
登入
Nickname
預覽
Post
取消
RE: H8/36064での使用 (2009-09-04 10:19 by
hamayan
#45695)
回覆
Create ticket
一つ思い出しました。
> HOS
> 00000:Task1
>
> が約0.2秒位の間隔で繰り返し表示され,次のような表示になってしまうというものです.
確かこの型番のH8は初期状態でWDTが有効になっていた筈です。
マニュアルを読むと約14MHzのCPUクロックなら大体140ms周期でリセットが掛かるはずです。
WDTを解除するには起動直後、例えばcrt0内か、mainに入った直後にWDTを無効化するか、逆にWDTの延長処理を行う処理を追加する必要が有ります。
これら処置は行っているでしょうか?。
※延長処理を行うのは、一例としてIDLE LOOP内に書くと良いかもしれません。
回覆:
#45689
回覆 #45695
×
主題
內容
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.)
登入
Nickname
預覽
Post
取消
RE: H8/36064での使用 (2009-09-04 12:47 by
o_yamamoto
#45699)
回覆
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
に変換されていました.
ここ数日の悩みが解消されました.
厚く御礼申し上げます.ありがとうございました.
回覆:
#45689
回覆 #45699
×
主題
內容
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.)
登入
Nickname
預覽
Post
取消