Я новичок в Rust, и после многих сражений с компилятором и средством проверки заимствований я наконец почти закончил свой первый проект.Но теперь у меня проблема в том, что двоичный файл становится большим, чтобы поместиться во флэш-память микроконтроллера.
Я использую STM32F103C8 со 64K-флэш-памятью на BluePill.Сначала я смог разместить код на mc, и постепенно мне нужно было включить оптимизацию и все такое.Теперь я компилирую с:
[profile.dev]
codegen-units = 1
debug = 0
lto = true
opt-level = "z"
и могу вписать двоичный файл.opt-level = "s"
действительно генерирует большой двоичный файл.Тогда я получаю ошибку: rust-lld: error: section '.rodata' will not fit in region 'FLASH': overflowed by 606 bytes
Поскольку у меня менее 1000 строк кода и, как я бы сказал, не очень необычные зависимости, это кажется странным.
Есть несколько сайтов, подобных это со способами минимизации двоичного файла.Поскольку они не предназначены для встроенных систем, большинство способов минимизации в любом случае выполняются.
Как я могу минимизировать двоичный размер и все еще могу отлаживать его?
Мои зависимости:
[dependencies]
cortex-m = "*"
panic-halt = "*"
embedded-hal = "*"
[dependencies.cortex-m-rtfm]
version = "0.4.3"
features = ["timer-queue"]
[dependencies.stm32f1]
version = "*"
features = ["stm32f103", "rt"]
[dependencies.stm32f1xx-hal]
version = "0.4.0"
features = ["stm32f103", "rt"]
Возможно, есть проблема, поскольку я заметил, что cargo build
несколько раз компилирует некоторые подзависимости в разных версиях.
Внутри файла memory.x
:
MEMORY
{
FLASH : ORIGIN = 0x08000000, LENGTH = 64K
RAM : ORIGIN = 0x20000000, LENGTH = 20K
}
Версия Rustc rustc 1.37.0 (eae3437df 2019-08-13)
edit
Паника ржавчины прерывается.
Код можно просмотреть при: https://github.com/DarkPhoeniz/rc-switcher-rust