2014-03-19 3 views
1

나는 모든 마이크로 컨트롤러에서 플래시 메모리가 훨씬 더 많다는 것을 의문의 여지가있다. (예 : atmega16은 16k이지만 RAM은 1KB이다.) .적은 양으로 큰 코드를 실행하는 방법은 무엇입니까?

그래서 코드가 얼마나 정확하게 실행되는지 CPU가 플래시 자체에서 직접 실행합니까? 예, 주어진 작은 RAM의 용도는 무엇입니까?

+1

은 난 전문가는 아니지만, 나는 마이크로 컨트롤러의 메모리는 전역, 당신의 스택과 힙을 저장하는 데 사용됩니다 생각합니다. 프로그램 자체는 플래시에서 직접 실행됩니다. 그래도 출처가 없으므로 대답으로 게시하지 않을 것입니다. – Kippie

+0

잘 모르겠지만, 1kb는 여전히 1.000.000 비트입니다. 당신은 HQ 그림이나 실제의 큰 OS를 파싱하지 않습니다. 컴파일 된 프로그램의 바이트 코드는 얼마입니까? – DanFromGermany

+0

답변 해 주셔서 감사합니다. RAM은 스택 및 힙 등 (로컬 변수)에 사용됩니다. main 함수를 가지고 있고 그 안에 선언 된 매우 큰 배열 (10kb)을 가진 프로그램을 생각해보십시오 (그래서 스택 i, e; RAM에 저장되어야하는 지역 변수가되었습니다). 그러나 RAM은 단지 1kb이며,이 경우 어떤 일이 발생합니까? #Kippie –

답변

4

플래시 메모리는 실행하려는 프로그램을 저장하기위한 것입니다. 그들은 거의 변하지 않으므로 플래시 메모리가 적절합니다. 등 스택 (로컬 변수), 힙 (malloc에) 엄격 프로그램 및 데이터 메모리를 분리하는 하버드 아키텍처를 사용

+0

답변을 주셔서 감사합니다. RAM은 스택 및 힙 등 (로컬 변수)에 사용됩니다. 주요 함수와 그 안에 선언 된 매우 큰 배열 (10kb)을 가진 프로그램을 생각해보십시오 (그래서 스택 i, e; RAM에 저장되어야하는 지역 변수가되었습니다). 그러나 RAM은 단지 1kb이며,이 경우 어떤 일이 발생합니까? –

+1

@VirendraKumar : 메모리가 부족합니다. :-) 그러나 배열이 일정하다면 [프로그램의 일부로 만들 수 있습니다] (http://www.nongnu.org/avr-libc/user-manual/pgmspace.html) 플래시로 표시됩니다 기억. – Heinzi

+2

매우 간단하게 10k 배열을 가질 수 없으며, 최상의 경우 시나리오에서 스택 포인터를 덮어 쓰면 프로그램이 자체적으로 사라집니다 ****. 컴파일러는 너무 많은 RAM을 사용하고 있다고 경고합니다. 1k는 Mega16 유형 앱에 완벽하게 적합합니다. RAM을 더 많이 사용하려면 ARM과 같은 것을 사용하십시오. – DiBosco

1

AVR에서 :

RAM은 프로그램의 실행 동안 을 요구하는 메모리이다. RAM에서 프로그램을 실행하기 위해 먼저 RAM을 프로그래밍하는 PC와 달리 프로그램 메모리에서 코드가 직접 실행되며 런타임 데이터 만 RAM에 저장됩니다.

1

변수를 const로 설정한다고해서 반드시 변수가 만들어지고 플래시에 저장되는 것은 아닙니다. 플래시에서 가장 좋을 수도 있고 그렇지 않을 수도 있지만 컴파일러는 자동으로이 작업을 수행하지 않습니다.

예를 들어 avr-gcc에 대한 다음 링크를 확인하십시오.

http://www.nongnu.org/avr-libc/user-manual/pgmspace.html

관련 문제