女人荫蒂被添全过程13种图片,亚洲+欧美+在线,欧洲精品无码一区二区三区 ,在厨房拨开内裤进入毛片

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

為什么要用Rust進(jìn)行嵌入式開發(fā)

strongerHuang ? 來源:RTThread ? 作者:liukang ? 2021-11-06 10:04 ? 次閱讀

Rust 是什么

Rust 是一門賦予每個人構(gòu)建可靠且高效軟件能力的語言。

  • 高性能:速度驚人且內(nèi)存利用率極高

  • 可靠性:在編譯期就能消除各種內(nèi)存錯誤

  • 生產(chǎn)力:出色的文檔,友好的編譯器和清晰的錯誤提示信息

為什么要用 Rust 進(jìn)行嵌入式開發(fā)

Rust 的設(shè)計理念:既要安全,也要高性能。Rust 的設(shè)計理念完全是嵌入式開發(fā)所需要的。

嵌入式軟件在運行過程中出現(xiàn)問題,大部分是由于內(nèi)存引起的。Rust 語言可以說是一門面向編譯器的語言。在編譯期間,就能夠確保你安全地使用內(nèi)存。

目前,嵌入式的主流開發(fā)語言還是 C 語言,不能上來就把底層的邏輯用 Rust 重新實現(xiàn)一遍。但是可以在 C 代碼中嵌入 Rust 語言。

C 調(diào)用 Rust

在 C 代碼中調(diào)用 Rust 代碼,需要我們將 Rust 源代碼打包為靜態(tài)庫文件。在 C 代碼編譯時,鏈接進(jìn)去。

創(chuàng)建 lib 庫

1、在 Clion 中使用cargo init --lib rust_to_c建立 lib 庫。添加以下代碼到 lib.rs 中,使用 Rust 語言計算兩個整數(shù)的和:

 1#![no_std]
 2usecore::PanicInfo;
 3
 4#[no_mangle]
 5pubextern"C"fnsum(a:i32,b:i32)->i32{
 6a+b
 7}
 8
 9#[panic_handler]
10fnpanic(_info:&PanicInfo)->!{
11loop{}
12}

在 Cargo.toml 文件中添加以下代碼,生成靜態(tài)庫文件:

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

交叉編譯

1、安裝 armv7 target:

1rustuptargetaddarmv7a-none-eabi

2、生成靜態(tài)庫文件:

1PSC:UsersLiuKangDesktopRUST
ust_to_c>cargobuild--target=armv7a-none-eabi--release--verbose
2Freshrust_to_cv0.1.0(C:UsersLiuKangDesktopRUST
ust_to_c)
3Finishedrelease[optimized]target(s)in0.01s

生成頭文件

