2013-03-13 3 views
0

2 개의 코드를 함께 넣습니다 (원래 This Question Here에 설명되어 있음).MpLab 링크 오류 : 섹션을 할당 할 수 없습니다 (C30 컴파일러)

지금 바로 MPLAB (마이크로 칩의 MPLAB C30)

Link Error: Could not allocate section .nbss, size = 20004 bytes, attributes = bss near 

이상한 일이 오류를 경험

, 나는 컴파일러 사용 설명서에서 해당 메시지에 대해 해당 메시지의 경우에도 하위 문자열을 보였다 (마이크로 칩 발행 DS51284F) 아무것도 발견하지 못했습니다.

을 할당하고 오류 메시지가 표시되는 것을 세 번이나 네 번 발견했습니다.

전에 함께 코드의 두 조각을 넣어에, 나는 우리가 까지 것-X에서 데이터를 이동하는 데 사용하고자하는 메모리의 "큰 덩어리"에 사용 된 0x8000을 정의 세그먼트를했다 씽 -Y

내가 정의한 데이터 영역을 0x8000에서 1 개의 단독 바이트로 줄였으며 여전히이 오류가 발생합니다.

이 메시지는 마이크로 칩의 컴파일러 설명서 DS51284F에 설명되어 있습니다. 누구도 전에 이것을 풀어 봤나?

링커에 대한 다른 설명서가 있습니까?

내 메모리 영역이 어디에 있는지보기 위해 메모리 맵을 얻을 수있는 방법이 있습니까?

+0

포럼 게시물 [여기] (http://www.microchip.com/forums/m343461)과 같은 문제가있는 것 같습니다.aspx), 가까운 데이터 메모리는 작은 크기이고 링커 출력에서 ​​20k를 넣으려고합니다. 그러나 나는 확실히 말할 수없고 점검 할 수 없기 때문에 이것은 단지 논평 일뿐입니다. – tinman

+0

좋은 눈과 +1. 그 사람이 프로그램 메모리 사용 목록을 어떻게 작성했는지 알고 있습니까? 그건 그렇고, 그 게시물을 찾는 좋은 눈. 마이크로 칩의 사이트를 검색하여 제로를 찾았습니다 –

+0

죄송합니다. mplab을 사용하지 마십시오. 그러나지도 출력을 생성하기위한 링커 설정 일 수 있습니다. – tinman

답변

3

오류는 초기화되지 않은 변수 (bss 또는 짧은 nbss)의 근접 데이터 공간에 충분한 메모리가 남아 있지 않음을 나타냅니다.

다음 권장 사항을 사용하여 데이터 메모리 사용을 줄일 수 있습니다. 1) 컴파일러 최적화, -O3 또는 -Os를 사용합니다.

2) 옵션을 구축 컴파일러에서 대형 데이터 모델을 선택 를 - 기본 -msmall 데이터 - 대형 (> 8킬로바이트) -mlarge 데이터 - 작은 (< = 8킬로바이트) -msmall 데이터 기본 데이터 모델이 작습니다.

3) 먼 곳의 변수를 선언하십시오. 이렇게하면 가까운 램 공간의 공간이 확보됩니다.

4) 함수 매개 변수의 크기 나 수를 줄이십시오. 예를 들어 값으로 구조를 전달하는 대신 포인터를 같은 값으로 전달하십시오.

5) 일부 로컬 변수의 저장소 클래스를 static으로 변경하거나 전역 변수로 변경하십시오.

6) 가능하면 지역 변수 및 매개 변수를 다시 사용하십시오.

7) 필요한 것보다 크지 않은 유형을 사용하십시오. 예를 들어 100 개가 넘는 for 루프의 카운터 변수는 char만큼 커야합니다.

8) 초기화 된 일부 데이터/배열을 코드 공간에 배치하십시오. -mconst-in-code

관련 문제