diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..2d63cb0d --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,214 @@ +| Maintenance Type | Status | Version | Description | Files Modified or Created | Date Resolved (DD/MM/YYYY) | Resolved By | +| ---------------- | ------ | ------- | ----------- | ------------------------- | --------------------- | ----------- | +| ThreadX Release | Closed | 6.4.2 | Release | NextX Duo 6.4.2 release | 18/03/2025 | Frédéric Desbiens | +| Bug fix | Closed | 6.4.2 | Update patch version | common/inc/tx_api.h
common_smp/inc/tx_api.h | 18/03/2025 | Frédéric Desbiens | +| New feature | Closed | 6.4.2 | Added port supporting RISC-V QEMU virtual environments | cmake/riscv64-unknown-elf.cmake
cmake/riscv64_gnu.cmake
ports/risc-v64/gnu/CMakeLists.txt
ports/risc-v64/gnu/example_build/qemu_virt/board.c
ports/risc-v64/gnu/example_build/qemu_virt/build_libthreadx.sh
ports/risc-v64/gnu/example_build/qemu_virt/csr.h
ports/risc-v64/gnu/example_build/qemu_virt/demo_threadx.c
ports/risc-v64/gnu/example_build/qemu_virt/entry.s
ports/risc-v64/gnu/example_build/qemu_virt/hwtimer.c
ports/risc-v64/gnu/example_build/qemu_virt/hwtimer.h
ports/risc-v64/gnu/example_build/qemu_virt/link.lds
ports/risc-v64/gnu/example_build/qemu_virt/plic.c
ports/risc-v64/gnu/example_build/qemu_virt/plic.h
ports/risc-v64/gnu/example_build/qemu_virt/trap.c
ports/risc-v64/gnu/example_build/qemu_virt/tx_initialize_low_level.S
ports/risc-v64/gnu/example_build/qemu_virt/uart.c
ports/risc-v64/gnu/example_build/qemu_virt/uart.h
ports/risc-v64/gnu/src/tx_initialize_low_level.S
ports/risc-v64/gnu/src/tx_thread_context_restore.S
ports/risc-v64/gnu/src/tx_thread_schedule.S | 18/03/2025 | Luo Jun | +| ThreadX Release | Closed | 6.4.1 | Release |ThreadX 6.4.1 release | 28/02/2024 | Stefan Wick | +| Bug fix | Closed | 6.4.1 | Update patch version | common/inc/tx_api.h
common_smp/inc/tx_api.h | 28/02/2024 | Stefan Wick | +| Bug fix | Closed | 6.4.1 | Update copyright and license statements | \*\*/\*.S
\*\*/\*.a64
\*\*/\*.arm
\*\*/\*.c
\*\*/\*.h
\*\*/\*.s | 30/10/2023 | Yanwu Cai | +| ThreadX Release | Closed | 6.4.0 | Release | ThreadX 6.4.0 release | 01/01/2024 | Tiejun Zhou | +| Bug fix | Closed | 6.4.0 | Update patch version | common/inc/tx_api.h
common_smp/inc/tx_api.h | 01/01/2024 | Tiejun Zhou | +| Bug fix | Closed | 6.4.0 | Add error handling in the lock initialization - Xtensa port | ports/xtensa/xcc/src/tx_clib_lock.c | 30/10/2023 | Xiuwen Cai | +| Bug fix | Closed | 6.4.0 | Add a check for overflow in the queue size calculation - FreeRTOS compatibility layer | utility/rtos_compatibility_layers/FreeRTOS/tx_freertos.c | 01/01/2024 | Xiuwen Cai | +| Enhancement | Closed | 6.4.0 | Added thumb mode support to the module manager on Cortex-A7 for the GNU compiler | ports/cortex_a12/ac6/src/tx_thread_context_restore.S
ports/cortex_a12/ac6/src/tx_thread_context_save.S
ports/cortex_a12/ac6/src/tx_thread_fiq_nesting_end.S
ports/cortex_a12/ac6/src/tx_thread_fiq_nesting_start.S
ports/cortex_a12/ac6/src/tx_thread_interrupt_control.S
ports/cortex_a12/ac6/src/tx_thread_interrupt_disable.S
ports/cortex_a12/ac6/src/tx_thread_interrupt_restore.S
ports/cortex_a12/ac6/src/tx_thread_irq_nesting_end.S
ports/cortex_a12/ac6/src/tx_thread_irq_nesting_start.S
ports/cortex_a12/ac6/src/tx_thread_schedule.S
ports/cortex_a12/ac6/src/tx_thread_stack_build.S
ports/cortex_a12/ac6/src/tx_thread_system_return.S
ports/cortex_a12/ac6/src/tx_timer_interrupt.S
ports/cortex_a12/gnu/example_build/crt0.S
ports/cortex_a12/gnu/src/tx_thread_context_restore.S
ports/cortex_a12/gnu/src/tx_thread_context_save.S
ports/cortex_a12/gnu/src/tx_thread_fiq_nesting_end.S
ports/cortex_a12/gnu/src/tx_thread_fiq_nesting_start.S
ports/cortex_a12/gnu/src/tx_thread_interrupt_control.S
ports/cortex_a12/gnu/src/tx_thread_interrupt_disable.S
ports/cortex_a12/gnu/src/tx_thread_interrupt_restore.S
ports/cortex_a12/gnu/src/tx_thread_irq_nesting_end.S
ports/cortex_a12/gnu/src/tx_thread_irq_nesting_start.S
ports/cortex_a12/gnu/src/tx_thread_schedule.S
ports/cortex_a12/gnu/src/tx_thread_stack_build.S
ports/cortex_a12/gnu/src/tx_thread_system_return.S
ports/cortex_a12/gnu/src/tx_timer_interrupt.S
ports/cortex_a15/ac6/src/tx_thread_context_restore.S
ports/cortex_a15/ac6/src/tx_thread_context_save.S
ports/cortex_a15/ac6/src/tx_thread_fiq_nesting_end.S
ports/cortex_a15/ac6/src/tx_thread_fiq_nesting_start.S
ports/cortex_a15/ac6/src/tx_thread_interrupt_control.S
ports/cortex_a15/ac6/src/tx_thread_interrupt_disable.S
ports/cortex_a15/ac6/src/tx_thread_interrupt_restore.S
ports/cortex_a15/ac6/src/tx_thread_irq_nesting_end.S
ports/cortex_a15/ac6/src/tx_thread_irq_nesting_start.S
ports/cortex_a15/ac6/src/tx_thread_schedule.S
ports/cortex_a15/ac6/src/tx_thread_stack_build.S
ports/cortex_a15/ac6/src/tx_thread_system_return.S
ports/cortex_a15/ac6/src/tx_timer_interrupt.S
ports/cortex_a15/gnu/example_build/crt0.S
ports/cortex_a15/gnu/src/tx_thread_context_restore.S
ports/cortex_a15/gnu/src/tx_thread_context_save.S
ports/cortex_a15/gnu/src/tx_thread_fiq_nesting_end.S
ports/cortex_a15/gnu/src/tx_thread_fiq_nesting_start.S
ports/cortex_a15/gnu/src/tx_thread_interrupt_control.S
ports/cortex_a15/gnu/src/tx_thread_interrupt_disable.S
ports/cortex_a15/gnu/src/tx_thread_interrupt_restore.S
ports/cortex_a15/gnu/src/tx_thread_irq_nesting_end.S
ports/cortex_a15/gnu/src/tx_thread_irq_nesting_start.S
ports/cortex_a15/gnu/src/tx_thread_schedule.S
ports/cortex_a15/gnu/src/tx_thread_stack_build.S
ports/cortex_a15/gnu/src/tx_thread_system_return.S
ports/cortex_a15/gnu/src/tx_timer_interrupt.S
ports/cortex_a17/ac6/src/tx_thread_context_restore.S
ports/cortex_a17/ac6/src/tx_thread_context_save.S
ports/cortex_a17/ac6/src/tx_thread_fiq_nesting_end.S
ports/cortex_a17/ac6/src/tx_thread_fiq_nesting_start.S
ports/cortex_a17/ac6/src/tx_thread_interrupt_control.S
ports/cortex_a17/ac6/src/tx_thread_interrupt_disable.S
ports/cortex_a17/ac6/src/tx_thread_interrupt_restore.S
ports/cortex_a17/ac6/src/tx_thread_irq_nesting_end.S
ports/cortex_a17/ac6/src/tx_thread_irq_nesting_start.S
ports/cortex_a17/ac6/src/tx_thread_schedule.S
ports/cortex_a17/ac6/src/tx_thread_stack_build.S
ports/cortex_a17/ac6/src/tx_thread_system_return.S
ports/cortex_a17/ac6/src/tx_timer_interrupt.S
ports/cortex_a17/gnu/example_build/crt0.S
ports/cortex_a17/gnu/src/tx_thread_context_restore.S
ports/cortex_a17/gnu/src/tx_thread_context_save.S
ports/cortex_a17/gnu/src/tx_thread_fiq_nesting_end.S
ports/cortex_a17/gnu/src/tx_thread_fiq_nesting_start.S
ports/cortex_a17/gnu/src/tx_thread_interrupt_control.S
ports/cortex_a17/gnu/src/tx_thread_interrupt_disable.S
ports/cortex_a17/gnu/src/tx_thread_interrupt_restore.S
ports/cortex_a17/gnu/src/tx_thread_irq_nesting_end.S
ports/cortex_a17/gnu/src/tx_thread_irq_nesting_start.S
ports/cortex_a17/gnu/src/tx_thread_schedule.S
ports/cortex_a17/gnu/src/tx_thread_stack_build.S
ports/cortex_a17/gnu/src/tx_thread_system_return.S
ports/cortex_a17/gnu/src/tx_timer_interrupt.S
ports/cortex_a5/ac6/src/tx_thread_context_restore.S
ports/cortex_a5/ac6/src/tx_thread_context_save.S
ports/cortex_a5/ac6/src/tx_thread_fiq_nesting_end.S
ports/cortex_a5/ac6/src/tx_thread_fiq_nesting_start.S
ports/cortex_a5/ac6/src/tx_thread_interrupt_control.S
ports/cortex_a5/ac6/src/tx_thread_interrupt_disable.S
ports/cortex_a5/ac6/src/tx_thread_interrupt_restore.S
ports/cortex_a5/ac6/src/tx_thread_irq_nesting_end.S
ports/cortex_a5/ac6/src/tx_thread_irq_nesting_start.S
ports/cortex_a5/ac6/src/tx_thread_schedule.S
ports/cortex_a5/ac6/src/tx_thread_stack_build.S
ports/cortex_a5/ac6/src/tx_thread_system_return.S
ports/cortex_a5/ac6/src/tx_timer_interrupt.S
ports/cortex_a5/gnu/example_build/crt0.S
ports/cortex_a5/gnu/src/tx_thread_context_restore.S
ports/cortex_a5/gnu/src/tx_thread_context_save.S
ports/cortex_a5/gnu/src/tx_thread_fiq_nesting_end.S
ports/cortex_a5/gnu/src/tx_thread_fiq_nesting_start.S
ports/cortex_a5/gnu/src/tx_thread_interrupt_control.S
ports/cortex_a5/gnu/src/tx_thread_interrupt_disable.S
ports/cortex_a5/gnu/src/tx_thread_interrupt_restore.S
ports/cortex_a5/gnu/src/tx_thread_irq_nesting_end.S
ports/cortex_a5/gnu/src/tx_thread_irq_nesting_start.S
ports/cortex_a5/gnu/src/tx_thread_schedule.S
ports/cortex_a5/gnu/src/tx_thread_stack_build.S
ports/cortex_a5/gnu/src/tx_thread_system_return.S
ports/cortex_a5/gnu/src/tx_timer_interrupt.S
ports/cortex_a7/ac6/src/tx_thread_context_restore.S
ports/cortex_a7/ac6/src/tx_thread_context_save.S
ports/cortex_a7/ac6/src/tx_thread_fiq_nesting_end.S
ports/cortex_a7/ac6/src/tx_thread_fiq_nesting_start.S
ports/cortex_a7/ac6/src/tx_thread_interrupt_control.S
ports/cortex_a7/ac6/src/tx_thread_interrupt_disable.S
ports/cortex_a7/ac6/src/tx_thread_interrupt_restore.S
ports/cortex_a7/ac6/src/tx_thread_irq_nesting_end.S
ports/cortex_a7/ac6/src/tx_thread_irq_nesting_start.S
ports/cortex_a7/ac6/src/tx_thread_schedule.S
ports/cortex_a7/ac6/src/tx_thread_stack_build.S
ports/cortex_a7/ac6/src/tx_thread_system_return.S
ports/cortex_a7/ac6/src/tx_timer_interrupt.S
ports/cortex_a7/gnu/example_build/crt0.S
ports/cortex_a7/gnu/example_build/tx_initialize_low_level.S
ports/cortex_a7/gnu/src/tx_thread_context_restore.S
ports/cortex_a7/gnu/src/tx_thread_context_save.S
ports/cortex_a7/gnu/src/tx_thread_fiq_nesting_end.S
ports/cortex_a7/gnu/src/tx_thread_fiq_nesting_start.S
ports/cortex_a7/gnu/src/tx_thread_interrupt_control.S
ports/cortex_a7/gnu/src/tx_thread_interrupt_disable.S
ports/cortex_a7/gnu/src/tx_thread_interrupt_restore.S
ports/cortex_a7/gnu/src/tx_thread_irq_nesting_end.S
ports/cortex_a7/gnu/src/tx_thread_irq_nesting_start.S
ports/cortex_a7/gnu/src/tx_thread_schedule.S
ports/cortex_a7/gnu/src/tx_thread_stack_build.S
ports/cortex_a7/gnu/src/tx_thread_system_return.S
ports/cortex_a7/gnu/src/tx_timer_interrupt.S
ports/cortex_a8/ac6/src/tx_thread_context_restore.S
ports/cortex_a8/ac6/src/tx_thread_context_save.S
ports/cortex_a8/ac6/src/tx_thread_fiq_nesting_end.S
ports/cortex_a8/ac6/src/tx_thread_fiq_nesting_start.S
ports/cortex_a8/ac6/src/tx_thread_interrupt_control.S
ports/cortex_a8/ac6/src/tx_thread_interrupt_disable.S
ports/cortex_a8/ac6/src/tx_thread_interrupt_restore.S
ports/cortex_a8/ac6/src/tx_thread_irq_nesting_end.S
ports/cortex_a8/ac6/src/tx_thread_irq_nesting_start.S
ports/cortex_a8/ac6/src/tx_thread_schedule.S
ports/cortex_a8/ac6/src/tx_thread_stack_build.S
ports/cortex_a8/ac6/src/tx_thread_system_return.S
ports/cortex_a8/ac6/src/tx_timer_interrupt.S
ports/cortex_a8/gnu/example_build/crt0.S
ports/cortex_a8/gnu/src/tx_thread_context_restore.S
ports/cortex_a8/gnu/src/tx_thread_context_save.S
ports/cortex_a8/gnu/src/tx_thread_fiq_nesting_end.S
ports/cortex_a8/gnu/src/tx_thread_fiq_nesting_start.S
ports/cortex_a8/gnu/src/tx_thread_interrupt_control.S
ports/cortex_a8/gnu/src/tx_thread_interrupt_disable.S
ports/cortex_a8/gnu/src/tx_thread_interrupt_restore.S
ports/cortex_a8/gnu/src/tx_thread_irq_nesting_end.S
ports/cortex_a8/gnu/src/tx_thread_irq_nesting_start.S
ports/cortex_a8/gnu/src/tx_thread_schedule.S
ports/cortex_a8/gnu/src/tx_thread_stack_build.S
ports/cortex_a8/gnu/src/tx_thread_system_return.S
ports/cortex_a8/gnu/src/tx_timer_interrupt.S
ports/cortex_a9/ac6/src/tx_thread_context_restore.S
ports/cortex_a9/ac6/src/tx_thread_context_save.S
ports/cortex_a9/ac6/src/tx_thread_fiq_nesting_end.S
ports/cortex_a9/ac6/src/tx_thread_fiq_nesting_start.S
ports/cortex_a9/ac6/src/tx_thread_interrupt_control.S
ports/cortex_a9/ac6/src/tx_thread_interrupt_disable.S
ports/cortex_a9/ac6/src/tx_thread_interrupt_restore.S
ports/cortex_a9/ac6/src/tx_thread_irq_nesting_end.S
ports/cortex_a9/ac6/src/tx_thread_irq_nesting_start.S
ports/cortex_a9/ac6/src/tx_thread_schedule.S
ports/cortex_a9/ac6/src/tx_thread_stack_build.S
ports/cortex_a9/ac6/src/tx_thread_system_return.S
ports/cortex_a9/ac6/src/tx_timer_interrupt.S
ports/cortex_a9/gnu/example_build/crt0.S
ports/cortex_a9/gnu/src/tx_thread_context_restore.S
ports/cortex_a9/gnu/src/tx_thread_context_save.S
ports/cortex_a9/gnu/src/tx_thread_fiq_nesting_end.S
ports/cortex_a9/gnu/src/tx_thread_fiq_nesting_start.S
ports/cortex_a9/gnu/src/tx_thread_interrupt_control.S
ports/cortex_a9/gnu/src/tx_thread_interrupt_disable.S
ports/cortex_a9/gnu/src/tx_thread_interrupt_restore.S
ports/cortex_a9/gnu/src/tx_thread_irq_nesting_end.S
ports/cortex_a9/gnu/src/tx_thread_irq_nesting_start.S
ports/cortex_a9/gnu/src/tx_thread_schedule.S
ports/cortex_a9/gnu/src/tx_thread_stack_build.S
ports/cortex_a9/gnu/src/tx_thread_system_return.S
ports/cortex_a9/gnu/src/tx_timer_interrupt.S
ports_arch/ARMv7-A/threadx/common/src/tx_thread_context_restore.S
ports_arch/ARMv7-A/threadx/common/src/tx_thread_context_save.S
ports_arch/ARMv7-A/threadx/common/src/tx_thread_fiq_nesting_end.S
ports_arch/ARMv7-A/threadx/common/src/tx_thread_fiq_nesting_start.S
ports_arch/ARMv7-A/threadx/common/src/tx_thread_interrupt_control.S
ports_arch/ARMv7-A/threadx/common/src/tx_thread_interrupt_disable.S
ports_arch/ARMv7-A/threadx/common/src/tx_thread_interrupt_restore.S
ports_arch/ARMv7-A/threadx/common/src/tx_thread_irq_nesting_end.S
ports_arch/ARMv7-A/threadx/common/src/tx_thread_irq_nesting_start.S
ports_arch/ARMv7-A/threadx/common/src/tx_thread_schedule.S
ports_arch/ARMv7-A/threadx/common/src/tx_thread_stack_build.S
ports_arch/ARMv7-A/threadx/common/src/tx_thread_system_return.S
ports_arch/ARMv7-A/threadx/common/src/tx_timer_interrupt.S
ports_arch/ARMv7-A/threadx/ports/gnu/example_build/crt0.S
test/ports/azrtos_test_tx_gnu_cortex_a5.log.expected
test/ports/azrtos_test_tx_gnu_cortex_a7.log.expected
test/ports/azrtos_test_tx_gnu_cortex_a8.log.expected
test/ports/azrtos_test_tx_gnu_cortex_a9.log.expected | 01/01/2024 | Yajun Xia | +| Removal | Closed | 6.4.0 | Removed redudant sample_threadX project from Cortex A7 ports_module IAR example_build | ports_module/cortex_a7/iar/example_build/azure_rtos.eww
ports_module/cortex_a7/iar/example_build/sample_threadx.c
ports_module/cortex_a7/iar/example_build/sample_threadx.ewd
ports_module/cortex_a7/iar/example_build/sample_threadx.ewp
ports_module/cortex_a7/iar/example_build/sample_threadx.icf | 01/01/2024 | Yajun Xia | +| ThreadX Release | Closed | 6.3.0 | Release | ThreadX 6.3.0 release | 30/10/2023 | Tiejun Zhou | +| Bug fix | Closed | 6.3.0 | Update patch version | common/inc/tx_api.h
common_smp/inc/tx_api.h | 30/10/2023 | Tiejun Zhou | +| Enhancement | Closed | 6.3.0 | Improved the logic to validate objects from the application in ThreadX modules | common_modules/module_manager/inc/txm_module_manager_util.h | 30/10/2023 | Tiejun Zhou | +| Bug fix | Closed | 6.3.0 | Fixed an issue preventing the data/bss section from being read from the ARM FVP | ports/cortex_a12/gnu/example_build/crt0.S
ports/cortex_a12/gnu/example_build/sample_threadx.ld
ports/cortex_a12/gnu/example_build/v7.h
ports/cortex_a12/gnu/example_build/v7.s
ports/cortex_a15/gnu/example_build/crt0.S
ports/cortex_a15/gnu/example_build/sample_threadx.ld
ports/cortex_a15/gnu/example_build/v7.h
ports/cortex_a15/gnu/example_build/v7.s
ports/cortex_a17/gnu/example_build/crt0.S
ports/cortex_a17/gnu/example_build/sample_threadx.ld
ports/cortex_a17/gnu/example_build/v7.h
ports/cortex_a17/gnu/example_build/v7.s
ports/cortex_a5/gnu/example_build/crt0.S
ports/cortex_a5/gnu/example_build/sample_threadx.ld
ports/cortex_a5/gnu/example_build/v7.h
ports/cortex_a5/gnu/example_build/v7.s
ports/cortex_a7/gnu/example_build/MP_GIC.h
ports/cortex_a7/gnu/example_build/MP_GIC.s
ports/cortex_a7/gnu/example_build/MP_PrivateTimer.S
ports/cortex_a7/gnu/example_build/MP_PrivateTimer.h
ports/cortex_a7/gnu/example_build/build_threadx_sample.bat
ports/cortex_a7/gnu/example_build/crt0.S
ports/cortex_a7/gnu/example_build/sample_threadx.ld
ports/cortex_a7/gnu/example_build/tx_initialize_low_level.S
ports/cortex_a7/gnu/example_build/v7.h
ports/cortex_a7/gnu/example_build/v7.s
ports/cortex_a8/gnu/example_build/crt0.S
ports/cortex_a8/gnu/example_build/sample_threadx.ld
ports/cortex_a8/gnu/example_build/v7.h
ports/cortex_a8/gnu/example_build/v7.s
ports/cortex_a9/gnu/example_build/crt0.S
ports/cortex_a9/gnu/example_build/sample_threadx.ld
ports/cortex_a9/gnu/example_build/v7.h
ports/cortex_a9/gnu/example_build/v7.s
ports_arch/ARMv7-A/threadx/ports/gnu/example_build/crt0.S
ports_arch/ARMv7-A/threadx/ports/gnu/example_build/sample_threadx.ld
ports_arch/ARMv7-A/threadx/ports/gnu/example_build/tx_initialize_low_level.S
ports_arch/ARMv7-A/threadx/ports/gnu/example_build/v7.h
ports_arch/ARMv7-A/threadx/ports/gnu/example_build/v7.s
test/ports/azrtos_test_tx_gnu_cortex_a7.log.expected | 30/10/2023 | Yajun Xia | +| Enhancement | Closed | 6.3.0 | Added thumb mode support to the module manager on Cortex-A7 for the IAR compiler | common_modules/module_manager/src/txm_module_manager_thread_create.c
ports_module/cortex_a7/gnu/example_build/txm_module_preamble.s
ports_module/cortex_a7/gnu/inc/txm_module_port.h
ports_module/cortex_a7/gnu/module_manager/src/tx_thread_context_save.s
ports_module/cortex_a7/gnu/module_manager/src/tx_thread_stack_build.s
ports_module/cortex_a7/iar/example_build/sample_threadx_module.c
ports_module/cortex_a7/iar/example_build/sample_threadx_module.ewp
ports_module/cortex_a7/iar/example_build/sample_threadx_module_manager.ewd
ports_module/cortex_a7/iar/example_build/sample_threadx_module_manager.ewp
ports_module/cortex_a7/iar/example_build/tx.ewp
ports_module/cortex_a7/iar/example_build/tx_initialize_low_level.s
ports_module/cortex_a7/iar/example_build/txm.ewp
ports_module/cortex_a7/iar/example_build/txm_module_preamble.s
ports_module/cortex_a7/iar/inc/tx_port.h
ports_module/cortex_a7/iar/inc/txm_module_port.h
ports_module/cortex_a7/iar/module_manager/src/tx_thread_context_restore.s
ports_module/cortex_a7/iar/module_manager/src/tx_thread_context_save.s
ports_module/cortex_a7/iar/module_manager/src/tx_thread_fiq_context_restore.s
ports_module/cortex_a7/iar/module_manager/src/tx_thread_fiq_context_save.s
ports_module/cortex_a7/iar/module_manager/src/tx_thread_fiq_nesting_end.s
ports_module/cortex_a7/iar/module_manager/src/tx_thread_fiq_nesting_start.s
ports_module/cortex_a7/iar/module_manager/src/tx_thread_interrupt_control.s
ports_module/cortex_a7/iar/module_manager/src/tx_thread_interrupt_disable.s
ports_module/cortex_a7/iar/module_manager/src/tx_thread_interrupt_restore.s
ports_module/cortex_a7/iar/module_manager/src/tx_thread_irq_nesting_end.s
ports_module/cortex_a7/iar/module_manager/src/tx_thread_irq_nesting_start.s
ports_module/cortex_a7/iar/module_manager/src/tx_thread_schedule.s
ports_module/cortex_a7/iar/module_manager/src/tx_thread_stack_build.s
ports_module/cortex_a7/iar/module_manager/src/tx_thread_system_return.s
ports_module/cortex_a7/iar/module_manager/src/tx_thread_vectored_context_save.s
ports_module/cortex_a7/iar/module_manager/src/tx_timer_interrupt.s
ports_module/cortex_a7/iar/module_manager/src/txm_module_manager_thread_stack_build.s
ports_module/cortex_a7/iar/module_manager/src/txm_module_manager_user_mode_entry.s | 30/10/2023 | Yajun Xia | +| Enhancement | Closed | 6.3.0 | Added thumb mode support to the module manager on Cortex-A7 for the GNU compiler | ports_module/cortex_a7/gnu/example_build/build_threadx_module_library.bat
ports_module/cortex_a7/gnu/example_build/crt0.S
ports_module/cortex_a7/gnu/example_build/gcc_setup.S
ports_module/cortex_a7/gnu/example_build/module_code.c
ports_module/cortex_a7/gnu/example_build/tx_initialize_low_level.s
ports_module/cortex_a7/gnu/inc/tx_port.h
ports_module/cortex_a7/gnu/inc/txm_module_port.h
ports_module/cortex_a7/gnu/module_manager/src/tx_thread_context_restore.s
ports_module/cortex_a7/gnu/module_manager/src/tx_thread_context_save.s
ports_module/cortex_a7/gnu/module_manager/src/tx_thread_fiq_context_restore.s
ports_module/cortex_a7/gnu/module_manager/src/tx_thread_fiq_context_save.s
ports_module/cortex_a7/gnu/module_manager/src/tx_thread_fiq_nesting_end.s
ports_module/cortex_a7/gnu/module_manager/src/tx_thread_fiq_nesting_start.s
ports_module/cortex_a7/gnu/module_manager/src/tx_thread_interrupt_control.s
ports_module/cortex_a7/gnu/module_manager/src/tx_thread_interrupt_disable.s
ports_module/cortex_a7/gnu/module_manager/src/tx_thread_interrupt_restore.s
ports_module/cortex_a7/gnu/module_manager/src/tx_thread_irq_nesting_end.s
ports_module/cortex_a7/gnu/module_manager/src/tx_thread_irq_nesting_start.s
ports_module/cortex_a7/gnu/module_manager/src/tx_thread_schedule.s
ports_module/cortex_a7/gnu/module_manager/src/tx_thread_stack_build.s
ports_module/cortex_a7/gnu/module_manager/src/tx_thread_system_return.s
ports_module/cortex_a7/gnu/module_manager/src/tx_thread_vectored_context_save.s
ports_module/cortex_a7/gnu/module_manager/src/tx_timer_interrupt.s
ports_module/cortex_a7/gnu/module_manager/src/txm_module_manager_thread_stack_build.s
ports_module/cortex_a7/gnu/module_manager/src/txm_module_manager_user_mode_entry.s | 30/10/2023 | Yajun Xia | +| Bug fix | Closed | 6.3.0 | Added memory barrier before thread scheduling for ARMv8-A ThreadX SMP | ports_arch/ARMv8-A/threadx_smp/common/src/tx_thread_context_restore.S
ports_arch/ARMv8-A/threadx_smp/common/src/tx_thread_system_return.S
ports_smp/cortex_a35_smp/ac6/src/tx_thread_context_restore.S
ports_smp/cortex_a35_smp/ac6/src/tx_thread_system_return.S
ports_smp/cortex_a35_smp/gnu/src/tx_thread_context_restore.S
ports_smp/cortex_a35_smp/gnu/src/tx_thread_system_return.S
ports_smp/cortex_a53_smp/ac6/src/tx_thread_context_restore.S
ports_smp/cortex_a53_smp/ac6/src/tx_thread_system_return.S
ports_smp/cortex_a53_smp/gnu/src/tx_thread_context_restore.S
ports_smp/cortex_a53_smp/gnu/src/tx_thread_system_return.S
ports_smp/cortex_a55_smp/ac6/src/tx_thread_context_restore.S
ports_smp/cortex_a55_smp/ac6/src/tx_thread_system_return.S
ports_smp/cortex_a55_smp/gnu/src/tx_thread_context_restore.S
ports_smp/cortex_a55_smp/gnu/src/tx_thread_system_return.S
ports_smp/cortex_a57_smp/ac6/src/tx_thread_context_restore.S
ports_smp/cortex_a57_smp/ac6/src/tx_thread_system_return.S
ports_smp/cortex_a57_smp/gnu/src/tx_thread_context_restore.S
ports_smp/cortex_a57_smp/gnu/src/tx_thread_system_return.S
ports_smp/cortex_a65_smp/ac6/src/tx_thread_context_restore.S
ports_smp/cortex_a65_smp/ac6/src/tx_thread_system_return.S
ports_smp/cortex_a65_smp/gnu/src/tx_thread_context_restore.S
ports_smp/cortex_a65_smp/gnu/src/tx_thread_system_return.S
ports_smp/cortex_a65ae_smp/ac6/src/tx_thread_context_restore.S
ports_smp/cortex_a65ae_smp/ac6/src/tx_thread_system_return.S
ports_smp/cortex_a65ae_smp/gnu/src/tx_thread_context_restore.S
ports_smp/cortex_a65ae_smp/gnu/src/tx_thread_system_return.S
ports_smp/cortex_a72_smp/ac6/src/tx_thread_context_restore.S
ports_smp/cortex_a72_smp/ac6/src/tx_thread_system_return.S
ports_smp/cortex_a72_smp/gnu/src/tx_thread_context_restore.S
ports_smp/cortex_a72_smp/gnu/src/tx_thread_system_return.S
ports_smp/cortex_a73_smp/ac6/src/tx_thread_context_restore.S
ports_smp/cortex_a73_smp/ac6/src/tx_thread_system_return.S
ports_smp/cortex_a73_smp/gnu/src/tx_thread_context_restore.S
ports_smp/cortex_a73_smp/gnu/src/tx_thread_system_return.S
ports_smp/cortex_a75_smp/ac6/src/tx_thread_context_restore.S
ports_smp/cortex_a75_smp/ac6/src/tx_thread_system_return.S
ports_smp/cortex_a75_smp/gnu/src/tx_thread_context_restore.S
ports_smp/cortex_a75_smp/gnu/src/tx_thread_system_return.S
ports_smp/cortex_a76_smp/ac6/src/tx_thread_context_restore.S
ports_smp/cortex_a76_smp/ac6/src/tx_thread_system_return.S
ports_smp/cortex_a76_smp/gnu/src/tx_thread_context_restore.S
ports_smp/cortex_a76_smp/gnu/src/tx_thread_system_return.S
ports_smp/cortex_a76ae_smp/ac6/src/tx_thread_context_restore.S
ports_smp/cortex_a76ae_smp/ac6/src/tx_thread_system_return.S
ports_smp/cortex_a76ae_smp/gnu/src/tx_thread_context_restore.S
ports_smp/cortex_a76ae_smp/gnu/src/tx_thread_system_return.S
ports_smp/cortex_a77_smp/ac6/src/tx_thread_context_restore.S
ports_smp/cortex_a77_smp/ac6/src/tx_thread_system_return.S
ports_smp/cortex_a77_smp/gnu/src/tx_thread_context_restore.S
ports_smp/cortex_a77_smp/gnu/src/tx_thread_system_return.S | 30/10/2023 | Tiejun Zhou | +| Bug fix | Closed | 6.3.0 | Fix compile warnings in the Linux port | ports/linux/gnu/inc/tx_port.h | 30/10/2023 | Yanwu Cai | +| Enhancement | Closed | 6.3.0 | Export _tx_handler_svc_unrecognized as weak symbol | ports_module/cortex_a7/ac5/module_manager/src/tx_thread_schedule.s
ports_module/cortex_a7/gnu/module_manager/src/tx_thread_schedule.s
ports_module/cortex_a7/iar/module_manager/src/tx_thread_schedule.s
ports_module/cortex_r4/ac6/module_manager/src/tx_thread_schedule.S
ports_module/cortex_r4/iar/module_manager/src/tx_thread_schedule.s | 30/10/2023 | Xiuwen Cai | +| Bug fix | Closed | 6.3.0 | Fixed MISRA issues in ThreadX SMP | common_smp/inc/tx_thread.h
common_smp/src/tx_byte_pool_search.c
common_smp/src/tx_thread_smp_utilities.c
common_smp/src/tx_thread_system_suspend.c | 30/10/2023 | Tiejun Zhou | +| New feature | Closed | 6.3.0 | Add random number stack filling option | common/inc/tx_api.h
common/inc/tx_user_sample.h
common/src/tx_initialize_kernel_enter.c
common/src/tx_thread_create.c
common_modules/module_manager/src/txm_module_manager_thread_create.c
common_smp/inc/tx_api.h
common_smp/inc/tx_user_sample.h
common_smp/src/tx_initialize_kernel_enter.c
common_smp/src/tx_thread_create.c
test/smp/cmake/CMakeLists.txt
test/smp/regression/testcontrol.c
test/tx/cmake/CMakeLists.txt
test/tx/regression/testcontrol.c | 30/10/2023 | Xiuwen Cai | +| Enhancement | Closed | 6.3.0 | Include tx_user.h in the Cortex M33/55/85 IAR ports | ports/cortex_m33/iar/src/\*
ports/cortex_m55/iar/src/\*
ports/cortex_m85/iar/src/\*
ports_arch/ARMv8-M/threadx/iar/src/\*
| 30/10/2023 | Tiejun Zhou | +| Enhancement | Closed | 6.3.0 | Include tx_user.h in the Cortex M3/4/7 IAR and AC5 ports | ports/cortex_m3/ac5/src/\*
ports/cortex_m3/iar/src/\*
ports/cortex_m4/ac5/src/\*
ports/cortex_m4/iar/src/\*
ports/cortex_m7/ac5/src/\*
ports/cortex_m7/iar/src/\*
ports_arch/ARMv7-M/threadx/ac5/src/\*
ports_arch/ARMv7-M/threadx/iar/src/\*
ports_module/cortex_m3/ac5/module_manager/src/\*
ports_module/cortex_m3/iar/module_manager/src/\*
ports_module/cortex_m4/ac5/module_manager/src/\*
ports_module/cortex_m4/iar/module_manager/src/\*
ports_module/cortex_m7/ac5/module_manager/src/\*
ports_module/cortex_m7/iar/module_manager/src/\*
| 30/10/2023 | Tiejun Zhou | +| Bug fix | Closed | 6.3.0 | Fixed random failure in test case | test/tx/regression/threadx_event_flag_suspension_timeout_test.c | 30/10/2023 | Tiejun Zhou | +| Enhancement | Closed | 6.3.0 | Unify ThreadX and ThreadX SMP for ARMv8-A | ports_arch/ARMv8-A/threadx/ports/ac6/src/tx_initialize_low_level.S
ports_arch/ARMv8-A/threadx_modules/common/src/txm_module_manager_thread_stack_build.S
ports_arch/ARMv8-A/threadx_smp/common/inc/tx_port.h
ports_arch/ARMv8-A/threadx_smp/common/src/tx_thread_smp_core_get.S
ports_arch/ARMv8-A/threadx_smp/common/src/tx_thread_smp_core_preempt.S
ports_arch/ARMv8-A/threadx_smp/common/src/tx_thread_smp_current_state_get.S
ports_arch/ARMv8-A/threadx_smp/common/src/tx_thread_smp_current_thread_get.S
ports_arch/ARMv8-A/threadx_smp/common/src/tx_thread_smp_initialize_wait.S
ports_arch/ARMv8-A/threadx_smp/common/src/tx_thread_smp_low_level_initialize.S
ports_arch/ARMv8-A/threadx_smp/common/src/tx_thread_smp_protect.S
ports_arch/ARMv8-A/threadx_smp/common/src/tx_thread_smp_time_get.S
ports_arch/ARMv8-A/threadx_smp/common/src/tx_thread_smp_unprotect.S | 30/10/2023 | Tiejun Zhou | +| Enhancement | Closed | 6.3.0 | Add tx_user.h to some port assembly files for the GCC and ac6 compilers - Cortex-A | ports/cortex_a5/ac6/src/\*.S
ports/cortex_a5/gnu/src/\*.S
ports/cortex_a5/ac6/src/\*.S
ports/cortex_a5/gnu/src/\*.S
ports/cortex_a7/ac6/src/\*.S
ports/cortex_a7/gnu/src/\*.S
ports/cortex_a8/ac6/src/\*.S
ports/cortex_a8/gnu/src/\*.S
ports/cortex_a9/ac6/src/\*.S
ports/cortex_a9/gnu/src/\*.S
ports/cortex_a15/ac6/src/\*.S
ports/cortex_a15/gnu/src/\*.S
ports/cortex_a17/ac6/src/\*.S
ports/cortex_a17/gnu/src/\*.S
| 30/10/2023 | Tiejun Zhou | +| New feature | Closed | 6.3.0 | Add ARMv7-A and ARMv8-A ports | ports_arch/ARMv7-A/\*\*
ports_arch/ARMv8-A/\*\* | 30/10/2023 | Tiejun Zhou | +| New feature | Closed | 6.3.0 | Add ARMv7-M and ARMv8-M ports | ports_arch/ARMv7-M/\*\*
ports_arch/ARMv8-M/\*\* | 30/10/2023 | Tiejun Zhou | +| Enhancement | Closed | 6.3.0 | Update patch version | common/inc/tx_api.h
common_smp/inc/tx_api.h | 30/10/2023 | Tiejun Zhou | +| ThreadX Release | Closed | 6.2.1 | Release | ThreadX 6.2.1 release | 08/03/2023 | Tiejun Zhou | +| Bug fix | Closed | 6.2.1 | Check if thread is coming out of suspension elsewhere | common_smp/src/tx_thread_wait_abort.c | 08/03/2023 | Tiejun Zhou | +| Bug fix | Closed | 6.2.1 | Added #include for tx_trace.h | common_modules/module_manager/src/txm_module_manager_stop.c | 08/03/2023 | Tiejun Zhou | +| Bug fix | Closed | 6.2.1 | Fix race condition in tx_thread_wait_abort and update regression test | common/src/tx_thread_wait_abort.c | 08/03/2023 | Tiejun Zhou | +| Bug fix | Closed | 6.2.1 | Check module stack for overlap | common_modules/module_manager/src/txm_module_manager_thread_create.c | 08/03/2023 | Scott Larson |` +| New feature | Closed | 6.2.1 | Initial version of the SMP MIPS Interaptiv port for the Green Hills and GNU compilers | ports_smp/mips32_interaptiv_smp/gnu/**
ports_smp/mips32_interaptiv_smp/green | 08/03/2023 | Scott Larson | +| Enhancement | Closed | 6.2.1 | Add #include for tx_user.h in the assembly files for some Cortex-M ports | ports/cortex_m0/ac6/src/tx_thread_context_restore.S
ports/cortex_m0/ac6/src/tx_thread_context_save.S
ports/cortex_m0/ac6/src/tx_thread_interrupt_control.S
ports/cortex_m0/ac6/src/tx_thread_interrupt_disable.S
ports/cortex_m0/ac6/src/tx_thread_interrupt_restore.S
ports/cortex_m0/ac6/src/tx_thread_schedule.S
ports/cortex_m0/ac6/src/tx_thread_stack_build.S
ports/cortex_m0/ac6/src/tx_thread_system_return.S
ports/cortex_m0/ac6/src/tx_timer_interrupt.S
ports/cortex_m0/gnu/src/tx_thread_context_restore.S
ports/cortex_m0/gnu/src/tx_thread_context_save.S
ports/cortex_m0/gnu/src/tx_thread_interrupt_control.S
ports/cortex_m0/gnu/src/tx_thread_interrupt_disable.S
ports/cortex_m0/gnu/src/tx_thread_interrupt_restore.S
ports/cortex_m0/gnu/src/tx_thread_schedule.S
ports/cortex_m0/gnu/src/tx_thread_stack_build.S
ports/cortex_m0/gnu/src/tx_thread_system_return.S
ports/cortex_m0/gnu/src/tx_timer_interrupt.S
ports/cortex_m23/ac6/example_build/tx_initialize_low_level.S
ports/cortex_m23/ac6/src/tx_misra.S
ports/cortex_m23/ac6/src/tx_thread_context_restore.S
ports/cortex_m23/ac6/src/tx_thread_context_restore.s
ports/cortex_m23/ac6/src/tx_thread_context_save.S
ports/cortex_m23/ac6/src/tx_thread_context_save.s
ports/cortex_m23/ac6/src/tx_thread_interrupt_control.S
ports/cortex_m23/ac6/src/tx_thread_interrupt_control.s
ports/cortex_m23/ac6/src/tx_thread_interrupt_disable.S
ports/cortex_m23/ac6/src/tx_thread_interrupt_disable.s
ports/cortex_m23/ac6/src/tx_thread_interrupt_restore.S
ports/cortex_m23/ac6/src/tx_thread_interrupt_restore.s
ports/cortex_m23/ac6/src/tx_thread_schedule.S
ports/cortex_m23/ac6/src/tx_thread_schedule.s
ports/cortex_m23/ac6/src/tx_thread_secure_stack_allocate.S
ports/cortex_m23/ac6/src/tx_thread_secure_stack_allocate.s
ports/cortex_m23/ac6/src/tx_thread_secure_stack_free.S
ports/cortex_m23/ac6/src/tx_thread_secure_stack_free.s
ports/cortex_m23/ac6/src/tx_thread_secure_stack_initialize.S
ports/cortex_m23/ac6/src/tx_thread_stack_build.S
ports/cortex_m23/ac6/src/tx_thread_stack_build.s
ports/cortex_m23/ac6/src/tx_thread_system_return.S
ports/cortex_m23/ac6/src/tx_thread_system_return.s
ports/cortex_m23/ac6/src/tx_timer_interrupt.S
ports/cortex_m23/ac6/src/tx_timer_interrupt.s
ports/cortex_m23/gnu/src/tx_initialize_low_level.S
ports/cortex_m23/gnu/src/tx_misra.S
ports/cortex_m23/gnu/src/tx_thread_context_restore.S
ports/cortex_m23/gnu/src/tx_thread_context_restore.s
ports/cortex_m23/gnu/src/tx_thread_context_save.S
ports/cortex_m23/gnu/src/tx_thread_context_save.s
ports/cortex_m23/gnu/src/tx_thread_interrupt_control.S
ports/cortex_m23/gnu/src/tx_thread_interrupt_control.s
ports/cortex_m23/gnu/src/tx_thread_interrupt_disable.S
ports/cortex_m23/gnu/src/tx_thread_interrupt_disable.s
ports/cortex_m23/gnu/src/tx_thread_interrupt_restore.S
ports/cortex_m23/gnu/src/tx_thread_interrupt_restore.s
ports/cortex_m23/gnu/src/tx_thread_schedule.S
ports/cortex_m23/gnu/src/tx_thread_schedule.s
ports/cortex_m23/gnu/src/tx_thread_secure_stack_allocate.S
ports/cortex_m23/gnu/src/tx_thread_secure_stack_allocate.s
ports/cortex_m23/gnu/src/tx_thread_secure_stack_free.S
ports/cortex_m23/gnu/src/tx_thread_secure_stack_free.s
ports/cortex_m23/gnu/src/tx_thread_secure_stack_initialize.S
ports/cortex_m23/gnu/src/tx_thread_stack_build.S
ports/cortex_m23/gnu/src/tx_thread_stack_build.s
ports/cortex_m23/gnu/src/tx_thread_system_return.S
ports/cortex_m23/gnu/src/tx_thread_system_return.s
ports/cortex_m23/gnu/src/tx_timer_interrupt.S
ports/cortex_m23/gnu/src/tx_timer_interrupt.s | 08/03/2023 | Scott Larson | +| Enhancement | Closed | 6.2.1 | Update RISC-V example for the IAR compiler | ports/risc-v32/iar/example_build/* | 08/03/2023 | Scott Larson | +| Enhancement | Closed | 6.2.1 | Add 'config' directory to risc-v iar to support simulator | ports/risc-v32/iar/example_build/config/debugger/\* | 08/03/2023 | Scott Larson | +| Bug fix | Closed | 6.2.1 | Update patch version | common/inc/tx_api.h
common_smp/inc/tx_api.h | 08/03/2023 | Scott Larson | +| ThreadX Release | Closed | 6.2.0 | Release | ThreadX 6.2.0 release | 28/10/2022 | Scott Larson | +| Bug fix | Closed | 6.2.0 | Updated WORK_REQ_SIZE value and pthread_t typedef | utility/rtos_compatibility_layers/posix/tx_posix.h | 28/10/2022 | Scott Larson | +| Bug fix | Closed | 6.2.0 | Fixed bounds check | utility/rtos_compatibility_layers/posix/px_nanosleep.c | 28/10/2022 | Scott Larson | +| Bug fix | Closed | 6.2.0 | Updated cast type | utility/rtos_compatibility_layers/posix/px_pth_sigmask.c | 28/10/2022 | Scott Larson | +| Bug fix | Closed | 6.2.0 | Updated argument types | utility/rtos_compatibility_layers/posix/px_pth_kill.c
utility/rtos_compatibility_layers/posix/readme_threadx_posix.txt
utility/rtos_compatibility_layers/posix/signal.h | 28/10/2022 | Scott Larson | +| Bug fix | Closed | 6.2.0 | Updated name check | utility/rtos_compatibility_layers/posix/px_mq_open.c
utility/rtos_compatibility_layers/posix/px_sem_open.c | 28/10/2022 | Scott Larson | +| Cleanup | Closed | 6.2.0 | Removed double parentheses | utility/rtos_compatibility_layers/posix/px_pth_create.c
utility/rtos_compatibility_layers/posix/px_pth_kill.c
utility/rtos_compatibility_layers/posix/px_sem_unlink.c | 28/10/2022 | Scott Larson | +| Enhancement | Closed | 6.2.0 | Added 64-bit support | utility/rtos_compatibility_layers/posix/px_mq_create.c
utility/rtos_compatibility_layers/posix/px_mq_priority_search.c
utility/rtos_compatibility_layers/posix/px_mq_receive.c
utility/rtos_compatibility_layers/posix/px_mq_send.c
utility/rtos_compatibility_layers/posix/px_pth_create.c
utility/rtos_compatibility_layers/posix/px_pth_init.c
utility/rtos_compatibility_layers/posix/px_system_manager.c | 28/10/20222 | Scott Larson | +| Bug fix | Closed | 6.2.0 | Fixed message swap logic | utility/rtos_compatibility_layers/posix/px_mq_arrange_msg.c | 28/10/2022 | Scott Larson | +| Cleanup | Closed | 6.2.0 | Remove unneeded definitions | utility/rtos_compatibility_layers/posix/px_int.h | 28/10/2022 | Scott Larson | +| Enhancement | Closed | 6.2.0 | Changed config STACK_DEPTH_TYPE to 32-bit | utility/rtos_compatibility_layers/FreeRTOS/config_template/FreeRTOSConfig.h | 28/10/2022 | Scott Larson | +| New feature | Closed | 6.2.0 | Added new SMP port for Cortex-R8 - ac5 compiler | ports_smp/cortex_r8_smp/ac5 | 28/10/2022 | Scott Larson | +| Bug fix | Closed | 6.2.0 | Updated example files - Cortex-M4 port | ports_module/cortex_m4/gnu/example_build | 28/10/2022 | Scott Larson | +| Bug fix | Closed | 6.2.0 | Updated MISRA functions - IAR compiler | ports_module/cortex_m3/iar/module_manager/src/tx_misra.s
ports_module/cortex_m4/iar/module_manager/src/tx_misra.s
ports_module/cortex_m7/iar/module_manager/src/tx_misra.s | 28/10/2022 | Scott Larson | +| Enhancement | Closed | 6.2.0 | Added heap size configuration - ac5 compiler | ports_module/cortex_m3/ac5/inc/txm_module_port.h
ports_module/cortex_m4/ac5/inc/txm_module_port.h
ports_module/cortex_m7/ac5/inc/txm_module_port.h | 28/10/2022 | Scott Larson | +| Cleanup | Closed | 6.2.0 | Unified Armv7-M tx_port.h file | ports_module/cortex_m3/\*/inc/tx_port.h
ports_module/cortex_m4/\*/inc/tx_port.h
ports_module/cortex_m7/\*/inc/tx_port.h | 28/10/2022 | Scott Larson | +| Bug fix | Closed | 6.2.0 | Fixed label syntax - ac5 compiler | ports_module/cortex_m3/ac5/module_manager/src/tx_thread_schedule.s
ports_module/cortex_m4/ac5/module_manager/src/tx_thread_schedule.s
ports_module/cortex_m7/ac5/module_manager/src/tx_thread_schedule.s | 28/10/2022 | Scott Larson | +| Enchancement | Closed | 6.2.0 | Added low power support | ports_module/cortex_m0+/\*/module_manager/src/tx_thread_schedule.S
ports_module/cortex_m23/\*/module_manager/src/tx_thread_schedule.S
ports_module/cortex_m3/ac6/module_manager/src/tx_thread_schedule.S
ports_module/cortex_m3/gnu/module_manager/src/tx_thread_schedule.S
ports_module/cortex_m3/iar/module_manager/src/tx_thread_schedule.s
ports_module/cortex_m33/\*/module_manager/src/tx_thread_schedule.S
ports_module/cortex_m4/ac6/module_manager/src/tx_thread_schedule.S
ports_module/cortex_m4/gnu/module_manager/src/tx_thread_schedule.S
ports_module/cortex_m4/iar/module_manager/src/tx_thread_schedule.s
ports_module/cortex_m7/ac6/module_manager/src/tx_thread_schedule.S
ports_module/cortex_m7/gnu/module_manager/src/tx_thread_schedule.S
ports_module/cortex_m7/iar/module_manager/src/tx_thread_schedule.s | 28/10/2022 | Scott Larson | +| Bug fix | Closed | 6.2.0 | Updated EPK symbol names | ports/xtensa/xcc/src/tx_thread_context_restore.S
ports/xtensa/xcc/src/tx_thread_schedule.S
ports/xtensa/xcc/src/tx_thread_system_return.S
| 28/10/2022 | Scott Larson | +| Cleanup | Closed | 6.2.0 | Removed EPK extension (this extension is found in tx_api.h) | ports/xtensa/xcc/inc/tx_port.h | 28/10/2022 | Scott Larson | +| Bug fix | Closed | 6.2.0 | Added example project to the Cortex-M55 port | ports/cortex_m55/ac6/example_build | 28/10/2022 | Scott Larson | +| Enhancement | Closed | 6.2.0 | Updated Renesas RX README files | ports/rxv1/ccrx/readme_threadx.txt
ports/rxv1/gnu/readme_threadx.txt
ports/rxv1/iar/readme_threadx.txt
ports/rxv2/ccrx/readme_threadx.txt
ports/rxv2/gnu/readme_threadx.txt
ports/rxv2/iar/readme_threadx.txt
ports/rxv3/ccrx/readme_threadx.txt
ports/rxv3/gnu/readme_threadx.txt
ports/rxv3/iar/readme_threadx.txt
| 28/10/2022 | Scott Larson | +| Bug fix | Closed | 6.2.0 | Added ifdef to prevent compile time warning about a multiple definition - IAR compiler | ports/cortex_m23/iar/src/tx_misra.s
ports/cortex_m3/iar/src/tx_misra.s
ports/cortex_m33/iar/src/tx_misra.s
ports/cortex_m4/iar/src/tx_misra.s
ports/cortex_m55/iar/src/tx_misra.s
ports/cortex_m7/iar/src/tx_misra.s
ports/cortex_m85/iar/src/tx_misra.s
| 29/07/2022 | Scott Larson | +| Bug fix | Closed | 6.2.0 | Update patch version | common/inc/tx_api.h
common_smp/inc/tx_api.h | 28/10/2022 | Scott Larson | +| ThreadX Release | Closed | 6.1.12 | Release | ThreadX 6.1.12 release | 29/07/2022 | Scott Larson | +| New feature | Closed | 6.1.12 | Added start flag to the FreeRTOS compatiblity layer | utility/rtos_compatibility_layers/FreeRTOS/tx_freertos.c | 29/07/2022 | Scott Larson | +| Bug fix | Closed | 6.1.12 | Fixed preprocessor statement | ports_smp/cortex_a7_smp/gnu/src/tx_thread_smp_protect.S | 29/07/2022 | Scott Larson | +| Bug fix | Closed | 6.1.12 | Enabled user-defined regions |

