为啥代码在主板之间是兼容的?

Posted

技术标签:

【中文标题】为啥代码在主板之间是兼容的?【英文标题】:Why code are compatible between motherboards?为什么代码在主板之间是兼容的? 【发布时间】:2016-02-01 20:05:49 【问题描述】:

我已经使用 stm32、stm32l、nRF51822、efm32g 等微控制器构建了嵌入式系统 PCB,其中大多数使用 arm cortex m3。并且对它们中的每一个进行编程通常是不同的,即一个微控制器中用于gpio的中断线与另一个中使用的中断线不同,配置一个的寄存器与另一个不同,所以我为一个与另一个不兼容,因为每个微控制器将其外围设备与处理器的连接方式不同。

我想在 PC 架构中相当于微控制器的是主板,对吧?但是为主板制作的代码(例如使用 x86)如何与其他主板兼容?有标准吗? 所有设计用于运行 Windows 或 Linux 的主板的所有中断线(由硬件链接)是否相同?和IO口是一样的吗?换时钟的界面是一样的吗?

通常,当我为微控制器编写裸机(无操作系统)代码时,我会获取其数据表以了解如何与外围设备交互,是否有适用于所有主板的统一参考手册?

如果有人能指点我一些关于这个主题的参考资料,我将不胜感激。当我寻找计算机体系结构书籍时,或者它们专注于处理器 ASIC 设计(我已经知道的指令集、管道、缓存等)或者它们是非常基本的东西(例如:什么是硬驱动程序)。

【问题讨论】:

【参考方案1】:

我认为简短的回答是否定的,主板与为不同架构制造的主板不兼容。编译器和操作系统内核抽象了架构差异,但操作系统内核本身必须针对每种架构进行编码。特别是,操作系统中特定于硬件的部分称为该特定硬件的“驱动程序”,并且必须针对每种架构进行编码。

为操作系统编写代码时,所有硬件访问都通过操作系统内核,它知道如何为特定硬件架构进行硬件访问。程序自己不做任何中断,而是让内核做实际的工作。

程序和编译器只需要知道如何在给定架构和操作系统中进行系统调用,以及识别操作系统 API 的系统调用号。

【讨论】:

即使两个主板有相同的cpu?那么,当我在我的机器上安装 Ubuntu 或 Windows 时,它会检查主板制造商以获取正确的驱动程序? @Lilás - 是的,您甚至可以从各自的操作系统获取 CPU 相关信息。因此,您需要具有特定的操作系统映像,例如适用于 x86、x64、SPARC、ARM 等

以上是关于为啥代码在主板之间是兼容的?的主要内容,如果未能解决你的问题,请参考以下文章

我的主板是技嘉G41 每次我进入maxdos时候就会死机 得按重启键才行 这是为啥,,怎么解决

我的电脑PCI插槽插上卡之后启动就死机,为啥

设计模式—抽象工厂模式

安装了英伟达驱动之后就卡在欢迎界面进不去了,为啥啊

为啥安卓和iOS不兼容

为啥主板电池放电后才可以开机?