フォーラム: ヘルプ (スレッド #1112)

CRE_CYC のサンプルありませんか? (2002-09-18 20:30 by 匿名 #2030)

CRE_CYCを試そうと、以下のように準備したのですが
system,cfg
/* 周期ハンドラの生成 */
CRE_CYC(CYCID_SAMPLE1, {TA_STA, 4, Cychdr1, 100, 0});
sample.h
void Initialize(VP_INT exinf);
void Task1(VP_INT exinf);
void Task2(VP_INT exinf);
void Task3(VP_INT exinf);
void Cychdr1(VP_INT exinf);

sample.c
/* 初期化ハンドラ */
void Initialize(VP_INT exinf)
{
act_tsk(TSKID_SAMPLE1);
act_tsk(TSKID_SAMPLE2);
act_tsk(TSKID_SAMPLE3);
sta_cyc(CYCID_SAMPLE1);
}

void Cychdr1(VP_INT exinf){
int id;
short v;
id=(ID)exinf;
*(short *)0xa4000000=(short)id;/* LED */
}
...
で実行で、Task1,Task2,Task3は実行されてますがCychder1が実行されてない。

いい CRE_CYCのサンプルないでしょうか?

メッセージ #2030 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする

RE: CRE_CYC のサンプルありませんか? (2002-09-18 20:36 by tkohama #2032)

匿名でポストしてしまった。
試したソースは
http://dai5futou.tripod.co.jp/itron/sjis_hosv4.lzh
です。
#2030 への返信

メッセージ #2032 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする

RE: CRE_CYC のサンプルありませんか? (2002-09-18 22:05 by m-arai #2034)

これは多分バグです。
hos-v4/src/kernel/tim/sta_cyc.c
をご覧下さい。

    /* コンテキストチェック */
#ifdef HOS_ERCHK_E_CTX
  if ( mknl_sns_wai() )
  {
    mknl_unl_sys(); /* システムのロック解除 */
    eturn E_CTX;   /* コンテキスト不正 */
  }
#endif

system.cfgでTA_STA属性にしても、初期化ハンドラで
sta_cyc()しても E_CTXになっているはずです。

取り敢えずの対策としては、優先順位最高のタスクの
先頭でsta_cycしてみてください。おそらく動きます。
#2032 への返信

メッセージ #2034 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする

RE: CRE_CYC のサンプルありませんか? (2002-09-18 22:12 by m-arai #2035)

最優先順位で、かつTA_ACT属性になっているか、初期化ハ
ンドラでsta_tsk()されているもの=一番最初に実行状態
になるタスク。

#同一優先順位だったら実行順位はどうなったっけか?
#2034 への返信

メッセージ #2035 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする

RE: CRE_CYC のサンプルありませんか? (2002-09-19 08:49 by 匿名 #2043)

動作確認できました。感謝
sample.c
/* ------------------------------------------------------------------------ */
/* Hyper Operating System V4 サンプルプログラム */
/* */
/* Copyright (C) 1998-2002 by Project HOS */
/* http://sourceforge.jp/projects/hos/ */
/* ------------------------------------------------------------------------ */

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#include "kernel.h"
#include "kernel_id.h"
#include "sh7750.h"
#include "sci.h"

/* メイン関数 */
int main()
{
/* 開始メッセージ */
*(short *)0xa4000002 = 0; /* IRQ1 off */
*(short *)0xa4000000 = 7; /* LED1..3 off */
prime_dumb_sci_scif(B38400);
printf("HOS-V4/SH4 sample program start. shc ver=%04x \n",__HITACHI_VERSION__);

sci_init(0);
sci_open(1,B38400);
sci_open(2,B38400);

sta_hos();

return 0;
}


/* 初期化ハンドラ */
void Initialize(VP_INT exinf)
{
act_tsk(TSKID_SAMPLE1);
act_tsk(TSKID_SAMPLE2);
act_tsk(TSKID_SAMPLE3);
}

/* サンプルタスク */
void Task1(VP_INT exinf)
{
int id;
SYSTIM st;
char buffer[32];
char hello[]="Task1 start\r\n";
id=(ID)exinf;
sci_puts(1,hello);
sta_cyc(CYCID_SAMPLE1); /* Cychdr1 開始 */
for ( ; ; )
{
/* タイマ値取得 */
get_tim(&st);
/* タイマ値出力 */
sprintf(buffer,"%f:sin=%f\r",(float)st.ltime/1000., sin((float)rand()/RAND_MAX));
sci_puts(1,buffer);
/* タスクメッセージ */
/* 0.007秒待つ */
dly_tsk(7);
}
}
void Task2(VP_INT exinf){
int id;
SYSTIM st;short v;
char buffer[32];
char hello[128]="Task2 start\r\n";
id=(ID)exinf;
sci_puts(2,hello);
for( ; ; )
{
get_tim(&st);
/* タイマ値出力 */
sprintf(buffer,"%f:Task%d \r",(float)st.ltime/1000., id);
sci_puts(2,buffer);
/* 0.005秒待つ */
dly_tsk(5);
}
}
void Task3(VP_INT exinf){
for( ; ; )
{
/* 0.030秒待つ */
dly_tsk(30);
}
}

void Cychdr1(VP_INT exinf){
short v;
v=*(short *)0xa4000000;
v++;
*(short *)0xa4000000=v; /* LED */
}

/* ------------------------------------------------------------------------ */
/* Copyright (C) 1998-2002 by Project HOS */
/* http://sourceforge.jp/projects/hos/ */
/* ------------------------------------------------------------------------ */

また、匿名
#2030 への返信

メッセージ #2043 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする

RE: CRE_CYC のサンプルありませんか? (2002-09-19 20:57 by m-arai #2069)

貴重な報告をありがとうございました。

CRE_CYCでのTA_STA属性指定が無効になってしまっていたのは
バグですが、初期化ハンドラでのsta_cycで周期ハンドラが実行状態
にならないことについては、今後の拡張も考慮に入れた上で改めて
非タスクコンテキストでは無効とする仕様であることを確認するなり、
有効になるようにするなりの措置をとることなるでしょう。

#2043 への返信

メッセージ #2069 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする