小编Geo*_*ion的帖子

当一个值将在启动时写入一次然后只读取时,嵌入式 Rust 中的互斥锁是否有轻量级的替代方案?

根据关于并发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?

embedded mutex rust cortex-m

4
推荐指数
2
解决办法
575
查看次数

如何赋予变量多个值?

我正在做一个(非常基本的)游戏.因此,我需要为(很多)实体存储数据.

所以我提出了这个概念:

String[] Entity_Data = new String[EntityCount];
Entity_Data[0] = "1 12 98 45";//Or other numbers... 
Run Code Online (Sandbox Code Playgroud)

第一个数字可能是饥饿状态或步行速度,甚至是X或Y坐标.

有没有办法为数组中的每个变量赋予多个值?

c# arrays variables

0
推荐指数
1
解决办法
2万
查看次数

标签 统计

arrays ×1

c# ×1

cortex-m ×1

embedded ×1

mutex ×1

rust ×1

variables ×1