哪些真实平台将硬件端口映射到内存地址?

2024-03-21

我有时会在某些平台上看到以下 C 或 C++ 代码的语句:

int* ptr;
*ptr = 0;

可能会导致写入硬件输入输出端口,如果ptr恰好存储了该端口映射到的地址。通常它们被称为“嵌入式平台”。

此类平台的真实例子有哪些?


根据我的经验,大多数系统都使用内存映射 I/O。 x86 平台有一个独立的、非内存映射的 I/O 地址空间(使用in/out处理器操作码系列),但 PC 架构还广泛使用设备 I/O 的标准内存地址空间,它具有更大的地址空间、更快的访问(通常)和更容易的编程(通常)。

我认为最初使用单独的 I/O 地址空间是因为处理器的内存地址空间有时非常有限,使用其中的一部分进行设备访问没有什么意义。一旦内存地址空间开放到兆字节或更多,将 I/O 地址与内存地址分开的原因就变得不那么重要了。

我不确定有多少处理器像 x86 那样提供单独的 I/O 地址空间。作为单独 I/O 地址空间如何失宠的一个迹象,当 x86 架构进入 32 位领域时,没有采取任何措施将 I/O 地址空间从 64KB 增加(尽管他们确实增加了能力)在一条指令中移动 32 位数据块)。当 x86 进入 64 位领域时,I/O 地址空间仍为 64KB,甚至没有添加以 64 位单元移动数据的能力……

另请注意,现代桌面和服务器平台(或使用虚拟内存的其他系统)通常不允许应用程序访问 I/O 端口,无论它们是否是内存映射的。该访问仅限于设备驱动程序,甚至设备驱动程序也会有一些操作系统接口来处理物理地址的虚拟内存映射和/或设置 DMA 访问。

在较小的系统(如嵌入式系统)上,I/O 地址通常由应用程序直接访问。对于使用内存映射地址的系统,通常只需使用设备 I/O 端口的物理地址设置一个指针,然后像使用其他指针一样使用该指针即可完成此操作。但是,为了确保访问发生并且以正确的顺序发生,必须将指针声明为指向volatile object.

要访问使用内存映射 I/O 端口以外的设备(例如 x86 的 I/O 地址空间),编译器通常会提供一个扩展,允许您读取或写入该地址空间。如果没有这样的扩展,您需要调用汇编语言函数来执行 I/O。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

