diff --git a/rtl/freertos/xtensa/esp32.pp b/rtl/freertos/xtensa/esp32.pp index 6cbf0fafd8..1bc9d3bcf9 100644 --- a/rtl/freertos/xtensa/esp32.pp +++ b/rtl/freertos/xtensa/esp32.pp @@ -9,6 +9,27 @@ unit esp32; interface +{$linklib esp32,static} +{$linklib soc,static} +{$linklib driver,static} +{$linklib freertos,static} +{$linklib log,static} +{$linklib esp_common,static} +{$linklib heap,static} +{$linklib newlib,static} +{$linklib vfs,static} +{$linklib esp_ringbuf,static} +{$linklib spi_flash,static} +{$linklib app_update,static} +{$linklib xtensa,static} +{$linklib esp_timer,static} +{$linklib bootloader_support,static} +{$linklib pthread,static} +{$linklib soc_esp32,static} +{$linklib hal,static} +{$linklib c,static} +{$linklib esp_event,static} + implementation uses @@ -16,23 +37,55 @@ unit esp32; var _stack_top: record end; public name '_stack_top'; + operatingsystem_result: longint; external name 'operatingsystem_result'; procedure PASCALMAIN; external name 'PASCALMAIN'; - + procedure esp_deep_sleep_start;external; procedure putchar(c : char);external; function getchar : char;external; - + function __getreent : pointer;external; + procedure fflush(f : pointer);external; + + procedure printpchar(p : pchar); + begin + while p^<>#0 do + begin + putchar(p^); + inc(p); + end; + fflush(ppointer(__getreent+8)^); + end; + + + procedure printdword(d : dword); + const + s = '0123456789ABCDEF'; + var + i : longint; + begin + for i:=1 to 8 do + begin + putchar(s[(d and $f)+1]); + d:=d shr 4; + end; + fflush(ppointer(__getreent+8)^); + end; + + procedure _FPC_haltproc; public name '_haltproc';noreturn; begin + printpchar('_haltproc called, going to deep sleep, exit code: $'); + printdword(operatingsystem_result); + printpchar(#10); while true do esp_deep_sleep_start; end; - + procedure app_main;public name 'app_main';noreturn; begin - PASCALMAIN; + PASCALMAIN; _FPC_haltproc; end; @@ -48,7 +101,7 @@ unit esp32; ReadChar:=true; ACh:=getchar; end; - + begin OpenIO(Input, @WriteChar, @ReadChar, fmInput, nil); OpenIO(Output, @WriteChar, @ReadChar, fmOutput, nil);