なんとかなるさね

マイコンをネタにブログを始めてみました


スポンサーサイト 

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--/--/--   blog-entry-   category: スポンサー広告

go page top

Arduino IDE|GadgetRenesas基板用IDE4GR 1.6.5(のようなもの)を作るには? (8) 

GadgetRenesas基板用IDE4GR 1.6.5/1.6.7(のようなもの)を作ってみることを考え始めたのですが、今までの
幾つかのエントリ(738, 739, 740)ではArduino Eclipse pluginでビルドする場合に以下のビルド変数を定義して
いたので、今回そのような定義をしなくても良いplatform.txtを作って試してみました。(とはいえ、すっきり
とした対処になっていない部分もあるのですが。)

A.RECIPE.C.COMBINE.PATTERN.1
A.RECIPE.C.COMBINE.PATTERN.2

今回試してみたplatform.txtは以下の通りです。(2つ前のエントリのplatform.txtを変更したものです。)

ファイル: スケッチブックフォルダhardwareGadgetRenesas_core_debugrl78platform.txt

変更内容: 赤字の箇所を追加(太字は変更部分)

# this can be overriden in boards.txt
build.extra_flags=
build.core_files=--whole-archive "{archive_file_path}" --no-whole-archive
build.variant_core_lib="{build.variant.path}/core_v060.a"
build.variant_system_libs="{build.system.path}/proprietary/libs/picalicoFree.a" "{build.system.path}/proprietary/libs/pfdl.a"

途中省略

## Combine gc-sections, archives, and objects
#recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" "-M={build.path}/{build.project_name}.map" {object_files} "{build.path}/exception_handler.cpp.o" "{build.path}/vector_table.c.o" "{build.variant.path}/core_v060.a" "{build.variant.path}/picalicoFree.a" "{build.variant.path}/pfdl.a" "-L{build.path}" "{build.path}/{archive_file}" -e_PowerON_Reset "-T{build.variant.path}/{build.ldscript}" {compiler.c.elf.flags} "{runtime.ide.path}/hardware/tools/gcc-rl78/rl78-elf/lib/gcc/rl78-elf/4.8-GNURL78_v14.03/crtbegin.o" "{runtime.ide.path}/hardware/tools/gcc-rl78/rl78-elf/lib/gcc/rl78-elf/4.8-GNURL78_v14.03/crtend.o" "{runtime.ide.path}/hardware/tools/gcc-rl78/rl78-elf/rl78-elf/lib/crtn.o" -o "{build.path}/{build.project_name}.elf" "-L{runtime.ide.path}/hardware/tools/gcc-rl78/rl78-elf/rl78-elf/lib" "-L{runtime.ide.path}/hardware/tools/gcc-rl78/rl78-elf/lib/gcc/rl78-elf/4.8-GNURL78_v14.03" --start-group --gc-sections -lstdc++ -lnosys -lm -lc -lgcc --end-group
途中省略
#recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" "-M={build.path}/{build.project_name}.map" {object_files} --whole-archive "{archive_file_path}" --no-whole-archive {build.variant_core_lib} {build.variant_system_libs} -e_PowerON_Reset "-T{build.variant.path}/{build.ldscript}" {compiler.c.elf.flags} "{runtime.tools.gcc-rl78.path}/rl78-elf/lib/gcc/rl78-elf/4.8-GNURL78_v14.03/crtbegin.o" "{runtime.tools.gcc-rl78.path}/rl78-elf/lib/gcc/rl78-elf/4.8-GNURL78_v14.03/crtend.o" "{runtime.tools.gcc-rl78.path}/rl78-elf/rl78-elf/lib/crtn.o" {compiler.c.elf.extra_flags} -o "{build.path}/{build.project_name}.elf" "-L{runtime.tools.gcc-rl78.path}/rl78-elf/rl78-elf/lib" "-L{runtime.tools.gcc-rl78.path}/rl78-elf/lib/gcc/rl78-elf/4.8-GNURL78_v14.03" --start-group --gc-sections -lstdc++ -lnosys -lm -lc -lgcc --end-group
recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" "-M={build.path}/{build.project_name}.map" {build.core_files} {object_files} {build.variant_core_lib} {build.variant_system_libs} -e_PowerON_Reset "-T{build.variant.path}/{build.ldscript}" {compiler.c.elf.flags} "{runtime.tools.gcc-rl78.path}/rl78-elf/lib/gcc/rl78-elf/4.8-GNURL78_v14.03/crtbegin.o" "{runtime.tools.gcc-rl78.path}/rl78-elf/lib/gcc/rl78-elf/4.8-GNURL78_v14.03/crtend.o" "{runtime.tools.gcc-rl78.path}/rl78-elf/rl78-elf/lib/crtn.o" {compiler.c.elf.extra_flags} -o "{build.path}/{build.project_name}.elf" "-L{runtime.tools.gcc-rl78.path}/rl78-elf/rl78-elf/lib" "-L{runtime.tools.gcc-rl78.path}/rl78-elf/lib/gcc/rl78-elf/4.8-GNURL78_v14.03" --start-group --gc-sections -lstdc++ -lnosys -lm -lc -lgcc --end-group

すっきりとした対処になっていない部分というのは、Arduino Eclipse pluginが作るarduino.arというファイルが
以下のようにリンクコマンドライン上に2箇所現れてしまうことです。(パスの有無の違いがありますが、実体は
同じファイルです。今のところ実害がある訳ではありませんが。)



なお、このようにしてもArduino IDE 1.6.5/1.6.7でビルドすることが出来ました。




追記 : メモ

