2013-07-07 4 views
2

도메인 특유의 것이 아니기를 바랍니다. libc.a가 내가 가지고있는 8K 램의 1K를 왜 사용하고 있는지 알고 싶습니다.lpcxpresso with Cortex-M3 : libc.a (lib_a-impure.o) 란 무엇입니까? 1k의 RAM을 사용하는 이유는 무엇입니까?

array_init에서 전역 객체의 생성자를 호출하는 것 외에 다른 방법으로 libc를 사용하고 있다는 것을 알지 못합니다. 나는 내가 아는 한 기본 복사 구성에 너무 관여한다고 생각한다. 풀 할당을 사용하므로 힙 관련 문제가 발생하지 않습니다 (배치를 새로 사용하지만 libc가 램을 사용하도록해서는 안됩니다). 라이브러리를 완전히 제외하고 메인 프로그램의 모든 전역 객체를 구성하기 위해 해킹으로 배치 배치를 사용하면 libc에서 사용하는 1k 램이 쓸모 없다는 또 다른 힌트가됩니다. 누구든지 추가 읽기 또는 날 array_init 및 POD 형식의 기본 복사 구성을 유지할 수 있지만 RAM 오버 헤드 없애 설명 할 수 있습니까? 여기

내 프로젝트의 .MAP 파일에서 문제가되는 항목입니다 : 내가 수정을 발견 선으로 내 코드 라인을 통과 한 후

*(vtable) 
*(.data*) 
.data._ZN3CDC4CoreI5MyCDCE11depInEmpty_E 
       0x10000000  0x1 ./src/Main.o 
       0x10000000    CDC::Core<MyCDC>::depInEmpty_ 
*fill*   0x10000001  0x3 00 
.data.SystemFrequency 
       0x10000004  0x4 ./kvasir/system_LPC17xx.o 
       0x10000004    SystemFrequency 
.data.impure_data 
       0x10000008  0x428 c:/nxp/lpcxpresso_5.2.4_2122/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/lib/armv7-m\libc.a(lib_a-impure.o) 
.data   0x10000430  0x4 c:/nxp/lpcxpresso_5.2.4_2122/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/armv7-m\crtbegin.o 
       0x10000430    __dso_handle 
       0x10000434    . = ALIGN (0x4) 
       0x10000434    _edata = . 

.jcr   0x10000434  0x0 load address 0x00003ee8 
.jcr   0x10000434  0x0 c:/nxp/lpcxpresso_5.2.4_2122/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/armv7-m\crtbegin.o 

.bss   0x10000434  0x1600 load address 0x00003ee8 
       0x10000434    _bss = . 
*(.bss*) 
.bss.inBuf  0x10000434  0x34 ./src/Main.o 
       0x10000434    inBuf 

업데이트

, 나는 빈 소멸자가 있었다 내 수업 중 하나에 정의 된

~MyClass(){} 

램의 1K를 제거했다. 아무도 그 이유를 말할 수 있습니까?

답변

0

newLib 코드를 조금 읽은 후에로드되는 일부 멀티 스레드 작업으로 인해 발생하는 것 같습니다. 나는 비 기본 소멸자를 선언하지 않음으로써이 문제를 해결했다. 나는 newLib nano가이 문제를 해결할 것이라고 읽었지만, IDE가 아직 지원하지 않기 때문에 테스트를하지 않았다.

0

이것은 직접적인 해결책은 아니지만 리드 일 수 있습니다. impure_data 섹션은 라이브러리의 재진입 지원의 일부입니다. http://web.archive.org/web/20090106124055/http://venus.billgatliff.com/node/3

해당 섹션이 사라지면 라이브러리를 -ffunction-sections -fdata-sections으로 다시 빌드 할 수 있을지 궁금합니다. 도서관에서 소중한 것을 부르는 것 같아 효과적 일 수 있습니다. 그렇지 않으면 newlib에 해킹 당하거나 단순히 원하는 조각을 빌리는 것일 수 있습니다.

+0

나는 그것의 복잡함에 대한 지식이 거의 없기 때문에 LIB를 만지지는 않을 것입니다. 하지만 어쨌든 고마워. – odinthenerd

관련 문제