Adding pthreads + arudino threads.
This commit is contained in:
@ -14,6 +14,7 @@
|
|||||||
#define ENABLE_SDCARD_SUPPORT
|
#define ENABLE_SDCARD_SUPPORT
|
||||||
#define ENABLE_I2C_SUPPORT
|
#define ENABLE_I2C_SUPPORT
|
||||||
#define ENABLE_SOCKETS_SUPPORT
|
#define ENABLE_SOCKETS_SUPPORT
|
||||||
|
#define ENABLE_FREERTOS_SUPPORT
|
||||||
|
|
||||||
// For now assume only boards with PSRAM (ESP32-CAM)
|
// For now assume only boards with PSRAM (ESP32-CAM)
|
||||||
// will want SerialBluetooth (very large) and camera support.
|
// will want SerialBluetooth (very large) and camera support.
|
||||||
@ -117,6 +118,7 @@
|
|||||||
OPTIONAL_SERIAL_BLUETOOTH_SUPPORT \
|
OPTIONAL_SERIAL_BLUETOOTH_SUPPORT \
|
||||||
OPTIONAL_CAMERA_SUPPORT \
|
OPTIONAL_CAMERA_SUPPORT \
|
||||||
OPTIONAL_SOCKETS_SUPPORT \
|
OPTIONAL_SOCKETS_SUPPORT \
|
||||||
|
OPTIONAL_FREERTOS_SUPPORT \
|
||||||
|
|
||||||
#ifndef ENABLE_SPIFFS_SUPPORT
|
#ifndef ENABLE_SPIFFS_SUPPORT
|
||||||
// Provide a default failing SPIFFS.begin
|
// Provide a default failing SPIFFS.begin
|
||||||
@ -133,6 +135,15 @@
|
|||||||
X("SPIFFS.usedBytes", SPIFFS_USED_BYTES, PUSH SPIFFS.usedBytes())
|
X("SPIFFS.usedBytes", SPIFFS_USED_BYTES, PUSH SPIFFS.usedBytes())
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef ENABLE_FREERTOS_SUPPORT
|
||||||
|
# define OPTIONAL_FREERTOS_SUPPORT
|
||||||
|
#else
|
||||||
|
# define OPTIONAL_FREERTOS_SUPPORT \
|
||||||
|
Y(vTaskDelete, vTaskDelete((TaskHandle_t) n0); DROP) \
|
||||||
|
Y(xTaskCreatePinnedToCore, n0 = xTaskCreatePinnedToCore((TaskFunction_t) a6, c5, n4, a3, (UBaseType_t) n2, (TaskHandler_t *) a1, (BaseType_t) n0); NIPn(6)) \
|
||||||
|
Y(xPortGetCoreID, PUSH xPortGetCoreID())
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef ENABLE_CAMERA_SUPPORT
|
#ifndef ENABLE_CAMERA_SUPPORT
|
||||||
# define OPTIONAL_CAMERA_SUPPORT
|
# define OPTIONAL_CAMERA_SUPPORT
|
||||||
#else
|
#else
|
||||||
|
|||||||
@ -17,6 +17,7 @@ static struct {
|
|||||||
cell_t *heap, **current, ***context, notfound;
|
cell_t *heap, **current, ***context, notfound;
|
||||||
int argc;
|
int argc;
|
||||||
char **argv;
|
char **argv;
|
||||||
|
cell_t *(*runner)(cell_t *rp); // pointer to forth_run
|
||||||
cell_t *rp; // spot to park main thread
|
cell_t *rp; // spot to park main thread
|
||||||
cell_t DOLIT_XT, DOEXIT_XT, YIELD_XT;
|
cell_t DOLIT_XT, DOEXIT_XT, YIELD_XT;
|
||||||
} g_sys;
|
} g_sys;
|
||||||
@ -160,4 +161,5 @@ static void forth_init(int argc, char *argv[], void *heap,
|
|||||||
*++rp = (cell_t) sp;
|
*++rp = (cell_t) sp;
|
||||||
*++rp = (cell_t) start;
|
*++rp = (cell_t) start;
|
||||||
g_sys.rp = rp;
|
g_sys.rp = rp;
|
||||||
|
g_sys.runner = forth_run;
|
||||||
}
|
}
|
||||||
|
|||||||
22
ueforth/posix/pthreads.fs
Normal file
22
ueforth/posix/pthreads.fs
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
( pthreads )
|
||||||
|
posix definitions also internals
|
||||||
|
|
||||||
|
z" libpthread.so" shared-library pthread
|
||||||
|
z" pthread_create" 4 pthread pthread_create
|
||||||
|
z" pthread_join" 2 pthread pthread_join
|
||||||
|
z" pthread_exit" 1 pthread pthread_exit
|
||||||
|
|
||||||
|
'sys 11 cells + @ constant forth_run
|
||||||
|
|
||||||
|
: ++! ( n a ) cell+ dup >r ! r> ;
|
||||||
|
: >entry ( xt sp rp -- rp ) here >r rot , ['] yield , ++! r> swap ++! ;
|
||||||
|
|
||||||
|
: thread ( xt dstack rstack -- tid )
|
||||||
|
here >r cells allot here cell+ >r cells allot r> r> >entry ( rinit )
|
||||||
|
0 >r rp@ ( rinit tid )
|
||||||
|
0 rot forth_run swap ( tid attr forth_run rinit )
|
||||||
|
pthread_create throw r> ;
|
||||||
|
: join ( tid -- ) 0 pthread_join throw ;
|
||||||
|
|
||||||
|
only forth definitions
|
||||||
|
|
||||||
Reference in New Issue
Block a user