Commit Graph

1020 Commits

Author SHA1 Message Date
Darian Leung
45badf864f freertos(IDF): Allow cross-core freeing of task memory when deleting tasks
Previously, IDF FreeRTOS would restrict the clean up of task memory (done by
vTaskDelete() or the Idle task) to only tasks pinned to the current core or
unpinned tasks. This was due to the need to clear the task's coprocessor
ownership on the other core (i.e., "_xt_coproc_owner_sa"). But this restriction
can be lifted by simply protecting access of "_xt_coproc_owner_sa" with a
spinlock.

This commit implements a "_xt_coproc_owner_sa_lock" to protect the access of
"_xt_coproc_owner_sa", thus vTaskDelete() and prvDeleteTCB() can now delete
tasks pinned to the other core so long as that task is not currently running.

Note: This fix was copied from the Xtensa port of Amazon SMP FreeRTOS
2022-12-23 15:29:17 +08:00
Darian Leung
c318c89453 freertos(IDF): Remove dependency on portUSING_MPU_WRAPPERS
This commit removes the dependency on portUSING_MPU_WRAPPERS on the Xtensa port
of IDF FreeRTOS. This dependency was added due to a hack implemented in the
upstream port that required the usage of the "xMPUSettings" member of the TCB.
The "xMPUSettings" would be used as a pointer to the task's coprocessor save
area on the stack, even though FreeRTOS MPU support was not available.

The hack has now been removed, and the CPSA pointer is now calculated using
a combination of constant offsets values and the pxEndOfStack member of the
TCB.

Note: This impelemtation was copied from the Xtensa port of Amazon SMP FreeRTOS.
2022-12-23 15:29:17 +08:00
Darian Leung
9300bef9b8 freertos(SMP): Refactor FPU handling on the Xtensa port of Amaazon SMP FreeRTOS
This commit refactors the FPU handling code on the Xtensa port of Amazon SMP
FreeRTOS in the following ways:

Auto-pinning via XT_RTOS_CP_EXC_HOOK
------------------------------------

