Rust 嵌入式开发

Rust 进行嵌入式开发:
https://xxchang.github.io/book/intro/index.html

# 列出所有目标平台
rustup target list

# 安装目标平台工具链
rustup target add thumbv7m-none-eabi

# 创建工程
cargo new demo && cd demo
cargo add cortex-m-rt
cargo add panic-halt
cargo add cortex-m-semihosting

main.rs

#![no_main]
#![no_std]

use panic_halt as _;

use cortex_m_rt::entry;
use cortex_m_semihosting::{
   debug, hprintln};

#[entry]
fn main() -> ! {
   
    hprintln!("Hello, world!");

    // 退出 QEMU
    debug::exit(debug::EXIT_SUCCESS);

    loop {
   }
}

.cargo/config.toml

[build]
# target = "thumbv6m-none-eabi"    # Cortex-M0 and Cortex-M0+
target = "thumbv7m-none-eabi"      # Cortex-M3
# target = "thumbv7em-none-eabi"   # Cortex-M4 and Cortex-M7 (no FPU)
# target = "thumbv7em-none-eabihf" # Cortex-M4F and Cortex-M7F (with FPU)

[target.thumbv7m-none-eabi]
# 当执行 cargo run 时执行
runner = "qemu-system-arm -cpu cortex-m3 -M lm3s6965evb -nographic -semihosting-config enable=on,target=native -kernel"
rustflags = [
    "-C", "link-arg=-Tlink.x",
]

link.x 由 cortex-m-rt 提供, 不需要创建和设置, 这时只需设置 MEMORY 即可

memory.x

MEMORY
{
   
    FLASH : ORIGIN = 0x00000000, LENGTH = 256K
    RAM : ORIGIN = 0x20000000, LENGTH = 40K
}

qemu 中似乎无法使用 FLASH ? 0x00000000 应该是一个内存区域, 模拟 flash
如果硬写 stm32 的 flash 0x08000000 实际地址, qemu 运行会报错
当要调试时可以添加 -S -s 到 Qemu,然后使用 VSCode + gdb 对生成的 elf 进行调试即可

实机测试

将 memory.x 中的地址改回 flash 实际地址 0x08000000, 然后通过 openocd 下载和调试

openocd.cfg

source [find interface/stlink.cfg]
source [find target/stm32h7x.cfg]

reset_config none separate

# 下载程序
program ./target/thumbv7m-none-eabi/debug/demo verify

# 启动半主机模式
arm semihosting enable

相关推荐

  1. Rust 嵌入开发

    2023-12-19 07:52:04       59 阅读
  2. rust嵌入开发

    2023-12-19 07:52:04       47 阅读
  3. rust嵌入开发补充

    2023-12-19 07:52:04       61 阅读
  4. rust嵌入开发之RTICvsEmbassy

    2023-12-19 07:52:04       55 阅读
  5. rust嵌入开发之总结

    2023-12-19 07:52:04       34 阅读
  6. 嵌入开发】29

    2023-12-19 07:52:04       50 阅读
  7. 嵌入开发】72

    2023-12-19 07:52:04       42 阅读
  8. 嵌入开发】70

    2023-12-19 07:52:04       46 阅读
  9. 嵌入开发】94

    2023-12-19 07:52:04       53 阅读
  10. 嵌入开发】98

    2023-12-19 07:52:04       43 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-19 07:52:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-19 07:52:04       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-19 07:52:04       87 阅读
  4. Python语言-面向对象

    2023-12-19 07:52:04       96 阅读

热门阅读

  1. 【Rust 学习笔记】References and Borrowing

    2023-12-19 07:52:04       62 阅读
  2. jQuery Ajax 缓存

    2023-12-19 07:52:04       62 阅读
  3. NPM:编程世界的万能胶水

    2023-12-19 07:52:04       70 阅读
  4. lua语法

    lua语法

    2023-12-19 07:52:04      56 阅读
  5. 设计模式详解---模板方法模式

    2023-12-19 07:52:04       44 阅读
  6. 聚类算法之K-均值聚类

    2023-12-19 07:52:04       59 阅读
  7. 深度学习第一课 TensorFlow2.0开发首选API - Keras

    2023-12-19 07:52:04       67 阅读