(toppers-users 3177) Re: TOPPERS/ASP移植 makeoffset.cおよびoffset.incについて
kouta wada
kouta.wada @ konicaminolta.jp
2010年 4月 14日 (水) 11:43:03 JST
Kota Wadaです。
記載情報の修正です。
> 2) offset.incの作成について
>
> makeoffset.cのコメントにある、「offset.incの作り方」を参考に
> makeoffset.cをコンパイルし、makeoffset.a30を出力しましたが、
> R32C用コンパイラのため、「! BEGIN」に対応したコードがありません。
> R32C用コンパイラから吐き出されるコードでoffset.incを作成する
> 方法はありませんでしょうか。
質問後、M32Cのツールチェインをダウンロードし、
M32Cプロジェクト環境でmakeoffset.cをビルドフェーズを確認すると、
Generate offset.incフェーズにて
genoffset.bat から m16coffset.exe を実行し、offset.incを
作成していることに気が付きました。
R32Cのプロジェクト環境にGenerate offset.incフェーズを取り込み
ビルドすることでoffset.incを作成することができました。
また、M32Cのa30ファイルを確認しましたが、
R32Cと大きな違いはありませんでしたので、
NC308とNC100の違いによりa30ファイルが
大きく影響することはないようです。
> makeoffset.cのコメントにある、「offset.incの作り方」
は、参考にせずにoffset.incの作成はできました。
> はじめまして。
>
> コニカミノルタセンシング派遣のKota Wadaと申します。
>
> TOPPERS/ASPをR32Cへ移植を行っています。
>
> 移植方針としてはM32C-HEWを使用して、
> R32C用に変更しようとしています。
>
> そこで質問が2点あります。
> 1) makeoffset.cのコンパイルエラーの対処方法について
> 2) offset.incの作成について(R32C用の作成方法はありますか?)
>
> *******
> 1) makeoffset.cのコンパイルエラーの対処方法について
>
> HEWの環境で、makeoffset.cをコンパイルすると
> 以下のコンパイルエラーが発生してしまいます。
>
> (エラー箇所)
> static const TINIB ____BEGIN_OFF_TINIB_task = {
> 0 , NULL , (TASK)1 , 0 , 0 , NULL , 0 , NULL
> };
>
> (エラー内容)
> C:\Workspace\asp\arch\m32c_nc308\makeoffset.c(226) : [Error(ccom)]
> invalid '=' operand
> C:\Workspace\asp\arch\m32c_nc308\makeoffset.c(226) : [Error(ccom)]
> invalid '=' operand
> C:\Workspace\asp\arch\m32c_nc308\makeoffset.c(226) : [Error(ccom)]
> invalid '=' operand
> C:\Workspace\asp\arch\m32c_nc308\makeoffset.c(226) : [Warning(ccom)]
> init elements overflow,ignored
>
>
> TINB型は以下のようにtypedefされています。
>
> typedef struct task_initialization_block {
> ATR tskatr; /* タスク属性 */
> intptr_t exinf; /* タスクの拡張情報 */
> TASK task; /* タスクの起動番地 */
> uint_t ipriority; /* タスクの起動時優先度(内部表現) */
> SIZE stksz; /* スタック領域のサイズ(丸めた値) */
> void *stk; /* スタック領域の先頭番地 */
>
> ATR texatr; /* タスク例外処理ルーチン属性 */
> TEXRTN texrtn; /* タスク例外処理ルーチンの起動番地 */
> } TINIB;
>
> NULLはNC100(R32CのCコンパイラ)のstddef.hで
> 以下のように定義されていますので、
> #define NULL ((void _far *)0)
>
> intptr_t型(longのtypedef)にNULLを直接入れることで
> エラーとなったと思われます。
>
> そこで、以下のようにNULLをキャストすることで、
> コンパイルエラーは解消しましたが、対応に問題はありませんでしょうか。
>
> static const TINIB ____BEGIN_OFF_TINIB_task = {
> 0 , (intptr_t)NULL , (TASK)1 , 0 , 0 , NULL , 0 , NULL
> };
>
> *******
> 2) offset.incの作成について
>
> makeoffset.cのコメントにある、「offset.incの作り方」を参考に
> makeoffset.cをコンパイルし、makeoffset.a30を出力しましたが、
> R32C用コンパイラのため、「! BEGIN」に対応したコードがありません。
> R32C用コンパイラから吐き出されるコードでoffset.incを作成する
> 方法はありませんでしょうか。
>
> *******
> ※初めての投稿で、必要な情報が抜けているかもしれません。
> その点はご指摘を頂ければと思います。
>