diff --git a/.idea/project2210132-226009.iml b/.idea/project2210132-226009.iml index 661a16a282e82379dba27b63fd7467d7afc19322..83f32f0f32e96687196bfb7a81fde2961768f118 100644 --- a/.idea/project2210132-226009.iml +++ b/.idea/project2210132-226009.iml @@ -1,15 +1,25 @@ <?xml version="1.0" encoding="UTF-8"?> -<module type="CPP_MODULE" version="4"> +<module type="EMPTY_MODULE" version="4"> <component name="NewModuleRootManager"> <content url="file://$MODULE_DIR$"> - <sourceFolder url="file://$MODULE_DIR$/example/hello/src" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/examples/example1/hello/src" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/examples/example2/hello/src" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/libc/src" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/marco_main/src" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/rtsmart-std/src" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/examples/example3/thread_test/src" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/examples/example4/mutex_test/src" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/examples/example5/read_test/src" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/examples/example6/file_test/src" isTestSource="false" /> + <excludeFolder url="file://$MODULE_DIR$/examples/example1/hello/target" /> + <excludeFolder url="file://$MODULE_DIR$/examples/example2/hello/target" /> <excludeFolder url="file://$MODULE_DIR$/libc/target" /> - <excludeFolder url="file://$MODULE_DIR$/rust/.idea" /> - <excludeFolder url="file://$MODULE_DIR$/rust/build" /> - <excludeFolder url="file://$MODULE_DIR$/rust/target" /> - <excludeFolder url="file://$MODULE_DIR$/.idea/copilot/chatSessions" /> - <excludeFolder url="file://$MODULE_DIR$/example/hello/target" /> + <excludeFolder url="file://$MODULE_DIR$/marco_main/target" /> + <excludeFolder url="file://$MODULE_DIR$/rtsmart-std/target" /> + <excludeFolder url="file://$MODULE_DIR$/examples/example3/thread_test/target" /> + <excludeFolder url="file://$MODULE_DIR$/examples/example4/mutex_test/target" /> + <excludeFolder url="file://$MODULE_DIR$/examples/example5/read_test/target" /> + <excludeFolder url="file://$MODULE_DIR$/examples/example6/file_test/target" /> </content> <orderEntry type="inheritedJdk" /> <orderEntry type="sourceFolder" forTests="false" /> diff --git a/.idea/vcs.xml b/.idea/vcs.xml index fa5b22d944a689b8e94b3486b348ade6404641d8..35eb1ddfbbc029bcab630581847471d7f238ec53 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -2,6 +2,5 @@ <project version="4"> <component name="VcsDirectoryMappings"> <mapping directory="" vcs="Git" /> - <mapping directory="$PROJECT_DIR$/libc" vcs="Git" /> </component> </project> \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 26e0d084eacb705042cf823fb13aaf5bce1320eb..ec633ffce43ddc8409415b5986118d7f134cb04c 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -15,16 +15,347 @@ <cargoProject FILE="$PROJECT_DIR$/marco_main/Cargo.toml" /> <cargoProject FILE="$PROJECT_DIR$/examples/example1/hello/Cargo.toml" /> <cargoProject FILE="$PROJECT_DIR$/examples/example2/hello/Cargo.toml" /> + <cargoProject FILE="$PROJECT_DIR$/examples/example3/thread_test/Cargo.toml" /> + <cargoProject FILE="$PROJECT_DIR$/examples/example4/mutex_test/Cargo.toml" /> </component> <component name="ChangeListManager"> - <list default="true" id="97ea9683-ca20-4d7d-94b3-cdefa273cf6b" name="Changes" comment="update thread and mutex module"> + <list default="true" id="97ea9683-ca20-4d7d-94b3-cdefa273cf6b" name="Changes" comment="update develop document and rt-smart-std"> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/.gitignore" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/CACHEDIR.TAG" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/aarch64-unknown-rtsmart/debug/.fingerprint/alloc-829e27846e9cf0cf/lib-alloc" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/aarch64-unknown-rtsmart/debug/.fingerprint/core-6b17e3806c33a447/lib-core" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/aarch64-unknown-rtsmart/debug/.fingerprint/core-6b17e3806c33a447/lib-core.json" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/aarch64-unknown-rtsmart/debug/.fingerprint/libc-3a3f945c75b80315/invoked.timestamp" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/aarch64-unknown-rtsmart/debug/.fingerprint/mutex_test-1cf4c65a03f2ed9a/invoked.timestamp" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/aarch64-unknown-rtsmart/debug/.fingerprint/mutex_test-e2009cbb31bc3fbc/invoked.timestamp" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/aarch64-unknown-rtsmart/debug/.fingerprint/rtsmart-std-b62c82da308e52fc/lib-rtsmart_std.json" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/aarch64-unknown-rtsmart/debug/build/compiler_builtins-e947fcb632bf45af/invoked.timestamp" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/aarch64-unknown-rtsmart/debug/deps/core-6b17e3806c33a447.d" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/aarch64-unknown-rtsmart/debug/deps/liblibc-944fe2b84c8accab.rmeta" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/aarch64-unknown-rtsmart/debug/deps/mutex_test-56c4e296fa52f1fb" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/aarch64-unknown-rtsmart/debug/incremental/libc-m45xf2t5alvo/s-gwhm1exw89-do0gxv-87ok65400rz3bx2tm4mhzy6z3/140iwjh06fsgcto0.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/aarch64-unknown-rtsmart/debug/incremental/mutex_test-2k8ihs9zyp8oi/s-gwim87j7n8-b09ygw-2wcevasp5kgh3e4rawnd874km/2skbai310mqk9t10.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/aarch64-unknown-rtsmart/debug/incremental/mutex_test-2k8ihs9zyp8oi/s-gwim87j7n8-b09ygw-2wcevasp5kgh3e4rawnd874km/3g11newmemqyb7uu.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/aarch64-unknown-rtsmart/debug/incremental/mutex_test-2k8ihs9zyp8oi/s-gwim87j7n8-b09ygw-2wcevasp5kgh3e4rawnd874km/4z8dc841ceo1ygh2.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/aarch64-unknown-rtsmart/debug/incremental/mutex_test-2k8ihs9zyp8oi/s-gwim87j7n8-b09ygw-2wcevasp5kgh3e4rawnd874km/nin4k4qjtk5tunf.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/aarch64-unknown-rtsmart/debug/incremental/mutex_test-2k8ihs9zyp8oi/s-gwim87j7n8-b09ygw-2wcevasp5kgh3e4rawnd874km/query-cache.bin" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/aarch64-unknown-rtsmart/debug/incremental/mutex_test-2k8ihs9zyp8oi/s-gwim87j7n8-b09ygw-2wcevasp5kgh3e4rawnd874km/work-products.bin" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwim87e120-n1jw2-9yfkvq7rx0tmhj1ngrq30a0k8/12l053alysjx21ob.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwim87e120-n1jw2-9yfkvq7rx0tmhj1ngrq30a0k8/2hfnhw8338y4saro.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwim87e120-n1jw2-9yfkvq7rx0tmhj1ngrq30a0k8/38b74yuy1tsj0o7t.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwim87e120-n1jw2-9yfkvq7rx0tmhj1ngrq30a0k8/3dbmnm06p1bh2uej.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwim87e120-n1jw2-9yfkvq7rx0tmhj1ngrq30a0k8/3nu7pojxvtetiend.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwim87e120-n1jw2-9yfkvq7rx0tmhj1ngrq30a0k8/4mqujrhd35zbwgqv.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwim87e120-n1jw2-9yfkvq7rx0tmhj1ngrq30a0k8/4tmtdvrqc7np9okw.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwim87e120-n1jw2-9yfkvq7rx0tmhj1ngrq30a0k8/4w856zexz2tu4yl5.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwim87e120-n1jw2-9yfkvq7rx0tmhj1ngrq30a0k8/532h1ed5ixolwgo4.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwim87e120-n1jw2-9yfkvq7rx0tmhj1ngrq30a0k8/55zbf4od7tt59wua.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwim87e120-n1jw2-9yfkvq7rx0tmhj1ngrq30a0k8/l6zm5w88pj41hn8.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/.fingerprint/fnv-68f3a4f6444d45f5/dep-lib-fnv" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/.fingerprint/fnv-68f3a4f6444d45f5/lib-fnv.json" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/.fingerprint/libc-1b5560a2048ec057/build-script-build-script-build" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/.fingerprint/libc-1b5560a2048ec057/invoked.timestamp" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/.fingerprint/mutex_test-17e3e65a232588fc/bin-mutex_test" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/.fingerprint/mutex_test-17e3e65a232588fc/invoked.timestamp" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/.fingerprint/mutex_test-e162f5d52b9cbd24/invoked.timestamp" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/.fingerprint/proc-macro2-6575af948a25eb16/run-build-script-build-script-build" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/.fingerprint/quote-49f8ef3ca04af641/lib-quote.json" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/.fingerprint/syn-68033d7571c9b4ac/run-build-script-build-script-build.json" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/.fingerprint/syn-e438821396825bbb/build-script-build-script-build" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/.fingerprint/syn-e438821396825bbb/invoked.timestamp" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/build/proc-macro2-6575af948a25eb16/out/libproc_macro2.rmeta" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/build/syn-68033d7571c9b4ac/invoked.timestamp" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/build/syn-68033d7571c9b4ac/output" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/build/syn-68033d7571c9b4ac/stderr" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/deps/libdarling-cf7e57e9e20d1690.rlib" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/deps/libmarco_main-87920eefd7a94c20.so" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/deps/libproc_macro2-696c862dd747ddd4.rlib" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwfte5bfy8-ccnef-by6d3mbi4f04a47c5d0pjc6z/18jihs00rema2xzl.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwfte5bfy8-ccnef-by6d3mbi4f04a47c5d0pjc6z/1k1qexyw47ees8ht.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwfte5bfy8-ccnef-by6d3mbi4f04a47c5d0pjc6z/1yjpyqx34q0b57sl.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwfte5bfy8-ccnef-by6d3mbi4f04a47c5d0pjc6z/2lv7k2srcufixidl.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwfte5bfy8-ccnef-by6d3mbi4f04a47c5d0pjc6z/30naxkbagymhbwml.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwfte5bfy8-ccnef-by6d3mbi4f04a47c5d0pjc6z/3vmegrodex2o2spx.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwfte5bfy8-ccnef-by6d3mbi4f04a47c5d0pjc6z/4duserkdlc49nemt.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwfte5bfy8-ccnef-by6d3mbi4f04a47c5d0pjc6z/4h1ob4c92xx4anj9.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwfte5bfy8-ccnef-by6d3mbi4f04a47c5d0pjc6z/4je4sc89ew6k9qys.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwfte5bfy8-ccnef-by6d3mbi4f04a47c5d0pjc6z/i0pkff1zgldildk.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwfte5bfy8-ccnef.lock" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/10g6hsuglium18im.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/14pjlhbtwr0be3ym.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/15wke4fonh20fzca.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/17wmix4j37dd28la.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/1byjvouqmh99enu2.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/1ojprbeka5r991oa.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/1pj0jiazpnaj6nao.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/1vni8zfy0zwdmgd7.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/2640uq1oxxifr3cs.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/2809co28f61nbmxf.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/2dia761sxq74wj23.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/2j6f8oruvhr0u551.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/2ootw2ncspo9jtqg.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/2p2sqrytq1fk3zyg.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/2r9ehbjv1ju6kyvc.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/3fs7de79hwfngc73.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/3mcd5qlzol3w1exc.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/3pcntd05polbwed1.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/3sb3cp7xj2ezcdnd.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/3v0irnhosb9j0agq.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/46phtuzx9zz79ds4.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/4b865kzbtpkidc7r.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/4l0kscn413j5xjeb.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/4qs0kgovnj3ulsxk.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/4s3v9d07im9jyjpb.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/4vqd4rw95jlkpj94.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/4z6wpiafg08ctpqp.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/5g8qrwd6qyo5kwff.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/dep-graph.bin" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/of8y7zzky0sgwfv.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/oj3lpnxuziqwmna.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/ptv1gapqedfm7ry.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/query-cache.bin" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/work-products.bin" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey.lock" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/sysroot/lib/rustlib/x86_64-unknown-linux-gnu/lib/core-b6666c07e54a3079.d" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/sysroot/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc-b621534d2caff15d.rlib" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/sysroot/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-6b7483ca61df3612.rlib" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example4/mutex_test/target/sysroot/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-b6666c07e54a3079.rlib" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/.gitignore" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/.fingerprint/alloc-829e27846e9cf0cf/lib-alloc" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/.fingerprint/compiler_builtins-4f9e67fb7ef80bd2/lib-compiler_builtins" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/.fingerprint/core-6b17e3806c33a447/lib-core" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/.fingerprint/libc-944fe2b84c8accab/dep-lib-libc" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/.fingerprint/libc-944fe2b84c8accab/invoked.timestamp" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/.fingerprint/read_test-6ee50e5993552566/dep-bin-read_test" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/.fingerprint/rustc-std-workspace-core-0f41f893cbff5acf/dep-lib-rustc_std_workspace_core" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/.fingerprint/rustc-std-workspace-core-0f41f893cbff5acf/lib-rustc_std_workspace_core.json" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/build/compiler_builtins-e947fcb632bf45af/output" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/build/libc-50ea1faa0ed91d53/output" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/build/libc-50ea1faa0ed91d53/stderr" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/build/libc-b08d648ca4332288/output" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/build/libc-b08d648ca4332288/stderr" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/deps/core-6b17e3806c33a447.d" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/deps/libcore-6b17e3806c33a447.rlib" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/deps/liblibc-944fe2b84c8accab.rmeta" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/deps/librustc_std_workspace_core-0f41f893cbff5acf.rmeta" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/incremental/libc-m45xf2t5alvo/s-gwhm7wv4ft-rf2m3b-87ok65400rz3bx2tm4mhzy6z3/4zeughd5qquyf2d3.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/incremental/libc-m45xf2t5alvo/s-gwhm7wv4ft-rf2m3b-87ok65400rz3bx2tm4mhzy6z3/work-products.bin" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/incremental/read_test-heh71h94dg04/s-gwilzogpee-5hlf4w-8va3er18iptgl34eqr0zzyq5s/2rrgbnsszulob58t.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/incremental/read_test-heh71h94dg04/s-gwilzogpee-5hlf4w-8va3er18iptgl34eqr0zzyq5s/7d9h7l56ky1lrhv.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/incremental/read_test-heh71h94dg04/s-gwilzogpee-5hlf4w.lock" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwilzobwtp-drz8ei-9yfkvq7rx0tmhj1ngrq30a0k8/1269vhci5ldy564i.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwilzobwtp-drz8ei-9yfkvq7rx0tmhj1ngrq30a0k8/1mbbgfsruah25p89.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwilzobwtp-drz8ei-9yfkvq7rx0tmhj1ngrq30a0k8/1sogsn7h83hbpkqg.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwilzobwtp-drz8ei-9yfkvq7rx0tmhj1ngrq30a0k8/23had3rll7txnj2l.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwilzobwtp-drz8ei-9yfkvq7rx0tmhj1ngrq30a0k8/28zwut6bgmrw9arx.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwilzobwtp-drz8ei-9yfkvq7rx0tmhj1ngrq30a0k8/2d4kf51ini4h0e52.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwilzobwtp-drz8ei-9yfkvq7rx0tmhj1ngrq30a0k8/3ouwbijgruieoba3.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwilzobwtp-drz8ei-9yfkvq7rx0tmhj1ngrq30a0k8/3p8udl9eey0di4mh.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwilzobwtp-drz8ei-9yfkvq7rx0tmhj1ngrq30a0k8/3qr87wbqs17d39y4.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwilzobwtp-drz8ei-9yfkvq7rx0tmhj1ngrq30a0k8/4spaf1iitjzrxquf.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwilzobwtp-drz8ei-9yfkvq7rx0tmhj1ngrq30a0k8/532h1ed5ixolwgo4.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwilzobwtp-drz8ei-9yfkvq7rx0tmhj1ngrq30a0k8/5emyh2f62cxdysiu.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwilzobwtp-drz8ei-9yfkvq7rx0tmhj1ngrq30a0k8/aykv7jfvwsabydj.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwilzobwtp-drz8ei-9yfkvq7rx0tmhj1ngrq30a0k8/query-cache.bin" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwilzobwtp-drz8ei-9yfkvq7rx0tmhj1ngrq30a0k8/s5lfzg0gf2q09d5.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwilzobwtp-drz8ei-9yfkvq7rx0tmhj1ngrq30a0k8/xgab21oxclvr56k.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwilzobwtp-drz8ei.lock" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/.fingerprint/darling_core-0c213a96aa20d71a/lib-darling_core" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/.fingerprint/darling_core-0c213a96aa20d71a/lib-darling_core.json" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/.fingerprint/fnv-68f3a4f6444d45f5/dep-lib-fnv" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/.fingerprint/libc-1b5560a2048ec057/dep-build-script-build-script-build" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/.fingerprint/marco_main-87920eefd7a94c20/invoked.timestamp" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/.fingerprint/marco_main-87920eefd7a94c20/output-lib-marco_main" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/.fingerprint/proc-macro2-6575af948a25eb16/run-build-script-build-script-build" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/.fingerprint/proc-macro2-6575af948a25eb16/run-build-script-build-script-build.json" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/.fingerprint/proc-macro2-8c3422a923e389b1/build-script-build-script-build.json" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/.fingerprint/read_test-a7f0f6e1d6ed342e/bin-read_test" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/.fingerprint/read_test-db049d38503b5a74/invoked.timestamp" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/.fingerprint/strsim-a2b7dd28172baa09/lib-strsim" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/.fingerprint/syn-e438821396825bbb/build-script-build-script-build" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/build/libc-1b5560a2048ec057/build-script-build" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/build/proc-macro2-6575af948a25eb16/stderr" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/build/proc-macro2-8c3422a923e389b1/build-script-build" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/build/syn-e438821396825bbb/build_script_build-e438821396825bbb" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/deps/darling-cf7e57e9e20d1690.d" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/deps/libident_case-f1f82dfca14491bb.rlib" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/deps/libquote-49f8ef3ca04af641.rmeta" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/deps/libsyn-cb00863f18926885.rmeta" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/deps/quote-49f8ef3ca04af641.d" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwgkp3rv5c-1xg2ja2-by6d3mbi4f04a47c5d0pjc6z/1a4y98i78biirwpq.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwgkp3rv5c-1xg2ja2-by6d3mbi4f04a47c5d0pjc6z/1st1c8t806gwzvon.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwgkp3rv5c-1xg2ja2-by6d3mbi4f04a47c5d0pjc6z/1yjpyqx34q0b57sl.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwgkp3rv5c-1xg2ja2-by6d3mbi4f04a47c5d0pjc6z/2gcvqt0f63er16bp.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwgkp3rv5c-1xg2ja2-by6d3mbi4f04a47c5d0pjc6z/2lv7k2srcufixidl.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwgkp3rv5c-1xg2ja2-by6d3mbi4f04a47c5d0pjc6z/3b5c6q3hbg64udgk.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwgkp3rv5c-1xg2ja2-by6d3mbi4f04a47c5d0pjc6z/3if1w7vpmi2g36hf.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwgkp3rv5c-1xg2ja2-by6d3mbi4f04a47c5d0pjc6z/4duserkdlc49nemt.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwgkp3rv5c-1xg2ja2-by6d3mbi4f04a47c5d0pjc6z/b6iew1ulsr1xi37.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwgkp3rv5c-1xg2ja2-by6d3mbi4f04a47c5d0pjc6z/dep-graph.bin" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwgkp3rv5c-1xg2ja2-by6d3mbi4f04a47c5d0pjc6z/erkulpg6j8ychlc.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwgkp3rv5c-1xg2ja2-by6d3mbi4f04a47c5d0pjc6z/work-products.bin" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwgkp3rv5c-1xg2ja2-by6d3mbi4f04a47c5d0pjc6z/x8hen6sk2vbnyav.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwgkp3rv5c-1xg2ja2-by6d3mbi4f04a47c5d0pjc6z/zzhyvu45bo6vhrc.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/10g6hsuglium18im.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/14pjlhbtwr0be3ym.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/15wke4fonh20fzca.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/17wmix4j37dd28la.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/1byjvouqmh99enu2.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/1ojprbeka5r991oa.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/1pj0jiazpnaj6nao.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/1vni8zfy0zwdmgd7.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/2640uq1oxxifr3cs.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/2809co28f61nbmxf.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/2dia761sxq74wj23.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/2j6f8oruvhr0u551.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/2ootw2ncspo9jtqg.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/2p2sqrytq1fk3zyg.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/2r9ehbjv1ju6kyvc.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/3fs7de79hwfngc73.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/3mcd5qlzol3w1exc.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/3pcntd05polbwed1.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/3sb3cp7xj2ezcdnd.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/3v0irnhosb9j0agq.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/46phtuzx9zz79ds4.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/4b865kzbtpkidc7r.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/4l0kscn413j5xjeb.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/4qs0kgovnj3ulsxk.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/4s3v9d07im9jyjpb.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/4vqd4rw95jlkpj94.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/4z6wpiafg08ctpqp.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/5g8qrwd6qyo5kwff.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/dep-graph.bin" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/of8y7zzky0sgwfv.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/oj3lpnxuziqwmna.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/ptv1gapqedfm7ry.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/query-cache.bin" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/work-products.bin" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk.lock" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/sysroot/lib/rustlib/x86_64-unknown-linux-gnu/lib/alloc-b621534d2caff15d.d" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example5/read_test/target/sysroot/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-6b7483ca61df3612.rmeta" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/.gitignore" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/.idea/modules.xml" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/.fingerprint/alloc-829e27846e9cf0cf/invoked.timestamp" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/.fingerprint/alloc-829e27846e9cf0cf/lib-alloc" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/.fingerprint/alloc-829e27846e9cf0cf/lib-alloc.json" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/.fingerprint/compiler_builtins-4f9e67fb7ef80bd2/lib-compiler_builtins.json" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/.fingerprint/core-6b17e3806c33a447/invoked.timestamp" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/.fingerprint/core-6b17e3806c33a447/lib-core.json" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/.fingerprint/file_test-48a0e907d17a2f5e/test-bin-file_test" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/.fingerprint/file_test-48a0e907d17a2f5e/test-bin-file_test.json" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/.fingerprint/libc-3a3f945c75b80315/lib-libc" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/.fingerprint/libc-944fe2b84c8accab/dep-lib-libc" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/.fingerprint/libc-b08d648ca4332288/run-build-script-build-script-build" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/.fingerprint/rtsmart-std-7eb39632a26ff433/dep-lib-rtsmart_std" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/.fingerprint/rtsmart-std-7eb39632a26ff433/lib-rtsmart_std" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/.fingerprint/rtsmart-std-b62c82da308e52fc/lib-rtsmart_std" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/.fingerprint/rustc-std-workspace-core-0f41f893cbff5acf/invoked.timestamp" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/.fingerprint/rustc-std-workspace-core-0f41f893cbff5acf/lib-rustc_std_workspace_core.json" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/build/compiler_builtins-e947fcb632bf45af/out/outlined_atomics.rs" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/build/compiler_builtins-e947fcb632bf45af/output" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/build/compiler_builtins-e947fcb632bf45af/stderr" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/build/libc-b08d648ca4332288/invoked.timestamp" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/build/libc-b08d648ca4332288/root-output" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/deps/alloc-829e27846e9cf0cf.d" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/deps/file_test-e612eb1f28d9e0d7.10wvgl6y9eua3485.rcgu.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/deps/file_test-e612eb1f28d9e0d7.5fmbkfuuwg4loax3.rcgu.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/deps/liballoc-829e27846e9cf0cf.rlib" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/deps/librtsmart_std-7eb39632a26ff433.rmeta" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/deps/rtsmart_std-7eb39632a26ff433.d" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/incremental/file_test-py8rntu8378x/s-gwij4j6ory-1p0txd-dbbiclpzgqaqg31tju8auc07z/4y0skl14kpl0y3gy.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/incremental/libc-m45xf2t5alvo/s-gwhn8q8tfd-14sjj27-87ok65400rz3bx2tm4mhzy6z3/1kxnm9r494sq9uth.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwij4j0iw9-1pgr8uy-9yfkvq7rx0tmhj1ngrq30a0k8/14yxc5sf5ogpfr7l.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwij4j0iw9-1pgr8uy-9yfkvq7rx0tmhj1ngrq30a0k8/1mbbgfsruah25p89.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwij4j0iw9-1pgr8uy-9yfkvq7rx0tmhj1ngrq30a0k8/1sogsn7h83hbpkqg.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwij4j0iw9-1pgr8uy-9yfkvq7rx0tmhj1ngrq30a0k8/1vlv4p0ja174aiw4.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwij4j0iw9-1pgr8uy-9yfkvq7rx0tmhj1ngrq30a0k8/31v9h620gqld0mjx.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwij4j0iw9-1pgr8uy-9yfkvq7rx0tmhj1ngrq30a0k8/3bbxomxgd503t0h6.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwij4j0iw9-1pgr8uy-9yfkvq7rx0tmhj1ngrq30a0k8/3dbmnm06p1bh2uej.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwij4j0iw9-1pgr8uy-9yfkvq7rx0tmhj1ngrq30a0k8/3qr87wbqs17d39y4.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwij4j0iw9-1pgr8uy-9yfkvq7rx0tmhj1ngrq30a0k8/4rh1zd5p6lgo9jwh.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwij4j0iw9-1pgr8uy-9yfkvq7rx0tmhj1ngrq30a0k8/4tmtdvrqc7np9okw.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwij4j0iw9-1pgr8uy-9yfkvq7rx0tmhj1ngrq30a0k8/dewano67rrvajj4.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwij4j0iw9-1pgr8uy-9yfkvq7rx0tmhj1ngrq30a0k8/l4xz72rdoblb496.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/aarch64-unknown-rtsmart/debug/incremental/rtsmart_std-2t0o6osy6r22d/s-gwij4j0iw9-1pgr8uy-9yfkvq7rx0tmhj1ngrq30a0k8/p3q19pbdmke9aqg.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/.fingerprint/compiler_builtins-e87f3a75dd0ece95/build-script-build-script-build.json" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/.fingerprint/compiler_builtins-e87f3a75dd0ece95/dep-build-script-build-script-build" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/.fingerprint/darling-cf7e57e9e20d1690/lib-darling.json" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/.fingerprint/darling_macro-67acaabb0ce4fbe8/invoked.timestamp" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/.fingerprint/file_test-58726b65ce0a5150/invoked.timestamp" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/.fingerprint/file_test-ebdd7070b5c5e95f/invoked.timestamp" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/.fingerprint/ident_case-f1f82dfca14491bb/dep-lib-ident_case" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/.fingerprint/marco_main-87920eefd7a94c20/lib-marco_main" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/.fingerprint/marco_main-87920eefd7a94c20/lib-marco_main.json" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/.fingerprint/proc-macro2-696c862dd747ddd4/dep-lib-proc_macro2" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/.fingerprint/proc-macro2-8c3422a923e389b1/dep-build-script-build-script-build" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/.fingerprint/strsim-a2b7dd28172baa09/dep-lib-strsim" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/.fingerprint/syn-68033d7571c9b4ac/run-build-script-build-script-build" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/.fingerprint/syn-cb00863f18926885/lib-syn" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/.fingerprint/unicode-ident-f3c65a8ddaa69f2b/dep-lib-unicode_ident" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/build/proc-macro2-8c3422a923e389b1/build_script_build-8c3422a923e389b1.d" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/build/syn-e438821396825bbb/build_script_build-e438821396825bbb.d" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/deps/darling-cf7e57e9e20d1690.d" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/deps/ident_case-f1f82dfca14491bb.d" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/deps/libdarling-cf7e57e9e20d1690.rlib" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/deps/libdarling_core-0c213a96aa20d71a.rmeta" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/deps/libfnv-68f3a4f6444d45f5.rlib" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/deps/libident_case-f1f82dfca14491bb.rlib" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/deps/libmarco_main-87920eefd7a94c20.so" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/deps/libsyn-cb00863f18926885.rmeta" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/deps/proc_macro2-696c862dd747ddd4.d" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/deps/quote-49f8ef3ca04af641.d" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/deps/syn-cb00863f18926885.d" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwglvabw65-1aijwkz-by6d3mbi4f04a47c5d0pjc6z/13emvx26630qvvzl.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwglvabw65-1aijwkz-by6d3mbi4f04a47c5d0pjc6z/1a4y98i78biirwpq.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwglvabw65-1aijwkz-by6d3mbi4f04a47c5d0pjc6z/1d28km3htjqntbhj.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwglvabw65-1aijwkz-by6d3mbi4f04a47c5d0pjc6z/1h7bro666250vnis.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwglvabw65-1aijwkz-by6d3mbi4f04a47c5d0pjc6z/2389aor8aibpekzr.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwglvabw65-1aijwkz-by6d3mbi4f04a47c5d0pjc6z/2dsforoiomp9atec.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwglvabw65-1aijwkz-by6d3mbi4f04a47c5d0pjc6z/2j2zl6azj2u8pc8d.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwglvabw65-1aijwkz-by6d3mbi4f04a47c5d0pjc6z/30naxkbagymhbwml.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwglvabw65-1aijwkz-by6d3mbi4f04a47c5d0pjc6z/3b5c6q3hbg64udgk.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwglvabw65-1aijwkz-by6d3mbi4f04a47c5d0pjc6z/3gtf1fq5p8lvy8cz.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwglvabw65-1aijwkz-by6d3mbi4f04a47c5d0pjc6z/3vmegrodex2o2spx.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwglvabw65-1aijwkz-by6d3mbi4f04a47c5d0pjc6z/3xfbnge9hpy46y59.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwglvabw65-1aijwkz-by6d3mbi4f04a47c5d0pjc6z/3xst8xlo7y89z81c.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwglvabw65-1aijwkz-by6d3mbi4f04a47c5d0pjc6z/3z81tdox35fyuhi5.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwglvabw65-1aijwkz-by6d3mbi4f04a47c5d0pjc6z/4iqnvpvroftr5lua.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwglvabw65-1aijwkz-by6d3mbi4f04a47c5d0pjc6z/4mu5h9xwe2bpjqbr.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwglvabw65-1aijwkz-by6d3mbi4f04a47c5d0pjc6z/53q8quqrbkgsxwrj.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwglvabw65-1aijwkz-by6d3mbi4f04a47c5d0pjc6z/b6iew1ulsr1xi37.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwglvabw65-1aijwkz-by6d3mbi4f04a47c5d0pjc6z/erkulpg6j8ychlc.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwglvabw65-1aijwkz-by6d3mbi4f04a47c5d0pjc6z/wcxpjmf8ho6pedj.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/incremental/build_script_build-11tphhcke81o7/s-gwglvabw65-1aijwkz-by6d3mbi4f04a47c5d0pjc6z/x8hen6sk2vbnyav.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwij31xt1i-n8o2wh-3802kfejws314zxzxv34q10za/15wke4fonh20fzca.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwij31xt1i-n8o2wh-3802kfejws314zxzxv34q10za/3sb3cp7xj2ezcdnd.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwij31xt1i-n8o2wh-3802kfejws314zxzxv34q10za/4b865kzbtpkidc7r.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwij31xt1i-n8o2wh.lock" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/sysroot/lib/rustlib/x86_64-unknown-linux-gnu/.sentinel" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/examples/example6/file_test/target/sysroot/lib/rustlib/x86_64-unknown-linux-gnu/lib/compiler_builtins-6b7483ca61df3612.d" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/worklog/img/2024.04.22-2024.04.29-work-log/thread_test.png" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/worklog/img/2024.04.30-2024.05.06-work-log/mutex_test.png" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/worklog/img/2024.05.07-2024.05.14-work-log/read_test.png" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/worklog/markdown/2024.04.22-2024.04.29-work-log.md" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/worklog/markdown/2024.04.30-2024.05.06-work-log.md" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/worklog/markdown/2024.05.07-2024.05.14-work-log.md" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/worklog/markdown/2024.05.15-2024.05.22-work-log.md" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/worklog/pdf/2024.05.07-2024.05.14-work-log.pdf" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/examples/example2/hello/src/main.rs" beforeDir="false" afterPath="$PROJECT_DIR$/examples/example2/hello/src/main.rs" afterDir="false" /> <change beforePath="$PROJECT_DIR$/examples/example3/thread_test/src/main.rs" beforeDir="false" afterPath="$PROJECT_DIR$/examples/example3/thread_test/src/main.rs" afterDir="false" /> <change beforePath="$PROJECT_DIR$/examples/example4/mutex_test/src/main.rs" beforeDir="false" afterPath="$PROJECT_DIR$/examples/example4/mutex_test/src/main.rs" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/examples/example5/read_test/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/examples/example5/read_test/.idea/workspace.xml" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/examples/example5/read_test/src/main.rs" beforeDir="false" afterPath="$PROJECT_DIR$/examples/example5/read_test/src/main.rs" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/examples/example6/file_test/src/main.rs" beforeDir="false" afterPath="$PROJECT_DIR$/examples/example6/file_test/src/main.rs" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/marco_main/src/lib.rs" beforeDir="false" afterPath="$PROJECT_DIR$/marco_main/src/lib.rs" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/rtsmart-std/src/api/thread.rs" beforeDir="false" afterPath="$PROJECT_DIR$/rtsmart-std/src/api/thread.rs" afterDir="false" /> <change beforePath="$PROJECT_DIR$/rtsmart-std/src/fs.rs" beforeDir="false" afterPath="$PROJECT_DIR$/rtsmart-std/src/fs.rs" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/rtsmart-std/src/lib.rs" beforeDir="false" afterPath="$PROJECT_DIR$/rtsmart-std/src/lib.rs" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/开呿–‡æ¡£.md" beforeDir="false" afterPath="$PROJECT_DIR$/开呿–‡æ¡£.md" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/rtsmart-std/src/mutex.rs" beforeDir="false" afterPath="$PROJECT_DIR$/rtsmart-std/src/mutex.rs" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/rtsmart-std/src/stdin.rs" beforeDir="false" afterPath="$PROJECT_DIR$/rtsmart-std/src/stdin.rs" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/rtsmart-std/src/thread.rs" beforeDir="false" afterPath="$PROJECT_DIR$/rtsmart-std/src/thread.rs" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/worklog/markdown/2024.04.08-2024.04.14-work-log.md" beforeDir="false" afterPath="$PROJECT_DIR$/worklog/markdown/2024.04.08-2024.04.14-work-log.md" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/worklog/markdown/2024.04.15-2024.04.21-work-log.md" beforeDir="false" afterPath="$PROJECT_DIR$/worklog/markdown/2024.04.15-2024.04.21-work-log.md" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/开呿–‡æ¡£.md" beforeDir="false" /> </list> <option name="SHOW_DIALOG" value="false" /> <option name="HIGHLIGHT_CONFLICTS" value="true" /> @@ -63,39 +394,40 @@ <option name="hideEmptyMiddlePackages" value="true" /> <option name="showLibraryContents" value="true" /> </component> - <component name="PropertiesComponent">{ - "keyToString": { - "ASKED_ADD_EXTERNAL_FILES": "true", - "RunOnceActivity.OpenProjectViewOnStart": "true", - "RunOnceActivity.ShowReadmeOnStart": "true", - "RunOnceActivity.cidr.known.project.marker": "true", - "RunOnceActivity.readMode.enableVisualFormatting": "true", - "RunOnceActivity.rust.reset.selective.auto.import": "true", - "cf.first.check.clang-format": "false", - "cidr.known.project.marker": "true", - "git-widget-placeholder": "master", - "last_opened_file_path": "/home/diandianjun/os-educg/project2210132-226009/examples/example3/thread_test", - "node.js.detected.package.eslint": "true", - "node.js.detected.package.tslint": "true", - "node.js.selected.package.eslint": "(autodetect)", - "node.js.selected.package.tslint": "(autodetect)", - "nodejs_package_manager_path": "npm", - "org.rust.cargo.project.model.PROJECT_DISCOVERY": "true", - "org.rust.cargo.project.model.impl.CargoExternalSystemProjectAware.subscribe.first.balloon": "", - "org.rust.first.attach.projects": "true", - "settings.editor.selected.configurable": "advanced.settings", - "vue.rearranger.settings.migration": "true" + <component name="PropertiesComponent"><![CDATA[{ + "keyToString": { + "ASKED_ADD_EXTERNAL_FILES": "true", + "RunOnceActivity.OpenProjectViewOnStart": "true", + "RunOnceActivity.ShowReadmeOnStart": "true", + "RunOnceActivity.cidr.known.project.marker": "true", + "RunOnceActivity.readMode.enableVisualFormatting": "true", + "RunOnceActivity.rust.reset.selective.auto.import": "true", + "cf.first.check.clang-format": "false", + "cidr.known.project.marker": "true", + "git-widget-placeholder": "master", + "last_opened_file_path": "/home/diandianjun/os-educg/project2210132-226009/examples/example6/file_test", + "node.js.detected.package.eslint": "true", + "node.js.detected.package.tslint": "true", + "node.js.selected.package.eslint": "(autodetect)", + "node.js.selected.package.tslint": "(autodetect)", + "nodejs_package_manager_path": "npm", + "org.rust.cargo.project.model.PROJECT_DISCOVERY": "true", + "org.rust.cargo.project.model.impl.CargoExternalSystemProjectAware.subscribe.first.balloon": "", + "org.rust.first.attach.projects": "true", + "settings.editor.selected.configurable": "advanced.settings", + "vue.rearranger.settings.migration": "true" } -}</component> +}]]></component> <component name="RecentsManager"> <key name="CopyFile.RECENT_KEYS"> + <recent name="$PROJECT_DIR$/examples/example6/file_test" /> + <recent name="$PROJECT_DIR$/examples/example5/read_test" /> + <recent name="$PROJECT_DIR$/examples/example4" /> <recent name="$PROJECT_DIR$/examples/example3/thread_test" /> <recent name="$PROJECT_DIR$/examples/example2/hello" /> - <recent name="$PROJECT_DIR$/examples/example2" /> - <recent name="$PROJECT_DIR$/rust" /> - <recent name="$PROJECT_DIR$/rust/library/std" /> </key> <key name="MoveFile.RECENT_KEYS"> + <recent name="$PROJECT_DIR$/examples/example4/mutex_test" /> <recent name="$PROJECT_DIR$/examples/example1" /> </key> </component> @@ -156,7 +488,10 @@ <workItem from="1716546857819" duration="3745000" /> <workItem from="1716603609544" duration="7000" /> <workItem from="1716617657133" duration="87000" /> - <workItem from="1716634089147" duration="4754000" /> + <workItem from="1716634089147" duration="14387000" /> + <workItem from="1716667936605" duration="2726000" /> + <workItem from="1716687697769" duration="3009000" /> + <workItem from="1716705063818" duration="137000" /> </task> <task id="LOCAL-00001" summary="update work log"> <option name="closed" value="true" /> @@ -286,7 +621,15 @@ <option name="project" value="LOCAL" /> <updated>1716617678842</updated> </task> - <option name="localTasksCounter" value="17" /> + <task id="LOCAL-00017" summary="update develop document and rt-smart-std"> + <option name="closed" value="true" /> + <created>1716652674566</created> + <option name="number" value="00017" /> + <option name="presentableId" value="LOCAL-00017" /> + <option name="project" value="LOCAL" /> + <updated>1716652674566</updated> + </task> + <option name="localTasksCounter" value="18" /> <servers /> </component> <component name="TypeScriptGeneratedFilesManager"> @@ -317,7 +660,8 @@ <MESSAGE value="update thread, mutex, stdin, fs module" /> <MESSAGE value="update develop document" /> <MESSAGE value="update thread and mutex module" /> - <option name="LAST_COMMIT_MESSAGE" value="update thread and mutex module" /> + <MESSAGE value="update develop document and rt-smart-std" /> + <option name="LAST_COMMIT_MESSAGE" value="update develop document and rt-smart-std" /> </component> <component name="XSLT-Support.FileAssociations.UIState"> <expand /> diff --git a/examples/example2/hello/.idea/.gitignore b/examples/example2/hello/.idea/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..13566b81b018ad684f3a35fee301741b2734c8f4 --- /dev/null +++ b/examples/example2/hello/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/examples/example2/hello/.idea/hello.iml b/examples/example2/hello/.idea/hello.iml new file mode 100644 index 0000000000000000000000000000000000000000..cf84ae4a69877a117dad3f555c9d8ebf05a4fc20 --- /dev/null +++ b/examples/example2/hello/.idea/hello.iml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module type="EMPTY_MODULE" version="4"> + <component name="NewModuleRootManager"> + <content url="file://$MODULE_DIR$"> + <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /> + <excludeFolder url="file://$MODULE_DIR$/target" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + </component> +</module> \ No newline at end of file diff --git a/examples/example2/hello/src/main.rs b/examples/example2/hello/src/main.rs index a267e2647321b20184ffdf00ec060aa715238b88..7bebc2b1ac8ffc2eef523dd677758a343a8dcc86 100644 --- a/examples/example2/hello/src/main.rs +++ b/examples/example2/hello/src/main.rs @@ -1,10 +1,12 @@ #![no_std] #![no_main] +extern crate alloc; + use marco_main::marco_main_use; use rtsmart_std::println; #[marco_main_use(appname = "rust_hello", desc = "Rust example2 app.")] -fn main(_param: Param) { +fn main() { println!("hello world"); } diff --git a/examples/example3/thread_test/.idea/.gitignore b/examples/example3/thread_test/.idea/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..13566b81b018ad684f3a35fee301741b2734c8f4 --- /dev/null +++ b/examples/example3/thread_test/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/examples/example3/thread_test/.idea/modules.xml b/examples/example3/thread_test/.idea/modules.xml new file mode 100644 index 0000000000000000000000000000000000000000..84f5d1280bbcb2da5bfb4b0f2b654f7b2123d663 --- /dev/null +++ b/examples/example3/thread_test/.idea/modules.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ProjectModuleManager"> + <modules> + <module fileurl="file://$PROJECT_DIR$/.idea/thread_test.iml" filepath="$PROJECT_DIR$/.idea/thread_test.iml" /> + </modules> + </component> +</project> \ No newline at end of file diff --git a/examples/example3/thread_test/.idea/thread_test.iml b/examples/example3/thread_test/.idea/thread_test.iml new file mode 100644 index 0000000000000000000000000000000000000000..cf84ae4a69877a117dad3f555c9d8ebf05a4fc20 --- /dev/null +++ b/examples/example3/thread_test/.idea/thread_test.iml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module type="EMPTY_MODULE" version="4"> + <component name="NewModuleRootManager"> + <content url="file://$MODULE_DIR$"> + <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /> + <excludeFolder url="file://$MODULE_DIR$/target" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + </component> +</module> \ No newline at end of file diff --git a/examples/example3/thread_test/.idea/vcs.xml b/examples/example3/thread_test/.idea/vcs.xml new file mode 100644 index 0000000000000000000000000000000000000000..c2365ab11f9ba6b763735c8fd976420234bb3521 --- /dev/null +++ b/examples/example3/thread_test/.idea/vcs.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="VcsDirectoryMappings"> + <mapping directory="$PROJECT_DIR$/../../.." vcs="Git" /> + </component> +</project> \ No newline at end of file diff --git a/examples/example3/thread_test/src/main.rs b/examples/example3/thread_test/src/main.rs index c833eb865a8806a65fc097e2ef2ce8a90543f79a..cb11ea3292bb2ff856ee7901ebdc1118359fdd88 100644 --- a/examples/example3/thread_test/src/main.rs +++ b/examples/example3/thread_test/src/main.rs @@ -10,7 +10,7 @@ use rtsmart_std::{println, time}; use rtsmart_std::thread::Thread; #[marco_main_use(appname = "rust_thread_test", desc = "Rust example3 app.")] -fn main(_param: Param) { +fn main() { println!("Hello world"); let run1 = || loop { time::sleep(Duration::new(1, 0)); diff --git a/examples/example4/mutex_test/.gitignore b/examples/example4/mutex_test/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ea8c4bf7f35f6f77f75d92ad8ce8349f6e81ddba --- /dev/null +++ b/examples/example4/mutex_test/.gitignore @@ -0,0 +1 @@ +/target diff --git a/examples/example4/mutex_test/.idea/vcs.xml b/examples/example4/mutex_test/.idea/vcs.xml new file mode 100644 index 0000000000000000000000000000000000000000..c2365ab11f9ba6b763735c8fd976420234bb3521 --- /dev/null +++ b/examples/example4/mutex_test/.idea/vcs.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="VcsDirectoryMappings"> + <mapping directory="$PROJECT_DIR$/../../.." vcs="Git" /> + </component> +</project> \ No newline at end of file diff --git a/examples/example4/mutex_test/src/main.rs b/examples/example4/mutex_test/src/main.rs index 9a9dc35619933dc78aa34ef25c22ff0ba8150ac2..ec1efeabad894325d97397164ef2dc31f4d207de 100644 --- a/examples/example4/mutex_test/src/main.rs +++ b/examples/example4/mutex_test/src/main.rs @@ -1,7 +1,6 @@ #![no_std] #![no_main] - extern crate alloc; use alloc::sync::Arc; @@ -12,15 +11,13 @@ use rtsmart_std::{println, thread, time}; use rtsmart_std::mutex::Mutex; #[marco_main_use(appname = "rust_mutex_test", desc = "Rust example4 app.")] -fn main(_param: Param) { +fn main() { let counter = Arc::new(Mutex::new(0).unwrap()); let run = move || loop { time::sleep(Duration::new(1, 0)); - { - let mut c = counter.lock().unwrap(); - *c += 1; - println!("c :{}", *c); - } + let mut c = counter.lock().unwrap(); + *c += 1; + println!("c :{}", *c); }; let t1 = thread::Thread::new() @@ -34,4 +31,5 @@ fn main(_param: Param) { time::sleep(Duration::new(5, 0)); t1.delete().unwrap(); t2.delete().unwrap(); + println!("Thread1 and Thread2 are deleted"); } diff --git a/examples/example5/read_test/.gitignore b/examples/example5/read_test/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ea8c4bf7f35f6f77f75d92ad8ce8349f6e81ddba --- /dev/null +++ b/examples/example5/read_test/.gitignore @@ -0,0 +1 @@ +/target diff --git a/examples/example5/read_test/.idea/read_test.iml b/examples/example5/read_test/.idea/read_test.iml new file mode 100644 index 0000000000000000000000000000000000000000..cf84ae4a69877a117dad3f555c9d8ebf05a4fc20 --- /dev/null +++ b/examples/example5/read_test/.idea/read_test.iml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module type="EMPTY_MODULE" version="4"> + <component name="NewModuleRootManager"> + <content url="file://$MODULE_DIR$"> + <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /> + <excludeFolder url="file://$MODULE_DIR$/target" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + </component> +</module> \ No newline at end of file diff --git a/examples/example5/read_test/.idea/workspace.xml b/examples/example5/read_test/.idea/workspace.xml index 4cc0adffdaad40dfa506b338354ff2060c978c95..24f0ed82760afdfd9c8595cc614200bcbc57987e 100644 --- a/examples/example5/read_test/.idea/workspace.xml +++ b/examples/example5/read_test/.idea/workspace.xml @@ -8,16 +8,100 @@ </component> <component name="ChangeListManager"> <list default="true" id="6775b271-a8c3-445a-a9fa-a5724f86fb0b" name="Changes" comment=""> - <change afterPath="$PROJECT_DIR$/../../../rtsmart-std/src/api/mutex.rs" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/aarch64-unknown-rtsmart/debug/deps/mutex_test-56c4e296fa52f1fb" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/10g6hsuglium18im.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/14pjlhbtwr0be3ym.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/15wke4fonh20fzca.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/17wmix4j37dd28la.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/1byjvouqmh99enu2.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/1ojprbeka5r991oa.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/1pj0jiazpnaj6nao.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/1vni8zfy0zwdmgd7.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/2640uq1oxxifr3cs.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/2809co28f61nbmxf.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/2dia761sxq74wj23.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/2j6f8oruvhr0u551.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/2ootw2ncspo9jtqg.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/2p2sqrytq1fk3zyg.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/2r9ehbjv1ju6kyvc.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/3fs7de79hwfngc73.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/3mcd5qlzol3w1exc.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/3pcntd05polbwed1.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/3sb3cp7xj2ezcdnd.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/3v0irnhosb9j0agq.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/46phtuzx9zz79ds4.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/4b865kzbtpkidc7r.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/4l0kscn413j5xjeb.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/4qs0kgovnj3ulsxk.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/4s3v9d07im9jyjpb.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/4vqd4rw95jlkpj94.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/4z6wpiafg08ctpqp.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/5g8qrwd6qyo5kwff.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/dep-graph.bin" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/of8y7zzky0sgwfv.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/oj3lpnxuziqwmna.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/ptv1gapqedfm7ry.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/query-cache.bin" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey-3802kfejws314zxzxv34q10za/work-products.bin" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../example4/mutex_test/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi3vo4vc1-1oqukey.lock" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/10g6hsuglium18im.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/14pjlhbtwr0be3ym.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/15wke4fonh20fzca.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/17wmix4j37dd28la.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/1byjvouqmh99enu2.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/1ojprbeka5r991oa.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/1pj0jiazpnaj6nao.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/1vni8zfy0zwdmgd7.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/2640uq1oxxifr3cs.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/2809co28f61nbmxf.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/2dia761sxq74wj23.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/2j6f8oruvhr0u551.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/2ootw2ncspo9jtqg.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/2p2sqrytq1fk3zyg.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/2r9ehbjv1ju6kyvc.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/3fs7de79hwfngc73.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/3mcd5qlzol3w1exc.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/3pcntd05polbwed1.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/3sb3cp7xj2ezcdnd.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/3v0irnhosb9j0agq.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/46phtuzx9zz79ds4.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/4b865kzbtpkidc7r.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/4l0kscn413j5xjeb.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/4qs0kgovnj3ulsxk.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/4s3v9d07im9jyjpb.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/4vqd4rw95jlkpj94.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/4z6wpiafg08ctpqp.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/5g8qrwd6qyo5kwff.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/dep-graph.bin" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/of8y7zzky0sgwfv.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/oj3lpnxuziqwmna.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/ptv1gapqedfm7ry.o" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/query-cache.bin" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk-3802kfejws314zxzxv34q10za/work-products.bin" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/target/debug/incremental/marco_main-1bxhn41epb9xe/s-gwi9eaem2x-qs7tpk.lock" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../../worklog/img/2024.04.22-2024.04.29-work-log/thread_test.png" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../../worklog/img/2024.04.30-2024.05.06-work-log/mutex_test.png" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../../worklog/img/2024.05.07-2024.05.14-work-log/read_test.png" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../../worklog/markdown/2024.04.22-2024.04.29-work-log.md" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../../worklog/markdown/2024.04.30-2024.05.06-work-log.md" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../../worklog/markdown/2024.05.07-2024.05.14-work-log.md" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/../../../worklog/markdown/2024.05.15-2024.05.22-work-log.md" afterDir="false" /> <change beforePath="$PROJECT_DIR$/../../../.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../../../.idea/workspace.xml" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/../../example2/hello/src/main.rs" beforeDir="false" afterPath="$PROJECT_DIR$/../../example2/hello/src/main.rs" afterDir="false" /> <change beforePath="$PROJECT_DIR$/../../example3/thread_test/src/main.rs" beforeDir="false" afterPath="$PROJECT_DIR$/../../example3/thread_test/src/main.rs" afterDir="false" /> <change beforePath="$PROJECT_DIR$/../../example4/mutex_test/src/main.rs" beforeDir="false" afterPath="$PROJECT_DIR$/../../example4/mutex_test/src/main.rs" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/../../../rtsmart-std/src/api/mod.rs" beforeDir="false" afterPath="$PROJECT_DIR$/../../../rtsmart-std/src/api/mod.rs" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/src/main.rs" beforeDir="false" afterPath="$PROJECT_DIR$/src/main.rs" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/../../example6/file_test/src/main.rs" beforeDir="false" afterPath="$PROJECT_DIR$/../../example6/file_test/src/main.rs" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/../../../marco_main/src/lib.rs" beforeDir="false" afterPath="$PROJECT_DIR$/../../../marco_main/src/lib.rs" afterDir="false" /> <change beforePath="$PROJECT_DIR$/../../../rtsmart-std/src/api/thread.rs" beforeDir="false" afterPath="$PROJECT_DIR$/../../../rtsmart-std/src/api/thread.rs" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/../../../rtsmart-std/src/fs.rs" beforeDir="false" afterPath="$PROJECT_DIR$/../../../rtsmart-std/src/fs.rs" afterDir="false" /> <change beforePath="$PROJECT_DIR$/../../../rtsmart-std/src/mutex.rs" beforeDir="false" afterPath="$PROJECT_DIR$/../../../rtsmart-std/src/mutex.rs" afterDir="false" /> <change beforePath="$PROJECT_DIR$/../../../rtsmart-std/src/stdin.rs" beforeDir="false" afterPath="$PROJECT_DIR$/../../../rtsmart-std/src/stdin.rs" afterDir="false" /> <change beforePath="$PROJECT_DIR$/../../../rtsmart-std/src/thread.rs" beforeDir="false" afterPath="$PROJECT_DIR$/../../../rtsmart-std/src/thread.rs" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/../../../worklog/markdown/2024.04.08-2024.04.14-work-log.md" beforeDir="false" afterPath="$PROJECT_DIR$/../../../worklog/markdown/2024.04.08-2024.04.14-work-log.md" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/../../../worklog/markdown/2024.04.15-2024.04.21-work-log.md" beforeDir="false" afterPath="$PROJECT_DIR$/../../../worklog/markdown/2024.04.15-2024.04.21-work-log.md" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/../../../开呿–‡æ¡£.md" beforeDir="false" afterPath="$PROJECT_DIR$/../../../开呿–‡æ¡£.md" afterDir="false" /> </list> <option name="SHOW_DIALOG" value="false" /> <option name="HIGHLIGHT_CONFLICTS" value="true" /> @@ -94,6 +178,8 @@ <workItem from="1716533670244" duration="761000" /> <workItem from="1716536221896" duration="44000" /> <workItem from="1716615379621" duration="2224000" /> + <workItem from="1716665834288" duration="1520000" /> + <workItem from="1716693229559" duration="725000" /> </task> <servers /> </component> diff --git a/examples/example5/read_test/src/main.rs b/examples/example5/read_test/src/main.rs index db20d60db12667b086fe0b4764bc0cfa794c66ad..0ba06bd1d4264a18b3e1de03c3fe8f72cec991a0 100644 --- a/examples/example5/read_test/src/main.rs +++ b/examples/example5/read_test/src/main.rs @@ -8,7 +8,7 @@ use rtsmart_std::println; use rtsmart_std::stdin::InputStream; #[marco_main_use(appname = "rust_read_test", desc = "Rust example5 app.")] -fn main(_param: Param) { +fn main() { let mut input = InputStream::new(); let line = input.read_line().unwrap(); println!("{}", line); diff --git a/examples/example6/file_test/.gitignore b/examples/example6/file_test/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ea8c4bf7f35f6f77f75d92ad8ce8349f6e81ddba --- /dev/null +++ b/examples/example6/file_test/.gitignore @@ -0,0 +1 @@ +/target diff --git a/examples/example6/file_test/.idea/file_test.iml b/examples/example6/file_test/.idea/file_test.iml new file mode 100644 index 0000000000000000000000000000000000000000..cf84ae4a69877a117dad3f555c9d8ebf05a4fc20 --- /dev/null +++ b/examples/example6/file_test/.idea/file_test.iml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module type="EMPTY_MODULE" version="4"> + <component name="NewModuleRootManager"> + <content url="file://$MODULE_DIR$"> + <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /> + <excludeFolder url="file://$MODULE_DIR$/target" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + </component> +</module> \ No newline at end of file diff --git a/examples/example6/file_test/.idea/modules.xml b/examples/example6/file_test/.idea/modules.xml new file mode 100644 index 0000000000000000000000000000000000000000..8f8273312c411c18d79a7a5a670ef941a27becde --- /dev/null +++ b/examples/example6/file_test/.idea/modules.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ProjectModuleManager"> + <modules> + <module fileurl="file://$PROJECT_DIR$/.idea/file_test.iml" filepath="$PROJECT_DIR$/.idea/file_test.iml" /> + </modules> + </component> +</project> \ No newline at end of file diff --git a/examples/example6/file_test/.idea/vcs.xml b/examples/example6/file_test/.idea/vcs.xml new file mode 100644 index 0000000000000000000000000000000000000000..c2365ab11f9ba6b763735c8fd976420234bb3521 --- /dev/null +++ b/examples/example6/file_test/.idea/vcs.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="VcsDirectoryMappings"> + <mapping directory="$PROJECT_DIR$/../../.." vcs="Git" /> + </component> +</project> \ No newline at end of file diff --git a/examples/example6/file_test/src/main.rs b/examples/example6/file_test/src/main.rs index 067b7fc67d3767772cec1dc8219dcbd03109b5b0..9ab00b421be9e9366e4e086a97fd04ed5b2bb9d5 100644 --- a/examples/example6/file_test/src/main.rs +++ b/examples/example6/file_test/src/main.rs @@ -8,7 +8,7 @@ use marco_main::marco_main_use; use rtsmart_std::{fs, println}; #[marco_main_use(appname = "rust_file_test", desc = "Rust example6 app.")] -fn main(_param: Param) { +fn main() { let mut res_file = fs::OpenOptions::new() .read(true) .write(true) diff --git a/marco_main/src/lib.rs b/marco_main/src/lib.rs index 7c43ac2f14cfe61b314e030ed2286b4bafe8c8ea..07033d5319ee4e56207efd91d91af2ad05256f5c 100644 --- a/marco_main/src/lib.rs +++ b/marco_main/src/lib.rs @@ -44,7 +44,6 @@ pub fn marco_main_use(args: TokenStream, input: TokenStream) -> TokenStream { && f.sig.asyncness.is_none() && f.vis == Visibility::Inherited && f.sig.abi.is_none() - && f.sig.inputs.len() == 1 && f.sig.generics.params.is_empty() && f.sig.generics.where_clause.is_none() && f.sig.variadic.is_none() @@ -55,7 +54,7 @@ pub fn marco_main_use(args: TokenStream, input: TokenStream) -> TokenStream { if !valid_signature { return parse::Error::new( f.span(), - "`#[entry]` function must have signature `fn(arg: vec::IntoIter<&[u8]>)`", + "`#[entry]` function must have signature `fn()`", ) .to_compile_error() .into(); diff --git a/rtsmart-std/src/api/thread.rs b/rtsmart-std/src/api/thread.rs index c6cc7a1d916020807f936df529b739f14ab6b3a7..bb1730ab1807e6a79c23ca56257ce44df3b9a469 100644 --- a/rtsmart-std/src/api/thread.rs +++ b/rtsmart-std/src/api/thread.rs @@ -2,31 +2,6 @@ use alloc::ffi::CString; use core::ptr; use libc::{c_char, c_void, pthread_t, rt_err_t, rt_thread_create, rt_thread_delete, rt_thread_mdelay, rt_thread_self, rt_thread_startup, rt_thread_t}; -// pub fn get_pid() -> i32 { -// unsafe { libc::getpid() } -// } -// -// pub fn get_tid() -> pthread_t { -// unsafe { libc::pthread_self() } -// } -// -// pub fn thread_create( -// thread: *mut pthread_t, -// attr: *const libc::pthread_attr_t, -// start_routine: extern "C" fn(*mut libc::c_void) -> *mut libc::c_void, -// arg: *mut libc::c_void, -// ) -> i32 { -// unsafe { libc::pthread_create(thread, attr, start_routine, arg) } -// } -// -// pub fn thread_join(thread: pthread_t, retval: *mut *mut libc::c_void) -> i32 { -// unsafe { libc::pthread_join(thread, retval) } -// } -// -// pub fn thread_exit(retval: *mut libc::c_void) -> ! { -// unsafe { libc::pthread_exit(retval) } -// } - pub type ThreadEntry = extern "C" fn(parameter: *mut c_void); pub fn thread_create( diff --git a/rtsmart-std/src/fs.rs b/rtsmart-std/src/fs.rs index 443334b7003fb213ae2f78f738b71d048496b88a..f8ace045428b8d49f4cd28de7ada93a26423392e 100644 --- a/rtsmart-std/src/fs.rs +++ b/rtsmart-std/src/fs.rs @@ -162,15 +162,6 @@ impl File { } } - pub fn sync_all(&self) -> RTResult<()> { - let n = unsafe { libc::fsync(self.fd) }; - if n < 0 { - Err(FileSyncErr) - } else { - Ok(()) - } - } - pub fn close(&self) -> RTResult<()> { let n = unsafe { libc::close(self.fd) }; if n < 0 { diff --git a/rtsmart-std/src/mutex.rs b/rtsmart-std/src/mutex.rs index 69cd676cb96521cdbfe5fbc494bf218fadddaa78..2e3de37321236c745b3b8bae9ab194049f12a01b 100644 --- a/rtsmart-std/src/mutex.rs +++ b/rtsmart-std/src/mutex.rs @@ -3,7 +3,7 @@ use core::ops::{Deref, DerefMut}; use libc::rt_mutex_t; -use crate::api::mutex::{mutex_create, mutex_delete, mutex_take}; +use crate::api::mutex::{mutex_create, mutex_delete, mutex_release, mutex_take}; use crate::RTTError; unsafe impl<T: Send> Send for Mutex<T> {} @@ -20,6 +20,20 @@ pub struct MutexGuard<'a, T: Sized> { data: &'a UnsafeCell<T>, } +impl <'a, T> MutexGuard<'a, T> { + pub fn new(mutex: &'a rt_mutex_t, data: &'a UnsafeCell<T>) -> Self { + MutexGuard { + mutex, + data, + } + } + + pub fn release(&self) { + let mutex = self.mutex as *const _ as *mut _; + mutex_release(mutex); + } +} + impl <'a, T> Deref for MutexGuard<'a, T> { type Target = T; @@ -31,7 +45,7 @@ impl <'a, T> Deref for MutexGuard<'a, T> { impl <'a, T> Drop for MutexGuard<'a, T> { fn drop(&mut self) { let mutex = self.mutex as *const _ as *mut _; - mutex_delete(mutex); + mutex_release(mutex); } } @@ -57,7 +71,7 @@ impl<T> Mutex<T> { } pub fn try_lock(&self) -> Result<MutexGuard<T>, RTTError> { - let ret = unsafe { mutex_take(self.mutex, 0) }; + let ret = mutex_take(self.mutex, 0); if ret != 0 { return Err(RTTError::MutexTakeTimeout); } @@ -68,7 +82,7 @@ impl<T> Mutex<T> { } pub fn lock(&self) -> Result<MutexGuard<T>, RTTError> { - let ret = unsafe { mutex_take(self.mutex, -1) }; + let ret = mutex_take(self.mutex, -1); if ret != 0 { return Err(RTTError::MutexTakeTimeout); } @@ -77,4 +91,9 @@ impl<T> Mutex<T> { data: &self.data, }) } + + pub fn delete(&self) { + let mutex = self.mutex as *const _ as *mut _; + mutex_delete(mutex); + } } \ No newline at end of file diff --git a/rtsmart-std/src/stdin.rs b/rtsmart-std/src/stdin.rs index bd289dbdfa2c20d4f1afba89b16425a968c5195a..ff3b394ae3e845aa84be9d9e063a81a9943f0a0e 100644 --- a/rtsmart-std/src/stdin.rs +++ b/rtsmart-std/src/stdin.rs @@ -38,10 +38,21 @@ impl InputStream { } pub fn read_line(&mut self) -> Result<String, RTTError> { - let mut buf = [0; 128]; - let n = self.stdin.read(&mut buf)?; - let string = unsafe { String::from_utf8_unchecked(buf.to_vec()) }; - Ok(string) + let mut buf = [0u8; 1024]; + let mut s = String::new(); + loop { + let n = self.stdin.read(&mut buf)?; + if n == 0 { + break; + } + s.push_str(&String::from_utf8_lossy(&buf[..n])); + if n < buf.len() { + break; + } else { + buf = [0u8; 1024]; + } + } + Ok(s) } } diff --git a/rtsmart-std/src/thread.rs b/rtsmart-std/src/thread.rs index 9b2ad3191fc1ab9d2e8c2e395438131b379f5fdb..607048c8c296304cc6e2be6e81d3057de407d338 100644 --- a/rtsmart-std/src/thread.rs +++ b/rtsmart-std/src/thread.rs @@ -5,7 +5,7 @@ use core::mem; use libc::{c_void, rt_thread_t}; use crate::{RTResult, RTTError}; -use crate::api::thread::{thread_create, thread_delete, thread_startup}; +use crate::api::thread::{thread_create, thread_delete, thread_startup, thread_m_delay, thread_self}; use crate::RTTError::ThreadStartupErr; pub struct ThreadBuilder { @@ -114,7 +114,7 @@ impl Thread { return ret; } - fn _startup(th: rt_thread_t) -> Result<(), RTTError> { + fn _startup(th: rt_thread_t) -> RTResult<()> { let ret = thread_startup(th); return if ret == 0 { Ok(()) @@ -131,4 +131,21 @@ impl Thread { Err(ThreadStartupErr) } } + + pub fn delay(ms: i32) -> RTResult<()> { + let ret = thread_m_delay(ms); + if ret == 0 { + Ok(()) + } else { + Err(ThreadStartupErr) + } + } + + pub fn self_() -> Option<Thread> { + thread_self().map(Thread) + } + + pub fn raw(&self) -> rt_thread_t { + self.0 + } } diff --git a/worklog/img/2024.04.22-2024.04.29-work-log/thread_test.png b/worklog/img/2024.04.22-2024.04.29-work-log/thread_test.png new file mode 100644 index 0000000000000000000000000000000000000000..a47b98080a4216dcf85bba94bb792484e77959df Binary files /dev/null and b/worklog/img/2024.04.22-2024.04.29-work-log/thread_test.png differ diff --git a/worklog/img/2024.04.30-2024.05.06-work-log/mutex_test.png b/worklog/img/2024.04.30-2024.05.06-work-log/mutex_test.png new file mode 100644 index 0000000000000000000000000000000000000000..0a5959cdabd2746aa7e4b7000b2076ea096dec2f Binary files /dev/null and b/worklog/img/2024.04.30-2024.05.06-work-log/mutex_test.png differ diff --git a/worklog/img/2024.05.07-2024.05.14-work-log/read_test.png b/worklog/img/2024.05.07-2024.05.14-work-log/read_test.png new file mode 100644 index 0000000000000000000000000000000000000000..e98dbeb213edb2695e31a0ecbfc2b66e4ae25182 Binary files /dev/null and b/worklog/img/2024.05.07-2024.05.14-work-log/read_test.png differ diff --git a/worklog/img/2024.05.15-2024.05.22-work-log/file_test1.png b/worklog/img/2024.05.15-2024.05.22-work-log/file_test1.png new file mode 100644 index 0000000000000000000000000000000000000000..39cfb5e5222b24e8ffc0615f965eae3e014a34cf Binary files /dev/null and b/worklog/img/2024.05.15-2024.05.22-work-log/file_test1.png differ diff --git a/worklog/img/2024.05.15-2024.05.22-work-log/file_test2.png b/worklog/img/2024.05.15-2024.05.22-work-log/file_test2.png new file mode 100644 index 0000000000000000000000000000000000000000..55f1bb161972c453068865140e6b53deeac82e56 Binary files /dev/null and b/worklog/img/2024.05.15-2024.05.22-work-log/file_test2.png differ diff --git a/worklog/img/2024.05.15-2024.05.22-work-log/file_test3.png b/worklog/img/2024.05.15-2024.05.22-work-log/file_test3.png new file mode 100644 index 0000000000000000000000000000000000000000..7ed28e9fbdd28fd3546dcc1cddd201a1e123a7e3 Binary files /dev/null and b/worklog/img/2024.05.15-2024.05.22-work-log/file_test3.png differ diff --git a/worklog/img/2024.05.15-2024.05.22-work-log/file_test4.png b/worklog/img/2024.05.15-2024.05.22-work-log/file_test4.png new file mode 100644 index 0000000000000000000000000000000000000000..e4cf85b568ad06b29040be45826bd9e08f58d384 Binary files /dev/null and b/worklog/img/2024.05.15-2024.05.22-work-log/file_test4.png differ diff --git a/worklog/img/2024.05.15-2024.05.22-work-log/file_test5.png b/worklog/img/2024.05.15-2024.05.22-work-log/file_test5.png new file mode 100644 index 0000000000000000000000000000000000000000..c18711021a0c6ab37b9ad5fd4caf49bebed04bdd Binary files /dev/null and b/worklog/img/2024.05.15-2024.05.22-work-log/file_test5.png differ diff --git a/worklog/markdown/2024.04.08-2024.04.14-work-log.md b/worklog/markdown/2024.04.08-2024.04.14-work-log.md index c049e1c3b6c5e0befabcac608d0e03c597d929c8..531fe3e7ef398d4f4523da4d2e28f8e617f78788 100644 --- a/worklog/markdown/2024.04.08-2024.04.14-work-log.md +++ b/worklog/markdown/2024.04.08-2024.04.14-work-log.md @@ -151,7 +151,6 @@ let valid_signature = f.sig.constness.is_none() && f.sig.asyncness.is_none() && f.vis == Visibility::Inherited && f.sig.abi.is_none() - && f.sig.inputs.len() == 1 && f.sig.generics.params.is_empty() && f.sig.generics.where_clause.is_none() && f.sig.variadic.is_none() diff --git a/worklog/markdown/2024.04.15-2024.04.21-work-log.md b/worklog/markdown/2024.04.15-2024.04.21-work-log.md index 1bc55cb024ccb17deba263e6c379d7bd44140d47..987bba9f4c10eebd06a0f4beb50c4297477945b5 100644 --- a/worklog/markdown/2024.04.15-2024.04.21-work-log.md +++ b/worklog/markdown/2024.04.15-2024.04.21-work-log.md @@ -43,7 +43,7 @@ linker = "aarch64-linux-musleabi-gcc" use marco_main::marco_main_use; use rtsmart_std::println; -#[marco_main_use(appname = "rust_hello", desc = "Rust example5 app.")] +#[marco_main_use(appname = "rust_hello", desc = "Rust example2 app.")] fn main(_param: Param) { println!("hello world"); } diff --git a/worklog/markdown/2024.04.22-2024.04.29-work-log.md b/worklog/markdown/2024.04.22-2024.04.29-work-log.md new file mode 100644 index 0000000000000000000000000000000000000000..3137ace092a13ecf7c9cb64c097573c953742d7f --- /dev/null +++ b/worklog/markdown/2024.04.22-2024.04.29-work-log.md @@ -0,0 +1,327 @@ +# 2024.04.22-2024.04.29-work-log + +## 工作进展 + +本阶段完æˆçš„任务有:查看rt-threadä¸å…³äºŽçº¿ç¨‹ä½¿ç”¨çš„æŽ¥å£å‡½æ•°ï¼Œå°†å…¶åŠ å…¥åˆ°libcä¸ï¼ŒåŸºäºŽè¿™äº›å‡½æ•°ï¼Œç¼–写Rustä¸çš„thread库。编写的thread库与æ£å¸¸çš„Rustæ ‡å‡†åº“ä¸çš„thread的使用方法å¯èƒ½æœ‰ä¸€äº›å·®å¼‚,具体使用方法å¯ä»¥æŸ¥çœ‹example3çš„thread_test这一测试程åºã€‚ + +编写完æˆthread库åŽï¼Œæˆ‘们对其进行了测试。测试过程ä¸å‘现了许多写的有问题的地方,进行了修改,最终得到了一个能够æ£å¸¸è¿è¡Œå¤šä¸ªçº¿ç¨‹çš„æ ‡å‡†åº“版本。 + +`thread`库æä¾›äº†åˆ›å»ºå’Œç®¡ç†çº¿ç¨‹çš„功能,它å…è®¸ä½ åœ¨ä½ çš„ç¨‹åºä¸å¹¶å‘执行多个任务。线程是执行æµçš„基本å•元,它å…许程åºåœ¨ä¸åŒçš„上下文ä¸å¹¶å‘执行代ç ,从而实现并行性。使得Rust程åºèƒ½å¤Ÿæ›´åŠ é«˜æ•ˆåœ°åˆ©ç”¨è®¡ç®—èµ„æºï¼Œä»Žè€Œæé«˜ç¨‹åºçš„æ€§èƒ½å’Œå“应能力。 + +## 资料收集 + +RT-Thread编程手册:https://gitee.com/rtthread/rtthread-manual-doc + +RT-Thread APIå‚考手册:https://www.rt-thread.org/document/api/ + +Rustæ ‡å‡†åº“ï¼šhttps://rustwiki.org/zh-CN/std/thread/index.html + +## rt-threadä¸çº¿ç¨‹ç›¸å…³çš„api + +查看rt-thread的头文件`rtthread.h`å¯ä»¥æŸ¥åˆ°rt-thread的如下线程相关的api: + +```c +/* + * thread interface + */ +rt_err_t rt_thread_init(struct rt_thread *thread, + const char *name, + void (*entry)(void *parameter), + void *parameter, + void *stack_start, + rt_uint32_t stack_size, + rt_uint8_t priority, + rt_uint32_t tick); +rt_err_t rt_thread_detach(rt_thread_t thread); +rt_thread_t rt_thread_create(const char *name, + void (*entry)(void *parameter), + void *parameter, + rt_uint32_t stack_size, + rt_uint8_t priority, + rt_uint32_t tick); +rt_thread_t rt_thread_self(void); +rt_thread_t rt_thread_find(char *name); +rt_err_t rt_thread_startup(rt_thread_t thread); +rt_err_t rt_thread_delete(rt_thread_t thread); + +rt_err_t rt_thread_yield(void); +rt_err_t rt_thread_delay(rt_tick_t tick); +rt_err_t rt_thread_delay_until(rt_tick_t *tick, rt_tick_t inc_tick); +rt_err_t rt_thread_mdelay(rt_int32_t ms); +rt_err_t rt_thread_control(rt_thread_t thread, int cmd, void *arg); +rt_err_t rt_thread_suspend(rt_thread_t thread); +rt_err_t rt_thread_suspend_with_flag(rt_thread_t thread, int suspend_flag); +rt_err_t rt_thread_resume(rt_thread_t thread); +``` + +å°†å…¶åŠ å…¥åˆ°libcä¸ï¼Œè½¬æ¢ä¸ºRusté£Žæ ¼çš„è°ƒç”¨æŽ¥å£ï¼š + +```rust +// rtthread sdk +pub type rt_base_t = c_long; +pub type rt_err_t = rt_base_t; + +pub type rt_uint32_t = ::c_uint; +pub type rt_int32_t = ::c_int; +pub type rt_uint8_t = ::c_uchar; + +pub type rt_thread_t = *mut c_void; +pub type rt_tick_t = rt_uint32_t; +pub type rt_ubase_t = c_ulong; +pub type rt_size_t = rt_ubase_t; +``` + +```rust +pub fn rt_thread_create( + name: *const ::c_char, + entry: extern "C" fn(*mut ::c_void), + paramter: *mut ::c_void, + stack_size: rt_uint32_t, + priority: rt_uint8_t, + tick: rt_uint32_t +) -> rt_thread_t; + +pub fn rt_thread_self() -> rt_thread_t; + +pub fn rt_thread_startup(thread: rt_thread_t) -> rt_err_t; + +pub fn rt_thread_delete(thread: rt_thread_t) -> rt_err_t; + +pub fn rt_thread_yield() -> rt_err_t; + +pub fn rt_thread_delay(tick: rt_tick_t) -> rt_err_t; + +pub fn rt_thread_mdelay(ms :rt_uint32_t) -> rt_err_t; +``` + +## thread库 + +### ThreadBuilder + +在使用`thread::Thread::new()`的时候,返回一个`ThreadBuilder`,让编程者设置一些threadçš„å‚æ•°ï¼Œæ•ˆæžœå¦‚下所示: + +```rust +let run = || loop { + time::sleep(Duration::new(1, 0)); + let mut sum = 0; + for i in 0..10 { + sum += i; + } + println!("sum: {}", sum); + }; + +let t = Thread::new() + .name("thread 1") + .stack_size(4096) + .priority(0) + .start(run.clone()) + .unwrap(); +``` + +为æ¤ï¼Œå®šä¹‰å¦‚下ThreadBuilder: + +```rust +pub struct ThreadBuilder { + th_name: String, + th_stack_size: u32, + th_priority: u8, + th_ticks: u32, +} + +impl ThreadBuilder { + pub fn name(&mut self, name: &str) -> &mut Self { + self.th_name = name.into(); + self + } + + pub fn stack_size(&mut self, stack_size: u32) -> &mut Self { + self.th_stack_size = stack_size; + self + } + + pub fn priority(&mut self, priority: u8) -> &mut Self { + self.th_priority = priority; + self + } + + pub fn ticks(&mut self, ticks: u32) -> &mut Self { + self.th_ticks = ticks; + self + } + + pub fn start<F>(&self, func: F) -> RTResult<Thread> + where + F: FnOnce() -> (), + F: Send + 'static, + { + Thread::spawn( + self.th_name.clone(), + self.th_stack_size, + self.th_priority, + self.th_ticks, + func, + ) + } +} +``` + +### Thread + +一个Thread对象对应一个`rt_thread_t`,å³ä¸€ä¸ªçº¿ç¨‹æŽ§åˆ¶å—TCB,用于管ç†å’Œæ ‡è¯†ä¸€ä¸ªçº¿ç¨‹ã€‚由于时间问题,`rt_thread_t`å†…éƒ¨è¿‡äºŽå¤æ‚,我们暂时没有将它完整定义到rustçš„libcä¸ï¼Œåªæ˜¯ç”¨`*mut c_void`代替 + +Thread最é‡è¦çš„创建功能如下: + +```rust +unsafe fn spawn_inner( + name: String, + stack_size: u32, + priority: u8, + ticks: u32, + func: Box<dyn FnOnce() -> () + Send + 'static>, +) -> RTResult<Thread> { + let func = Box::new(func); + let param = &*func as *const _ as *mut _; + + extern "C" fn thread_func(param: *mut c_void) { + unsafe { + let run = Box::from_raw(param as *mut Box<dyn FnOnce()>); + run(); + } + } + + let th_handle = thread_create( + name.as_ref(), + thread_func, + param, + stack_size, + priority, + ticks, + ) + .ok_or(RTTError::OutOfMemory)?; + + let ret = match Self::_startup(th_handle) { + Ok(_) => { + mem::forget(func); + Ok(Thread(th_handle)) + } + Err(e) => Err(e), + }; + + return ret; +} +``` + +è¾ƒä¸ºå…³é”®çš„ä¸€æ¥æ˜¯å°†é—包转å˜ä¸ºå‡½æ•°ï¼Œä½¿å¾—傿•°ç±»åž‹èƒ½å¤ŸæˆåŠŸå¯¹åº”ï¼Œ`rt_thread_create`接å—çš„å‚æ•°ç±»åž‹æ˜¯ + +```rust +extern "C" fn(parameter: *mut c_void); +``` + +ä¸ºæ¤æˆ‘ä»¬å®šä¹‰äº†ä¸€ä¸ªè¿™æ ·çš„å‡½æ•°ï¼Œå¹¶å°†é—åŒ…ä»¥å‚æ•°çš„æ–¹å¼é€šè¿‡æŒ‡é’ˆä¼ 入,并在内部è¿è¡Œï¼Œå®Œæˆç›¸å…³çš„逻辑。 + +创建完æˆåŽéœ€è¦å¯åŠ¨ï¼Œä¹Ÿå°±æ˜¯startup方法 + +这与Unix环境下的线程使用有一定的差别,å³Unix接å£ä¸‹çš„线程创建åŽå¯ç›´æŽ¥è¿è¡Œï¼Œè€Œrt-thread的接å£ä¸éœ€è¦è°ƒç”¨`rt_thread_startup`使得线程è¿è¡Œ + +除æ¤ä¹‹å¤–,还æä¾›å¦‚下方法: + +```rust +pub fn delete(&self) -> RTResult<()> { + let ret = thread_delete(self.0); + if ret == 0 { + Ok(()) + } else { + Err(ThreadStartupErr) + } +} + +pub fn delay(ms: i32) -> RTResult<()> { + let ret = thread_m_delay(ms); + if ret == 0 { + Ok(()) + } else { + Err(ThreadStartupErr) + } +} +``` + +用于暂åœå’Œåˆ 除线程 + +## thread库测试 + +### 编写测试代ç + +测试代ç 选择使用两个线程,æ¯éš”特定的时间输出一些信æ¯ï¼Œç”¨äºŽæ ‡è¯†å®ƒä»¬æ£åœ¨è¿è¡Œ + +在线程è¿è¡Œå®ŒæˆåŽè¾“出一å¥è°ƒè¯•,用于表示线程æ£å¸¸ç»“æŸ + +```rust +#![no_std] +#![no_main] + +extern crate alloc; + +use alloc::boxed::Box; +use core::time::Duration; +use marco_main::marco_main_use; +use rtsmart_std::{println, time}; +use rtsmart_std::thread::Thread; + +#[marco_main_use(appname = "rust_thread_test", desc = "Rust example3 app.")] +fn main() { + println!("Hello world"); + let run1 = || loop { + time::sleep(Duration::new(1, 0)); + let mut sum = 0; + for i in 0..10 { + sum += i; + } + println!("thread1: {}", sum); + }; + let run2 = || loop { + time::sleep(Duration::new(1, 0)); + let mut sum = 0; + for i in 0..10 { + sum += i; + } + println!("thread2: {}", sum); + }; + + let t1 = Thread::new() + .name("thread 1") + .stack_size(4096) + .start(run1.clone()); + let t2 = Thread::new() + .name("thread 2") + .stack_size(4096) + .start(run2.clone()); + let thread1 = t1.unwrap(); + let thread2 = t2.unwrap(); + time::sleep(Duration::new(5, 0)); + thread1.delete().unwrap(); + thread2.delete().unwrap(); + println!("Thread1 and Thread2 are deleted"); +} +``` + +编译è¿è¡Œï¼Œå’Œå‰é¢çš„程åºä¸€æ ·ï¼Œå‘½ä»¤å¦‚下: + +```shell +cargo xbuild -Zbuild-std=core,alloc +``` + +在target/aarch64-unknown-rtsmart/debug里能找到编译好的应用程åºthread_test + +将其通过挂载文件系统放入qemu虚拟机ç£ç›˜åŽè¿è¡Œ + +è¿è¡Œç»“果如下图所示: + + + +è§‚å¯Ÿåˆ°ä¸¤ä¸ªçº¿ç¨‹äº¤æ›¿è¾“å‡ºï¼Œæœ€åŽæ£å¸¸ç»“æŸ + +## 总结 + +æœ¬å‘¨çš„å·¥ä½œä¸»è¦æ˜¯ç¼–写了thread库并测试。`thread`库在开å‘è¿‡ç¨‹ä¸æ˜¯å¾ˆé‡è¦çš„库,并且是ç»å¸¸ä½¿ç”¨çš„库,能够高效的利用计算资æºï¼Œå› æ¤æˆ‘ä»¬åœ¨ç¼–å†™å®Œæ ‡å‡†è¾“å‡ºåº“åŽå°±å¼€å§‹ç¼–写thread库 + +下周我们应该会继ç»å›´ç»•线程的相关功能,编写mutex库,ä¿è¯çº¿ç¨‹è¿è¡Œæ—¶çš„线程安全问题。 \ No newline at end of file diff --git a/worklog/markdown/2024.04.30-2024.05.06-work-log.md b/worklog/markdown/2024.04.30-2024.05.06-work-log.md new file mode 100644 index 0000000000000000000000000000000000000000..1ae8e4ad64471997fc35e9033785122cc2103c9d --- /dev/null +++ b/worklog/markdown/2024.04.30-2024.05.06-work-log.md @@ -0,0 +1,231 @@ +# 2024.04.30-2024.05.06-work-log + +## 工作进展 + +本阶段完æˆçš„任务有:查看rt-threadä¸mutex相关的接å£å‡½æ•°ï¼Œå°†å…¶åŠ å…¥åˆ°libcä¸ï¼ŒåŸºäºŽè¿™äº›å‡½æ•°ï¼Œç¼–写Rustä¸çš„mutex库。 + +编写完mutex库åŽï¼Œå¯¹å…¶è¿›è¡Œæµ‹è¯•,解决了一些异常问题,得到了一个能够æ£å¸¸è¿è¡Œçš„mutex库 + +Mutex(互斥é”)是一ç§å¹¶å‘编程ä¸å¸¸ç”¨çš„åŒæ¥åŽŸè¯ï¼Œç”¨äºŽä¿æŠ¤å…±äº«èµ„æºï¼Œé˜²æ¢å¤šä¸ªçº¿ç¨‹åŒæ—¶è®¿é—®å’Œä¿®æ”¹ã€‚在多线程环境下,通过获å–互斥é”,线程å¯ä»¥å®‰å…¨åœ°è®¿é—®å…±äº«èµ„æºï¼Œä»Žè€Œé¿å…ç«žæ€æ¡ä»¶å’Œæ•°æ®ä¸ä¸€è‡´ã€‚是并å‘编程ä¸çš„é‡è¦å·¥å…·ï¼Œä½¿å¾—多线程程åºå¯ä»¥å®‰å…¨åœ°è®¿é—®å’Œä¿®æ”¹å…±äº«èµ„æºï¼Œä»Žè€Œå®žçް并呿‰§è¡Œå’Œå作。 + +## 资料收集 + +RT-Thread编程手册:https://gitee.com/rtthread/rtthread-manual-doc + +RT-Thread APIå‚考手册:https://www.rt-thread.org/document/api/ + +Rustæ ‡å‡†åº“ï¼šhttps://rustwiki.org/zh-CN/std/thread/index.html + +## rt-threadä¸mutex相关的api + +```c +/* + * mutex interface + */ +rt_err_t rt_mutex_init(rt_mutex_t mutex, const char *name, rt_uint8_t flag); +rt_err_t rt_mutex_detach(rt_mutex_t mutex); +rt_mutex_t rt_mutex_create(const char *name, rt_uint8_t flag); +rt_err_t rt_mutex_delete(rt_mutex_t mutex); + +void rt_mutex_drop_thread(rt_mutex_t mutex, rt_thread_t thread); +rt_uint8_t rt_mutex_setprioceiling(rt_mutex_t mutex, rt_uint8_t priority); +rt_uint8_t rt_mutex_getprioceiling(rt_mutex_t mutex); + +rt_err_t rt_mutex_take(rt_mutex_t mutex, rt_int32_t time); +rt_err_t rt_mutex_take_interruptible(rt_mutex_t mutex, rt_int32_t time); +rt_err_t rt_mutex_take_killable(rt_mutex_t mutex, rt_int32_t time); +rt_err_t rt_mutex_release(rt_mutex_t mutex); +rt_err_t rt_mutex_control(rt_mutex_t mutex, int cmd, void *arg); +``` + +å°†å…¶åŠ å…¥åˆ°libcä¸ï¼Œè½¬æ¢ä¸ºRusté£Žæ ¼çš„è°ƒç”¨æŽ¥å£ï¼š + +```rust +s!{ + pub struct rt_mutex { + pub mtype: c_int, + pub data: *mut c_void, + } +} +pub type rt_mutex_t = *mut rt_mutex; +``` + +```rust +pub fn rt_mutex_create( + name: *const ::c_char, + flag: ::rt_uint8_t +) -> ::rt_mutex_t; + +pub fn rt_mutex_init( + mutex: *mut rt_mutex, + name: *mut ::c_char, + flag: ::rt_uint8_t, +) -> rt_err_t; +pub fn rt_mutex_delete(mutex: ::rt_mutex_t) -> rt_err_t; +pub fn rt_mutex_take(mutex: ::rt_mutex_t, time: ::rt_int32_t) -> rt_err_t; +pub fn rt_mutex_release(mutex: ::rt_mutex_t) -> rt_err_t; +``` + +## mutex库 + +### Mutex + +Mutexå¯¹è±¡æŒæœ‰ä¸€ä¸ª`rt_mutex_t`作为互斥é‡ï¼ŒåŒæ—¶è¿˜ä¿å˜è¯¥äº’æ–¥é‡æ‰€ä¿å˜çš„共享资æºdata + +```rust +pub struct Mutex<T: Sized> { + mutex: rt_mutex_t, + data: UnsafeCell<T>, +} +``` + +```rust +impl<T> Mutex<T> { + pub fn new(t: T) -> Result<Self, RTTError> { + Ok(Mutex { + mutex: mutex_create("Unnamed").unwrap(), + data: UnsafeCell::new(t), + }) + } + + pub fn new_with_name(t: T, name: &str) -> Result<Self, RTTError> { + Ok(Mutex { + mutex: mutex_create(name).unwrap(), + data: UnsafeCell::new(t), + }) + } + + pub fn try_lock(&self) -> Result<MutexGuard<T>, RTTError> { + let ret = unsafe { mutex_take(self.mutex, 0) }; + if ret != 0 { + return Err(RTTError::MutexTakeTimeout); + } + Ok(MutexGuard { + mutex: &self.mutex, + data: &self.data, + }) + } + + pub fn lock(&self) -> Result<MutexGuard<T>, RTTError> { + let ret = unsafe { mutex_take(self.mutex, -1) }; + if ret != 0 { + return Err(RTTError::MutexTakeTimeout); + } + Ok(MutexGuard { + mutex: &self.mutex, + data: &self.data, + }) + } +} +``` + +比较关键的是Mutex必须实现`Send`å’Œ`Sync`这两个trait,æ‰èƒ½ä¿è¯æ•°æ®åœ¨å¤šçº¿ç¨‹é—´è®¿é—®æ˜¯2ä¸å‡ºé”™ï¼š + +```rust +unsafe impl<T: Send> Send for Mutex<T> {} +unsafe impl<T: Send> Sync for Mutex<T> {} +``` + +### MutexGuard + +这是一个控制互斥é‡çš„æ™ºèƒ½æŒ‡é’ˆï¼Œåœ¨Mutex对象上é”之åŽï¼Œè¿”回一个MutexGuard智能指针,用于访问数æ®å’Œç®¡ç†é”的释放 + +```rust +pub struct MutexGuard<'a, T: Sized> { + mutex: &'a rt_mutex_t, + data: &'a UnsafeCell<T>, +} +``` + +ç”±äºŽæ‰€æœ‰æƒæœºåˆ¶çš„é™åˆ¶ï¼Œåªèƒ½å°†å¼•ç”¨ä¼ ç»™MutexGuardï¼Œå› æ¤éœ€è¦åŠ ä¸Šç”Ÿå‘½å‘¨æœŸã€‚ + +需è¦å®žçް`Deref`å’Œ`DerefMut`这两个trait让指针能够通过解引用的方å¼è®¿é—®å’Œæ”¹å˜æ•°æ®ï¼ŒåŒæ—¶éœ€è¦å®žçް`Drop`这一trait自动释放互斥é‡ã€‚å¦‚æžœå¿˜è®°è¿™ä¸ªçš„è¯æžæ˜“é€ æˆæ»é”。 + +```rust +impl <'a, T> Deref for MutexGuard<'a, T> { + type Target = T; + + fn deref(&self) -> &Self::Target { + unsafe { &*self.data.get() } + } +} + +impl <'a, T> Drop for MutexGuard<'a, T> { + fn drop(&mut self) { + let mutex = self.mutex as *const _ as *mut _; + mutex_release(mutex); + } +} + +impl <'a, T> DerefMut for MutexGuard<'a, T> { + fn deref_mut(&mut self) -> &mut Self::Target { + unsafe { &mut *self.data.get() } + } +} +``` + +## mutex库测试 + +### 编写测试代ç + +测试代ç 选择创建两个线程,一个共享资æºï¼Œä¸¤ä¸ªçº¿ç¨‹æ¯éš”一段时间对其进行修改,并输出修改的值 + +```rust +#![no_std] +#![no_main] + +extern crate alloc; + +use alloc::sync::Arc; +use core::time::Duration; + +use marco_main::marco_main_use; +use rtsmart_std::{println, thread, time}; +use rtsmart_std::mutex::Mutex; + +#[marco_main_use(appname = "rust_mutex_test", desc = "Rust example4 app.")] +fn main() { + let counter = Arc::new(Mutex::new(0).unwrap()); + let run = move || loop { + time::sleep(Duration::new(1, 0)); + let mut c = counter.lock().unwrap(); + *c += 1; + println!("c :{}", *c); + }; + + let t1 = thread::Thread::new() + .name("thread 1") + .stack_size(4096) + .start(run.clone()).unwrap(); + let t2 = thread::Thread::new() + .name("thread 2") + .stack_size(4096) + .start(run.clone()).unwrap(); + time::sleep(Duration::new(5, 0)); + t1.delete().unwrap(); + t2.delete().unwrap(); + println!("Thread1 and Thread2 are deleted"); +} +``` + +编译è¿è¡Œï¼Œå’Œå‰é¢çš„程åºä¸€æ ·ï¼Œå‘½ä»¤å¦‚下: + +```shell +cargo xbuild -Zbuild-std=core,alloc +``` + +在target/aarch64-unknown-rtsmart/debug里能找到编译好的应用程åºmutex_test + +将其通过挂载文件系统放入qemu虚拟机ç£ç›˜åŽè¿è¡Œ + +è¿è¡Œç»“果如下图所示: + + + +观察到c的值æ£å¸¸è¢«å¹¶å‘修改,没有出现并å‘错误 + +## 总结 + +æœ¬å‘¨çš„å·¥ä½œä¸»è¦æ˜¯ç¼–写了mutex库并测试。`mutex`库在开å‘è¿‡ç¨‹ä¸æ˜¯ä¸Ž`thread`库æé…使用的,用于确ä¿åœ¨ä»»æ„æ—¶åˆ»åªæœ‰ä¸€ä¸ªçº¿ç¨‹èƒ½å¤Ÿè®¿é—®èµ„æºã€‚è¿™æ ·å¯ä»¥é¿å…å¤šä¸ªçº¿ç¨‹åŒæ—¶ä¿®æ”¹å…±äº«çжæ€å¯¼è‡´çš„æ•°æ®ç«žäº‰å’Œä¸ç¡®å®šè¡Œä¸ºã€‚å› æ¤åœ¨å¤šçº¿ç¨‹ç¼–程ä¸çš„地ä½ä¸äºšäºŽ`thread`库 + +ä¸‹å‘¨æˆ‘ä»¬åº”è¯¥ä¼šç¼–å†™å¹¶æµ‹è¯•æ ‡å‡†è¾“å…¥åº“çš„ä»£ç ï¼Œä¹Ÿä¼šè€ƒè™‘åŠ å…¥æ–‡ä»¶åŠŸèƒ½ã€‚ \ No newline at end of file diff --git a/worklog/markdown/2024.05.07-2024.05.14-work-log.md b/worklog/markdown/2024.05.07-2024.05.14-work-log.md new file mode 100644 index 0000000000000000000000000000000000000000..4a112154c027207edcef100fc39aefb79b4046a8 --- /dev/null +++ b/worklog/markdown/2024.05.07-2024.05.14-work-log.md @@ -0,0 +1,143 @@ +# 2024.05.07-2024.05.14-work-log + +## 工作进展 + +本阶段完æˆçš„任务有:继ç»ç ”究阅读Rustç¼–è¯‘å™¨çš„æ ‡å‡†åº“çš„å®žçŽ°ï¼Œä¸ºrtsmart-stdé¡¹ç›®ç¼–å†™æ ‡å‡†è¾“å…¥åº“stdin,å¯ä»¥ç‰å¾…读å–用户的输入å—符串,用于进行其他的æ“作。 + +æœ¬é˜¶æ®µä¸ºæ–°å»ºçš„æ ‡å‡†åº“é¡¹ç›®ç¼–å†™äº†æ ‡å‡†è¾“å…¥åº“ã€‚ä»£ç æ€è·¯æœ‰å€Ÿé‰´Rustæ ‡å‡†åº“çš„æºä»£ç ,åšäº†è¾ƒå¤šçš„ç®€åŒ–ï¼Œæ ¸å¿ƒæœ€ç»ˆè½åœ¨è°ƒç”¨libcä¸çš„输出函数getchar()。 + +## 资料收集 + +Rustæ ‡å‡†åº“æºä»£ç :https://github.com/rust-lang/rust/tree/master/library/std + +Rustæ ‡å‡†åº“æºä»£ç è§£æžï¼šhttps://github.com/Warrenren/inside-rust-std-libraryã€https://rustwiki.org/zh-CN/std/ + +UNIX环境高级编程 作者: [W.Richard Stevens](https://book.douban.com/author/368367) / [Stephen A.Rago](https://book.douban.com/search/Stephen A.Rago) +出版社: [人民邮电出版社](https://book.douban.com/press/2609) ISBN: 9787115147318 + +## Stdinæ¨¡å— + +### Stdout + +首先创建一个Read Trait,表示具有读å–功能的特性 + +```rust +pub trait Read { + fn read(&mut self, buf: &mut [u8]) -> Result<usize, RTTError>; +} +``` + +ç„¶åŽåˆ›å»ºä¸€ä¸ªç»“构体Stdinï¼Œç”¨äºŽè¡¨ç¤ºæ ‡å‡†è¾“å…¥ + +并为其实现Read Trait + +```rust +struct Stdin; + +impl Read for Stdin { + fn read(&mut self, buf: &mut [u8]) -> Result<usize, RTTError> { + let mut i = 0; + unsafe { + while i < buf.len() { + let c = libc::getchar(); + if c == 0 || c == '\n' as i32 { + break; + } + buf[i] = c as u8; + i += 1; + } + } + Ok(i) + } +} +``` + +ä½¿ç”¨ä¸€ä¸ªç¼“å†²æ± bufï¼Œä¸æ–将读å–到的å—节放入其ä¸ï¼Œç›´åˆ°è¯»å®Œæˆ–到达上é™ã€‚é‡åˆ°EOF或æ¢è¡Œæ—¶å³åœæ¢ + +### InputStream + +Stdinåªèƒ½ç”¨å›ºå®šé•¿åº¦çš„buf去读å–å—符,而我们希望直接能读å–一整行å—符串并返回Stringï¼Œå› æ¤åˆåˆ›å»ºäº†ä¸€ä¸ªInputStream + +```rust +pub struct InputStream { + stdin: Stdin +} +``` + +InputStream内部有一个Stdin,然åŽä¸ºå®ƒå®žçްread_line()方法 + +```rust +impl InputStream { + pub fn new() -> InputStream { + InputStream { + stdin: Stdin + } + } + + pub fn read_line(&mut self) -> Result<String, RTTError> { + let mut buf = [0u8; 1024]; + let mut s = String::new(); + loop { + let n = self.stdin.read(&mut buf)?; + if n == 0 { + break; + } + s.push_str(&String::from_utf8_lossy(&buf[..n])); + if n < buf.len() { + break; + } else { + buf = [0u8; 1024]; + } + } + Ok(s) + } +} +``` + +æ¯æ¬¡ç”¨ä¸€ä¸ªé•¿åº¦ä¸º1024的数组作为缓冲区去读å–输入的å—符。如果读å–çš„å—符少于1024,则说明é‡åˆ°äº†æ¢è¡Œç¬¦ï¼Œåˆ™æœ¬æ¬¡è¯»å–直接结æŸã€‚å¦åˆ™å°±ç»§ç»æ¸…空buf,å†åŽ»è¯»å–,将新读å–的输入拼接在原先的结果åŽé¢ã€‚ç„¶åŽè¿”回结果。 + +## Stdin库测试 + +è¿™ä¸ªæµ‹è¯•ç¨‹åºæ¯”较简å•,就是创建一个InputStream,然åŽè¯»å–一行å—符串,å†å°†å…¶è¾“出å³å¯ + +```rust +#![no_std] +#![no_main] + +extern crate alloc; + +use marco_main::marco_main_use; +use rtsmart_std::println; +use rtsmart_std::stdin::InputStream; + +#[marco_main_use(appname = "rust_read_test", desc = "Rust example5 app.")] +fn main() { + let mut input = InputStream::new(); + let line = input.read_line().unwrap(); + println!("{}", line); +} +``` + +编译è¿è¡Œï¼Œå’Œå‰é¢çš„程åºä¸€æ ·ï¼Œå‘½ä»¤å¦‚下: + +```shell +cargo xbuild -Zbuild-std=core,alloc +``` + +在target/aarch64-unknown-rtsmart/debug里能找到编译好的应用程åºread_test + +将其通过挂载文件系统放入qemu虚拟机ç£ç›˜åŽè¿è¡Œ + +è¿è¡Œç»“果如下图所示: + + + +å¯ä»¥è§‚察到输入了abcde,然åŽç«‹é©¬å°±è¾“出了abcde + +说明功能是æ£å¸¸çš„ + +## 总结 + +æœ¬å‘¨çš„å·¥ä½œä¸»è¦æ˜¯ç¼–写了stdin库并测试。`stdin`库在开å‘过程ä¸å¸¸ä¸Ž`stdout`库æé…ä½¿ç”¨ï¼Œè¾¾åˆ°ä¸Žç”¨æˆ·è¿›è¡Œäº¤äº’çš„ç›®çš„ï¼Œèƒ½å¤Ÿä»Žç”¨æˆ·ç«¯å¾—åˆ°è¾“å…¥ï¼Œä¹Ÿä½¿å¾—åº”ç”¨ç¨‹åºæ›´ä¸ºçµæ´»ã€‚ + +下周我们计划编写文件æ“ä½œç›¸å…³çš„æ ‡å‡†åº“ï¼Œå¦‚æ–‡ä»¶åˆ›å»ºï¼Œå†™å…¥ï¼Œè¯»å–ç‰ï¼Œå¹¶è¿›è¡Œæµ‹è¯•。 \ No newline at end of file diff --git a/worklog/markdown/2024.05.15-2024.05.22-work-log.md b/worklog/markdown/2024.05.15-2024.05.22-work-log.md new file mode 100644 index 0000000000000000000000000000000000000000..03b0d9b93b0500440033ec6ac25d63621444a522 --- /dev/null +++ b/worklog/markdown/2024.05.15-2024.05.22-work-log.md @@ -0,0 +1,349 @@ +# 2024.05.15-2024.05.22-work-log + +## 工作进展 + +本阶段完æˆçš„任务有:阅读Rust编译器ä¸`fs`库的实现,以åŠCåº“å‡½æ•°ä¸æ–‡ä»¶çš„相关æ“作接å£çš„使用,编写了rt-smartå¹³å°ä¸Šçš„`fs`库的部分实现,å¯ä»¥åˆ›å»ºæ–‡ä»¶ã€å†™å…¥æ–‡ä»¶ã€ä»Žæ–‡ä»¶ä¸è¯»å–内容ã€å°†è¯»å–指针移动到特定ä½ç½®å†å¼€å§‹è¯»å–ç‰ç‰ + +åŒæ—¶è¿˜ç¼–写了对应的测试应用程åºå¯¹`fs`库进行测试,ä¿è¯å…¶åŠŸèƒ½èƒ½å¤Ÿæ£å¸¸å®Œæˆã€‚ + +`std::fs` 库æä¾›äº†ä¸Žæ–‡ä»¶ç³»ç»Ÿäº¤äº’的一系列功能,使得开å‘者å¯ä»¥åœ¨ Rust 程åºä¸æ–¹ä¾¿åœ°è¿›è¡Œæ–‡ä»¶æ“作。开å‘者能够方便ã€å¯é 地进行文件系统交互。 + +## 资料收集 + +Rustæ ‡å‡†åº“æºä»£ç :https://github.com/rust-lang/rust/tree/master/library/std + +Rustæ ‡å‡†åº“æºä»£ç è§£æžï¼šhttps://github.com/Warrenren/inside-rust-std-libraryã€https://rustwiki.org/zh-CN/std/ + +UNIX环境高级编程 作者: [W.Richard Stevens](https://book.douban.com/author/368367) / [Stephen A.Rago](https://book.douban.com/search/Stephen A.Rago) 出版社: [人民邮电出版社](https://book.douban.com/press/2609) ISBN: 9787115147318 + +## fsæ ‡å‡†åº“ + +首先我们计划æä¾›ä¸Ž`ThreadBuilder`类似的函数å¼è°ƒç”¨é…置方法æ¥åˆ›å»ºæˆ–打开文件,示例如下所示 + +```rust +let mut res_file = fs::OpenOptions::new() + .read(true) + .write(true) + .create(true) + .append(false) + .open("test.txt"); +``` + +å¯ç”¨æ¥é…置文件的读写ã€åˆ›å»ºä¸Žå¦ã€æ˜¯å¦è¿½åŠ ç‰å±žæ€§ï¼Œé€šè¿‡è¿™ç§æ–¹å¼æä¾›æŽ¥å£ï¼Œä½¿å¾—接å£çš„使用å˜å¾—æ›´åŠ ç®€å•。 + +å› æ¤ï¼Œæˆ‘们会先创建一个`OpenOptions`æ¥æ‰“开文件 + +### OpenOptions + +```rust +pub struct OpenOptions { + pub path: String, + pub read: bool, + pub write: bool, + pub create: bool, + pub append: bool, +} +``` + +```rust +impl OpenOptions { + pub fn new() -> OpenOptions { + OpenOptions { + path: String::new(), + read: false, + write: false, + create: false, + append: false, + } + } + + pub fn read(&mut self, read: bool) -> &mut Self { + self.read = read; + self + } + + pub fn write(&mut self, write: bool) -> &mut Self { + self.write = write; + self + } + + pub fn create(&mut self, create: bool) -> &mut Self { + self.create = create; + self + } + + pub fn append(&mut self, append: bool) -> &mut Self { + self.append = append; + self + } + + pub fn open(&mut self, path: &str) -> RTResult<File> { + self.path = path.to_string(); + let fd = unsafe { + crate::fs::open( + self.path.as_ptr(), + self.read, + self.write, + self.create, + self.append, + ) + }; + if fd < 0 { + Err(FileOpenErr) + } else { + Ok(File { fd }) + } + } +} +``` + +在最终open的时候å†å°†é…置信æ¯ä¸€å¹¶ä¼ 入用于打开文件 + +```rust +pub fn open(path: *const u8, read: bool, write: bool, create: bool, append: bool) -> i32 { + let flags = if read && write { + libc::O_RDWR + } else if write { + libc::O_WRONLY + } else { + libc::O_RDONLY + }; + + let flags = if create { + flags | libc::O_CREAT + } else { + flags + }; + + let flags = if append { + flags | libc::O_APPEND + } else { + flags + }; + unsafe { libc::open(path as *const c_char, flags) } +} +``` + +### fs库使用到的libcä¸çš„一些C库接å£å‡½æ•° + +```c +int open(const char *, int, ...); +int close(int); +ssize_t read(int, void *, size_t); +ssize_t write(int, const void *, size_t); +off_t lseek(int, off_t, int); +int fsync(int); +int ftruncate(int, off_t); +``` + +这些是rt-smart上支æŒçš„一些Cè¯è¨€åº“函数,å¯ç”¨äºŽæ–‡ä»¶æ“作,将其转æ¢ä¸ºRusté£Žæ ¼çš„å‡½æ•°æŽ¥å£å¦‚下: + +```rust +pub fn open(path: *const c_char, oflag: ::c_int, ...) -> ::c_int; +pub fn close(fd: ::c_int) -> ::c_int; +pub fn read(fd: ::c_int, buf: *mut ::c_void, count: ::size_t) -> ::ssize_t; +pub fn write(fd: ::c_int, buf: *const ::c_void, count: ::size_t) -> ::ssize_t; +pub fn lseek(fd: ::c_int, offset: off_t, whence: ::c_int) -> off_t; +pub fn fsync(fd: ::c_int) -> ::c_int; +pub fn ftruncate(fd: ::c_int, length: off_t) -> ::c_int; +``` + +基于这些库函数编写Fileæ¨¡å— + +### File + +与Linuxæ“作系统相åŒï¼Œrt-smartæ¯ä¸ªæ‰“开的文件都由一个文件æè¿°ç¬¦ï¼ˆfile descriptor, FDï¼‰æ¥æ ‡è¯†ã€‚文件æè¿°ç¬¦æ˜¯ä¸€ä¸ªéžè´Ÿæ•´æ•°ï¼Œç”¨äºŽæŒ‡ä»£ä¸€ä¸ªå·²ç»æ‰“开的文件或其他类型的 I/O 资æºï¼ˆå¦‚管é“ã€ç½‘络套接å—ç‰ï¼‰ã€‚文件æè¿°ç¬¦ä¸Žæ‰“å¼€çš„æ–‡ä»¶ä¹‹é—´çš„æ˜ å°„ç”±å†…æ ¸ç®¡ç†ã€‚ + +å› æ¤ï¼Œæˆ‘们对File结构的定义如下: + +```rust +pub struct File { + pub fd: i32, +} +``` + +需对其实现Drop这一trait,使其在离开作用域åŽè‡ªåŠ¨é‡Šæ”¾æ—¶ï¼Œå…³é—æ–‡ä»¶ + +```rust +impl Drop for File { + fn drop(&mut self) { + unsafe { + libc::close(self.fd); + } + } +} +``` + +#### 读写功能 + +```rust +pub fn read(&self, buf: &mut [u8]) -> RTResult<usize> { + let n = unsafe { libc::read(self.fd, buf.as_mut_ptr() as *mut c_void, buf.len()) }; + if n < 0 { + Err(FileReadErr) + } else { + Ok(n as usize) + } +} + +pub fn read_to_string(&self) -> RTResult<String> { + let mut buf = [0; 128]; + let mut string = String::new(); + self.seek(0)?; + loop { + let n = self.read(&mut buf)?; + if n == 0 { + break; + } + let substr = unsafe { String::from_utf8_unchecked(buf.to_vec()) }; + string.push_str(&substr); + } + Ok(string) +} +``` + +```rust +pub fn write(&self, buf: &[u8]) -> RTResult<usize> { + let n = unsafe { libc::write(self.fd, buf.as_ptr() as *const c_void, buf.len()) }; + if n < 0 { + Err(FileWriteErr) + } else { + Ok(n as usize) + } +} + +pub fn write_all(&self, buf: &str) -> RTResult<()> { + self.write(buf.as_bytes())?; + Ok(()) +} +``` + +读å–çš„æ¥éª¤ä¸Žstdin的逻辑相似,用一个固定长度的buf进去读å–内容,å†ä¸æ–的拼到StringåŽé¢ï¼Œæœ€åŽå†å°†ç»“æžœString返回 + +#### 其他功能 + +```rust +pub fn seek(&self, offset: i64) -> RTResult<i64> { + let n = unsafe { libc::lseek(self.fd, offset, SEEK_SET) }; + if n < 0 { + Err(FileSeekErr) + } else { + Ok(n) + } +} + +pub fn flush(&self) -> RTResult<()> { + let n = unsafe { libc::fsync(self.fd) }; + if n < 0 { + Err(FileFlushErr) + } else { + Ok(()) + } +} + +pub fn set_len(&self, len: i64) -> RTResult<()> { + let n = unsafe { libc::ftruncate(self.fd, len) }; + if n < 0 { + Err(FileSetLengthErr) + } else { + Ok(()) + } +} + +pub fn close(&self) -> RTResult<()> { + let n = unsafe { libc::close(self.fd) }; + if n < 0 { + Err(FileCloseErr) + } else { + Ok(()) + } +} +``` + +- `seek`函数:将文件指针移动到文件ä¸çš„æŒ‡å®šä½ç½®ã€‚ +- `flush`函数:将文件的所有缓冲区数æ®åˆ·æ–°åˆ°ç£ç›˜ä¸Šï¼Œç¡®ä¿æ•°æ®æŒä¹…化。 +- `set_len`函数:调整文件的长度。 +- `close`å‡½æ•°ï¼šå…³é—æ–‡ä»¶æè¿°ç¬¦ï¼Œé‡Šæ”¾ç›¸å…³èµ„æºã€‚ + +这些函数都是通过调用底层的 `libc` åº“å‡½æ•°æ¥æ“作文件æè¿°ç¬¦ï¼Œæä¾›äº†æ–‡ä»¶æŒ‡é’ˆç§»åЍã€ç¼“å†²åŒºåˆ·æ–°ã€æ–‡ä»¶é•¿åº¦è®¾ç½®å’Œæ–‡ä»¶å…³é—ç‰åŸºæœ¬åŠŸèƒ½ã€‚æ¯ä¸ªå‡½æ•°éƒ½ä½¿ç”¨ `RTResult` 类型æ¥è¿”回结果,处ç†å¯èƒ½çš„错误,并æä¾›é€‚å½“çš„é”™è¯¯å¤„ç†æœºåˆ¶ã€‚ + +## fs库测试 + +### 编写测试代ç + +测试程åºå†™çš„相对简å•,使用`OpenOptions`打开一个文件,然åŽå‘里é¢å†™å…¥ä¸€æ®µå—符串,å†å°†å…¶è¯»å‡ºï¼Œè¾“å‡ºåˆ°æ ‡å‡†è¾“å‡ºä¸Šï¼Œå¦‚æžœèƒ½æ£å¸¸åˆ›å»ºæ–‡ä»¶ã€å†™å…¥å—符串ã€è¯»å‡ºå—符串,则说明fs库的功能æ£å¸¸ã€‚ + +```rust +#![no_std] +#![no_main] + +extern crate alloc; + +use alloc::string::String; +use marco_main::marco_main_use; +use rtsmart_std::{fs, println}; + +#[marco_main_use(appname = "rust_file_test", desc = "Rust example6 app.")] +fn main() { + let mut res_file = fs::OpenOptions::new() + .read(true) + .write(true) + .create(true) + .append(false) + .open("test.txt"); + if res_file.is_err() { + println!("{:?}", res_file.err().unwrap()); + } else { + let mut file = res_file.unwrap(); + let buf = "Hello, world!".as_bytes(); + file.write(buf).expect("write error"); + let string = file.read_to_string().unwrap(); + println!("{}", string); + file.close().expect("close error"); + } +} +``` + +编译è¿è¡Œï¼Œå’Œå‰é¢çš„程åºä¸€æ ·ï¼Œå‘½ä»¤å¦‚下: + +```shell +cargo xbuild -Zbuild-std=core,alloc +``` + +在target/aarch64-unknown-rtsmart/debug里能找到编译好的应用程åºfile_test + +将其通过挂载文件系统放入qemu虚拟机ç£ç›˜åŽè¿è¡Œ + +### 测试过程 + +首先观看文件目录内的文件,ä¸å˜åœ¨test.txt文件 + + + +è¿è¡Œfile_test程åºï¼Œå‘现如下输出: + + + +æˆåŠŸå°†å†™å…¥çš„Hello,world!读å–å‡ºæ¥ + +å†ä½¿ç”¨ls命令查看文件目录下的文件 + + + +会å‘现多出了一个test.txt文件,是我们新创建的。 + +回到linux环境下的文件系统,查看文件目录,å‘现å˜åœ¨test.txt文件 + + + +用cat命令查看其ä¸çš„内容,å‘现与我们写入的内容是一致的 + + + +至æ¤ï¼Œæ–‡ä»¶ç³»ç»Ÿçš„æµ‹è¯•结æŸï¼ŒåŠŸèƒ½æ£å¸¸ã€‚ + +## 总结与展望 + +æœ¬å‘¨çš„å·¥ä½œä¸»è¦æ˜¯ç¼–写了`fs`库并测试。`fs`库在开å‘è¿‡ç¨‹ä¸æ˜¯ç»å¸¸éœ€è¦ä½¿ç”¨çš„库,它为文件和目录æ“作æä¾›äº†åŸºç¡€è®¾æ–½ï¼Œä½¿å¾—å¼€å‘者能够方便ã€å¯é 地进行文件系统交互。 + +ä½†æ˜¯æˆ‘ä»¬ç¼–å†™çš„åŠŸèƒ½è¿˜å¤ªå°‘ï¼Œä»ŠåŽæˆ‘们将继ç»å®Œå–„库的内容,æä¾›æ›´å¤šçš„功能,如å¯åˆ›å»ºç›®å½•ç‰ç‰ã€‚ \ No newline at end of file diff --git a/worklog/pdf/2024.04.22-2024.04.29-work-log.pdf b/worklog/pdf/2024.04.22-2024.04.29-work-log.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a8532d39fc06e40c33f36c3b16d43a253cdf9557 Binary files /dev/null and b/worklog/pdf/2024.04.22-2024.04.29-work-log.pdf differ diff --git a/worklog/pdf/2024.04.30-2024.05.06-work-log.pdf b/worklog/pdf/2024.04.30-2024.05.06-work-log.pdf new file mode 100644 index 0000000000000000000000000000000000000000..bbf781b208b1b63ae26efaeffe38d1f43778dfdd Binary files /dev/null and b/worklog/pdf/2024.04.30-2024.05.06-work-log.pdf differ diff --git a/worklog/pdf/2024.05.07-2024.05.14-work-log.pdf b/worklog/pdf/2024.05.07-2024.05.14-work-log.pdf new file mode 100644 index 0000000000000000000000000000000000000000..70a1957667a0842e6dcde1a54b70fd42a0e04ff2 Binary files /dev/null and b/worklog/pdf/2024.05.07-2024.05.14-work-log.pdf differ diff --git a/worklog/pdf/2024.05.15-2024.05.22-work-log.pdf b/worklog/pdf/2024.05.15-2024.05.22-work-log.pdf new file mode 100644 index 0000000000000000000000000000000000000000..217c1f200eec9c577767b2ee7245a4ba9b1a274e Binary files /dev/null and b/worklog/pdf/2024.05.15-2024.05.22-work-log.pdf differ diff --git "a/\345\274\200\345\217\221\346\226\207\346\241\243.md" "b/\346\212\200\346\234\257\346\226\207\346\241\243.md" similarity index 75% rename from "\345\274\200\345\217\221\346\226\207\346\241\243.md" rename to "\346\212\200\346\234\257\346\226\207\346\241\243.md" index aab1dbddb9a95767faacef5b818ba540f4dcf950..979f66fe8cc2e2922d1e5eebec05995b85bd1ca1 100644 --- "a/\345\274\200\345\217\221\346\226\207\346\241\243.md" +++ "b/\346\212\200\346\234\257\346\226\207\346\241\243.md" @@ -212,8 +212,133 @@ Rustè¯è¨€çš„è®¾è®¡ç›®æ ‡æ˜¯èƒ½ç¼–å†™æ“ä½œç³»ç»Ÿå†…æ ¸çš„ç³»ç»Ÿç¼–ç¨‹è¯è¨€ã€‚ ## 三ã€å¼€å‘环境æå»º +### 安装qemu-system-aarch64 + +æˆ‘ä»¬é€‰æ‹©çš„ç›®æ ‡å¹³å°ä¸º`aarch64`ï¼Œå› æ¤æˆ‘们首先需è¦å®‰è£…`qemu-system-aarch64`,用于支æŒrt-smartå†…æ ¸ + +```shell +sudo apt install qemu-system-aarch64 +``` + +### 安装musl gcc工具链 + +ç„¶åŽéœ€è¦å®‰è£…`musl gcc`工具链,下载地å€ä¸ºï¼šhttps://download.rt-thread.org/download/rt-smart/toolchains/aarch64-linux-musleabi_for_x86_64-pc-linux-gnu_latest.tar.bz2 + +ç„¶åŽé…置环境å˜é‡ï¼š + +```bash +# aarch64 musl gcc +export RTT_CC=gcc +export RTT_EXEC_PATH=/yourpath/aarch64-linux-musleabi_for_x86_64-pc-linux-gnu/bin +export RTT_CC_PREFIX=aarch64-linux-musleabi- +export PATH=$PATH:$RTT_EXEC_PATH +``` + +使用命令`source ~/.bashrc`刷新环境å˜é‡é…置文件 + +之åŽå¯ä½¿ç”¨å‘½ä»¤`aarch64-linux-musleabi-gcc -v`检查`musl gcc`工具环境å˜é‡æ˜¯å¦æ£ç¡®è®¾ç½® + +### 安装xmakeå’Œscons工具 + +```shell +sudo add-apt-repository ppa:xmake-io/xmake +sudo apt update +sudo apt install xmake +sudo apt-get install scons +``` + +### 安装ncurses库 + +```shell +sudo apt-get install libncurses5-dev +``` + +### æž„å»ºå†…æ ¸é•œåƒ + +首先将rt-smartçš„æºç 下载到本地:https://github.com/RT-Thread/rt-thread.git + +进入到`qemu-virt64-aarch64`目录下 + +```shell +cd ./rt-thread/bsp/qemu-virt64-aarch64/ #打开 rt-thread 项目目录ä¸çš„ bsp/qemu-virt64-aarch64 目录 +scons --menuconfig +``` + +选择Smartå†…æ ¸ + +ç„¶åŽåœ¨è¯¥ç›®å½•下执行`scons`å‘½ä»¤å¼€å§‹ç¼–è¯‘å†…æ ¸ + +### 获å–用户æ€çš„å¼€å‘SDK + +å°†Smartçš„userapps仓库克隆下æ¥ï¼š + +```shell +git clone https://github.com/RT-Thread/userapps.git +``` + +首先è¿è¡Œenv.sh æ·»åŠ ä¸€ä¸‹çŽ¯å¢ƒå˜é‡ + +```shell +source env.sh +``` + +进入 apps 目录进行编译 + +```shell +cd apps +xmake f -a aarch64 # é…置为 aarch64å¹³å° +xmake -j8 +``` + +è¿è¡Œ xmake smart-rootfs 制作 rootfs ,è¿è¡Œ xmake smart-image åˆ¶ä½œé•œåƒ + +```shell +xmake smart-rootfs +xmake smart-image -f fat -o ../prebuilt/qemu-virt64-aarch64-fat/fat.img #制作 fat é•œåƒ +``` + +这个fat.img镜åƒå³å¯ä½œä¸ºè™šæ‹Ÿæœºå†…的文件系统 + +修改qemu.shä¸çš„路径å³å¯å®ŒæˆæŒ‚è½½ + +进入到userapp/sdk/rt-thread/lib/aarch64/cortex-a目录下 + +获å–到里é¢çš„ä¸¤ä¸ªåº“æ–‡ä»¶ï¼Œåˆ†åˆ«æ˜¯é™æ€åº“`librtthread.a`和动æ€åº“`librtthread.so`,这两个库文件用于之åŽç¼–è¯‘åº”ç”¨ç¨‹åºæ—¶è¿›è¡Œé“¾æŽ¥ï¼Œæ‰¾åˆ°å¯¹åº”支æŒçš„库函数 + ## å››ã€å¤–部函数接å£åº“ +下载`libc`çš„æºä»£ç + +```shell +git clone https://github.com/rust-lang/libc.git +``` + +在`src`ç›®å½•ä¸‹æ·»åŠ `rtsmart`目录 + +将定义的外部函数接å£å†™å…¥åˆ°rtsmart/mod.rs下 + +在`Cargo.toml`ä¸çš„第34行的targets䏿·»åŠ `aarch64-unknown-rtsmart`ç›®æ ‡ï¼š + +```toml +targets = [ + "aarch64-apple-darwin", + "aarch64-apple-ios", + "aarch64-linux-android", + "aarch64-pc-windows-msvc", + "aarch64-unknown-freebsd", + "aarch64-unknown-fuchsia", + "aarch64-unknown-hermit", + "aarch64-unknown-linux-gnu", + "aarch64-unknown-linux-musl", + "aarch64-unknown-netbsd", + "aarch64-unknown-openbsd", + "aarch64-unknown-rtsmart", + ... +] +``` + +å‰é¢æåˆ°ï¼Œå®šä¹‰å¤–éƒ¨å‡½æ•°æŽ¥å£æ—¶éœ€è¦æŒ‡å®šé“¾æŽ¥çš„陿€åº“ + 在本项目ä¸ï¼Œæˆ‘们的rt-smartçš„`libc`å°±é“¾æŽ¥äº†å¦‚ä¸‹é™æ€åº“: ```rust @@ -261,9 +386,112 @@ println!("cargo:rustc-link-lib=static=gcc"); println!("cargo:rerun-if-changed=build.rs"); ``` +这里就需è¦ç”¨åˆ°å‰é¢èŽ·å–的用户æ€å¼€å‘SDK里的`librtthread.a`è¿™ä¸€é™æ€åº“了 ## 五ã€ç¼–è¯‘å™¨æ·»åŠ ç¼–è¯‘ç›®æ ‡ +找到`rust/compiler/rustc_target/src/spec` + +在targetsæ–‡ä»¶å¤¹ä¸æ·»åŠ æ–‡ä»¶`aarch64_unknown_rtsmart.rs` + +在baseæ–‡ä»¶å¤¹ä¸æ·»åŠ `rtsmart_base.rs`文件 + +è¿™äº›æ–‡ä»¶ç”¨äºŽå®šä¹‰ç¼–è¯‘ç›®æ ‡å¹³å°çš„一些特性,用于告知编译器应生æˆä½•ç§è¾“出 + +```rust +pub fn target() -> Target { + let mut base = base::rtsmart_base::opts(); + base.max_atomic_width = Some(128); + base.env = "gnu".into(); + base.linker = Some("aarch64-linux-musleabi-gcc".into()); + + Target { + llvm_target: "aarch64-unknown-linux-gnu".into(), + metadata: crate::spec::TargetMetadata { + description: None, + tier: None, + host_tools: None, + std: None, + }, + pointer_width: 64, + data_layout: "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128".into(), + arch: "aarch64".into(), + + options: TargetOptions { + mcount: "\u{1}_mcount".into(), + ..base + }, + } +} +``` + +这段代ç 进行了如下定义: + +- `max_atomic_width` 设置为 `Some(128)`,这表示最大支æŒçš„åŽŸåæ“ä½œå®½åº¦ä¸º 128 ä½ã€‚ + +- `env` 设置为 `"gnu"`ï¼Œè¡¨ç¤ºç›®æ ‡çŽ¯å¢ƒæ˜¯ GNU。 + +- `linker` 设置为 `Some("aarch64-linux-musleabi-gcc".into())`,指定链接器为 `aarch64-linux-musleabi-gcc`。 + +- `llvm_target`设置为`aarch64-unknown-linux-gnu`,指示编译器应针对ARM 64-bit 架构进行代ç 生æˆã€‚这是 + +- `pointer_width`设置为64è¡¨æ˜Žç›®æ ‡æž¶æž„ä¸æŒ‡é’ˆå®½åº¦ä¸º 64 ä½ + +- `data_layout`设置为`"e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"`å«ä¹‰å¦‚下 + - `e`:å°ç«¯åºï¼ˆlittle-endian),表示低å—节å˜å‚¨åœ¨ä½Žåœ°å€ã€‚ + - `m:e`:æè¿°åœ°å€æ¨¡å¼çš„默认对é½ã€‚ + - `i8:8:32`:8 使•´æ•°å¯¹é½ä¸º 8 ä½ï¼Œå˜å‚¨å¤§å°ä¸º 32 ä½ã€‚ + - `i16:16:32`:16 使•´æ•°å¯¹é½ä¸º 16 ä½ï¼Œå˜å‚¨å¤§å°ä¸º 32 ä½ã€‚ + - `i64:64`:64 使•´æ•°å¯¹é½ä¸º 64 ä½ã€‚ + - `i128:128`:128 使•´æ•°å¯¹é½ä¸º 128 ä½ã€‚ + - `n32:64`:自然对é½ä¸º 32 使ˆ– 64 ä½ã€‚ + - `S128`ï¼šå †æ ˆå¯¹é½ä¸º 128 ä½ã€‚ + +- `arch`架构设置为`aarch64`,表示 ARM 64-bit 架构,这是现代 ARM 处ç†å™¨å¸¸ç”¨çš„ 64 使Œ‡ä»¤é›†æž¶æž„。 + +除æ¤ä¹‹å¤–,在optionä¸è¿˜æœ‰å¦‚下é…置: + +```rust +os: "rtsmart".into(), +dynamic_linking: true, +executables: true, +families: cvs!["unix"], +has_rpath: true, +pre_link_args: args, + +// linker_flavor: LinkerFlavor::Ld, +// link_script: Some(LINKER_SCRIPT.to_string()), + +crt_static_default: true, + +panic_strategy: PanicStrategy::Abort, +disable_redzone: true, +emit_debug_gdb_scripts: false, +//eh_frame_header: false, + +position_independent_executables: true, +relro_level: RelroLevel::Full, +// has_elf_tls: false, +crt_static_respected: true, +..Default::default() +``` + +这部分option用于定义以下é…置: + +- `os: "rtsmart".into()`ï¼šç›®æ ‡æ“作系统å称为`“rtsmartâ€` +- `dynamic_linking: true`ï¼šè¡¨ç¤ºç›®æ ‡å¹³å°æ”¯æŒåЍæ€é“¾æŽ¥åº“(如 `.so` 文件)。 +- `executables: true`ï¼šè¡¨ç¤ºç›®æ ‡å¹³å°æ”¯æŒç”Ÿæˆå¯æ‰§è¡Œæ–‡ä»¶ã€‚ +- `families: cvs!["unix"]`ï¼šæŒ‡å®šç›®æ ‡å¹³å°æ‰€å±žçš„æ“ä½œç³»ç»Ÿå®¶æ—为UNIX å®¶æ—。这å¯ä»¥å½±å“编译器对æŸäº›ç³»ç»Ÿç‰¹æ€§çš„å‡è®¾ã€‚ +- ...... + +ç‰ç‰ä¸€ç³»åˆ—é…置完æˆåŽï¼Œåœ¨`spec/mod.rs`ä¸çš„第1705è¡Œå¢žåŠ æ¨¡å—定义 + +```rust +("aarch64-unknown-rtsmart", aarch64_unknown_rtsmart) +``` + +è¿™æ ·å°±åˆ›å»ºäº†ä¸€ä¸ªæ–°çš„ç¼–è¯‘ç›®æ ‡ã€‚ + ## å…ã€ç¼–å†™æ ‡å‡†åº“ ### 1. stdout库