【问题标题】:Microprocessor and Microcontroller Compilation Differences微处理器和微控制器编译差异
【发布时间】:2021-12-03 12:04:12
【问题描述】:

我试图了解微控制器和微处理器之间的 C/C++ 编译过程(编译器/链接器/定位器等)的差异。

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

我想知道这个编译在微处理器和微控制器中是如何处理的。

非常感谢!

【问题讨论】:

  • @MarcusMüller 我删除了我的评论,您在下面的回答很好地涵盖了这一点。你也可以删除你的评论,我一会儿也删除这条评论。
  • 你提供两者的地址,真的没有区别。对于单片机,假设是裸机应用程序,您指定物理地址。对于操作系统(某些 mcu 或全尺寸处理器)上的应用程序,您在链接中指定虚拟地址(通常工具链默认为您准备好操作特定地址空间)。
  • 所以就编译和链接的方式而言完全没有区别。

标签: c compilation linker microcontroller microprocessors


【解决方案1】:

我试图了解微控制器和微处理器之间的 C/C++ 编译过程(编译器/链接器/定位器等)的差异。

本身没有。

不同之处可能在于,在微控制器上,您通常没有支持任何运行时加载共享库的操作系统,但情况不一定如此(NuttX 和其他)。

例如,对于微控制器,我们可以提供链接描述文件来指定程序应执行的实际物理内存位置。

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

您试图在没有区别的地方进行区分:微控制器只是具有嵌入式目标市场的微处理器,并且通常是集成的封装内存。就是这样。

但是,在运行多个程序的微处理器中,

微控制器和微处理器都可以(也不一定)是这样。

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

我们无法提供加载程序的实际地址。

那不是真的。通常,此类操作系统提供地址空间随机化,并且您可以编译可重定位代码 - 但同样可以(并且是!)为微控制器完成。

【讨论】:

  • 嗨,马库斯,非常感谢您的回复。我有一个关于链接器/定位器的问题。在链接器文件中,我们可以指定数据/代码地址位置。对于运行单个应用程序的微控制器,我可以理解这一点。但是在带有操作系统的微处理器中,可以有多个应用程序在内存上运行。在这种情况下,我们怎么知道链接描述文件分配了实际的地址空间?
  • 再说一次,这与微处理器与微控制器无关,而是您的系统为每个任务提供了自己的内存空间。所以,是的,您可以在任何微处理器上完全做同样的事情:这就是内存映射允许您做的事情。当您的微控制器或微处理器具有 MMU 并且您的微控制器或微处理器上的操作系统使用它来提供每个进程的地址空间,然后每个程序时,您的程序看到的内存地址与硬件使用的物理内存地址几乎没有关系可以使用它喜欢的任何地址。
  • 嗨,Marcus,那么对于微控制器和微处理器来说,代码的物理内存地址由 MMU 决定是否正确?
  • @radar101 许多微控制器部件没有 MMU。许多流行的总线都有两条总线,一条用于程序,一条用于 RAM,唯一的“编码”是一个由程序计数器寻址,一个由 程序寻址。
  • @radar101 不,这是不对的!正如 Tom 所说,有些微控制器没有 MMU,有些则有,但是您是否在微控制器或微处理器上使用 MMU(以及如何使用)是一个不同的问题!
【解决方案2】:

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

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

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

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

【讨论】:

  • 例外多于规则。完全正确!在这里不要忘记的是,OP 询问了“在实践中,编译有什么区别”,而事实是:嗯,这取决于,而且在某些教科书所谓的微控制器或微处理器。这是一个非常好的答案,我很感谢它的存在,+1。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
相关资源
最近更新 更多