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'
A wake-up from timer would trigger before the gpio wakeup in certain cases,
failing the test.
Change the regex to only expect the GPIO wakeup, so that even if there is an extra
timer wakeup it wont fail the test.