You are not logged in. This forum allows only logged in users to post. If you want to post in the forum, please log in.
다운로드
소프트웨어 개발
계정
다운로드
소프트웨어 개발
Login
Forgot Account/Password
계정 만들기
언어
도움
언어
도움
×
Login
Login Name
Password
×
Forgot Account/Password
Translation Status of 한국말
Category:
Software
People
PersonalForge
Magazine
Wiki
검색
OSDN
>
브라 우즈 소프트웨어
>
System
>
Operating System Kernels
>
Hyper Operating System(ITRON仕様OS)
>
포럼
>
Developers
>
HOS-V4のC++対応に関して
Hyper Operating System(ITRON仕様OS)
Fork
Description
Project Summary
Developer Dashboard
웹 페이지
Developers
Image Gallery
List of RSS Feeds
Activity
Statistics
History
다운로드
List of Releases
Stats
소스 코드
Code Repository list
Git
hos-v4a
CVS
View Repository
티켓
Ticket List
Milestone List
Type List
Component List
List of frequently used tickets/RSS
Submit New Ticket
Documents
Communication
포럼
List of Forums
Developers (758)
도움 (688)
Open Discussion (342)
Mailing Lists
list of ML
hos-cvs
hos-git
News
포럼:
Developers
(Thread #2704)
Return to Thread list
RSS
HOS-V4のC++対応に関して (2003-05-26 22:38 by
h_sudou
#4850)
Create ticket
組み込みソフトを作成する場合でも、例えクラスを使うまでもない場合であっても、C++を使っていれば関数の型チェックも厳しくやってくれるし、参照を使えばポインタ関連バグも減少させられるし、結構メリットが多いのでHOS-V4とC++の組み合わせでアプリを作成しようと考えています。
ここで問題がありまして、タスクやハンドラなどをC++で書こうとした場合、hos4cfgの出力をkernel_cfg.cppとすれば、良いのかと一瞬、考えたのですが、sta_hosから呼ばれるkernel_cfg_start関数やkernel_cfg_initが呼べなくなってしまったり、const宣言されているものが、外部から見えなくなってしまったりするのでうまくいきません。
こんな時は、hos4cfgを改造して上記のような問題が発生しないkernel_cfg.cppが出力できるようにするのが正しいのでしょうか?
ご意見をおきかせください。
RE: HOS-V4のC++対応に関して (2003-05-27 08:19 by
m-arai
#4855)
Create ticket
おはようございます。
そうですね。C++が使えるに越した事はないでしょう。というか、
特別な不都合が無い以上、使えるべきだと思います。
hos4cfgの改造については、#ifdef __cplusplus ~を使って、Cで
のコンパイルに関しては従来のままであり、C++でも有効になる
ような出力となるようにして、ファイル名についてはオプション
指定(-c kernel_cfg.cpp)ですかね。
…と、ここまで書いてみて、どの辺を修正すべきか考える為、
取り敢えず現状でどうなのか試してみることにしました。
すぐに実験出来る環境が、手元にはia32gccをFreeBSDのgccで無理
矢理makeするものしかなかったので、それです。
sample/printk.hの中身を
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif
で囲う。
C++で引っかかるので、
include/itron.h:
+#ifdef __cplusplus
+typedef void (*FP)(...); /* プログラムの起動番地(ポインタ) */
+#else
typedef void (*FP)(); /* プログラムの起動番地(ポインタ) */
+#endif
あと、kernel_int_sp対策に
include/knl_int.h:
extern INT kernel_int_cnt; /* 割り込みネスト回数 */
extern VP kernel_int_ssp; /* 割り込み時スタック退避 */
+extern const VP kernel_int_sp; /* 割り込み時スタック */
まずは一回普通にlib/sampleでmake -f gcc.mak。
#関係ないけどgcc.makにexe_excの落ち、i386-elf.makに(cre|acre|
#kcre|del)_cycの落ち発見。
cp -f kernel_cfg.c kernel_cfg.cpp
cp -f exphdrs.c exphdrs.cpp
cp -f ostimer.c ostimer.cpp
cp -f sample.c sample.cpp
g++ -O2 -Wall -c -I"../../include" -I. -pipe kernel_cfg.cpp
g++ -O2 -Wall -c -I"../../include" -I. -pipe exphdrs.cpp
g++ -O2 -Wall -c -I"../../include" -I. -pipe ostimer.cpp
g++ -O2 -Wall -c -I"../../include" -I. -pipe sample.cpp
make -f gcc.mak
で、普通に動くオブジェクトが出来ました。
環境によってはhos4cfgに手を入れなくてもOK??
Reply to
#4850
RE: HOS-V4のC++対応に関して (2003-06-02 23:16 by
h_sudou
#4915)
Create ticket
m-araiどの、素早いレスポンスを頂きありがとうございます。(やっと作業する時間ができました)
m-araiさんのリプライを眺めつつ考えてみたら、何も無理してkernel_cfg.cをcpp化せずとも、先ずは、kernel_cfg.cにインクルードされる、ヘッダファイル中タスク関数や割り込みハンドラ関数を、
#ifdef __cplusplus を使って、
extern "C" 宣言できるようにすれば良いわけですね。
これらの関数は、OSとのインタフェースなので、c++化のメリットが半減するわけでもないし。
ということで、お騒がせしましたが先ずはアプリケーションの作成に邁進しようと思います。
ありがとうございました。
Reply to
#4850
RE: HOS-V4のC++対応に関して (2003-06-03 21:01 by
m-arai
#4921)
Create ticket
そうですね。そういえば、kernel_cfg.c自体のcpp化は必
要ない訳でした。
c++による開発は、かなり需要があるかもしれません。
もしまた何かありましたら、ドンドン突っ込んでいただけ
れば幸いです。
#私に答えられるとは限りませんが(--;
#その後、もう少し試してみる気になって、i386-elfなg++
#を作って同様なことを試みてみたのですが、どうしてもリ
#ンクが出来ませんでした。
#FreeBSDのg++では何も考えずに出来たのになぁ…。
Reply to
#4915