1、安裝cbindgen](https://github.com/eqrion/cbindgen)),cbindgen從 rust 庫生成 C/C++ 11 頭文件:

1cargoinstall--forcecbindgen

2、在項目文件夾下新建文件cbindgen.toml文件:

3、生成頭文件:

1cbindgen--configcbindgen.toml--craterust_to_c--outputsum.h

調(diào)用 Rust 庫文件

1、將生成的sum.h以及sum.a文件放入rt-threadspqemu-vexpress-a9applications目錄下

2、修改 SConscript 文件,添加靜態(tài)庫:

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

3、在 main 函數(shù)中調(diào)用 sum 函數(shù), 并獲取返回值

 1#include
 2#include
 3#include
 4#include
 5#include"sum.h"
 6
 7intmain(void)
 8{
 9int32_ttmp;
10
11tmp=sum(1,2);
12printf("callrustsum(1,2)=%d
",tmp);
13
14return0;
15}

4、在 env 環(huán)境下,使用 scons 編譯工程:

 1LiuKang@DESKTOP-538H6DED:
epogithub
t-threadspqemu-vexpress-a9
 2$scons-j6
 3scons:ReadingSConscriptfiles...
 4scons:donereadingSConscriptfiles.
 5
 6scons:warning:youdonotseemtohavethepywin32extensionsinstalled;
 7parallel(-j)buildsmaynotworkreliablywithopenPythonfiles.
 8File"D:softwareenv_released_1.2.0env	oolsPython27Scriptsscons.py",line204,in<module>
 9scons:Buildingtargets...
10scons:buildingassociatedVariantDirtargets:build
11LINKrtthread.elf
12arm-none-eabi-objcopy-Obinaryrtthread.elfrtthread.bin
13arm-none-eabi-sizertthread.elf
14textdatabssdechexfilename
15628220214886700717068af10crtthread.elf
16scons:donebuildingtargets.
17
18LiuKang@DESKTOP-538H6DED:
epogithub
t-threadspqemu-vexpress-a9
19$qemu.bat
20WARNING:Imageformatwasnotspecifiedfor'sd.bin'andprobingguessedraw.
21Automaticallydetectingtheformatisdangerousforrawimages,writeoperationsonblock0willberestricted.
22Specifythe'raw'formatexplicitlytoremovetherestrictions.
23
24|/
25-RT-ThreadOperatingSystem
26/|4.0.4buildJul282021
272006-2021Copyrightbyrt-threadteam
28lwIP-2.1.2initialized!
29[I/sal.skt]SocketAbstractionLayerinitializesuccess.
30[I/SDIO]SDcardcapacity65536KB.
31[I/SDIO]switchingcardtohighspeedfailed!
32callrustsum(1,2)=3
33msh/>

加減乘除

1、在 lib.rs 文件中,使用 rust 語言實現(xiàn)加減乘除運算:

 1#![no_std]
 2usecore::PanicInfo;
 3
 4
 5#[no_mangle]
 6pubextern"C"fnadd(a:i32,b:i32)->i32{
 7a+b
 8}
 9
10#[no_mangle]
11pubextern"C"fnsubtract(a:i32,b:i32)->i32{
12a-b
13}
14
15#[no_mangle]
16pubextern"C"fnmultiply(a:i32,b:i32)->i32{
17a*b
18}
19
20#[no_mangle]
21pubextern"C"fndivide(a:i32,b:i32)->i32{
22a/b
23}
24
25#[panic_handler]
26fnpanic(_info:&PanicInfo)->!{
27loop{}
28}

2、生成庫文件和頭文件并放在 application 目錄下

3、使用 scons 編譯,鏈接時報錯,在 rust github 倉庫的 issues 中找到了解決辦法https://github.com/rust-lang/compiler-builtins/issues/353

1LINKrtthread.elf
2d:/software/env_released_1.2.0/env/tools/gnu_gcc/arm_gcc/mingw/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7-ar/thumblibgcc.a(_arm_addsubdf3.o):Infunction`__aeabi_ul2d':
3(.text+0x304):multipledefinitionof`__aeabi_ul2d'
4applicationslibsum.a(compiler_builtins-9b744f6fddf5e719.compiler_builtins.20m0qzjq-cgu.117.rcgu.o):/cargo/registry/src/github.com-1ecc6299db9ec823/compiler_builtins-0.1.35/src/float/conv.rs:143:firstdefinedhere
5collect2.exe:error:ldreturned1exitstatus
6scons:***[rtthread.elf]Error1
7scons:buildingterminatedbecauseoferrors.

4、修改rtconfig.py文件, 添加鏈接參數(shù)--allow-multiple-definition

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

5、編譯并運行 qemu:

 1LiuKang@DESKTOP-538H6DED:
epogithub
t-threadspqemu-vexpress-a9
 2$scons-j6
 3scons:ReadingSConscriptfiles...
 4scons:donereadingSConscriptfiles.
 5
 6scons:warning:youdonotseemtohavethepywin32extensionsinstalled;
 7parallel(-j)buildsmaynotworkreliablywithopenPythonfiles.
 8File"D:softwareenv_released_1.2.0env	oolsPython27Scriptsscons.py",line204,in<module>
 9scons:Buildingtargets...
10scons:buildingassociatedVariantDirtargets:build
11LINKrtthread.elf
12arm-none-eabi-objcopy-Obinaryrtthread.elfrtthread.bin
13arm-none-eabi-sizertthread.elf
14textdatabssdechexfilename
15628756214886700717604af324rtthread.elf
16scons:donebuildingtargets.
17
18LiuKang@DESKTOP-538H6DED:
epogithub
t-threadspqemu-vexpress-a9
19$qemu.bat
20WARNING:Imageformatwasnotspecifiedfor'sd.bin'andprobingguessedraw.
21Automaticallydetectingtheformatisdangerousforrawimages,writeoperationsonblock0willberestricted.
22Specifythe'raw'formatexplicitlytoremovetherestrictions.
23
24|/
25-RT-ThreadOperatingSystem
26/|4.0.4buildJul282021
272006-2021Copyrightbyrt-threadteam
28lwIP-2.1.2initialized!
29[I/sal.skt]SocketAbstractionLayerinitializesuccess.
30[I/SDIO]SDcardcapacity65536KB.
31[I/SDIO]switchingcardtohighspeedfailed!
32callrustsum(1,2)=3
33callrustsubtract(2,1)=1
34callrustmultiply(2,2)=4
35callrustdivide(4,2)=2

Rust 調(diào)用 C

可以 在 C 代碼中調(diào)用 Rust,那么在 Rust 中也可以調(diào)用 C 代碼。我們在 Rust 代碼中調(diào)用 rt_kprintf 函數(shù):

修改 lib.rs 文件

 1//導(dǎo)入的rt-thread函數(shù)列表
 2extern"C"{
 3pubfnrt_kprintf(format:*constu8,...);
 4}
 5
 6#[no_mangle]
 7pubextern"C"fnadd(a:i32,b:i32)->i32{
 8unsafe{
 9rt_kprintf(b"thisisfromrust
"as*constu8);
10}
11a+b
12}

生成庫文件

1cargobuild--target=armv7a-none-eabi--release--verbose
2Compilingrust_to_cv0.1.0(C:UsersLiuKangDesktopRUST
ust_to_c)
3Running`rustc--crate-namesum--edition=2018src/lib.rs--error-format=json--json=diagnostic-rendered-ansi--crate-typestaticlib--emit=dep-info,link-Copt-level=3-Cembed-bitcode=no-Cmetadata=a
40723fa112c78339-Cextra-filename=-a0723fa112c78339--out-dirC:UsersLiuKangDesktopRUST
ust_to_c	argetarmv7a-none-eabi
eleasedeps--targetarmv7a-none-eabi-Ldependency=C:UsersLiuKangDesktopRUS
5T
ust_to_c	argetarmv7a-none-eabi
eleasedeps-Ldependency=C:UsersLiuKangDesktopRUST
ust_to_c	arget
eleasedeps`
6Finishedrelease[optimized]target(s)in0.11s

運行

復(fù)制 rust 生成的庫文件到 application 目錄下。

 1LiuKang@DESKTOP-538H6DED:
epogithub
t-threadspqemu-vexpress-a9
 2$scons-j6
 3scons:ReadingSConscriptfiles...
 4scons:donereadingSConscriptfiles.
 5scons:warning:youdonotseemtohavethepywin32extensionsinstalled;
 6parallel(-j)buildsmaynotworkreliablywithopenPythonfiles.
 7File"D:softwareenv_released_1.2.0env	oolsPython27Scriptsscons.py",line204,in<module>
 8scons:Buildingtargets...
 9scons:buildingassociatedVariantDirtargets:build
10LINKrtthread.elf
11arm-none-eabi-objcopy-Obinaryrtthread.elfrtthread.bin
12arm-none-eabi-sizertthread.elf
13textdatabssdechexfilename
14628812214890796721756b035crtthread.elf
15scons:donebuildingtargets.
16
17LiuKang@DESKTOP-538H6DED:
epogithub
t-threadspqemu-vexpress-a9
18$qemu.bat
19WARNING:Imageformatwasnotspecifiedfor'sd.bin'andprobingguessedraw.
20Automaticallydetectingtheformatisdangerousforrawimages,writeoperationsonblock0willberestricted.
21Specifythe'raw'formatexplicitlytoremovetherestrictions.
22
23|/
24-RT-ThreadOperatingSystem
25/|4.0.4buildJul282021
262006-2021Copyrightbyrt-threadteam
27lwIP-2.1.2initialized!
28[I/sal.skt]SocketAbstractionLayerinitializesuccess.
29[I/SDIO]SDcardcapacity65536KB.
30[I/SDIO]switchingcardtohighspeedfailed!
31thisisfromrust
32callrustsum(1,2)=3
33callrustsubtract(2,1)=1
34callrustmultiply(2,2)=4
35callrustdivide(4,2)=2
36msh/>

來源:

https://club.rt-thread.org/ask/article/2944.html

責(zé)任編輯:haq
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5143

    文章

    19565

    瀏覽量

    315547
  • Rust
    +關(guān)注

    關(guān)注

    1

    文章

    233

    瀏覽量

    6978

原文標(biāo)題:手把手教你用 Rust 開發(fā)嵌入式

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    嵌入式開發(fā)入門指南:從零開始學(xué)習(xí)嵌入式

    隨著物聯(lián)網(wǎng)、智能硬件的發(fā)展,嵌入式開發(fā)成為熱門技能之一。以下將為初學(xué)者提供一份詳細(xì)的嵌入式開發(fā)入門指南,涵蓋學(xué)習(xí)路徑、必備工具、推薦資源等內(nèi)容。 1. 嵌入式系統(tǒng)的定義與應(yīng)用嵌入式系統(tǒng)
    發(fā)表于 05-15 09:29

    嵌入式開發(fā):高門檻的系統(tǒng)性工程與 996 的行業(yè)困局

    嵌入式開發(fā)的門檻,往往被培訓(xùn)機構(gòu)和表象所掩蓋。許多人誤以為 “用 C 語言寫個跑在 ARM 上的程序” 就是嵌入式,實則連皮毛都未觸及。真正的嵌入式開發(fā)是硬件與軟件深度融合的系統(tǒng)性工程,需跨越三重壁壘
    的頭像 發(fā)表于 04-09 11:06 ?282次閱讀
    <b class='flag-5'>嵌入式開發(fā)</b>:高門檻的系統(tǒng)性工程與 996 的行業(yè)困局

    BlackBerry QNX推出通用嵌入式開發(fā)平臺

    BlackBerry有限公司(紐交所代碼:BB;多倫多證券交易所代碼:BB)旗下部門QNX今日宣布推出QNX 通用嵌入式開發(fā)平臺(General Embedded Development
    的頭像 發(fā)表于 03-11 16:04 ?566次閱讀

    AI來襲!嵌入式開發(fā)者該如何應(yīng)對轉(zhuǎn)型?

    AI正在改變世界!從自動駕駛到智能家居,從工業(yè)自動化到語音助手,各行各業(yè)都在朝著智能化方向邁進(jìn)。對于嵌入式開發(fā)者來說,AI的到來既是一次前所未有的挑戰(zhàn),也是一個充滿機遇的時代。過去,我們專注于硬件
    的頭像 發(fā)表于 03-04 14:41 ?719次閱讀
    AI來襲!<b class='flag-5'>嵌入式開發(fā)</b>者該如何應(yīng)對轉(zhuǎn)型?

    代碼+案例+生態(tài):武漢芯源半導(dǎo)體CW32嵌入式開發(fā)實戰(zhàn)正式出版

    尊敬的各位電子工程師、嵌入式開發(fā)愛好者們:大家好!今天,我們懷著無比激動與自豪的心情,向大家宣布一個重大喜訊——武漢芯源半導(dǎo)體的單片機CW32正式出書啦!《基于ARMCortex-M0+的CW32
    的頭像 發(fā)表于 03-03 15:15 ?584次閱讀
    代碼+案例+生態(tài):武漢芯源半導(dǎo)體CW32<b class='flag-5'>嵌入式開發(fā)</b>實戰(zhàn)正式出版

    代碼+案例+生態(tài):武漢芯源半導(dǎo)體CW32嵌入式開發(fā)實戰(zhàn)正式出版

    的CW32嵌入式開發(fā)實戰(zhàn)》這本書凝聚著我們團隊無數(shù)的心血與智慧,它不僅是對 CW32 單片機技術(shù)的全面解讀,更是為廣大開發(fā)者搭建了一座通往嵌入式開發(fā)新世界的橋梁。 武漢芯源半導(dǎo)體持續(xù)進(jìn)行
    發(fā)表于 03-03 15:14

    如何成為嵌入式開發(fā)工程師?

    如何成為嵌入式開發(fā)工程師? 成為嵌入式開發(fā)工程師通常需要掌握一系列技能和知識,并且在實踐中不斷積累經(jīng)驗。以下是一些基本步驟和建議: 1. 基礎(chǔ)教育:- 獲取電子工程、計算機科學(xué)或相關(guān)領(lǐng)域的學(xué)位
    發(fā)表于 02-19 10:39

    哪些專業(yè)適合學(xué)習(xí)嵌入式開發(fā)?

    哪些專業(yè)適合學(xué)習(xí)嵌入式開發(fā)? 在傳統(tǒng)行業(yè)不斷被取代的當(dāng)下,對于大學(xué)生、從業(yè)者而言,選擇一個熱門主流的職業(yè)方向,是未來發(fā)展的關(guān)鍵因素之一。 嵌入式作為當(dāng)下高薪崗位之一,轉(zhuǎn)行、轉(zhuǎn)專業(yè)的人群已經(jīng)占據(jù)求職
    發(fā)表于 01-03 13:44

    嵌入式開發(fā)必備-RK3562演示Linux常用系統(tǒng)查詢命令(上)觸覺智能出品

    實用干貨!嵌入式開發(fā)學(xué)習(xí)必備-RK3562演示Linux常用系統(tǒng)查詢命令(上)關(guān)注觸覺智能持續(xù)為大家?guī)砀?b class='flag-5'>嵌入式開發(fā)內(nèi)容
    的頭像 發(fā)表于 12-31 10:51 ?117次閱讀
    <b class='flag-5'>嵌入式開發(fā)</b>必備-RK3562演示Linux常用系統(tǒng)查詢命令(上)觸覺智能出品

    如何使用 RISC-V 進(jìn)行嵌入式開發(fā)

    RISC-V是一種開源的指令集架構(gòu)(ISA),它允許任何人設(shè)計、制造和銷售基于RISC-V的處理器,這為嵌入式開發(fā)提供了極大的靈活性和創(chuàng)新空間。以下是使用RISC-V進(jìn)行嵌入式開發(fā)的基本步驟: 一
    的頭像 發(fā)表于 12-11 17:32 ?1760次閱讀

    基于Xilinx ZYNQ7000 FPGA嵌入式開發(fā)實戰(zhàn)指南

    電子發(fā)燒友網(wǎng)站提供《基于Xilinx ZYNQ7000 FPGA嵌入式開發(fā)實戰(zhàn)指南.pdf》資料免費下載
    發(fā)表于 12-10 15:31 ?34次下載

    零基礎(chǔ)嵌入式開發(fā)學(xué)習(xí)路線

    嵌入式開發(fā)”沒有接觸過的同學(xué)可能會不明覺厲,但是只要你了解了,感興趣并且有一個正確的學(xué)習(xí)路線的話,零基礎(chǔ)也能入門。給大家介紹一個簡單易懂的學(xué)習(xí)路線,讓你能夠從零開始學(xué)習(xí)嵌入式開發(fā)。 第一步:掌握
    發(fā)表于 10-25 15:55

    嵌入式開發(fā)常見問題排查

    嵌入式開發(fā)問題排查很多人認(rèn)為嵌入式開發(fā)很難,主要是因為在這個過程中常常會遇到各式各樣的問題。這些問題的復(fù)雜性和多樣性使得許多人感到困惑和無所適從。然而,如果將這些問題逐一拆解,實際上大部分都可以
    的頭像 發(fā)表于 09-22 08:04 ?736次閱讀
    <b class='flag-5'>嵌入式開發(fā)</b>常見問題排查

    聚焦嵌入式開發(fā)中的合規(guī)性工具、項目管理工具、版本迭代工具應(yīng)用

    日前,龍智攜嵌入式開發(fā)及管理解決方案亮相2024上海國際嵌入式展(embedded world China 2024)。展會期間,我們對話了多位龍智資深DevSecOps顧問及技術(shù)支持專家
    的頭像 發(fā)表于 07-29 15:15 ?1006次閱讀

    嵌入式開發(fā)前景怎么樣?

    嵌入式開發(fā)前景非常廣闊,這主要得益于物聯(lián)網(wǎng)、人工智能、大數(shù)據(jù)等技術(shù)的快速發(fā)展,以及嵌入式系統(tǒng)在各個領(lǐng)域的廣泛應(yīng)用。以下是對嵌入式開發(fā)前景的詳細(xì)分析
    的頭像 發(fā)表于 07-10 09:00 ?4212次閱讀
    <b class='flag-5'>嵌入式開發(fā)</b>前景怎么樣?
    主站蜘蛛池模板: 祁东县| 博爱县| 虎林市| 浮梁县| 嘉兴市| 长武县| 永康市| 永仁县| 清新县| 东源县| 托克托县| 鹤山市| 宜宾市| 凌源市| 涡阳县| 肇源县| 和田市| 澳门| 寿光市| 海宁市| 河东区| 秭归县| 安陆市| 云和县| 彭阳县| 同仁县| 武宣县| 南陵县| 会理县| 龙岩市| 连山| 施甸县| 本溪市| 千阳县| 阳信县| 沂水县| 明水县| 静海县| 竹山县| 洮南市| 鲁甸县|