问题标签 [non-volatile]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
252 浏览

java - 多线程中的Java volatile关键字

我试图重现 Java 多线程中的非易失性变量行为。test在这里,我在OccurrenceCounter.java类中有非易失性变量。在ThreadDemo.java类中,我有main生成两个线程的方法。在其中不断检查 while循环thread1中非​​易失性变量的值。如果我在MyRunnableThread1.javatest中运行下面的示例,则值不是从 CPU 缓存中获取的。occurrenceCounter.isTest()

OccurrenceCounter.java:

MyRunnableThread1.java:

MyRunnableThread2.java:

线程演示.java:

在 while 循环中的MyRunnableThread1.javaoccurrenceCounter.isTest()中,即使类中的test变量OcuurenceCounter是非易失性的,条件也不会从 CPU 缓存中返回。但是如果我删除第一个 while 循环:

然后我可以看到条件occurrenceCounter.isTest()总是错误的,即使它是更新的thread2并且thread1永远不会终止。那么为什么这个while循环:

影响非易失性变量的行为?这是第一个while循环强制从内存而不是从CPU缓存中读取值thread1吗?我试图得到这个答案很多。但我做不到。

请任何人帮助我解决这个问题。

0 投票
1 回答
118 浏览

c++ - 为什么这种易失性访问可以相对于非易失性访问重新排序?

下面的代码示例来自一个中文博客,介绍了volatile. 左边是C代码;另一个是生成的汇编代码。

正如我们在汇编代码中看到的, 的副作用A放在 的 副作用之后B,即使Bvolatile合格的。但是,cppreference.com 说

[W]在单个执行线程中,不能优化或重新排序易失性访问,并使用另一个可见的副作用,即先排序或先排序后易失性访问

这里的副作用A是在之前排序的B,所以我认为编译器这样做是非法的。我对吗?


作为补充,博客说如果我们要保证 avolatilenon-volatiletype 之间的顺序,我们需要同时做volatile

0 投票
3 回答
59 浏览

java - 如果 getter 被标记为同步,为什么这段代码会完成?

get()尽管字段不是易失性的,为什么当方法被标记为同步时此代码成功完成?如果没有同步,它会在我的机器上无限期地运行(如预期的那样)。

0 投票
0 回答
597 浏览

avr - 从 ATtiny1616 EEPROM 读/写

在 avr-gcc 中使用 ATting1616 我正在尝试读取和写入 EEPROM。

ATtiny1616 使用 NVMCTRL - 非易失性存储器控制器进行字节级读/写。我正在使用 NVMCTRL 从 EEPROM 读取/写入块,但它无法正常工作。

这是一个示例来演示我正在尝试做的事情。

假设我要在 EEPROM 中保存两个不同的值,然后读回每个值。

以下是读/写函数:

如果 test_data[7] 被打印,则转换的值将是“测试”。在调试模式下查看内存时,我可以看到该值始终被写入数据 EEPROM 中的第一个内存位置。[0x1400] 在这种情况下,从内存 x1400 开始,“测试”的值开始。

在读写 EEPROM 时,我似乎无法理解一些基本的东西。任何指导将不胜感激。

0 投票
2 回答
4331 浏览

partitioning - 我们可以在 ESP32 中真正使用多少 NVS 数据?

我正在检查我的 NVS 存储容量。这是我做分区时的输出。

编译器版本:5.2.0 Python requirements from /home/dhananjay/esp/esp-idf/requirements.txt都满意。生成的分区表二进制文件。内容:


这表明我可以使用 16k 的 nvs 存储,但是当我通过命名空间“storage”和键“a”-“p”写入 nvs 时,每个键包含 1022 字节的数据。我得到这个输出。

我只能存储 10220 Kb 的数据,请帮忙。

0 投票
1 回答
1242 浏览

tpm - TPM 非易失性内存大小?

我现在正在使用 IBM TPM v1332 + IBM TSS v1470,并尝试将一些重要的关键字/密码存储到 TPM 上的非易失性内存中。我找到了两种方法。一种是创建一个密封对象并用于evictcontrol存储它,例如: ${PREFIX}evictcontrol -ho $objHandle -hp 81800002 -hi p

另一种方法是直接使用 NV 命令来存储一些东西: ${PREFIX}nvdefinespace -hi o -ha 01000000 -pwdn nnn ${PREFIX}nvwrite -ha 01000000 -pwdn nnn

但是,我找不到有关 TPM 中可用的非易失性空间的任何信息。这在 TPM 规范中有描述吗?我在哪里可以找到信息?谢谢。

0 投票
1 回答
68 浏览

java - 为什么没有“volatile”的程序会像“volatile”一样工作?

如下所示,该程序有一个共享 var flag,但没有volatile

程序总是正常返回。所以我相信P1,flag设置为的行在其他线程中true更新。flag

但为什么?flag不是易变的,为什么它的值会立即更新?总是!

0 投票
3 回答
576 浏览

c - Assign volatile to non-volatile sematics and the C standard

This code busy-waits for the variable to turn to 1. If on first pass vfoo is not set to 1, will I get stuck inside.

This code compiles without warning. What does the standard say about this?

  • vfoo is declared as volatile. Therefore, read to this variable should not be optimized.
  • However, bar is not volatile qualified. Is the compiler allowed to optimize the write to this bar? .i.e. the compiler would do a read access to vfoo, and is allowed to discard this value and not assign it to bar (at L.7).
  • If this is a special case where the standard has something to say, can you please include the clause and interpret the standard's lawyer talk?
0 投票
1 回答
138 浏览

linker - 使用非易失性存储器 (NVRAM) 时 ld 链接脚本的加载地址 (LMA)

我正在为 TI 的 MSP430 MCU 开发裸机应用程序。该 MCU 使用非易失性存储器 FRAM。以下 SRAM 脚本运行良好:

__data_load_start 获取闪存中的加载内存地址(隐式?),并在 RAM 中保留一些空间。

现在,我想将它用于非易失性存储器。这个内存区域,在某些情况下会被重新初始化为它们的初始值,因此加载地址(LMA)和虚拟地址(VMA)会不同,如ld 文档中所述

但是,它不起作用。查看 .map 输出文件显示加载地址已设置在任何内存部分之外:/

我想明确指定这个内存区域的初始值的位置。有人可以帮忙吗?

编辑:

我试图更新脚本没有任何隐式规则:

但在这种情况下,之后声明的每个部分都会在 VMA 和 LMA 之间获得一个偏移量。例如,下面的部分给出(.map 文件):

但是两个地址应该相同:/

0 投票
1 回答
194 浏览

postgresql - 非易失性函数中不允许 CREATE TABLE

我有以下三个表:

我在这些表上编写了以下函数来显示患者的药物列表(患者 ID 是参数):

但是,它给了我这个错误:

非易失性函数中不允许 CREATE TABLE