mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-18 07:20:38 +02:00
80 lines
2.1 KiB
ObjectPascal
80 lines
2.1 KiB
ObjectPascal
{******************************************************************************
|
|
Startup code for riscv32-esp32c3 using idf
|
|
|
|
******************************************************************************}
|
|
{$IFNDEF FPC_DOTTEDUNITS}
|
|
unit esp32c3;
|
|
{$ENDIF FPC_DOTTEDUNITS}
|
|
|
|
{$goto on}
|
|
{$macro on}
|
|
|
|
interface
|
|
|
|
implementation
|
|
|
|
uses
|
|
consoleio,heapmgr;
|
|
|
|
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 vTaskDelay(xTicksToDelay: uint32); external;
|
|
|
|
procedure flushOutput(var t : TextRec);
|
|
begin
|
|
fflush(ppointer(__getreent+8)^);
|
|
end;
|
|
|
|
|
|
procedure _FPC_haltproc; public name '_haltproc';noreturn;
|
|
begin
|
|
if operatingsystem_result <> 0 then
|
|
writeln('Runtime error ', operatingsystem_result);
|
|
|
|
writeln('_haltproc called, exit code: ',operatingsystem_result);
|
|
flushOutput(TextRec(Output));
|
|
repeat
|
|
// Allow other tasks to run
|
|
// Do not enter deep sleep, can lead to problems with flashing
|
|
vTaskDelay(1000);
|
|
until false;
|
|
end;
|
|
|
|
|
|
procedure app_main;public name 'app_main';noreturn;
|
|
begin
|
|
PASCALMAIN;
|
|
_FPC_haltproc;
|
|
end;
|
|
|
|
|
|
function WriteChar(ACh: char; AUserData: pointer): boolean;
|
|
begin
|
|
WriteChar:=true;
|
|
putchar(ACh);
|
|
end;
|
|
|
|
|
|
function ReadChar(var ACh: char; AUserData: pointer): boolean;
|
|
begin
|
|
ReadChar:=true;
|
|
ACh:=getchar;
|
|
end;
|
|
|
|
begin
|
|
OpenIO(Input, @WriteChar, @ReadChar, fmInput, nil);
|
|
OpenIO(Output, @WriteChar, @ReadChar, fmOutput, nil);
|
|
OpenIO(ErrOutput, @WriteChar, @ReadChar, fmOutput, nil);
|
|
OpenIO(StdOut, @WriteChar, @ReadChar, fmOutput, nil);
|
|
OpenIO(StdErr, @WriteChar, @ReadChar, fmOutput, nil);
|
|
end.
|