>  기사  >  CPU가 프로그램에 액세스하고 실행하기 전에 프로그램을 저장해야 하는 위치

CPU가 프로그램에 액세스하고 실행하기 전에 프로그램을 저장해야 하는 위치

coldplay.xixi
coldplay.xixi원래의
2020-08-29 10:54:5514425검색

프로그램은 CPU에서 액세스하고 실행하기 전에 메모리에 저장되어야 하며 명령 레지스터의 내용은 먼저 PC가 프로그램을 실행할 때 프로그램을 주소 버스로 전송해야 합니다. 실행을 위해 외부 메모리를 RAM으로, CPU는 런타임 중에 플래시에서 직접 프로그램을 읽습니다.

CPU가 프로그램에 액세스하고 실행하기 전에 프로그램을 저장해야 하는 위치

CPU가 프로그램을 실행할 때 명령어는 메모리에 존재해야 하며 명령어 레지스터의 내용은 먼저 주소 버스로 전송되어야 합니다.

x86 CPU와 마이크로 컨트롤러가 프로그램을 읽는 구체적인 방법 프로그램을 실행할 때 PC는 프로그램을 외부 메모리(하드 디스크)에서 RAM으로 전송하여 실행하고, CPU는 이를 읽습니다. 그리고 데이터, 즉 마이크로 컨트롤러의 프로그램은 CPU가 실행될 때 플래시에서 직접 읽혀지고 데이터는 RAM에서 읽혀집니다. x86 아키텍처 CPU는 von Neumann 시스템을 기반으로 합니다. 즉, 데이터와 프로그램이 함께 저장되며, PC의 RAM 리소스는 수십 M에서 수백 M, 심지어는 수 G에 이르기까지 상당히 풍부합니다. 많은 양의 프로그램 데이터를 견딜 수 있습니다. RAM中运行,cpu从RAM中读取程序和数据而单片机的程序则是固化在flash中,cpu运行时直接从flash中读取程序,从RAM中读取数据造成这种差别的具体原因分析x86构架的cpu是基于冯.诺依曼体系的,即数据和程序存储在一起,而且pc机的RAM资源相当丰富,从几十M到几百M甚至是几个G,客观上能够承受大量的程序数据。

单片机的构架大多是哈弗体系的,即程序和数据分开存储,而且单片的片内RAM资源是相当有限的,内部的RAM过大会带来成本的大幅度提高。通过上面的分析可得知:单片机的程序能存储于flash中是基于两点考虑,即体系结构和RAM资源的多少。

因此,在技术不但进步片内RAM容量不断增多的今天,RAM资源已经不再是制约这种差别的主要因素,而对于体系机构我们只要更改cpu读取程序的方式就可以。

将嵌入式系统的程序存于RAM中的具体做法“对于很多的嵌入式系统,其代码很多都存储在norflash中,运行也是直接在flash中运行.我最近了解到我新公司的软件中的一段代码当时为了提高运行速度被加载到ram中运行.当时他们是花了很多时间来解决这个问题的.我仔细研究了一下链接脚本,用的是gnu的linux的交叉工具链.地址分配是写在一个ld脚本中的.

他们是这样实现的:1,将你需要在ram中运行的代码写在单独的一个c文件中,然后在脚本中设置其运行地址与存放地址分开.设置好必要的代码起始和结束的标志变量.2,在代码中将存放地址处的代码拷贝到运行地址中.冯.诺依曼体系与哈佛体系的区别二者的区别就是程序空间和数据空间是否是一体的。

早期的微处理器大多采用冯诺依曼结构

대부분의 마이크로 컨트롤러 아키텍처는 Haval 시스템을 기반으로 합니다. 즉, 프로그램과 데이터가 별도로 저장되며 단일 칩의 온칩 RAM 리소스가 상당히 제한되어 있으므로 과도한 내부 RAM이 크게 늘어납니다. 비용. 위의 분석을 통해 아키텍처와 RAM 리소스의 양이라는 두 가지 고려 사항을 기반으로 마이크로 컨트롤러 프로그램을 플래시에 저장할 수 있음을 알 수 있습니다.

따라서 오늘날 기술이 발전하고 온칩 RAM 용량이 계속 증가함에 따라 RAM 리소스는 더 이상 이러한 차이를 제한하는 주요 요인이 아닙니다. 시스템 구조의 경우 CPU가 프로그램을 읽는 방식만 변경하면 됩니다.

임베디드 시스템 프로그램을 RAM에 저장하는 구체적인 방법 "많은 임베디드 시스템의 경우 많은 코드가 norflash에 저장되고 플래시에서 직접 실행됩니다. 최근에 새 회사의 소프트웨어에 코드 조각이 로드되었다는 사실을 알게 되었습니다. 실행 속도를 향상시키기 위해 그들은 그 당시 이 문제를 해결하기 위해 많은 시간을 보냈습니다. 링크 스크립트를 주의 깊게 연구하고 GNU Linux 크로스 툴 체인을 사용했습니다. 주소 할당은 ld 스크립트에 작성되었습니다. 이것을 구현하는 방법은 다음과 같습니다. 1. RAM에서 실행하는 데 필요한 코드를 별도의 c 파일에 작성한 다음 스크립트에서 실행 주소와 저장 주소를 별도로 설정합니다. 시작과 끝에 필요한 기호 변수를 설정합니다. 2. 저장 주소의 코드를 코드의 실행 주소에 복사합니다. 폰 노이만 시스템과 하버드 시스템의 차이점은 입니다.
대부분의 초기 마이크로프로세서는 Von Neumann 구조를 사용했습니다. 대표적인 것이 Intel의 X86 마이크로프로세서입니다. 명령어 가져오기와 피연산자 가져오기가 모두 동일한 버스에서 수행된다는 단점이 있습니다. 고속 작업 중에는 명령어와 피연산자를 동시에 가져올 수 없으므로 전송 프로세스에서 병목 현상이 발생합니다.

하버드 버스 기술 응용 프로그램은 칩의 내부 프로그램 공간과 데이터 공간으로 표현됩니다. Harvard 버스 아키텍처를 사용하면 명령어와 피연산자를 동시에 가져올 수 있으므로 컴퓨팅 성능이 크게 향상됩니다. 예를 들어 STM320LF240x 시리즈 DSP는 버스 액세스 다중 그룹의 세 그룹을 통해 향상된 Harvard 구조입니다. 저장 공간 🎜🎜🎜프로그래밍에 대해 더 자세히 알고 싶다면 🎜php training🎜 칼럼을 주목해주세요!

위 내용은 CPU가 프로그램에 액세스하고 실행하기 전에 프로그램을 저장해야 하는 위치의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.