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">{
-  &quot;keyToString&quot;: {
-    &quot;ASKED_ADD_EXTERNAL_FILES&quot;: &quot;true&quot;,
-    &quot;RunOnceActivity.OpenProjectViewOnStart&quot;: &quot;true&quot;,
-    &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
-    &quot;RunOnceActivity.cidr.known.project.marker&quot;: &quot;true&quot;,
-    &quot;RunOnceActivity.readMode.enableVisualFormatting&quot;: &quot;true&quot;,
-    &quot;RunOnceActivity.rust.reset.selective.auto.import&quot;: &quot;true&quot;,
-    &quot;cf.first.check.clang-format&quot;: &quot;false&quot;,
-    &quot;cidr.known.project.marker&quot;: &quot;true&quot;,
-    &quot;git-widget-placeholder&quot;: &quot;master&quot;,
-    &quot;last_opened_file_path&quot;: &quot;/home/diandianjun/os-educg/project2210132-226009/examples/example3/thread_test&quot;,
-    &quot;node.js.detected.package.eslint&quot;: &quot;true&quot;,
-    &quot;node.js.detected.package.tslint&quot;: &quot;true&quot;,
-    &quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,
-    &quot;node.js.selected.package.tslint&quot;: &quot;(autodetect)&quot;,
-    &quot;nodejs_package_manager_path&quot;: &quot;npm&quot;,
-    &quot;org.rust.cargo.project.model.PROJECT_DISCOVERY&quot;: &quot;true&quot;,
-    &quot;org.rust.cargo.project.model.impl.CargoExternalSystemProjectAware.subscribe.first.balloon&quot;: &quot;&quot;,
-    &quot;org.rust.first.attach.projects&quot;: &quot;true&quot;,
-    &quot;settings.editor.selected.configurable&quot;: &quot;advanced.settings&quot;,
-    &quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;
+  <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虚拟机磁盘后运行
+
+运行结果如下图所示:
+
+![](../img/2024.04.22-2024.04.29-work-log/thread_test.png)
+
+观察到两个线程交替输出,最后正常结束
+
+## 总结
+
+本周的工作主要是编写了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虚拟机磁盘后运行
+
+运行结果如下图所示:
+
+![](../img/2024.04.30-2024.05.06-work-log/mutex_test.png)
+
+观察到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虚拟机磁盘后运行
+
+运行结果如下图所示:
+
+![](../img/2024.05.07-2024.05.14-work-log/read_test.png)
+
+可以观察到输入了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文件
+
+![](../img/2024.05.15-2024.05.22-work-log/file_test1.png)
+
+运行file_test程序,发现如下输出:
+
+![](../img/2024.05.15-2024.05.22-work-log/file_test2.png)
+
+成功将写入的Hello,world!读取出来
+
+再使用ls命令查看文件目录下的文件
+
+![](../img/2024.05.15-2024.05.22-work-log/file_test3.png)
+
+会发现多出了一个test.txt文件,是我们新创建的。
+
+回到linux环境下的文件系统,查看文件目录,发现存在test.txt文件
+
+![](../img/2024.05.15-2024.05.22-work-log/file_test4.png)
+
+用cat命令查看其中的内容,发现与我们写入的内容是一致的
+
+![](../img/2024.05.15-2024.05.22-work-log/file_test5.png)
+
+至此,文件系统的测试结束,功能正常。
+
+## 总结与展望
+
+本周的工作主要是编写了`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库