ports_module/cortex_m3/\*/inc/txm_module_port.h
ports_module/cortex_m3/\*/module_manager/src/txm_module_manager_mm_register_setup.c
ports_module/cortex_m4/\*/inc/txm_module_port.h
ports_module/cortex_m4/\*/module_manager/src/txm_module_manager_mm_register_setup.c
ports_module/cortex_m7/\*/inc/txm_module_port.h
ports_module/cortex_m7/\*/module_manager/src/txm_module_manager_mm_register_setup.c | 29/07/2022 | Scott Larson | +| Cleanup | Closed | 6.1.12 | Removed the code path to skip MPU reloading | ports_module/cortex_m0+/\*/module_manager/src/tx_thread_schedule.S
ports_module/cortex_m23/\*/module_manager/src/tx_thread_schedule.S
ports_module/cortex_m3/\*/module_manager/src/tx_thread_schedule.s
ports_module/cortex_m33/\*/module_manager/src/tx_thread_schedule.S
ports_module/cortex_m4/\*/module_manager/src/tx_thread_schedule.s
ports_module/cortex_m7/\*/module_manager/src/tx_thread_schedule.s
| 29/07/2022 | Scott Larson | +| Bug fix | Closed | 6.1.12 | Updated secure stack allocation | ports/cortex_m23/\*/src/tx_thread_secure_stack.c
ports_module/cortex_m23/\*/module_manager/src/tx_thread_secure_stack.c | 29/07/2022 | Scott Larson | +| New feature | Closed | 6.1.12 | Added new ports for Cortex-M55 and M85 | ports/cortex_m55/\*\*
ports/cortex_m85/\*\* | 29/07/2022 | Scott Larson | +| Enhancement | Closed | 6.1.12 | Described BASEPRI usage | ports/cortex_m3/\*/inc/tx_port.h
ports/cortex_m4/\*/inc/tx_port.h
ports/cortex_m7/\*/inc/tx_port.h | 29/07/2022 | Scott Larson | +| Enhancement | Closed | 6.1.12 | Updated secure stack allocation | ports/cortex_m23/\*/src/tx_thread_secure_stack.c | 29/07/2022 | Scott Larson | +| Bug fix | Closed | 6.1.12 | Changed secure stack initialize macro | ports/cortex_m23/\*/inc/tx_port.h
ports/cortex_m23/\*/src/tx_thread_secure_stack_initialize.S
ports/cortex_m33/\*/inc/tx_port.h
ports/cortex_m33/\*/src/tx_thread_secure_stack_initialize.S
ports_module/cortex_m23/\*/inc/tx_port.h
ports_module/cortex_m23/\*/module_manager/src/tx_thread_secure_stack_initialize.S
ports_module/cortex_m33/\*/inc/tx_port.h
ports_module/cortex_m33/\*/module_manager/src/tx_thread_secure_stack_initialize.S | 29/07/2022 | Scott Larson | +| Cleanup | Closed | 6.1.12 | Removed unneeded temp variable | ports/cortex_a12/ac6/inc/tx_port.h
ports/cortex_a12/gnu/inc/tx_port.h
ports/cortex_a15/ac6/inc/tx_port.h
ports/cortex_a15/gnu/inc/tx_port.h
ports/cortex_a17/ac6/inc/tx_port.h
ports/cortex_a17/gnu/inc/tx_port.h
ports/cortex_a5/ac6/inc/tx_port.h
ports/cortex_a5/gnu/inc/tx_port.h
ports/cortex_a7/ac6/inc/tx_port.h
ports/cortex_a7/gnu/inc/tx_port.h
ports/cortex_a8/ac6/inc/tx_port.h
ports/cortex_a8/gnu/inc/tx_port.h
ports/cortex_a9/ac6/inc/tx_port.h
ports/cortex_a9/gnu/inc/tx_port.h
ports/cortex_r4/gnu/inc/tx_port.h
ports/cortex_r5/ac6/inc/tx_port.h
ports/cortex_r5/gnu/inc/tx_port.h
| 29/07/2022 | Scott Larson | +| Bug fix | Closed | 6.1.12 | Added check for null name | common/src/tx_trace_object_register.c
common_smp/src/tx_trace_object_register.c | 29/07/2022 | Scott Larson | +| Bug fix | Closed | 6.1.12 | Update patch version | common/inc/tx_api.h
common_smp/inc/tx_api.h | 29/07/2022 | Scott Larson | +| ThreadX Release | Closed | 6.1.11 | Release | ThreadX 6.1.11 release | 26/04/2022 | Scott Larson | +| Enhancement | Closed | 6.1.11 | | | 26/04/2022 | Scott Larson | +| ThreadX Release | Closed | 6.1.11 | Release | ThreadX 6.1.11 release | 26/04/2022 | Scott Larson | +| Enhancement | Closed | 6.1.11 | Optimized MPU configuration, added BASEPRI support | ports_module/cortex_m3/\*/module_manager/src/tx_thread_schedule.S
ports_module/cortex_m33/\*/module_manager/src/tx_thread_schedule.S
ports_module/cortex_m4/\*/module_manager/src/tx_thread_schedule.S
ports_module/cortex_m7/\*/module_manager/src/tx_thread_schedule.S | 26/04/2022 | Scott Larson | +| Enhancement | Closed | 6.1.11 | Optimized MPU configuration | ports_module/cortex_m0+/\*/module_manager/src/tx_thread_schedule.S
ports_module/cortex_m23/\*/module_manager/src/tx_thread_schedule.S | 26/04/2022 | Scott Larson | +| Cleanup | Closed | 6.1.11 | Removed FIFO queueing in Cortex-A SMP ports | ports_module/cortex_a35_smp/\*/module_manager/src/tx_thread_context_restore.S
ports_module/cortex_a35_smp/\*/module_manager/src/tx_thread_smp_protect.S
ports_module/cortex_a35_smp/\*/module_manager/src/tx_thread_smp_unprotect.S
ports_smp/cortex_a34_smp/\*/src/tx_thread_context_restore.S
ports_smp/cortex_a34_smp/\*/src/tx_thread_smp_protect.S
ports_smp/cortex_a34_smp/\*/src/tx_thread_smp_unprotect.S
ports_smp/cortex_a35_smp/\*/src/tx_thread_context_restore.S
ports_smp/cortex_a35_smp/\*/src/tx_thread_smp_protect.S
ports_smp/cortex_a35_smp/\*/src/tx_thread_smp_unprotect.S
ports_smp/cortex_a53_smp/\*/src/tx_thread_context_restore.S
ports_smp/cortex_a53_smp/\*/src/tx_thread_smp_protect.S
ports_smp/cortex_a53_smp/\*/src/tx_thread_smp_unprotect.S
ports_smp/cortex_a55_smp/\*/src/tx_thread_context_restore.S
ports_smp/cortex_a55_smp/\*/src/tx_thread_smp_protect.S
ports_smp/cortex_a55_smp/\*/src/tx_thread_smp_unprotect.S
ports_smp/cortex_a57_smp/\*/src/tx_thread_context_restore.S
ports_smp/cortex_a57_smp/\*/src/tx_thread_smp_protect.S
ports_smp/cortex_a57_smp/\*/src/tx_thread_smp_unprotect.S
ports_smp/cortex_a5x_smp/\*/src/tx_thread_context_restore.S
ports_smp/cortex_a5x_smp/\*/src/tx_thread_smp_protect.S
ports_smp/cortex_a5x_smp/\*/src/tx_thread_smp_unprotect.S
ports_smp/cortex_a65_smp/\*/src/tx_thread_context_restore.S
ports_smp/cortex_a65_smp/\*/src/tx_thread_smp_protect.S
ports_smp/cortex_a65_smp/\*/src/tx_thread_smp_unprotect.S
ports_smp/cortex_a65ae_smp/\*/src/tx_thread_context_restore.S
ports_smp/cortex_a65ae_smp/\*/src/tx_thread_smp_protect.S
ports_smp/cortex_a65ae_smp/\*/src/tx_thread_smp_unprotect.S
ports_smp/cortex_a72_smp/\*/src/tx_thread_context_restore.S
ports_smp/cortex_a72_smp/\*/src/tx_thread_smp_protect.S
ports_smp/cortex_a72_smp/\*/src/tx_thread_smp_unprotect.S
ports_smp/cortex_a73_smp/\*/src/tx_thread_context_restore.S
ports_smp/cortex_a73_smp/\*/src/tx_thread_smp_protect.S
ports_smp/cortex_a73_smp/\*/src/tx_thread_smp_unprotect.S
ports_smp/cortex_a75_smp/\*/src/tx_thread_context_restore.S
ports_smp/cortex_a75_smp/\*/src/tx_thread_smp_protect.S
ports_smp/cortex_a75_smp/\*/src/tx_thread_smp_unprotect.S
ports_smp/cortex_a76_smp/\*/src/tx_thread_context_restore.S
ports_smp/cortex_a76_smp/\*/src/tx_thread_smp_protect.S
ports_smp/cortex_a76_smp/\*/src/tx_thread_smp_unprotect.S
ports_smp/cortex_a76ae_smp/\*/src/tx_thread_context_restore.S
ports_smp/cortex_a76ae_smp/\*/src/tx_thread_smp_protect.S
ports_smp/cortex_a76ae_smp/\*/src/tx_thread_smp_unprotect.S
ports_smp/cortex_a77_smp/\*/src/tx_thread_context_restore.S
| 26/04/2022 | Scott Larson | +| Cleanup | Closed | 6.1.11 | Updated function names | ports/xtensa/xcc/src/tx_initialize_low_level.c
ports/xtensa/xcc/src/tx_timer_interrupt.S | 26/04/2022 | Scott Larson | +| Enhancement | Closed | 6.1.11 | Added low power support to Renesas RX ports | ports/rxv1/\*/src/tx_thread_schedule.\*
ports/rxv2/\*/src/tx_thread_schedule.\*
ports/rxv3/\*/src/tx_thread_schedule.\* | 26/04/2022 | Scott Larson | +| Removal | Closed | 6.1.11 | Removed unneeded definition of TX_TIMER_TICKS_PER_SECOND | ports/linux/gnu/inc/tx_port.h | 26/04/2022 | Scott Larson | +| Enhancement | Closed | 6.1.11 | Added BASEPRI support | ports/cortex_m3/\*/src/tx_thread_schedule.S
ports/cortex_m33/\*/src/tx_thread_schedule.S
ports/cortex_m4/\*/src/tx_thread_schedule.S
ports/cortex_m7/\*/src/tx_thread_schedule.S | 26/04/2022 | Scott Larson | +| Enhancement | Closed | 6.1.11 | Added volatile keyword | ports/cortex_m0/\*/inc/tx_port.h
ports/cortex_m23/\*/inc/tx_port.h
ports/cortex_m3/\*/inc/tx_port.h
ports/cortex_m33/\*/inc/tx_port.h
ports/cortex_m4/\*/inc/tx_port.h
ports/cortex_m7/\*/inc/tx_port.h
ports_module/cortex_m0+/\*/inc/tx_port.h
ports_module/cortex_m23/\*/inc/tx_port.h
ports_module/cortex_m3/\*/inc/tx_port.h
ports_module/cortex_m33/\*/inc/tx_port.h
ports_module/cortex_m4/\*/inc/tx_port.h
ports_module/cortex_m7/\*/inc/tx_port.h
| 26/04/2022 | Scott Larson | +| Enhancement | Closed | 6.1.11 | Unify ARMv7-A ports | ports/cortex_a12/\*\*
ports/cortex_a15/\*\*
ports/cortex_a17/\*\*
ports/cortex_a5/\*\*
ports/cortex_a7/\*\*
ports/cortex_a8/\*\*
ports/cortex_a9/\*\* | 26/04/2022 | Scott Larson | +| Enhancement | Closed | 6.1.11 | Optimized the definition of TX_TIMER_TICKS_PER_SECOND | ports/c667x/ccs/inc/tx_port.h | 26/04/2022 | Scott Larson | +| Bug fix | Closed | 6.1.11 | Fixed loop to find next thread | common_smp/src/tx_thread_system_suspend.c | 26/04/2022 | Scott Larson | +| Bug fix | Closed | 6.1.11 | Corrected preemption check logic | common/src/tx_event_flags_set.c
common_smp/src/tx_event_flags_set.c | 26/04/2022 | Scott Larson | +| Enhancement | Closed | 6.1.11 | Handle 0 flags | common/src/tx_event_flags_get.c
common_smp/src/tx_event_flags_get.c | 26/04/2022 | Scott Larson | +| Enhancement | Closed | 6.1.11 | Optimized the definition of TX_TIMER_TICKS_PER_SECOND | common/inc/tx_api.h
common/inc/tx_user_sample.h
common_smp/inc/tx_api.h
common_smp/inc/tx_user_sample.h | 26/04/2022 | Scott Larson | +| Bug fix | Closed | 6.1.11 | Update patch version | common/inc/tx_api.h
common_smp/inc/tx_api.h | 26/04/2022 | Scott Larson | +| ThreadX Release | Closed | 6.1.10 | Release | ThreadX 6.1.10 release | 03/02/2022 | Yuxin Zhou | +| Removal | Closed | 6.1.10 | Removal of unneeded files | ports/arc_hs/metaware/inc/tx_port.h
ports/arm11/gnu/example_build/libc.a
ports/arm11/gnu/example_build/libgcc.a
ports/arm9/gnu/example_build/libgcc.a
ports/cortex_a15/gnu/example_build/libc.a
ports/cortex_a15/gnu/example_build/libgcc.a
ports/arc_em/metaware/test_regression
ports/arc_em/metaware/test_sandbox
ports/arc_em/metaware/test_validation
ports/cortex_a7/gnu/example_build/libc.a
ports/cortex_a7/gnu/example_build/libgcc.a
ports/cortex_a8/gnu/example_build/libc.a
ports/cortex_a8/gnu/example_build/libgcc.a
ports/cortex_a9/gnu/example_build/libc.a
ports/cortex_a9/gnu/example_build/libgcc.a
ports/cortex_m0/gnu/example_build/libgcc.a
ports/cortex_m3/gnu/example_build/libc.a
ports/cortex_m4/gnu/example_build/libc.a
ports/cortex_m7/gnu/example_build/libc.a
ports/cortex_r4/gnu/example_build/libc.a
ports/cortex_r4/gnu/example_build/libgcc.a
ports/cortex_r5/gnu/example_build/libc.a
ports/cortex_r5/gnu/example_build/libgcc.a
ports_module/cortex_a35_smp/ac6/module_manager/src/tx_thread_timeout.c
ports_module/cortex_a35_smp/gnu/module_manager/src/tx_thread_timeout.c
ports_module/cortex_a7/ac5/example_build/build_all.bat
ports_module/cortex_m3/ac5/example_build/build.bat
ports_module/cortex_m3/ac5/example_build/clean.bat
ports_module/cortex_m3/ac5/example_build/setenv.bat
ports_module/cortex_m3/ac6/example_build/all.bat
ports_module/cortex_m3/ac6/example_build/build.bat
ports_module/cortex_m3/ac6/example_build/clean.bat
ports_module/cortex_m3/ac6/example_build/initws.bat
ports_module/cortex_m3/ac6/example_build/setenv.bat | 03/02/2022 | Yuxin Zhou | +| New feature | Closed | 6.1.10 | Cortex M33 port: secure stack initialisation | ports_module/cortex_m33/gnu/module_manager/src/tx_thread_secure_stack_initialize.S | 03/02/2022 | Yuxin Zhou | +| Bug fix | Closed | 6.1.10 | Renesas RX ports: Added missing thread preemption logic | ports/rxv1/\*/tx_timer_interrupt.src
ports/rxv2/\*/tx_timer_interrupt.src
ports/rxv3/\*/tx_timer_interrupt.src | 03/02/2022 | Yuxin Zhou | +| Enhancement | Closed | 6.1.10 | Renesas RX ports: Removed system state macro and added missing interrupt control defines | ports/rxv1/\*/tx_port.h
ports/rxv2/\*/tx_port.h
ports/rxv3/\*/tx_port.h | 03/02/2022 | Yuxin Zhou | +| Enhancement | Closed | 6.1.10 | Updates for predefined macro name | ports/cortex_m33/gnu/src/tx_initialize_low_level.S
ports/cortex_m33/gnu/src/tx_thread_schedule.S
ports/cortex_m4/gnu/src/tx_thread_schedule.S
ports/cortex_m7/gnu/src/tx_thread_schedule.S
ports_module/cortex_m3/gnu/module_manager/src/tx_thread_schedule.S
ports_module/cortex_m4/gnu/module_manager/src/tx_thread_schedule.S
ports_module/cortex_m7/gnu/module_manager/src/tx_thread_schedule.S | 03/02/2022 | Yuxin Zhou | +| Enhancement | Closed | 6.1.10 | Improve secure stack allocation | ports/cortex_m33/ac6/src/tx_thread_secure_stack.c
ports/cortex_m33/gnu/src/tx_thread_secure_stack.c
ports/cortex_m33/iar/src/tx_thread_secure_stack.c
ports/arc_em/metaware/example_build/sample_threadx/tx_initialize_low_level.s
ports/arc_em/metaware/inc/tx_port.h
ports/arc_hs/metaware/example_build/sample_threadx/tx_initialize_low_level.s
ports_module/cortex_m33/iar/inc/tx_port.h
ports_module/cortex_m33/iar/inc/tx_secure_interface.h
ports_module/cortex_m33/iar/inc/txm_module_port.h | 03/02/2022 | Yuxin Zhou | +| Enhancement | Closed | 6.1.10 | Improve the internal logic of the Cortex M3, Cortex M4, Cortex M7, and Cortex M33 ports | ports/cortex_m3/ghs/\*
ports/cortex_m3/gnu/src/tx_thread_schedule.S
ports/cortex_m33/ac6/inc/tx_port.h
ports/cortex_m33/ac6/inc/tx_secure_interface.h
ports/cortex_m33/gnu/inc/tx_port.h
ports/cortex_m33/gnu/inc/tx_secure_interface.h
ports/cortex_m33/iar/inc/tx_port.h
ports/cortex_m33/iar/inc/tx_secure_interface.h
ports/cortex_m4/ghs/\*
ports/cortex_m7/ghs/\*
ports_module/cortex_m33/ac6/inc/tx_port.h
ports_module/cortex_m33/ac6/inc/tx_secure_interface.h
ports_module/cortex_m33/ac6/inc/txm_module_port.h
ports_module/cortex_m33/gnu/inc/tx_port.h
ports_module/cortex_m33/gnu/inc/tx_secure_interface.h
ports_module/cortex_m33/gnu/inc/txm_module_port.h
ports_module/cortex_m33/gnu/module_manager/src/tx_initialize_low_level.S
ports_module/cortex_m33/gnu/module_manager/src/tx_thread_schedule.S | 03/02/2022 | Yuxin Zhou | +| Enhancement | Closed | 6.1.10 | Add heap size configuration to specific Cortex M ports | ports_module/cortex_a35/ac6/module_lib/src/txm_module_initialize.S
ports_module/cortex_a35_smp/ac6/module_lib/src/txm_module_initialize.S
ports_module/cortex_m23/ac6/module_lib/src/txm_module_initialize.S
ports_module/cortex_m3/ac6/module_lib/src/txm_module_initialize.S
ports_module/cortex_m33/ac6/module_lib/src/txm_module_initialize.S
ports_module/cortex_m4/ac6/module_lib/src/txm_module_initialize.S
ports_module/cortex_m7/ac6/module_lib/src/txm_module_initialize.S | 03/02/2022 | Yuxin Zhou | +| Bug fix | Closed | 6.1.10 | Update typedef to fix a MISRA violation. Change predefined macro | ports/cortex_m3/ac5/inc/tx_port.h
ports/cortex_m3/ac6/inc/tx_port.h
ports/cortex_m3/gnu/inc/tx_port.h
ports/cortex_m3/iar/inc/tx_port.h
ports/cortex_m3/keil/inc/tx_port.h
ports/cortex_m4/ac5/inc/tx_port.h
ports/cortex_m4/ac6/inc/tx_port.h
ports/cortex_m4/gnu/inc/tx_port.h
ports/cortex_m4/iar/inc/tx_port.h
ports/cortex_m4/keil/inc/tx_port.h
ports/cortex_m7/ac5/inc/tx_port.h
ports/cortex_m7/ac6/inc/tx_port.h
ports/cortex_m7/gnu/inc/tx_port.h
ports/cortex_m7/iar/inc/tx_port.h
ports/cortex_m7/keil/inc/tx_port.h | 03/02/2022 | Yuxin Zhou | +| New feature | Closed | 6.1.10 | Added ports for Cortex A34, Cortex A53, Cortex A55, Cortex A57, Cortex A65, Cortex A65ae, Cortex A72, Cortex A73, Cortex A75, Cortex A76, Cortex A76ae, Cortex A77, and Cortex M0+.

