3 个不稳定版本
0.3.4 | 2023年7月31日 |
---|---|
0.3.0 | 2022年1月16日 |
0.2.1 | 2021年9月25日 |
9 在 #pic32 中
3,926 每月下载量
用于 8 个crate(通过 mips-rt)
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.x
和device.x
的内容。
lib.rs
:
mips-rt
的内部实现细节。
不要直接使用此存储库。几乎与cortex_m_rt_macros
相同。
依赖关系
~255–700KB
~17K SLoC