Skip to content
Snippets Groups Projects
Select Git revision
  • 5e25b9aab7a0175fa6548a0be1de9b0a89fd1eb9
  • master default protected
  • q3k/splitflap
  • q3k/fix-crt
  • q3k/delet-jailbreak
  • q3k/ci-move-to-dockerhub
  • q3k/ci-notify-off-master
  • q3k/fb3
  • q3k/fix-ci
  • q3k/l0dables
  • q3k/fatfs-seek-tell
  • q3k/ci-lint
  • q3k/cube
  • q3k/fb2
  • q3k/copying
  • q3k/ci
  • q3k/nix
  • q3k/binbash
  • rahix/malloc
  • freertos-btle
  • rahix/bhi
21 results

push.sh

Blame
  • Forked from card10 / firmware
    Source project has a limited visibility.
    gccollect.c 1.27 KiB
    #include <stdio.h>
    
    #include "misc.h"
    #include "mpconfig.h"
    #include "qstr.h"
    #include "obj.h"
    #include "gc.h"
    #include "gccollect.h"
    #include "systick.h"
    
    void gc_helper_get_regs_and_clean_stack(machine_uint_t *regs, machine_uint_t heap_end);
    
    void gc_collect(void) {
        uint32_t start = sys_tick_counter;
        gc_collect_start();
        gc_collect_root((void**)&_ram_start, ((uint32_t)&_heap_start - (uint32_t)&_ram_start) / sizeof(uint32_t));
        machine_uint_t regs[10];
        gc_helper_get_regs_and_clean_stack(regs, (machine_uint_t)&_heap_end);
        gc_collect_root((void**)&_heap_end, ((uint32_t)&_ram_end - (uint32_t)&_heap_end) / sizeof(uint32_t)); // will trace regs since they now live in this function on the stack
        gc_collect_end();
        uint32_t ticks = sys_tick_counter - start; // TODO implement a function that does this properly
    
        if (0) {
            // print GC info
            gc_info_t info;
            gc_info(&info);
            printf("GC@%lu %lums\n", start, ticks);
            printf(" %lu total\n", info.total);
            printf(" %lu : %lu\n", info.used, info.free);
            printf(" 1=%lu 2=%lu m=%lu\n", info.num_1block, info.num_2block, info.max_block);
        }
    }
    
    static mp_obj_t pyb_gc(void) {
        gc_collect();
        return mp_const_none;
    }
    
    MP_DEFINE_CONST_FUN_OBJ_0(pyb_gc_obj, pyb_gc);