MPLABでのエラー

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
YU

MPLABでのエラー

#1

投稿記事 by YU » 13年前

こんにちは
早速質問させていただきます。
現在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でのエラー

#2

投稿記事 by softya(ソフト屋) » 13年前

PICの書き込めるフラッシュメモリ容量をオーバーした可能性があります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

YU

Re: MPLABでのエラー

#3

投稿記事 by YU » 13年前

softya(ソフト屋)さん
回答ありがとうございます。

書き込むプログラムの量を減らせばエラーを解決することができますかね?
あと,エラー文にも出ている
usb_host_msd と VS1011 それぞれのソースファイルとヘッダーファイルは何か関係しているのでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: MPLABでのエラー

#4

投稿記事 by softya(ソフト屋) » 13年前

私はPICに詳しいわけではないですが、
usb_host_msdは、「USB Host Mass Storage Device Driver」って事でUSBメモリの関連です。
VS1101は前の質問にあったMP3コーデックIC関係の制御ライブラリでは?
自分で作っているモノのプログラム関係の構成をちゃんと把握したほうが良いと思いますよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

YU

Re: MPLABでのエラー

#5

投稿記事 by YU » 13年前

返信をいただいてから自分なりにエラーを解決しようとしたのですが,VS1011の方のエラーはなくすことがきましたが,
usb_host_msd の方のエラーはなくすことができません。
どのようにしたらエラーをなくす可能性ができるでしょうか。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: MPLABでのエラー

#6

投稿記事 by softya(ソフト屋) » 13年前

たぶん、プログラムが容量をオーバーしているのでPIC24を更に容量の大きなものに乗り換えるのが一番早道だと思います。
VS1011の方のエラーはどうやって改善したのですか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

YU

Re: MPLABでのエラー

#7

投稿記事 by YU » 13年前

PICマイコンは今からでは変更することができないので,今使っている型でやっていきます。
VS1011eのエラーはMPLABのプロジェクトを開いた時に出てくるソースファイルとヘッダーファイルのツリー部分から外しても問題ないソースファイルとヘッダーファイルを消したところエラーが消えました。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: MPLABでのエラー

#8

投稿記事 by softya(ソフト屋) » 13年前

プログラムコードを理解して収まるように場合によってはusb_host_msdなどを含めて全プログラムを組み直さないと出来ないと思います。
そこまでの知識がありますでしょうか? プログラムの大きさをコンパクトにするというのはかなり高度な知識なんです。
そうですね。現状のメモリマップの情報を頂けますか。 あとPIC24Fのメモリのスペックを教えて下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

YU

Re: MPLABでのエラー

#9

投稿記事 by YU » 13年前

正直高度な知識が必要であるとは思ってもいませんでした。
当然私にはそんな知識なんてとてもなく・・・

現状のメモリマップというのはどこでわかるものなのでしょうか?
メモリマップを見るのは初めてなので・・・

私が使っているPICはPIC24FJ64GB002という型です。
メモリのスペックは
Memory Type:Flash
Program Memory (KB):64
RAM Bytes:8,192
となっていますが,これでよいでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: MPLABでのエラー

#10

投稿記事 by softya(ソフト屋) » 13年前

なんでもくっ付ければ動くというものではありません。
それはマイコンを舐めています。
少ない資源でなんとか機能を実現するのがマイコンですからメモリが足らなくなるなどよく有ることとしか言えません。

私としてはPIC24FJ96やPIC24FJ128などのProgram Memory (KB)の大きなものに変えるのが一番早いと思います。
ただ、メモリマップを確認してないと安心できないですが、MPLABの操作はまったく自信がありません。
リンク周りの表示として表示されるはずなのですが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: MPLABでのエラー

#11

投稿記事 by softya(ソフト屋) » 13年前

両方のプロジェクトを入手して比べてみました。
サイズ的には素直に足すと確実にオーバーします。

で、メモリマップは拡張子.mapのファイルがプロジェククトの所に出来るのでそれを確認してみて下さい。
内容をここに貼り付けてもらうとベストです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

YU

Re: MPLABでのエラー

#12

投稿記事 by YU » 13年前

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)

こんな感じでわかるでしょうか?

YU

Re: MPLABでのエラー

#13

投稿記事 by YU » 13年前

最近回路の方を作っていたのでプログラムの方がおろそかになっています;

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: MPLABでのエラー

#14

投稿記事 by softya(ソフト屋) » 13年前

必要な物しかくっつけてはいない様ですね。
こうなると、メモリ不足の原因であるUSBメモリを扱うusb_host関連の部分を別の設計にしないと難しいかと思います。
※ 私もUSB-HOSTドライバは書いたことがありませんので詳細までわかりません。
もっと楽にドライブできるUSB-HOSTを使うとか極論ならPIC24FJ64GB002デュアルにして、USBメモリとmp3ドライブを分離するとかの手もあります。
とにかく、YUさんがUSB-HOSTドライバを直せないと、この形での実現は困難でしょう。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

YU

Re: MPLABでのエラー

#15

投稿記事 by YU » 13年前

わかりました。
ではやれるだけ頑張ってUSB-HOSTドライバを自分なりに直してみます。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: MPLABでのエラー

#16

投稿記事 by softya(ソフト屋) » 13年前

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でのエラー

#17

投稿記事 by YU » 13年前

マップを出力できることができましたが最後の方でエラーが出てきました。

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でのエラー

#18

投稿記事 by softya(ソフト屋) » 13年前

訳すると「heap 領域をリクエストされましたが指定されていません。リンク失敗です。」
C30のライブラリでmallocを使う場合のheapの指定の仕方を調べてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

YU

Re: MPLABでのエラー

#19

投稿記事 by YU » 13年前

heapの指定の仕方がわかり指定してビルドするとビルド成功しました。
やっとビルドできたことに喜びを感じます。
softya(ソフト屋)さん,ここまで付き合っていただき本当にありがとうございました。
明日,動作チェックをしてみます。

YU

Re: MPLABでのエラー

#20

投稿記事 by YU » 13年前

動作には失敗してしまいましたが,あとは一人でどうにかなりそうです。
softya(ソフト屋)さん,ほんとうにお世話になりました。
ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る