나는 모든 마이크로 컨트롤러에서 플래시 메모리가 훨씬 더 많다는 것을 의문의 여지가있다. (예 : atmega16은 16k이지만 RAM은 1KB이다.) .적은 양으로 큰 코드를 실행하는 방법은 무엇입니까?
그래서 코드가 얼마나 정확하게 실행되는지 CPU가 플래시 자체에서 직접 실행합니까? 예, 주어진 작은 RAM의 용도는 무엇입니까?
나는 모든 마이크로 컨트롤러에서 플래시 메모리가 훨씬 더 많다는 것을 의문의 여지가있다. (예 : atmega16은 16k이지만 RAM은 1KB이다.) .적은 양으로 큰 코드를 실행하는 방법은 무엇입니까?
그래서 코드가 얼마나 정확하게 실행되는지 CPU가 플래시 자체에서 직접 실행합니까? 예, 주어진 작은 RAM의 용도는 무엇입니까?
플래시 메모리는 실행하려는 프로그램을 저장하기위한 것입니다. 그들은 거의 변하지 않으므로 플래시 메모리가 적절합니다. 등 스택 (로컬 변수), 힙 (malloc에) 엄격 프로그램 및 데이터 메모리를 분리하는 하버드 아키텍처를 사용
답변을 주셔서 감사합니다. RAM은 스택 및 힙 등 (로컬 변수)에 사용됩니다. 주요 함수와 그 안에 선언 된 매우 큰 배열 (10kb)을 가진 프로그램을 생각해보십시오 (그래서 스택 i, e; RAM에 저장되어야하는 지역 변수가되었습니다). 그러나 RAM은 단지 1kb이며,이 경우 어떤 일이 발생합니까? –
@VirendraKumar : 메모리가 부족합니다. :-) 그러나 배열이 일정하다면 [프로그램의 일부로 만들 수 있습니다] (http://www.nongnu.org/avr-libc/user-manual/pgmspace.html) 플래시로 표시됩니다 기억. – Heinzi
매우 간단하게 10k 배열을 가질 수 없으며, 최상의 경우 시나리오에서 스택 포인터를 덮어 쓰면 프로그램이 자체적으로 사라집니다 ****. 컴파일러는 너무 많은 RAM을 사용하고 있다고 경고합니다. 1k는 Mega16 유형 앱에 완벽하게 적합합니다. RAM을 더 많이 사용하려면 ARM과 같은 것을 사용하십시오. – DiBosco
AVR에서 :
RAM은 프로그램의 실행 동안 을 요구하는 메모리이다. RAM에서 프로그램을 실행하기 위해 먼저 RAM을 프로그래밍하는 PC와 달리 프로그램 메모리에서 코드가 직접 실행되며 런타임 데이터 만 RAM에 저장됩니다.
변수를 const로 설정한다고해서 반드시 변수가 만들어지고 플래시에 저장되는 것은 아닙니다. 플래시에서 가장 좋을 수도 있고 그렇지 않을 수도 있지만 컴파일러는 자동으로이 작업을 수행하지 않습니다.
예를 들어 avr-gcc에 대한 다음 링크를 확인하십시오.
은 난 전문가는 아니지만, 나는 마이크로 컨트롤러의 메모리는 전역, 당신의 스택과 힙을 저장하는 데 사용됩니다 생각합니다. 프로그램 자체는 플래시에서 직접 실행됩니다. 그래도 출처가 없으므로 대답으로 게시하지 않을 것입니다. – Kippie
잘 모르겠지만, 1kb는 여전히 1.000.000 비트입니다. 당신은 HQ 그림이나 실제의 큰 OS를 파싱하지 않습니다. 컴파일 된 프로그램의 바이트 코드는 얼마입니까? – DanFromGermany
답변 해 주셔서 감사합니다. RAM은 스택 및 힙 등 (로컬 변수)에 사용됩니다. main 함수를 가지고 있고 그 안에 선언 된 매우 큰 배열 (10kb)을 가진 프로그램을 생각해보십시오 (그래서 스택 i, e; RAM에 저장되어야하는 지역 변수가되었습니다). 그러나 RAM은 단지 1kb이며,이 경우 어떤 일이 발생합니까? #Kippie –