哪些真实平台将硬件端口映射到内存地址? 的相关文章

  • 使用 #pragma Once 和 #ifndef 时出现 VS 2010 C++ LNK2005 错误

    1 gt Deck obj error LNK2005 class Card card card 3VCard A already defined in Card obj 1 gt PokerTester obj error LNK2005
  • Visual Studios 2015 中的“恢复 NuGet 包”没有执行任何操作

    我将解决方案从 SVN 拉入 Visual Studios 2015 代码中的一些 使用 引用出现错误 因此我尝试在右键单击 解决方案 中的解决方案时运行 恢复 NuGet 包 选项探索者 这没有任何作用 我必须手动进入 nuget 管理器
  • 如何在 ASP.NET MVC 中将 XML 文件发送到客户端

    在 ASP NET MVC 中 我有一个数据库表 我想在某个视图页面上有一个按钮 如果某个用户单击该按钮 我的应用程序将生成包含数据库中所有行的 XML 文件 然后 应将包含 XML 的文件发送到客户端 以便用户看到下载弹出窗口 同样 我希
  • 如何使用 Entity Framework 和 Identity 解决对象处置异常 ASP.NET Core

    我正在尝试编写一个控制器 该控制器接收来自 AJAX 调用的请求并通过 DBContext 对数据库执行一些调用 但是 当我发出命令时var user await GetCurrentUserAsynch 在对 DBContext 的任何调
  • getline 之后返回到文件开头

    所以我已经从文件中读取了所有行 while getline ifile line logic 其中 ifile 是 ifstream line 是字符串 我的问题是我现在想再次使用 getline 并且似乎无法返回到文件的开头 因为运行 c
  • C# 异步任务比同步慢

    你知道为什么同步斐波那契方法比异步 等待更快并且比异步任务更快吗 我在每个项目方法上都使用了异步 所以主要是这是一个非常糟糕的方法 Code static int FibonacciSync int number if number 0 r
  • Qt/c++ 随机字符串生成[重复]

    这个问题在这里已经有答案了 我正在创建一个应用程序 需要生成多个随机字符串 几乎就像一个由一定长度的 ASCII 字符组成的唯一 ID 这些字符混合有大写 小写 数字字符 有没有 Qt 库可以实现这一点 如果没有 在纯 C 中生成多个随机字
  • 为什么如果内存组织为字,则程序计数器加 1;如果内存组织为字节,则程序计数器加 2?

    如果在计算机中一条指令是 16 位 并且如果存储器被组织为 16 位字 则通过在当前指令的地址中加 1 来计算下一条指令的地址 如果内存是按字节组织的 可以单独寻址 那么我们需要在当前指令地址上加二 得到顺序执行的下一条指令的地址 为什么会
  • 如何从不同的线程访问控件?

    如何从创建控件的线程以外的线程访问控件 避免跨线程错误 这是我的示例代码 private void Form1 Load object sender EventArgs e Thread t new Thread foo t Start p
  • 选择initializer_list迭代器定义

    Why std initializer list
  • QSpinBox 输入 NaN 作为有效值

    我正在尝试扩展 QSpinBox 以能够输入 NaN 或 nan 作为有效值 根据文档 我应该使用 textFromValue valueFromText 和 validate 函数来完成此操作 但我无法让它工作 因为它仍然不允许我输入除数
  • 如何调试.NET Windows Service OnStart方法?

    我用 NET 编写的代码仅在作为 Windows 服务安装时才会失败 该故障甚至不允许服务启动 我不知道如何进入 OnStart 方法 如何 调试 Windows 服务应用程序 http msdn microsoft com en us l
  • std::make_pair 与浮点数组(float2,无符号整数)

    我有一个用 float2 unsigned int 对模板化的向量 例如 std vector
  • ASP.net WebForms - 在标记中使用 GetRouteUrl

    我一直在尝试弄清楚如何将路由功能与 ASP net 4 0 WebForms 一起使用 我将一条路线添加到我的路线集合中 void Application Start RegisterRoutes RouteTable Routes voi
  • 节点*链表中的下一个

    我是数据结构和算法的新手 我遇到了以下代码 typedef struct node int data node next 谁能告诉我为什么我们要声明节点 next next 不能声明为 int next 吗 因为你希望能够做到n gt ne
  • 冒号在c中起什么作用?

    我在课堂上得到了这个例子 但我不确定它的作用 我知道冒号添加了一个位字段 但我仍然不确定这个问题 a b gt 0 3 1 运算符称为条件运算符 If b值为 gt 0 价值3被分配给a否则值1被分配给a 以 Kernighan Ritch
  • Windows 上本机 C++ 应用程序中的自动死代码检测?

    背景 我有一个用原生 C 编写的应用程序 花了几年的时间 大约有 60 KLOC 有很多函数和类已经死了 可能有 10 15 就像下面提出的类似的基于 Unix 的问题 我们最近开始对所有新代码进行单元测试 并尽可能将其应用于修改后的代码
  • 如何禁用基于 ValidationRule 类的按钮?

    如何禁用基于 ValidationRule 类的 WPF 按钮 下面的代码可以很好地突出显示 TextBox
  • 强制函数调用的顺序?

    假设我有一个抽象基类 并且我想要一个必须由派生类实现的纯虚方法 但我想确保派生方法以特定顺序调用函数 我可以做什么来强制执行它 I E base class virtual void doABC 0 virtual void A 0 vir
  • 在 C# 中使用自定义千位分隔符

    在显示字符串时 我尝试不使用 字符作为千位分隔符 而是使用空格 我想我需要定义一种自定义文化 但我似乎做得不对 有什么指点吗 例如 将 1000000 显示为 1 000 000 而不是 1 000 000 no String Replac

