我是 Rust 新手,经过与编译器和借用检查器的多次斗争,我终于快完成了我的第一个项目。但现在我遇到了一个问题,二进制文件变得很大,无法适应微控制器的闪存。
我在 BluePill 上使用带有 64K 闪存的 STM32F103C8。起初,我能够将代码安装到 mc 上,并且我必须一点一点地启用优化等。现在我编译:
[profile.dev]
codegen-units = 1
debug = 0
lto = true
opt-level = "z"
Run Code Online (Sandbox Code Playgroud)
并且能够安装二进制文件。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" …Run Code Online (Sandbox Code Playgroud) 就像在标题中描述的那样,我的网站上有一个flex布局.
我左边有一个你可以隐藏的菜单栏.在css-transitions上,这看起来很平滑.问题是它的权利.由于flex布局,当我隐藏菜单栏时它必须调整大小.div是可滚动的.
现在,如果我隐藏或显示菜单栏右侧的div将其滚动偏移重置为零.这似乎只是Chrome中的情况.在Firefox,Edge和IE(IE还有其他问题)这样做是否正常.
如果我关闭菜单栏的css过渡,它确实可以正常工作,但我想要过渡.
当我使用动画而不是过渡时,它不起作用.
我尝试使用JavaScript进行脏修复,将每毫秒的滚动偏移设置为固定值,但它所做的只是在两个滚动位置之间快速跳转...
知道如何解决这个或可能是什么原因?
最后的最小例子.
编辑:我的猜测是div以某种方式重新加载,但似乎并非如此.当div跳回到顶部时会触发scroll事件...很遗憾,此事件无法取消.通过此事件重置滚动位置也很紧张.
Opera显示相同的问题.
var menuIsToggled = true;
function toggleMenu() {
if (menuIsToggled) {
document.getElementById('left').style.width = '0px';
} else {
document.getElementById('left').setAttribute('style', '');
}
menuIsToggled = !menuIsToggled;
}
function countScrolls(){
var e = document.getElementById('scrollCount');
e.innerHTML++;
}
var transIsToggled = true;
function toggleTrans(bt){
if(transIsToggled){
document.getElementById('left').className = "";
bt.innerHTML = "Turn on transition";
}
else{
document.getElementById('left').className = "trans";
bt.innerHTML = "Turn off transition";
}
transIsToggled = !transIsToggled;
}Run Code Online (Sandbox Code Playgroud)
div {
overflow: hidden;
}
#body {
height: 300px …Run Code Online (Sandbox Code Playgroud)