ちなみに、--whole-archive "{archive_file_path}" --no-hole-archiveは、IDE4GR 0.6.1ではリンクコマンド
ライン上でexception_handler.cpp.oとvector_table.c.oと{archive_file}の組み合わせだったものなのですが、
ビルド時に生成される場所がArduino Eclipse plugin V2.4とArduino IDE 1.6.5とArduino IDE 1.6.7で以下の
ように異なっていましたので、以前のエントリでリンクエラーを回避する為に書き換えるようにしたものです。

Arduino Eclipse plugin V2.4の場合

{build.path}/arduino/exception_handler.cpp.o
{build.path}/arduino/vector_table.c.o
{build.path}/arduino.ar

Arduino IDE 1.6.5の場合

{build.path}/exception_handler.cpp.o
{build.path}/vector_table.c.o
{build.path}/core.a

Arduino IDE 1.6.7の場合

{build.path}/core/exception_handler.cpp.o
{build.path}/core/vector_table.c.o
{build.path}/core/core.a

実は、IDE4GRのプリビルドコアライブラリを使用する場合には{archive_file}のarduino.arやcore.aの中身が
exception_handler.cpp.oとvector_table.c.o及びinterrupt_handlers.c.oの3つだけになってしまうのですが、
6つ前のエントリ5つ前のエントリのようにソースコードからビルドした場合には3つだけでは無くなります。
ところが、--whole-archive "{archive_file_path}" --no-hole-archiveは、{archive_file}の中身を全てリンク
してしまいますので使われていないモジュールがリンクされた分だけROM/RAMの使用量が増えてしまいます。
ソースコードからビルドするケースというのはコアライブラリをデバッグする必要に迫られている状況であり、
通常はソースデバッグで支障が出ないようにコンパイル時の最適化レベルを下げるので更に使用量が増えます。
もしROM/RAMがオーバーしてしまった場合、その量が若干であれば、以下の変更で回避出来なくもないです。

ファイル: スケッチブックフォルダ\hardware\GadgetRenesas_core_debug\rl78\boards.txt
変更内容: 赤字の箇所を追加

Arduino Eclipse plugin V2.4の場合 (他にもplatform.txtの変更やビルド変数を定義してしまうことでも可能)

kurumi.build.mcu=rl78
kurumi.build.f_cpu=32000000L
kurumi.build.board=RL78_KURUMI
kurumi.build.core=arduino_source
kurumi.build.core_files="{build.path}/arduino/exception_handler.cpp.o" "{build.path}/arduino/vector_table.c.o" "{archive_file_path}"
kurumi.build.ldscript=linker_scripts/rl78_R5F100GJAFB.ld
kurumi.build.variant=gr_kurumi
kurumi.build.variant_core_lib=

Arduino IDE 1.6.5の場合 (platform.txtの変更やplatform.local.txtによる修飾でも可能)

kurumi.build.mcu=rl78
kurumi.build.f_cpu=32000000L
kurumi.build.board=RL78_KURUMI
kurumi.build.core=arduino_source
kurumi.build.core_files="{build.path}/exception_handler.cpp.o" "{build.path}/vector_table.c.o" "{archive_file_path}"
kurumi.build.ldscript=linker_scripts/rl78_R5F100GJAFB.ld
kurumi.build.variant=gr_kurumi
kurumi.build.variant_core_lib=

Arduino IDE 1.6.7の場合 (platform.txtの変更やboards.local.txtやplatform.local.txtによる修飾でも可能)

kurumi.build.mcu=rl78
kurumi.build.f_cpu=32000000L
kurumi.build.board=RL78_KURUMI
kurumi.build.core=arduino_source
kurumi.build.core_files="{build.path}/core/exception_handler.cpp.o" "{build.path}/core/vector_table.c.o" "{archive_file_path}"
kurumi.build.ldscript=linker_scripts/rl78_R5F100GJAFB.ld
kurumi.build.variant=gr_kurumi
kurumi.build.variant_core_lib=

例えば、今回の場合はROM/RAMの使用量が以下のように変わりました。(最適化レベルは-Osのままですが。)

--whole-archive "{archive_file_path}" --no-hole-archive の場合

.lowtext            312       220(0x000DC)
.data              1170   1027984(0xFAF90)
.bss               1196   1029154(0xFB422)
.rodata             864     12288(0x03000)
.text             22172     13152(0x03360)


"{build.path}/arduino/exception_handler.cpp.o" "{build.path}/arduino/vector_table.c.o" "{archive_file_path}" の場合

.lowtext            180       220(0x000DC)
.data              1166   1027984(0xFAF90)
.bss                670   1029150(0xFB41E)
.rodata             596     12288(0x03000)
.text             11650     12884(0x03254)


追記 : メモ

Arduino Eclipse plugin V2.4の場合はboards.txtやplatform.txtを変更する他にビルド変数を定義してしまう
ことでも可能です。

ビルド変数: A.BUILD.CORE_FILES
変数の内容: "${A.BUILD.PATH}/arduino/exception_handler.cpp.o" "${A.BUILD.PATH}/arduino/vector_table.c.o" "${A.ARCHIVE_FILE_PATH}"



なお、Arduino Eclipse pluginが読み取ったboards.txtやplatform.txtの内容は環境変数に反映されています。
(これらの環境変数は変更が出来ません。変更操作は出来ますがダイアログを閉じて開くと元に戻っています。)



追記 : メモ

ちなみに、exception_handler.cppとvector_table.c及びinterrupt_handlers.c並びに同類のソースファイルの
reset_program.Sは以下の通りでした。(なお、IDE4GR 0.6.1ではreset_program.SはIDE上ではコンパイル
されませんが、reset_program.S.oがプリビルドコアライブラリに入っていました。)

exception_handler.cpp
vector_table.c
interrupt_handlers.c
reset_program.S

関連記事

2016/03/01   blog-entry-743   category: Arduino Lib & CrossGCC

go page top

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。