为什么主板之间的代码兼容?

Why code are compatible between motherboards?

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

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

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

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

我认为简短的回答是否定的,主板与为不同架构制造的主板不兼容。编译器和 OS 内核抽象了架构差异,但 OS 内核本身必须针对每个架构进行编码。特别是,OS 中特定于硬件的部分称为该特定硬件的 "driver",并且必须针对每个体系结构进行编码。

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

程序和编译器只需要知道如何在给定的体系结构和 OS 中进行系统调用,以及标识 OS API 的系统调用号是什么.