根据关于并发的Rust Embedded Book,在上下文之间共享一些数据的更好方法之一是使用带有 refcells 的互斥锁。我理解它们是如何工作的以及为什么这是必要的。但在某些情况下,间接成本似乎很高。
cortex_m crate 的互斥锁是这样工作的:
cortex_m::interrupt::free(|cs| {
let my_value = my_mutex.borrow(cs).borrow();
// Do something with the value
});
Run Code Online (Sandbox Code Playgroud)
互斥体cs在提供访问权限之前需要(CriticalSection) 令牌。在临界区,不会发生中断,所以我们知道我们是唯一可以更改和读取值的人。这很好用。
但是,我现在所处的场景是将变量写入一次以进行初始化(在运行时),然后始终将其视为只读值。就我而言,它是 MCU 的时钟速度。这不能是编译时常量。一个为什么从深度睡眠中醒来的例子:根据硬件的状态,可能会选择使用较慢的时钟速度来节省一些能量。因此,在启动时(或者更确切地说是所有 RAM 都消失的唤醒),每次都可以选择不同的时钟速度。
如果我只是想读取值,完成整个临界区设置似乎很浪费。如果这个变量可能再次改变,那么,是的,这是必要的。但这里的情况并非如此。它只会被读取。
有没有更好的方法来以更少的开销读取共享变量而不使用不安全的 Rust?
我正在做一个(非常基本的)游戏.因此,我需要为(很多)实体存储数据.
所以我提出了这个概念:
String[] Entity_Data = new String[EntityCount];
Entity_Data[0] = "1 12 98 45";//Or other numbers...
Run Code Online (Sandbox Code Playgroud)
第一个数字可能是饥饿状态或步行速度,甚至是X或Y坐标.
有没有办法为数组中的每个变量赋予多个值?