(toppers-users 4224) Re: GHSとCX用スタートアップルーチンの差について

ASTC Higashijima kiyohiro.higashijima @ astc-design.com
2014年 4月 14日 (月) 18:10:46 JST


名古屋大学 石川様
毎々お世話になっております。
東島@ASTCです。

お返事いただき、ありがとうございます。

(2014/04/14 16:39), 石川 拓也 wrote:
> ASTC 東島さま
>
> お世話になっております。
> 名古屋大学の石川です。
>
> 私の方でも、ATK2-SC1をfl850fl4_ghsで使用しておりますが、
> bssセクションの終了番地は、4バイト境界にアラインされます。
> 例えば、bssセクションの一番最後に1バイトや2バイトのデータ
> を配置したとしても、__bss_endは、4の倍数となります。
>
> これは、fl850fl4_ghs用のリンカスクリプトにおいて、__bss_end
> をアラインする記述があるためです。
> 	.bss	   :
> 	{
> 	  . = ALIGN(4);
> 	  *(.bss)
> 	  *(COMMON)
> 	  . = ALIGN(4);
> 	  __bss_end = .;
> 	} > INTRAM
>
> ご報告されたエラーは、ATK2-SC1にはじめから付属している
> sampleでコンパイルしてみた結果、そのようなエラーとなった
> ということでしょうか?
ご指摘の通り、スクリプトでは4バイトになるようにしているのですが、
下記に示したマップファイルを見ると4バイト長になってないので、
質問させていただきました。
使用したものはすべて、付属しているものを利用させていただきました。
>
> また、ご利用になっているGHSなどのバージョンによって振舞いが
> 異なっているのかもしれません。
> ご利用になっているGHSなどのバージョンは、prc_user.txtに
> 記載されているものと同一でしょうか?
こちらで使用しているGHSのコンパイラはmulti_614です。
ご指摘のように、バージョン違いによるのかもしれません。

そこで、その後の対処法としては、
CXのスタートアップルーチンを参考にして、
bssをバイトでクリアするように変更しました。
この結果、スタートアップルーチンはエラーなく通過しました。

現状、私の使用しているターゲット上で、立ち上がっているようです。
(若干sample.cは変更しております)
UARTから送る入力コマンドをどのような順番で入力すれば
正しく動作し、ログ出力するのか確認できていない状況です。
色々試してみたいと思っております。

以上です。


>
> 以上、よろしくお願い致します。
>
>
> (2014/03/14 13:06), ASTC Higashijima wrote:
>> 各位
>> 毎々お世話になっております。
>> 東島@ASTCです。
>>
>> 時間が十分に当てられず、亀の歩きになっております。
>> GHSを使ったビルドはできたのですが(ターゲットはfl850fl4_ghsです)、
>> スタートアップルーチンで無限ループしています。
>> 原因はbssセクションのクリアのようなのです。
>>      be      bss_clear_end
>> の条件に合わず、ループしているようです。
>> マップファイルを確認するとbss領域がワード長に
>> なっていないためのようです。
>> 続くdataセクションの初期化(ROM化対応)のコードも
>> 4バイト長を期待しているようです。
>>
>> リンカに渡すオプションなどはデフォルトのまま
>> 利用しており、変更しておりません。
>> 何か指定する必要があるのでしょうか?
>> 下にCXとGHSを比較するためにソースの一部とマップ
>> ファイルの一部を添付します。
>> また、CX用のリンカスクリプトを探すことができませんでした。
>> どこにあるのか教えていただけたら助かります。
>>
>> ご教示いただければ助かります。
>> 以上、よろしくお願いします。
>>
>> GHS用マップファイル
>> .bss fedde5ea+000000 __bss_end
>> .sbss feddc0c8+000000 __bss_start
>> GHS用スタートアップルーチン
>> /*
>> * bssセクションのクリア
>> * アラインされているので4ずつ行く
>> */
>> Lea __bss_start, ep
>> Lea __bss_end, r6
>> bss_clear_start:
>> cmp ep, r6
>> be bss_clear_end
>> sst.w r0, 0[ep]
>> add 4, ep
>> br bss_clear_start
>> bss_clear_end:
>>
>>
>>
>>
>> CX用マップファイル
>> 680 0xfedf90c8 0x4 Global Object __ssbss
>> 681 0xfedfb6da 0x4 Global Object __esbss
>> 682 0xfedfb6dc 0x4 Global Object __sbss
>> 683 0xfedfc6dc 0x4 Global Object __ebss
>>
>>
>> CX用スタートアップルーチン
>> #
>> *****************************************************************************
>> # sbss領域のゼロクリア
>> #
>> *****************************************************************************
>> mov #__ssbss, r13
>> mov #__esbss, r12
>> cmp r12, r13
>> jnl .L11
>> .L12:
>> st.w r0, [r13]
>> add 4, r13
>> cmp r12, r13
>> jl .L12
>> .L11:
>>
>> #
>> *****************************************************************************
>> # bss領域のゼロクリア
>> #
>> *****************************************************************************
>> mov #__sbss, r13
>> mov #__ebss, r12
>> cmp r12, r13
>> jnl .L14
>> .L15:
>> st.w r0, [r13]
>> add 4, r13
>> cmp r12, r13
>> jl .L15
>> .L14:
>>
>>
>> 以上、よろしくお願いします。
>>


-- 
東島 清宏 (Kiyohiro Higashijima)
Australian Semiconductor Technology Company 株式会社

Simulation, Validation, and Design of Semiconductors, Software and Systems

〒130-0013 東京都墨田区錦糸1−2−1 アルカセントラル14階
TEL: +81-3-6853-6681
FAX: +81-3-6853-6601
Email: kiyohiro.higashijima @ astc-design.com
Homepage: http://www.astc-design.com