esp32c6.pp 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. {******************************************************************************
  2. Startup code for riscv32-esp32c6 using idf
  3. ******************************************************************************}
  4. unit esp32c6;
  5. {$goto on}
  6. {$macro on}
  7. interface
  8. implementation
  9. {$IFDEF FPC_DOTTEDUNITS}
  10. uses
  11. EmbeddedApi.ConsoleIO,EmbeddedApi.HeapMGR;
  12. {$ELSE FPC_DOTTEDUNITS}
  13. uses
  14. consoleio,heapmgr;
  15. {$ENDIF FPC_DOTTEDUNITS}
  16. var
  17. _stack_top: record end; public name '_stack_top';
  18. operatingsystem_result: longint; external name 'operatingsystem_result';
  19. procedure PASCALMAIN; external name 'PASCALMAIN';
  20. procedure esp_deep_sleep_start;external;
  21. procedure putchar(c : char);external;
  22. function getchar : char;external;
  23. function __getreent : pointer;external;
  24. procedure fflush(f : pointer);external;
  25. procedure vTaskDelay(xTicksToDelay: uint32); external;
  26. procedure flushOutput(var t : TextRec);
  27. begin
  28. fflush(ppointer(__getreent+8)^);
  29. end;
  30. procedure _FPC_haltproc; public name '_haltproc';noreturn;
  31. begin
  32. if operatingsystem_result <> 0 then
  33. writeln('Runtime error ', operatingsystem_result);
  34. writeln('_haltproc called, exit code: ',operatingsystem_result);
  35. flushOutput(TextRec(Output));
  36. repeat
  37. // Allow other tasks to run
  38. // Do not enter deep sleep, can lead to problems with flashing
  39. vTaskDelay(1000);
  40. until false;
  41. end;
  42. procedure app_main;public name 'app_main';noreturn;
  43. begin
  44. PASCALMAIN;
  45. _FPC_haltproc;
  46. end;
  47. function WriteChar(ACh: char; AUserData: pointer): boolean;
  48. begin
  49. WriteChar:=true;
  50. putchar(ACh);
  51. end;
  52. function ReadChar(var ACh: char; AUserData: pointer): boolean;
  53. begin
  54. ReadChar:=true;
  55. ACh:=getchar;
  56. end;
  57. begin
  58. OpenIO(Input, @WriteChar, @ReadChar, fmInput, nil);
  59. OpenIO(Output, @WriteChar, @ReadChar, fmOutput, nil);
  60. OpenIO(ErrOutput, @WriteChar, @ReadChar, fmOutput, nil);
  61. OpenIO(StdOut, @WriteChar, @ReadChar, fmOutput, nil);
  62. OpenIO(StdErr, @WriteChar, @ReadChar, fmOutput, nil);
  63. end.