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

Hiroaki TAKADA hiro @ ertl.jp
2011年 1月 21日 (金) 05:11:55 JST


大曲様

最初に、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
> 
>