Use get top and limit stack functions
This commit is contained in:
parent
96756b3945
commit
f3151bb6c4
2
main.c
2
main.c
@ -477,7 +477,7 @@ void gc_collect(void) {
|
|||||||
|
|
||||||
// This naively collects all object references from an approximate stack
|
// This naively collects all object references from an approximate stack
|
||||||
// range.
|
// range.
|
||||||
gc_collect_root((void**)sp, ((uint32_t)&_estack - sp) / sizeof(uint32_t));
|
gc_collect_root((void**)sp, ((uint32_t)port_stack_get_top() - sp) / sizeof(uint32_t));
|
||||||
gc_collect_end();
|
gc_collect_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "supervisor/memory.h"
|
#include "supervisor/memory.h"
|
||||||
|
#include "supervisor/port.h"
|
||||||
|
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
||||||
@ -36,12 +37,10 @@ static supervisor_allocation allocations[CIRCUITPY_SUPERVISOR_ALLOC_COUNT];
|
|||||||
// We use uint32_t* to ensure word (4 byte) alignment.
|
// We use uint32_t* to ensure word (4 byte) alignment.
|
||||||
uint32_t* low_address;
|
uint32_t* low_address;
|
||||||
uint32_t* high_address;
|
uint32_t* high_address;
|
||||||
extern uint32_t _ebss;
|
|
||||||
extern uint32_t _estack;
|
|
||||||
|
|
||||||
void memory_init(void) {
|
void memory_init(void) {
|
||||||
low_address = &_ebss;
|
low_address = port_stack_get_limit();
|
||||||
high_address = &_estack;
|
high_address = port_stack_get_top();
|
||||||
}
|
}
|
||||||
|
|
||||||
void free_memory(supervisor_allocation* allocation) {
|
void free_memory(supervisor_allocation* allocation) {
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
#include "py/mpconfig.h"
|
#include "py/mpconfig.h"
|
||||||
#include "py/runtime.h"
|
#include "py/runtime.h"
|
||||||
#include "supervisor/cpu.h"
|
#include "supervisor/cpu.h"
|
||||||
|
#include "supervisor/port.h"
|
||||||
#include "supervisor/shared/safe_mode.h"
|
#include "supervisor/shared/safe_mode.h"
|
||||||
|
|
||||||
extern uint32_t _estack;
|
extern uint32_t _estack;
|
||||||
@ -43,7 +44,7 @@ void allocate_stack(void) {
|
|||||||
mp_uint_t regs[10];
|
mp_uint_t regs[10];
|
||||||
mp_uint_t sp = cpu_get_regs_and_sp(regs);
|
mp_uint_t sp = cpu_get_regs_and_sp(regs);
|
||||||
|
|
||||||
mp_uint_t c_size = (uint32_t) &_estack - sp;
|
mp_uint_t c_size = (uint32_t) port_stack_get_top() - sp;
|
||||||
|
|
||||||
stack_alloc = allocate_memory(c_size + next_stack_size + EXCEPTION_STACK_SIZE, true);
|
stack_alloc = allocate_memory(c_size + next_stack_size + EXCEPTION_STACK_SIZE, true);
|
||||||
if (stack_alloc == NULL) {
|
if (stack_alloc == NULL) {
|
||||||
|
Loading…
Reference in New Issue
Block a user