大佬教程收集整理的这篇文章主要介绍了为什么在做嵌入式发现教程时cargo build会无限期挂起,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前正在尝试阅读 Rust Embedded Discovery Book 的第 11 章。本章的存储库可以在 here 中找到。
编译器挂在以下代码上:
#![deny(unsafe_code)]
#![no_main]
#![no_std]
#[allow(unused_imports)]
use aux11::{entry,iprint,iprintln};
#[entry]
fn main() -> ! {
let (usart1,_mono_timer,_itm) = aux11::init();
for char in b"The quick brown fox jumps over the lazy dog.".iter() {
// Send a single character
usart1.tdr.write(|w| w.tdr().bits(u16::from(*char)));
}
loop {}
}
此目录的另一个变化是将 cortex-m
的版本升级为 0.5.8
。
编辑:我运行的命令是cargo build --verbose
,所以运行的是编译器本身而不是程序。
这是完整的命令及其输出:
C:/Users/User/.cargo/bin/cargo.exe build --color=always --message-format=Json-diagnostic-rendered-ansi --target thumbv7em-none-eabihf --verbose
Fresh semver-parser v0.7.0
Fresh nb v1.0.0
Fresh unicode-xID v0.2.1
Fresh vcell v0.1.3
Fresh voID v1.0.2
Fresh aligned v0.2.0
Fresh r0 v0.2.2
Fresh bitfIEld v0.13.2
Fresh byteorder v1.4.2
Fresh semver v0.9.0
Fresh rustc_version v0.2.3
Fresh nb v0.1.3
Fresh volatile-register v0.2.0
Fresh hash32 v0.1.1
Fresh proc-macro2 v1.0.24
Fresh embedded-hal v0.2.4
Fresh typenum v1.12.0
Fresh quote v1.0.8
Fresh generic-array v0.11.1
Fresh bare-Metal v0.2.5
Fresh syn v1.0.58
Fresh cast v0.2.3
Fresh l3gd20 v0.2.0
Fresh heapless v0.3.7
Fresh cortex-m-rt-macros v0.1.8
Fresh cortex-m v0.5.8
Fresh cortex-m v0.7.2
Fresh lsm303dlhc v0.2.0
Fresh cortex-m-rt v0.6.13
Fresh panic-itm v0.4.2
Fresh stm32f30x v0.7.1
Fresh stm32f30x-hal v0.2.0
Fresh f3 v0.6.1
Fresh aux11 v0.1.0 (C:\repos\discovery\src\11-usart\auxiliary)
Compiling usart v0.1.0 (C:\repos\discovery\src\11-usart)
Running `C:\Users\User\.cargo\bin\rustc.exe --crate-name usart --edition=2018 src\11-usart\src\main.rs --error-format=Json --Json=diagnostic-rendered-ansi --crate-type bin --emit=dep-info,link -C embed-bitcode=no -C deBUGinfo=2 -C Metadata=b319e2d1d8d11eef -C extra-filename=-b319e2d1d8d11eef --out-dir C:\repos\discovery\target\thumbv7em-none-eabihf\deBUG\deps --target thumbv7em-none-eabihf -C incremental=C:\repos\discovery\target\thumbv7em-none-eabihf\deBUG\incremental -L dependency=C:\repos\discovery\target\thumbv7em-none-eabihf\deBUG\deps -L dependency=C:\repos\discovery\target\deBUG\deps --extern aux11=C:\repos\discovery\target\thumbv7em-none-eabihf\deBUG\deps\libaux11-2d2dac5f4230a287.rlib --extern heapless=C:\repos\discovery\target\thumbv7em-none-eabihf\deBUG\deps\libheapless-61d8b3c4b16d4842.rlib -C link-arg=-Tlink.x -L C:\repos\discovery\target\thumbv7em-none-eabihf\deBUG\build\cortex-m-7f60ed6e068039ff\out -L C:\repos\discovery\target\thumbv7em-none-eabihf\deBUG\build\cortex-m-rt-17f16ed1a0c77cc5\out -L C:\repos\discovery\target\thumbv7em-none-eabihf\deBUG\build\f3-1a08fdc1cbf64e81\out -L C:\repos\discovery\target\thumbv7em-none-eabihf\deBUG\build\stm32f30x-50ac612f864f84d1\out -L C:\repos\discovery\target\thumbv7em-none-eabihf\deBUG\build\cortex-m-2bd89fb5390eaa29\out`
它现在已经运行了 10 多个小时,所以 Rust 的长编译时间不应该是一个因素。
这些是我的工具链版本:
编辑:这是我的 auxiliary/Cargo.toml
,它从 @L_419_2@ 更改为仅 cortex-m
版本(由于我在 0.5.6 上遇到的其他错误):
[package]
authors = ["Jorge Aparicio <jorge@japaric.io>"]
edition = "2018"
name = "aux11"
version = "0.1.0"
[dependencIEs]
cortex-m = "=0.5.8" # 0.5.11 introduces a breaking change. Use 0.5.6,since we kNow it works for this example
cortex-m-rt = "0.6.3"
panic-itm = "0.4.0"
[dependencIEs.f3]
features = ["rt"]
version = "0.6.1"
[features]
adapter = []
这里是 Cargo.toml
和 auxiliary/src/lib.rs
,与 @L_419_2@ 相同:
Cargo.toml
:
[package]
authors = ["Jorge Aparicio <jorge@japaric.io>"]
edition = "2018"
name = "usart"
version = "0.1.0"
[dependencIEs.aux11]
path = "auxiliary"
# enable this if you are going to use an external serial adapter
# features = ["adapter"]
[dependencIEs.heapless]
default-features = false
version = "0.3.7"
auxiliary/src/lib.rs
:
//! Initialization code
#![no_std]
#[allow(unused_extern_crates)] // NOTE(allow) BUG rust-lang/rust53964
extern crate panic_itm; // panic handler
pub use cortex_m::{asm::bkpt,iprintln,peripheral::ITM};
pub use cortex_m_rt::entry;
pub use f3::hal::{prelude,serial::Serial,stm32f30x::usart1,time::MonoTimer};
use f3::hal::{
prelude::*,stm32f30x::{self,USART1},};
pub fn init() -> (&'static mut usart1::RegisterBlock,MonoTimer,ITM) {
let cp = cortex_m::peripherals::take().unwrap();
let dp = stm32f30x::peripherals::take().unwrap();
let mut flash = dp.FLASH.constrain();
let mut rcc = dp.RCC.constrain();
let clocks = rcc.cfgr.freeze(&mut flash.acr);
let (tx,rx) = match () {
#[cfg(feature = "adapter")]
() => {
let mut gpioa = dp.GPIOA.split(&mut rcc.ahb);
let tx = gpioa.pa9.into_af7(&mut gpioa.moder,&mut gpioa.afrh);
let rx = gpioa.pa10.into_af7(&mut gpioa.moder,&mut gpioa.afrh);
(tx,rx)
}
#[cfg(not(feature = "adapter"))]
() => {
let mut gpioc = dp.GPIOC.split(&mut rcc.ahb);
let tx = gpioc.pc4.into_af7(&mut gpioc.moder,&mut gpioc.afrl);
let rx = gpioc.pc5.into_af7(&mut gpioc.moder,&mut gpioc.afrl);
(tx,rx)
}
};
Serial::usart1(dp.USART1,(tx,rx),115_200.bps(),clocks,&mut rcc.apb2);
// If you are having trouble sending/receiving data to/from the
// HC-05 bluetooth module,try this configuration instead:
// Serial::usart1(dp.USART1,9600.bps(),&mut rcc.apb2);
unsafe {
(
&mut *(USART1::ptr() as *mut _),MonoTimer::new(cp.DWT,clocks),cp.ITM,)
}
}
我在输出中没有发现任何线索,所以非常欢迎任何建议!
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
以上是大佬教程为你收集整理的为什么在做嵌入式发现教程时cargo build会无限期挂起全部内容,希望文章能够帮你解决为什么在做嵌入式发现教程时cargo build会无限期挂起所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。