查看: 1796|回复: 0

【NXP OKdo E1双核Cortex M33开发板 】Rust点灯

[复制链接]

该用户从未签到

发表于 2020-12-27 13:32:26 | 显示全部楼层 |阅读模式
分享到:
本帖最后由 文波_苏州 于 2020-12-27 16:51 编辑

这周暂时告别USB音频,看看LPC55S69和OKdo E1的其他玩法。

做嵌入式开发,最有意思的部分之一是程序设计语言。程序设计语言不仅是开发者和处理器沟通的桥梁,更是连接计算机科学家,系统架构者,工具链设计者,芯片设计者,底层开发者,上层软件开发者的纽带,它串起了生态系统。正如谈科学计算必谈 Fortran, 谈机器学习必谈Python,  今天谈起嵌入式开发必谈C/C++,但将来也可能会有新的语言取而代之,成为嵌入式的主流开发语言。比如来自Mozilla的Rust。作为一门关注安全,性能和设计开发者人体工学的现代系统编程语言,Rust语言近年来人气越来越高。这周末在深圳召开的Rust China Conf https://2020conf.rustcc.cn和在北京召开的第八届开源操作系统年度技术会议OS2ATC2020上,都有多个Rust在嵌入式和IoT应用的分享。

我们在github上用Rust和LPC55搜索一下, 发现已经有了https://github.com/nickray/lpc55-hal。这个lpc55-hal项目主要以官方开发板为目标开发,但由于OKdo E1和官方开发板的核心部分高度一致,我们可以期待它中间层代码和应用例子不需太多改动就可以在OKdo E1上跑起来。

首先按照官方文档安装Rust环境,一条命令:
  1. curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
复制代码
大约需要半小时左右安装完成。安装前会先提示,随时可以用一条命令卸载,  这个厚道。终端中的信息如下:
  1. these changes will be reverted.

  2. Current installation options:


  3.    default host triple: x86_64-apple-darwin
  4.      default toolchain: stable (default)
  5.                profile: default
  6.   modify PATH variable: yes

  7. 1) Proceed with installation (default)
  8. 2) Customize installation
  9. 3) Cancel installation
  10. >

  11. info: profile set to 'default'
  12. info: default host triple is x86_64-apple-darwin
  13. info: syncing channel updates for 'stable-x86_64-apple-darwin'
  14. 619.5 KiB / 619.5 KiB (100 %) 250.9 KiB/s in  3s ETA:  0s
  15. info: latest update on 2020-11-19, rust version 1.48.0 (7eac88abb 2020-11-16)
  16. info: downloading component 'cargo'
  17.   4.0 MiB /   4.0 MiB (100 %) 230.4 KiB/s in 19s ETA:  0s
  18. info: downloading component 'clippy'
  19.   1.7 MiB /   1.7 MiB (100 %) 170.8 KiB/s in 10s ETA:  0s
  20. info: downloading component 'rust-docs'
  21. 13.3 MiB /  13.3 MiB (100 %)  51.2 KiB/s in  4m 12s ETA:  0s   
  22. info: downloading component 'rust-std'
  23. 20.4 MiB /  20.4 MiB (100 %)  43.0 KiB/s in  6m 58s ETA:  0s   
  24. info: downloading component 'rustc'
  25. 49.9 MiB /  49.9 MiB (100 %) 137.6 KiB/s in 11m 46s ETA:  0s   
  26. info: downloading component 'rustfmt'
  27.   2.2 MiB /   2.2 MiB (100 %)  76.8 KiB/s in 27s ETA:  0s
  28. info: installing component 'cargo'
  29. info: using up to 500.0 MiB of RAM to unpack components
  30. info: installing component 'clippy'
  31. info: installing component 'rust-docs'
  32. 13.3 MiB /  13.3 MiB (100 %)   2.6 MiB/s in  5s ETA:  0s
  33. info: installing component 'rust-std'
  34. 20.4 MiB /  20.4 MiB (100 %)   7.1 MiB/s in  3s ETA:  0s
  35. info: installing component 'rustc'
  36. 49.9 MiB /  49.9 MiB (100 %)   7.3 MiB/s in  6s ETA:  0s
  37. info: installing component 'rustfmt'
  38. info: default toolchain set to 'stable-x86_64-apple-darwin'

  39.   stable-x86_64-apple-darwin installed - rustc 1.48.0 (7eac88abb 2020-11-16)


  40. Rust is installed now. Great!

  41. To get started you need Cargo's bin directory ($HOME/.cargo/bin) in your PATH
  42. environment variable. Next time you log in this will be done
  43. automatically.

  44. To configure your current shell, run:
  45. source $HOME/.cargo/env
复制代码

把代码拉下来:

Screen Shot 2020-12-26 at 11.54.53 PM.png

安装对LPC55S69所用ARM核的目标支持:

Screen Shot 2020-12-27 at 12.01.47 AM.png

使用“cargo check", 安装项目所用依赖,这一步会花些时间, >半小时:
Screen Shot 2020-12-27 at 12.04.37 AM.png

