#pic32 #mips #startup #run-time

无std mips-rt-macros

mips-rt 中重导出属性

3 个不稳定版本

0.3.4 2023年7月31日
0.3.0 2022年1月16日
0.2.1 2021年9月25日

9#pic32

Download history 2236/week @ 2024-04-25 2484/week @ 2024-05-02 1096/week @ 2024-05-09 1077/week @ 2024-05-16 1098/week @ 2024-05-23 1276/week @ 2024-05-30 1056/week @ 2024-06-06 1223/week @ 2024-06-13 1752/week @ 2024-06-20 1905/week @ 2024-06-27 1592/week @ 2024-07-04 1358/week @ 2024-07-11 1066/week @ 2024-07-18 1167/week @ 2024-07-25 852/week @ 2024-08-01 682/week @ 2024-08-08

3,926 每月下载量
用于 8 个crate(通过 mips-rt

MIT/Apache

15KB
374

pic32-rs

Rust对PIC32编程的crate,包括PIC32 HAL模块

此仓库包含用Rust编程PIC32MX微控制器的代码。它使用mipsel-unknown-none目标,旨在与MIPS MCU(裸机)目标一起使用,用于生成适用于具有32位宽指令的经典MIPS32r2 ISA的代码。

仓库包含以下内容

  • mips-rt:基于MIPS微控制器的Rust基本运行时和启动文件
  • pic32-hal:PIC32微控制器的HAL crate。目前有MIPS核心定时器、GPIO、中断控制器、SPI、UART、I2C和USB的HAL模块。
  • 示例应用程序

此外,在pic32-pac仓库下还有外围设备访问crate(PAC)。还有一个alloc-pic32仓库来支持动态内存分配。

编译

要设置工具链,可以使用以下命令。

rustup default nightly
rustup component add rust-src
cargo install cargo-binutils
rustup component add llvm-tools-preview

cargo-binutils 包含cargo-objcopy,可以用来生成Intel HEX文件。当使用其他工具生成HEX文件(见下文)或如果您的闪存编程器可以处理ELF文件,则不需要cargo-binutils。

此代码可以使用cargo与nightly工具链编译。

请参阅blinky示例了解如何编译PIC32应用程序。

需要.cargo/config文件来指定链接脚本(例如32MX150F128B_procdefs.ld),指定目标和构建标准库crate。下面是一个示例.cargo/config文件。

[target.mipsel-unknown-none]
rustflags = ["-C", "link-arg=-T32MX150F128B_procdefs.ld"]

[build]
target = "mipsel-unknown-none"

[unstable]
build-std = ["core", "compiler_builtins", "alloc"]

使用上述文件,可以使用cargo进行构建。为了节省代码空间,可能需要进行发布构建。

cargo build --release

创建hex文件

无MMU的PIC32变体在其核心中集成了简单的固定映射转换(FMT)机制,该机制将处理器使用的虚拟地址转换为物理地址,这些地址为编译器所知。然而,PIC32 MCU的闪存控制器在物理地址上操作。

带有虚拟地址的HEX文件

如果您的编程器(例如pic32prog)接受虚拟地址,则可以使用cargo-objcopy

cargo objcopy --release -- -O ihex somefilename.hex

包含物理地址的HEX文件

如果你的编程器(如MPLAB IPE工具)只接受物理地址,则需要创建包含物理地址的HEX文件。创建此类HEX文件的一种方法是用工具xc32-bin2hex,它是XC32编译器工具链的一部分。此工具在写入HEX文件之前将ELF文件中使用的虚拟地址转换为物理地址。

xc32-bin2hex target/mipsel-unknown-none/<your_elf_file>

xc32-bin2hex的替代方法是pic32-bin2hex,它是chipKIT编译器的一部分。

链接细节

为了链接最终的应用程序映像,使用了三个链接脚本文件

  • 一个包含使用设备内存映射的文件memory.x(需要根据闪存大小和SRAM大小进行调整)。
  • 包含在外围访问存储库中的文件device.x,其中提供了中断向量的符号名称。
  • 主链接脚本link.x,它是mips-rt存储库的一部分。此主链接脚本包含memory.xdevice.x的内容。

lib.rs:

mips-rt的内部实现细节。

不要直接使用此存储库。几乎与cortex_m_rt_macros相同。

依赖关系

~255–700KB
~17K SLoC