ページ 1 / 1
MPLABでのエラー
Posted: 2013年2月12日(火) 21:03
by YU
こんにちは
早速質問させていただきます。
現在MPLABでプログラムを作成しているのですが,ビルドしたときに次のようなエラーが出てきてしまい,詰まっています。
usb_host_msd.o: Link Error: Could not allocate section .text, size = 5796 PC units, attributes = code
VS1011.o: Link Error: Could not allocate section .text, size = 428 PC units, attributes = code
Link Error: Could not allocate program memory
このエラーはどういった理由ででているのでしょうか。
教えてください。
Re: MPLABでのエラー
Posted: 2013年2月12日(火) 21:09
by softya(ソフト屋)
PICの書き込めるフラッシュメモリ容量をオーバーした可能性があります。
Re: MPLABでのエラー
Posted: 2013年2月12日(火) 21:26
by YU
softya(ソフト屋)さん
回答ありがとうございます。
書き込むプログラムの量を減らせばエラーを解決することができますかね?
あと,エラー文にも出ている
usb_host_msd と VS1011 それぞれのソースファイルとヘッダーファイルは何か関係しているのでしょうか?
Re: MPLABでのエラー
Posted: 2013年2月12日(火) 21:33
by softya(ソフト屋)
私はPICに詳しいわけではないですが、
usb_host_msdは、「USB Host Mass Storage Device Driver」って事でUSBメモリの関連です。
VS1101は前の質問にあったMP3コーデックIC関係の制御ライブラリでは?
自分で作っているモノのプログラム関係の構成をちゃんと把握したほうが良いと思いますよ。
Re: MPLABでのエラー
Posted: 2013年2月15日(金) 01:58
by YU
返信をいただいてから自分なりにエラーを解決しようとしたのですが,VS1011の方のエラーはなくすことがきましたが,
usb_host_msd の方のエラーはなくすことができません。
どのようにしたらエラーをなくす可能性ができるでしょうか。
Re: MPLABでのエラー
Posted: 2013年2月15日(金) 10:45
by softya(ソフト屋)
たぶん、プログラムが容量をオーバーしているのでPIC24を更に容量の大きなものに乗り換えるのが一番早道だと思います。
VS1011の方のエラーはどうやって改善したのですか?
Re: MPLABでのエラー
Posted: 2013年2月16日(土) 11:09
by YU
PICマイコンは今からでは変更することができないので,今使っている型でやっていきます。
VS1011eのエラーはMPLABのプロジェクトを開いた時に出てくるソースファイルとヘッダーファイルのツリー部分から外しても問題ないソースファイルとヘッダーファイルを消したところエラーが消えました。
Re: MPLABでのエラー
Posted: 2013年2月16日(土) 11:16
by softya(ソフト屋)
プログラムコードを理解して収まるように場合によってはusb_host_msdなどを含めて全プログラムを組み直さないと出来ないと思います。
そこまでの知識がありますでしょうか? プログラムの大きさをコンパクトにするというのはかなり高度な知識なんです。
そうですね。現状のメモリマップの情報を頂けますか。 あとPIC24Fのメモリのスペックを教えて下さい。
Re: MPLABでのエラー
Posted: 2013年2月16日(土) 23:58
by YU
正直高度な知識が必要であるとは思ってもいませんでした。
当然私にはそんな知識なんてとてもなく・・・
現状のメモリマップというのはどこでわかるものなのでしょうか?
メモリマップを見るのは初めてなので・・・
私が使っているPICはPIC24FJ64GB002という型です。
メモリのスペックは
Memory Type:Flash
Program Memory (KB):64
RAM Bytes:8,192
となっていますが,これでよいでしょうか?
Re: MPLABでのエラー
Posted: 2013年2月17日(日) 00:28
by softya(ソフト屋)
なんでもくっ付ければ動くというものではありません。
それはマイコンを舐めています。
少ない資源でなんとか機能を実現するのがマイコンですからメモリが足らなくなるなどよく有ることとしか言えません。
私としてはPIC24FJ96やPIC24FJ128などのProgram Memory (KB)の大きなものに変えるのが一番早いと思います。
ただ、メモリマップを確認してないと安心できないですが、MPLABの操作はまったく自信がありません。
リンク周りの表示として表示されるはずなのですが。
Re: MPLABでのエラー
Posted: 2013年2月17日(日) 15:28
by softya(ソフト屋)
両方のプロジェクトを入手して比べてみました。
サイズ的には素直に足すと確実にオーバーします。
で、メモリマップは拡張子.mapのファイルがプロジェククトの所に出来るのでそれを確認してみて下さい。
内容をここに貼り付けてもらうとベストです。
Re: MPLABでのエラー
Posted: 2013年2月18日(月) 21:58
by YU
softya(ソフト屋)さんわざわざ入手までしてくれてすみません;;
.mapの内容は今のところこんな感じになっています。
Microchip Technology Inc, vv3_31 (A)
Tool Name:
c:\program files\microchip\mplab c30\bin\bin\..\bin/pic30-coff-ld.exe
Command:
-p24FJ64GB002 \
-omp3player.cof \
-Lc:/program files/microchip/mplab c30/bin/bin/.. \
-Lc:/program files/microchip/mplab c30/bin/bin/../../lib \
-Lc:/program files/microchip/mplab c30/bin/bin/../../lib/PIC24E \
-Lc:/program files/microchip/mplab c30/bin/bin/../../support/PIC24E/gld \
-Lc:/program files/microchip/mplab c30/bin/bin/../../lib/PIC24F \
-Lc:/program files/microchip/mplab c30/bin/bin/../../support/PIC24F/gld \
-Lc:/program files/microchip/mplab c30/bin/bin/../../lib/PIC24H \
-Lc:/program files/microchip/mplab c30/bin/bin/../../support/PIC24H/gld \
-Lc:/program files/microchip/mplab c30/bin/bin/../../lib/dsPIC30F \
-Lc:/program files/microchip/mplab c30/bin/bin/../../support/dsPIC30F/gld \
-Lc:/program files/microchip/mplab c30/bin/bin/../../lib/dsPIC33E \
-Lc:/program files/microchip/mplab c30/bin/bin/../../support/dsPIC33E/gld \
-Lc:/program files/microchip/mplab c30/bin/bin/../../lib/dsPIC33F \
-Lc:/program files/microchip/mplab c30/bin/bin/../../support/dsPIC33F/gld \
mp3player.o \
VS1011.o \
FSIO.o \
usb_config.o \
usb_host.o \
usb_host_msd.o \
usb_host_msd_scsi.o \
FS_Functions.o \
-Tp24FJ64GB002.gld.00 \
--defsym=__MPLAB_BUILD=1 \
--defsym=__MPLAB_DEBUG=1 \
-Map=mp3player.map \
--report-mem \
-start-group \
--library=pic30-coff \
--library=m-coff \
--library=c-coff \
-end-group \
Archive member included because of file (symbol)
c:/program files/microchip/mplab c30/bin/bin/../../lib\libpic30-coff.a(crt0_standard.o)
(_resetPRI)
c:/program files/microchip/mplab c30/bin/bin/../../lib\libpic30-coff.a(data_init_standard.o)
c:/program files/microchip/mplab c30/bin/bin/../../lib\libpic30-coff.a(crt0_standard.o) (_data_init_standard)
c:/program files/microchip/mplab c30/bin/bin/../../lib\libm-coff.a(udivsi3.o)
FSIO.o (__udivsi3)
c:/program files/microchip/mplab c30/bin/bin/../../lib\libm-coff.a(umodsi3.o)
FSIO.o (__umodsi3)
c:/program files/microchip/mplab c30/bin/bin/../../lib\libm-coff.a(divmoddi3.o)
FSIO.o (__udivdi3)
c:/program files/microchip/mplab c30/bin/bin/../../lib\libc-coff.a(tolower.XXo)
FSIO.o (tolower)
c:/program files/microchip/mplab c30/bin/bin/../../lib\libc-coff.a(memset.XXo)
FSIO.o (memset)
c:/program files/microchip/mplab c30/bin/bin/../../lib\libc-coff.a(strncpy.XXo)
FSIO.o (strncpy)
c:/program files/microchip/mplab c30/bin/bin/../../lib\libc-coff.a(toupper.XXo)
FSIO.o (toupper)
c:/program files/microchip/mplab c30/bin/bin/../../lib\libc-coff.a(strlen.XXo)
FSIO.o (strlen)
c:/program files/microchip/mplab c30/bin/bin/../../lib\libc-coff.a(strcpy.XXo)
FSIO.o (strcpy)
c:/program files/microchip/mplab c30/bin/bin/../../lib\libc-coff.a(strchr.XXo)
FSIO.o (strchr)
c:/program files/microchip/mplab c30/bin/bin/../../lib\libc-coff.a(malloc.XXo)
usb_host.o (malloc)
c:/program files/microchip/mplab c30/bin/bin/../../lib\libc-coff.a(memcpy.XXo)
c:/program files/microchip/mplab c30/bin/bin/../../lib\libc-coff.a(malloc.XXo) (memcpy)
c:/program files/microchip/mplab c30/bin/bin/../../lib\libpic30-coff.a(sbrk.o)
c:/program files/microchip/mplab c30/bin/bin/../../lib\libc-coff.a(malloc.XXo) (sbrk)
c:/program files/microchip/mplab c30/bin/bin/../../lib\libpic30-coff.a(brk.o)
c:/program files/microchip/mplab c30/bin/bin/../../lib\libpic30-coff.a(sbrk.o) (brk)
こんな感じでわかるでしょうか?
Re: MPLABでのエラー
Posted: 2013年2月18日(月) 22:03
by YU
最近回路の方を作っていたのでプログラムの方がおろそかになっています;
Re: MPLABでのエラー
Posted: 2013年2月18日(月) 22:14
by softya(ソフト屋)
必要な物しかくっつけてはいない様ですね。
こうなると、メモリ不足の原因であるUSBメモリを扱うusb_host関連の部分を別の設計にしないと難しいかと思います。
※ 私もUSB-HOSTドライバは書いたことがありませんので詳細までわかりません。
もっと楽にドライブできるUSB-HOSTを使うとか極論ならPIC24FJ64GB002デュアルにして、USBメモリとmp3ドライブを分離するとかの手もあります。
とにかく、YUさんがUSB-HOSTドライバを直せないと、この形での実現は困難でしょう。
Re: MPLABでのエラー
Posted: 2013年2月18日(月) 23:15
by YU
わかりました。
ではやれるだけ頑張ってUSB-HOSTドライバを自分なりに直してみます。
Re: MPLABでのエラー
Posted: 2013年2月18日(月) 23:21
by softya(ソフト屋)
YU さんが書きました:わかりました。
ではやれるだけ頑張ってUSB-HOSTドライバを自分なりに直してみます。
まず、どれだけ足らないかマップを出力出来るまで削ってみて下さい。
元のマップだとPIC24MP3が
section address length (PC units) length (bytes) (dec)
------- ------- ----------------- --------------------
.reset 0 0x4 0x6 (6)
.ivt 0x4 0xfc 0x17a (378)
.aivt 0x104 0xfc 0x17a (378)
.text 0x200 0x4a9c 0x6fea (28650)
.const 0x4c9c 0xa0 0xf0 (240)
.dinit 0x4d3c 0x2e 0x45 (69)
.isr 0x4d6a 0x2 0x3 (3)
__CONFIG2 0xabfc 0x2 0x3 (3)
__CONFIG1 0xabfe 0x2 0x3 (3)
Total program memory used (bytes): 0x7422 (29730) 45%
となっていてThumb_Driveが
Program Memory [Origin = 0x200, Length = 0xa9f8]
section address length (PC units) length (bytes) (dec)
------- ------- ----------------- --------------------
.text 0x200 0x4c8 0x72c (1836)
.const 0x6c8 0x92 0xdb (219)
.text 0x75a 0x5cbe 0x8b1d (35613)
.dinit 0x6418 0x7e 0xbd (189)
.isr 0x6496 0x2 0x3 (3)
Total program memory used (bytes): 0x93e4 (37860) 58%
足すとギリギリオーバーなのですが、これ最適化レベルで変わりますのでstudent版だともっとオーバーしている可能性があります。
Re: MPLABでのエラー
Posted: 2013年2月20日(水) 23:41
by YU
マップを出力できることができましたが最後の方でエラーが出てきました。
c:\program files\microchip\mplab c30\bin\bin\..\bin/pic30-coff-ld.exe Error: A heap is required, but has not been specified
Link step failed
というものです。
これはどういったエラーなのでしょうか?
Re: MPLABでのエラー
Posted: 2013年2月21日(木) 01:10
by softya(ソフト屋)
訳すると「heap 領域をリクエストされましたが指定されていません。リンク失敗です。」
C30のライブラリでmallocを使う場合のheapの指定の仕方を調べてください。
Re: MPLABでのエラー
Posted: 2013年2月21日(木) 03:10
by YU
heapの指定の仕方がわかり指定してビルドするとビルド成功しました。
やっとビルドできたことに喜びを感じます。
softya(ソフト屋)さん,ここまで付き合っていただき本当にありがとうございました。
明日,動作チェックをしてみます。
Re: MPLABでのエラー
Posted: 2013年2月21日(木) 20:23
by YU
動作には失敗してしまいましたが,あとは一人でどうにかなりそうです。
softya(ソフト屋)さん,ほんとうにお世話になりました。
ありがとうございました。