2013-06-27 2 views
0
내가 ATmega128을 위해 C의 코드를 작성했습니다

AVR의 프로그램 메모리

내가 알고 싶습니다 어떻게 코드의 영향을 프로그램 메모리에서 수행 변경됩니다.

는의 코드가 비슷하다고 생각해 보자, 더 구체적으로 하나가 :

d=fun1(a,b); 
    c=fun2(c,d); 
    h=fun1(k,l); 
    n=fun2(p,m); 
    etc... 
:

d=fun1(a,b); 
    c=fun2(c,d); 

내가 코드에서 할 변화가 내가 동일한 기능을 예를 들면 번 이상 전화이다

AtmelStudio 6.1에서 솔루션을 빌드하고 프로그램 메모리에서 변경 사항을 확인합니다.

해결책을 구축하지 않고도 코드의 변화가 프로그램 메모리에 미치는 영향을 미리 예측할 수 있습니까?

감사합니다.

+0

프로그램 메모리에서 프로그램이 차지하는 공간을 예측 하시겠습니까? 이것은 일반적으로 어렵고 컴파일러의 (최적화) 설정에 따라 다릅니다. – damage

+0

예 손상. 그것이 내가 묻고있는 것입니다. 감사합니다. – Herc11

답변

0

일반적으로 이것은 C/C++을 사용하여 불가능한 것입니다 (즉, 노력이 도움이되지 않음을 의미 함).

단순한 경우 (통화 수가 증가 함) 각 통화에 대한 지침 수를 결정하고 번호를 곱할 수 있습니다. 컴파일러가 모든 경우에 인라인을 사용하지 않고 인 경우에만 올바른 것이며, 더 높은 수준의 최적화는 적용되지 않습니다.

최신 gcc 버전으로 업그레이드하면 이러한 계산이 잘못 될 수 있습니다.

그래서 보통 두 빌드 (동일한 컴파일러 버전, 동일한 최적화)를 비교할 때 정확한 숫자 만 얻습니다. avr-sizeavr-nm은 모든 정보를 제공합니다 (예 : 기능을 크기별로 비교). 출력을 .csv 파일로 변환하여이 작업을 자동화하고 스프레드 시트 또는 diff을 사용하여 변경 사항을 찾을 수 있습니다.

이 방법은 프로그램을 더 작은 장치 (4k 플래시에서 2k로 - 예를 들어 이미 128k 플래시가있는 경우)로 압축해야하는 경우에만 일반적으로 효과가 있습니다.

작은 차이가있는 동일한 디자인 패턴을 C에서 적용하면 크기가 다르게 나타날 수 있으므로이 과정은 실망 스럽습니다. C/C++에서 실제로 어떻게 될지 예측할 수 없기 때문입니다.