MPLABでのエラー
-
YU
MPLABでのエラー
こんにちは
早速質問させていただきます。
現在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
このエラーはどういった理由ででているのでしょうか。
教えてください。
早速質問させていただきます。
現在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
このエラーはどういった理由ででているのでしょうか。
教えてください。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: MPLABでのエラー
PICの書き込めるフラッシュメモリ容量をオーバーした可能性があります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
YU
Re: MPLABでのエラー
softya(ソフト屋)さん
回答ありがとうございます。
書き込むプログラムの量を減らせばエラーを解決することができますかね?
あと,エラー文にも出ている
usb_host_msd と VS1011 それぞれのソースファイルとヘッダーファイルは何か関係しているのでしょうか?
回答ありがとうございます。
書き込むプログラムの量を減らせばエラーを解決することができますかね?
あと,エラー文にも出ている
usb_host_msd と VS1011 それぞれのソースファイルとヘッダーファイルは何か関係しているのでしょうか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: MPLABでのエラー
私はPICに詳しいわけではないですが、
usb_host_msdは、「USB Host Mass Storage Device Driver」って事でUSBメモリの関連です。
VS1101は前の質問にあったMP3コーデックIC関係の制御ライブラリでは?
自分で作っているモノのプログラム関係の構成をちゃんと把握したほうが良いと思いますよ。
usb_host_msdは、「USB Host Mass Storage Device Driver」って事でUSBメモリの関連です。
VS1101は前の質問にあったMP3コーデックIC関係の制御ライブラリでは?
自分で作っているモノのプログラム関係の構成をちゃんと把握したほうが良いと思いますよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
YU
Re: MPLABでのエラー
返信をいただいてから自分なりにエラーを解決しようとしたのですが,VS1011の方のエラーはなくすことがきましたが,
usb_host_msd の方のエラーはなくすことができません。
どのようにしたらエラーをなくす可能性ができるでしょうか。
usb_host_msd の方のエラーはなくすことができません。
どのようにしたらエラーをなくす可能性ができるでしょうか。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: MPLABでのエラー
たぶん、プログラムが容量をオーバーしているのでPIC24を更に容量の大きなものに乗り換えるのが一番早道だと思います。
VS1011の方のエラーはどうやって改善したのですか?
VS1011の方のエラーはどうやって改善したのですか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
YU
Re: MPLABでのエラー
PICマイコンは今からでは変更することができないので,今使っている型でやっていきます。
VS1011eのエラーはMPLABのプロジェクトを開いた時に出てくるソースファイルとヘッダーファイルのツリー部分から外しても問題ないソースファイルとヘッダーファイルを消したところエラーが消えました。
VS1011eのエラーはMPLABのプロジェクトを開いた時に出てくるソースファイルとヘッダーファイルのツリー部分から外しても問題ないソースファイルとヘッダーファイルを消したところエラーが消えました。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: MPLABでのエラー
プログラムコードを理解して収まるように場合によってはusb_host_msdなどを含めて全プログラムを組み直さないと出来ないと思います。
そこまでの知識がありますでしょうか? プログラムの大きさをコンパクトにするというのはかなり高度な知識なんです。
そうですね。現状のメモリマップの情報を頂けますか。 あとPIC24Fのメモリのスペックを教えて下さい。
そこまでの知識がありますでしょうか? プログラムの大きさをコンパクトにするというのはかなり高度な知識なんです。
そうですね。現状のメモリマップの情報を頂けますか。 あとPIC24Fのメモリのスペックを教えて下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
YU
Re: MPLABでのエラー
正直高度な知識が必要であるとは思ってもいませんでした。
当然私にはそんな知識なんてとてもなく・・・
現状のメモリマップというのはどこでわかるものなのでしょうか?
メモリマップを見るのは初めてなので・・・
私が使っているPICはPIC24FJ64GB002という型です。
メモリのスペックは
Memory Type:Flash
Program Memory (KB):64
RAM Bytes:8,192
となっていますが,これでよいでしょうか?
当然私にはそんな知識なんてとてもなく・・・
現状のメモリマップというのはどこでわかるものなのでしょうか?
メモリマップを見るのは初めてなので・・・
私が使っているPICはPIC24FJ64GB002という型です。
メモリのスペックは
Memory Type:Flash
Program Memory (KB):64
RAM Bytes:8,192
となっていますが,これでよいでしょうか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: MPLABでのエラー
なんでもくっ付ければ動くというものではありません。
それはマイコンを舐めています。
少ない資源でなんとか機能を実現するのがマイコンですからメモリが足らなくなるなどよく有ることとしか言えません。
私としてはPIC24FJ96やPIC24FJ128などのProgram Memory (KB)の大きなものに変えるのが一番早いと思います。
ただ、メモリマップを確認してないと安心できないですが、MPLABの操作はまったく自信がありません。
リンク周りの表示として表示されるはずなのですが。
それはマイコンを舐めています。
少ない資源でなんとか機能を実現するのがマイコンですからメモリが足らなくなるなどよく有ることとしか言えません。
私としてはPIC24FJ96やPIC24FJ128などのProgram Memory (KB)の大きなものに変えるのが一番早いと思います。
ただ、メモリマップを確認してないと安心できないですが、MPLABの操作はまったく自信がありません。
リンク周りの表示として表示されるはずなのですが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: MPLABでのエラー
両方のプロジェクトを入手して比べてみました。
サイズ的には素直に足すと確実にオーバーします。
で、メモリマップは拡張子.mapのファイルがプロジェククトの所に出来るのでそれを確認してみて下さい。
内容をここに貼り付けてもらうとベストです。
サイズ的には素直に足すと確実にオーバーします。
で、メモリマップは拡張子.mapのファイルがプロジェククトの所に出来るのでそれを確認してみて下さい。
内容をここに貼り付けてもらうとベストです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
YU
Re: MPLABでのエラー
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)
こんな感じでわかるでしょうか?
.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)
こんな感じでわかるでしょうか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: MPLABでのエラー
必要な物しかくっつけてはいない様ですね。
こうなると、メモリ不足の原因であるUSBメモリを扱うusb_host関連の部分を別の設計にしないと難しいかと思います。
※ 私もUSB-HOSTドライバは書いたことがありませんので詳細までわかりません。
もっと楽にドライブできるUSB-HOSTを使うとか極論ならPIC24FJ64GB002デュアルにして、USBメモリとmp3ドライブを分離するとかの手もあります。
とにかく、YUさんがUSB-HOSTドライバを直せないと、この形での実現は困難でしょう。
こうなると、メモリ不足の原因であるUSBメモリを扱うusb_host関連の部分を別の設計にしないと難しいかと思います。
※ 私もUSB-HOSTドライバは書いたことがありませんので詳細までわかりません。
もっと楽にドライブできるUSB-HOSTを使うとか極論ならPIC24FJ64GB002デュアルにして、USBメモリとmp3ドライブを分離するとかの手もあります。
とにかく、YUさんがUSB-HOSTドライバを直せないと、この形での実現は困難でしょう。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: MPLABでのエラー
まず、どれだけ足らないかマップを出力出来るまで削ってみて下さい。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版だともっとオーバーしている可能性があります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
YU
Re: MPLABでのエラー
マップを出力できることができましたが最後の方でエラーが出てきました。
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
というものです。
これはどういったエラーなのでしょうか?
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
というものです。
これはどういったエラーなのでしょうか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: MPLABでのエラー
訳すると「heap 領域をリクエストされましたが指定されていません。リンク失敗です。」
C30のライブラリでmallocを使う場合のheapの指定の仕方を調べてください。
C30のライブラリでmallocを使う場合のheapの指定の仕方を調べてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
YU
Re: MPLABでのエラー
heapの指定の仕方がわかり指定してビルドするとビルド成功しました。
やっとビルドできたことに喜びを感じます。
softya(ソフト屋)さん,ここまで付き合っていただき本当にありがとうございました。
明日,動作チェックをしてみます。
やっとビルドできたことに喜びを感じます。
softya(ソフト屋)さん,ここまで付き合っていただき本当にありがとうございました。
明日,動作チェックをしてみます。
-
YU
Re: MPLABでのエラー
動作には失敗してしまいましたが,あとは一人でどうにかなりそうです。
softya(ソフト屋)さん,ほんとうにお世話になりました。
ありがとうございました。
softya(ソフト屋)さん,ほんとうにお世話になりました。
ありがとうございました。