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

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(使用前将#替换为@)

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

  • 以文化中立的方式将字符串拆分为单词

    我提出了下面的方法 旨在将可变长度的文本拆分为单词数组 以进行进一步的全文索引处理 删除停止词 然后进行词干分析 结果似乎不错 但我想听听关于这种实现对于不同语言的文本的可靠性的意见 您会建议使用正则表达式来代替吗 请注意 我选择不使用 S
  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • 重载<<的返回值

    include
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • 如何从两个不同的项目中获取文件夹的相对路径

    我有两个项目和一个共享库 用于从此文件夹加载图像 C MainProject Project1 Images 项目1的文件夹 C MainProject Project1 Files Bin x86 Debug 其中有project1 ex
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • 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恰好存储了该端口映射到的地址 通常它们被称为 嵌入式平台 此类平台的真实例子有哪些 根据我的经验 大多数系统都使用内