Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
rcore-os
RCore Tutorial V3
提交
b2627812
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 搜索 >>
提交
b2627812
编写于
1月 10, 2023
作者:
chyyuu1972
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix bug in impl Drop for FrameTracker, for the correctly mapping/unmapping display buffer in app
上级
fbb59236
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
16 addition
and
5 deletion
+16
-5
os/src/mm/frame_allocator.rs
os/src/mm/frame_allocator.rs
+7
-3
os/src/mm/memory_set.rs
os/src/mm/memory_set.rs
+5
-1
os/src/syscall/gui.rs
os/src/syscall/gui.rs
+1
-1
user/src/bin/gui_rect.rs
user/src/bin/gui_rect.rs
+1
-0
user/src/bin/gui_snake.rs
user/src/bin/gui_snake.rs
+1
-0
user/src/bin/gui_uart.rs
user/src/bin/gui_uart.rs
+1
-0
未找到文件。
os/src/mm/frame_allocator.rs
浏览文件 @
b2627812
...
...
@@ -7,6 +7,7 @@ use lazy_static::*;
pub
struct
FrameTracker
{
pub
ppn
:
PhysPageNum
,
pub
nodrop
:
bool
,
}
impl
FrameTracker
{
...
...
@@ -16,10 +17,10 @@ impl FrameTracker {
for
i
in
bytes_array
{
*
i
=
0
;
}
Self
{
ppn
}
Self
{
ppn
,
nodrop
:
false
}
}
pub
fn
new_no
write
(
ppn
:
PhysPageNum
)
->
Self
{
Self
{
ppn
}
pub
fn
new_no
alloc
(
ppn
:
PhysPageNum
)
->
Self
{
Self
{
ppn
,
nodrop
:
true
}
}
}
...
...
@@ -31,6 +32,9 @@ impl Debug for FrameTracker {
impl
Drop
for
FrameTracker
{
fn
drop
(
&
mut
self
)
{
if
self
.nodrop
{
return
;
}
frame_dealloc
(
self
.ppn
);
}
}
...
...
os/src/mm/memory_set.rs
浏览文件 @
b2627812
...
...
@@ -290,6 +290,9 @@ impl MapArea {
ppn
=
frame
.ppn
;
self
.data_frames
.insert
(
vpn
,
frame
);
}
MapType
::
Noalloc
=>
{
panic!
(
"Noalloc should not be mapped"
);
}
}
let
pte_flags
=
PTEFlags
::
from_bits
(
self
.map_perm.bits
)
.unwrap
();
page_table
.map
(
vpn
,
ppn
,
pte_flags
);
...
...
@@ -307,7 +310,7 @@ impl MapArea {
}
pub
fn
map_noalloc
(
&
mut
self
,
page_table
:
&
mut
PageTable
,
ppn_range
:
PPNRange
)
{
for
(
vpn
,
ppn
)
in
core
::
iter
::
zip
(
self
.vpn_range
,
ppn_range
)
{
self
.data_frames
.insert
(
vpn
,
FrameTracker
::
new_no
write
(
ppn
));
self
.data_frames
.insert
(
vpn
,
FrameTracker
::
new_no
alloc
(
ppn
));
let
pte_flags
=
PTEFlags
::
from_bits
(
self
.map_perm.bits
)
.unwrap
();
page_table
.map
(
vpn
,
ppn
,
pte_flags
);
}
...
...
@@ -346,6 +349,7 @@ impl MapArea {
pub
enum
MapType
{
Identical
,
Framed
,
Noalloc
,
}
bitflags!
{
...
...
os/src/syscall/gui.rs
浏览文件 @
b2627812
...
...
@@ -22,7 +22,7 @@ pub fn sys_framebuffer() -> isize {
MapArea
::
new
(
(
FB_VADDR
as
usize
)
.into
(),
(
FB_VADDR
+
len
as
usize
)
.into
(),
MapType
::
Framed
,
MapType
::
Noalloc
,
MapPermission
::
R
|
MapPermission
::
W
|
MapPermission
::
U
,
),
PPNRange
::
new
(
fb_ppn
,
fb_end_ppn
),
...
...
user/src/bin/gui_rect.rs
浏览文件 @
b2627812
...
...
@@ -108,6 +108,7 @@ impl DrawingBoard {
pub
fn
main
()
->
i32
{
// let fb_ptr = framebuffer() as *mut u8;
let
mut
board
=
DrawingBoard
::
new
();
let
_
=
board
.disp
.clear
(
Rgb888
::
BLACK
)
.unwrap
();
for
i
in
0
..
20
{
board
.latest_pos.x
+=
i
;
board
.latest_pos.y
+=
i
;
...
...
user/src/bin/gui_snake.rs
浏览文件 @
b2627812
...
...
@@ -382,6 +382,7 @@ const CR: u8 = 0x0du8;
pub
fn
main
()
->
i32
{
let
mut
disp
=
Display
::
new
(
Size
::
new
(
1280
,
800
),
Point
::
new
(
0
,
0
));
let
mut
game
=
SnakeGame
::
<
20
,
Rgb888
>
::
new
(
1280
,
800
,
20
,
20
,
Rgb888
::
RED
,
Rgb888
::
YELLOW
,
50
);
let
_
=
disp
.clear
(
Rgb888
::
BLACK
)
.unwrap
();
loop
{
if
key_pressed
()
{
let
c
=
getchar
();
...
...
user/src/bin/gui_uart.rs
浏览文件 @
b2627812
...
...
@@ -111,6 +111,7 @@ const CR: u8 = 0x0du8;
pub
fn
main
()
->
i32
{
// let fb_ptr = framebuffer() as *mut u8;
let
mut
board
=
DrawingBoard
::
new
();
let
_
=
board
.disp
.clear
(
Rgb888
::
BLACK
)
.unwrap
();
for
i
in
0
..
20
{
let
c
=
getchar
();
if
c
==
LF
||
c
==
CR
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录