(toppers-users 3609) Re: タスクを生成するだけでE_CTX

高橋和浩@nifty takahashi_kazuhiro @ nifty.com
2011年 10月 15日 (土) 08:08:51 JST


おはようございます。アライブビジョンソフトウェアの高橋です。

TMをインストールして、ビルドしてみました。
オリジナルのtimer3m.cfgのタスクを追加してみました。(ちょっと横着)
CRE_TSK(TIMER_TASK, { TA_HLNG, (VP_INT) 0, timer_task, TIMER_PRIORITY, STACK_SIZE, NULL });
CRE_TSK(TIMER_TASK2, { TA_HLNG, (VP_INT) 0, timer_task, TIMER_PRIORITY, STACK_SIZE, NULL }); //追加

Jsp14Timer3m.mapは以下のようになります。
抜粋
# SECTION                        ATR TYPE    START  LENGTH ALIGN MODULENAME
data_NE                          REL DATA    000400 000000 2     START
                                 REL DATA    000400 000028       SERIAL_MINI
data_NO                          REL DATA    000428 000000 2     START
bss_NE                           REL DATA    000428 000000 2     START
                                 REL DATA    000428 000004       SYSLOG_MINI
                                 REL DATA    00042C 000002       STARTUP
                                 REL DATA    00042E 00004A       TASK
                                 REL DATA    000478 00000E       TIME_EVENT
                                 REL DATA    000486 000720       KERNEL_CFG
                                 REL DATA    000BA6 000054       TASK_EXPANSION
                                 REL DATA    000BFA 00003E       OAKS16
                                 REL DATA    000C38 000010       MONITOR
bss_NO                           REL DATA    000C48 000000 2     START
                                 REL DATA    000C48 000001       CPU_CONFIG
                                 REL DATA    000C49 000001       OAKS16_DEVICE
                                 REL DATA    000C4A 000052       MONITOR
                                 REL DATA    000C9C 000001       TIMER3
program                          REL CODE    0F0000 00006E       START

jspのバージョンとコンパイラのバージョン等の違いから全く一致しないかもしれませんが
上記のように、c00H越えしていることが確認できます。
モニタータスクのワークの途中がエリア外になっているようです。どこがエリア外に
なるかわかりませんが、そうなるとどのように異常動作するのかもわかりにくいですね。

ですので、マップファイルでC00H以内になるようにスタックサイズを減らしてみるとか
トライしてみればよいかと思います。

例:
タスク起動しないのなら、コンテキスト分も不要かもしれませんが、
以下ぐらい減らしてやればいいように思います。

CRE_TSK(TIMER_TASK2, { TA_HLNG, (VP_INT) 0, timer_task, TIMER_PRIORITY, 50, NULL }); //追加



On Fri, 14 Oct 2011 08:48:30 +0900
高橋和浩@nifty <takahashi_kazuhiro @ nifty.com> wrote:

> いつもMLを拝見しています。 アライブビジョンソフトウエアの高橋と申します。
> 
> 外れていたらごめんなさい。単純にメモリ(RAM)が不足しているのではないかと思います。
> マップファイルを確認してみればその真意がわかると思います。
> 
> #本当はビルドして確認すればよいのですが、今さらTMインストールしたくないなぁというのが
> #あります。
> 
> 
> On Thu, 13 Oct 2011 13:54:12 +0900
> 霧島遼二 <kirishima9315 @ gmail.com> wrote:
> 
> > 斉藤様
> > 桐島です。
> > エラーが出た周辺のコードですが、初級実装セミナーのOAKS-MINIボード用教材
> > BeginnerTrainingSeminar0010103/jsp14-m16c-edc-041008/OBJ/TIMER3
> > にある timer3m.cfg, timer3.c, timer3.h に以下の部分を追加しました。
> > シリアル通信を行った瞬間にE_CTXが繰り返し発生するので、TEST_TASKを生成するところでおかしなことになっているのではないかと思うのですが。
> > 
> > -------timer3m.cfg-------
> > INCLUDE("\"timer3.h\"");
> > CRE_TSK(ENTRY_TASK, { TA_HLNG, 0, entry_task,
> > DEFAULT_MAIN_PRIORITY,STACK_SIZE, NULL});
> > CRE_TSK(TIMER_TASK, { TA_HLNG, (VP_INT) 0, timer_task, TIMER_PRIORITY,
> > STACK_SIZE, NULL });
> > CRE_TSK(TEST_TASK,{ TA_HLNG, (VP_INT) 0,
> > test_task,TEST_PRIORITY,STACK_SIZE,NULL}); // 追加
> > -------------------------
> > 
> > -------timer3.c-------
> > /* 一番後ろに追加 */
> > void
> > test_task(VP_INT exinf)
> > {
> > }
> > ----------------------
> > 
> > -------timer3.h-------
> > /*
> >  *  タスク優先度の設定
> >  */
> > #define DEFAULT_MAIN_PRIORITY  8
> > #define TIMER_PRIORITY         9
> > #define TEST_PRIORITY          9 // 追加
> > 
> > 
> > /*
> >  *  関数のプロトタイプ宣言
> >  */
> > #ifndef _MACRO_ONLY
> > 
> > extern void entry_task(VP_INT exinf);
> > extern void  timer_task(VP_INT exinf);
> > extern void  test_task(VP_INT exinf); // 追加
> > #endif /* _MACRO_ONLY */
> > ----------------------
> > 
> > 2011年10月13日12:47 Saito Naoki <saito.naoki @ nmiri.city.nagoya.jp>:
> > 
> > > 桐島さん
> > >
> > > 斉藤と申します.
> > >
> > > エラーが出た周辺のコードなどは見せていただくことは可能でしょうか.
> > >
> > >
> > > (11/10/13 10:42), 霧島遼二 wrote:
> > > > お世話になります。
> > > > 桐島と申します。
> > > > 最近μitronの勉強を始めました。
> > > > 初級実装セミナーのOAKS-MINIボード用教材でサンプルをボード(OAKS16-MINI
> > > > FullKit)に実装して動作確認をしていたのですが、試しにTIMER3にCRE_TSKで新
> > > > しくタスク(中身は空)を追加してみたところ、E_CTX reported by `isig_tim()'
> > > > in line 63 of `timer.c' というコンテキストエラーが発生します。
> > > > タスクを追加するだけでこのようなエラーが出るものなのでしょうか。
> > > > 組み込みは全くの初心者なのでよろしくお願いします。
> > >
> > >
> > >
> ---
> アライブビジョンソフトウエア株式会社
> 高橋和浩
> 673-0005兵庫県明石市小久保2-2-7幹線ビル4F
> Email:takahashi_kazuhiro @ nifty.com
> http://homepage3.nifty.com/ALVS/
> TEL:078-922-2177
> FAX:078-597-8290
> 携帯:080-1495-8094
> PHS:070-6923-2908
> 
---
アライブビジョンソフトウエア株式会社
高橋和浩
673-0005兵庫県明石市小久保2-2-7幹線ビル4F
Email:takahashi_kazuhiro @ nifty.com
http://homepage3.nifty.com/ALVS/
TEL:078-922-2177
FAX:078-597-8290
携帯:080-1495-8094
PHS:070-6923-2908