mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-07 20:43:40 +00:00
all: add support for multicore scheduler
This commit adds support for a scheduler that runs a scheduler on all available cores. It is meant to be used on baremetal systems with a fixed number of cores, such as the RP2040. The initial implementation adds support for multicore scheduling to the riscv-qemu target as a convenient testing target. This means that this new multicore scheduler is tested in CI, including a bunch of standard library tests (`make tinygo-test-baremetal`). This should ensure the new scheduler is reasonably well tested before trying to use it on harder-to-debug targets like the RP2040.
This commit is contained in:
committed by
Ron Evans
parent
0c7c2926f9
commit
60f8a62978
@@ -24,11 +24,28 @@ type Task struct {
|
||||
// This is needed for some crypto packages.
|
||||
FipsIndicator uint8
|
||||
|
||||
// State of the goroutine: running, paused, or must-resume-next-pause.
|
||||
// This extra field doesn't increase memory usage on 32-bit CPUs and above,
|
||||
// since it falls into the padding of the FipsIndicator bit above.
|
||||
RunState uint8
|
||||
|
||||
// DeferFrame stores a pointer to the (stack allocated) defer frame of the
|
||||
// goroutine that is used for the recover builtin.
|
||||
DeferFrame unsafe.Pointer
|
||||
}
|
||||
|
||||
const (
|
||||
// Initial state: the goroutine state is saved on the stack.
|
||||
RunStatePaused = iota
|
||||
|
||||
// The goroutine is running right now.
|
||||
RunStateRunning
|
||||
|
||||
// The goroutine is running, but already marked as "can resume".
|
||||
// The next call to Pause() won't actually pause the goroutine.
|
||||
RunStateResuming
|
||||
)
|
||||
|
||||
// DataUint32 returns the Data field as a uint32. The value is only valid after
|
||||
// setting it through SetDataUint32 or by storing to it using DataAtomicUint32.
|
||||
func (t *Task) DataUint32() uint32 {
|
||||
|
||||
Reference in New Issue
Block a user