arm: working bootloader, example app

'make' will produce two outputs:
- bootloader.elf to be loaded into the bitstream
- app.bin to be loaded through the programmer

Loading app.bin is as simple as:
- reset the board
- `python3 prog.py app.bin`
This commit is contained in:
2022-05-10 11:20:02 -07:00
parent 43d245bae2
commit b8b0d94065
10 changed files with 231 additions and 46 deletions

23
arm/app_init.cc Normal file
View File

@@ -0,0 +1,23 @@
#include <cstdint>
extern "C" int main();
extern uint32_t _bss_begin, _bss_end, _initial_stack_pointer;
__attribute__((section(".app_init")))
void AppInit() {
*(uint32_t*)(0x40000000) = 0;
asm ("mov sp, %0"
:
: "r" (&_initial_stack_pointer)
:
);
// clear .bss
for (uint32_t* ptr = &_bss_begin; ptr < &_bss_end; ptr++) {
*ptr = 0;
}
main();
while(true) {}
}