微处理器和微控制器编译差异

Microprocessor and Microcontroller Compilation Differences

我想了解微控制器和微处理器之间 C/C++ 编译过程(Compiler/linker/locator 等)的区别。

例如,对于微控制器,我们可以提供链接描述文件来指定程序应该执行的实际物理内存位置。但是,在有多个程序的微处理器中运行,我们无法提供加载程序的实际地址。

我想知道这个编译在微处理器和微控制器中的处理方式。

非常感谢!

I am trying to understand the differences in the C/C++ compilation process (Compiler/linker/locator etc..) between a microcontroller and a microprocessor.

None 本身。

不同之处可能在于,在微控制器上,您通常没有支持任何运行时间加载共享库的操作系统,但事实并非如此必然如此(NuttX 和其他人)。

For example, for a microcontroller, we can provide the linker script to specify the actual physical memory location the program should be executed.

你可以用微处理器做同样的事情。

您正在尝试区分存在 none 的地方:微控制器只是具有嵌入式目标市场的微处理器,通常是封装内集成存储器。就是这样。

However, in a microprocessor where there are multiple programs running,

微控制器和微处理器都可以(也不必)是这种情况。

您的意思是“在微处理器上,我们通常使用多任务操作系统。我们可以在这样的操作系统上...”

we are unable to provide the actual addresses to load the program.

事实并非如此。通常,此类操作系统提供地址 space 随机化,您可以编译可重定位代码——但同样可以(并且已经!)为微控制器完成。

术语微控制器微处理器没有可靠的定义,它们被不同的工程师和制造商随意使用和混合使用。共识是微控制器更简单,资源更少,更适合“实时”嵌入式任务。微处理器稍微复杂一些,拥有更多资源,更多地用于“一般”任务。诸如 MMU、嵌入式 Flash/RAM、外部 Flash/RAM 等各种术语随处可见。如果这听起来含糊不清——确实如此。不要依赖这些条款。

您需要查看微型计算机上的特定功能,这些功能可以帮助您发挥软件工程师的能力。最基本的是 MMU——它定义了你是否可以拥有虚拟内存。这反过来定义了它是否支持 OS 在单独的内存区域中运行进程,或者它是一大堆连续的内存,具有硬连线寻址(在这种情况下你仍然得到一个 OS 但它有更少去做)。链接在很大程度上取决于这种区别。

那么在隔离内存区域运行进程的系统通常需要在执行之前将进程代码加载到 RAM 中,这需要(多)更多的 RAM,这通常由外部 RAM 芯片解决,这需要 MMU .

但是微控制器的经典定义是:没有MMU,嵌入式Flash and/or RAM。经典的微处理器是:MMU、外存和RAM。例外多于规则。