Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
rcore-os
RCore Tutorial V3
提交
0c12d43b
R
RCore Tutorial V3
项目概览
rcore-os
/
RCore Tutorial V3
上一次同步 1 年多
通知
15
Star
793
Fork
260
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
4
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
RCore Tutorial V3
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
4
Issue
4
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
0c12d43b
编写于
12月 08, 2020
作者:
Y
Yifan Wu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Get app data by name.
上级
949f2095
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
39 addition
and
0 deletion
+39
-0
os/build.rs
os/build.rs
+7
-0
os/src/loader.rs
os/src/loader.rs
+32
-0
未找到文件。
os/build.rs
浏览文件 @
0c12d43b
...
...
@@ -34,6 +34,13 @@ _num_app:
}
writeln!
(
f
,
r#" .quad app_{}_end"#
,
apps
.len
()
-
1
)
?
;
writeln!
(
f
,
r#"
.global _app_names
_app_names:"#
)
?
;
for
app
in
apps
.iter
()
{
writeln!
(
f
,
r#" .string "{}\n""#
,
app
)
?
;
}
for
(
idx
,
app
)
in
apps
.iter
()
.enumerate
()
{
println!
(
"app_{}: {}"
,
idx
,
app
);
writeln!
(
f
,
r#"
...
...
os/src/loader.rs
浏览文件 @
0c12d43b
use
alloc
::
vec
::
Vec
;
pub
fn
get_num_app
()
->
usize
{
extern
"C"
{
fn
_
num_app
();
}
unsafe
{
(
_
num_app
as
usize
as
*
const
usize
)
.read_volatile
()
}
...
...
@@ -18,3 +20,33 @@ pub fn get_app_data(app_id: usize) -> &'static [u8] {
)
}
}
#[allow(unused)]
pub
fn
get_app_data_by_name
(
name
:
&
str
)
->
Option
<&
'static
[
u8
]
>
{
let
num_app
=
get_num_app
();
let
app_names
=
app_names
();
(
0
..
num_app
)
.find
(|
&
i
|
app_names
[
i
]
==
name
)
.map
(|
i
|
get_app_data
(
i
))
}
#[allow(unused)]
fn
app_names
()
->
Vec
<&
'static
str
>
{
let
num_app
=
get_num_app
();
extern
"C"
{
fn
_
app_names
();
}
let
mut
start
=
_
app_names
as
usize
as
*
const
u8
;
let
mut
v
=
Vec
::
new
();
unsafe
{
for
_
in
0
..
num_app
{
let
mut
end
=
start
;
while
end
.read_volatile
()
!=
'\n'
as
u8
{
end
=
end
.add
(
1
);
}
let
slice
=
core
::
slice
::
from_raw_parts
(
start
,
end
as
usize
-
start
as
usize
);
let
str
=
core
::
str
::
from_utf8
(
slice
)
.unwrap
();
v
.push
(
str
);
start
=
end
.add
(
1
);
}
}
v
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录