Browse Source

+ patch by Christo Crause: ESP8266 controller unit for freertos, resolves #37336

git-svn-id: trunk@45784 -
florian 5 years ago
parent
commit
7337515137
2 changed files with 100 additions and 0 deletions
  1. 1 0
      .gitattributes
  2. 99 0
      rtl/freertos/xtensa/esp8266.pp

+ 1 - 0
.gitattributes

@@ -10788,6 +10788,7 @@ rtl/freertos/systhrd.inc svneol=native#text/plain
 rtl/freertos/sysutils.pp svneol=native#text/pascal
 rtl/freertos/tthread.inc svneol=native#text/plain
 rtl/freertos/xtensa/esp32.pp svneol=native#text/pascal
+rtl/freertos/xtensa/esp8266.pp svneol=native#text/pascal
 rtl/gba/Makefile svneol=native#text/plain
 rtl/gba/Makefile.fpc svneol=native#text/plain
 rtl/gba/classes.pp svneol=native#text/plain

+ 99 - 0
rtl/freertos/xtensa/esp8266.pp

@@ -0,0 +1,99 @@
+{******************************************************************************
+Startup code for xtensa-esp8266 using ESP8266_RTOS_SDK V3.3
+******************************************************************************}
+unit esp8266;
+
+{$goto on}
+{$macro on}
+
+  interface
+
+{$linklib esp8266, static}
+{$linklib util, static}
+{$linklib log, static}
+{$linklib c_fnano, static}
+{$linklib newlib, static}
+{$linklib heap, static}
+{$linklib vfs, static}
+{$linklib esp_common, static}
+{$linklib core, static}
+{$linklib freertos, static}
+{$linklib phy, static}
+{$linklib net80211, static}
+{$linklib hal, static}
+{$linklib nvs_flash, static}
+{$linklib rtc, static}
+{$linklib spi_flash, static}
+{$linklib esp_ringbuf, static}
+{$linklib gcc, static}
+{$linklib pp, static}
+{$linklib stdc++, static}
+{$linklib pthread, static}
+{$linklib wpa_supplicant, static}
+//{$linklib esp_event, static} // Not in V3.3
+{$linklib wpa, static}  // not in master version
+{$linklib lwip, static}
+{$linklib mbedtls, static}
+
+  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 putchar(c : char);external;
+    function uart_rx_one_char(pRxChar: PChar): longint; 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';
+      begin
+        writeln;
+        if operatingsystem_result <> 0 then
+          writeln('Runtime error ', operatingsystem_result);
+
+        writeln('_haltproc called...');
+        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';
+      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 := #0;
+        uart_rx_one_char(@ACh);  // check failure?
+      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.