我有一个 STM32F446 微控制器,我观看了一些有关入门的不同视频,并尝试尽我所能地遵循它们(当然,没有一个适合我的确切设置,所以我很难填补我认为的空白),包括来自 embedonomicon 的“指南”。 embedonomicon 是我最密切关注的。
我认为我已经正确完成了所有初始部分(设置链接器和
main.rs
),但是当我使用cargo objdump --release -- --disassemble --no-show-raw-insn
时,我只得到以下内容:
stm32: file format elf32-littlearm
据我了解,应该有一堆二进制或十六进制或其他东西向我显示编译项目时创建的二进制文件的内容,但没有其他内容显示。
我尝试徒劳地搜索以找出为什么所有内容都能编译并且命令运行,但没有显示任何类型的二进制文件。不幸的是,我只能找到遇到命令失败或程序无法编译问题的人。但是,我什至使用
format-hex stm32 | more
查看了二进制文件,所以我知道它不是空的。
如果有人可以告诉我我的命令是否有问题并且应该显示更多信息,或者我是否一定做了一些前面的步骤错误并且 objdump 的输出是正确的,我会非常高兴感激的。我对裸机编程世界非常陌生,而且有很多不同微控制器的信息,我什至很难知道去哪里寻找,更不用说如何使其他解决方案适应我的需求了。具体情况。我确实没有看到任何我认为可以修复它的东西,但我知道我可能在某个地方错过了一些东西。如果有请原谅我。
以防万一其他人也和我一样,我相信我找到了答案。我试图将各种不同的教程拼凑在一起,这让我很难发现这一点。
我确信在正确的上下文中,embedonomicon 这样做是正确的,但对我来说,设置
[target.thumbv7em-none-eabi]
rustflags = ["-C", "link-arg=-Tlink.x"]
不正确。我不知道为什么,但是当我去掉
[target.thumbv7em-none-eabi]
并将 rustflags
行移到独立的位置时,它实际上开始给我提供信息(错误)。
各种不同的教程都使用不同的板条箱和不同的抽象级别,并且大多数都以某种形式具有
link-arg=-Tlink.x
。然而,我相信他们一定使用了一个我不知道如何实现的板条箱,它会使用 Rust 链接器,然后它让我自己编写的链接器以某种方式通过管道输入。同样,不知道这一切是如何工作的。这是最令人困惑的,因为嵌入经济学有我编写的链接器脚本,称为 link.x
。其他每个教程仍然有带有 -Tlink.x
的 rustflags 行,但他们编写的链接器称为 memory.x
。无论如何,如果您没有使用大多数其他指南使用的任何板条箱(我相信 cortex-m-rt
板条箱),那么 link.x
应该是您的链接器名称(在我的情况下,memory.x
)
.cargo/config
文件,扩展名为 .toml
,但我将其与其他更改一起删除,并且工作正常。不确定它是否也适用于 .toml
。现在我从 objdump 获得了预期的输出。如果其他人对我所做的事情感到困惑,我希望这会有所帮助。