Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
BaiXuePrincess
rt-thread
提交
5ac0ed74
R
rt-thread
项目概览
BaiXuePrincess
/
rt-thread
与 Fork 源项目一致
Fork自
RT-Thread / rt-thread
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rt-thread
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
5ac0ed74
编写于
10月 01, 2015
作者:
B
Bernard Xiong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[BSP] remove testdll in the simualtor BSP
上级
1ac6bc6c
变更
13
隐藏空白更改
内联
并排
Showing
13 changed file
with
0 addition
and
1027 deletion
+0
-1027
bsp/simulator/testdll/SConstruct
bsp/simulator/testdll/SConstruct
+0
-85
bsp/simulator/testdll/basicapp/Sconscript
bsp/simulator/testdll/basicapp/Sconscript
+0
-7
bsp/simulator/testdll/basicapp/basicapp.c
bsp/simulator/testdll/basicapp/basicapp.c
+0
-30
bsp/simulator/testdll/label/Sconscript
bsp/simulator/testdll/label/Sconscript
+0
-7
bsp/simulator/testdll/label/label_demo1.c
bsp/simulator/testdll/label/label_demo1.c
+0
-74
bsp/simulator/testdll/rtconfig.py
bsp/simulator/testdll/rtconfig.py
+0
-51
bsp/simulator/testdll/rttapp.def
bsp/simulator/testdll/rttapp.def
+0
-3
bsp/simulator/testdll/snake/SConscript
bsp/simulator/testdll/snake/SConscript
+0
-7
bsp/simulator/testdll/snake/snake.c
bsp/simulator/testdll/snake/snake.c
+0
-271
bsp/simulator/testdll/snake/snake.h
bsp/simulator/testdll/snake/snake.h
+0
-68
bsp/simulator/testdll/snake/snake_gui.c
bsp/simulator/testdll/snake/snake_gui.c
+0
-397
bsp/simulator/testdll/var/Sconscript
bsp/simulator/testdll/var/Sconscript
+0
-7
bsp/simulator/testdll/var/var.c
bsp/simulator/testdll/var/var.c
+0
-20
未找到文件。
bsp/simulator/testdll/SConstruct
已删除
100644 → 0
浏览文件 @
1ac6bc6c
import
os
import
sys
import
SCons.cpp
import
rtconfig
if
os
.
getenv
(
'RTT_ROOT'
):
RTT_ROOT
=
os
.
getenv
(
'RTT_ROOT'
)
else
:
RTT_ROOT
=
os
.
path
.
normpath
(
os
.
getcwd
()
+
'/../..'
)
if
os
.
getenv
(
'RTT_RTGUI'
):
RTT_RTGUI
=
os
.
getenv
(
'RTT_RTGUI'
)
else
:
# set the rtgui root directory by hand
# empty string means use the RTGUI in svn
RTT_RTGUI
=
os
.
path
.
normpath
(
r
'F:\Project\git\rt-gui\components\rtgui'
)
# RTT_RTGUI =''
sys
.
path
=
sys
.
path
+
[
os
.
path
.
join
(
RTT_ROOT
,
'tools'
)]
from
building
import
*
Export
(
'RTT_ROOT'
)
# add target option
AddOption
(
'--app'
,
dest
=
'app'
,
nargs
=
1
,
type
=
'string'
,
action
=
'store'
,
metavar
=
'DIR'
,
help
=
'installation prefix'
)
# add target option
AddOption
(
'--type'
,
dest
=
'type'
,
nargs
=
1
,
type
=
'string'
,
action
=
'store'
,
metavar
=
'DIR'
,
help
=
'installation prefix'
)
app
=
GetOption
(
'app'
)
env
=
Environment
(
TARGET_ARCH
=
'x86'
)
CPPPATH
=
[
RTT_ROOT
+
'/include'
,
RTT_ROOT
+
'/bsp/'
+
rtconfig
.
BSP
,
RTT_ROOT
+
'/components/finsh'
,
RTT_ROOT
+
'/components/libdl'
,
RTT_ROOT
+
'/components/external/ftk/ftk/src/os/rt-thread'
,
RTT_ROOT
+
'/components/external/ftk/ftk/src/demos'
,
RTT_ROOT
+
'/components/external/ftk/ftk/apps/common'
,
RTT_ROOT
+
'/components/external/ftk/ftk/src'
,
RTT_ROOT
+
'/components/dfs'
,
RTT_ROOT
+
'/components/dfs/include'
,
RTT_ROOT
+
'/components/libc/newlib'
,
RTT_ROOT
+
'/components/external/cairo/cairo-1.10.2/src'
,
RTT_ROOT
+
'/components/external/cairo/'
]
if
RTT_RTGUI
:
RTGUI_ROOT
=
RTT_RTGUI
else
:
RTGUI_ROOT
=
RTT_ROOT
+
'/components/rtgui'
RTGUI_PATH
=
[
RTGUI_ROOT
+
'/include'
,
RTGUI_ROOT
+
'/common'
,
RTGUI_ROOT
+
'/server'
,
RTGUI_ROOT
+
'/widgets'
,
]
CPPPATH
+=
RTGUI_PATH
env
.
Append
(
CCFLAGS
=
rtconfig
.
CFLAGS
)
env
.
Append
(
LINKFLAGS
=
rtconfig
.
LFLAGS
)
env
.
Append
(
CPPPATH
=
CPPPATH
)
env
.
Append
(
LIBS
=
'rtthread'
,
LIBPATH
=
'../'
)
env
.
Append
(
CPPDEFINES
=
[
'RTT_IN_MODULE'
])
env
.
PrependENVPath
(
'PATH'
,
rtconfig
.
EXEC_PATH
)
PrepareModuleBuilding
(
env
,
RTT_ROOT
)
#dir = app + '/build/' + rtconfig.BSP
dir
=
app
+
'/build/'
objs
=
SConscript
(
app
+
'/Sconscript'
,
variant_dir
=
dir
,
duplicate
=
0
)
TARGET
=
dir
+
'/'
+
app
+
'.'
+
rtconfig
.
TARGET_EXT
# build program
#env.Program(TARGET, objs)
env
.
SharedLibrary
(
TARGET
,
objs
)
bsp/simulator/testdll/basicapp/Sconscript
已删除
100644 → 0
浏览文件 @
1ac6bc6c
import
rtconfig
Import
(
'RTT_ROOT'
)
from
building
import
*
src
=
Glob
(
'*.c'
)
group
=
DefineGroup
(
''
,
src
,
depend
=
[
''
])
Return
(
'group'
)
\ No newline at end of file
bsp/simulator/testdll/basicapp/basicapp.c
已删除
100644 → 0
浏览文件 @
1ac6bc6c
#include <rtthread.h>
static
int
a
=
0
;
static
int
b
=
1000000
;
int
c
=
100
;
static
void
function
(
int
count1
,
int
count2
,
int
count3
)
{
rt_kprintf
(
"Hello RT-Thread %d %d
\n
"
,
count1
,
count2
,
count3
);
}
int
main
(
void
)
{
int
i
;
rt_kprintf
(
"application entry
\n
"
);
rt_kprintf
(
"[addr]a-0x%x,b-0x%x,c-0x%x
\n
"
,
&
a
,
&
b
,
&
c
);
rt_kprintf
(
"[value]a-%d,b-%d,c-%d
\n
"
,
a
,
b
,
c
);
for
(
i
=
0
;
i
<
100
;
i
++
)
{
a
++
;
b
--
;
c
++
;
function
(
a
,
c
,
b
);
}
return
0
;
}
bsp/simulator/testdll/label/Sconscript
已删除
100644 → 0
浏览文件 @
1ac6bc6c
import
rtconfig
Import
(
'RTT_ROOT'
)
from
building
import
*
src
=
Glob
(
'*.c'
)
group
=
DefineGroup
(
''
,
src
,
depend
=
[
''
])
Return
(
'group'
)
\ No newline at end of file
bsp/simulator/testdll/label/label_demo1.c
已删除
100644 → 0
浏览文件 @
1ac6bc6c
#include <rtthread.h>
#include <rtgui/rtgui.h>
#include <rtgui/rtgui_app.h>
#include <rtgui/widgets/window.h>
#include <rtgui/widgets/label.h>
#include <rtgui/driver.h>
/* 在LCD上创建一个主窗口,这是第一个窗口 */
static
void
win_thread_entry
(
void
*
parameter
)
{
struct
rtgui_app
*
app
;
struct
rtgui_win
*
win
;
struct
rtgui_label
*
label
;
struct
rtgui_rect
rect
;
app
=
rtgui_app_create
(
rt_thread_self
(),
"MyApp"
);
RT_ASSERT
(
app
!=
RT_NULL
);
/* create a full screen window */
rtgui_graphic_driver_get_rect
(
rtgui_graphic_driver_get_default
(),
&
rect
);
win
=
rtgui_win_create
(
RT_NULL
,
"MainWin"
,
&
rect
,
RTGUI_WIN_STYLE_NO_BORDER
|
RTGUI_WIN_STYLE_NO_TITLE
);
if
(
win
==
RT_NULL
)
{
rtgui_app_destroy
(
app
);
return
;
}
/* 建立一个label,内容为helloworld */
label
=
rtgui_label_create
(
"Hello World!"
);
/* 设置label的位置,这里是绝对坐标 */
rect
.
x1
=
0
;
rect
.
y1
=
100
;
rect
.
x2
=
240
;
rect
.
y2
=
140
;
rtgui_widget_set_rect
(
RTGUI_WIDGET
(
label
),
&
rect
);
rt_kprintf
(
"bc: %x
\n
"
,
RTGUI_WIDGET_BACKGROUND
(
label
));
rt_kprintf
(
"fc: %x
\n
"
,
RTGUI_WIDGET_FOREGROUND
(
label
));
#if 0
RTGUI_WIDGET_BACKGROUND(label) = 0;
RTGUI_WIDGET_FOREGROUND(label) = RTGUI_RGB(0xFF, 0xFF, 0);
#endif
/*添加label到主窗口*/
rtgui_container_add_child
(
RTGUI_CONTAINER
(
win
),
RTGUI_WIDGET
(
label
));
/* 显示主窗口 */
rtgui_win_show
(
win
,
RT_FALSE
);
/* 循环 */
rtgui_app_run
(
app
);
rtgui_win_destroy
(
win
);
rtgui_app_destroy
(
app
);
rt_kprintf
(
"MyApp Quit.
\n
"
);
}
int
main
()
{
rt_thread_t
tid
;
tid
=
rt_thread_create
(
"win"
,
win_thread_entry
,
RT_NULL
,
2048
,
20
,
20
);
if
(
tid
!=
RT_NULL
)
{
rt_thread_startup
(
tid
);
}
return
0
;
}
bsp/simulator/testdll/rtconfig.py
已删除
100644 → 0
浏览文件 @
1ac6bc6c
# bsp name
BSP
=
'simulator'
# toolchains
EXEC_PATH
=
''
PREFIX
=
''
TARGET_EXT
=
'dll'
AS
=
PREFIX
+
'cl'
CC
=
PREFIX
+
'cl'
AR
=
PREFIX
+
'cl'
LINK
=
PREFIX
+
'cl'
AFLAGS
=
''
CFLAGS
=
''
LFLAGS
=
''
BUILD
=
'debug'
if
BUILD
==
'debug'
:
CFLAGS
+=
' /MTd'
LFLAGS
+=
' /DEBUG'
else
:
CFLAGS
+=
' /MT'
LFLAGS
+=
''
CFLAGS
+=
' /ZI /Od /W 3 /WL'
LFLAGS
+=
' /DEF:rttapp.def /SUBSYSTEM:CONSOLE /MACHINE:X86'
#LFLAGS += ' /DEF:rttapp.def /SUBSYSTEM:WINDOWS /MACHINE:X86' #/ENTRY:mainCRTStartup
CPATH
=
''
LPATH
=
''
'''
EXEC_PATH = 'C:/Program Files/CodeSourcery/Sourcery G++ Lite/bin'
PREFIX = 'arm-none-eabi-'
CC = PREFIX + 'gcc'
CXX = PREFIX + 'g++'
AS = PREFIX + 'gcc'
AR = PREFIX + 'ar'
LINK = PREFIX + 'gcc'
TARGET_EXT = 'so'
SIZE = PREFIX + 'size'
OBJDUMP = PREFIX + 'objdump'
OBJCPY = PREFIX + 'objcopy'
DEVICE = ' -mcpu=arm920t'
CFLAGS = DEVICE + ' -O0 -fPIC -DFTK_AS_PLUGIN -DRT_THREAD '
AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp'
LFLAGS = DEVICE + ' -Wl,-z,max-page-size=0x4 -shared -fPIC -nostdlib -s'
CPATH = ''
LPATH = ''
'''
bsp/simulator/testdll/rttapp.def
已删除
100644 → 0
浏览文件 @
1ac6bc6c
LIBRARY app
EXPORTS
main
bsp/simulator/testdll/snake/SConscript
已删除
100644 → 0
浏览文件 @
1ac6bc6c
import
rtconfig
Import
(
'RTT_ROOT'
)
from
building
import
*
src
=
Glob
(
'*.c'
)
group
=
DefineGroup
(
''
,
src
,
depend
=
[
''
])
Return
(
'group'
)
bsp/simulator/testdll/snake/snake.c
已删除
100644 → 0
浏览文件 @
1ac6bc6c
#include <string.h>
#include <stdlib.h>
#include <rtthread.h>
#include "snake.h"
#define ASSERT_RET(x, ret) \
do{ \
if (x) \
return ret; \
}while(0)
rt_list_t
snake_head
;
SNAKE_DIR
prevdir
,
newdir
;
static
SNAKE_DIR
dir_adjust
(
SNAKE_DIR
dir
)
{
if
((
SNAKE_DIR_UP
==
prevdir
&&
SNAKE_DIR_DOWN
!=
dir
)
||
(
SNAKE_DIR_DOWN
==
prevdir
&&
SNAKE_DIR_UP
!=
dir
)
||
(
SNAKE_DIR_LEFT
==
prevdir
&&
SNAKE_DIR_RIGHT
!=
dir
)
||
(
SNAKE_DIR_RIGHT
==
prevdir
&&
SNAKE_DIR_LEFT
!=
dir
)
)
{
newdir
=
dir
;
}
else
{
rt_kprintf
(
"dirction change error
\n\r
"
);
}
return
newdir
;
}
static
void
across_XY
(
point_t
*
node
,
const
map_t
*
map
)
{
RT_ASSERT
(
node
!=
RT_NULL
&&
map
!=
RT_NULL
);
// 如果长度超出当前边框则可以穿越墙到对面
node
->
x
=
(
node
->
x
+
map
->
width
)
%
map
->
width
;
node
->
y
=
(
node
->
y
+
map
->
height
)
%
map
->
height
;
}
static
SYS_STE
node_update
(
snake_t
*
tail
,
const
point_t
*
node
,
map_t
*
map
)
{
SYS_STE
ret
;
point_t
*
pos
;
RT_ASSERT
(
tail
!=
RT_NULL
&&
node
!=
RT_NULL
&&
map
!=
RT_NULL
);
pos
=
map
->
snake_flush
;
pos
[
0
].
x
=
pos
[
0
].
y
=
-
1
;
pos
[
1
].
x
=
pos
[
1
].
y
=
-
1
;
ret
=
(
SYS_STE
)
map
->
range
[
node
->
y
*
map
->
width
+
node
->
x
];
if
(
FOOD
==
map
->
range
[
node
->
y
*
map
->
width
+
node
->
x
])
{
// 吃一个食物增加一个节点
snake_t
*
new
=
(
snake_t
*
)
rt_malloc
(
sizeof
(
snake_t
));
if
(
!
new
)
return
NORMAL
;
pos
[
0
]
=
*
node
;
new
->
body
=
*
node
;
rt_list_insert_after
(
&
snake_head
,
&
new
->
list
);
}
else
if
(
NORMAL
==
map
->
range
[
node
->
y
*
map
->
width
+
node
->
x
])
{
// 将尾巴修改后拿到头部,其他不变
rt_list_remove
(
&
tail
->
list
);
map
->
range
[
tail
->
body
.
y
*
map
->
width
+
tail
->
body
.
x
]
=
NORMAL
;
pos
[
0
]
=
*
node
;
pos
[
1
]
=
tail
->
body
;
tail
->
body
=
*
node
;
rt_list_insert_after
(
&
snake_head
,
&
tail
->
list
);
}
map
->
range
[
node
->
y
*
map
->
width
+
node
->
x
]
=
OVER
;
if
(
ret
!=
OVER
)
prevdir
=
newdir
;
return
ret
;
}
map_t
*
map_init
(
rt_uint32_t
width
,
rt_uint32_t
heigth
)
{
map_t
*
map
=
rt_malloc
(
sizeof
(
map_t
));
if
(
map
!=
RT_NULL
)
{
map
->
range
=
rt_malloc
(
heigth
*
width
);
if
(
!
map
->
range
)
{
rt_free
(
map
);
map
=
RT_NULL
;
}
else
{
map
->
width
=
width
;
map
->
height
=
heigth
;
memset
(
map
->
range
,
NORMAL
,
heigth
*
width
);
}
}
return
map
;
}
// 构造一条指定长度的蛇在指定点
rt_bool_t
snake_init
(
const
point_t
*
start
,
const
int
length
,
const
SNAKE_DIR
dir
,
map_t
*
map
)
{
rt_int32_t
i
;
rt_int32_t
inc_x
,
inc_y
;
point_t
old
=
*
start
;
ASSERT_RET
(
!
map
||
!
start
,
RT_FALSE
);
rt_list_init
(
&
snake_head
);
if
(
dir
==
SNAKE_DIR_UP
||
dir
==
SNAKE_DIR_DOWN
)
{
if
(
map
->
height
<=
length
)
return
RT_FALSE
;
inc_x
=
0
;
inc_y
=
dir
==
SNAKE_DIR_DOWN
?
1
:
-
1
;
// 反向延长身子,头部在指定位置
old
.
y
-=
inc_y
;
}
else
{
if
(
map
->
width
<=
length
)
return
RT_FALSE
;
inc_y
=
0
;
inc_x
=
dir
==
SNAKE_DIR_RIGHT
?
-
1
:
1
;
old
.
x
-=
inc_x
;
}
for
(
i
=
0
;
i
<
length
;
i
++
)
{
snake_t
*
new
=
(
snake_t
*
)
rt_malloc
(
sizeof
(
snake_t
));
if
(
!
new
)
return
RT_FALSE
;
new
->
body
.
y
=
inc_y
+
old
.
y
;
new
->
body
.
x
=
inc_x
+
old
.
x
;
// 如果长度超出当前边框则可以穿越墙到对面
across_XY
(
&
new
->
body
,
map
);
map
->
range
[
new
->
body
.
y
*
map
->
width
+
new
->
body
.
x
]
=
OVER
;
old
=
new
->
body
;
rt_list_insert_before
(
&
snake_head
,
&
new
->
list
);
}
prevdir
=
dir
;
return
RT_TRUE
;
}
// 构造出食物
rt_bool_t
food_init
(
map_t
*
map
,
rt_uint32_t
max_num
)
{
point_t
food
;
#ifndef FOOD_TIMEOUT
#define FOOD_TIMEOUT 10
#endif
rt_uint32_t
timeout
,
num
;
ASSERT_RET
(
!
map
,
RT_FALSE
);
num
=
0
;
timeout
=
rt_tick_get
();
srand
(
rand
());
map
->
food_flush
[
0
].
x
=
map
->
food_flush
[
0
].
y
=
-
1
;
do
{
food
.
x
=
rand
()
%
map
->
width
;
food
.
y
=
rand
()
%
map
->
height
;
if
(
map
->
range
[
food
.
y
*
map
->
width
+
food
.
x
]
==
NORMAL
)
{
map
->
food_flush
[
0
]
=
food
;
map
->
range
[
food
.
y
*
map
->
width
+
food
.
x
]
=
FOOD
;
num
++
;
}
}
while
(
num
<
max_num
&&
rt_tick_get
()
-
timeout
<
FOOD_TIMEOUT
);
return
num
;
}
void
map_deinit
(
map_t
*
map
)
{
if
(
map
)
{
if
(
map
->
range
)
{
rt_free
(
map
->
range
);
map
->
range
=
RT_NULL
;
}
rt_free
(
map
);
}
}
void
snake_deinit
(
void
)
{
snake_t
*
node
;
while
(
!
rt_list_isempty
(
&
snake_head
))
{
node
=
rt_list_entry
(
snake_head
.
prev
,
snake_t
,
list
);
rt_list_remove
(
&
node
->
list
);
rt_free
(
node
);
}
}
void
food_deinit
(
void
)
{
}
SYS_STE
snake_step
(
SNAKE_DIR
dir
,
map_t
*
map
)
{
snake_t
*
tail
,
*
head
;
point_t
node
;
ASSERT_RET
(
!
map
,
RT_FALSE
);
dir
=
dir_adjust
(
dir
);
// 取出头尾两个节点,其他节点不需要改变
tail
=
rt_list_entry
(
snake_head
.
prev
,
snake_t
,
list
);
head
=
rt_list_entry
(
snake_head
.
next
,
snake_t
,
list
);
node
=
head
->
body
;
// 构造一个新的蛇头坐标
switch
(
dir
)
{
case
SNAKE_DIR_UP
:
case
SNAKE_DIR_DOWN
:
node
.
y
=
head
->
body
.
y
+
(
dir
==
SNAKE_DIR_DOWN
?
-
1
:
1
);
break
;
case
SNAKE_DIR_LEFT
:
case
SNAKE_DIR_RIGHT
:
node
.
x
=
head
->
body
.
x
+
(
dir
==
SNAKE_DIR_RIGHT
?
1
:
-
1
);
break
;
}
across_XY
(
&
node
,
map
);
return
node_update
(
tail
,
&
node
,
map
);
}
rt_bool_t
snake_restart
(
const
point_t
*
start
,
const
int
length
,
const
SNAKE_DIR
dir
,
map_t
*
map
)
{
ASSERT_RET
(
!
map
||
!
start
,
RT_FALSE
);
snake_deinit
();
memset
(
map
->
range
,
NORMAL
,
map
->
width
*
map
->
height
);
return
snake_init
(
start
,
length
,
dir
,
map
);
}
bsp/simulator/testdll/snake/snake.h
已删除
100644 → 0
浏览文件 @
1ac6bc6c
#ifndef _SNAKE_H_
#define _SNAKE_H_
#include <rtthread.h>
#define snake_length_max 20 //最大蛇长
#define snake_length_init 3 //初始化蛇长
#define snake_room_size_hight 8 //房子高 0-255 建议>8
#define snake_room_size_widht 8 //房子宽 0-255 建议>8
#define snake_init_pointx 1
#define snake_init_pointy 2
typedef
struct
{
rt_int32_t
x
,
y
;
}
point_t
;
typedef
struct
{
rt_int32_t
width
;
// max x
rt_int32_t
height
;
// max y
rt_uint8_t
*
range
;
// map, map->range[y * map->width + x]
point_t
snake_flush
[
2
];
point_t
food_flush
[
1
];
}
map_t
;
typedef
enum
{
SNAKE_DIR_UP
,
SNAKE_DIR_DOWN
,
SNAKE_DIR_LEFT
,
SNAKE_DIR_RIGHT
}
SNAKE_DIR
;
typedef
enum
{
FOOD
,
// 吃到水果
OVER
,
// 咬到自身
NORMAL
// 正常行动
}
SYS_STE
;
typedef
struct
{
point_t
body
;
rt_list_t
list
;
}
snake_t
;
// 构造一个地图
map_t
*
map_init
(
rt_uint32_t
width
,
rt_uint32_t
heigth
);
// 构造一条指定长度的蛇在指定点
rt_bool_t
snake_init
(
const
point_t
*
start
,
const
int
length
,
const
SNAKE_DIR
dir
,
map_t
*
map
);
// 构造出食物
rt_bool_t
food_init
(
map_t
*
map
,
rt_uint32_t
max_num
);
void
map_deinit
(
map_t
*
map
);
void
snake_deinit
(
void
);
void
food_deinit
(
void
);
SYS_STE
snake_step
(
SNAKE_DIR
dir
,
map_t
*
map
);
rt_bool_t
snake_restart
(
const
point_t
*
start
,
const
int
length
,
const
SNAKE_DIR
dir
,
map_t
*
map
);
#endif
bsp/simulator/testdll/snake/snake_gui.c
已删除
100644 → 0
浏览文件 @
1ac6bc6c
#include <string.h>
#include <rtthread.h>
#include <rtgui/rtgui.h>
#include <rtgui/rtgui_app.h>
#include <rtgui/widgets/container.h>
#include <rtgui/widgets/window.h>
#include <rtgui/widgets/button.h>
#include "snake.h"
#define LATTICE_SIZE (20)
#define FOOD_MAX (8)
#define WALL_COLOR RTGUI_RGB(255, 0, 0)
#define SNAKE_COLOR RTGUI_RGB(0, 100, 200)
#define SNAKE_HEAD_COLOR RTGUI_RGB(180, 70, 130)
#define BACKGROUND_COLOR RTGUI_RGB(153, 153, 0)
#define FOOD_COLOR RTGUI_RGB(128, 0, 0)
static
rtgui_timer_t
*
timer
;
static
rt_size_t
room_size_x
,
room_size_y
;
static
rt_size_t
lattice_size_x
,
lattice_size_y
;
static
struct
rtgui_rect
room_rect
,
lattice_rect
;
map_t
*
map
;
SNAKE_DIR
run_state
;
rt_int32_t
snake_len
;
rt_int32_t
food_num
;
point_t
second_node
;
static
void
snake_fill_lattice
(
struct
rtgui_dc
*
dc
,
rt_uint32_t
x
,
rt_uint32_t
y
,
rtgui_color_t
color
)
{
struct
rtgui_rect
rect
;
// coordinate conversion
y
=
(
lattice_size_y
-
1
)
-
y
;
RTGUI_DC_BC
(
dc
)
=
color
;
rect
.
x1
=
lattice_rect
.
x1
+
(
LATTICE_SIZE
*
x
);
rect
.
x2
=
rect
.
x1
+
LATTICE_SIZE
;
rect
.
x1
+=
2
;
rect
.
y1
=
lattice_rect
.
y1
+
(
LATTICE_SIZE
*
y
);
rect
.
y2
=
rect
.
y1
+
LATTICE_SIZE
;
rect
.
y1
+=
2
;
rtgui_dc_fill_rect
(
dc
,
&
rect
);
}
static
void
snake_draw
(
struct
rtgui_widget
*
widget
)
{
struct
rtgui_dc
*
dc
;
struct
rtgui_rect
rect
;
rt_uint32_t
i
;
dc
=
rtgui_dc_begin_drawing
(
widget
);
if
(
dc
==
RT_NULL
)
{
rt_kprintf
(
"dc == RT_NULL
\r\n
"
);
return
;
}
/* get room size, run once frist. */
if
((
room_size_x
==
0
)
||
(
room_size_y
==
0
))
{
rt_size_t
tmp
;
rtgui_widget_get_rect
(
widget
,
&
rect
);
rt_kprintf
(
"rect => x1:%d x2:%d, y1:%d y2:%d
\r\n
"
,
rect
.
x1
,
rect
.
x2
,
rect
.
y1
,
rect
.
y2
);
room_size_x
=
rect
.
x2
-
rect
.
x1
;
room_size_y
=
rect
.
y2
-
rect
.
y1
;
memcpy
(
&
room_rect
,
&
rect
,
sizeof
(
struct
rtgui_rect
));
rt_kprintf
(
"room_rect => x1:%d x2:%d, y1:%d y2:%d
\r\n
"
,
room_rect
.
x1
,
room_rect
.
x2
,
room_rect
.
y1
,
room_rect
.
y2
);
lattice_size_x
=
(
room_rect
.
x2
-
room_rect
.
x1
)
/
LATTICE_SIZE
;
lattice_size_y
=
(
room_rect
.
y2
-
room_rect
.
y1
)
/
LATTICE_SIZE
;
lattice_size_x
-=
2
;
lattice_size_y
-=
2
;
rt_kprintf
(
"lattice_size_x:%d lattice_size_y:%d
\r\n
"
,
lattice_size_x
,
lattice_size_y
);
tmp
=
(
room_rect
.
x2
-
room_rect
.
x1
)
-
(
LATTICE_SIZE
*
lattice_size_x
);
lattice_rect
.
x1
=
room_rect
.
x1
+
(
tmp
/
2
);
lattice_rect
.
x2
=
lattice_rect
.
x1
+
(
LATTICE_SIZE
*
lattice_size_x
);
tmp
=
(
room_rect
.
y2
-
room_rect
.
y1
)
-
(
LATTICE_SIZE
*
lattice_size_y
);
lattice_rect
.
y1
=
room_rect
.
y1
+
(
tmp
/
2
);
lattice_rect
.
y2
=
lattice_rect
.
y1
+
(
LATTICE_SIZE
*
lattice_size_y
);
rt_kprintf
(
"lattice_rect => x1:%d x2:%d, y1:%d y2:%d
\r\n
"
,
lattice_rect
.
x1
,
lattice_rect
.
x2
,
lattice_rect
.
y1
,
lattice_rect
.
y2
);
/* create snake. */
{
point_t
start
;
map
=
map_init
(
lattice_size_x
,
lattice_size_y
);
if
(
map
!=
RT_NULL
)
{
start
.
x
=
snake_init_pointx
;
start
.
y
=
snake_init_pointy
;
run_state
=
SNAKE_DIR_DOWN
;
if
(
snake_init
(
&
start
,
snake_length_init
,
run_state
,
map
))
{
food_num
=
1
;
food_init
(
map
,
food_num
);
}
else
{
map_deinit
(
map
);
map
=
RT_NULL
;
}
}
}
}
RTGUI_DC_BC
(
dc
)
=
BACKGROUND_COLOR
;
rtgui_dc_fill_rect
(
dc
,
&
room_rect
);
memcpy
(
&
rect
,
&
lattice_rect
,
sizeof
(
struct
rtgui_rect
));
rect
.
x2
+=
1
;
rect
.
y2
+=
1
;
RTGUI_DC_FC
(
dc
)
=
WALL_COLOR
;
rtgui_dc_draw_rect
(
dc
,
&
rect
);
for
(
i
=
1
;
i
<
lattice_size_y
;
i
++
)
{
memcpy
(
&
rect
,
&
lattice_rect
,
sizeof
(
struct
rtgui_rect
));
rect
.
x1
+=
1
;
rect
.
x2
-=
1
;
rtgui_dc_draw_horizontal_line
(
dc
,
rect
.
x1
,
rect
.
x2
,
rect
.
y1
+
(
LATTICE_SIZE
*
i
));
}
for
(
i
=
1
;
i
<
lattice_size_x
;
i
++
)
{
memcpy
(
&
rect
,
&
lattice_rect
,
sizeof
(
struct
rtgui_rect
));
rect
.
y1
+=
1
;
rect
.
y2
-=
1
;
rtgui_dc_draw_vertical_line
(
dc
,
rect
.
x1
+
(
LATTICE_SIZE
*
i
),
rect
.
y1
,
rect
.
y2
);
}
/* draw snake. */
{
rt_int32_t
x
,
y
;
rt_bool_t
first_node
=
RT_TRUE
;
for
(
y
=
0
;
y
<
map
->
height
;
y
++
)
{
for
(
x
=
0
;
x
<
map
->
width
;
x
++
)
{
switch
(
map
->
range
[
y
*
map
->
width
+
x
])
{
case
NORMAL
:
break
;
case
FOOD
:
snake_fill_lattice
(
dc
,
x
,
y
,
FOOD_COLOR
);
break
;
case
OVER
:
if
(
first_node
)
{
first_node
=
RT_FALSE
;
second_node
.
x
=
x
;
second_node
.
y
=
y
;
snake_fill_lattice
(
dc
,
x
,
y
,
SNAKE_HEAD_COLOR
);
}
else
{
snake_fill_lattice
(
dc
,
x
,
y
,
SNAKE_COLOR
);
}
break
;
}
}
}
}
rtgui_dc_end_drawing
(
dc
);
return
;
}
static
void
snake_update
(
struct
rtgui_widget
*
widget
)
{
struct
rtgui_dc
*
dc
;
rt_int32_t
x
,
y
;
rt_uint32_t
i
;
dc
=
rtgui_dc_begin_drawing
(
widget
);
if
(
dc
==
RT_NULL
)
{
rt_kprintf
(
"dc == RT_NULL
\r\n
"
);
return
;
}
snake_fill_lattice
(
dc
,
second_node
.
x
,
second_node
.
y
,
SNAKE_COLOR
);
second_node
=
map
->
snake_flush
[
0
];
for
(
i
=
0
;
i
<
3
;
i
++
)
{
if
(
i
<
2
)
{
x
=
map
->
snake_flush
[
i
].
x
;
y
=
map
->
snake_flush
[
i
].
y
;
}
else
{
x
=
map
->
food_flush
[
0
].
x
;
y
=
map
->
food_flush
[
0
].
y
;
}
if
((
x
>=
0
)
&&
(
y
>=
0
))
{
switch
(
map
->
range
[(
map
->
width
*
y
)
+
x
])
{
case
NORMAL
:
snake_fill_lattice
(
dc
,
x
,
y
,
BACKGROUND_COLOR
);
break
;
case
FOOD
:
snake_fill_lattice
(
dc
,
x
,
y
,
FOOD_COLOR
);
break
;
case
OVER
:
if
(
0
==
i
)
snake_fill_lattice
(
dc
,
x
,
y
,
SNAKE_HEAD_COLOR
);
else
snake_fill_lattice
(
dc
,
x
,
y
,
SNAKE_COLOR
);
break
;
}
}
}
rtgui_dc_end_drawing
(
dc
);
return
;
}
static
void
snake_handler
(
struct
rtgui_widget
*
widget
,
rtgui_event_t
*
event
)
{
struct
rtgui_event_kbd
*
ekbd
;
ekbd
=
(
struct
rtgui_event_kbd
*
)
event
;
if
(
ekbd
->
type
==
RTGUI_KEYDOWN
)
{
switch
(
ekbd
->
key
)
{
case
RTGUIK_UP
:
rt_kprintf
(
"RTGUIK_UP
\r\n
"
);
run_state
=
SNAKE_DIR_UP
;
break
;
case
RTGUIK_DOWN
:
rt_kprintf
(
"RTGUIK_DOWN
\r\n
"
);
run_state
=
SNAKE_DIR_DOWN
;
break
;
case
RTGUIK_LEFT
:
rt_kprintf
(
"RTGUIK_LEFT
\r\n
"
);
run_state
=
SNAKE_DIR_LEFT
;
break
;
case
RTGUIK_RIGHT
:
rt_kprintf
(
"RTGUIK_RIGHT
\r\n
"
);
run_state
=
SNAKE_DIR_RIGHT
;
break
;
default:
break
;
}
}
}
static
rt_bool_t
event_handler
(
struct
rtgui_object
*
object
,
rtgui_event_t
*
event
)
{
struct
rtgui_widget
*
widget
=
RTGUI_WIDGET
(
object
);
rt_kprintf
(
"event_handler
\r\n
"
);
if
(
event
->
type
==
RTGUI_EVENT_PAINT
)
{
rt_kprintf
(
"RTGUI_EVENT_PAINT
\r\n
"
);
rtgui_win_event_handler
((
struct
rtgui_object
*
)
object
,
event
);
snake_draw
(
widget
);
rtgui_timer_start
(
timer
);
}
else
if
(
event
->
type
==
RTGUI_EVENT_SHOW
)
{
rt_kprintf
(
"RTGUI_EVENT_SHOW
\r\n
"
);
rtgui_win_event_handler
((
struct
rtgui_object
*
)
object
,
event
);
snake_draw
(
widget
);
rtgui_timer_start
(
timer
);
}
else
if
(
event
->
type
==
RTGUI_EVENT_HIDE
)
{
rt_kprintf
(
"RTGUI_EVENT_HIDE
\r\n
"
);
rtgui_win_event_handler
((
struct
rtgui_object
*
)
object
,
event
);
rtgui_timer_stop
(
timer
);
}
else
if
(
event
->
type
==
RTGUI_EVENT_WIN_DEACTIVATE
)
{
rt_kprintf
(
"RTGUI_EVENT_WIN_DEACTIVATE
\r\n
"
);
rtgui_win_event_handler
((
struct
rtgui_object
*
)
object
,
event
);
rtgui_timer_stop
(
timer
);
}
else
if
(
event
->
type
==
RTGUI_EVENT_KBD
)
{
rtgui_win_event_handler
((
struct
rtgui_object
*
)
object
,
event
);
snake_handler
(
widget
,
event
);
}
else
{
rt_kprintf
(
"event->type:%d
\r\n
"
,
event
->
type
);
return
rtgui_win_event_handler
((
struct
rtgui_object
*
)
object
,
event
);
}
return
RT_FALSE
;
}
static
void
timeout
(
struct
rtgui_timer
*
timer
,
void
*
parameter
)
{
struct
rtgui_widget
*
widget
;
SYS_STE
ret
;
if
(
!
map
)
return
;
ret
=
snake_step
(
run_state
,
map
);
if
(
OVER
==
ret
)
return
;
if
(
FOOD
==
ret
)
{
snake_len
++
;
if
(
snake_len
>=
(
map
->
width
*
map
->
height
)
/
3
)
{
point_t
start
;
start
.
x
=
snake_init_pointx
;
start
.
y
=
snake_init_pointy
;
run_state
=
SNAKE_DIR_DOWN
;
snake_len
=
snake_length_init
;
if
(
!
snake_restart
(
&
start
,
snake_len
,
run_state
,
map
))
{
map_deinit
(
map
);
snake_deinit
();
map
=
RT_NULL
;
}
}
food_init
(
map
,
1
);
}
widget
=
RTGUI_WIDGET
(
parameter
);
snake_update
(
widget
);
}
void
main
(
void
)
{
struct
rtgui_app
*
application
;
struct
rtgui_win
*
win
;
rtgui_rect_t
rect
;
application
=
rtgui_app_create
(
"sanke_app"
);
if
(
application
!=
RT_NULL
)
{
rtgui_get_screen_rect
(
&
rect
);
rtgui_set_mainwin_rect
(
&
rect
);
win
=
rtgui_mainwin_create
(
RT_NULL
,
"sanke_win"
,
RTGUI_WIN_STYLE_MAINWIN
|
RTGUI_WIN_STYLE_DESTROY_ON_CLOSE
);
if
(
win
==
RT_NULL
)
{
rt_kprintf
(
"sanke_win create fail!
\r\n
"
);
return
;
}
rtgui_object_set_event_handler
(
RTGUI_OBJECT
(
win
),
event_handler
);
timer
=
rtgui_timer_create
(
RT_TICK_PER_SECOND
/
2
,
RT_TIMER_FLAG_PERIODIC
,
timeout
,
(
void
*
)
win
);
rtgui_win_show
(
win
,
RT_TRUE
);
//˳ŷ
map_deinit
(
map
);
snake_deinit
();
food_deinit
();
rtgui_app_destroy
(
application
);
}
}
bsp/simulator/testdll/var/Sconscript
已删除
100644 → 0
浏览文件 @
1ac6bc6c
import
rtconfig
Import
(
'RTT_ROOT'
)
from
building
import
*
src
=
Glob
(
'*.c'
)
group
=
DefineGroup
(
''
,
src
,
depend
=
[
''
])
Return
(
'group'
)
\ No newline at end of file
bsp/simulator/testdll/var/var.c
已删除
100644 → 0
浏览文件 @
1ac6bc6c
#include <rtthread.h>
/* rtgui\common\rtgui_object.c */
_declspec
(
dllimport
)
void
*
_rtgui_object
;
/* rtgui\common\color.c */
_declspec
(
dllimport
)
rt_uint32_t
blue
;
//extern rt_uint32_t * green;
int
main
(
void
)
{
int
i
;
//rt_kprintf("green = %x, *green", green, *(rt_uint32_t *)green);
rt_kprintf
(
"blue = %x
\n
"
,
blue
);
rt_kprintf
(
"_rtgui_object = %x
\n
"
,
_rtgui_object
);
return
0
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录