(toppers-users 3374) toppers-users 3373  Re: makeoffsetの取り扱について

mgg03420 @ nifty.com mgg03420 @ nifty.com
2011年 1月 21日 (金) 11:07:49 JST


大曲です
>最初に、JSPのポーティングの際は、ユーザズマニュアルだけでなく、ポー
>ティングガイドも読むようにしてください。
しつれいしました。

>類似の関数は、kernel/task.c に calltex という関数がありますので、
すでに作られていたのてすか

>この方法ではアセンブラから参照できないと思います。
cpu_support.Sでoffset.hを展開し
int     TCB_texptn=&(((TCB *) 0)->texptn);
のようにとられたアドレス値(TCB先頭からの相対値)をアセンブラで参照するように
なっていました、
CodeWarriorのコンパイラは”C”ライクな記述が出来るようです。
またこの辺はCFV2のコードを利用しているようです。

今後ともよろしくお願いします。

----- Original Message -----
>Date: Fri, 21 Jan 2011 05:11:55 +0900
>From: Hiroaki TAKADA <hiro @ ertl.jp>
>Subject: (toppers-users 3373) Re: makeoffsetの取り扱について
>To: users @ toppers.jp
>Cc: mgg03420 @ nifty.com
>
>
>大曲様
>
>最初に、JSPのポーティングの際は、ユーザズマニュアルだけでなく、ポー
>ティングガイドも読むようにしてください。
>
>makeoffset.c から offset.h を作るスクリプトは utils/genoffset です
>が、GCC対応になっており、CodeWarrior 向けには修正が必要と思われま
>す。この辺りのことは、ポーティングガイドに軽く書いてあります(ASP
>カーネルのポーティングガイドには詳しい説明がありますが、若干改良
>されています)。
>
>> void kernel_call_texrtn_chk(void){
>>    if(runtsk->enatex){
>>      kernel_call_texrtn();/*   タスク例外処理ルーチンの呼出し */
>>    }
>> }
>
>類似の関数は、kernel/task.c に calltex という関数がありますので、
>それをお使い下さい。
>
>> offset.hはmakeoffset.cのマクロを展開し、下記のようにするとコンパイラ依
>存は無い
>> ようなのでスクリプトを作らずに実装できそうですがどんなものでしょうか。
>>
>> offset.h
>> int     TCB_texptn=&(((TCB *) 0)->texptn);
>> int     TCB_msp=&(((TCB *) 0)->tskctxb.msp);
>> int     TCB_pc=&(((TCB *) 0)->tskctxb.pc);
>
>offset.h は、アセンブラのプログラムから構造体のオフセットを参照するた
>めですので、この方法ではアセンブラから参照できないと思います。それと
>も、CodeWarrior では、こんな記述ができるんでしょうか?
>
>高田広章
>名古屋大学
>
>(11/01/20 23:19), mgg03420 @ nifty.com wrote:
>> 始めまして 冨士設計 大曲不次と言います
>> 
>> ToppersはTi-5402を5414に実装した経験のみの素人です。
>> freescale JM-Badgeに
>> かつてフリースケール社のショーでもらったものですが現在も市販されています。
>> これはToppers-JSPが可能とあり、ソースもかつてはフリースケールのホー
ムペ
>> ージからダウンロードできました(今は見当たらない)。
>> 2010/6頃CodeWarriorがV6.2からV6.3UPし無償版でのファイル数32の制限も解消さ
れ
>> ました。
>> そこでCodeWarriorでプロジェクトを作り、ビルドできました(一応!)。
>> がまだタスク間を交互に走らせるテストが出来た状態です。
>> これからタスク例外処理を実装しようとしています。
>> 疑問点がmakeoffsetの取り扱いです、このへんは。
>> http://www.mit.pref.miyagi.jp/embedded/TOPPERS/doc/user_man/jsp-1.4.3/index
.ht
>> ml
>> TOPPERS/JSPカーネル ユーザズマニュアル
>> にも記述が無いようです、ネットで調べたところ
>> makeoffset.c
>>>> 処理系に対応する何らかの処理
>>>> offset.h
>> ということをすれば良い。
>> と言うように思いますが、面倒なのがビット操作でこれはコンパイラ依存になって
しま
>> います。
>> この処理をするスクリプトか無かったことと、さらに開発環境を変えるとスクリプ
トを
>> 作り直す必要が出るかもしれません。
>> そこで私はビット操作を”C"にまかせ、下記のようにすると処理は少しかかります
がポ
>> ータビリティは良くなると考えているところてす。
>> 
>> cpu_support.Sを”C"に変更
>> cpu_support.c
>> 
>> void kernel_call_texrtn_chk(void){
>>    if(runtsk->enatex){
>>      kernel_call_texrtn();/*   タスク例外処理ルーチンの呼出し */
>>    }
>> }
>> 
>> asm void _kernel_dispatch(void){
>> ---
>> ---
>>          move.l _kernel_runtsk, a0               /* A0 を _runtsk に */
>>          add.l   TCB_texptn,a0
>>          tst.l (a0)              /* texptn が 0 でなければ           */
>>          bne _kernel_call_texrtn_chk         /*   タスク例外処理ルーチンの
呼出
>> し */
>> dispatch_r_1:
>> 
>> offset.hはmakeoffset.cのマクロを展開し、下記のようにするとコンパイラ依存は
無い
>> ようなのでスクリプトを作らずに実装できそうですがどんなものでしょうか。
>> 
>> offset.h
>> int     TCB_texptn=&(((TCB *) 0)->texptn);
>> int     TCB_msp=&(((TCB *) 0)->tskctxb.msp);
>> int     TCB_pc=&(((TCB *) 0)->tskctxb.pc);
>> 
>> よろしくお願いします。
>> 
>> 有限会社 富士設計
>> 大曲 不次
>> MGG03420 @ nifty.ne.jp
>> http://www.d1.dion.ne.jp/~fujisekk
>> 携帯
>> http://www.d1.dion.ne.jp/~fujisekk/top_mobile.htm
>> 
>> 
>