- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在我的 STM32 bluepill 上启用 DMA 外设,但出现以下错误:
error[E0382]: borrow of moved value: `dp.RCC`
--> src/main.rs:74:5
|
36 | let mut rcc = dp.RCC.constrain(); // RCC = Reset and Clock Control
| ------ value moved here
...
74 | dp.RCC.ahbenr.modify(|_, w| w.dma2en().set_bit());
| ^^^^^^ value borrowed here after move
|
= note: move occurs because `dp.RCC` has type `stm32f1::stm32f103::RCC`, which does not implement the `Copy` trait
我知道这是开始学习 Rust 时的常见问题。我已经阅读了这方面的文档,但对于我需要在这里做什么才能使这项工作仍然有些困惑。
代码如下:
#![no_std]
#![no_main]
extern crate panic_halt; // you can put a breakpoint on `rust_begin_unwind` to catch panics
use cortex_m::asm;
use cortex_m_rt::entry;
use cortex_m_semihosting::hprintln;
use embedded_hal::spi::{Mode, Phase, Polarity};
use stm32f1xx_hal::{
prelude::*,
pac,
spi::Spi,
dma,
stm32
};
#[entry]
fn main() -> ! {
let dp = pac::Peripherals::take().unwrap();
let mut rcc = dp.RCC.constrain(); // RCC = Reset and Clock Control
dp.RCC.ahbenr.modify(|_, w| w.dma2en().set_bit());
}
我还尝试使用 rcc.ahbenr.modify....
但是失败了,因为 RCC.constrain
方法的返回不是完整的 AHBENR
结构。再一次,我知道这很简单,我只是误解了。任何人都可以为此指出正确的方向吗?谢谢。
最佳答案
这里的问题是 dp.RCC
指的是外设访问包 (PAC) 中的 RCC API,基本上是原始寄存器接口(interface)。通过调用 dp.RCC.constrain()
,您可以获取原始 API 并将其转换为硬件抽象层 (HAL) API,该 API 旨在提供更安全、更方便的 API 层原始寄存器接口(interface)。
这样做会移动 PAC 级别的 API,从而使其无法使用。这是有意为之,因为如果允许用户随意修改位,HAL API 将无法维护其正确性保证。
据我所知,您有三种解决此问题的选择:
dp.RCC.constrain()
。dp.RCC.constrain()
后取回 PAC 级别的 RCC API。如果您选择选项 1,则需要手动执行 HAL API 为您执行的时钟设置。也许这就是您想要的,但这肯定需要更多工作,并且根据微 Controller 的复杂性,可能容易出错。我会选择另一种选择。
选项 2,将 HAL API 用于 DMA:这是否是一个选项取决于您使用的 HAL 是否支持该功能。你似乎在使用 stm32f1xx-hal
,它确实有一个 DMA API .有各种examples that use it在项目的存储库中。
至于选项 3,许多 HAL API 提供了取回 PAC 级 API 的方法(在此过程中破坏 HAL API)。因此,您可以使用 HAL API 进行初始化,然后取回 PAC API 以进行较低级别的访问。不幸的是,stm32f1xx-hal
似乎不支持这一点。如果你知道自己在做什么,你可以使用不安全的方式,比如 transmute
取回该 PAC API,但最好只向 HAL 发送拉取请求,添加一个返回 PAC API 的方法。
关于rust - 使用 STM32f1xx_hal crate 时借用移动值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57232061/
只是想知道 Jquery Mobile 是否足够稳定以用于实时生产企业移动应用程序。 有很多 HTML5 框架,因为我们的团队使用 JQuery 已经有一段时间了,我们更愿意使用 Jquery 移动框
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 3 年前。 Improve t
所以我尝试在 JavaScript 中对元素进行拖放。我使用的视频教程在这里; https://www.youtube.com/watch?v=KTlZ4Hs5h80 。我已经按照它的说明进行了编码,
无法在移动 iOS(safari 和 chrome)上自动播放以前缓存的 mp3 音频 我正在 Angular 8 中开发一个应用程序,在该应用程序的一部分中,我试图在对象数组中缓存几个传入的音频 m
Git 基于内容而不是文件,所以我目前理解以下行为,但我想知道是否有特殊选项或 hack 来检测此类事情: git init mkdir -p foo/bar echo "test" foo/a.tx
我正在寻找语义 ui 正确的类来隐藏例如移动 View 中的 DIV。在 Bootstrap 中,我们有“visible-xs”和“hidden-xs”。 但是在语义ui上我只找到了“仅移动网格” 最
我正在使用 ubuntu 和 想要移动或复制大文件。 但是当我与其他人一起使用服务器时,我不想拥有所有内存并使其他进程几乎停止。 那么有没有办法在内存使用受限的情况下移动或复制文件? 最佳答案 如果你
这些指令有什么区别?以 ARM9 处理器为例,它不应该是: ASM: mov r0, 0 C: r0 = 0; ASM: ld r0, 0 C: r0 = 0; ? 我不知道为什么要使用一个或另一个:
我有一个文件夹,其中包含一些随机命名的文件,其中包含我需要的数据。 为了使用数据,我必须将文件移动到另一个文件夹并将文件命名为“file1.xml” 每次移动和重命名文件时,它都会替换目标文件夹中以前
我经常在 IB/Storyboard 中堆叠对象,几乎不可能拖动其他对象后面的对象而不移动前面的对象。无论如何我可以移动已经选择但位于其他对象后面的对象吗?当我尝试移动它时,它总是选择顶部的对象,还是
几个月前,我看到 Safari 7 允许推送通知,它似乎是一个非常有用的工具,除了我看到的每个示例都专注于桌面浏览,而不是移动设备。 Safari 推送通知是否可以在移动设备上运行,如果没有,是否有计
我有一个简单的 View 模型,其中包含修改后的 ObservableCollection使用 SynchronizationContext.Current.Send在 UI 线程上执行对集合的更改。
关于cassandra创建的数据文件和系统文件的位置,我需要移动在“cassandra.yaml”配置文件中设置的“commitlog_directory”、“data_file_directorie
我有这个代码 $(function() { var message = 'Dont forget us'; var original; var txt1 = ' - '; $(wind
我的客户报告说他的网站有一个奇怪的问题。该网站的 URL 是 your-montenegro.me 在 基于 Android 的浏览器 上加载时,页面底部会出现一个奇怪的空白区域。以下是屏幕截图: 华
我有这个 HTML 标记: Express 300 bsf Sign Up 我需要将元素从 DOM 上的一个
我有一个可重新排序的 TableView (UITableView 实例)。尽管我已经实现了 UITableViewDataSource 方法: tableView:moveRowAtIndexPat
我的客户报告说他的网站有一个奇怪的问题。该网站的 URL 是 your-montenegro.me 在 基于 Android 的浏览器 上加载时,页面底部会出现一个奇怪的空白区域。以下是屏幕截图: 华
我需要在拖放或复制/剪切和粘贴(复制与移动)期间获取操作类型。它是一个 Swing 应用程序,并且实现了 TransferHandle。我在操作结束时需要此信息,在 importData 方法中。 对
我编写了一个具有 add 和 get 方法的 SortedIntList 类。 我调用以下四个方法: SortedIntList mySortedIntList = new SortedIntList
我是一名优秀的程序员,十分优秀!