随机推荐

  • Azure,错误 403 - 禁止:需要客户端证书

    我正在尝试在 Azure 中创建 应用程序服务 并在 设置 区域中设置 自定义域 和 TLS SSL 设置 ssl 绑定 SNI SSL 然后我通过 ftp 放置了一个 html 文件 并收到以下错误 错误 403 禁止 需要客户端证书 您
  • 重定向到不同路由时,FastAPI RedirectResponse 获取 {"message": "Forbidden"}

    请向我提出一个几乎不可能创建可重现示例的问题 我使用 Docker 无服务器和部署在 AWS API Gateway 上的 FastAPI 设置了 API 讨论的所有路由都受到传递到标头中的 api key 的保护 x api key 我正
  • 替换 LEFT OUTER JOIN 中返回的空值

    SELECT WO BreakerRail ID indRailType RailType indRailType RailCode WO BreakerRail CreatedPieces WO BreakerRail OutsideSo
  • Flutter:如何在代码中的每个列表项之间添加分隔线?

    如何将分隔线添加到列表中 我使用 Android 版 Flutter 我想在每个列表项之间添加一个分隔线 并且想要对分隔线进行着色并添加样式 我尝试添加new divider 但我有错误 我也尝试过return new divider 这是
  • Windows 窗体 - Tab 键在子面板中不起作用

    我有一个表单中的子面板 其中包含一些文本框和按钮 我尝试为这些控件设置 tabstop 和 tabindex 属性 以便用户可以从一个控件切换到下一个控件 但由于某种原因 制表符不起作用 当我按 Tab 键时 光标停留在具有焦点的同一字段上
  • 使用 CakePHP 提取 URL 值(参数)

    我知道 CakePHP 参数可以轻松地从 URL 中提取值 如下所示 http www example com tester retrieve test good 1 accepted active 我需要从 URL 中提取值 如下所示 h
  • 如何将 NSMutableString 绑定到 NSTextView 的值?

    好的 所以我正在尝试在 Xcode 中为自己设置一个非常简单的程序 我有一个窗口 在界面生成器中 其中包含一个 NSTextView 和一个 NSButton 在我的 AppController 类中 我声明了一个NSMutableStri
  • vc++下编译bison和flex程序时unistd.h相关困难

    我正在使用 bison flex 通过 cygwin 下载 和 vc 当我编译程序时 出现错误 fatal error C1083 Cannot open include file unistd h No such file or dire
  • 为过程或函数 cdc.fn_cdc_get_all_changes_ 提供的参数数量不足

    看似有效的代码 用于查询表中最新跟踪的更改Fields DECLARE Begin LSN BINARY 10 End LSN BINARY 10 SET Begin LSN sys fn cdc get min lsn Fields SE
  • Firefox 打开新选项卡而不是弹出窗口? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我发现在最新版本的 Firefox 中 添加了一个名为 在新选项卡中打开新窗口 的设置 当我保持打开状态时 所有弹出窗口 使用打开的jav
  • 将 Html.Partial 添加到 Javascript

    我想使用 ASP NET Html Partial 视图在 Javascript 中设置一个字符串 问题是 Html Partial 给出了 HtmlString 而不是我可以使用 JQuery 处理的 Javascript 字符串 Jav
  • 内嵌显示图像和文本

    我无法在标题的每一侧获取图像 我尝试过 display inline block 但这不适合我 这里是jsfiddle http jsfiddle net uyjmffbu inline image display inline block
  • 异常保证和按值传递

    我最近在多种情况下遇到过这个问题 其中表达的一些观点让我感到惊讶 这是第一个简单的例子 void f std vector
  • 在 Objective-C 中使用枚举?

    这是在 Objective C 中使用 emum 的正确方式 甚至是有效方式 吗 即不使用 menuItem 而只是定义了一个列表 add 1 load 2 list 3 等 enum menuItems add 1 save load l
  • AsyncTaskLoader:方向更改后未调用 onLoadFinished

    我有一个AsyncTaskLoader对于长时间运行的任务 当加载程序运行时 我的活动由于方向变化而被破坏 onLoadFinished回调未被调用 我可以以某种方式将加载程序 重新附加 到我的新活动 它的回调吗 这是我的 简化的 Acti
  • Django python 中的Search_fields

    我想知道如何使用外键来执行搜索 例如 class Product models Model name models CharField max length 127 description models TextField code mod
  • 将 mongodb 作为 Windows 服务运行

    我已经在 win32 上安装了 mongodb 我正在尝试将其作为服务运行 我已按照此处发布的说明进行操作 http www deltasdevelopers com post Running MongoDB as a Windows Se
  • SQL Server 2005 查询的性能

    这需要 4 秒来执行 有 2000 000 行 为什么 DECLARE AccountId INT DECLARE Max INT DECLARE MailingListId INT SET AccountId 6730 SET Max 2
  • 将选择器添加到 UIButton

    I have ViewController然后两个不同的ViewControllers扩展该主要ViewController 一个用于 iPhone 另一个用于 iPad iPad 的ViewController实例化一个单独的扩展UIVi
  • 哪些真实平台将硬件端口映射到内存地址?

    我有时会在某些平台上看到以下 C 或 C 代码的语句 int ptr ptr 0 可能会导致写入硬件输入输出端口 如果ptr恰好存储了该端口映射到的地址 通常它们被称为 嵌入式平台 此类平台的真实例子有哪些 根据我的经验 大多数系统都使用内