编译一个点灯的小例子。有许多依赖,但目前我们并不深入,不到10分钟就完成了:
  1. lpc55-hal $ls
  2. CHANGELOG.md                LICENSE-APACHE                README.md                dev-requirements.txt        memory.x                scripts
  3. Cargo.lock                LICENSE-MIT                build.rs                examples                netlify.toml                src
  4. Cargo.toml                Makefile                darkness.gdb                jlink.gdb                rustfmt.toml                target
  5. lpc55-hal $vi Makefile
  6. lpc55-hal $cargo build --example led_minimalist
  7.   Downloaded hashbrown v0.9.1
  8.   Downloaded sha2 v0.9.2
  9.   Downloaded cpuid-bool v0.1.2
  10.   Downloaded indexmap v1.6.1
  11.   Downloaded autocfg v1.0.1
  12.   Downloaded cfg-if v1.0.0
  13.   Downloaded sha-1 v0.9.2
  14.   Downloaded opaque-debug v0.3.0
  15.   Downloaded aes-soft v0.4.0
  16.   Downloaded panic-semihosting v0.5.6
  17.   Downloaded heapless v0.5.6
  18.   Downloaded rtic-syntax v0.4.0
  19.   Downloaded opaque-debug v0.2.3
  20.   Downloaded hash32 v0.1.1
  21.   Downloaded panic-halt v0.2.0
  22.   Downloaded byteorder v1.3.4
  23.   Downloaded embedded-graphics v0.6.2
  24.   Downloaded rtic-core v0.3.1
  25.   Downloaded cortex-m-rtic-macros v0.5.2
  26.   Downloaded block-cipher v0.7.1
  27.   Downloaded cortex-m-rtic v0.5.5
  28.   Downloaded ssd1306 v0.3.1
  29.   Downloaded 22 crates (2.6 MB) in 19.96s (largest was `ssd1306` at 1.9 MB)
  30.    Compiling stable_deref_trait v1.2.0
  31.    Compiling byteorder v1.3.4
  32.    Compiling vcell v0.1.2
  33.    Compiling bitfield v0.13.2
  34.    Compiling autocfg v1.0.1
  35.    Compiling nb v1.0.0
  36.    Compiling void v1.0.2
  37.    Compiling r0 v0.2.2
  38.    Compiling hashbrown v0.9.1
  39.    Compiling heapless v0.5.6
  40.    Compiling opaque-debug v0.3.0
  41.    Compiling ssd1306 v0.3.1
  42.    Compiling usb-device v0.2.7
  43.    Compiling cfg-if v1.0.0
  44.    Compiling bare-metal v1.0.0
  45.    Compiling opaque-debug v0.2.3
  46.    Compiling rtic-core v0.3.1
  47.    Compiling panic-halt v0.2.0
  48.    Compiling cortex-m-rtic v0.5.5
  49.    Compiling volatile-register v0.2.0
  50.    Compiling nb v0.1.3
  51.    Compiling indexmap v1.6.1
  52.    Compiling typenum v1.12.0
  53.    Compiling embedded-hal v0.2.4
  54.    Compiling hash32 v0.1.1
  55.    Compiling embedded-graphics v0.6.2
  56.    Compiling usbd-serial v0.1.1
  57.    Compiling generic-array v0.14.4
  58.    Compiling generic-array v0.12.3
  59.    Compiling generic-array v0.13.2
  60.    Compiling digest v0.9.0
  61.    Compiling block-buffer v0.9.0
  62.    Compiling block-cipher v0.7.1
  63.    Compiling block-cipher v0.8.0
  64.    Compiling as-slice v0.1.4
  65.    Compiling bare-metal v0.2.5
  66.    Compiling sha2 v0.9.2
  67.    Compiling sha-1 v0.9.2
  68.    Compiling aes-soft v0.4.0
  69.    Compiling rtic-syntax v0.4.0
  70.    Compiling cortex-m-rt v0.6.13
  71.    Compiling aligned v0.3.4
  72.    Compiling cortex-m v0.6.4
  73.    Compiling cortex-m-semihosting v0.3.7
  74.    Compiling lpc55-pac v0.1.0
  75.    Compiling panic-semihosting v0.5.6
  76.    Compiling cortex-m-rtic-macros v0.5.2
  77.    Compiling lpc55-hal v0.0.3 (/Users/ywb/lpc55_rust/lpc55-hal)
  78.     Finished dev [unoptimized + debuginfo] target(s) in 2m 43s
  79. lpc55-hal $
复制代码

把这个小例子略作修改。在OKdo E1中, pio1_6中是连到三色LED的蓝色灯泡的,我们把它改成blue:

Screen Shot 2020-12-27 at 12.22.00 AM.png

这次编译很快,我猜依赖不用重新编译了:
Screen Shot 2020-12-27 at 12.30.21 AM.png

我们看到相应文件夹下出现了elf 文件,用pyocd把它烧写到OKdo E1中:
Screen Shot 2020-12-27 at 12.39.25 AM.png

  1. (pyocd) pyocd $pyocd-flashtool ~/lpc55_rust/lpc55-hal/target/thumbv8m.main-none-eabi/debug/examples/okdo_blinky elf --target lpc55s69
复制代码

蓝灯开始闪烁,成功了。

这样我们就搭建好了Rust的环境,可以进一步在OKdo E1上学习把玩Rust了。


回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条

手机版|小黑屋|与非网

GMT+8, 2024-11-19 14:33 , Processed in 0.114633 second(s), 16 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.