只在 ISR 中读取的变量是否为 易失性?

2023-12-10

Is volatile需要一个在主循环中读写但在 ISR 中只读的变量吗?

编辑:在编写 main 时,ISR 被禁用。因此,该变量被有效地原子地使用。

EDIT:(非常相关):

中断的易失性与内存屏障


volatile是一种不好的同步访问方式。这是一个优化障碍,但仅此而已。

  • 它不是原子的;例如当你的some_type is uint64_t在没有本机 64 位数据类型的平台上,可能会有只读部分。例如。

    main()                  irq()
    
    /* initialization */ 
    var[0..31]  = 4
    var[32..63] = 8
    
    /* modificatoin */ 
    var[32..63] = 23
                          /* read */
                          a_hi = var[32..64] = 32
                          a_lo = var[0..31]  = 4
    var[0..31] = 42
    
  • 根据体系结构,可能需要内存屏障操作。例如。什么时候main and irq运行在具有专用缓存的不同内核上,irq将永远不会看到更新的值

第一个问题需要锁定,但锁定操作通常意味着优化障碍,因此volatile是多余的。

第二个问题也是如此,其中内存屏障也充当优化屏障。

volatile对于实现对处理器内存的访问非常有用(这可能会在两次读取之间发生变化,或者在写入时产生副作用)。但通常情况下,它是不必要的并且太昂贵。

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

只在 ISR 中读取的变量是否为 易失性? 的相关文章

随机推荐

  • 实例化不可变的配对对象

    是否可以创建一个具有对合作伙伴对象的不可变引用的类 或者它必须是一个var我在创建后分配的 e g class PairedObject p PairedObject id String val partner PairedObject p
  • 无法在 Eclipse 中找到混淆的 Firebase 类

    是的 遗憾的是我正在开发一个仍在使用 Eclipse 进行的项目 我正在将其与 Firebase 集成 并且我阅读了有关使用 Eclipse 获取 aar 文件的内容 如何在 Eclipse 项目中使用 Firebase 云消息 除了以下情
  • 给定一个 x,y 坐标,我需要找到它下面的所有 html 元素

    我正在构建一个应用程序 我反复需要获取位于特定位置 例如相对于视口的 x y 下的 html 元素列表 我正在考虑以下方法 但没有一个令人满意 1 浏览 html 构建一个数据结构来跟踪每个元素的 x y 位置 x y gt 元素集 然后在
  • iOS 8 图像缩放和自动布局

    假设我有一个UIView只有一张图像位于顶部的中心UIView 我为图像提供了图像资源 如下所示 iPhone 4s 及更早版本 50x50 为正常 2x 适用于 iPhone 5 5c 5s 6 100x100 3x 适用于 iPhone
  • Scala泛型类支持多参数功能

    假设我有以下 Foo 类 它使用元组技巧支持任意数量的函数 abstract class Foo T R def pull T gt R 我可以使用以下语法定义子类 implicit def function2Tofunction1 T1
  • 拨号 tcp:不匹配的本地地址类型 172.29.4.175

    我使用以下代码收到此错误 拨号 tcp 不匹配的本地地址类型 172 29 4 175 知道如何解决这个问题吗 除了网上找不到任何有用的东西http oocms org question 763660 dial with a specifi
  • 添加 FirebaseUI 库和支持库时清单合并失败

    我正在使用 google firebase 实施身份验证 我收到此错误 如果可能的话 请有人提出解决方案并附上解释 以便我能理解 错误 任务 app processDebugManifest 执行失败 清单合并失败 来自 com andro
  • 在 R 中按 colSums 划分列

    我正在尝试缩放矩阵中的值 以便每一列加起来为一 我努力了 m matrix c 1 9 nrow 3 ncol 3 byrow T 1 2 3 1 1 2 3 2 4 5 6 3 7 8 9 colSums m 12 15 18 m m c
  • Redshift UDF逻辑问题

    我正在尝试编写 redshift udf 来验证时间戳 但是 它总是返回 false 有人可以解释一下为什么吗 create or replace function f Is timestamp sql VARCHAR 20000 retu
  • 如何使用 Interop 与 C# 将 *.ppt、*.pptx 文件另存为 *.wmv?

    我尝试用下面的代码来做到这一点 using Microsoft Office Core using PowerPoint Microsoft Office Interop PowerPoint using System IO using M
  • 如何使用 Java SDK 获取 AWS Quicksight 仪表板的嵌入 URL

    我想我了解获取 AWS Quicksight 仪表板的嵌入 URL 所需的所有步骤 并且我已经能够通过 AWS CLI 获取有效的 URL 如AWS docs 但是 我似乎无法通过 AWS Java SDK 特别是 v2 让它工作 似乎任何
  • 如何让Android应用程序在屏幕休眠时在后台运行?

    我正在开发一个跟踪应用程序 它通过每 3 秒获取用户当前位置来跟踪用户 当屏幕打开时 我能够获取经纬度值 但当屏幕休眠时 我无法获取数据 CODE Override public void onLocationChanged Locatio
  • 在VS 2017、MVC中添加服务引用

    如何在 VS 2017 MVC 中添加服务引用 我尝试找到 添加服务引用 按钮 但它不在那里 只有 添加引用 和 添加连接的服务 我之前在 VS 2013 中添加了服务引用 这很容易 但现在我为我的学校项目更改为 VS 2017 我不知道如
  • 使用 Gson 或 Jackson 压平 JSON 字符串,将包含各个级别键值的键制作为 Map

    我有一个关于以下问题的增强问题使用 Gson 或 Jackson 将 JSON 字符串展平为 Map 我的场景包括重复的键 因此上述问题中的解决方案会导致一些重复的键被覆盖 所以我正在考虑通过将每个级别的密钥组合在一起来构造密钥 那么如何实
  • 如果主题更改,请更改 WP7 应用程序的背景

    如果用户更改主题 我需要更改应用程序的背景图像 Light to Dark 或在代码隐藏中反之亦然 我希望这些应该在页面已加载 event TimDams 向您指出了检测现在设置的主题的好方法之一 但我没有注意到有任何信息如何检测a cha
  • MobileFirst Starter - Bluemix 推送通知在生产模式下失败

    我正在构建一个可以通过 Bluemix 接收远程通知的 iOS 应用程序 我在 Xcode 中的应用程序包标识符与 Apple Portal 中的 AppId 相匹配 后者也与 APN 证书相匹配 xxx sandbox p12 和 xxx
  • 如何更改构建定义的 Scala 版本?

    我正在开发一个简单的 SBT 项目 其中包括用于对 Scala 并行集合进行基准测试的 InputTasks 当我遇到问题时 我已经定义了输入键并开始编写任务 由于我的基准要求斯卡拉 2 10 0 M5 我尝试在我的build sbt na
  • 返回匿名类型结果?

    使用下面的简单示例 使用 Linq to SQL 从多个表返回结果的最佳方法是什么 假设我有两张表 Dogs Name Age BreedId Breeds BreedId BreedName 我想把所有的狗都带回来BreedName 我应
  • EL中bean的动态选择

    有没有办法在运行时而不是设计时指定 EL 中使用的托管 bean 例如 actionListener myBean method 这样myBean根据调用代码的 JSF 页面 part 可以有不同的值 条件是使用的任何对象代替 myBean
  • 只在 ISR 中读取的变量是否为 易失性?

    Is volatile需要一个在主循环中读写但在 ISR 中只读的变量吗 编辑 在编写 main 时 ISR 被禁用 因此 该变量被有效地原子地使用 EDIT 非常相关 中断的易失性与内存屏障 volatile是一种不好的同步访问方式 这是