Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
TASTE
uPython-mirror
Commits
3f69aca2
Commit
3f69aca2
authored
Oct 21, 2013
by
Damien
Browse files
Make stm use garbage collector.
parent
dcced92c
Changes
7
Hide whitespace changes
Inline
Side-by-side
stm/Makefile
View file @
3f69aca2
...
...
@@ -32,6 +32,7 @@ SRC_S = \
PY_O
=
\
nlrthumb.o
\
gc.o
\
malloc.o
\
qstr.o
\
vstr.o
\
...
...
stm/main.c
View file @
3f69aca2
...
...
@@ -6,6 +6,8 @@
#include
"std.h"
#include
"misc.h"
#include
"mpyconfig.h"
#include
"gc.h"
#include
"systick.h"
#include
"led.h"
#include
"lcd.h"
...
...
@@ -14,6 +16,8 @@
#include
"usb.h"
#include
"ff.h"
extern
uint32_t
_heap_start
;
static
void
impl02_c_version
()
{
int
x
=
0
;
while
(
x
<
400
)
{
...
...
@@ -163,7 +167,6 @@ static void board_info() {
extern
void
*
_ebss
;
extern
void
*
_estack
;
extern
void
*
_etext
;
extern
void
*
_heap_start
;
printf
(
"_sidata=%p
\n
"
,
&
_sidata
);
printf
(
"_sdata=%p
\n
"
,
&
_sdata
);
printf
(
"_edata=%p
\n
"
,
&
_edata
);
...
...
@@ -263,6 +266,14 @@ void do_repl() {
}
}
void
gc_collect
()
{
gc_collect_start
();
gc_collect_root
((
void
**
)
0x20000000
,
(((
uint32_t
)
&
_heap_start
)
-
0x20000000
)
/
4
);
gc_collect_root
((
void
**
)(
0x20000000
+
0x18000
),
(
0x20000
-
0x18000
)
/
4
);
// TODO registers
gc_collect_end
();
}
int
main
()
{
// TODO disable JTAG
...
...
@@ -284,6 +295,10 @@ int main() {
lcd_init
();
storage_init
();
// GC init
gc_init
(
&
_heap_start
,
(
void
*
)(
0x20000000
+
0x18000
));
sys_tick_delay_ms
(
2000
);
// Python init
qstr_init
();
rt_init
();
...
...
stm/malloc0.c
View file @
3f69aca2
#include
<stdint.h>
#include
"std.h"
#include
"mpyconfig.h"
#include
"gc.h"
#if 0
static uint32_t mem = 0;
void *malloc(size_t n) {
...
...
@@ -20,6 +23,12 @@ void *malloc(size_t n) {
void free(void *ptr) {
}
void *realloc(void *ptr, size_t n) {
return malloc(n);
}
#endif
void
*
calloc
(
size_t
sz
,
size_t
n
)
{
char
*
ptr
=
malloc
(
sz
*
n
);
for
(
int
i
=
0
;
i
<
sz
*
n
;
i
++
)
{
...
...
@@ -28,8 +37,15 @@ void *calloc(size_t sz, size_t n) {
return
ptr
;
}
void
*
malloc
(
size_t
n
)
{
return
gc_alloc
(
n
);
}
void
free
(
void
*
ptr
)
{
}
void
*
realloc
(
void
*
ptr
,
size_t
n
)
{
return
m
alloc
(
n
);
return
gc_re
alloc
(
ptr
,
n
);
}
void
__assert_func
()
{
...
...
stm/mpyconfig.h
View file @
3f69aca2
...
...
@@ -8,6 +8,8 @@
// type definitions for the specific machine
#define BYTES_PER_WORD (4)
typedef
int32_t
machine_int_t
;
// must be pointer size
typedef
uint32_t
machine_uint_t
;
// must be pointer size
typedef
void
*
machine_ptr_t
;
// must be of pointer size
...
...
stm/printf.c
View file @
3f69aca2
#include
<stdarg.h>
#include
"std.h"
#include
"misc.h"
#include
"lcd.h"
#include
"usb.h"
#define PF_FLAG_LEFT_ADJUST (0x01)
#define PF_FLAG_SHOW_SIGN (0x02)
...
...
@@ -208,13 +211,13 @@ int pfenv_printf(const pfenv_t *pfenv, const char *fmt, va_list args) {
return
chrs
;
}
void
lcd_print_strn
(
const
char
*
str
,
unsigned
int
len
);
void
usb_vcp_send_strn
(
const
char
*
str
,
int
len
);
void
stdout_print_strn
(
void
*
data
,
const
char
*
str
,
unsigned
int
len
)
{
// send stdout to LCD and USB CDC VCP
lcd_print_strn
(
str
,
len
);
usb_vcp_send_strn
(
str
,
len
);
if
(
usb_vcp_is_enabled
())
{
usb_vcp_send_strn
(
str
,
len
);
}
else
{
lcd_print_strn
(
str
,
len
);
}
}
static
const
pfenv_t
pfenv_stdout
=
{
0
,
stdout_print_strn
};
...
...
stm/usb.c
View file @
3f69aca2
...
...
@@ -12,11 +12,12 @@
extern
CDC_IF_Prop_TypeDef
VCP_fops
;
int
is_enabled
=
0
;
USB_OTG_CORE_HANDLE
USB_OTG_dev
;
char
rx_buf
[
64
];
int
rx_buf_in
;
int
rx_buf_out
;
static
int
is_enabled
=
0
;
static
char
rx_buf
[
64
];
static
int
rx_buf_in
;
static
int
rx_buf_out
;
void
usb_init
()
{
USBD_Init
(
&
USB_OTG_dev
,
USB_OTG_FS_CORE_ID
,
&
USR_desc
,
&
USBD_PYB_cb
,
&
USR_cb
);
...
...
@@ -25,6 +26,10 @@ void usb_init() {
is_enabled
=
1
;
}
bool
usb_vcp_is_enabled
()
{
return
is_enabled
;
}
void
usb_vcp_receive
(
const
char
*
buf
,
uint32_t
len
)
{
if
(
is_enabled
)
{
for
(
int
i
=
0
;
i
<
len
;
i
++
)
{
...
...
stm/usb.h
View file @
3f69aca2
void
usb_init
();
bool
usb_vcp_is_enabled
();
int
usb_vcp_rx_any
();
char
usb_vcp_rx_get
();
void
usb_vcp_send_str
(
const
char
*
str
);
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment