注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
brack的个人空间 https://home.eeworld.com.cn/space-uid-1389687.html [收藏] [复制] [分享] [RSS]
日志

嵌入式 Rust 修炼营 任务3-嵌入式单片机程序编译下载

已有 67 次阅读2025-4-6 16:17 |个人分类:经验记录

社区组织 嵌入式Rust修炼营:动手写串口烧录工具和MCU例程,Rust达人Hunter直播带你入门Rust  以来,根据个人的学习,完成了

任务一:【新提醒】[嵌入式Rust修炼营] 初级 任务1:冒泡排序法实现排序 - 嵌入式Rust活动专区 - 电子工程世界-论坛

任务二:【新提醒】[嵌入式Rust修炼营] 初级 任务2:读写Cargo.toml 文件 - 嵌入式Rust活动专区 - 电子工程世界-论坛

今天来学习任务三:烧录单片机

第一步:git clone 大咖的源码

javascript:;

第二步:编译example hello_world

 

表示编译成功,但找不到设备,原因在于我的ubuntu没有安装stlink驱动,找不到设备,暂时先不管,暂时先用pyisp烧录

git clone pyisp的源码

git clone javascript:;

cd pyisp

编译 cargo run

 

 

第三步,把第一步ubuntu下编译好的hello_wold 转化为bin档,为了方便,我自己写了一个elf 转化为bin的工程,代码如下

 

/*
Cargo.toml 内容


[dependencies]
goblin = "0.6"    # ELF 文件解析库
anyhow = "1.0"    # 错误处理库
*/

//source code 
use std::path::Path;
use std::fs;
use anyhow::{Context, Result};
use goblin::elf::Elf;

fn main() -> Result<()>{
    let elf_file = "hello_world";  // 输入文件名
    let bin_file = "hello_world.bin";  // 输出文件名
    
    // 检查输入文件是否存在
    if !Path::new(elf_file).exists() {
        return Err(anyhow::anyhow!("输入文件 {} 不存在", elf_file));
    }

    // 读取 ELF 文件内容
    let elf_data = fs::read(elf_file)
        .context(format!("无法读取文件 {}", elf_file))?;
    
    // 解析 ELF 文件
    let elf = Elf::parse(&elf_data)
        .context("解析 ELF 文件失败")?;
    
    // 收集所有可加载段(LOAD segments)
    let mut binary_data = Vec::new();
    for segment in elf.program_headers {
        if segment.p_type == goblin::elf::program_header::PT_LOAD {
            let start = segment.p_offset as usize;
            let end = start + segment.p_filesz as usize;
            binary_data.extend_from_slice(&elf_data[start..end]);
        }
    }
    
    // 写入 BIN 文件
    fs::write(bin_file, &binary_data)
        .context(format!("无法写入文件 {}", bin_file))?;
    
    println!("转换成功: {} → {}", elf_file, bin_file);
   Ok(())
}

cargo run 编译后,把hello_world 放到工程目录下,

 

 

 

到此为止,烧录基本完成。

总结一下:

问题点在于开发环境的大家,AP环境和嵌入式环境可以共存,但注意切换,由于是开源,可能使用的软件的版本略有不同的,应当区别对待,

后面继续深入学习

加油!!    

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章