The "_xt_coproc_exc" exception would previously automatically pin a task that
uses the FPU to the current core (to ensure that we can lazy save the task's FPU
context). However, this would mean that "xtensa_vectors.S" would need to be
OS-aware (to read the task's TCB structure).

This is now refactored so that "_xt_coproc_exc" calls a CP exception hook
function ("XT_RTOS_CP_EXC_HOOK") implemented in "portasm.S", thus allowing
"xtensa_vectors.S" to remain OS agnostic.

Using macros to acquire owner spinlock
--------------------------------------

The taking and relasing of the "_xt_coproc_owner_sa_lock" is now mostly
abstracted as the "spinlock_take" and "spinlock_release" macro. As a result,
"_xt_coproc_release" and "_xt_coproc_exc" are refactored so that:

- They are closer to their upstream (original) versions
- The spinlock is only taken when building for multicore
- The spinlock held region is shortened (now only protects the instructions
  that access the "_xt_coproc_owner_sa" array

Other Changes
-------------

- Updated placing and comments of various "offset_..." constants used by
  portasm.S
- Update description of "get_cpsa_from_tcb" assembly macro
- Tidied up some typos in the ".S" files
2022-12-23 15:29:17 +08:00
Darian Leung
fd48daf278 freertos(SMP): Fix SMP FreeRTOS Xtensa port FPU/Coproccessor bugs
This commit fixes the following FPU/Coprocessor bugs in the Xtensa port of
Amazon SMP FreeRTOS:

- vPortCleanUpCoprocArea() does not calculate the correct pointer to the
task's CPSA (located on the task's stack). This can result in
    - _xt_coproc_release() not releasing the task's CP ownership
    - The next coprocessor exception will write the current CP owner (i.e., the
      deleted task's CPSA) leading to memory corruption
- _xt_coproc_release() writes xCoreID instead of 0 when clearing a CP owner.
  This results in the next CP exception trying to load the CP owner's CPSA at
  the address of "xCoreID", leading to a double exception.
2022-12-23 15:29:17 +08:00
Darian Leung
cdbd8ebeaa pytest: Expect "Calling app_main()" to indicate start of application
This commit updates variousf pytest scripts to expect
"main_task: Calling app_main()" instead of "cpu_start: Starting scheduler" as
indicator of the start of an application.
2022-12-09 19:40:40 +08:00
Darian Leung
486cc33fb3 freertos: Refactor port common functions
This commit refactors port_common.c so that it only contains implementation of
FreeRTOS port functions that are common to all FreeRTOS ports (i.e., on all
architectures and on all FreeRTOS implementations).
2022-12-08 01:57:30 +08:00
Darian Leung
09690906e7 freertos: Refactor OS startup functions
This commit refactors the OS startup functions as follows:

- Moved the OS/app startup functions listed below to "app_startup.c". Their
    implementations are now common to all ports (RISC-V and Xtensa) of all
    FreeRTOS implementations (IDF and Amazon SMP).
    - esp_startup_start_app()
    - esp_startup_start_app_other_cores()
- Removed esp_startup_start_app_common() as app startup functions are now
    already common to all ports.
- Added extra logs to "main_task" to help with user debugging

Note: Increased startup delay on "unity_task". The "unity_run_menu()" is non
blocking, thus if the main task or other startup tasks have not been freed
by the time "unity_run_menu()" is run, those tasks will be freed the next time
"unity_task" blocks. This could cause some tests to have a memory leak, thus
the "unity_task" startup delay has increased.
2022-12-08 01:57:30 +08:00
Marius Vikhammer
ea249dc3a6 freertos: add missing header include for esp_chip_info.h to port.c
Closes https://github.com/espressif/esp-idf/issues/10310
2022-12-06 11:31:15 +08:00
Song Ruo Jing
56302544f6 Merge branch 'ci/enable_esp32c6_target_test_stage' into 'master'
CI: Enable esp32c6 target test stage

Closes IDF-5830 and IDF-5831

See merge request espressif/esp-idf!21010
2022-11-29 19:54:05 +08:00
Darian
1e953e31fc Merge branch 'feature/freertos_restore_single_core_task_selection_algorithm' into 'master'
FreeRTOS(IDF): Restore vanilla task selection algorithm if building for single core with optimized selection is disabled

See merge request espressif/esp-idf!21001
2022-11-29 14:04:44 +08:00
Sudeep Mohanty
3082fc7911 Merge branch 'feature/freertos_vtasklist_include_coreid' into 'master'
freertos-smp: Made CONFIG_FREERTOS_VTASKLIST_INCLUDE_COREID available only for IDF-FreeRTOS

Closes IDF-5295

See merge request espressif/esp-idf!21291
2022-11-29 11:52:57 +08:00
Darian
297670300d Merge branch 'contrib/github_pr_10199' into 'master'
Removed the 'configASSERT( xInheritanceOccurred == pdFALSE )' assertion from xQueueSemaphoreTake (GitHub PR)

Closes IDFGH-8766

See merge request espressif/esp-idf!21272
2022-11-28 19:37:41 +08:00
Sudeep Mohanty
d451a7539d freertos-smp: Made CONFIG_FREERTOS_VTASKLIST_INCLUDE_COREID available only for IDF-FreeRTOS
Since core affinity is supported in task stats by default in Amazon
FreeRTOS SMP, the Kconfig option
CONFIG_FREERTOS_VTASKLIST_INCLUDE_COREID is now made only available for
IDF-FreeRTOS.
2022-11-28 12:09:56 +05:30
Darian Leung
dff138f883 freertos(IDF): Restore vanilla task selection algorithm for single core
This commit restores the vanilla behavior for taskSELECT_HIGHEST_PRIORITY_TASK
when configNUM_CORES == 1 && configUSE_PORT_OPTIMISED_TASK_SELECTION == 0. This
results in the SMP selection algorithm (taskSelectHighestPriorityTaskSMP) to
only be run when configNUM_CORES > 1.
2022-11-28 13:55:03 +08:00
Darian Leung
2537dd8eca freertos(IDF): Add preprocessor check for configNUM_CORES configuration
This commit adds preprocessing time checks to ensure that

- configNUM_CORES is defined to 1 or 2
- Incompatible configurations are not set depending on configNUM_CORES
2022-11-28 13:55:03 +08:00
Song Ruo Jing
1575b9e43a ci: Disable all currently failed target tests for esp32c6 2022-11-28 12:09:08 +08:00
Alexey Gerenkov
47c2c13de5 build: Adds support for universal Clang toolchain 2022-11-23 13:25:16 +03:00
Darian
74ed2aa2ee Merge branch 'feature/freertos_10.4.3_sync_critical_sections_vs_suspension' into 'master'
FreeRTOS(IDF): Resolve critical section (multi-core) vs scheduler suspension (single-core)

Closes IDF-3755

See merge request espressif/esp-idf!21002
2022-11-21 18:38:43 +08:00
Omar Chebib
6fe563163c RISC-V: fix PC not saved when using backtrace 2022-11-18 15:07:38 +08:00
Omar Chebib
d580f6b076 RISC-V: Create a wrapper around FreeRTOS Tasks to detect the ones returning 2022-11-18 15:07:32 +08:00
timoxd7
355abfdff6
Queue Send fix
Fixes rare deadlock on heavy loaded multicore-systems.
2022-11-17 20:20:29 +01:00
Darian
eb837bbb6f Merge branch 'bugfix/freertos_smp_riscv_statement_expr_macro' into 'master'
FreeRTOS(SMP): Fix SMP FreeRTOS RISC-V statement expression macro

See merge request espressif/esp-idf!21110
2022-11-17 15:35:26 +08:00
Jakob Hasse
c381fee319 Merge branch 'feature/esp_system_linux' into 'master'
esp_system partially buildable on Linux

Closes IDF-5983

See merge request espressif/esp-idf!21055
2022-11-16 22:38:48 +08:00
Darian Leung
623f20d2b5 freertos(SMP): Fix SMP FreeRTOS RISC-V statement expression macro
Macros that need to reteurn a value should use GCC statement expression macro
syntax. This commit fixes the portTRY_ENTER_CRITICAL() in the RISC-V port of
SMP FreeRTOS to be a statement expression macro.
2022-11-16 17:51:10 +08:00
Jakob Hasse
cce1f9dee4 Merge branch 'feature/freertos_task_notification_configurable' into 'master'
freertos: make num of task notifications configurable

Closes IDFGH-7819

See merge request espressif/esp-idf!20880
2022-11-16 17:11:03 +08:00
Jakob Hasse
5b3a645813 feat(esp_system): Partially buildable on Linux now 2022-11-16 09:03:09 +01:00
Darian Leung
8b98e4e3b8 freertos(IDF): Restore vanilla call behavior on xTaskIncrementTick() and vTaskSwitchContext()
Due to SMP, critical sections have been added to xTaskIncrementTick() and
vTaskSwitchContext() (to take the xKernelLock). However, this is technically
not necessary when building for single-core as FreeRTOS expect these funcitons
to be called with interrupts already disabled.

This commit makes the critical secitons in those functions depend on
"configNUM_CORES > 1", and ensures that interrupts are disabled when calling
those functions. This effectively restores the vanilla behavior for these
functions when building for single-core.
2022-11-16 15:50:21 +08:00
Darian Leung
087e4318a6 freertos(IDF): Use common macros for SMP specific critical sections
In IDF FreeRTOS, when building for SMP, there are numerous functions
which require different critical sections when compared to single-core. This
commit encapsulates those difference into a common set of macros whose
behavior depends on "configNUM_CORES > 1". As such...

- Vanilla behavior has been restored for some functions when building for
  single core (i.e., used to call taskENTER_CRITICAL, now disables interrupts
  mactching vanilla behavior).
- Reduces number of "#ifdef (configNUM_CORES > 1)" in functions
- Any SMP only critical sections are now wrapped by
  "#ifdef (configNUM_CORES > 1)" and properly documented via comments.
2022-11-16 15:50:21 +08:00
Darian
4c1ff6016a Merge branch 'bugfix/freertos_smp_xtensa_port_disable_interrupt_macro' into 'master'
FreeRTOS(SMP): Fix SMP FreeRTOS portDISABLE_INTERRUPTS() macro on xtensa port

See merge request espressif/esp-idf!21093
2022-11-16 15:47:11 +08:00
Sudeep Mohanty
ac99c0ad6b Merge branch 'feature/freertos_remove_untested_fn_feature' into 'master'
freertos: Removed CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION kconfig option

Closes IDF-5298

See merge request espressif/esp-idf!21000
2022-11-16 10:28:42 +08:00
Jakob Hasse
73d9d83a2f feat(freertos): make num of task notifications configurable
Closes https://github.com/espressif/esp-idf/issues/9349
2022-11-15 09:36:42 +01:00
Darian Leung
816ddc8867 freertos(SMP): Fix SMP FreeRTOS portDISABLE_INTERRUPTS() macro on xtensa port
The portDISABLE_INTERRUPTS() macro on Xtensa should return only the interrupt
mask/level before the interrupts were disabled. Previously, the entire contents
of PS register were returned (i.e., direct return from RSIL instruction without
any bit masking or shifting).

This commit fixes the portDISABLE_INTERRUPTS() macro to return the INTLEVEL
bitfield of the PS register.
2022-11-15 14:57:24 +08:00
Darian
fd9c88ac85 Merge branch 'feature/freertos_smp_add_unit_tests_config' into 'master'
FreeRTOS(SMP): Add Amazon SMP FreeRTOS unit test configuration

See merge request espressif/esp-idf!21028
2022-11-15 14:54:23 +08:00
Omar Chebib
69d80b200c Merge branch 'bugfix/xtensa_freertos_16B_aligned' into 'master'
FreeRTOS: Make the default stack alignment 16 for Xtensa

Closes IDF-3604

See merge request espressif/esp-idf!21040
2022-11-14 10:53:10 +08:00
Omar Chebib
bcb8516744 FreeRTOS: Make the default stack alignment 16 for Xtensa 2022-11-11 19:31:20 +08:00
Zim Kalinowski
69926e6915 Merge branch 'bugfix/enable_static_task_cleanup_riscv_smp' into 'master'
freertos-smp: Enabled static task cleanup for RISC-V targets with FreeRTOS SMP

Closes IDF-6207

See merge request espressif/esp-idf!21035
2022-11-11 18:42:46 +08:00
Sudeep Mohanty
a0991dfffa freertos-smp: Enabled static task cleanup for RISC-V targets with FreeRTOS SMP
This commit enables static task clean up for RISC-V targets with
FreeRTOS SMP.
2022-11-10 13:40:40 +01:00
Darian Leung
915787249a freertos(IDF): Provide default value to configTHREAD_LOCAL_STORAGE_DELETE_CALLBACKS
This commit updates how configTHREAD_LOCAL_STORAGE_DELETE_CALLBACKS is defined
by default it to 0 if not defined elsewhere. Dependent code now check for
"configTHREAD_LOCAL_STORAGE_DELETE_CALLBACKS == 1" instead.
2022-11-10 18:37:42 +08:00
Darian Leung
fce4ee0b80 freertos(IDF): Sync cosmetic differences to v10.4.3
This commit synchronize the cosmetic differences of IDF FreeRTOS to upstream
Vanilla v10.4.3. Comsetic differences include:

- Out of date doxygen API descriptions
  - Misnamed parameters
  - Missing examples
  - Fixed/added missing @cond/@code directives
- Extra/missing comments/lines
- Code formatting (uncrustify)

Other changes:

- Some ESP_PLATFORM directives were also removed
- xTaskIncrementTickOtherCores() now depends on "configNUM_CORES > 1"
- Updated some multi-core dummy variable names in FreeRTOS.h
2022-11-10 18:37:42 +08:00
Darian Leung
5e5a40f7ac freertos: Add Amazon SMP FreeRTOS unit test configuration 2022-11-10 16:01:15 +08:00
Darian Leung
ae3383ddc5 freertos: Remove/restore queue locks for multi-core/single-core
This commit removes the updates the usage of queue locks in IDF FreeRTOS

Queue locks are present in Vanilla FreeRTOS to ensure that queue functions
behave deterministicly in critical sections (i.e., no walking linked lists
while interrupts are disabled). However, currently in IDF FreeRTOS...

- When configNUM_CORES > 1, IDF FreeRTOS drops the determinism requirement.
Thus, queue functions could be simplified if queue locks were not used at all
(and have a queue function do everything inside the same critical section).

- When configNUM_CORES == 1, the current queue implementation in IDF FreeRTOS
does not meet the determinism requirements, as critical sections are used
(instead of scheduler suspension) when locking/unlocking the queues.

There, this commit updates multiple queue functions so that

- When configNUM_CORES > 1
    - Queue locks are no longer used. All actions are done within the same
      critical section.
    - Affected queue functions now need 40% less CPU clock cycles when blocking
- When configNUM_CORES = 1
    - Queue locks are still used.
    - Vanilla behavior of suspending the scheduler is restored when locking
      the queue. Thus queue fucntions are now deterministic and have the same
      behavior as Vanilla FreeRTOS.
    - Affected queue functions now takes 36% more CPU clock cycles when
      blocking (due to the scheduler suspension/resumption).
2022-11-10 14:39:47 +08:00
Kevin (Lao Kaiyao)
5bed8fab49 Merge branch 'refactor/rename_h2_to_h4' into 'master'
esp32h2: renaming esp32h2 to esp32h4

Closes IDF-6098

See merge request espressif/esp-idf!20676
2022-11-09 19:19:43 +08:00
Alexey Gerenkov
dbc3409d6c Merge branch 'bugfix/fix_asm_xtensa_vectors' into 'master'
freertos: fix gnu asm extensions.

See merge request espressif/esp-idf!19167
2022-11-09 16:28:50 +08:00
Sudeep Mohanty
0744f4d5a5 freertos: Removed CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION kconfig option
This commit removes the unused FreeRTOS kconfig option
CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION.
2022-11-09 08:14:16 +01:00
laokaiyao
8677216576 esp32h2: renaming esp32h2 to esp32h4 2022-11-08 17:05:33 +08:00
Zim Kalinowski
98ff59b394 Merge branch 'bugfix/fix_stack_overflow_on_s3_with_freertos_smp' into 'master'
freertos-smp: Fixed stack overflow on esp32s3 with FreeRTOS SMP

Closes IDF-5509 and IDF-4982

See merge request espressif/esp-idf!20932
2022-11-08 03:36:49 +08:00
Zim Kalinowski
9da7deaa7c Merge branch 'task/update_freertos_smp_kernel_source' into 'master'
freertos-smp: Updated the FreeRTOS SMP kernel source to the latest commit

See merge request espressif/esp-idf!20911
2022-11-07 17:32:37 +08:00
Sudeep Mohanty
9bb8f0e38d freertos-smp: Fixed stack overflow on esp32s3 with FreeRTOS SMP
The following changes have been made in this commit:
1. configMINIMAL_STACK_SIZE is now defined as CONFIG_FREERTOS_IDLE_TASK_STACKSIZE.
2. Removed configIDLE_TASK_STACK_SIZE config as it was redundant.
3. Updates the order of allocating the TCB and stack memory to avoid the
   stack memory overriding the TCB memory when the stack grows downwards.
4. CONFIG_FREERTOS_IDLE_TASK_STACKSIZE is now incorporated into the
   FreeRTOSConfig_smp.h to configure the IDLE0 stack size.
2022-11-07 09:59:02 +01:00
Zim Kalinowski
b354b457c8 Merge branch 'feature/freertos_smp_enable_static_task_cleanup' into 'master'
freertos-smp: Enable static task cleanup

See merge request espressif/esp-idf!20870
2022-11-04 19:18:03 +08:00
Darian
7b90c608fa Merge branch 'bugfix/freertos_fix_flakey_delay_tests' into 'master'
FreeRTOS: Fix flakey vTaskDelayUntil() test

See merge request espressif/esp-idf!20931
2022-11-04 14:24:27 +08:00
Jakob Hasse
a995c83060 Merge branch 'feature/freertos_linux_target_add_features' into 'master'
freertos/linux: added event group and stream buffer

Closes IDF-6007

See merge request espressif/esp-idf!20878
2022-11-03 19:05:06 +08:00
Darian Leung
95cfd32871 freertos: Fix flakey task delay tests
This commit fixes flakey task delay tests when running on IDF FreeRTOS. IN IDF
FreeRTOS, core 1's tick interrupts could be up to (< 1 tick) out of phase from
core 0's tick interrupt, thus the measured delay time on core 1 could last 1
tick longer. This commit makes the test detla 2 ticks for IDF FreeRTOS.
2022-11-03 18:22:58 +08:00
Sudeep Mohanty
4bc6b9ed7e freertos-smp: Updated the FreeRTOS SMP kernel source to the latest commit
This commit updates the FreeRTOS SMP source to the latest upstream
source at commit 8128208bdee1f997f83cae631b861f36aeea9b1f
2022-11-03 08:01:44 +01:00
Darian
3c18cc482c Merge branch 'refactor/freertos_uncrustify_code_formatting' into 'master'
FreeRTOS: Uncrustify source code using upstream configuration

See merge request espressif/esp-idf!20722
2022-11-03 14:19:00 +08:00
Darian Leung
ef45a3df7f freertos: Uncrustify IDF FreeRTOS
This commit uncrustifies IDF FreeRTOS source files using the upstream provided
uncrustify.cfg files.
2022-11-02 19:49:40 +08:00
Darian Leung
4b2c8c591b freertos: Add uncrustiy config files for IDF FreeRTOS v10.4.3
This commit adds a copy of upstream vanilla FreeRTOS uncrustify.cfg files from
the following upstream commit:

89e4823a49

Note: "pp_indent_brace" is commented out as that was enabled after v10.4.3

Also also added a note in the ESP-IDF style guide aobut formatting FreeRTOS
source code using Uncrustify.
2022-11-02 19:42:19 +08:00
Sudeep Mohanty
defd6c4ec1 freertos-smp: Enable static task cleanup
This commit enables Static task cleanup feature for FreeRTOS SMP.
2022-11-02 11:24:07 +01:00
Sudeep Mohanty
b3755b751e pthread: Remove pthread TLS cleanup dependency on FreeRTOS Static Task Cleanup Hook
This commit removes the need to define the vTaskCleanupTCB hook in
pthread to cleanup the thread-specific data before a thread is deleted.
2022-11-02 09:52:28 +01:00
Darian Leung
40b96cf596 freertos: Refactor stream buffer spinlock initialization
This commit refactors the way stream buffers initialize their spinlock.

- "prvInitialiseNewStreamBuffer()" now initializes the stream buffer fields
  manually (instead of using memset()) to avoid resetting the spin lock
- Stream buffer creation functions now manually initialize the spinlock after
  the other fields are initialized using "prvInitialiseNewStreamBuffer()"

Also added comments to event group spinlock initializtion.
2022-11-02 14:56:46 +08:00
Song Ruo Jing
2557e24a28 ci: Enable esp32c6 example, test_apps, and unit tests CI build stage 2022-11-01 11:23:21 +08:00
Jakob Hasse
37e8f1f348 feat(freertos): added event group and stream buffer to linux target 2022-10-31 16:34:23 +01:00
Andrei Safronov
847462a578 freertos: fix gnu asm extensions.
The llvm asm pasrser doesn't support some gnu asm extensions,
like using "&" with macro arguments. So, replace such code with
code which could be compiled by llvm.
2022-10-27 00:27:50 +03:00
Sudeep Mohanty
d050b2b63c freertos-smp: Disable CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER for FreeRTOS SMP
An explicit check of the mutex owner during a mutex release operation is
not necessary for FreeRTOS SMP as this is checked by default. Hence, the
corresponding Kconfig option is removed.
2022-10-26 09:02:55 +02:00
Zim Kalinowski
09587b84c2 freertos: final test cleanup 2022-10-25 17:41:29 +02:00
Darian Leung
96fce0c9c4 freertos: Fix/remove flakey tests after migration
This commit fixes/ignores flakey freertos unit tests after migrating them to
the test app:

- Added vTaskDelay() before teardown to prevent memory leaks
- Adjusted the "main" task's priority so that scheudling tasks would work
- pytest now only runs tests that are not ignored
- Reset tests are temporarily ignored. Will be enabled to dedicate reset tests.
- Some flakey tests are fixed by adjusting delays and stack sizes.
2022-10-23 20:02:14 +08:00
Darian Leung
c36e06c45c freertos: Add test app sdkconfig
This commit adds the sdkconfig files for the FreeRTOS test app. These
configurations were dervied from the various legacy unit test app's
config files that included the FreeRTOS component.

This commit tries to keep a 1 to 1 config parity with the legacy test app.
Meaning, if FreeRTOS test were run on a particular target with a particular
config, that config will be represented in one of the test app's
sdkconfig.ci.XXX files.

However, the following configurations were removed for FreeRTOS tests:

- The "freertos_flash" option was removed due to redudancy (already tested in
  freertos_options)
2022-10-23 20:02:14 +08:00
Darian Leung
a50a238c18 freertos: Tidy up test organization
Some tests were placed in the incorrect test groups (i.e., kernel, port,
performance etc). This commit fixes those placements.

The following redundant tests were also removed:

- "test_panic.c" as behavior is already covered in esp_system tests
2022-10-23 19:56:47 +08:00
Darian Leung
54d7a3bb66 freertos: Migrate misc tests to test app
This commit migrates the "misc" tests to the test app as a component.
2022-10-23 19:56:47 +08:00
Darian Leung
87c3cc57d1 freertos: Migrate performance tests to test app
This commit migrates the "performance" tests to the test app as a component.
2022-10-23 19:56:47 +08:00
Darian Leung
df9aa722af freertos: Migrate port tests to test app
This commit migrates the "port" tests to the test app as a component.
2022-10-23 19:56:47 +08:00
Darian Leung
df4bfeee5b freertos: Migrate kernel tests to test app
This commit renames the "integration" tests to "kernel" test and migrates them
to the test app as a component.
2022-10-23 19:56:47 +08:00
Darian Leung
60edaa4152 freertos: Add blank freertos test app
This commit adds a blank FreeRTOS test app in preparation for migrating of
FreeRTOS unit tests to the created test app.
2022-10-23 19:56:47 +08:00
Jakob Hasse
944576a0fa refactor(freertos): streamlined freertos CMakeLists.txt 2022-10-20 16:43:24 +02:00
Sudeep Mohanty
70070989f0 freertos: Enable configUSE_PORT_OPTIMISED_TASK_SELECTION for RISC-V targets
This commit enables the config option
configUSE_PORT_OPTIMISED_TASK_SELECTION on RISC-V targets for legacy
FreeRTOS (IDF-FreeRTOS).
2022-10-17 16:47:21 +02:00
Darian
54d286de67 Merge branch 'bugfix/freertos_fpu_isr_pins_task' into 'master'
FreeRTOS: Fix bug where FPU usage in ISR pins the interrupted task.

Closes IDF-6068

See merge request espressif/esp-idf!20573
2022-10-15 00:40:04 +08:00
Ivan Grokhotkov
989d9e831f Merge branch 'bugfix/replace_port_get_runtime_counter_usage' into 'master'
freertos, app_trace: use esp_cpu_get_cycle_count to get ccount

Closes IDF-4744

See merge request espressif/esp-idf!20443
2022-10-13 21:40:07 +08:00
Darian Leung
423fb361e7 freertos: Enable FPU ISR core pinning test for IDF FreeRTOS 2022-10-12 22:45:56 +08:00
Darian Leung
9f7f964363 freertos: Fix FPU ISR core pinning bug
This commit fixes a bug where if an unpinned task is interrupted by a level 1
ISR that users the FPU, the FPU usage will cause the interrupted task to
become pinned to the current core.

Note: This bug was already fixed in SMP FreeRTOS in commit
d69361779e. This commit simply backports the
fix to IDF FreeRTOS.
2022-10-12 22:45:56 +08:00
Darian
96058c25ab Merge branch 'refactor/freertos_fpu_unit_tests' into 'master'
FreeRTOS: Refactor FPU unit tests

See merge request espressif/esp-idf!20526
2022-10-12 22:36:46 +08:00
Ivan Grokhotkov
7e2f261a58
freertos, app_trace, heap: use esp_cpu_get_cycle_count to get ccount
portGET_RUN_TIME_COUNTER_VALUE should only be used in the kernel.
2022-10-12 11:20:55 +02:00
Darian Leung
d69361779e freertos: Refactor FPU unit tests
This commit refactors the existing FPU unit tests as follows

- Rename them from coproc to FPU
- Reorganize test placement
- Make existing tests work on both IDF and SMP FreeRTOS
- Update test documentation
- Remove old "test_float_in_isr.c"
2022-10-12 16:29:13 +08:00
Darian Leung
7b1c0ef22c freertos: Fix vTaskSuspendAll unit test falkiness
This commit fixes falkey unit tests (due to memory leaks) by adding a short
delay at the end of the test to allow the idle task to free task memory.
2022-10-11 14:24:39 +08:00
Darian Leung
2059fb885e freertos: Move FPU unit tests to correct directory
This commit moves the FPU unit tests to the correct directory so that they are
built by the unit tests app.
2022-10-11 14:03:28 +08:00
Darian Leung
fe0d4f2834 freertos: Refactor riscv port stack initialization code
This commit refactors the pxPortInitialiseStack() function of the riscv
FreeRTOS ports (both IDF and SMP FreeRTOS).

- Each stack area is now separated into their own functions
- Each function will individually
    - Push the stack pointer to allocate the stack area
    - Initiaze the allocated stack area
- Each stack area's size and usage is now clearly documented in code
2022-10-09 14:51:45 +08:00
Darian Leung
282f10d1bc freertos: Refactor xtensa port stack initialization code
This commit refactors the pxPortInitialiseStack() function of the xtensa
FreeRTOS ports (both IDF and SMP FreeRTOS).

- Each stack area is now separated into their own functions
- Each function will individually
    - Push the stack pointer to allocate the stack area
    - Initiaze the allocated stack area
- Each stack area's size and usage is now clearly documented in code
2022-10-09 14:48:30 +08:00
Jakob Hasse
bfbbd9d790 feat(freertos): Added FreeRTOS POSIX/Linux Simulator
* Added port layer from the FreeRTOS POSIX port, added
  additional port code for ESP-IDF.
* Created another hello world example using that POSIX
  port in tools/test_apps.
* Removed old linux app
2022-09-27 16:23:54 +02:00
Darian Leung
aaf7547665 freertos: Refactor vTaskDelay() and vTaskDelayUntil() unit tests
This commit refactors the existing vTaskDelayUntil() unit test according to
the FreeRTOS unit test guidelines, and adds a new vTaskDelay() unit test.
2022-09-22 11:27:29 +08:00
Darian Leung
193e30bbf7 freertos: Rename vTaskDelayUntil unit test file 2022-09-22 11:27:29 +08:00
Darian Leung
0d9d4f60df freertos: Add unit test utilities
This commit adds "freertos_test_utils.h/c" that contains utility functions
used in FreeRTOS unit tests.
2022-09-22 11:27:29 +08:00
Darian
9657e687e4 Merge branch 'feature/freertos_10.4.3_sync_various_functions' into 'master'
FreeRTOS: (Sync v10.4.3) Update various functions (Remerge)

See merge request espressif/esp-idf!20235
2022-09-21 16:04:06 +08:00
Darian Leung
c126b910b6 freertos: Expand CONFIG_FREERTOS_SMP description
This commit adds more details to the CONFIG_FREERTOS_SMP option's description.
2022-09-20 16:46:43 +08:00
Darian Leung
882515fcef freertos: Add priority scheduling unit tests
This commit adds a priority scheduling unit test to test that the scheduler
always schedules the highest priority ready state task. Single core and SMP
variants of the test are both added.
2022-09-20 16:46:43 +08:00
Darian Leung
188c21319d freertos: Add test reorganization README.md and portTestMacro.h
This commit adds a README.md containing guidelines on how to refactor the
FreeRTOS unit tests for upstreaming. A portTestMacro.h header was also added
which contains port implementation specific macros used by the test cases.
2022-09-20 16:46:43 +08:00
Darian Leung
7e49d67bad freertos: Move some port functions into flash by default
This commit places some functions in port.c and port_common.c into flash by
default. These functions are mostly called once during startup, thus shouldn't
affect applications much when placed into flash instead of the default IRAM.
2022-09-19 23:35:25 +08:00
Darian Leung
aa5d74410b freertos: Synchronize tasks.c functions (minor changes) to v10.4.3
This commit synchronizes multiple functions in tasks.c with upstream v10.4.3
that contain minor differences.

The following functions have had their parameter names or code formatting
updated:

- xTaskCreateStaticPinnedToCore()
- xTaskCreatePinnedToCore()
- prvInitialiseNewTask()
- prvTaskIsTaskSuspended()
- vTaskStartScheduler()
- xTaskResumeAll()
- xTaskCheckForTimeOut()
- uxTaskResetEventItemValue()

The following functions have had their missing "xAlreadyYielded" restored

- xTaskDelayUntil()
- vTaskDelay()

The following functions have had their critical section/interrupt disdable
usage update

- vTaskSuspendAll()
- xTaskGetTickCountFromISR()
- xTaskGetApplicationTaskTagFromISR()
2022-09-19 21:30:52 +08:00
Darian Leung
5742c194e1 freertos: Synchronize tasks.c functions (major changes) to v10.4.3
This commit synchronizes multiple functions that contain major differences with
upstream v10.4.3. Multi-core modifications are then reapplied to the function.

Vanilla code uses "pxTCB == pxCurrentTCB" to check whether a task is currently
running. This commit adds the following macros instead.

- taskIS_CURRENTLY_RUNNING()
- taskIS_CURRENTLY_RUNNING_ON_CORE()

The following functions have been updated to use those macros instead.

- eTaskGetState()
- vTaskPrioritySet()
- vTaskResume()

The following functions have been synchronized with upstream v10.4.3.
Multi-core modifications are then reapplied.

- vTaskSuspend()
- vTaskDelete()
- prvGetExpectedIdleTime()
2022-09-19 21:30:47 +08:00
Darian Leung
15d8fc0722 freertos: Restore xAlreadyYielded usage in event_groups
This commit restores xAlreadyYielded in various event_group functions to
synchronize with upstream v10.4.3.
2022-09-19 21:30:43 +08:00
Darian Leung
5352ba06fa freertos: Synchronize xStreamBufferSend() to v10.4.3
This commit synchronizes xStreamBufferSend() with upstream v10.4.3.
2022-09-19 21:30:38 +08:00
Darian Leung
77f2eba57e freeRTOS: Synchronize queue functions to v10.4.3
This commit synchronizes multiple functions in queue.c with upstream v10.4.3.
Multi-core modifications are then reapplied to these functions. The following
functions were modified:

prvNotifyQueueSetContainer()
xQueueGenericCreateStatic()
xQueueGenericCreate()
xQueueGetMutexHolder()
xQueueCreateCountingSemaphoreStatic()
xQueueCreateCountingSemaphore()
xQueueGenericSend()
xQueueGenericSendFromISR()
xQueueReceiveFromISR()
uxQueueMessagesWaiting()
prvUnlockQueue()
prvIsQueueFull()
xQueueAddToSet()
xQueueRemoveFromSet()
prvNotifyQueueSetContainer()

Note: The SEGGER_SYSVIEW traceQUEUE_SEND() macro was updated as the
      xCopyPosition argument is no longer available in scenarios where the
      macro is called.
2022-09-19 21:30:32 +08:00
Darian Leung
abf0bc13e6 riscv: Fix esprv_intc_int_set_threshold() naming
This commit fixes the function declaration naming from esprv_intc_set_threshold()
to esprv_intc_int_set_threshold(), thus allowing the underlying ROM funciton to be
exposed via the header.
2022-09-16 16:45:43 +08:00