« 2017年5月 | トップページ | 2018年2月 »

2017年6月

MPLABX+XC32で「relocation truncated to fit: R_MIPS_GPREL16」エラー

MPLabX(v3.05)+XC32(v1.42)でPIC32MZ用のソースをビルドしたとき下記のエラーがでた。

c:/microchip/harmony/v1_11/apps/hoge/firmware/src/hoge.c:123:(.text.APP_Tasks+0x38): relocation truncated to fit: R_MIPS_GPREL16 against `hoge_hoge'
collect2.exe: error: ld returned 255 exit status

調べてみるとmips固有コンパイラオプション(-g)でエラーの様子。
<対策>
全体オプションかファイル固有のビルドオプションに「-g0」や「-g1」を付けてリビルド
  • (全体のとき)「プロジェクト」-「プロパティ」から「xc32-gcc」の「Additional options」に「-g0」等
  • (個別のとき)該当ファイル選択-「プロパティ」から「xc32-gcc」の「Additional options」に「-g0」等
<gオプションメモ>

どうやらgccのデフォルト(-g)は(-g8か-g9)相当みたい。

オプション内容
g0 デバッグ情報なし
g1 最小限のデバッグ情報
g2,g3,g4,g5,g6,g7 行番号、ソースファイル名、変数に関するデバッグ情報
g8 完全なデバッグ情報。変数は読み取り専用
g9 完全なデバッグ情報。変数の値をデバッガーで変更できる
<参考>

MicrochipHarmonyでUSB+SDCard+FS

Microchip HarmonyでUSB+SDカード処理がうまくいかなかった原因がわかったので自分メモ。旧Harmony(v1.04とか)ではSDカードドライバが未検証とかで放置していたのだが、いよいよPICでSDカードを扱いたいので試してみた。
<環境>
  • PIC32MZ2048ECG064
  • Harmony v1.11
  • XC32 v1.43
  • MHCにてUSB(MSD+CDC)+FS(FileSystem)の設定で作成したプロジェクトを使用
  • Windowsドライバ、USBデスクリプタ等はMicrochip標準を使用。
<目的>
  • PIC上のSPIモードで接続したSDカードをWindowsからも読み書きしたい
<症状>
  • Windowsからドライブ(PIC)は見えるがディスクなしとなっている
<確認など>
  • PIC内でSDの接続状態を確認(sysObj.drvSDCardのStatusを確認)すると問題なくSDカードは接続できている。
<原因>
  • system_config.h内設定のSDクライアント数不足
  • 恐らく、USBとFSで1ずつ計2のクライアントとなるため標準ではUSB側クライアントが数不足でNo Diskとなっていたと思われる。
  • Sampleの「usb/msd_sdcard」はFSを使っていないのでクライアント数1でOK。(役立たず)
  • Sampleの「usb/csc_msd_basic」はNVMサンプルなのでSD関係なし。(役立たず)
<対策>
  • MHCの「SD Card」項目で「Number of SD Card Driver Clients」 =2,「Maximum Driver Indeces」 = 2に設定
  • もしくはsystem_config.h内の下記項目を2へ変更してビルド
#define DRV_SDCARD_CLIENTS_NUMBER       2
#define DRV_SDCARD_INDEX_MAX            2
あとは簡単にデバッグできるとHarmonyも便利になるのになー。SYS_ASSERT()とか簡単に出力できるようになりますように。

« 2017年5月 | トップページ | 2018年2月 »

カレンダー

  • keisan
無料ブログはココログ
2019年11月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30