@@ -27,15 +27,22 @@ and have several limitations:
2727 or use a scheduled function (which will be called outside of the interrupt
2828 context when it is safe) to do long-running work.
2929
30- * Memory operations can be dangerous and should be avoided in interrupts.
31- Calls to ``new `` or ``malloc `` should be minimized because they may require
32- a long running time if memory is fragmented. Calls to ``realloc `` and
33- ``free `` must NEVER be called. Using any routines or objects which call
34- ``free `` or ``realloc `` themselves is also forbidden for the same reason.
35- This means that ``String ``, ``std::string ``, ``std::vector `` and other
36- classes which use contiguous memory that may be resized must be used with
37- extreme care (ensuring strings aren't changed, vector elements aren't
38- added, etc.).
30+ * Heap API operations can be dangerous and should be avoided in interrupts.
31+ Calls to ``malloc `` should be minimized because they may require a long
32+ running time if memory is fragmented. Calls to ``realloc `` and ``free ``
33+ must NEVER be called. Using any routines or objects which call ``free `` or
34+ ``realloc `` themselves is also forbidden for the same reason. This means
35+ that ``String ``, ``std::string ``, ``std::vector `` and other classes which
36+ use contiguous memory that may be resized must be used with extreme care
37+ (ensuring strings aren't changed, vector elements aren't added, etc.).
38+ The underlying problem, an allocation address could be actively in use at
39+ the instant of an interrupt. Upon return, the address actively in use may
40+ be invalid after an ISR uses ``realloc `` or ``free `` against the same
41+ allocation.
42+
43+ * The C++ ``new `` and ``delete `` operators must NEVER be used in an ISR. Their
44+ call path is not in IRAM. Using any routines or objects that use the ``new ``
45+ or ``delete `` operator is also forbidden.
3946
4047Digital IO
4148----------
0 commit comments