Added SMP ports for Cortex A34, Cortex A53, Cortex A55, Cortex A57, Cortex A65, Cortex A65ae, Cortex A72, Cortex A73, Cortex A75, Cortex A76, Cortex A76ae, Cortex A77, and Cortex A78 | ports/cortex_a34/ac6/\*\*
ports/cortex_a34/gnu/\*\*
ports/cortex_a53/ac6/\*\*
ports/cortex_a53/gnu/\*\*
ports/cortex_a55/ac6/\*\*
ports/cortex_a55/gnu/\*\*
ports/cortex_a57/ac6/\*\*
ports/cortex_a57/gnu/\*\*
ports/cortex_a65/ac6/\*\*
ports/cortex_a65/gnu/\*\*
ports/cortex_a65ae/ac6/\*\*
ports/cortex_a65ae/gnu/\*\*
ports/cortex_a72/ac6/\*\*
ports/cortex_a72/gnu/\*\*
ports/cortex_a73/ac6/\*\*
ports/cortex_a73/gnu/\*\*
ports/cortex_a75/ac6/\*\*
ports/cortex_a75/gnu/\*\*
ports/cortex_a76/ac6/\*\*
ports/cortex_a76/gnu/\*\*
ports/cortex_a76ae/ac6/\*\*
ports/cortex_a76ae/gnu/\*\*
ports/cortex_a77/ac6/\*\*
ports/cortex_a77/gnu/\*\*
ports_module/cortex_m0+/ac6/\*\*
ports_module/cortex_m0+/gnu/\*\*
ports_module/cortex_m0+/iar/\*\*
ports_smp/cortex_a34_smp/ac6/\*\*
ports_smp/cortex_a34_smp/gnu/\*\*
ports_smp/cortex_a53_smp/ac6/\*\*
ports_smp/cortex_a53_smp/gnu/\*\*
ports_smp/cortex_a55_smp/ac6/\*\*
ports_smp/cortex_a55_smp/gnu/\*\*
ports_smp/cortex_a57_smp/ac6/\*\*
ports_smp/cortex_a57_smp/gnu/\*\*
ports_smp/cortex_a65_smp/ac6/\*\*
ports_smp/cortex_a65_smp/gnu/\*\*
ports_smp/cortex_a65ae_smp/ac6/\*\*
ports_smp/cortex_a65ae_smp/gnu/\*\*
ports_smp/cortex_a72_smp/ac6/\*\*
ports_smp/cortex_a72_smp/gnu/\*\*
ports_smp/cortex_a73_smp/ac6/\*\*
ports_smp/cortex_a73_smp/gnu/\*\*
ports_smp/cortex_a75_smp/ac6/\*\*
ports_smp/cortex_a75_smp/gnu/\*\*
ports_smp/cortex_a76_smp/ac6/\*\*
ports_smp/cortex_a76_smp/gnu/\*\*
ports_smp/cortex_a76ae_smp/ac6/\*\*
ports_smp/cortex_a76ae_smp/gnu/\*\*
ports_smp/cortex_a77_smp/ac6/\*\*
ports_smp/cortex_a77_smp/gnu/\*\*
ports_smp/cortex_a78_smp/ac6/\*\*
ports_smp/cortex_a78_smp/gnu | 03/02/2022 | Yuxin Zhou | +| Clean up | Closed | 6.1.10 | Clean up whitespace | common_modules/module_manager/src/\* | 03/02/2022 | Yuxin Zhou | +| Bug fix | Closed | 6.1.10 | Add CALL_NOT_USED options | common_modules/module_manager/inc/txm_module_manager_dispatch.h | 03/02/2022 | Yuxin Zhou | +| Bug fix | Closed | 6.1.10 | Add CALL_NOT_USED options, clean up whitespace | common_modules/inc/txm_module_user_sample.h
common_modules/module_lib/src/\* | 03/02/2022 | Yuxin Zhou | +| Bug fix | Closed | 6.1.10 | Add callback request thread prototype, clean up whitespace | common_modules/inc/txm_module.h | 03/02/2022 | Yuxin Zhou | +| Bug fix | Closed | 6.1.10 | Add unused parameter macro, update patch version | common/inc/tx_api.h
common_smp/inc/tx_api.h | 03/02/2022 | Yuxin Zhou | +| ThreadX Release | Closed | 6.1.9 | Release | ThreadX 6.1.9 release | 18/10/2021 | Yuxin Zhou | +| New feature | Closed | 6.1.9 | Add the Thread-Metric performance test suite | utility/benchmarks/thread_metric/** | 18/10/2021 | Yuxin Zhou | +| New feature | Closed | 6.1.9 | Add IAR compiler support to the Cortex A5x SMP port | ports_smp/cortex_a5x_smp/iar/** | 18/10/2021 | Yuxin Zhou | +| New feature | Closed | 6.1.9 | Add IAR compiler support to the RXv2 port | ports_module/rxv2/iar/** | 18/10/2021 | Yuxin Zhou | +| Enhancement | Closed | 6.1.9 | Add Execution Profile Kit (EPK) support | ports_module/cortex_a5/\*/module_manager/src/tx_thread_context_restore.s
ports_module/cortex_a5/\*/module_manager/src/tx_thread_context_save.s
ports_module/cortex_a5/\*/module_manager/src/tx_thread_schedule.s
ports_module/cortex_a7/\*/module_manager/src/tx_thread_context_restore.s
ports_module/cortex_a7/\*/module_manager/src/tx_thread_context_save.s
ports_module/cortex_a7/\*/module_manager/src/tx_thread_schedule.s
ports_module/cortex_a8/\*/module_manager/src/tx_thread_context_restore.s
ports_module/cortex_a8/\*/module_manager/src/tx_thread_context_save.s
ports_module/cortex_a8/\*/module_manager/src/tx_thread_schedule.s
ports_module/cortex_a9/\*/module_manager/src/tx_thread_context_restore.s
ports_module/cortex_a9/\*/module_manager/src/tx_thread_context_save.s
ports_module/cortex_a9/\*/module_manager/src/tx_thread_schedule.s
ports_module/cortex_a15/\*/module_manager/src/tx_thread_context_restore.s
ports_module/cortex_a15/\*/module_manager/src/tx_thread_context_save.s
ports_module/cortex_a15/\*/module_manager/src/tx_thread_schedule.s
ports_module/cortex_a35/\*/module_manager/src/tx_thread_context_restore.s
ports_module/cortex_a35/\*/module_manager/src/tx_thread_context_save.s
ports_module/cortex_a35/\*/module_manager/src/tx_thread_schedule.s
| 18/10/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.9 | Fix compiler warnings | utility/rtos_compatibility_layers/FreeRTOS/tx_freertos.c: | 18/10/2021 | Yuxin Zhou | +| Removal | Closed | 6.1.9 | Removal of port-specific error handling. Developers must use common/src/tx_thread_stack_error_handler.c instead| cortex_m23/src/tx_thread_stack_error_handler.c
cortex_m23/src/tx_thread_stack_error_notify.c
cortex_m33/src/tx_thread_stack_error_handler.c
cortex_m33/src/tx_thread_stack_error_notify.c | 18/10/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.9 | a | b | 18/10/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.9 | a | b | 18/10/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.9 | Fix logic to get interrupt status | rxv2/gnu/inc/tx_port.h | 18/10/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.9 | Add symbol ULONG64_DEFINED | linux/gnu/inc/tx_port.h | 18/10/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.9 | Improve stack check error handling | ports/cortex_m23/\*/inc/tx_port.h
ports/cortex_m33/\*/inc/tx_port.h | 18/10/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.9 | Add support for disabling loop control on Arc EM | ports/arc_em/metaware/src/tx_thread_context_restore.s | 18/10/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.9 | Optimize system stack usage on Arc EM | ports/arc_em/metaware/example_build/sample_threadx/tx_initialize_low_level.s | 18/10/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.9 | Improve stack check error handling | common/inc/tx_thread.h
common/src/tx_thread_initialize.c
common/src/tx_thread_stack_error_handler.c
common/src/tx_thread_stack_error_notify.c | 18/10/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.9 | Add user-configurable TX_TIMER_TICKS_PER_SECOND | common/inc/tx_user_sample.h | 18/10/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.9 | Updated product version numbers | common/inc/tx_api.h
common_smp/inc/tx_api.h | 18/10/2021 | Yuxin Zhou | +| ThreadX Release | Closed | 6.1.8 | Release | ThreadX 6.1.8 release | 03/08/2021 | Yuxin Zhou | +| Enhancement | Closed | 6.1.8 | Update compiler flags in sample builds | ports_module/cortex_m3/gnu/example_build/\*
ports_module/cortex_m4/gnu/example_build/\*
ports_module/cortex_m7/gnu/example_build/\* | 03/08/2021 | Yuxin Zhou | +| Enhancement | Closed | 6.1.8 | Add BASEPRI support | ports_module/cortex_m7/\*/module_manager/src/tx_thread_interrupt_control.s
ports_module/cortex_m7/\*/module_manager/src/tx_thread_interrupt_disable.s
ports_module/cortex_m7/\*/module_manager/src/tx_thread_interrupt_restore.s
ports_module/cortex_m7/\*/module_manager/src/tx_thread_system_return.s
ports_module/cortex_m4/\*/module_manager/src/tx_thread_interrupt_control.s
ports_module/cortex_m4/\*/module_manager/src/tx_thread_interrupt_disable.s
ports_module/cortex_m4/\*/module_manager/src/tx_thread_interrupt_restore.s
ports_module/cortex_m4/\*/module_manager/src/tx_thread_system_return.s
ports_module/cortex_m3/\*/module_manager/src/tx_thread_interrupt_control.s
ports_module/cortex_m3/\*/module_manager/src/tx_thread_interrupt_disable.s
ports_module/cortex_m3/\*/module_manager/src/tx_thread_interrupt_restore.s
ports_module/cortex_m3/\*/module_manager/src/tx_thread_system_return.s
ports_module/cortex_m33/\*/module_manager/src/tx_thread_interrupt_control.s
ports_module/cortex_m33/\*/module_manager/src/tx_thread_interrupt_disable.s
ports_module/cortex_m33/\*/module_manager/src/tx_thread_interrupt_restore.s
ports_module/cortex_m33/\*/module_manager/src/tx_thread_system_return.s | 03/08/2021 | Yuxin Zhou | +| Enhancement | Closed | 6.1.8 | Add Execution Profile Kit (EPK) support | ports_module/cortex_m23/iar/src/tx_initialize_low_level.s
ports_module/cortex_m23/\*/module_manager/src/tx_thread_context_restore.s
ports_module/cortex_m23/\*/module_manager/src/tx_thread_context_save.s
ports_module/cortex_m23/\*/module_manager/src/tx_thread_schedule.s
ports_module/cortex_m3/\*/module_manager/src/tx_thread_context_restore.s
ports_module/cortex_m3/\*/module_manager/src/tx_thread_context_save.s
ports_module/cortex_m3/\*/module_manager/src/tx_thread_schedule.s
ports_module/cortex_m33/iar/src/tx_initialize_low_level.s
ports_module/cortex_m33/\*/module_manager/src/tx_thread_context_restore.s
ports_module/cortex_m33/\*/module_manager/src/tx_thread_context_save.s
ports_module/cortex_m33/\*/module_manager/src/tx_thread_schedule.s
ports_module/cortex_m4/\*/module_manager/src/tx_thread_context_restore.s
ports_module/cortex_m4/\*/module_manager/src/tx_thread_context_save.s
ports_module/cortex_m4/\*/module_manager/src/tx_thread_schedule.s
ports_module/cortex_m7/\*/module_manager/src/tx_thread_context_restore.s
ports_module/cortex_m7/\*/module_manager/src/tx_thread_schedule.s
ports_module/cortex_m7/\*/module_manager/src/tx_thread_context_save.s | 03/08/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.8 | Fix initialisation function | ports_module/cortex_m23/*/module_manager/src/tx_thread_secure_stack.c | 03/08/2021 | Yuxin Zhou | +| Enhancement | Closed | 6.1.8 | Update project files - ac6 compiler | ports_module/cortex_m23/ac6/example_build/\*
ports_module/cortex_m33/ac6/example_build/\* | 03/08/2021 | Yuxin Zhou | +| Enhancement | Closed | 6.1.8 | Update header file for intrinsic functions - ac6 compiler | ports_module/cortex_m23/ac6/module_manager/src/tx_thread_secure_stack.c
ports_module/cortex_m33/ac6/module_manager/src/tx_thread_secure_stack.c | 03/08/2021 | Yuxin Zhou | +| Enhancement | Closed | 6.1.8 | Implement secure stack initialisation | ports_module/cortex_m23/\*/module_manager/src/tx_thread_secure_stack_initialize.s
ports_module/cortex_m33/\*/module_manager/src/tx_thread_secure_stack_initialize.s | 03/08/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.8 | Fix VFP context switching | ports_module/cortex_m4/\*/module_manager/src/tx_thread_schedule.s
ports_module/cortex_m7/\*/module_manager/src/tx_thread_schedule.s
ports_module/cortex_m33/\*/module_manager/src/tx_thread_schedule.s | 03/08/2021 | Yuxin Zhou | +| Enhancement | Closed | 6.1.8 | Add Execution Profile Kit (EPK) support | ports/cortex_m0/\*/example_build/tx_initialize_low_level.s
ports/cortex_m23/ac6/example_build/tx_initialize_low_level.S
ports/cortex_m23/gnu/src/tx_initialize_low_level.S
ports/cortex_m23/iar/src/tx_initialize_low_level.s
ports/cortex_m33/ac6/example_build/tx_initialize_low_level.S
ports/cortex_m33/gnu/src/tx_initialize_low_level.S
ports/cortex_m33/iar/src/tx_initialize_low_level.s | 03/08/2021 | Yuxin Zhou | +| Enhancement | Closed | 6.1.8 | Add BASEPRI support | ports/cortex_m3/iar/src/tx_thread_interrupt_disable.s
ports/cortex_m33/\*/src/tx_thread_interrupt_control.s
ports/cortex_m33/\*/src/tx_thread_interrupt_disable.s
ports/cortex_m33/\*/src/tx_thread_interrupt_restore.s
ports/cortex_m33/\*/src/tx_thread_system_return.s
ports/cortex_m4/iar/src/tx_thread_interrupt_disable.s
ports/cortex_m7/iar/src/tx_thread_interrupt_disable.s | 03/08/2021 | Yuxin Zhou | +| Enhancement | Closed | 6.1.8 | Save/restore registers around low power enter/exit | ports/cortex_m3/\*/src/tx_thread_schedule.s
ports/cortex_m4/\*/src/tx_thread_schedule.s
ports/cortex_m7/\*/src/tx_thread_schedule.s | 03/08/2021 | Yuxin Zhou | +| Enhancement | Closed | 6.1.8 | Update header file for intrinsic functions - ac6 compiler | ports/cortex_m23/ac6/src/tx_thread_secure_stack.c
ports/cortex_m33/ac6/src/tx_thread_secure_stack.c | 03/08/2021 | Yuxin Zhou | +| Enhancement | Closed | 6.1.8 | Add secure mode stack initialize. | ports/cortex_m23/\*/inc/tx_secure_interface.h
ports/cortex_m33/\*/inc/tx_secure_interface.h | 03/08/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.8 | Remove unneeded cast | common/src/tx_thread_create.c | 03/08/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.8 | Updated product version numbers | common/inc/tx_api.h
common_smp/inc/tx_api.h | 03/08/2021 | Yuxin Zhou | +| ThreadX Release | Closed | 6.1.7 | Release | ThreadX 6.1.7 release | 07/06/2021 | Yuxin Zhou | +| New feature | Closed | 6.1.7 | Execution Profile Kit (EPK) utility classes | utility/rtos_compatibility_layers/execution_profile_kit/** | 07/06/2021 | Yuxin Zhou | +| New feature | Closed | 6.1.7 | POSIX compatibility layer | utility/rtos_compatibility_layers/posix/** | 07/06/2021 | Yuxin Zhou | +| New feature | Closed | 6.1.7 | OSEK compatibility layer | utility/rtos_compatibility_layers/OSEK/** | 07/06/2021 | Yuxin Zhou | +| Cleanup | Closed | 6.1.7 | Directory name changes:
cortex-a7 -> cortex_a7
cortex-m3 -> cortex_m3
cortex-m4 -> cortex_m4
cortex-m7 ->cortex_m7
cortex-r4 -> cortex_r4 | ports_module/cortex_a7
ports_module/cortex_m3
ports_module/cortex_m4
ports_module/cortex_m7
ports_module/cortex_r4 | 07/06/2021 | Yuxin Zhou | +| Cleanup | Closed | 6.1.7 | Internal logic cleanups | ports/cortex_m3/\*\*
ports/cortex_m4/\*\*
ports/cortex_m7/\*\* | 07/06/2021 | Yuxin Zhou | +| Enhancement | Closed | 6.1.7 | Implement Execution Profile Kit (EPK) support | ports/cortex_m0/\*/src/tx_thread_context_restore.s
ports/cortex_m0/\*/src/tx_thread_context_save.s
ports/cortex_m0/\*/src/tx_thread_schedule.s
ports/cortex_m3/\*/src/tx_thread_context_restore.s
ports/cortex_m3/\*/src/tx_thread_context_save.s
ports/cortex_m3/\*/src/tx_thread_schedule.s
ports/cortex_m4/\*/src/tx_thread_context_restore.s
ports/cortex_m4/\*/src/tx_thread_context_save.s
ports/cortex_m4/\*/src/tx_thread_schedule.s
ports/cortex_m7/\*/src/tx_thread_context_restore.s
ports/cortex_m7/\*/src/tx_thread_context_save.s
ports/cortex_m7/\*/src/tx_thread_schedule.s
ports/cortex_m23/\*/src/tx_thread_context_restore.s
ports/cortex_m23/\*/src/tx_thread_context_save.s
ports/cortex_m23/\*/src/tx_thread_schedule.s
ports/cortex_m33/\*/src/tx_thread_context_restore.s
ports/cortex_m33/\*/src/tx_thread_context_save.s
ports/cortex_m33/\*/src/tx_thread_schedule.s
| 07/06/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.7 | Fix secure stack initialization | ports/cortex_m23/\*/inc/tx_port.h
ports/cortex_m23/\*/src/tx_thread_schedule.s
ports/cortex_m23/\*/src/tx_thread_secure_stack.c
ports/cortex_m23/\*/src/tx_thread_secure_stack_initialize.s
ports/cortex_m33/\*/inc/tx_port.h
ports/cortex_m33/\*/src/tx_thread_schedule.s
ports/cortex_m33/\*/src/tx_thread_secure_stack.c
ports/cortex_m33/\*/src/tx_thread_secure_stack_initialize.s | 07/06/2021 | Yuxin Zhou | +| New feature | Closed | 6.1.7 | Renesas RXv3 port | ports/rxv3/** | 07/06/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.7 | Enable thread stack error handler for Armv8-m | common/src/tx_thread_stack_error_handler.c
common/src/tx_thread_stack_error_notify.c
ports/cortex_m23/\*/inc/tx_port.h
ports/cortex_m33/\*/inc/tx_port.h | 07/06/2021 | Yuxin Zhou | +| Enhancement | Closed | 6.1.7 | Added Execution Profile support | common/src/tx_thread_initialize.c | 07/06/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.7 | Support TX_MISRA_ENABLE | comon/src/tx_thread_create.c | 07/06/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.7 | Improve possible free bytes calculation | common/src/tx_byte_pool_search.c | 07/06/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.7 | Updated product version numbers | common/inc/tx_api.h
common_smp/inc/tx_api.h | 07/06/2021 | Yuxin Zhou | +| ThreadX Release | Closed | 6.1.6 | Release | ThreadX 6.1.6 release | 03/04/2021 | Yuxin Zhou | +| Enhancement | Closed | 6.1.6 | Check objects for overflow | ports_module/cortex-m3/\*/inc/txm_module_port.h
ports_module/cortex-m4/\*/inc/txm_module_port.h
ports_module/cortex-m7/\*/inc/txm_module_port.h
ports_module/cortex-m7/\*/module_manager/src/txm_module_manager_mm_register_setup.c
ports_module/cortex_m33/\*/module_manager/src/txm_module_manager_mm_register_setup.c
ports_module/cortex-r4/\*/module_manager/src/txm_module_manager_mm_register_setup.c | 03/04/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.6 | Fix MPU region configuration | ports_module/cortex_m33/*/module_manager/src/tx_thread_schedule.S | 03/04/2021 | Yuxin Zhou | +| New feature | Closed | 6.1.6 | Cortex M23 modules | ports_module/cortex_m23/** | 03/04/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.6 | Fix compilation warning | utilities/low_power/tx_low_power.c | 03/04/2021 | Yuxin Zhou | +| Enhancement | Closed | 6.1.5 | Implement support for low-power operations | ports/cortex_m23/\*/tx_thread_schedule.s
ports/cortex_m33/\*/tx_thread_schedule.s | 03/04/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.6 | ARC EM port for MetaWare compiler bug fix: remove unneeded load of _tx_thread_preempt_disable | ports/arc_em/metaware/tx_timer_interrupt.s | 03/04/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.6 | ARC EM port for MetaWare compiler bug fix: updated commentsn | ports/arc_em/metaware/tx_thread_system_return.s | 03/04/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.6 | ARC EM port for MetaWare compiler bug fix: updated comments | ports/arc_em/metaware/tx_thread_stack_build.s | 03/04/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.6 | ARC EM port for MetaWare compiler bug fix: fixed interrupt priority overwritting bug and fixed hardware stack checker disable/reenable logic | ports/arc_em/metaware/tx_thread_schedule.s | 03/04/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.6 | ARC EM port for MetaWare compiler bug fix: updated comments | ports/arc_em/metaware/tx_thread_interrupt_control.s | 03/04/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.6 | ARC EM port for MetaWare compiler bug fix: r25/r30 are caller saved | ports/arc_em/metaware/tx_thread_context_save.s | 03/04/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.6 | ARC EM port for MetaWare compiler bug fix: r25/r30 are caller saved | ports/arc_em/metaware/tx_thread_context_restore.s | 03/04/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.6 | ARC EM port for MetaWare compiler bug fix: updated comments | ports/arc_em/metaware/tx_initialize_low_level.s | 03/04/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.6 | ARC EM port for MetaWare compiler bug fix: updated macro definition | ports/arc_em/metaware/tx_port.h | 03/04/2021 | Yuxin Zhou | +| Enhancement | Closed | 6.1.6 | Check that extra_parameters are in module data area | common_modules/module_manager/ inc/txm_module_manager_dispatch.h | 03/04/2021 | Yuxin Zhou | +| Enhancement | Closed | 6.1.6 | Optimize object checking | common_modules/module_manager/inc/txm_module_manager_util.h | 03/04/2021 | Yuxin Zhou | +| Enhancement | Closed | 6.1.6 | Add optional defines to remove unneeded functions | common_modules/module_manager/src/txm_module_manager_kernel_dispatch.c | 03/04/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.6 | Fixed mapping current thread's priority rather than next | common/src/tx_mutex_priority_change.c | 03/04/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.6 | Updated product version numbers | common/inc/tx_api.h
common_smp/inc/tx_api.h | 03/04/2021 | Yuxin Zhou | +| ThreadX Release | Closed | 6.1.5 | Release | ThreadX 6.1.5 release | 05/03/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.5 | Fix object delete underflow | common_modules/module_manager/src/txm_module_manager_stop.c | 05/03/2021 | Yuxin Zhou | +| Enhancement | Closed | 6.1.5 | Add option to remove FileX pointer | common_smp/inc/tx_user_sample.h | 05/03/2021 | Yuxin Zhou | +| Enhancement | Closed | 6.1.5 | Order defines numerically. Add option to remove FileX pointer | common_smp/inc/tx_api.h | 05/03/2021 | Yuxin Zhou | +| Enhancement | Closed | 6.1.5 | Add option to remove FileX pointer | common/inc/tx_user_sample.h | 05/03/2021 | Yuxin Zhou | +| Enhancement | Closed | 6.1.5 | Order defines numerically. Add option to remove FileX pointer | common/inc/tx_api.h | 05/03/2021 | Yuxin Zhou | +| Enhancement | Closed | 6.1.5 | Add ULONG64_DEFINED | ports/cortex_m23/\*/inc/tx_port.h
ports/cortex_m33/\*/inc/tx_port.h | 05/03/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.5 | Fix interrupt enable/disable macros | utility/rtos_compatibility_layers/FreeRTOS/FreeRTOS.h | 05/03/2021 | Yuxin Zhou | +| Cleanup | Closed | 6.1.5 | Rename rx port to rxv2 | ports/rxv | 05/03/2021 | Yuxin Zhou | +| Enhancement | Closed | 6.1.5 | Add ULONG64_DEFINED | ports/cortex_m23/\*/inc/tx_port.h
ports/cortex_m33/\*/inc/tx_port.h | 05/03/2021 | Yuxin Zhou | +| Enhancement | Closed | 6.1.5 | Implement support for low-power operations | utility/low_power/\*\*
ports/cortex_m0/\*/tx_thread_schedule.s
ports/cortex_m3/\*/tx_thread_schedule.s
ports/cortex_m4/\*/tx_thread_schedule.s
ports/cortex_m7/\*/tx_thread_schedule.s | 05/03/2021 | Yuxin Zhou | +| Enhancement | Closed | 6.1.5 | Cortex m33: Add support for the IAR and GNU compilers | ports_module/cortex_m33/gnu/\*\*
ports_module/cortex_m33/iar/\*\* | 05/03/2021 | Yuxin Zhou | +| Bug fix | Closed | 6.1.6 | Updated product version numbers | common/inc/tx_api.h
common_smp/inc/tx_api.h | | 05/03/2021 | Yuxin Zhou | +| ThreadX Release | Closed | 6.1.3 | Release | ThreadX 6.1.3 release | 08/01/2021 | Scott Larson | +| New feature | Closed | 6.1.3 | Cortex m33: Add support for the ac6 compiler | ports_module/cortex_m33/ac6/\*\* | 08/01/2021 | Scott Larson | +| New feature | Closed | 6.1.3 | Cortex a35: Add support for the ac6 and gnu compilers | ports/cortex_a35/\*\*
ports/cortex_a35_smp/\*\* | 08/01/2021 | Scott Larson | +| New feature | Closed | 6.1.3 | Add xtensa port for the xcc compiler | ports/xtensa | 08/01/2021 | Scott Larson | +| New feature | Closed | 6.1.3 | Add RXv2 ports for the ccrx, gnu, and iar compilers | ports/rxv2 | 08/01/2021 | Scott Larson | +| Cleanup | Closed | 6.1.3 | Updates to use builtins/inline assembler | ports/cortex_m23/gnu/inc/tx_port.h
ports/cortex_m23/gnu/src/tx_thread_secure_stack.c | 08/01/2021 | Scott Larson | +| Cleanup | Closed | 6.1.3 | Remove unnecessary settings directories from example. | ports/cortex_a35/ac6/** | 08/01/2021 | Scott Larson | +| Cleanup | Closed | 6.1.3 | Remove unneeded load of _tx_thread_preempt_disable. | ports/arc_em/metaware/src/tx_timer_interrupt.s
ports/arc_hs/metaware/src/tx_timer_interrupt.s | 08/01/2021 | Scott Larson | +| Enhancement | Closed | 6.1.3 | Update product constants.
MISRA compliance changes | common_smp/inc/tx_api.h
common_smp/src/tx_thread_create.c
common_smp/src/tx_time_get.c
common_smp/src/tx_thread_smp_high_level_initialize.c | 08/01/2021 | Scott Larson | +| New feature | Closed | 6.1.3 | Pre-execution module preamble validation and preparation | common_modules/module_manager/src/txm_module_manager_start.c
common_modules/module_manager/src/txm_module_manager_absolute_load.c | 08/01/2021 | Scott Larson | +| Enhancement | Closed | 6.1.3 | Added port-specific dispathc. | common/inc/tx_api.h | 08/01/2021 | Scott Larson | +| Enhancement | Closed | 6.1.3 | Fix stack overlap checking.
Added 64-bit & SMP support. | common_modules/module_manager/src/txm_module_manager_thread_create.c | 08/01/2021 | Scott Larson | +| Enhancement | Closed | 6.1.3 | Update product constants.
Add port-specific extensions. | common_modules/inc/txm_module.h | 08/01/2021 | Scott Larson | +| Enhancement | Closed | 6.1.3 | Update product constants | common/inc/tx_api.h
common_smp/inc/tx_api.h | 08/01/2021 | Scott Larson | +| ThreadX Release | Closed | 6.1.2 | Release | NextX Duo 6.1.2 release | 10/11/2020 | Scott Larson | +| Cleanup | Closed | 6.1.2 | Uniformise assembly file formatting accross toolchains. | ports_module/cortex-m4/\*\*/\*.S
ports_module/cortex-m7/\*\*/\*.S | 10/11/2020 | Scott Larson | +| Cleanup | Closed | 6.1.2 | Remove unneeded IAR workspace files. | ports/**/iar | 10/11/2020 | Scott Larson | +| Cleanup | Closed | 6.1.2 | Remove th_user.h file. | common_smp/inc/tx_user.h | 10/11/2020 | Scott Larson | +| Optimisation | Closed | 6.1.2 | Move TX_THREAD_GET_SYSTEM_STATE to tx_api.h. | common/inc/tx_api.h
common/inc/tx_thread.h | 10/11/2020 | Scott Larson | +| Enhancement | Closed | 6.1.2 | Update product constants | common/inc/tx_api.h
common_smp/inc/tx_api.h | 10/11/2020 | Scott Larson | \ No newline at end of file diff --git a/common/inc/tx_api.h b/common/inc/tx_api.h index 3ff05f4b..629d1ab9 100644 --- a/common/inc/tx_api.h +++ b/common/inc/tx_api.h @@ -148,7 +148,9 @@ extern "C" { #define AZURE_RTOS_THREADX #define THREADX_MAJOR_VERSION 6 #define THREADX_MINOR_VERSION 4 -#define THREADX_PATCH_VERSION 2 +#define THREADX_PATCH_VERSION 3 +#define THREADX_BUILD_VERSION 202503 +#define THREADX_HOTFIX_VERSION '' /* Define the following symbol for backward compatibility */ #define EL_PRODUCT_THREADX @@ -328,6 +330,12 @@ extern "C" { #define TX_TIMER_TICKS_PER_SECOND (100UL) #endif +/* Define the default maximum message size in a queue. The default value is TX_16_ULONG, but may + be customized in tx_user.h or as a compilation option. */ + +#ifndef TX_QUEUE_MESSAGE_MAX_SIZE +#define TX_QUEUE_MESSAGE_MAX_SIZE TX_16_ULONG +#endif /* Event numbers 0 through 4095 are reserved by Azure RTOS. Specific event assignments are: diff --git a/common/inc/tx_thread.h b/common/inc/tx_thread.h index 6500d40d..8729263d 100644 --- a/common/inc/tx_thread.h +++ b/common/inc/tx_thread.h @@ -239,7 +239,7 @@ _tx_thread_stack_error_handler((thread_ptr)); \ TX_DISABLE \ } \ - if (*(((ULONG *) (thread_ptr) -> tx_thread_stack_highest_ptr) - 1) != TX_STACK_FILL) \ + else if (*(((ULONG *) (thread_ptr) -> tx_thread_stack_highest_ptr) - 1) != TX_STACK_FILL) \ { \ TX_RESTORE \ _tx_thread_stack_analyze((thread_ptr)); \ diff --git a/common/inc/tx_user_sample.h b/common/inc/tx_user_sample.h index e7ecb56a..f8d809b5 100644 --- a/common/inc/tx_user_sample.h +++ b/common/inc/tx_user_sample.h @@ -117,6 +117,13 @@ #define TX_TIMER_THREAD_PRIORITY ???? */ +/* Define the maximum size of a message in the a queue. the Default value is TX_ULONG_16. + the new value must be a multiple of ULONG. */ + +/* +#define TX_QUEUE_MESSAGE_MAX_SIZE TX_ULONG_16 +*/ + /* Define the common timer tick reference for use by other middleware components. The default value is 10ms (i.e. 100 ticks, defined in tx_api.h), but may be replaced by a port-specific version in tx_port.h or here. diff --git a/common/src/txe_queue_create.c b/common/src/txe_queue_create.c index 68d3540a..2d91cc9f 100644 --- a/common/src/txe_queue_create.c +++ b/common/src/txe_queue_create.c @@ -178,8 +178,8 @@ TX_THREAD *thread_ptr; status = TX_SIZE_ERROR; } - /* Check for an invalid message size - greater than 16. */ - else if (message_size > TX_16_ULONG) + /* Check for an invalid message size - greater than TX_QUEUE_MESSAGE_MAX_SIZE 16 by default. */ + else if (message_size > TX_QUEUE_MESSAGE_MAX_SIZE) { /* Invalid message size specified. */ diff --git a/common_modules/module_manager/inc/txm_module_manager_dispatch.h b/common_modules/module_manager/inc/txm_module_manager_dispatch.h index 4f30ad26..0ac2210d 100644 --- a/common_modules/module_manager/inc/txm_module_manager_dispatch.h +++ b/common_modules/module_manager/inc/txm_module_manager_dispatch.h @@ -1,5 +1,6 @@ /*************************************************************************** - * Copyright (c) 2024 Microsoft Corporation + * Copyright (c) 2024 Microsoft Corporation + * Copyright (c) 2025 Eclipse ThreadX Contributors * * This program and the accompanying materials are made available under the * terms of the MIT License which is available at @@ -2389,6 +2390,11 @@ static ALIGN_TYPE _txm_module_manager_tx_thread_preemption_change_dispatch(TXM_M ALIGN_TYPE return_value; + if (param_1 < module_instance -> txm_module_instance_maximum_priority) + { + return(TX_THRESH_ERROR); + } + if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION) { if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_THREAD))) @@ -2418,6 +2424,11 @@ static ALIGN_TYPE _txm_module_manager_tx_thread_priority_change_dispatch(TXM_MOD ALIGN_TYPE return_value; + if (param_1 < module_instance -> txm_module_instance_maximum_priority) + { + return(TX_PRIORITY_ERROR); + } + if (module_instance -> txm_module_instance_property_flags & TXM_MODULE_MEMORY_PROTECTION) { if (!TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, param_0, sizeof(TX_THREAD))) diff --git a/common_modules/module_manager/inc/txm_module_manager_util.h b/common_modules/module_manager/inc/txm_module_manager_util.h index bf971049..2dc49f77 100644 --- a/common_modules/module_manager/inc/txm_module_manager_util.h +++ b/common_modules/module_manager/inc/txm_module_manager_util.h @@ -25,7 +25,7 @@ /* COMPONENT DEFINITION RELEASE */ /* */ /* txm_module_manager_util.h PORTABLE C */ -/* 6.3.0 */ +/* 6.4.3 */ /* AUTHOR */ /* */ /* Scott Larson, Microsoft Corporation */ @@ -46,6 +46,10 @@ /* 10-31-2023 Tiejun Zhou Modified comment(s) and */ /* improved object check, */ /* resulting in version 6.3.0 */ +/* xx-xx-2025 William E. Lamie Modified comment(s) and */ +/* improved object pointer use */ +/* and creation checking, */ +/* resulting in version 6.4.3 */ /* */ /**************************************************************************/ @@ -102,16 +106,11 @@ /* Kernel objects should be outside the module at the very least. */ #define TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_USE(module_instance, obj_ptr, obj_size) \ - (TXM_MODULE_MANAGER_ENSURE_OUTSIDE_MODULE(module_instance, obj_ptr, obj_size) || \ - (_txm_module_manager_created_object_check(module_instance, (void *)obj_ptr) == TX_FALSE) || \ - ((void *) (obj_ptr) == TX_NULL)) + (_txm_module_manager_param_check_object_for_use(module_instance, obj_ptr, obj_size)) /* When creating an object, the object must be inside the object pool. */ #define TXM_MODULE_MANAGER_PARAM_CHECK_OBJECT_FOR_CREATION(module_instance, obj_ptr, obj_size) \ - ((TXM_MODULE_MANAGER_ENSURE_INSIDE_OBJ_POOL(module_instance, obj_ptr, obj_size) && \ - (_txm_module_manager_object_size_check(obj_ptr, obj_size) == TX_SUCCESS)) || \ - (_txm_module_manager_created_object_check(module_instance, (void *)obj_ptr) == TX_FALSE) || \ - ((void *) (obj_ptr) == TX_NULL)) + (_txm_module_manager_param_check_object_for_creation(module_instance, obj_ptr, obj_size)) /* Strings we dereference can be in RW/RO/Shared areas. */ #define TXM_MODULE_MANAGER_PARAM_CHECK_DEREFERENCE_STRING(module_instance, string_ptr) \ @@ -136,6 +135,8 @@ UINT _txm_module_manager_object_memory_check(TXM_MODULE_INSTANCE *module_inst UINT _txm_module_manager_object_size_check(ALIGN_TYPE object_ptr, ULONG object_size); UINT _txm_module_manager_object_name_compare(CHAR *object_name1, UINT object_name1_length, CHAR *object_name2); UCHAR _txm_module_manager_created_object_check(TXM_MODULE_INSTANCE *module_instance, void *object_ptr); +UINT _txm_module_manager_param_check_object_for_creation(TXM_MODULE_INSTANCE *module_instance, ALIGN_TYPE object_ptr, ULONG object_size); +UINT _txm_module_manager_param_check_object_for_use(TXM_MODULE_INSTANCE *module_instance, ALIGN_TYPE object_ptr, ULONG object_size); UINT _txm_module_manager_util_code_allocation_size_and_alignment_get(TXM_MODULE_PREAMBLE *module_preamble, ULONG *code_alignment_dest, ULONG *code_allocation_size_dest); #endif diff --git a/common_modules/module_manager/src/txm_module_manager_util.c b/common_modules/module_manager/src/txm_module_manager_util.c index 23a989ac..0e5abe5e 100644 --- a/common_modules/module_manager/src/txm_module_manager_util.c +++ b/common_modules/module_manager/src/txm_module_manager_util.c @@ -104,7 +104,7 @@ UINT _txm_module_manager_object_memory_check(TXM_MODULE_INSTANCE *module_instan /* FUNCTION RELEASE */ /* */ /* _txm_module_manager_created_object_check PORTABLE C */ -/* 6.1 */ +/* 6.1x */ /* AUTHOR */ /* */ /* Scott Larson, Microsoft Corporation */ @@ -137,6 +137,10 @@ UINT _txm_module_manager_object_memory_check(TXM_MODULE_INSTANCE *module_instan /* DATE NAME DESCRIPTION */ /* */ /* 09-30-2020 Scott Larson Initial Version 6.1 */ +/* xx-xx-2025 William E. Lamie Modified comment(s), and */ +/* removed module local memory */ +/* check, resulting in */ +/* version 6.1x */ /* */ /**************************************************************************/ UCHAR _txm_module_manager_created_object_check(TXM_MODULE_INSTANCE *module_instance, VOID *object_ptr) @@ -144,15 +148,9 @@ UCHAR _txm_module_manager_created_object_check(TXM_MODULE_INSTANCE *module_insta TXM_MODULE_ALLOCATED_OBJECT *allocated_object_ptr; - /* Determine if the socket control block is inside the module. */ - if ( (((CHAR *) object_ptr) >= ((CHAR *) module_instance -> txm_module_instance_data_start)) && - (((CHAR *) object_ptr) < ((CHAR *) module_instance -> txm_module_instance_data_end))) - { - return TX_TRUE; - } - /* Determine if this object control block was allocated by this module instance. */ - else if (_txm_module_manager_object_pool_created) + /* Determine if the object pool has been created. */ + if (_txm_module_manager_object_pool_created) { /* Determine if the current object is from the pool of dynamically allocated objects. */ @@ -336,6 +334,158 @@ CHAR object_name_char; } +/**************************************************************************/ +/* */ +/* FUNCTION RELEASE */ +/* */ +/* _txm_module_manager_param_check_object_for_creation PORTABLE C */ +/* 6.4.3 */ +/* AUTHOR */ +/* */ +/* William E. Lamie, RTOSX */ +/* */ +/* DESCRIPTION */ +/* */ +/* This function checks to make sure the object pointer for one of the */ +/* creation APIs is valid. */ +/* */ +/* INPUT */ +/* */ +/* module_instance Requesting module instance pointer*/ +/* object_ptr Address of object memory area */ +/* ojbect_size Size of object memory area */ +/* */ +/* OUTPUT */ +/* */ +/* TX_TRUE Valid object pointer */ +/* TX_FALSE Invalid object pointer */ +/* */ +/* CALLS */ +/* */ +/* None */ +/* */ +/* CALLED BY */ +/* */ +/* txm_module_manager_* Module manager functions */ +/* */ +/* RELEASE HISTORY */ +/* */ +/* DATE NAME DESCRIPTION */ +/* */ +/* xx-xx-2025 William E. Lamie Initial Version 6.4.3 */ +/* */ +/**************************************************************************/ +UINT _txm_module_manager_param_check_object_for_creation(TXM_MODULE_INSTANCE *module_instance, ALIGN_TYPE object_ptr, ULONG object_size) +{ + + /* Determine if the object pointer is NULL. */ + if ((void *) object_ptr == TX_NULL) + { + + /* Object pointer is NULL, which is invalid. */ + return(TX_FALSE); + } + + /* Determine if the object pointer is inside the module object pool. */ + if (TXM_MODULE_MANAGER_ENSURE_INSIDE_OBJ_POOL(module_instance, object_ptr, object_size) == TX_FALSE) + { + + /* Object pointer is not inside the object pool, which is invalid. */ + return(TX_FALSE); + } + + /* Determine if the object size is correct. */ + if (_txm_module_manager_object_size_check(object_ptr, object_size) != TX_SUCCESS) + { + + /* Object size is invalid. */ + return(TX_FALSE); + } + + /* Determine if the ojbect has already been created. */ + if (_txm_module_manager_created_object_check(module_instance, (void *) object_ptr) == TX_FALSE) + { + + /* Object has already been created, which is invalid. */ + return(TX_FALSE); + } + + /* Everything is okay with the object, return TX_TRUE. */ + return(TX_TRUE); +} + + +/**************************************************************************/ +/* */ +/* FUNCTION RELEASE */ +/* */ +/* _txm_module_manager_param_check_object_for_use PORTABLE C */ +/* 6.4.3 */ +/* AUTHOR */ +/* */ +/* William E. Lamie, RTOSX */ +/* */ +/* DESCRIPTION */ +/* */ +/* This function checks to make sure the object pointer is valid. */ +/* */ +/* INPUT */ +/* */ +/* module_instance Requesting module instance pointer*/ +/* object_ptr Address of object memory area */ +/* ojbect_size Size of object memory area */ +/* */ +/* OUTPUT */ +/* */ +/* TX_TRUE Valid object pointer */ +/* TX_FALSE Invalid object pointer */ +/* */ +/* CALLS */ +/* */ +/* None */ +/* */ +/* CALLED BY */ +/* */ +/* txm_module_manager_* Module manager functions */ +/* */ +/* RELEASE HISTORY */ +/* */ +/* DATE NAME DESCRIPTION */ +/* */ +/* xx-xx-2025 William E. Lamie Initial Version 6.4.3 */ +/* */ +/**************************************************************************/ +UINT _txm_module_manager_param_check_object_for_use(TXM_MODULE_INSTANCE *module_instance, ALIGN_TYPE object_ptr, ULONG object_size) +{ + + /* Determine if the object pointer is NULL. */ + if ((void *) object_ptr == TX_NULL) + { + + /* Object pointer is NULL, which is invalid. */ + return(TX_FALSE); + } + + /* Determine if the object pointer is inside the module object pool. */ + if (TXM_MODULE_MANAGER_ENSURE_OUTSIDE_MODULE(module_instance, object_ptr, object_size) == TX_FALSE) + { + + /* Object pointer is not inside the object pool, which is invalid. */ + return(TX_FALSE); + } + + /* Define application-specific object memory check. */ +#ifdef TXM_MODULE_MANGER_APPLICATION_VALID_OBJECT_MEMORY_CHECK + + /* Bring in the application-spefic objeft memory check, defined by the user. */ + TXM_MODULE_MANGER_APPLICATION_VALID_OBJECT_MEMORY_CHECK +#endif /* TXM_MODULE_MANGER_APPLICATION_VALID_OBJECT_MEMORY_ENABLE */ + + /* Everything is okay with the object, return TX_TRUE. */ + return(TX_TRUE); +} + + /**************************************************************************/ /* */ /* FUNCTION RELEASE */ @@ -414,3 +564,5 @@ ULONG data_alignment_ignored; /* Return success. */ return(TX_SUCCESS); } + + diff --git a/common_smp/inc/tx_api.h b/common_smp/inc/tx_api.h index 9f7bb248..355fec8c 100644 --- a/common_smp/inc/tx_api.h +++ b/common_smp/inc/tx_api.h @@ -149,7 +149,10 @@ extern "C" { #define AZURE_RTOS_THREADX #define THREADX_MAJOR_VERSION 6 #define THREADX_MINOR_VERSION 4 -#define THREADX_PATCH_VERSION 2 +#define THREADX_PATCH_VERSION 3 +#define THREADX_BUILD_VERSION 202503 +#define THREADX_HOTFIX_VERSION '' + /* Define the following symbol for backward compatibility */ #define EL_PRODUCT_THREADX diff --git a/common_smp/src/txe_queue_create.c b/common_smp/src/txe_queue_create.c index 68d3540a..82a7b53c 100644 --- a/common_smp/src/txe_queue_create.c +++ b/common_smp/src/txe_queue_create.c @@ -178,8 +178,8 @@ TX_THREAD *thread_ptr; status = TX_SIZE_ERROR; } - /* Check for an invalid message size - greater than 16. */ - else if (message_size > TX_16_ULONG) + /* Check for an invalid message sizegreater than TX_QUEUE_MESSAGE_MAX_SIZE 16 by default. */ + else if (message_size > TX_QUEUE_MESSAGE_MAX_SIZE) { /* Invalid message size specified. */ diff --git a/ports/arm11/iar/src/tx_iar.c b/ports/arm11/iar/src/tx_iar.c index a37231c8..158738ea 100644 --- a/ports/arm11/iar/src/tx_iar.c +++ b/ports/arm11/iar/src/tx_iar.c @@ -439,7 +439,7 @@ void __iar_Initlocks(void); #ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT -#include +#include void * __aeabi_read_tp(); diff --git a/ports/arm9/iar/src/tx_iar.c b/ports/arm9/iar/src/tx_iar.c index a37231c8..158738ea 100644 --- a/ports/arm9/iar/src/tx_iar.c +++ b/ports/arm9/iar/src/tx_iar.c @@ -439,7 +439,7 @@ void __iar_Initlocks(void); #ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT -#include +#include void * __aeabi_read_tp(); diff --git a/ports/cortex_a15/iar/src/tx_iar.c b/ports/cortex_a15/iar/src/tx_iar.c index a37231c8..158738ea 100644 --- a/ports/cortex_a15/iar/src/tx_iar.c +++ b/ports/cortex_a15/iar/src/tx_iar.c @@ -439,7 +439,7 @@ void __iar_Initlocks(void); #ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT -#include +#include void * __aeabi_read_tp(); diff --git a/ports/cortex_a5/iar/src/tx_iar.c b/ports/cortex_a5/iar/src/tx_iar.c index a37231c8..158738ea 100644 --- a/ports/cortex_a5/iar/src/tx_iar.c +++ b/ports/cortex_a5/iar/src/tx_iar.c @@ -439,7 +439,7 @@ void __iar_Initlocks(void); #ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT -#include +#include void * __aeabi_read_tp(); diff --git a/ports/cortex_a7/iar/src/tx_iar.c b/ports/cortex_a7/iar/src/tx_iar.c index a37231c8..158738ea 100644 --- a/ports/cortex_a7/iar/src/tx_iar.c +++ b/ports/cortex_a7/iar/src/tx_iar.c @@ -439,7 +439,7 @@ void __iar_Initlocks(void); #ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT -#include +#include void * __aeabi_read_tp(); diff --git a/ports/cortex_a8/iar/src/tx_iar.c b/ports/cortex_a8/iar/src/tx_iar.c index a37231c8..158738ea 100644 --- a/ports/cortex_a8/iar/src/tx_iar.c +++ b/ports/cortex_a8/iar/src/tx_iar.c @@ -439,7 +439,7 @@ void __iar_Initlocks(void); #ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT -#include +#include void * __aeabi_read_tp(); diff --git a/ports/cortex_a9/iar/src/tx_iar.c b/ports/cortex_a9/iar/src/tx_iar.c index a37231c8..158738ea 100644 --- a/ports/cortex_a9/iar/src/tx_iar.c +++ b/ports/cortex_a9/iar/src/tx_iar.c @@ -439,7 +439,7 @@ void __iar_Initlocks(void); #ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT -#include +#include void * __aeabi_read_tp(); diff --git a/ports/cortex_m0/iar/src/tx_iar.c b/ports/cortex_m0/iar/src/tx_iar.c index c6092de3..ee47f10f 100644 --- a/ports/cortex_m0/iar/src/tx_iar.c +++ b/ports/cortex_m0/iar/src/tx_iar.c @@ -439,7 +439,7 @@ void __iar_Initlocks(void); #ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT -#include +#include void * __aeabi_read_tp(); diff --git a/ports/cortex_m23/iar/src/tx_iar.c b/ports/cortex_m23/iar/src/tx_iar.c index c6092de3..ee47f10f 100644 --- a/ports/cortex_m23/iar/src/tx_iar.c +++ b/ports/cortex_m23/iar/src/tx_iar.c @@ -439,7 +439,7 @@ void __iar_Initlocks(void); #ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT -#include +#include void * __aeabi_read_tp(); diff --git a/ports/cortex_m3/iar/src/tx_iar.c b/ports/cortex_m3/iar/src/tx_iar.c index c6092de3..ee47f10f 100644 --- a/ports/cortex_m3/iar/src/tx_iar.c +++ b/ports/cortex_m3/iar/src/tx_iar.c @@ -439,7 +439,7 @@ void __iar_Initlocks(void); #ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT -#include +#include void * __aeabi_read_tp(); diff --git a/ports/cortex_m33/iar/src/tx_iar.c b/ports/cortex_m33/iar/src/tx_iar.c index c6092de3..ee47f10f 100644 --- a/ports/cortex_m33/iar/src/tx_iar.c +++ b/ports/cortex_m33/iar/src/tx_iar.c @@ -439,7 +439,7 @@ void __iar_Initlocks(void); #ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT -#include +#include void * __aeabi_read_tp(); diff --git a/ports/cortex_m4/iar/src/tx_iar.c b/ports/cortex_m4/iar/src/tx_iar.c index c6092de3..ee47f10f 100644 --- a/ports/cortex_m4/iar/src/tx_iar.c +++ b/ports/cortex_m4/iar/src/tx_iar.c @@ -439,7 +439,7 @@ void __iar_Initlocks(void); #ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT -#include +#include void * __aeabi_read_tp(); diff --git a/ports/cortex_m55/iar/src/tx_iar.c b/ports/cortex_m55/iar/src/tx_iar.c index c6092de3..ee47f10f 100644 --- a/ports/cortex_m55/iar/src/tx_iar.c +++ b/ports/cortex_m55/iar/src/tx_iar.c @@ -439,7 +439,7 @@ void __iar_Initlocks(void); #ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT -#include +#include void * __aeabi_read_tp(); diff --git a/ports/cortex_m7/iar/src/tx_iar.c b/ports/cortex_m7/iar/src/tx_iar.c index c6092de3..ee47f10f 100644 --- a/ports/cortex_m7/iar/src/tx_iar.c +++ b/ports/cortex_m7/iar/src/tx_iar.c @@ -439,7 +439,7 @@ void __iar_Initlocks(void); #ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT -#include +#include void * __aeabi_read_tp(); diff --git a/ports/cortex_m85/iar/src/tx_iar.c b/ports/cortex_m85/iar/src/tx_iar.c index c6092de3..ee47f10f 100644 --- a/ports/cortex_m85/iar/src/tx_iar.c +++ b/ports/cortex_m85/iar/src/tx_iar.c @@ -439,7 +439,7 @@ void __iar_Initlocks(void); #ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT -#include +#include void * __aeabi_read_tp(); diff --git a/ports/cortex_r4/iar/src/tx_iar.c b/ports/cortex_r4/iar/src/tx_iar.c index a37231c8..158738ea 100644 --- a/ports/cortex_r4/iar/src/tx_iar.c +++ b/ports/cortex_r4/iar/src/tx_iar.c @@ -439,7 +439,7 @@ void __iar_Initlocks(void); #ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT -#include +#include void * __aeabi_read_tp(); diff --git a/ports/cortex_r5/iar/src/tx_iar.c b/ports/cortex_r5/iar/src/tx_iar.c index a37231c8..158738ea 100644 --- a/ports/cortex_r5/iar/src/tx_iar.c +++ b/ports/cortex_r5/iar/src/tx_iar.c @@ -439,7 +439,7 @@ void __iar_Initlocks(void); #ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT -#include +#include void * __aeabi_read_tp(); diff --git a/ports/linux/gnu/readme_threadx.txt b/ports/linux/gnu/readme_threadx.txt index e3ac5cf6..997607c7 100644 --- a/ports/linux/gnu/readme_threadx.txt +++ b/ports/linux/gnu/readme_threadx.txt @@ -33,6 +33,26 @@ You should observe the compilation of sample_threadx.c (which is the demonstrati application) and linking with tx.a. The resulting file DEMO is a binary file that can be executed. +2.1 Includes + +Notice that the demonstration Makefile includes defines for _GNU_SOURCE +and TX_LINUX_MULTI_CORE. These are necessary to enable GNU/Linux-specific +compatibility for ThreadX using the Linux kernel in multi-core devices, +including the option to control processor affinity. See the GNU documentation +on CPU affinity and Feature Test Macros for more information. + +TX_LINUX_MULTI_CORE is necessary to enable code that constrains ThreadX to +one core, to prevent unintended behavior when threads execute simultaneously +across multiple cores. The enabled code configures CPU affinity, requiring +the use of macros such as CPU_SET and functions such as sched_setaffinity. +Access to these macros and functions (and the underlying types for the latter) +are enabled via the definition of _GNU_SOURCE. + +When building your own application, the _GNU_SOURCE and TX_LINUX_MULTI_CORE +symbols can be defined by being passed to the compiler (e.g. -D_GNU_SOURCE) or +in the optional user-defined ThreadX user define file tx_user.h. In the latter +case, ensure that the symbol TX_INCLUDE_USER_DEFINE_FILE is defined, to instruct +the tx_port.h header to include tx_user.h. 3. System Initialization diff --git a/ports_arch/ARMv7-M/threadx/iar/src/tx_iar.c b/ports_arch/ARMv7-M/threadx/iar/src/tx_iar.c index c6092de3..ee47f10f 100644 --- a/ports_arch/ARMv7-M/threadx/iar/src/tx_iar.c +++ b/ports_arch/ARMv7-M/threadx/iar/src/tx_iar.c @@ -439,7 +439,7 @@ void __iar_Initlocks(void); #ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT -#include +#include void * __aeabi_read_tp(); diff --git a/ports_arch/ARMv7-M/threadx_modules/iar/module_manager/src/tx_iar.c b/ports_arch/ARMv7-M/threadx_modules/iar/module_manager/src/tx_iar.c index c6092de3..ee47f10f 100644 --- a/ports_arch/ARMv7-M/threadx_modules/iar/module_manager/src/tx_iar.c +++ b/ports_arch/ARMv7-M/threadx_modules/iar/module_manager/src/tx_iar.c @@ -439,7 +439,7 @@ void __iar_Initlocks(void); #ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT -#include +#include void * __aeabi_read_tp(); diff --git a/ports_arch/ARMv8-M/threadx/iar/src/tx_iar.c b/ports_arch/ARMv8-M/threadx/iar/src/tx_iar.c index c6092de3..ee47f10f 100644 --- a/ports_arch/ARMv8-M/threadx/iar/src/tx_iar.c +++ b/ports_arch/ARMv8-M/threadx/iar/src/tx_iar.c @@ -439,7 +439,7 @@ void __iar_Initlocks(void); #ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT -#include +#include void * __aeabi_read_tp(); diff --git a/ports_module/cortex_a7/iar/module_manager/src/tx_iar.c b/ports_module/cortex_a7/iar/module_manager/src/tx_iar.c index a37231c8..158738ea 100644 --- a/ports_module/cortex_a7/iar/module_manager/src/tx_iar.c +++ b/ports_module/cortex_a7/iar/module_manager/src/tx_iar.c @@ -439,7 +439,7 @@ void __iar_Initlocks(void); #ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT -#include +#include void * __aeabi_read_tp(); diff --git a/ports_module/cortex_m0+/iar/module_manager/src/tx_iar.c b/ports_module/cortex_m0+/iar/module_manager/src/tx_iar.c index c6092de3..ee47f10f 100644 --- a/ports_module/cortex_m0+/iar/module_manager/src/tx_iar.c +++ b/ports_module/cortex_m0+/iar/module_manager/src/tx_iar.c @@ -439,7 +439,7 @@ void __iar_Initlocks(void); #ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT -#include +#include void * __aeabi_read_tp(); diff --git a/ports_module/cortex_m3/iar/module_manager/src/tx_iar.c b/ports_module/cortex_m3/iar/module_manager/src/tx_iar.c index c6092de3..ee47f10f 100644 --- a/ports_module/cortex_m3/iar/module_manager/src/tx_iar.c +++ b/ports_module/cortex_m3/iar/module_manager/src/tx_iar.c @@ -439,7 +439,7 @@ void __iar_Initlocks(void); #ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT -#include +#include void * __aeabi_read_tp(); diff --git a/ports_module/cortex_m4/iar/module_manager/src/tx_iar.c b/ports_module/cortex_m4/iar/module_manager/src/tx_iar.c index c6092de3..ee47f10f 100644 --- a/ports_module/cortex_m4/iar/module_manager/src/tx_iar.c +++ b/ports_module/cortex_m4/iar/module_manager/src/tx_iar.c @@ -439,7 +439,7 @@ void __iar_Initlocks(void); #ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT -#include +#include void * __aeabi_read_tp(); diff --git a/ports_module/cortex_m7/iar/module_manager/src/tx_iar.c b/ports_module/cortex_m7/iar/module_manager/src/tx_iar.c index c6092de3..ee47f10f 100644 --- a/ports_module/cortex_m7/iar/module_manager/src/tx_iar.c +++ b/ports_module/cortex_m7/iar/module_manager/src/tx_iar.c @@ -439,7 +439,7 @@ void __iar_Initlocks(void); #ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT -#include +#include void * __aeabi_read_tp(); diff --git a/ports_module/cortex_r4/iar/module_manager/src/tx_iar.c b/ports_module/cortex_r4/iar/module_manager/src/tx_iar.c index a37231c8..158738ea 100644 --- a/ports_module/cortex_r4/iar/module_manager/src/tx_iar.c +++ b/ports_module/cortex_r4/iar/module_manager/src/tx_iar.c @@ -439,7 +439,7 @@ void __iar_Initlocks(void); #ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT -#include +#include void * __aeabi_read_tp(); diff --git a/ports_smp/linux/gnu/readme_threadx.txt b/ports_smp/linux/gnu/readme_threadx.txt index 6f41a356..19d7c5b6 100644 --- a/ports_smp/linux/gnu/readme_threadx.txt +++ b/ports_smp/linux/gnu/readme_threadx.txt @@ -33,6 +33,26 @@ You should observe the compilation of sample_threadx.c (which is the demonstrati application) and linking with tx.a. The resulting file DEMO is a binary file that can be executed. +2.1 Includes + +Notice that the demonstration Makefile includes defines for _GNU_SOURCE +and TX_LINUX_MULTI_CORE. These are necessary to enable GNU/Linux-specific +compatibility for ThreadX using SMP with the Linux kernel in multi-core devices, +including the option to control processor affinity. See the GNU documentation +on CPU affinity and Feature Test Macros for more information. + +TX_LINUX_MULTI_CORE is necessary to enable code that constrains ThreadX to +one core, to prevent unintended behavior when threads execute simultaneously +across multiple cores. The enabled code configures CPU affinity, requiring +the use of macros such as CPU_SET and functions such as sched_setaffinity. +Access to these macros and functions (and the underlying types for the latter) +are enabled via the definition of _GNU_SOURCE. + +When building your own application, the _GNU_SOURCE and TX_LINUX_MULTI_CORE +symbols can be defined by being passed to the compiler (e.g. -D_GNU_SOURCE) or +in the optional user-defined ThreadX user define file tx_user.h. In the latter +case, ensure that the symbol TX_INCLUDE_USER_DEFINE_FILE is defined, to instruct +the tx_port.h header to include tx_user.h. 3. System Initialization diff --git a/test/smp/cmake/CMakeLists.txt b/test/smp/cmake/CMakeLists.txt index 04d15ef5..f57d253c 100644 --- a/test/smp/cmake/CMakeLists.txt +++ b/test/smp/cmake/CMakeLists.txt @@ -23,11 +23,11 @@ endif() message(STATUS "Build type: ${CMAKE_BUILD_TYPE}") message(STATUS "Using toolchain file: ${CMAKE_TOOLCHAIN_FILE}.") -set(default_build_coverage "") -set(disable_notify_callbacks_build -DTX_DISABLE_NOTIFY_CALLBACKS) -set(stack_checking_build -DTX_ENABLE_STACK_CHECKING) -set(stack_checking_rand_fill_build -DTX_ENABLE_STACK_CHECKING -DTX_ENABLE_RANDOM_NUMBER_STACK_FILLING) -set(trace_build -DTX_ENABLE_EVENT_TRACE) +set(default_build_coverage -DTX_QUEUE_MESSAGE_MAX_SIZE=32) +set(disable_notify_callbacks_build -DTX_QUEUE_MESSAGE_MAX_SIZE=32 -DTX_DISABLE_NOTIFY_CALLBACKS) +set(stack_checking_build -DTX_QUEUE_MESSAGE_MAX_SIZE=32 -DTX_ENABLE_STACK_CHECKING) +set(stack_checking_rand_fill_build -DTX_QUEUE_MESSAGE_MAX_SIZE=32 -DTX_ENABLE_STACK_CHECKING -DTX_ENABLE_RANDOM_NUMBER_STACK_FILLING) +set(trace_build -DTX_QUEUE_MESSAGE_MAX_SIZE=32 -DTX_ENABLE_EVENT_TRACE) add_compile_options( -m32 diff --git a/test/smp/cmake/regression/CMakeLists.txt b/test/smp/cmake/regression/CMakeLists.txt index 0b9384c2..c2362620 100644 --- a/test/smp/cmake/regression/CMakeLists.txt +++ b/test/smp/cmake/regression/CMakeLists.txt @@ -47,6 +47,7 @@ set(regression_test_cases ${SOURCE_DIR}/threadx_queue_basic_one_word_test.c ${SOURCE_DIR}/threadx_queue_basic_sixteen_word_test.c ${SOURCE_DIR}/threadx_queue_basic_two_word_test.c + ${SOURCE_DIR}/threadx_queue_basic_max_message_size_test.c ${SOURCE_DIR}/threadx_queue_empty_suspension_test.c ${SOURCE_DIR}/threadx_queue_flush_no_suspension_test.c ${SOURCE_DIR}/threadx_queue_flush_test.c diff --git a/test/smp/regression/testcontrol.c b/test/smp/regression/testcontrol.c index 8e3d872e..e63930d2 100644 --- a/test/smp/regression/testcontrol.c +++ b/test/smp/regression/testcontrol.c @@ -185,6 +185,7 @@ void threadx_queue_basic_two_word_application_define(void *); void threadx_queue_basic_four_word_application_define(void *); void threadx_queue_basic_eight_word_application_define(void *); void threadx_queue_basic_sixteen_word_application_define(void *); +void threadx_queue_basic_max_message_size_application_define(void *); void threadx_queue_empty_suspension_application_define(void *); void threadx_queue_full_suspension_application_define(void *); void threadx_queue_suspension_timeout_application_define(void *); @@ -328,6 +329,7 @@ TEST_ENTRY test_control_tests[] = threadx_queue_basic_four_word_application_define, threadx_queue_basic_eight_word_application_define, threadx_queue_basic_sixteen_word_application_define, + threadx_queue_basic_max_message_size_application_define, threadx_queue_empty_suspension_application_define, threadx_queue_full_suspension_application_define, threadx_queue_suspension_timeout_application_define, diff --git a/test/smp/regression/threadx_queue_basic_max_message_size_test.c b/test/smp/regression/threadx_queue_basic_max_message_size_test.c new file mode 100644 index 00000000..30afa190 --- /dev/null +++ b/test/smp/regression/threadx_queue_basic_max_message_size_test.c @@ -0,0 +1,422 @@ +/* This test is designed to test immediate response queue services including create + and delete. This test is for queue sizes of 16 ULONG. Two queues are used one with + a capacity of 1 message and another with a capacity of 3 messages. */ + +#include +#include "tx_api.h" + +static unsigned long thread_0_counter = 0; +static TX_THREAD thread_0; + +static TX_QUEUE queue_0; +static TX_QUEUE queue_1; + + +/* Define thread prototypes. */ + +static void thread_0_entry(ULONG thread_input); + + +/* Prototype for test control return. */ +void test_control_return(UINT status); + + +/* Define what the initial system looks like. */ + +#ifdef CTEST +void test_application_define(void *first_unused_memory) +#else +void threadx_queue_basic_max_message_size_application_define(void *first_unused_memory) +#endif +{ + +UINT status; +CHAR *pointer; + + + /* Put first available memory address into a character pointer. */ + pointer = (CHAR *) first_unused_memory; + + /* Put system definition stuff in here, e.g. thread creates and other assorted + create information. */ + + status = tx_thread_create(&thread_0, "thread 0", thread_0_entry, 1, + pointer, TEST_STACK_SIZE_PRINTF, + 16, 16, 100, TX_AUTO_START); + pointer = pointer + TEST_STACK_SIZE_PRINTF; + + + /* Check for status. */ + if (status != TX_SUCCESS) + { + + printf("Running Queue Max Message Size Test..................................... ERROR #1\n"); + test_control_return(1); + } + + /* Create the queues. */ + status = tx_queue_create(&queue_0, "queue 0", TX_QUEUE_MESSAGE_MAX_SIZE, pointer, TX_QUEUE_MESSAGE_MAX_SIZE*sizeof(ULONG)); + pointer = pointer + (TX_QUEUE_MESSAGE_MAX_SIZE*sizeof(ULONG)); + + /* Check for status. */ + if (status != TX_SUCCESS) + { + + printf("Running Queue Max Message Size Test..................................... ERROR #2\n"); + test_control_return(1); + } + + status = tx_queue_create(&queue_1, "queue 1", TX_QUEUE_MESSAGE_MAX_SIZE, pointer, TX_QUEUE_MESSAGE_MAX_SIZE*3*sizeof(ULONG)); + pointer = pointer + TX_QUEUE_MESSAGE_MAX_SIZE*3*sizeof(ULONG); + + /* Check for status. */ + if (status != TX_SUCCESS) + { + + printf("Running Queue Max Message Size Test..................................... ERROR #3\n"); + test_control_return(1); + } +} + + + + +/* Define the test threads. */ + +static void thread_0_entry(ULONG thread_input) +{ + +UINT status; +ULONG source_message[TX_QUEUE_MESSAGE_MAX_SIZE]; +ULONG dest_message[TX_QUEUE_MESSAGE_MAX_SIZE]; +ULONG expected_message[TX_QUEUE_MESSAGE_MAX_SIZE]; + + + /* Inform user. */ + + source_message[0] = 0x01234567; + source_message[TX_QUEUE_MESSAGE_MAX_SIZE -1] = 0x89ABCDEF; + + /* Increment thread 0 counter. */ + thread_0_counter++; + + /* Place something on queue 0. */ + status = tx_queue_send(&queue_0, source_message, TX_NO_WAIT); + + if (status != TX_SUCCESS) + { + + /* Queue error. */ + printf("ERROR #4\n"); + test_control_return(1); + } + + /* Attempt to place something on a full queue. */ + status = tx_queue_send(&queue_0, source_message, TX_NO_WAIT); + + /* Should be an error. */ + if (status != TX_QUEUE_FULL) + { + + /* Queue error. */ + printf("ERROR #5\n"); + test_control_return(1); + } + + /* Attempt to receive something from queue 0. */ + status = tx_queue_receive(&queue_0, dest_message, TX_NO_WAIT); + + /* Should be successful and dest_message should equal source. */ + if ((status != TX_SUCCESS) || (source_message[0] != dest_message[0]) || + (source_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1] != dest_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1])) + { + + /* Queue error. */ + printf("ERROR #6\n"); + test_control_return(1); + } + + /* Attempt to receive something from an empty queue. */ + status = tx_queue_receive(&queue_0, dest_message, TX_NO_WAIT); + + /* Should be an error. */ + if (status != TX_QUEUE_EMPTY) + { + + /* Queue error. */ + printf("ERROR #7\n"); + test_control_return(1); + } + + /* Make sure we can do the same thing again! */ + source_message[0]++; + source_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1]++; + + /* Place something on queue 0. */ + status = tx_queue_send(&queue_0, source_message, TX_NO_WAIT); + + if (status != TX_SUCCESS) + { + + /* Queue error. */ + printf("ERROR #8\n"); + test_control_return(1); + } + + /* Attempt to place something on a full queue. */ + status = tx_queue_send(&queue_0, source_message, TX_NO_WAIT); + + /* Should be an error. */ + if (status != TX_QUEUE_FULL) + { + + /* Queue error. */ + printf("ERROR #9\n"); + test_control_return(1); + } + + /* Attempt to receive something from queue 0. */ + status = tx_queue_receive(&queue_0, dest_message, TX_NO_WAIT); + + /* Should be successful and dest_message should equal source. */ + if ((status != TX_SUCCESS) || (source_message[0] != dest_message[0]) || + (source_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1] != dest_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1])) + { + + /* Queue error. */ + printf("ERROR #10\n"); + test_control_return(1); + } + + /* Attempt to receive something from an empty queue. */ + status = tx_queue_receive(&queue_0, dest_message, TX_NO_WAIT); + + /* Should be an error. */ + if (status != TX_QUEUE_EMPTY) + { + + /* Queue error. */ + printf("ERROR #11\n"); + test_control_return(1); + } + + /* Now we need to do the same thing with the queue with three entries. */ + + source_message[0]++; + source_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1]++; + expected_message[0] = source_message[0]; + expected_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1] = source_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1]; + + /* Place something on queue 1. */ + status = tx_queue_send(&queue_1, source_message, TX_NO_WAIT); + source_message[0]++; + source_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1]++; + status += tx_queue_send(&queue_1, source_message, TX_NO_WAIT); + source_message[0]++; + source_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1]++; + status += tx_queue_send(&queue_1, source_message, TX_NO_WAIT); + source_message[0]++; + source_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1]++; + + + if (status != TX_SUCCESS) + { + + /* Queue error. */ + printf("ERROR #12\n"); + test_control_return(1); + } + + /* Attempt to place something on a full queue. */ + status = tx_queue_send(&queue_1, source_message, TX_NO_WAIT); + + /* Should be an error. */ + if (status != TX_QUEUE_FULL) + { + + /* Queue error. */ + printf("ERROR #13\n"); + test_control_return(1); + } + + /* Attempt to receive something from queue 1. */ + status = tx_queue_receive(&queue_1, dest_message, TX_NO_WAIT); + + /* Should be successful and dest_message should equal source. */ + if ((status != TX_SUCCESS) || (expected_message[0] != dest_message[0]) || + (expected_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1] != dest_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1])) + { + + /* Queue error. */ + printf("ERROR #14\n"); + test_control_return(1); + } + + expected_message[0]++; + expected_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1]++; + + /* Attempt to receive something from queue 1. */ + status = tx_queue_receive(&queue_1, dest_message, TX_NO_WAIT); + + /* Should be successful and dest_message should equal source. */ + if ((status != TX_SUCCESS) || (expected_message[0] != dest_message[0]) || + (expected_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1] != dest_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1])) + { + + /* Queue error. */ + printf("ERROR #15\n"); + test_control_return(1); + } + + expected_message[0]++; + expected_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1]++; + + /* Attempt to receive something from queue 1. */ + status = tx_queue_receive(&queue_1, dest_message, TX_NO_WAIT); + + /* Should be successful and dest_message should equal source. */ + if ((status != TX_SUCCESS) || (expected_message[0] != dest_message[0]) || + (expected_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1] != dest_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1])) + { + + /* Queue error. */ + printf("ERROR #16\n"); + test_control_return(1); + } + + expected_message[0]++; + expected_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1]++; + + /* Attempt to receive something from an empty queue. */ + status = tx_queue_receive(&queue_1, dest_message, TX_NO_WAIT); + + /* Should be an error. */ + if (status != TX_QUEUE_EMPTY) + { + + /* Queue error. */ + printf("ERROR #17\n"); + test_control_return(1); + } + + /* Make sure we can do the same thing again! */ + + /* Place something on queue 1. */ + status = tx_queue_send(&queue_1, source_message, TX_NO_WAIT); + source_message[0]++; + source_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1]++; + status += tx_queue_send(&queue_1, source_message, TX_NO_WAIT); + source_message[0]++; + source_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1]++; + status += tx_queue_send(&queue_1, source_message, TX_NO_WAIT); + source_message[0]++; + source_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1]++; + + if (status != TX_SUCCESS) + { + + /* Queue error. */ + printf("ERROR #18\n"); + test_control_return(1); + } + + /* Attempt to place something on a full queue. */ + status = tx_queue_send(&queue_1, source_message, TX_NO_WAIT); + + /* Should be an error. */ + if (status != TX_QUEUE_FULL) + { + + /* Queue error. */ + printf("ERROR #19\n"); + test_control_return(1); + } + + /* Attempt to receive something from queue 1. */ + status = tx_queue_receive(&queue_1, dest_message, TX_NO_WAIT); + + /* Should be successful and dest_message should equal source. */ + if ((status != TX_SUCCESS) || (expected_message[0] != dest_message[0]) || + (expected_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1] != dest_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1])) + { + + /* Queue error. */ + printf("ERROR #20\n"); + test_control_return(1); + } + + expected_message[0]++; + expected_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1]++; + + /* Attempt to receive something from queue 1. */ + status = tx_queue_receive(&queue_1, dest_message, TX_NO_WAIT); + + /* Should be successful and dest_message should equal source. */ + if ((status != TX_SUCCESS) || (expected_message[0] != dest_message[0]) || + (expected_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1] != dest_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1])) + { + + /* Queue error. */ + printf("ERROR #21\n"); + test_control_return(1); + } + + expected_message[0]++; + expected_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1]++; + + /* Attempt to receive something from queue 1. */ + status = tx_queue_receive(&queue_1, dest_message, TX_NO_WAIT); + + /* Should be successful and dest_message should equal source. */ + if ((status != TX_SUCCESS) || (expected_message[0] != dest_message[0]) || + (expected_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1] != dest_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1])) + { + + /* Queue error. */ + printf("ERROR #22\n"); + test_control_return(1); + } + + expected_message[0]++; + expected_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1]++; + + /* Attempt to receive something from an empty queue. */ + status = tx_queue_receive(&queue_1, dest_message, TX_NO_WAIT); + + /* Should be an error. */ + if (status != TX_QUEUE_EMPTY) + { + + /* Queue error. */ + printf("ERROR #23\n"); + test_control_return(1); + } + + /* Delete the queues. */ + status = tx_queue_delete(&queue_1); + if (status != TX_SUCCESS) + { + + /* Queue error. */ + printf("ERROR #24\n"); + test_control_return(1); + } + + status = tx_queue_delete(&queue_0); + if (status != TX_SUCCESS) + { + + /* Queue error. */ + printf("ERROR #25\n"); + test_control_return(1); + } + else + { + + /* Successful test. */ + printf("SUCCESS!\n"); + test_control_return(0); + } +} + + diff --git a/test/tx/cmake/CMakeLists.txt b/test/tx/cmake/CMakeLists.txt index b440d2cf..2dd16ade 100644 --- a/test/tx/cmake/CMakeLists.txt +++ b/test/tx/cmake/CMakeLists.txt @@ -22,11 +22,11 @@ endif() message(STATUS "Build type: ${CMAKE_BUILD_TYPE}") message(STATUS "Using toolchain file: ${CMAKE_TOOLCHAIN_FILE}.") -set(default_build_coverage "") -set(disable_notify_callbacks_build -DTX_DISABLE_NOTIFY_CALLBACKS) -set(stack_checking_build -DTX_ENABLE_STACK_CHECKING) -set(stack_checking_rand_fill_build -DTX_ENABLE_STACK_CHECKING -DTX_ENABLE_RANDOM_NUMBER_STACK_FILLING) -set(trace_build -DTX_ENABLE_EVENT_TRACE) +set(default_build_coverage -DTX_QUEUE_MESSAGE_MAX_SIZE=32) +set(disable_notify_callbacks_build -DTX_QUEUE_MESSAGE_MAX_SIZE=32 -DTX_DISABLE_NOTIFY_CALLBACKS) +set(stack_checking_build -DTX_QUEUE_MESSAGE_MAX_SIZE=32 -DTX_ENABLE_STACK_CHECKING) +set(stack_checking_rand_fill_build -DTX_QUEUE_MESSAGE_MAX_SIZE=32 -DTX_ENABLE_STACK_CHECKING -DTX_ENABLE_RANDOM_NUMBER_STACK_FILLING) +set(trace_build -DTX_QUEUE_MESSAGE_MAX_SIZE=32 -DTX_ENABLE_EVENT_TRACE) add_compile_options( -m32 diff --git a/test/tx/cmake/regression/CMakeLists.txt b/test/tx/cmake/regression/CMakeLists.txt index ec67dd57..d60743fa 100644 --- a/test/tx/cmake/regression/CMakeLists.txt +++ b/test/tx/cmake/regression/CMakeLists.txt @@ -47,6 +47,7 @@ set(regression_test_cases ${SOURCE_DIR}/threadx_queue_basic_one_word_test.c ${SOURCE_DIR}/threadx_queue_basic_sixteen_word_test.c ${SOURCE_DIR}/threadx_queue_basic_two_word_test.c + ${SOURCE_DIR}/threadx_queue_basic_max_message_size_test.c ${SOURCE_DIR}/threadx_queue_empty_suspension_test.c ${SOURCE_DIR}/threadx_queue_flush_no_suspension_test.c ${SOURCE_DIR}/threadx_queue_flush_test.c diff --git a/test/tx/regression/testcontrol.c b/test/tx/regression/testcontrol.c index a53c50a5..8203ece5 100644 --- a/test/tx/regression/testcontrol.c +++ b/test/tx/regression/testcontrol.c @@ -171,6 +171,7 @@ void threadx_queue_basic_two_word_application_define(void *); void threadx_queue_basic_four_word_application_define(void *); void threadx_queue_basic_eight_word_application_define(void *); void threadx_queue_basic_sixteen_word_application_define(void *); +void threadx_queue_basic_max_message_size_application_define(void *); void threadx_queue_empty_suspension_application_define(void *); void threadx_queue_full_suspension_application_define(void *); void threadx_queue_suspension_timeout_application_define(void *); @@ -287,6 +288,7 @@ TEST_ENTRY test_control_tests[] = threadx_queue_basic_four_word_application_define, threadx_queue_basic_eight_word_application_define, threadx_queue_basic_sixteen_word_application_define, + threadx_queue_basic_max_message_size_application_define, threadx_queue_empty_suspension_application_define, threadx_queue_full_suspension_application_define, threadx_queue_suspension_timeout_application_define, @@ -1193,6 +1195,7 @@ void test_control_return(UINT status) UINT old_posture = TX_INT_ENABLE; + printf("********** Running Queue Max Message Size Test (%u) ************** \n ", TX_QUEUE_MESSAGE_MAX_SIZE); /* Save the status in a global. */ test_control_return_status = status; diff --git a/test/tx/regression/threadx_queue_basic_max_message_size_test.c b/test/tx/regression/threadx_queue_basic_max_message_size_test.c new file mode 100644 index 00000000..30afa190 --- /dev/null +++ b/test/tx/regression/threadx_queue_basic_max_message_size_test.c @@ -0,0 +1,422 @@ +/* This test is designed to test immediate response queue services including create + and delete. This test is for queue sizes of 16 ULONG. Two queues are used one with + a capacity of 1 message and another with a capacity of 3 messages. */ + +#include +#include "tx_api.h" + +static unsigned long thread_0_counter = 0; +static TX_THREAD thread_0; + +static TX_QUEUE queue_0; +static TX_QUEUE queue_1; + + +/* Define thread prototypes. */ + +static void thread_0_entry(ULONG thread_input); + + +/* Prototype for test control return. */ +void test_control_return(UINT status); + + +/* Define what the initial system looks like. */ + +#ifdef CTEST +void test_application_define(void *first_unused_memory) +#else +void threadx_queue_basic_max_message_size_application_define(void *first_unused_memory) +#endif +{ + +UINT status; +CHAR *pointer; + + + /* Put first available memory address into a character pointer. */ + pointer = (CHAR *) first_unused_memory; + + /* Put system definition stuff in here, e.g. thread creates and other assorted + create information. */ + + status = tx_thread_create(&thread_0, "thread 0", thread_0_entry, 1, + pointer, TEST_STACK_SIZE_PRINTF, + 16, 16, 100, TX_AUTO_START); + pointer = pointer + TEST_STACK_SIZE_PRINTF; + + + /* Check for status. */ + if (status != TX_SUCCESS) + { + + printf("Running Queue Max Message Size Test..................................... ERROR #1\n"); + test_control_return(1); + } + + /* Create the queues. */ + status = tx_queue_create(&queue_0, "queue 0", TX_QUEUE_MESSAGE_MAX_SIZE, pointer, TX_QUEUE_MESSAGE_MAX_SIZE*sizeof(ULONG)); + pointer = pointer + (TX_QUEUE_MESSAGE_MAX_SIZE*sizeof(ULONG)); + + /* Check for status. */ + if (status != TX_SUCCESS) + { + + printf("Running Queue Max Message Size Test..................................... ERROR #2\n"); + test_control_return(1); + } + + status = tx_queue_create(&queue_1, "queue 1", TX_QUEUE_MESSAGE_MAX_SIZE, pointer, TX_QUEUE_MESSAGE_MAX_SIZE*3*sizeof(ULONG)); + pointer = pointer + TX_QUEUE_MESSAGE_MAX_SIZE*3*sizeof(ULONG); + + /* Check for status. */ + if (status != TX_SUCCESS) + { + + printf("Running Queue Max Message Size Test..................................... ERROR #3\n"); + test_control_return(1); + } +} + + + + +/* Define the test threads. */ + +static void thread_0_entry(ULONG thread_input) +{ + +UINT status; +ULONG source_message[TX_QUEUE_MESSAGE_MAX_SIZE]; +ULONG dest_message[TX_QUEUE_MESSAGE_MAX_SIZE]; +ULONG expected_message[TX_QUEUE_MESSAGE_MAX_SIZE]; + + + /* Inform user. */ + + source_message[0] = 0x01234567; + source_message[TX_QUEUE_MESSAGE_MAX_SIZE -1] = 0x89ABCDEF; + + /* Increment thread 0 counter. */ + thread_0_counter++; + + /* Place something on queue 0. */ + status = tx_queue_send(&queue_0, source_message, TX_NO_WAIT); + + if (status != TX_SUCCESS) + { + + /* Queue error. */ + printf("ERROR #4\n"); + test_control_return(1); + } + + /* Attempt to place something on a full queue. */ + status = tx_queue_send(&queue_0, source_message, TX_NO_WAIT); + + /* Should be an error. */ + if (status != TX_QUEUE_FULL) + { + + /* Queue error. */ + printf("ERROR #5\n"); + test_control_return(1); + } + + /* Attempt to receive something from queue 0. */ + status = tx_queue_receive(&queue_0, dest_message, TX_NO_WAIT); + + /* Should be successful and dest_message should equal source. */ + if ((status != TX_SUCCESS) || (source_message[0] != dest_message[0]) || + (source_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1] != dest_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1])) + { + + /* Queue error. */ + printf("ERROR #6\n"); + test_control_return(1); + } + + /* Attempt to receive something from an empty queue. */ + status = tx_queue_receive(&queue_0, dest_message, TX_NO_WAIT); + + /* Should be an error. */ + if (status != TX_QUEUE_EMPTY) + { + + /* Queue error. */ + printf("ERROR #7\n"); + test_control_return(1); + } + + /* Make sure we can do the same thing again! */ + source_message[0]++; + source_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1]++; + + /* Place something on queue 0. */ + status = tx_queue_send(&queue_0, source_message, TX_NO_WAIT); + + if (status != TX_SUCCESS) + { + + /* Queue error. */ + printf("ERROR #8\n"); + test_control_return(1); + } + + /* Attempt to place something on a full queue. */ + status = tx_queue_send(&queue_0, source_message, TX_NO_WAIT); + + /* Should be an error. */ + if (status != TX_QUEUE_FULL) + { + + /* Queue error. */ + printf("ERROR #9\n"); + test_control_return(1); + } + + /* Attempt to receive something from queue 0. */ + status = tx_queue_receive(&queue_0, dest_message, TX_NO_WAIT); + + /* Should be successful and dest_message should equal source. */ + if ((status != TX_SUCCESS) || (source_message[0] != dest_message[0]) || + (source_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1] != dest_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1])) + { + + /* Queue error. */ + printf("ERROR #10\n"); + test_control_return(1); + } + + /* Attempt to receive something from an empty queue. */ + status = tx_queue_receive(&queue_0, dest_message, TX_NO_WAIT); + + /* Should be an error. */ + if (status != TX_QUEUE_EMPTY) + { + + /* Queue error. */ + printf("ERROR #11\n"); + test_control_return(1); + } + + /* Now we need to do the same thing with the queue with three entries. */ + + source_message[0]++; + source_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1]++; + expected_message[0] = source_message[0]; + expected_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1] = source_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1]; + + /* Place something on queue 1. */ + status = tx_queue_send(&queue_1, source_message, TX_NO_WAIT); + source_message[0]++; + source_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1]++; + status += tx_queue_send(&queue_1, source_message, TX_NO_WAIT); + source_message[0]++; + source_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1]++; + status += tx_queue_send(&queue_1, source_message, TX_NO_WAIT); + source_message[0]++; + source_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1]++; + + + if (status != TX_SUCCESS) + { + + /* Queue error. */ + printf("ERROR #12\n"); + test_control_return(1); + } + + /* Attempt to place something on a full queue. */ + status = tx_queue_send(&queue_1, source_message, TX_NO_WAIT); + + /* Should be an error. */ + if (status != TX_QUEUE_FULL) + { + + /* Queue error. */ + printf("ERROR #13\n"); + test_control_return(1); + } + + /* Attempt to receive something from queue 1. */ + status = tx_queue_receive(&queue_1, dest_message, TX_NO_WAIT); + + /* Should be successful and dest_message should equal source. */ + if ((status != TX_SUCCESS) || (expected_message[0] != dest_message[0]) || + (expected_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1] != dest_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1])) + { + + /* Queue error. */ + printf("ERROR #14\n"); + test_control_return(1); + } + + expected_message[0]++; + expected_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1]++; + + /* Attempt to receive something from queue 1. */ + status = tx_queue_receive(&queue_1, dest_message, TX_NO_WAIT); + + /* Should be successful and dest_message should equal source. */ + if ((status != TX_SUCCESS) || (expected_message[0] != dest_message[0]) || + (expected_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1] != dest_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1])) + { + + /* Queue error. */ + printf("ERROR #15\n"); + test_control_return(1); + } + + expected_message[0]++; + expected_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1]++; + + /* Attempt to receive something from queue 1. */ + status = tx_queue_receive(&queue_1, dest_message, TX_NO_WAIT); + + /* Should be successful and dest_message should equal source. */ + if ((status != TX_SUCCESS) || (expected_message[0] != dest_message[0]) || + (expected_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1] != dest_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1])) + { + + /* Queue error. */ + printf("ERROR #16\n"); + test_control_return(1); + } + + expected_message[0]++; + expected_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1]++; + + /* Attempt to receive something from an empty queue. */ + status = tx_queue_receive(&queue_1, dest_message, TX_NO_WAIT); + + /* Should be an error. */ + if (status != TX_QUEUE_EMPTY) + { + + /* Queue error. */ + printf("ERROR #17\n"); + test_control_return(1); + } + + /* Make sure we can do the same thing again! */ + + /* Place something on queue 1. */ + status = tx_queue_send(&queue_1, source_message, TX_NO_WAIT); + source_message[0]++; + source_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1]++; + status += tx_queue_send(&queue_1, source_message, TX_NO_WAIT); + source_message[0]++; + source_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1]++; + status += tx_queue_send(&queue_1, source_message, TX_NO_WAIT); + source_message[0]++; + source_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1]++; + + if (status != TX_SUCCESS) + { + + /* Queue error. */ + printf("ERROR #18\n"); + test_control_return(1); + } + + /* Attempt to place something on a full queue. */ + status = tx_queue_send(&queue_1, source_message, TX_NO_WAIT); + + /* Should be an error. */ + if (status != TX_QUEUE_FULL) + { + + /* Queue error. */ + printf("ERROR #19\n"); + test_control_return(1); + } + + /* Attempt to receive something from queue 1. */ + status = tx_queue_receive(&queue_1, dest_message, TX_NO_WAIT); + + /* Should be successful and dest_message should equal source. */ + if ((status != TX_SUCCESS) || (expected_message[0] != dest_message[0]) || + (expected_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1] != dest_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1])) + { + + /* Queue error. */ + printf("ERROR #20\n"); + test_control_return(1); + } + + expected_message[0]++; + expected_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1]++; + + /* Attempt to receive something from queue 1. */ + status = tx_queue_receive(&queue_1, dest_message, TX_NO_WAIT); + + /* Should be successful and dest_message should equal source. */ + if ((status != TX_SUCCESS) || (expected_message[0] != dest_message[0]) || + (expected_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1] != dest_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1])) + { + + /* Queue error. */ + printf("ERROR #21\n"); + test_control_return(1); + } + + expected_message[0]++; + expected_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1]++; + + /* Attempt to receive something from queue 1. */ + status = tx_queue_receive(&queue_1, dest_message, TX_NO_WAIT); + + /* Should be successful and dest_message should equal source. */ + if ((status != TX_SUCCESS) || (expected_message[0] != dest_message[0]) || + (expected_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1] != dest_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1])) + { + + /* Queue error. */ + printf("ERROR #22\n"); + test_control_return(1); + } + + expected_message[0]++; + expected_message[TX_QUEUE_MESSAGE_MAX_SIZE - 1]++; + + /* Attempt to receive something from an empty queue. */ + status = tx_queue_receive(&queue_1, dest_message, TX_NO_WAIT); + + /* Should be an error. */ + if (status != TX_QUEUE_EMPTY) + { + + /* Queue error. */ + printf("ERROR #23\n"); + test_control_return(1); + } + + /* Delete the queues. */ + status = tx_queue_delete(&queue_1); + if (status != TX_SUCCESS) + { + + /* Queue error. */ + printf("ERROR #24\n"); + test_control_return(1); + } + + status = tx_queue_delete(&queue_0); + if (status != TX_SUCCESS) + { + + /* Queue error. */ + printf("ERROR #25\n"); + test_control_return(1); + } + else + { + + /* Successful test. */ + printf("SUCCESS!\n"); + test_control_return(0); + } +} + +