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



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

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

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

非常感谢!

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

无。

差异可能是在微控制器上,您通常没有支持任何运行时加载共享库的操作系统,但情况并非如此(nutx和其他)。

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

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

你试图在没有区别的情况下做出区分:微控制器只是一个带有嵌入式目标市场的微处理器,通常是集成内存的封装。就是这样。

然而,在有多个程序运行的微处理器中,

这可以(也不必)在微控制器和微处理器上都是如此。

你的意思是在微处理器上,我们通常使用多任务操作系统。我们能否,在这样的操作系统上…">

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

那不是真的。通常,这样的操作系统提供地址空间随机化,并且您可以编译可重新定位的代码-但是对于微控制器也可以(并且正在)这样做。

术语微控制器微处理器没有可靠的定义,它们被不同的工程师和制造商随机混合使用。大家一致认为,微控制器更简单,资源更少,更适合"实时"。嵌入式任务。微处理器稍微复杂一些,有更多的资源,更适合"通用"。任务。各种术语,如MMU,嵌入式Flash/RAM,外部Flash/RAM,到处都是。如果这听起来含糊不清,事实的确如此。不要依赖那些术语。

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

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

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

最新更新