精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

使用 Rust 進行嵌入式開發

開發 后端
Rust 的高性能、高可靠性和高生產力使它適合于嵌入式系統。在過去的幾年里,Rust 在程序員中獲得了熱情的追捧。技術潮流來來去去,所以很難將僅僅因為某項新技術而產生的興奮與對某項技術的優點的興奮區分開來,但我認為 Rust 是一種真正設計良好的語言。

[[431350]]

Rust 的高性能、高可靠性和高生產力使它適合于嵌入式系統。

在過去的幾年里,Rust 在程序員中獲得了熱情的追捧。技術潮流來來去去,所以很難將僅僅因為某項新技術而產生的興奮與對某項技術的優點的興奮區分開來,但我認為 Rust 是一種真正設計良好的語言。它的目標是幫助開發者建立可靠和高效的軟件,而且它從一開始就是為這個目的設計的。你可能聽過一些 Rust 的關鍵特性,在這篇文章中,我會證明這些特性正是 Rust 也恰好適合嵌入式系統的原因。比如:

  • 高性能:它速度快,內存利用率高
  • 可靠性:在編譯過程中可以消除內存錯誤
  • 生產力:很棒的文檔,友好的編譯器,有用的錯誤信息,以及一流的工具化。它有一個集成的包管理器和構建工具,智能的多編輯器支持自動補完和類型檢查、自動格式化等等。

為什么使用 Rust 進行嵌入式開發?

Rust 的設計是為了保證安全和高性能。嵌入式軟件會出現的問題主要是內存的問題。從某種程度上說,Rust 是一種面向編譯器的語言,所以你可以確保在編譯時安全使用內存。以下是使用 Rust 在嵌入式設備上開發的一些好處:

  • 強大的靜態分析
  • 靈活的內存
  • 無畏的并發性
  • 互操作性
  • 可移植性
  • 社區驅動

在這篇文章中,我使用開源的 RT-Thread 操作系統 來演示如何使用 Rust 進行嵌入式開發。

如何在 C 語言中調用 Rust

在 C 代碼中調用 Rust 代碼時,你必須將 Rust 源代碼打包成靜態庫文件。當 C 代碼編譯時,將其鏈接進去。

用 Rust 創建一個靜態庫

在這個過程中,有兩個步驟:

1、使用 cargo init --lib rust_to_c 在 Clion 中建立一個 lib 庫。在 lib.rs 中加入以下代碼。下面的函數計算兩個類型為 i32 的值的總和并返回結果:

  1. #![no_std]
  2. use core::panic::PanicInfo;
  3.  
  4. #[no_mangle]
  5. pub extern "C" fn sum(a: i32, b: i32) -> i32 {
  6. a + b
  7. }
  8.  
  9. #[panic_handler]
  10. fn panic(_info:&PanicInfo) -> !{
  11. loop{}
  12. }

2、在你的 Cargo.toml 文件中添加以下代碼,以告訴 Rustc 要生成什么類型的庫:

  1. [lib]
  2. name = "sum"
  3. crate-type = ["staticlib"]
  4. path = "src/lib.rs"

交叉編譯

你可以針對你的目標平臺進行交叉編譯。假設你的嵌入式系統是基于 Arm 的,步驟很簡單:

  1. $ rustup target add armv7a-none-eabi

生成靜態庫文件:

  1. $ cargo build --target=armv7a-none-eabi --release --verbose
  2. Fresh rust_to_c v0.1.0
  3. Finished release [optimized] target(s) in 0.01s

生成頭文件

你也需要頭文件:

1、安裝 cbindgen。cbindgen 工具會從 Rust 庫中生成一個 C 或 C++11 的頭文件:

  1. $ cargo install --force cbindgen

2、在你的項目文件夾下創建一個新的 cbindgen.toml 文件。

3、生成一個頭文件:

  1. $ cbindgen --config cbindgen.toml --crate rust_to_c --output sum.h

調用 Rust 庫文件

現在你可以對你的 Rust 庫進行調用了。

1、把生成的 sum.h 和 sum.a 文件放到 rt-thread/bsp/qemu-vexpress-a9/applications 目錄下。

2、修改 SConscript 文件并添加一個靜態庫:

  1.    from building import *
  2.    
  3.    cwd     = GetCurrentDir()
  4.    src     = Glob('*.c') + Glob('*.cpp')
  5.    CPPPATH = [cwd]
  6.    
  7.    LIBS = ["libsum.a"]
  8.    LIBPATH = [GetCurrentDir()]
  9.    
  10.    group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH, LIBS = LIBS, LIBPATH = LIBPATH)
  11.    
  12.    Return('group')

3、在主函數中調用 sum 函數,得到返回值,并 printf 該值:

  1. #include <stdint.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <rtthread.h>
  5. #include "sum.h"
  6. int main(void)
  7. {
  8. int32_t tmp;
  9. tmp = sum(1, 2);
  10. printf("call rust sum(1, 2) = %d\n", tmp);
  11. return 0;
  12. }

4、在 RT-Thread Env 環境中,使用 scons 來編譯項目并運行:

  1. $ scons -j6
  2. scons: Reading SConscript files ...
  3. scons: done reading SConscript files.
  4. scons: Building targets ...
  5. [...]
  6. scons: done building targets.
  7.  
  8. $ qemu.sh
  9. \ | /
  10. - RT - Thread Operating System
  11. / | \ 4.0.4 build Jul 28 2021
  12. 2006 - 2021 Copyright by rt-thread team
  13. lwIP-2.1.2 initialized!
  14. [...]
  15. call rust sum(1, 2) = 3

加、減、乘、除

你可以在 Rust 中實現一些復雜的數學運算。在 lib.rs 文件中,使用 Rust 語言來實現加、減、乘、除:

  1. #![no_std]
  2. use core::panic::PanicInfo;
  3.  
  4. #[no_mangle]
  5. pub extern "C" fn add(a: i32, b: i32) -> i32 {
  6. a + b
  7. }
  8.  
  9. #[no_mangle]
  10. pub extern "C" fn subtract(a: i32, b: i32) -> i32 {
  11. a - b
  12. }
  13.  
  14. #[no_mangle]
  15. pub extern "C" fn multiply(a: i32, b: i32) -> i32 {
  16. a * b
  17. }
  18.  
  19. #[no_mangle]
  20. pub extern "C" fn divide(a: i32, b: i32) -> i32 {
  21. a / b
  22. }
  23.  
  24. #[panic_handler]
  25. fn panic(_info:&PanicInfo) -> !{
  26. loop{}
  27. }

構建你的庫文件和頭文件,并把它們放在應用程序目錄中。使用 scons 來編譯。如果在鏈接過程中出現錯誤,請在官方 Github 頁面 中找到解決方案。

修改 rtconfig.py 文件,并添加鏈接參數 --allow-multiple-definition

  1. DEVICE = ' -march=armv7-a -marm -msoft-float'
  2. CFLAGS = DEVICE + ' -Wall'
  3. AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -D__ASSEMBLY__ -I.'
  4. LINK_SCRIPT = 'link.lds'
  5. LFLAGS = DEVICE + ' -nostartfiles -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,system_vectors,--allow-multiple-definition'+\
  6. ' -T %s' % LINK_SCRIPT
  7. CPATH = ''
  8. LPATH = ''

編譯并運行 QEMU 來看看你的工作。

在 Rust 中調用 C 語言

Rust 可以在 C 代碼中調用,但是如何在你的 Rust 代碼中調用 C 呢?下面是一個在 Rust 代碼中調用 rt_kprintf C 函數的例子。

首先,修改 lib.rs 文件:

  1. // The imported rt-thread functions list
  2. extern "C" {
  3. pub fn rt_kprintf(format: *const u8, ...);
  4. }
  5. #[no_mangle]
  6. pub extern "C" fn add(a: i32, b: i32) -> i32 {
  7. unsafe {
  8. rt_kprintf(b"this is from rust\n" as *const u8);
  9. }
  10. a + b
  11. }

接下來,生成庫文件:

  1. $ cargo build --target=armv7a-none-eabi --release --verbose
  2. Compiling rust_to_c v0.1.0
  3. Running `rustc --crate-name sum --edition=2018 src/lib.rs --error-format=json --json=diagnostic-rendered-ansi --crate-type staticlib --emit=dep-info,link -C opt-level=3 -C embed-bitcode=no -C metadata=a
  4. Finished release [optimized] target(s) in 0.11s

而現在,要運行代碼,將 Rust 生成的庫文件復制到應用程序目錄中,然后重新構建:

  1. $ scons -j6 scons: Reading SConscript files ... scons: done reading SConscript files. [...]
  2. scons: Building targets ... scons: done building targets.

再次運行 QEMU,可以在你的嵌入式鏡像中看到結果。

你可以擁有這一切

在你的嵌入式開發中使用 Rust,你可以獲得 Rust 的所有功能,而不需要犧牲靈活性或穩定性。今天就在你的嵌入式系統上試試 Rust 吧。關于嵌入式 Rust 的過程(以及 RT-Thread 本身)的更多信息,請查看 RT-Thread 項目的 YouTube 頻道。請記住,嵌入式也可以是開放的。 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2022-02-14 23:17:16

Gitlab嵌入式工具

2011-01-14 13:13:23

嵌入式Linux開發

2009-07-17 16:06:59

ARM嵌入式開發

2010-01-13 09:15:35

嵌入式

2011-07-05 15:42:02

QT 嵌入式 Embedded

2009-12-23 10:33:30

Silverlight

2011-01-06 15:11:09

嵌入式linux

2011-06-13 14:00:55

Qt Designer linux

2020-03-23 10:15:10

Google 開源技術

2010-01-06 09:53:08

嵌入式

2020-06-15 07:00:00

Linux嵌入式系統

2021-12-24 17:01:29

Linux工具系統

2010-01-13 09:51:21

微軟Linux嵌入式

2021-10-28 19:23:27

界面嵌入式 UI

2022-03-11 15:44:11

嵌入式開發技巧技術

2017-08-14 15:01:19

2011-06-09 10:28:54

QT 嵌入式

2011-06-21 11:30:31

嵌入式 Qt

2010-04-21 13:22:20

Windows CE

2011-04-22 10:02:02

Ubuntu嵌入式開發環境
點贊
收藏

51CTO技術棧公眾號

天海翼精品一区二区三区| 精品国产区一区二区三区在线观看 | 亚洲天堂日韩电影| 最新国产精品久久| 欧美亚一区二区三区| 黄网站免费在线播放| 国产成人黄色| 香蕉成人啪国产精品视频综合网 | 成人久久久精品乱码一区二区三区| 亚洲美女中文字幕| 日本香蕉视频在线观看| 亚洲一区二区视频在线播放| 蜜乳av综合| 欧美日韩人人澡狠狠躁视频| 操一操视频一区| 黄色一级片中国| 日日狠狠久久| 国产精品视频一区二区三区不卡| 欧美一级片在线播放| 中文字幕人妻一区二区三区| 黄色小说在线播放| 国产jizzjizz一区二区| 久久成人免费视频| 中文字幕在线视频精品| 欧美videos极品另类| 蜜桃视频在线观看一区| 在线观看日韩av| 婷婷激情四射五月天| 成人性生交大片免费看午夜 | 网站一区二区三区| 9765激情中文在线| 成人一区在线观看| 国产欧美va欧美va香蕉在| 日本猛少妇色xxxxx免费网站| 我爱我色成人网| 欧美国产精品一区二区| 精品亚洲一区二区三区四区五区高| 久久综合亚洲色hezyo国产| silk一区二区三区精品视频| 亚洲不卡在线观看| 亚洲国产精品女人| 高清毛片aaaaaaaaa片| 日韩亚洲国产欧美| 一区二区亚洲欧洲国产日韩| 韩国三级hd两男一女| 色是在线视频| 国产精品久久久久久久午夜片| 国产精品色婷婷视频| 国产熟女一区二区| 美国十次综合久久| 午夜激情一区二区三区| 狠狠干视频网站| 神马午夜在线观看| 秋霞电影网一区二区| 久久av中文字幕| 男人的午夜天堂| 精品三级av在线导航| 91福利区一区二区三区| 91成人在线视频观看| 香蕉视频在线播放| 国产91丝袜在线播放九色| 91香蕉亚洲精品| 日韩欧美三级视频| 国产韩日影视精品| 亚洲福利在线播放| 男操女免费网站| 91九色综合| 亚洲成av人**亚洲成av**| 秋霞无码一区二区| 免费在线观看av| 综合久久一区二区三区| 国产日韩在线一区二区三区| 国产在线观看第一页| 国产精品啊啊啊| 伊是香蕉大人久久| 女性裸体视频网站| 亚洲美女久久| 精品国产一二三区| 孩娇小videos精品| 老色鬼在线视频| 欧美性生活大片免费观看网址| 性做爰过程免费播放| av网站在线免费看推荐| 久久久午夜精品理论片中文字幕| 91综合免费在线| 最近中文字幕免费在线观看| 六月丁香婷婷久久| 欧美在线视频网站| 久久久久国产精品夜夜夜夜夜| 在线精品一区二区| 久久99国产综合精品女同| 美国美女黄色片| 午夜国产欧美理论在线播放| 这里只有视频精品| 国产精品无码午夜福利| 日韩免费av| 亚洲人成在线免费观看| 好吊一区二区三区视频| 亚洲精品黑牛一区二区三区| 欧美精品一二三| 免费看污污网站| 91精品国产自产在线丝袜啪| 亚洲精品一区二区三区婷婷月 | 国偷自拍第113页| 中文字幕午夜精品一区二区三区 | 怡红院在线播放| 欧美视频一区二区三区…| 三级a三级三级三级a十八发禁止| 这里视频有精品| 国产亚洲精品一区二555| 欧美黄色一区二区三区| 久久中文字幕av| 亚洲性生活视频| 国产亚洲精品码| 男人的j进女人的j一区| 国产视频在线观看一区| 米奇777四色精品人人爽| 色综合天天在线| 狠狠97人人婷婷五月| 成人在线黄色电影| 五月综合激情网| 国产精品久久久久久久av福利| 日韩aaa久久蜜桃av| 亚洲精品永久免费精品| 麻豆疯狂做受xxxx高潮视频| 日韩av一级电影| 精品不卡在线| 久久国产精品黑丝| 偷拍日韩校园综合在线| 男人日女人下面视频| 精品视频一区二区三区在线观看| 国产亚洲美女精品久久久| 国产九色在线播放九色| 成人激情午夜影院| 欧美污视频久久久| 中文字幕在线播放| 136国产福利精品导航| 日韩av一二三四| 国产香蕉久久| 欧美大片在线观看一区二区| 日韩精品人妻中文字幕有码| 亚洲欧美在线专区| 成人黄色在线免费| 色欲av伊人久久大香线蕉影院| 日韩久久一区二区| 黄页网站在线观看视频| 欧美一区国产| 亚洲九九九在线观看| 中日韩精品视频在线观看| 国产91丝袜在线播放0| 免费观看亚洲视频| 中文字幕av一区二区三区四区| 久久亚洲精品中文字幕冲田杏梨| 一级黄色录像大片| 成人视屏免费看| 精品国偷自产一区二区三区| 校园春色亚洲色图| 亚洲人成绝费网站色www| 99精品在线播放| 国产九色精品成人porny| 精品久久一区二区三区蜜桃| 大桥未久在线视频| 亚洲精品黄网在线观看| 久艹在线观看视频| 韩国视频一区二区| 久久香蕉综合色| 成人日日夜夜| 色8久久人人97超碰香蕉987| 尤物视频最新网址| 亚洲国产影院| 成人性生交大片免费看视频直播 | 日韩电影免费在线观看| 国产有码一区二区| 人妻少妇一区二区三区| 国产精品视频第一区| 国产福利在线免费| 中文精品电影| 精品久久久三级| 国产成人午夜性a一级毛片| 久久伊人免费视频| 无套内谢的新婚少妇国语播放| 中文字幕佐山爱一区二区免费| 日本少妇xxx| 亚洲啊v在线观看| 国产精品久久久久久av| 天堂在线中文网| 91国偷自产一区二区开放时间 | 高清视频一区二区三区| 国产视频网址在线| 天天影视网天天综合色在线播放 | 亚洲AV无码乱码国产精品牛牛 | 欧美一级免费大片| 超碰人人干人人| 国产99一区视频免费| 日本久久久精品视频| aaa国产精品视频| 午夜精品一区二区三区在线视 | 美女18一级毛片一品久道久久综合| 欧美疯狂做受xxxx富婆| 久久一区二区三| 久久久99精品久久| 少妇熟女视频一区二区三区| 久久久久蜜桃| 久久婷婷开心| 夜鲁夜鲁夜鲁视频在线播放| 日韩精品视频三区| 午夜精品久久久久久久久久久久久蜜桃| 久久精品男人天堂av| 午夜精品久久久内射近拍高清| 欧美日韩久久精品| 国产mv免费观看入口亚洲| 欧美偷拍视频| 亚洲乱码国产乱码精品精98午夜 | 99久久99久久免费精品蜜臀| 国产成人永久免费视频| 精品国产一区二区三区小蝌蚪| www久久99| 色噜噜成人av在线| 国产精品久久久久久av福利软件| free性m.freesex欧美| 久久综合久久八八| 91福利在线视频| 亚洲女成人图区| 欧美自拍偷拍一区二区| 日韩一区二区在线看| 在线播放精品视频| 91黄色免费观看| 久久久蜜桃一区二区| 亚洲国产成人在线| 精品少妇一区二区三区免费观| 粉嫩高潮美女一区二区三区| 天天影视色综合| 欧美午夜视频| 蜜桃精品久久久久久久免费影院| 亚洲日本va| 91九色对白| 无码小电影在线观看网站免费 | 亚洲黄色一区二区三区| 四虎影视精品永久在线观看| 国产成人精品在线播放| 动漫一区在线| 大胆人体色综合| 91小视频xxxx网站在线| 久久久国产视频91| 天天操天天操天天干| 日韩精品一区二区三区swag| 精品国产乱码久久久久久蜜臀网站| 午夜久久久久久电影| 精品无码人妻一区二区三区品 | 伊人久久五月天| av二区在线| 视频在线观看一区二区| 精品久久无码中文字幕| 91精品国产麻豆国产自产在线 | 欧美区在线观看| 日本三级欧美三级| 国产精品嫩草影院com| 国产欧美小视频| 成人av先锋影音| 无码任你躁久久久久久老妇| 不卡av在线网| 亚洲做受高潮无遮挡| 久久久久久久综合日本| 亚洲一区二区三区日韩| 国产ts人妖一区二区| 视频免费在线观看| 91色视频在线| 精品国产午夜福利在线观看| 麻豆成人在线| 99热久久这里只有精品| 亚洲国产免费| 国产视频在线视频| 一道本一区二区| 成人在线激情网| 国模娜娜一区二区三区| 蜜臀av粉嫩av懂色av| 久久夜色精品国产欧美乱极品| 国偷自产av一区二区三区麻豆| 风间由美性色一区二区三区| 真人bbbbbbbbb毛片| 欧美国产激情二区三区 | 欧美成人直播| 999一区二区三区| 久久久久久久高潮| 亚洲欧美天堂在线| 91视视频在线直接观看在线看网页在线看 | 黄页免费欧美| 国产高清一区视频| 国产亚洲一区| 成人毛片100部免费看| 亚洲在线日韩| 欧美激情亚洲天堂| 另类av一区二区| 成人免费黄色av| 久久日一线二线三线suv| 91久久久久久久久久久久久久| 亚洲高清不卡在线| 精品爆乳一区二区三区无码av| 欧美日韩在线影院| hs视频在线观看| 欧美精品少妇一区二区三区| 亚洲精品一区二区三区区别| 亚洲欧美在线一区二区| 成人在线观看亚洲| 国产精品video| 国产成人精品亚洲线观看| 99久久无色码| 成人在线视频免费观看| 亚洲精品国产精品国自产| 欧美三级午夜理伦三级中文幕| 亚洲综合在线网站| 国产情侣久久| 日本免费不卡一区二区| 国产一区久久久| 亚洲性图第一页| 国产日本一区二区| av网站免费在线看| 性做久久久久久免费观看欧美| 中文字字幕在线中文乱码| 国产乡下妇女做爰毛片| 久草免费在线视频| 成人信息集中地欧美| 一呦二呦三呦国产精品| 日韩精品一区二区在线视频| 美女视频黄频大全不卡视频在线播放| 亚洲欧美日韩偷拍| 亚洲欧美福利一区二区| 中文字幕黄色av| 国产午夜一区二区| 在线观看特色大片免费视频| 99精品99久久久久久宅男| 97在线精品| 91人人澡人人爽人人精品| 国产午夜久久久久| 中文字幕精品无码一区二区| 国产精品色婷婷| 免费看毛片网站| 日韩成人免费视频| 国产不卡人人| 国产一区二区不卡视频在线观看| 欧美黄色免费| 日本女人性视频| 一区二区三区在线观看欧美| 日本一区二区三区免费视频| 日韩欧美在线网站| 中文字幕在线观看播放| 欧美三级欧美成人高清www| 99国产精品一区二区三区| 欧美一级二级三级蜜桃| 麻豆传媒在线免费| 91热福利电影| 欧美日本不卡高清| 人妻 丝袜美腿 中文字幕| 久久人人97超碰com| 国产视频91在线| 日韩电视剧在线观看免费网站 | 久久久精品一区二区| a一区二区三区亚洲| 黄色99视频| 91精品国产91久久久久久久久 | 麻豆精品视频在线观看免费| 国产精品一区二区入口九绯色| 欧美特黄级在线| 久久久久久久久亚洲精品| 亚洲视频综合网| 春暖花开亚洲一区二区三区| 日本高清不卡三区| 日韩三级免费看| 亚洲白拍色综合图区| 国产美女高潮在线观看| 明星裸体视频一区二区| 免费一级欧美片在线观看| 性欧美疯狂猛交69hd| 欧美日韩精品在线观看| 青青青草原在线| 国产精品老女人视频| 综合av在线| 中文字幕av观看| 欧美片网站yy| 嗯~啊~轻一点视频日本在线观看| 欧美极品色图| 亚洲黄网站黄| 日本激情视频在线| 国产精品九色蝌蚪自拍| 国产免费美女视频| 欧美成人乱码一区二区三区| 成人性爱视频在线观看| 丰满少妇一级片| 久久久久久久久久久免费| 88xx成人永久免费观看| 国产乱码精品一区二区三区日韩精品| 日韩毛片视频| 制服丝袜av在线| 欧美午夜寂寞影院| 国产精品黄页免费高清在线观看| 日韩在线免费| 黄色网zhan| 99久久777色| 亚洲字幕av一区二区三区四区| 欧美国产视频一区二区|