精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲天堂电影| a视频免费观看| 免费网站成人| 成人视屏免费看| 26uuu日韩精品一区二区| 蜜臀久久99精品久久久久久| 北岛玲精品视频在线观看| 一卡二卡欧美日韩| 日本一区免费在线观看| 国产精品毛片一区视频播| 国产一区日韩一区| 亚洲无限av看| 国产在线观看免费播放| 欧美日韩大片| 依依成人综合视频| 中中文字幕av在线| 午夜欧洲一区| 91精品国产一区二区三区| 天堂…中文在线最新版在线| 99青草视频在线播放视| 成人一级片网址| 国产精品视频xxxx| 久久久精品免费看| 欧美一区二区三区久久精品茉莉花 | 东方伊人免费在线观看| ccyy激情综合| 欧美精品欧美精品系列| 在线观看国产中文字幕| 国产精品45p| 国产区在线观看成人精品 | 亚洲不卡系列| 亚洲国产视频直播| 宅男噜噜99国产精品观看免费| 亚洲乱色熟女一区二区三区| 奇米综合一区二区三区精品视频| 欧美日韩国产成人| 国产黄色大片免费看| 澳门成人av| 欧美日韩日本视频| 波多野结衣综合网| 黄色免费网站在线观看| 91亚洲国产成人精品一区二区三| 91精品视频播放| 黄色av网站免费| 国内黄色精品| 精品国产网站在线观看| 色乱码一区二区三区在线| 蜜桃视频m3u8在线观看| 亚洲女性喷水在线观看一区| 日韩精品久久久毛片一区二区| 五月天婷婷在线观看| 国产乱对白刺激视频不卡| 国产精品福利网站| 成年人视频在线免费看| 欧美国产高清| 久久视频在线直播| 激情高潮到大叫狂喷水| 一道本一区二区三区| 亚洲第一福利视频| 欧美午夜精品一区二区| 国产日韩欧美中文在线| 欧美欧美欧美欧美首页| 亚洲色图.com| 国产精品yjizz| 国产视频在线一区| 深夜成人在线| 一区二区三区在线看| 在线看无码的免费网站| av在线第一页| 国产精品丝袜黑色高跟| 任我爽在线视频精品一| 日本成人一区| 久久久国产精品麻豆| 欧美日韩亚洲综合一区二区三区激情在线| 国产精品永久免费视频| 国产极品一区二区| 高清日韩中文字幕| 欧美精品一区二区三区四区| 亚洲欧美日韩偷拍| 青青草久久爱| 亚洲成人1234| mm131美女视频| 午夜精品久久久| 在线播放av网址| 最新97超碰在线| 日本一区二区三区视频视频| 欧美在线视频一区二区三区| 男人天堂综合| 国产免费成人在线视频| 亚洲欧洲精品在线| 九色porny丨首页在线| 国产精品久久久久一区二区三区共| 色一情一乱一伦一区二区三区丨| 电影av一区| 亚洲欧洲在线观看av| 午夜啪啪福利视频| 国产盗摄在线视频网站| 欧美日韩在线看| 国产原创中文在线观看| 天堂av在线| 欧美喷潮久久久xxxxx| 极品白嫩少妇无套内谢| 韩国女主播一区二区三区| 精品偷拍一区二区三区在线看| 一级黄色片网址| 欧美精品一卡| 国产成人av在线| 国产精品久久久久久久久久久久久久久久久久 | 国产一区二区精品福利地址| 色爱精品视频一区| 中文字幕在线有码| 一区二区福利| 国产在线播放不卡| 久艹视频在线免费观看| 天天操天天爽天天干| 日av在线不卡| 国产精品免费观看高清| 国产精品视频一区二区久久| 中文字幕一区二区三区乱码在线| 给我免费播放片在线观看| 97久久网站| 欧美精品v国产精品v日韩精品 | 国产精品久久久久77777丨| 日韩一区二区三区在线视频| 播金莲一级淫片aaaaaaa| 仙踪林久久久久久久999| 97免费视频在线播放| 亚洲最新av网站| 91在线一区二区三区| 亚洲欧洲精品一区二区三区波多野1战4 | 精品亚洲a∨| 亚洲黄一区二区| 成人性生活毛片| 日本不卡高清视频| 精品一区二区不卡| 曰本三级在线| 欧美色涩在线第一页| 特级西西人体wwwww| 欧美二区不卡| 成人av在线网址| 色综合888| 亚洲国产成人91porn| 国产日韩欧美久久| 综合国产视频| 91超碰中文字幕久久精品| 99久久亚洲精品日本无码| 久久精品欧美一区二区三区麻豆| 女人帮男人橹视频播放| 91精品福利观看| 正在播放亚洲1区| 无码人妻精品一区二区50| 不卡视频一二三| 17c丨国产丨精品视频| 欧美天堂一区二区| 一区二区福利视频| 销魂美女一区二区| 91麻豆国产福利在线观看| 91免费黄视频| 第四色在线一区二区| 自产国语精品视频| 亚洲一区二区久久久| 日本一级一片免费视频| 国产一区二区三区四区五区入口| 天堂一区二区三区| 91亚洲精品| 自拍视频国产精品| 中文字幕在线观看1| 日本一区二区三区免费乱视频| 欧美视频第三页| 亚州国产精品| 国产成人精品久久亚洲高清不卡| 亚洲av激情无码专区在线播放| 亚洲成人福利片| 性囗交免费视频观看| 影音先锋亚洲一区| 国产一区二区三区黄| 成av人片在线观看www| 亚洲精品久久久久久久久久久久久| 亚洲激情视频一区| 91久色porny| 成年人小视频网站| 成人高清电影网站| 国产人妖伪娘一区91| av男人的天堂在线| 日韩一区二区电影| 日韩av无码中文字幕| 26uuu欧美| 中文字幕国产传媒| 66国产精品| 国产伦精品一区二区| 桃色一区二区| 久久精品福利视频| 免费看黄色一级视频| 精品国产福利在线| 呻吟揉丰满对白91乃国产区| 国产一区二区三区不卡在线观看| 久久这里只有精品8| 亚洲激情播播| 成人黄色中文字幕| 九色porny自拍视频在线播放 | 男人天堂综合网| 黑人欧美xxxx| 女人裸体性做爰全过| 国产精品911| 欧美韩国日本在线| 青草国产精品| 国产麻豆一区二区三区在线观看| 成人免费网站视频| 欧美成人精品xxx| 亚欧在线观看视频| 精品视频1区2区| 久久久精品人妻一区二区三区四 | 国内精品久久久久久久97牛牛| 国内视频一区二区| 精品176极品一区| 国模极品一区二区三区| 国产精品久久久久久久龚玥菲 | 亚洲 欧美 日韩 国产综合 在线| 成人三级视频| 精品视频一区二区| 精品国产一区二区三区2021| 国内精品在线一区| 国产高清在线| 日韩电影中文字幕在线观看| 国产喷水福利在线视频| 日韩欧美一区二区三区| 免费中文字幕在线观看| 中文字幕乱码日本亚洲一区二区| 中文字幕人妻一区| 奇米在线7777在线精品| 男女高潮又爽又黄又无遮挡| 女人色偷偷aa久久天堂| 欧美成人综合一区| 超碰成人在线免费| 91久久在线观看| 日韩不卡视频在线观看| 81精品国产乱码久久久久久| 伊人222成人综合网| 日韩在线视频线视频免费网站| 视频二区在线| 欧美丰满少妇xxxbbb| 成年人视频在线免费看| 亚洲精品久久久久久国产精华液| 无码人妻精品一区二区中文| 99久久久无码国产精品| aaaaa黄色片| 久久99热99| 天天干天天操天天做| 丝袜美腿高跟呻吟高潮一区| 久久国产成人精品国产成人亚洲| 亚洲天堂黄色| 国产又粗又长又爽视频| 999精品在线| 在线观看欧美一区| 日本不卡二三区| 色吧亚洲视频| 第九色区aⅴ天堂久久香| 欧美日韩国产综合视频在线| 日韩三区视频| 国产经典一区二区三区| 成人台湾亚洲精品一区二区| 国产在线视频不卡| 日本中文字幕一区二区| 成人精品视频一区二区三区| 神马影院午夜我不卡| 国产一区二区三区四区| 青青草久久网络| 精品国产一区二区三区小蝌蚪| 日韩av高清在线播放| 欧美人与牛zoz0性行为| 色就是色欧美| 国产精品久久久久久久| 精品一区二区成人免费视频| 天天做天天爱综合| 天天做天天爱天天高潮| 久久久久午夜电影| 免费一级淫片aaa片毛片a级| 亚洲激情网站| 国产又大又硬又粗| 日韩av不卡在线观看| 在线看的黄色网址| 国产精一区二区三区| 精品人妻在线视频| 91视频xxxx| 国产在视频线精品视频| 亚洲少妇30p| 国产精品9191| 精品女厕一区二区三区| 区一区二在线观看| 欧美日韩dvd在线观看| 中文字幕+乱码+中文| 欧美日韩高清在线| 人妻妺妺窝人体色www聚色窝| 日韩成人小视频| av在线免费一区| 不卡av电影院| 亚洲优女在线| 国产在线999| 欧美激情极品| 在线免费一区| 亚洲欧洲午夜| 亚洲综合欧美激情| 成人激情av网| 波多野结衣办公室33分钟| 亚洲欧美一区二区三区极速播放 | 国内精品400部情侣激情| 三上悠亚一区二区| 91免费看片网站| 九九热爱视频精品视频| 日本三级中文字幕在线观看| 欧美一级播放| 超碰91在线播放| 久久久亚洲高清| 久久久久亚洲天堂| 欧美日韩免费在线观看| 国产偷拍一区二区| 日韩一区二区三区四区五区六区| 国产香蕉视频在线看| 九九热精品视频国产| 成人国产网站| 国产综合18久久久久久| 在线中文一区| 亚州精品一二三区| 久久天天做天天爱综合色| 日本精品在线免费观看| 精品久久国产一区| 91在线中文字幕| 国产一区国产二区国产三区| 国产精品国产对白熟妇| 久久精品国产精品亚洲精品| 鲁大师私人影院在线观看| 亚洲欧美日韩中文播放| 国产精品成人久久久| 欧美一区午夜视频在线观看| 久蕉依人在线视频| 欧美激情亚洲一区| 日韩激情精品| 欧美 日韩 国产 在线观看| 日本v片在线高清不卡在线观看| 亚洲啪av永久无码精品放毛片| 中文字幕一区三区| 波多野结衣一二区| 精品网站999www| av免费不卡国产观看| av色综合网| 亚洲综合专区| 婷婷激情四射五月天| ww久久中文字幕| 国产精品乱子伦| 日韩精品极品在线观看| 华人av在线| 国内精品一区二区| 1024成人| 国产51自产区| 婷婷久久综合九色综合绿巨人| 黑人操亚洲女人| 久久久久久尹人网香蕉| 国产高清亚洲| youjizz.com在线观看| 国产电影精品久久禁18| 欧洲猛交xxxx乱大交3| 日韩亚洲欧美成人一区| 色婷婷av在线| 国产69精品久久久久9999apgf| 欧美日韩午夜| 亚洲啪av永久无码精品放毛片| 亚洲国产精品一区二区www在线 | 亚洲第一免费网站| hd国产人妖ts另类视频| 国产一区二区在线观看免费播放| 91久久久久| 成人网站免费观看| 精品久久久中文| 国产黄色片在线观看| 国产精品网址在线| 91久久电影| 亚洲911精品成人18网站| 午夜av一区二区三区| 日韩大片b站免费观看直播| 欧洲成人免费aa| 日韩成人精品一区| 亚洲五月激情网| 午夜欧美在线一二页| 午夜在线视频免费| 日本欧美一级片| 日本a级不卡| 无码国产精品久久一区免费| 五月婷婷另类国产| 清纯唯美亚洲色图| 国产免费一区二区三区在线能观看| 希岛爱理一区二区三区| 深田咏美中文字幕| 日本精品视频一区二区三区| 日本精品在线| 亚洲一区二区中文| 蜜桃av一区| 久草综合在线视频| 免费在线成人网| 亚洲欧美成人一区| 国产一区二区三区av电影|