This commit fixes vTaskSuspendAll() and xTaskResumeAll() in the following ways.
- For vTaskSuspendAll()
- Sync function source code with upstream single core version
- Clearly mark IDF additions
- For xTaskResumeAll()
- Sync function source code with upstream single core version
- Clearly mark IDF additions
- Fix bug where cores other than core 0 were allowed to unwind pended ticks
This commit fixes the following issues:
- Clearly mark IDF additions in vTaskStepTick() and xTaskCatchUpTicks()
- Add back vTaskSuspendAll()/xTaskResumeAll() to xTaskCatchUpTicks(). Scheduler
suspension and resumption is required to unwind the pended ticks.
Previously, xTaskIncrementTick() would always trigger a yield (i.e., return pdTRUE)
when called on core 1. This would mean core 1 would call vTaskSwitchContext() on
every tick, leading to uneccesary CPU overhead.
This commit fixes xTaskIncrementTick() in the following ways:
- Clearly mark IDF additions in xTaskIncrementTick()
- Moved esp_vApplicationTickHook() to be called direclty in xPortSysTickHandler() in order to
simplify xTaskIncrementTick().
- Only core 0 calls xTaskIncrementTick() in order to simplify the function's logic. Core 0 is
solely responsible for managing xTickCount and xPendedTicks
- All other cores call xTaskIncrementTickOtherCores() instead which is a simplified version of
xTaskIncrementTick() and handles the following:
- Check if core 0 has unblocked a higher priority task to run
- Check if the current core requires time slicing
- Call vApplicationTickHook()
Use `pwd -P` to resolve any symlinks in the current directory path.
This makes the behavior in the shell script similar to the idf_tools.py
code, which calls `os.path.realpath()`. Without this, multiple entries
can get created in the `idfInstalled` dictionary in idf-env.json, and
the installed targets and features are not fully present in all entries.
This results in a broken installation, where `export.sh` cannot set up
the environment correctly afterwards.
This commit fixes the following:
- Fixes a bug wherein the timer status is active for oneshot timers that
expire before they are started.
- Callback calls for periodic timers where made before the timers were
auto-reloaded.
- Timer expiry trace was being set after the timer callback is called.
Closes https://github.com/espressif/esp-idf/issues/8014
If self.elf_exists is false, self.gdb_helper is None, which caused this
code to crash. It looks like this guard was missed in e30329ffe2.
Previously the code could crash like this:
Traceback (most recent call last):
File "/usr/local/src/esp-idf/tools/idf_monitor.py", line 376, in <module>
main()
File "/usr/local/src/esp-idf/tools/idf_monitor.py", line 367, in main
monitor.main_loop()
File "/usr/local/src/esp-idf/tools/idf_monitor.py", line 163, in main_loop
self._main_loop()
File "/usr/local/src/esp-idf/tools/idf_monitor.py", line 268, in _main_loop
super()._main_loop()
File "/usr/local/src/esp-idf/tools/idf_monitor.py", line 203, in _main_loop
self.serial_handler.handle_commands(data, self.target, self.run_make, self.console_reader,
File "/usr/local/src/esp-idf/tools/idf_monitor_base/serial_handler.py", line 203, in handle_commands
run_make_func('encrypted-flash' if self.encrypted else 'flash')
File "/usr/local/src/esp-idf/tools/idf_monitor.py", line 150, in run_make
run_make(target, self.make, self.console, self.console_parser, self.event_queue, self.cmd_queue,
File "/usr/local/src/esp-idf/tools/idf_monitor.py", line 237, in __exit__
self.serial_reader.gdb_exit = self.gdb_helper.gdb_exit # write gdb_exit flag
AttributeError: 'NoneType' object has no attribute 'gdb_exit'