簡體   English   中英

Write::write_fmt 在裸機上不能正常工作

[英]Write::write_fmt doesn't work properly on bare metal

在 x86_64 架構上, write! 宏按預期使用字符串參數工作,但不適用於整數。 當使用整數參數時,我得到一個奇怪的循環(例如write!(writer, "Hello {}!", 123)產生無限的 "Hello Hello Hello...")。 關於aarch64, write! 宏根本不起作用。

我使用以下命令構建 libcore:

rustc -C opt-level=3 -Z no-landing-pads -C no-stack-check \
  --crate-type rlib --target {arch}-unknown-linux-gnu lib.rs

其中{arch}分別是x86_64aarch64

我的代碼是使用相同的代碼生成選項構建的。 libcore 版本對應於我的編譯器。 有問題的代碼在這里 你能提出問題的可能原因嗎?

重要更新:

是更精煉的代碼。 libcore 是在項目中構建的,所以一切都在控制之中。 上面的循環來自機器重新啟動。 該代碼在 aarch64 上完美運行,但在 x86_64 上的 Write::write_fmt 中奇怪地崩潰。 仔細檢查了我的啟動程序集 - 那里似乎沒有錯誤。

write!(writer, "format {}", "1").unwrap();

我不認為這會幫助你解決問題,但是當我遇到類似的問題時write! 只會打印 str 參數。 如果您能找到將 i32 轉換為 str 的 #![no_std] 函數,那么這可能會幫助您完成您要執行的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM