Damien George
c9520c591b
cc3200: Fix call to new exception to be _msg instead of _arg1.
2016-06-28 11:28:51 +01:00
Damien George
df95f52583
py/modthread: Allow to properly set the stack limit of a thread.
...
We rely on the port setting and adjusting the stack size so there is
enough room to recover from hitting the stack limit.
2016-06-28 11:28:51 +01:00
Damien George
eef4f13a33
cc3200: Add basic threading capabilities.
...
Can create a new thread and run it. Does not use the GIL at this point.
2016-06-28 11:28:51 +01:00
Damien George
9b1c1262dc
cc3200: Define our own FreeRTOS heap so it can go in a special segment.
2016-06-28 11:28:50 +01:00
Damien George
5c0fc73f33
cc3200: Update FreeRTOS to v9.0.0.
...
This is a pristine copy (actually a subset of files) of upstream FreeRTOS
v9.0.0.
Modifications to the previous version of FreeRTOS (v8.1.2) included
addition of __attribute__ ((section (".boot"))) to the following
functions:
pxPortInitialiseStack
prvTaskExitError
prvPortStartFirstTask
xPortStartScheduler
vPortSetupTimerInterrupt
xTaskGenericCreate
vTaskStartScheduler
prvInitialiseTCBVariables
prvInitialiseTaskLists
prvAllocateTCBAndStack
This attribute will need to be reinstated on a case-by-case basis
because some of the above functions are now removed/changed.
2016-06-28 11:28:50 +01:00
Damien George
e90b6ce0b5
py/mpthread.h: Move GIL macros outside MICROPY_PY_THREAD block.
...
The GIL macros are needed even if threading is not enabled.
2016-06-28 11:28:50 +01:00
Damien George
94d2919b77
unix/modtime: Release the GIL when sleeping.
2016-06-28 11:28:50 +01:00
Damien George
c567afc5fa
py/modthread: Make Lock objects work when GIL is enabled.
2016-06-28 11:28:50 +01:00
Damien George
a1c93a62b1
py: Don't use gc or qstr mutex when the GIL is enabled.
...
There is no need since the GIL already makes gc and qstr operations
atomic.
2016-06-28 11:28:50 +01:00
Damien George
4cec63a9db
py: Implement a simple global interpreter lock.
...
This makes the VM/runtime thread safe, at the cost of not being able to
run code in parallel.
2016-06-28 11:28:50 +01:00
Damien George
1f54ad2aed
py: Make interning of qstrs thread safe.
2016-06-28 11:28:50 +01:00
Damien George
b7274e91bc
tests/thread: Add test for concurrent mutating of user instance.
2016-06-28 11:28:50 +01:00
Damien George
2e4cdae4fd
tests/thread: Add test for concurrent interning of strings.
...
Qstr code accesses global state and needs to be made thread safe.
2016-06-28 11:28:50 +01:00
Damien George
094a0dd11a
tests/thread: Add tests that mutate shared objects.
...
Tests concurrent mutating access to: list, dict, set, bytearray.
2016-06-28 11:28:50 +01:00
Damien George
c73cf9d931
tests/thread: Rename thread_stress_XXX.py to stress_XXX.py.
2016-06-28 11:28:50 +01:00
Damien George
f443504f86
unix/mpthreadport: Suppress compiler warning about unused arguments.
2016-06-28 11:28:50 +01:00
Damien George
f1dbd2909e
unix/gccollect: Provide declaration of exported function.
2016-06-28 11:28:50 +01:00
Damien George
c2508ac8bd
unix/mpthreadport: Use SA_SIGINFO for GC signal handler.
...
SA_SIGINFO allows the signal handler to access more information about
the signal, especially useful in a threaded environment. The extra
information is not currently used but it may prove useful in the future.
2016-06-28 11:28:49 +01:00
Damien George
3653f5144a
py/gc: Fix GC+thread bug where ptr gets lost because it's not computed.
...
GC_EXIT() can cause a pending thread (waiting on the mutex) to be
scheduled right away. This other thread may trigger a garbage
collection. If the pointer to the newly-allocated block (allocated by
the original thread) is not computed before the switch (so it's just left
as a block number) then the block will be wrongly reclaimed.
This patch makes sure the pointer is computed before allowing any thread
switch to occur.
2016-06-28 11:28:49 +01:00
Damien George
dbd54e0b5b
unix: Implement garbage collection with threading.
...
This patch allows any given thread to do a proper garbage collection and
scan all the pointers of all active threads.
2016-06-28 11:28:49 +01:00
Damien George
9172c0cb25
py/modthread: Call mp_thread_start/mp_thread_finish around threads.
...
So the underlying thread implementation can do any necessary bookkeeping.
2016-06-28 11:28:49 +01:00
Damien George
722cff5fd0
py/modthread: Be more careful with root pointers when creating a thread.
2016-06-28 11:28:49 +01:00
Damien George
f1b6db2218
unix/file: If write syscall returns because of EINTR then try again.
...
As per PEP-475.
2016-06-28 11:28:49 +01:00
Damien George
e33806aaff
py/gc: Fix 2 cases of concurrent access to ATB and FTB.
2016-06-28 11:28:49 +01:00
Damien George
7f4658a7ee
py/modthread: Satisfy unused-args warning.
2016-06-28 11:28:49 +01:00
Damien George
dcc7c5bd89
tests/thread: Add tests for running GC within a thread, and heap stress.
2016-06-28 11:28:49 +01:00
Damien George
c93d9caa8b
py/gc: Make memory manager and garbage collector thread safe.
...
By using a single, global mutex, all memory-related functions (alloc,
free, realloc, collect, etc) are made thread safe. This means that only
one thread can be in such a function at any one time.
2016-06-28 11:28:49 +01:00
Damien George
34fc006f5e
py/modthread: Add with-context capabilities to lock object.
2016-06-28 11:28:49 +01:00
Damien George
801d1b3803
py/modthread: Implement lock object, for creating a mutex.
2016-06-28 11:28:49 +01:00
Damien George
2dacd604c5
py/modthread: Add exit() function.
...
Simply raises the SystemExit exception.
2016-06-28 11:28:48 +01:00
Damien George
707f98f207
py/modthread: Add stack_size() function.
2016-06-28 11:28:48 +01:00
Damien George
3eb7a26809
py/modthread: Properly cast concrete exception pointer to an object.
2016-06-28 11:28:48 +01:00
Damien George
a791be936a
unix: Add basic thread support using pthreads.
...
Has the ability to create new threads.
2016-06-28 11:28:48 +01:00
Damien George
27cc07721b
py: Add basic _thread module, with ability to start a new thread.
2016-06-28 11:28:48 +01:00
Damien George
330165a2cc
py: Add MP_STATE_THREAD to hold state specific to a given thread.
2016-06-28 11:09:31 +01:00
Damien George
3545ef8bb4
tests/thread: Remove need to sleep to wait for completion in some tests.
...
Use a lock and a counter instead, and busy wait for all threads to
complete. This makes test run faster and they no longer rely on the time
module.
2016-06-28 11:09:31 +01:00
Damien George
2d5ea38b49
tests: Add 3 more tests for _thread module.
2016-06-28 11:09:31 +01:00
Damien George
ed36632c6c
tests: Add tests for _thread module.
...
Includes functionality and stress tests.
2016-06-28 11:09:31 +01:00
Martin Müller
f2892bd77d
unix: Fix Makefile to handle gc-sections linker flags on Mac OS.
...
The linker flag --gc-sections is not available on the linker used on
Mac OS X which results in an error when linking micropython on Mac OS X.
Therefore move this option to the LDFLAGS_ARCH variable on non Darwin
systems. According to http://stackoverflow.com/a/17710056 the equivalent
to --gc-sections is -dead_strip thus this option is used for the
LDFLAGS_ARCH on Darwin systems.
2016-06-27 22:31:55 +01:00
Radomir Dopieralski
ab8a5d5199
drivers/display/ssd1306: Add width arg and support 64px wide displays.
...
In particular, the WeMOS D1 Mini board comes with a shield that has a
64x48 OLED display. This patch makes it display properly, with the upper
left pixel being at (0, 0) and not (32, 0).
I tried to do this with the configuration commands, but there doesn't
seem to be a command that would set the column offset (there is one for
the line offset, though).
2016-06-26 13:09:31 +01:00
Robert HH
eb7637ba2e
esp8266/main.c: Clear the command line history when (re)booting.
...
Not clearing the command line history sometimes results in strange output
when going back after a reset.
2016-06-26 12:48:19 +01:00
Martin Müller
047ac2044d
docs/library: Fix typo in docs for usocket.listen().
2016-06-26 12:38:20 +01:00
Damien George
7ddd85f933
lib/libm: Remove unused definition of "one".
2016-06-25 22:30:40 +01:00
Damien George
873853f1a8
lib/libm: Format code to pass gcc v6.1.1 warning.
...
gcc 6.1.1 warns when indentation is misleading, and in this case the
formatting of the code really is misleading. So adjust the formatting
to be clear of the meaning of the code.
2016-06-25 22:28:43 +01:00
stijn
4b9046328d
windows/msvc: Include machine_pinbase.c in build and enable umachine module
...
Fixes linker errors since [ad229477
] and adds the umachine module so tests pass.
2016-06-25 21:49:45 +01:00
Paul Sokolovsky
0fb7a7a7ce
tests/btree1: Add testcase for iterating btree object directly.
2016-06-24 23:43:20 +03:00
Paul Sokolovsky
2f7ebf16de
extmod/modbtree: Cleverly implement "for key in btree:" syntax.
...
I.e. make it work like btree.keys(), while still not using a separate
iterator type.
2016-06-23 20:08:37 +03:00
Paul Sokolovsky
d5835261af
tests/extmod: Add "btree" module test.
2016-06-21 10:00:02 +03:00
Paul Sokolovsky
6b088a671a
extmod/modbtree: Implement keys(), values(), items() iterators.
...
Each takes optional args of starting key, ending key, and flags (ending
key inclusive, reverse order).
2016-06-20 15:50:31 +03:00
Paul Sokolovsky
119b3dabf7
tests: Add a testcase for machine.PinBase class.
2016-06-19 19:45:29 +03:00